// *** 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.ec2;

import com.pulumi.aws.ec2.inputs.VpcIpamOperatingRegionArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final VpcIpamArgs Empty = new VpcIpamArgs();

    /**
     * Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes.
     * 
     */
    @Import(name="cascade")
    private @Nullable Output<Boolean> cascade;

    /**
     * @return Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes.
     * 
     */
    public Optional<Output<Boolean>> cascade() {
        return Optional.ofNullable(this.cascade);
    }

    /**
     * A description for the IPAM.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return A description for the IPAM.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Determines which locales can be chosen when you create pools. Locale is the Region where you want to make an IPAM pool available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region. You specify a region using the region_name parameter. You **must** set your provider block region as an operating_region.
     * 
     */
    @Import(name="operatingRegions", required=true)
    private Output<List<VpcIpamOperatingRegionArgs>> operatingRegions;

    /**
     * @return Determines which locales can be chosen when you create pools. Locale is the Region where you want to make an IPAM pool available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region. You specify a region using the region_name parameter. You **must** set your provider block region as an operating_region.
     * 
     */
    public Output<List<VpcIpamOperatingRegionArgs>> operatingRegions() {
        return this.operatingRegions;
    }

    /**
     * A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    private VpcIpamArgs() {}

    private VpcIpamArgs(VpcIpamArgs $) {
        this.cascade = $.cascade;
        this.description = $.description;
        this.operatingRegions = $.operatingRegions;
        this.tags = $.tags;
    }

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

    public static final class Builder {
        private VpcIpamArgs $;

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

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

        /**
         * @param cascade Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes.
         * 
         * @return builder
         * 
         */
        public Builder cascade(@Nullable Output<Boolean> cascade) {
            $.cascade = cascade;
            return this;
        }

        /**
         * @param cascade Enables you to quickly delete an IPAM, private scopes, pools in private scopes, and any allocations in the pools in private scopes.
         * 
         * @return builder
         * 
         */
        public Builder cascade(Boolean cascade) {
            return cascade(Output.of(cascade));
        }

        /**
         * @param description A description for the IPAM.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description A description for the IPAM.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param operatingRegions Determines which locales can be chosen when you create pools. Locale is the Region where you want to make an IPAM pool available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region. You specify a region using the region_name parameter. You **must** set your provider block region as an operating_region.
         * 
         * @return builder
         * 
         */
        public Builder operatingRegions(Output<List<VpcIpamOperatingRegionArgs>> operatingRegions) {
            $.operatingRegions = operatingRegions;
            return this;
        }

        /**
         * @param operatingRegions Determines which locales can be chosen when you create pools. Locale is the Region where you want to make an IPAM pool available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region. You specify a region using the region_name parameter. You **must** set your provider block region as an operating_region.
         * 
         * @return builder
         * 
         */
        public Builder operatingRegions(List<VpcIpamOperatingRegionArgs> operatingRegions) {
            return operatingRegions(Output.of(operatingRegions));
        }

        /**
         * @param operatingRegions Determines which locales can be chosen when you create pools. Locale is the Region where you want to make an IPAM pool available for allocations. You can only create pools with locales that match the operating Regions of the IPAM. You can only create VPCs from a pool whose locale matches the VPC&#39;s Region. You specify a region using the region_name parameter. You **must** set your provider block region as an operating_region.
         * 
         * @return builder
         * 
         */
        public Builder operatingRegions(VpcIpamOperatingRegionArgs... operatingRegions) {
            return operatingRegions(List.of(operatingRegions));
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public VpcIpamArgs build() {
            $.operatingRegions = Objects.requireNonNull($.operatingRegions, "expected parameter 'operatingRegions' to be non-null");
            return $;
        }
    }

}
