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

import com.pulumi.core.annotations.CustomType;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerAllInstancesConfig;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerAutoHealingPolicy;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerInstanceLifecyclePolicy;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerNamedPort;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulDisk;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulExternalIp;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatefulInternalIp;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerStatus;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerUpdatePolicy;
import com.pulumi.gcp.compute.outputs.GetInstanceGroupManagerVersion;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class GetInstanceGroupManagerResult {
    private List<GetInstanceGroupManagerAllInstancesConfig> allInstancesConfigs;
    private List<GetInstanceGroupManagerAutoHealingPolicy> autoHealingPolicies;
    private String baseInstanceName;
    private String description;
    private String fingerprint;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    private String instanceGroup;
    private List<GetInstanceGroupManagerInstanceLifecyclePolicy> instanceLifecyclePolicies;
    private String listManagedInstancesResults;
    private @Nullable String name;
    private List<GetInstanceGroupManagerNamedPort> namedPorts;
    private String operation;
    private @Nullable String project;
    private @Nullable String selfLink;
    private List<GetInstanceGroupManagerStatefulDisk> statefulDisks;
    private List<GetInstanceGroupManagerStatefulExternalIp> statefulExternalIps;
    private List<GetInstanceGroupManagerStatefulInternalIp> statefulInternalIps;
    private List<GetInstanceGroupManagerStatus> statuses;
    private List<String> targetPools;
    private Integer targetSize;
    private List<GetInstanceGroupManagerUpdatePolicy> updatePolicies;
    private List<GetInstanceGroupManagerVersion> versions;
    private Boolean waitForInstances;
    private String waitForInstancesStatus;
    private @Nullable String zone;

    private GetInstanceGroupManagerResult() {}
    public List<GetInstanceGroupManagerAllInstancesConfig> allInstancesConfigs() {
        return this.allInstancesConfigs;
    }
    public List<GetInstanceGroupManagerAutoHealingPolicy> autoHealingPolicies() {
        return this.autoHealingPolicies;
    }
    public String baseInstanceName() {
        return this.baseInstanceName;
    }
    public String description() {
        return this.description;
    }
    public String fingerprint() {
        return this.fingerprint;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    public String instanceGroup() {
        return this.instanceGroup;
    }
    public List<GetInstanceGroupManagerInstanceLifecyclePolicy> instanceLifecyclePolicies() {
        return this.instanceLifecyclePolicies;
    }
    public String listManagedInstancesResults() {
        return this.listManagedInstancesResults;
    }
    public Optional<String> name() {
        return Optional.ofNullable(this.name);
    }
    public List<GetInstanceGroupManagerNamedPort> namedPorts() {
        return this.namedPorts;
    }
    public String operation() {
        return this.operation;
    }
    public Optional<String> project() {
        return Optional.ofNullable(this.project);
    }
    public Optional<String> selfLink() {
        return Optional.ofNullable(this.selfLink);
    }
    public List<GetInstanceGroupManagerStatefulDisk> statefulDisks() {
        return this.statefulDisks;
    }
    public List<GetInstanceGroupManagerStatefulExternalIp> statefulExternalIps() {
        return this.statefulExternalIps;
    }
    public List<GetInstanceGroupManagerStatefulInternalIp> statefulInternalIps() {
        return this.statefulInternalIps;
    }
    public List<GetInstanceGroupManagerStatus> statuses() {
        return this.statuses;
    }
    public List<String> targetPools() {
        return this.targetPools;
    }
    public Integer targetSize() {
        return this.targetSize;
    }
    public List<GetInstanceGroupManagerUpdatePolicy> updatePolicies() {
        return this.updatePolicies;
    }
    public List<GetInstanceGroupManagerVersion> versions() {
        return this.versions;
    }
    public Boolean waitForInstances() {
        return this.waitForInstances;
    }
    public String waitForInstancesStatus() {
        return this.waitForInstancesStatus;
    }
    public Optional<String> zone() {
        return Optional.ofNullable(this.zone);
    }

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

    public static Builder builder(GetInstanceGroupManagerResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private List<GetInstanceGroupManagerAllInstancesConfig> allInstancesConfigs;
        private List<GetInstanceGroupManagerAutoHealingPolicy> autoHealingPolicies;
        private String baseInstanceName;
        private String description;
        private String fingerprint;
        private String id;
        private String instanceGroup;
        private List<GetInstanceGroupManagerInstanceLifecyclePolicy> instanceLifecyclePolicies;
        private String listManagedInstancesResults;
        private @Nullable String name;
        private List<GetInstanceGroupManagerNamedPort> namedPorts;
        private String operation;
        private @Nullable String project;
        private @Nullable String selfLink;
        private List<GetInstanceGroupManagerStatefulDisk> statefulDisks;
        private List<GetInstanceGroupManagerStatefulExternalIp> statefulExternalIps;
        private List<GetInstanceGroupManagerStatefulInternalIp> statefulInternalIps;
        private List<GetInstanceGroupManagerStatus> statuses;
        private List<String> targetPools;
        private Integer targetSize;
        private List<GetInstanceGroupManagerUpdatePolicy> updatePolicies;
        private List<GetInstanceGroupManagerVersion> versions;
        private Boolean waitForInstances;
        private String waitForInstancesStatus;
        private @Nullable String zone;
        public Builder() {}
        public Builder(GetInstanceGroupManagerResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.allInstancesConfigs = defaults.allInstancesConfigs;
    	      this.autoHealingPolicies = defaults.autoHealingPolicies;
    	      this.baseInstanceName = defaults.baseInstanceName;
    	      this.description = defaults.description;
    	      this.fingerprint = defaults.fingerprint;
    	      this.id = defaults.id;
    	      this.instanceGroup = defaults.instanceGroup;
    	      this.instanceLifecyclePolicies = defaults.instanceLifecyclePolicies;
    	      this.listManagedInstancesResults = defaults.listManagedInstancesResults;
    	      this.name = defaults.name;
    	      this.namedPorts = defaults.namedPorts;
    	      this.operation = defaults.operation;
    	      this.project = defaults.project;
    	      this.selfLink = defaults.selfLink;
    	      this.statefulDisks = defaults.statefulDisks;
    	      this.statefulExternalIps = defaults.statefulExternalIps;
    	      this.statefulInternalIps = defaults.statefulInternalIps;
    	      this.statuses = defaults.statuses;
    	      this.targetPools = defaults.targetPools;
    	      this.targetSize = defaults.targetSize;
    	      this.updatePolicies = defaults.updatePolicies;
    	      this.versions = defaults.versions;
    	      this.waitForInstances = defaults.waitForInstances;
    	      this.waitForInstancesStatus = defaults.waitForInstancesStatus;
    	      this.zone = defaults.zone;
        }

        @CustomType.Setter
        public Builder allInstancesConfigs(List<GetInstanceGroupManagerAllInstancesConfig> allInstancesConfigs) {
            this.allInstancesConfigs = Objects.requireNonNull(allInstancesConfigs);
            return this;
        }
        public Builder allInstancesConfigs(GetInstanceGroupManagerAllInstancesConfig... allInstancesConfigs) {
            return allInstancesConfigs(List.of(allInstancesConfigs));
        }
        @CustomType.Setter
        public Builder autoHealingPolicies(List<GetInstanceGroupManagerAutoHealingPolicy> autoHealingPolicies) {
            this.autoHealingPolicies = Objects.requireNonNull(autoHealingPolicies);
            return this;
        }
        public Builder autoHealingPolicies(GetInstanceGroupManagerAutoHealingPolicy... autoHealingPolicies) {
            return autoHealingPolicies(List.of(autoHealingPolicies));
        }
        @CustomType.Setter
        public Builder baseInstanceName(String baseInstanceName) {
            this.baseInstanceName = Objects.requireNonNull(baseInstanceName);
            return this;
        }
        @CustomType.Setter
        public Builder description(String description) {
            this.description = Objects.requireNonNull(description);
            return this;
        }
        @CustomType.Setter
        public Builder fingerprint(String fingerprint) {
            this.fingerprint = Objects.requireNonNull(fingerprint);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder instanceGroup(String instanceGroup) {
            this.instanceGroup = Objects.requireNonNull(instanceGroup);
            return this;
        }
        @CustomType.Setter
        public Builder instanceLifecyclePolicies(List<GetInstanceGroupManagerInstanceLifecyclePolicy> instanceLifecyclePolicies) {
            this.instanceLifecyclePolicies = Objects.requireNonNull(instanceLifecyclePolicies);
            return this;
        }
        public Builder instanceLifecyclePolicies(GetInstanceGroupManagerInstanceLifecyclePolicy... instanceLifecyclePolicies) {
            return instanceLifecyclePolicies(List.of(instanceLifecyclePolicies));
        }
        @CustomType.Setter
        public Builder listManagedInstancesResults(String listManagedInstancesResults) {
            this.listManagedInstancesResults = Objects.requireNonNull(listManagedInstancesResults);
            return this;
        }
        @CustomType.Setter
        public Builder name(@Nullable String name) {
            this.name = name;
            return this;
        }
        @CustomType.Setter
        public Builder namedPorts(List<GetInstanceGroupManagerNamedPort> namedPorts) {
            this.namedPorts = Objects.requireNonNull(namedPorts);
            return this;
        }
        public Builder namedPorts(GetInstanceGroupManagerNamedPort... namedPorts) {
            return namedPorts(List.of(namedPorts));
        }
        @CustomType.Setter
        public Builder operation(String operation) {
            this.operation = Objects.requireNonNull(operation);
            return this;
        }
        @CustomType.Setter
        public Builder project(@Nullable String project) {
            this.project = project;
            return this;
        }
        @CustomType.Setter
        public Builder selfLink(@Nullable String selfLink) {
            this.selfLink = selfLink;
            return this;
        }
        @CustomType.Setter
        public Builder statefulDisks(List<GetInstanceGroupManagerStatefulDisk> statefulDisks) {
            this.statefulDisks = Objects.requireNonNull(statefulDisks);
            return this;
        }
        public Builder statefulDisks(GetInstanceGroupManagerStatefulDisk... statefulDisks) {
            return statefulDisks(List.of(statefulDisks));
        }
        @CustomType.Setter
        public Builder statefulExternalIps(List<GetInstanceGroupManagerStatefulExternalIp> statefulExternalIps) {
            this.statefulExternalIps = Objects.requireNonNull(statefulExternalIps);
            return this;
        }
        public Builder statefulExternalIps(GetInstanceGroupManagerStatefulExternalIp... statefulExternalIps) {
            return statefulExternalIps(List.of(statefulExternalIps));
        }
        @CustomType.Setter
        public Builder statefulInternalIps(List<GetInstanceGroupManagerStatefulInternalIp> statefulInternalIps) {
            this.statefulInternalIps = Objects.requireNonNull(statefulInternalIps);
            return this;
        }
        public Builder statefulInternalIps(GetInstanceGroupManagerStatefulInternalIp... statefulInternalIps) {
            return statefulInternalIps(List.of(statefulInternalIps));
        }
        @CustomType.Setter
        public Builder statuses(List<GetInstanceGroupManagerStatus> statuses) {
            this.statuses = Objects.requireNonNull(statuses);
            return this;
        }
        public Builder statuses(GetInstanceGroupManagerStatus... statuses) {
            return statuses(List.of(statuses));
        }
        @CustomType.Setter
        public Builder targetPools(List<String> targetPools) {
            this.targetPools = Objects.requireNonNull(targetPools);
            return this;
        }
        public Builder targetPools(String... targetPools) {
            return targetPools(List.of(targetPools));
        }
        @CustomType.Setter
        public Builder targetSize(Integer targetSize) {
            this.targetSize = Objects.requireNonNull(targetSize);
            return this;
        }
        @CustomType.Setter
        public Builder updatePolicies(List<GetInstanceGroupManagerUpdatePolicy> updatePolicies) {
            this.updatePolicies = Objects.requireNonNull(updatePolicies);
            return this;
        }
        public Builder updatePolicies(GetInstanceGroupManagerUpdatePolicy... updatePolicies) {
            return updatePolicies(List.of(updatePolicies));
        }
        @CustomType.Setter
        public Builder versions(List<GetInstanceGroupManagerVersion> versions) {
            this.versions = Objects.requireNonNull(versions);
            return this;
        }
        public Builder versions(GetInstanceGroupManagerVersion... versions) {
            return versions(List.of(versions));
        }
        @CustomType.Setter
        public Builder waitForInstances(Boolean waitForInstances) {
            this.waitForInstances = Objects.requireNonNull(waitForInstances);
            return this;
        }
        @CustomType.Setter
        public Builder waitForInstancesStatus(String waitForInstancesStatus) {
            this.waitForInstancesStatus = Objects.requireNonNull(waitForInstancesStatus);
            return this;
        }
        @CustomType.Setter
        public Builder zone(@Nullable String zone) {
            this.zone = zone;
            return this;
        }
        public GetInstanceGroupManagerResult build() {
            final var o = new GetInstanceGroupManagerResult();
            o.allInstancesConfigs = allInstancesConfigs;
            o.autoHealingPolicies = autoHealingPolicies;
            o.baseInstanceName = baseInstanceName;
            o.description = description;
            o.fingerprint = fingerprint;
            o.id = id;
            o.instanceGroup = instanceGroup;
            o.instanceLifecyclePolicies = instanceLifecyclePolicies;
            o.listManagedInstancesResults = listManagedInstancesResults;
            o.name = name;
            o.namedPorts = namedPorts;
            o.operation = operation;
            o.project = project;
            o.selfLink = selfLink;
            o.statefulDisks = statefulDisks;
            o.statefulExternalIps = statefulExternalIps;
            o.statefulInternalIps = statefulInternalIps;
            o.statuses = statuses;
            o.targetPools = targetPools;
            o.targetSize = targetSize;
            o.updatePolicies = updatePolicies;
            o.versions = versions;
            o.waitForInstances = waitForInstances;
            o.waitForInstancesStatus = waitForInstancesStatus;
            o.zone = zone;
            return o;
        }
    }
}
