// *** 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.aws.msk.inputs;

import com.pulumi.aws.msk.inputs.ClusterBrokerNodeGroupInfoConnectivityInfoArgs;
import com.pulumi.aws.msk.inputs.ClusterBrokerNodeGroupInfoStorageInfoArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ClusterBrokerNodeGroupInfoArgs Empty = new ClusterBrokerNodeGroupInfoArgs();

    /**
     * The distribution of broker nodes across availability zones ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-model-brokerazdistribution)). Currently the only valid value is `DEFAULT`.
     * 
     */
    @Import(name="azDistribution")
    private @Nullable Output<String> azDistribution;

    /**
     * @return The distribution of broker nodes across availability zones ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-model-brokerazdistribution)). Currently the only valid value is `DEFAULT`.
     * 
     */
    public Optional<Output<String>> azDistribution() {
        return Optional.ofNullable(this.azDistribution);
    }

    /**
     * A list of subnets to connect to in client VPC ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-prop-brokernodegroupinfo-clientsubnets)).
     * 
     */
    @Import(name="clientSubnets", required=true)
    private Output<List<String>> clientSubnets;

    /**
     * @return A list of subnets to connect to in client VPC ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-prop-brokernodegroupinfo-clientsubnets)).
     * 
     */
    public Output<List<String>> clientSubnets() {
        return this.clientSubnets;
    }

    /**
     * Information about the cluster access configuration. See below. For security reasons, you can&#39;t turn on public access while creating an MSK cluster. However, you can update an existing cluster to make it publicly accessible. You can also create a new cluster and then update it to make it publicly accessible ([documentation](https://docs.aws.amazon.com/msk/latest/developerguide/public-access.html)).
     * 
     */
    @Import(name="connectivityInfo")
    private @Nullable Output<ClusterBrokerNodeGroupInfoConnectivityInfoArgs> connectivityInfo;

    /**
     * @return Information about the cluster access configuration. See below. For security reasons, you can&#39;t turn on public access while creating an MSK cluster. However, you can update an existing cluster to make it publicly accessible. You can also create a new cluster and then update it to make it publicly accessible ([documentation](https://docs.aws.amazon.com/msk/latest/developerguide/public-access.html)).
     * 
     */
    public Optional<Output<ClusterBrokerNodeGroupInfoConnectivityInfoArgs>> connectivityInfo() {
        return Optional.ofNullable(this.connectivityInfo);
    }

    /**
     * The size in GiB of the EBS volume for the data drive on each broker node.
     * 
     * @deprecated
     * use &#39;storage_info&#39; argument instead
     * 
     */
    @Deprecated /* use 'storage_info' argument instead */
    @Import(name="ebsVolumeSize")
    private @Nullable Output<Integer> ebsVolumeSize;

    /**
     * @return The size in GiB of the EBS volume for the data drive on each broker node.
     * 
     * @deprecated
     * use &#39;storage_info&#39; argument instead
     * 
     */
    @Deprecated /* use 'storage_info' argument instead */
    public Optional<Output<Integer>> ebsVolumeSize() {
        return Optional.ofNullable(this.ebsVolumeSize);
    }

    /**
     * Specify the instance type to use for the kafka brokersE.g., kafka.m5.large. ([Pricing info](https://aws.amazon.com/msk/pricing/))
     * 
     */
    @Import(name="instanceType", required=true)
    private Output<String> instanceType;

    /**
     * @return Specify the instance type to use for the kafka brokersE.g., kafka.m5.large. ([Pricing info](https://aws.amazon.com/msk/pricing/))
     * 
     */
    public Output<String> instanceType() {
        return this.instanceType;
    }

    /**
     * A list of the security groups to associate with the elastic network interfaces to control who can communicate with the cluster.
     * 
     */
    @Import(name="securityGroups", required=true)
    private Output<List<String>> securityGroups;

    /**
     * @return A list of the security groups to associate with the elastic network interfaces to control who can communicate with the cluster.
     * 
     */
    public Output<List<String>> securityGroups() {
        return this.securityGroups;
    }

    /**
     * A block that contains information about storage volumes attached to MSK broker nodes. See below.
     * 
     */
    @Import(name="storageInfo")
    private @Nullable Output<ClusterBrokerNodeGroupInfoStorageInfoArgs> storageInfo;

    /**
     * @return A block that contains information about storage volumes attached to MSK broker nodes. See below.
     * 
     */
    public Optional<Output<ClusterBrokerNodeGroupInfoStorageInfoArgs>> storageInfo() {
        return Optional.ofNullable(this.storageInfo);
    }

    private ClusterBrokerNodeGroupInfoArgs() {}

    private ClusterBrokerNodeGroupInfoArgs(ClusterBrokerNodeGroupInfoArgs $) {
        this.azDistribution = $.azDistribution;
        this.clientSubnets = $.clientSubnets;
        this.connectivityInfo = $.connectivityInfo;
        this.ebsVolumeSize = $.ebsVolumeSize;
        this.instanceType = $.instanceType;
        this.securityGroups = $.securityGroups;
        this.storageInfo = $.storageInfo;
    }

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

    public static final class Builder {
        private ClusterBrokerNodeGroupInfoArgs $;

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

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

        /**
         * @param azDistribution The distribution of broker nodes across availability zones ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-model-brokerazdistribution)). Currently the only valid value is `DEFAULT`.
         * 
         * @return builder
         * 
         */
        public Builder azDistribution(@Nullable Output<String> azDistribution) {
            $.azDistribution = azDistribution;
            return this;
        }

        /**
         * @param azDistribution The distribution of broker nodes across availability zones ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-model-brokerazdistribution)). Currently the only valid value is `DEFAULT`.
         * 
         * @return builder
         * 
         */
        public Builder azDistribution(String azDistribution) {
            return azDistribution(Output.of(azDistribution));
        }

        /**
         * @param clientSubnets A list of subnets to connect to in client VPC ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-prop-brokernodegroupinfo-clientsubnets)).
         * 
         * @return builder
         * 
         */
        public Builder clientSubnets(Output<List<String>> clientSubnets) {
            $.clientSubnets = clientSubnets;
            return this;
        }

        /**
         * @param clientSubnets A list of subnets to connect to in client VPC ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-prop-brokernodegroupinfo-clientsubnets)).
         * 
         * @return builder
         * 
         */
        public Builder clientSubnets(List<String> clientSubnets) {
            return clientSubnets(Output.of(clientSubnets));
        }

        /**
         * @param clientSubnets A list of subnets to connect to in client VPC ([documentation](https://docs.aws.amazon.com/msk/1.0/apireference/clusters.html#clusters-prop-brokernodegroupinfo-clientsubnets)).
         * 
         * @return builder
         * 
         */
        public Builder clientSubnets(String... clientSubnets) {
            return clientSubnets(List.of(clientSubnets));
        }

        /**
         * @param connectivityInfo Information about the cluster access configuration. See below. For security reasons, you can&#39;t turn on public access while creating an MSK cluster. However, you can update an existing cluster to make it publicly accessible. You can also create a new cluster and then update it to make it publicly accessible ([documentation](https://docs.aws.amazon.com/msk/latest/developerguide/public-access.html)).
         * 
         * @return builder
         * 
         */
        public Builder connectivityInfo(@Nullable Output<ClusterBrokerNodeGroupInfoConnectivityInfoArgs> connectivityInfo) {
            $.connectivityInfo = connectivityInfo;
            return this;
        }

        /**
         * @param connectivityInfo Information about the cluster access configuration. See below. For security reasons, you can&#39;t turn on public access while creating an MSK cluster. However, you can update an existing cluster to make it publicly accessible. You can also create a new cluster and then update it to make it publicly accessible ([documentation](https://docs.aws.amazon.com/msk/latest/developerguide/public-access.html)).
         * 
         * @return builder
         * 
         */
        public Builder connectivityInfo(ClusterBrokerNodeGroupInfoConnectivityInfoArgs connectivityInfo) {
            return connectivityInfo(Output.of(connectivityInfo));
        }

        /**
         * @param ebsVolumeSize The size in GiB of the EBS volume for the data drive on each broker node.
         * 
         * @return builder
         * 
         * @deprecated
         * use &#39;storage_info&#39; argument instead
         * 
         */
        @Deprecated /* use 'storage_info' argument instead */
        public Builder ebsVolumeSize(@Nullable Output<Integer> ebsVolumeSize) {
            $.ebsVolumeSize = ebsVolumeSize;
            return this;
        }

        /**
         * @param ebsVolumeSize The size in GiB of the EBS volume for the data drive on each broker node.
         * 
         * @return builder
         * 
         * @deprecated
         * use &#39;storage_info&#39; argument instead
         * 
         */
        @Deprecated /* use 'storage_info' argument instead */
        public Builder ebsVolumeSize(Integer ebsVolumeSize) {
            return ebsVolumeSize(Output.of(ebsVolumeSize));
        }

        /**
         * @param instanceType Specify the instance type to use for the kafka brokersE.g., kafka.m5.large. ([Pricing info](https://aws.amazon.com/msk/pricing/))
         * 
         * @return builder
         * 
         */
        public Builder instanceType(Output<String> instanceType) {
            $.instanceType = instanceType;
            return this;
        }

        /**
         * @param instanceType Specify the instance type to use for the kafka brokersE.g., kafka.m5.large. ([Pricing info](https://aws.amazon.com/msk/pricing/))
         * 
         * @return builder
         * 
         */
        public Builder instanceType(String instanceType) {
            return instanceType(Output.of(instanceType));
        }

        /**
         * @param securityGroups A list of the security groups to associate with the elastic network interfaces to control who can communicate with the cluster.
         * 
         * @return builder
         * 
         */
        public Builder securityGroups(Output<List<String>> securityGroups) {
            $.securityGroups = securityGroups;
            return this;
        }

        /**
         * @param securityGroups A list of the security groups to associate with the elastic network interfaces to control who can communicate with the cluster.
         * 
         * @return builder
         * 
         */
        public Builder securityGroups(List<String> securityGroups) {
            return securityGroups(Output.of(securityGroups));
        }

        /**
         * @param securityGroups A list of the security groups to associate with the elastic network interfaces to control who can communicate with the cluster.
         * 
         * @return builder
         * 
         */
        public Builder securityGroups(String... securityGroups) {
            return securityGroups(List.of(securityGroups));
        }

        /**
         * @param storageInfo A block that contains information about storage volumes attached to MSK broker nodes. See below.
         * 
         * @return builder
         * 
         */
        public Builder storageInfo(@Nullable Output<ClusterBrokerNodeGroupInfoStorageInfoArgs> storageInfo) {
            $.storageInfo = storageInfo;
            return this;
        }

        /**
         * @param storageInfo A block that contains information about storage volumes attached to MSK broker nodes. See below.
         * 
         * @return builder
         * 
         */
        public Builder storageInfo(ClusterBrokerNodeGroupInfoStorageInfoArgs storageInfo) {
            return storageInfo(Output.of(storageInfo));
        }

        public ClusterBrokerNodeGroupInfoArgs build() {
            $.clientSubnets = Objects.requireNonNull($.clientSubnets, "expected parameter 'clientSubnets' to be non-null");
            $.instanceType = Objects.requireNonNull($.instanceType, "expected parameter 'instanceType' to be non-null");
            $.securityGroups = Objects.requireNonNull($.securityGroups, "expected parameter 'securityGroups' to be non-null");
            return $;
        }
    }

}
