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

import com.pulumi.aws.imagebuilder.outputs.GetInfrastructureConfigurationInstanceMetadataOption;
import com.pulumi.aws.imagebuilder.outputs.GetInfrastructureConfigurationLogging;
import com.pulumi.core.annotations.CustomType;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@CustomType
public final class GetInfrastructureConfigurationResult {
    private String arn;
    /**
     * @return Date the infrastructure configuration was updated.
     * 
     */
    private String dateCreated;
    private String dateUpdated;
    /**
     * @return Description of the infrastructure configuration.
     * 
     */
    private String description;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    /**
     * @return Nested list of instance metadata options for the HTTP requests that pipeline builds use to launch EC2 build and test instances.
     * 
     */
    private List<GetInfrastructureConfigurationInstanceMetadataOption> instanceMetadataOptions;
    /**
     * @return Name of the IAM Instance Profile associated with the configuration.
     * 
     */
    private String instanceProfileName;
    /**
     * @return Set of EC2 Instance Types associated with the configuration.
     * 
     */
    private List<String> instanceTypes;
    /**
     * @return Name of the EC2 Key Pair associated with the configuration.
     * 
     */
    private String keyPair;
    /**
     * @return Nested list of logging settings.
     * 
     */
    private List<GetInfrastructureConfigurationLogging> loggings;
    /**
     * @return Name of the infrastructure configuration.
     * 
     */
    private String name;
    /**
     * @return Key-value map of resource tags for the infrastructure created by the infrastructure configuration.
     * 
     */
    private Map<String,String> resourceTags;
    /**
     * @return Set of EC2 Security Group identifiers associated with the configuration.
     * 
     */
    private List<String> securityGroupIds;
    /**
     * @return ARN of the SNS Topic associated with the configuration.
     * 
     */
    private String snsTopicArn;
    /**
     * @return Identifier of the EC2 Subnet associated with the configuration.
     * 
     */
    private String subnetId;
    /**
     * @return Key-value map of resource tags for the infrastructure configuration.
     * 
     */
    private Map<String,String> tags;
    /**
     * @return Whether instances are terminated on failure.
     * 
     */
    private Boolean terminateInstanceOnFailure;

