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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs;
import com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final PatchDeploymentPatchConfigPreStepArgs Empty = new PatchDeploymentPatchConfigPreStepArgs();

    /**
     * The ExecStepConfig for all Linux VMs targeted by the PatchJob.
     * Structure is documented below.
     * 
     */
    @Import(name="linuxExecStepConfig")
    private @Nullable Output<PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs> linuxExecStepConfig;

    /**
     * @return The ExecStepConfig for all Linux VMs targeted by the PatchJob.
     * Structure is documented below.
     * 
     */
    public Optional<Output<PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs>> linuxExecStepConfig() {
        return Optional.ofNullable(this.linuxExecStepConfig);
    }

    /**
     * The ExecStepConfig for all Windows VMs targeted by the PatchJob.
     * Structure is documented below.
     * 
     */
    @Import(name="windowsExecStepConfig")
    private @Nullable Output<PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs> windowsExecStepConfig;

    /**
     * @return The ExecStepConfig for all Windows VMs targeted by the PatchJob.
     * Structure is documented below.
     * 
     */
    public Optional<Output<PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs>> windowsExecStepConfig() {
        return Optional.ofNullable(this.windowsExecStepConfig);
    }

    private PatchDeploymentPatchConfigPreStepArgs() {}

    private PatchDeploymentPatchConfigPreStepArgs(PatchDeploymentPatchConfigPreStepArgs $) {
        this.linuxExecStepConfig = $.linuxExecStepConfig;
        this.windowsExecStepConfig = $.windowsExecStepConfig;
    }

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

    public static final class Builder {
        private PatchDeploymentPatchConfigPreStepArgs $;

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

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

        /**
         * @param linuxExecStepConfig The ExecStepConfig for all Linux VMs targeted by the PatchJob.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder linuxExecStepConfig(@Nullable Output<PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs> linuxExecStepConfig) {
            $.linuxExecStepConfig = linuxExecStepConfig;
            return this;
        }

        /**
         * @param linuxExecStepConfig The ExecStepConfig for all Linux VMs targeted by the PatchJob.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder linuxExecStepConfig(PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs linuxExecStepConfig) {
            return linuxExecStepConfig(Output.of(linuxExecStepConfig));
        }

        /**
         * @param windowsExecStepConfig The ExecStepConfig for all Windows VMs targeted by the PatchJob.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder windowsExecStepConfig(@Nullable Output<PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs> windowsExecStepConfig) {
            $.windowsExecStepConfig = windowsExecStepConfig;
            return this;
        }

        /**
         * @param windowsExecStepConfig The ExecStepConfig for all Windows VMs targeted by the PatchJob.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder windowsExecStepConfig(PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs windowsExecStepConfig) {
            return windowsExecStepConfig(Output.of(windowsExecStepConfig));
        }

        public PatchDeploymentPatchConfigPreStepArgs build() {
            return $;
        }
    }

}
