// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.batch.inputs;

import com.pulumi.azure.batch.inputs.PoolContainerConfigurationContainerRegistryArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class PoolContainerConfigurationArgs extends com.pulumi.resources.ResourceArgs {

    public static final PoolContainerConfigurationArgs Empty = new PoolContainerConfigurationArgs();

    /**
     * A list of container image names to use, as would be specified by `docker pull`. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="containerImageNames")
    private @Nullable Output<List<String>> containerImageNames;

    /**
     * @return A list of container image names to use, as would be specified by `docker pull`. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<List<String>>> containerImageNames() {
        return Optional.ofNullable(this.containerImageNames);
    }

    /**
     * One or more `container_registries` blocks as defined below. Additional container registries from which container images can be pulled by the pool&#39;s VMs. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="containerRegistries")
    private @Nullable Output<List<PoolContainerConfigurationContainerRegistryArgs>> containerRegistries;

    /**
     * @return One or more `container_registries` blocks as defined below. Additional container registries from which container images can be pulled by the pool&#39;s VMs. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<List<PoolContainerConfigurationContainerRegistryArgs>>> containerRegistries() {
        return Optional.ofNullable(this.containerRegistries);
    }

    /**
     * The type of container configuration. Possible value is `DockerCompatible`.
     * 
     */
    @Import(name="type")
    private @Nullable Output<String> type;

    /**
     * @return The type of container configuration. Possible value is `DockerCompatible`.
     * 
     */
    public Optional<Output<String>> type() {
        return Optional.ofNullable(this.type);
    }

    private PoolContainerConfigurationArgs() {}

    private PoolContainerConfigurationArgs(PoolContainerConfigurationArgs $) {
        this.containerImageNames = $.containerImageNames;
        this.containerRegistries = $.containerRegistries;
        this.type = $.type;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(PoolContainerConfigurationArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private PoolContainerConfigurationArgs $;

        public Builder() {
            $ = new PoolContainerConfigurationArgs();
        }

        public Builder(PoolContainerConfigurationArgs defaults) {
            $ = new PoolContainerConfigurationArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param containerImageNames A list of container image names to use, as would be specified by `docker pull`. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerImageNames(@Nullable Output<List<String>> containerImageNames) {
            $.containerImageNames = containerImageNames;
            return this;
        }

        /**
         * @param containerImageNames A list of container image names to use, as would be specified by `docker pull`. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerImageNames(List<String> containerImageNames) {
            return containerImageNames(Output.of(containerImageNames));
        }

        /**
         * @param containerImageNames A list of container image names to use, as would be specified by `docker pull`. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerImageNames(String... containerImageNames) {
            return containerImageNames(List.of(containerImageNames));
        }

        /**
         * @param containerRegistries One or more `container_registries` blocks as defined below. Additional container registries from which container images can be pulled by the pool&#39;s VMs. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistries(@Nullable Output<List<PoolContainerConfigurationContainerRegistryArgs>> containerRegistries) {
            $.containerRegistries = containerRegistries;
            return this;
        }

        /**
         * @param containerRegistries One or more `container_registries` blocks as defined below. Additional container registries from which container images can be pulled by the pool&#39;s VMs. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistries(List<PoolContainerConfigurationContainerRegistryArgs> containerRegistries) {
            return containerRegistries(Output.of(containerRegistries));
        }

        /**
         * @param containerRegistries One or more `container_registries` blocks as defined below. Additional container registries from which container images can be pulled by the pool&#39;s VMs. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistries(PoolContainerConfigurationContainerRegistryArgs... containerRegistries) {
            return containerRegistries(List.of(containerRegistries));
        }

        /**
         * @param type The type of container configuration. Possible value is `DockerCompatible`.
         * 
         * @return builder
         * 
         */
        public Builder type(@Nullable Output<String> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type The type of container configuration. Possible value is `DockerCompatible`.
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Output.of(type));
        }

        public PoolContainerConfigurationArgs build() {
            return $;
        }
    }

}