    private GetInfrastructureConfigurationResult() {}
    public String arn() {
        return this.arn;
    }
    /**
     * @return Date the infrastructure configuration was updated.
     * 
     */
    public String dateCreated() {
        return this.dateCreated;
    }
    public String dateUpdated() {
        return this.dateUpdated;
    }
    /**
     * @return Description of the infrastructure configuration.
     * 
     */
    public String description() {
        return this.description;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    /**
     * @return Nested list of instance metadata options for the HTTP requests that pipeline builds use to launch EC2 build and test instances.
     * 
     */
    public List<GetInfrastructureConfigurationInstanceMetadataOption> instanceMetadataOptions() {
        return this.instanceMetadataOptions;
    }
    /**
     * @return Name of the IAM Instance Profile associated with the configuration.
     * 
     */
    public String instanceProfileName() {
        return this.instanceProfileName;
    }
    /**
     * @return Set of EC2 Instance Types associated with the configuration.
     * 
     */
    public List<String> instanceTypes() {
        return this.instanceTypes;
    }
    /**
     * @return Name of the EC2 Key Pair associated with the configuration.
     * 
     */
    public String keyPair() {
        return this.keyPair;
    }
    /**
     * @return Nested list of logging settings.
     * 
     */
    public List<GetInfrastructureConfigurationLogging> loggings() {
        return this.loggings;
    }
    /**
     * @return Name of the infrastructure configuration.
     * 
     */
    public String name() {
        return this.name;
    }
    /**
     * @return Key-value map of resource tags for the infrastructure created by the infrastructure configuration.
     * 
     */
    public Map<String,String> resourceTags() {
        return this.resourceTags;
    }
    /**
     * @return Set of EC2 Security Group identifiers associated with the configuration.
     * 
     */
    public List<String> securityGroupIds() {
        return this.securityGroupIds;
    }
    /**
     * @return ARN of the SNS Topic associated with the configuration.
     * 
     */
    public String snsTopicArn() {
        return this.snsTopicArn;
    }
    /**
     * @return Identifier of the EC2 Subnet associated with the configuration.
     * 
     */
    public String subnetId() {
        return this.subnetId;
    }
    /**
     * @return Key-value map of resource tags for the infrastructure configuration.
     * 
     */
    public Map<String,String> tags() {
        return this.tags;
    }
    /**
     * @return Whether instances are terminated on failure.
     * 
     */
    public Boolean terminateInstanceOnFailure() {
        return this.terminateInstanceOnFailure;
    }

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

    public static Builder builder(GetInfrastructureConfigurationResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private String arn;
        private String dateCreated;
        private String dateUpdated;
        private String description;
        private String id;
        private List<GetInfrastructureConfigurationInstanceMetadataOption> instanceMetadataOptions;
        private String instanceProfileName;
        private List<String> instanceTypes;
        private String keyPair;
        private List<GetInfrastructureConfigurationLogging> loggings;
        private String name;
        private Map<String,String> resourceTags;
        private List<String> securityGroupIds;
        private String snsTopicArn;
        private String subnetId;
        private Map<String,String> tags;
        private Boolean terminateInstanceOnFailure;
        public Builder() {}
        public Builder(GetInfrastructureConfigurationResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.arn = defaults.arn;
    	      this.dateCreated = defaults.dateCreated;
    	      this.dateUpdated = defaults.dateUpdated;
    	      this.description = defaults.description;
    	      this.id = defaults.id;
    	      this.instanceMetadataOptions = defaults.instanceMetadataOptions;
    	      this.instanceProfileName = defaults.instanceProfileName;
    	      this.instanceTypes = defaults.instanceTypes;
    	      this.keyPair = defaults.keyPair;
    	      this.loggings = defaults.loggings;
    	      this.name = defaults.name;
    	      this.resourceTags = defaults.resourceTags;
    	      this.securityGroupIds = defaults.securityGroupIds;
    	      this.snsTopicArn = defaults.snsTopicArn;
    	      this.subnetId = defaults.subnetId;
    	      this.tags = defaults.tags;
    	      this.terminateInstanceOnFailure = defaults.terminateInstanceOnFailure;
        }

        @CustomType.Setter
        public Builder arn(String arn) {
            this.arn = Objects.requireNonNull(arn);
            return this;
        }
        @CustomType.Setter
        public Builder dateCreated(String dateCreated) {
            this.dateCreated = Objects.requireNonNull(dateCreated);
            return this;
        }
        @CustomType.Setter
        public Builder dateUpdated(String dateUpdated) {
            this.dateUpdated = Objects.requireNonNull(dateUpdated);
            return this;
        }
        @CustomType.Setter
        public Builder description(String description) {
            this.description = Objects.requireNonNull(description);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder instanceMetadataOptions(List<GetInfrastructureConfigurationInstanceMetadataOption> instanceMetadataOptions) {
            this.instanceMetadataOptions = Objects.requireNonNull(instanceMetadataOptions);
            return this;
        }
        public Builder instanceMetadataOptions(GetInfrastructureConfigurationInstanceMetadataOption... instanceMetadataOptions) {
            return instanceMetadataOptions(List.of(instanceMetadataOptions));
        }
        @CustomType.Setter
        public Builder instanceProfileName(String instanceProfileName) {
            this.instanceProfileName = Objects.requireNonNull(instanceProfileName);
            return this;
        }
        @CustomType.Setter
        public Builder instanceTypes(List<String> instanceTypes) {
            this.instanceTypes = Objects.requireNonNull(instanceTypes);
            return this;
        }
        public Builder instanceTypes(String... instanceTypes) {
            return instanceTypes(List.of(instanceTypes));
        }
        @CustomType.Setter
        public Builder keyPair(String keyPair) {
            this.keyPair = Objects.requireNonNull(keyPair);
            return this;
        }
        @CustomType.Setter
        public Builder loggings(List<GetInfrastructureConfigurationLogging> loggings) {
            this.loggings = Objects.requireNonNull(loggings);
            return this;
        }
        public Builder loggings(GetInfrastructureConfigurationLogging... loggings) {
            return loggings(List.of(loggings));
        }
        @CustomType.Setter
        public Builder name(String name) {
            this.name = Objects.requireNonNull(name);
            return this;
        }
        @CustomType.Setter
        public Builder resourceTags(Map<String,String> resourceTags) {
            this.resourceTags = Objects.requireNonNull(resourceTags);
            return this;
        }
        @CustomType.Setter
        public Builder securityGroupIds(List<String> securityGroupIds) {
            this.securityGroupIds = Objects.requireNonNull(securityGroupIds);
            return this;
        }
        public Builder securityGroupIds(String... securityGroupIds) {
            return securityGroupIds(List.of(securityGroupIds));
        }
        @CustomType.Setter
        public Builder snsTopicArn(String snsTopicArn) {
            this.snsTopicArn = Objects.requireNonNull(snsTopicArn);
            return this;
        }
        @CustomType.Setter
        public Builder subnetId(String subnetId) {
            this.subnetId = Objects.requireNonNull(subnetId);
            return this;
        }
        @CustomType.Setter
        public Builder tags(Map<String,String> tags) {
            this.tags = Objects.requireNonNull(tags);
            return this;
        }
        @CustomType.Setter
        public Builder terminateInstanceOnFailure(Boolean terminateInstanceOnFailure) {
            this.terminateInstanceOnFailure = Objects.requireNonNull(terminateInstanceOnFailure);
            return this;
        }
        public GetInfrastructureConfigurationResult build() {
            final var o = new GetInfrastructureConfigurationResult();
            o.arn = arn;
            o.dateCreated = dateCreated;
            o.dateUpdated = dateUpdated;
            o.description = description;
            o.id = id;
            o.instanceMetadataOptions = instanceMetadataOptions;
            o.instanceProfileName = instanceProfileName;
            o.instanceTypes = instanceTypes;
            o.keyPair = keyPair;
            o.loggings = loggings;
            o.name = name;
            o.resourceTags = resourceTags;
            o.securityGroupIds = securityGroupIds;
            o.snsTopicArn = snsTopicArn;
            o.subnetId = subnetId;
            o.tags = tags;
            o.terminateInstanceOnFailure = terminateInstanceOnFailure;
            return o;
        }
    }
}
