# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'GuestPoliciesAssignmentArgs',
    'GuestPoliciesAssignmentGroupLabelArgs',
    'GuestPoliciesAssignmentOsTypeArgs',
    'GuestPoliciesPackageArgs',
    'GuestPoliciesPackageRepositoryArgs',
    'GuestPoliciesPackageRepositoryAptArgs',
    'GuestPoliciesPackageRepositoryGooArgs',
    'GuestPoliciesPackageRepositoryYumArgs',
    'GuestPoliciesPackageRepositoryZypperArgs',
    'GuestPoliciesRecipeArgs',
    'GuestPoliciesRecipeArtifactArgs',
    'GuestPoliciesRecipeArtifactGcsArgs',
    'GuestPoliciesRecipeArtifactRemoteArgs',
    'GuestPoliciesRecipeInstallStepArgs',
    'GuestPoliciesRecipeInstallStepArchiveExtractionArgs',
    'GuestPoliciesRecipeInstallStepDpkgInstallationArgs',
    'GuestPoliciesRecipeInstallStepFileCopyArgs',
    'GuestPoliciesRecipeInstallStepFileExecArgs',
    'GuestPoliciesRecipeInstallStepMsiInstallationArgs',
    'GuestPoliciesRecipeInstallStepRpmInstallationArgs',
    'GuestPoliciesRecipeInstallStepScriptRunArgs',
    'GuestPoliciesRecipeUpdateStepArgs',
    'GuestPoliciesRecipeUpdateStepArchiveExtractionArgs',
    'GuestPoliciesRecipeUpdateStepDpkgInstallationArgs',
    'GuestPoliciesRecipeUpdateStepFileCopyArgs',
    'GuestPoliciesRecipeUpdateStepFileExecArgs',
    'GuestPoliciesRecipeUpdateStepMsiInstallationArgs',
    'GuestPoliciesRecipeUpdateStepRpmInstallationArgs',
    'GuestPoliciesRecipeUpdateStepScriptRunArgs',
    'OsPolicyAssignmentInstanceFilterArgs',
    'OsPolicyAssignmentInstanceFilterExclusionLabelArgs',
    'OsPolicyAssignmentInstanceFilterInclusionLabelArgs',
    'OsPolicyAssignmentInstanceFilterInventoryArgs',
    'OsPolicyAssignmentOsPolicyArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs',
    'OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs',
    'OsPolicyAssignmentRolloutArgs',
    'OsPolicyAssignmentRolloutDisruptionBudgetArgs',
    'PatchDeploymentInstanceFilterArgs',
    'PatchDeploymentInstanceFilterGroupLabelArgs',
    'PatchDeploymentOneTimeScheduleArgs',
    'PatchDeploymentPatchConfigArgs',
    'PatchDeploymentPatchConfigAptArgs',
    'PatchDeploymentPatchConfigGooArgs',
    'PatchDeploymentPatchConfigPostStepArgs',
    'PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs',
    'PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs',
    'PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs',
    'PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs',
    'PatchDeploymentPatchConfigPreStepArgs',
    'PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs',
    'PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs',
    'PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs',
    'PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs',
    'PatchDeploymentPatchConfigWindowsUpdateArgs',
    'PatchDeploymentPatchConfigYumArgs',
    'PatchDeploymentPatchConfigZypperArgs',
    'PatchDeploymentRecurringScheduleArgs',
    'PatchDeploymentRecurringScheduleMonthlyArgs',
    'PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs',
    'PatchDeploymentRecurringScheduleTimeOfDayArgs',
    'PatchDeploymentRecurringScheduleTimeZoneArgs',
    'PatchDeploymentRecurringScheduleWeeklyArgs',
    'PatchDeploymentRolloutArgs',
    'PatchDeploymentRolloutDisruptionBudgetArgs',
]

@pulumi.input_type
class GuestPoliciesAssignmentArgs:
    def __init__(__self__, *,
                 group_labels: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentGroupLabelArgs']]]] = None,
                 instance_name_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 instances: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 os_types: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentOsTypeArgs']]]] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentGroupLabelArgs']]] group_labels: Targets instances matching at least one of these label sets. This allows an assignment to target disparate groups,
               for example "env=prod or env=staging".
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] instance_name_prefixes: Targets VM instances whose name starts with one of these prefixes.
               Like labels, this is another way to group VM instances when targeting configs,
               for example prefix="prod-".
               Only supported for project-level policies.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: Targets any of the instances specified. Instances are specified by their URI in the form
               zones/[ZONE]/instances/[INSTANCE_NAME].
               Instance targeting is uncommon and is supported to facilitate the management of changes
               by the instance or to target specific VM instances for development and testing.
               Only supported for project-level policies and must reference instances within this project.
        :param pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentOsTypeArgs']]] os_types: Targets VM instances matching at least one of the following OS types.
               VM instances must match all supplied criteria for a given OsType to be included.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] zones: Targets instances in any of these zones. Leave empty to target instances in any zone.
               Zonal targeting is uncommon and is supported to facilitate the management of changes by zone.
        """
        if group_labels is not None:
            pulumi.set(__self__, "group_labels", group_labels)
        if instance_name_prefixes is not None:
            pulumi.set(__self__, "instance_name_prefixes", instance_name_prefixes)
        if instances is not None:
            pulumi.set(__self__, "instances", instances)
        if os_types is not None:
            pulumi.set(__self__, "os_types", os_types)
        if zones is not None:
            pulumi.set(__self__, "zones", zones)

    @property
    @pulumi.getter(name="groupLabels")
    def group_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentGroupLabelArgs']]]]:
        """
        Targets instances matching at least one of these label sets. This allows an assignment to target disparate groups,
        for example "env=prod or env=staging".
        Structure is documented below.
        """
        return pulumi.get(self, "group_labels")

    @group_labels.setter
    def group_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentGroupLabelArgs']]]]):
        pulumi.set(self, "group_labels", value)

    @property
    @pulumi.getter(name="instanceNamePrefixes")
    def instance_name_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets VM instances whose name starts with one of these prefixes.
        Like labels, this is another way to group VM instances when targeting configs,
        for example prefix="prod-".
        Only supported for project-level policies.
        """
        return pulumi.get(self, "instance_name_prefixes")

    @instance_name_prefixes.setter
    def instance_name_prefixes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "instance_name_prefixes", value)

    @property
    @pulumi.getter
    def instances(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets any of the instances specified. Instances are specified by their URI in the form
        zones/[ZONE]/instances/[INSTANCE_NAME].
        Instance targeting is uncommon and is supported to facilitate the management of changes
        by the instance or to target specific VM instances for development and testing.
        Only supported for project-level policies and must reference instances within this project.
        """
        return pulumi.get(self, "instances")

    @instances.setter
    def instances(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "instances", value)

    @property
    @pulumi.getter(name="osTypes")
    def os_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentOsTypeArgs']]]]:
        """
        Targets VM instances matching at least one of the following OS types.
        VM instances must match all supplied criteria for a given OsType to be included.
        Structure is documented below.
        """
        return pulumi.get(self, "os_types")

    @os_types.setter
    def os_types(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesAssignmentOsTypeArgs']]]]):
        pulumi.set(self, "os_types", value)

    @property
    @pulumi.getter
    def zones(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets instances in any of these zones. Leave empty to target instances in any zone.
        Zonal targeting is uncommon and is supported to facilitate the management of changes by zone.
        """
        return pulumi.get(self, "zones")

    @zones.setter
    def zones(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "zones", value)


@pulumi.input_type
class GuestPoliciesAssignmentGroupLabelArgs:
    def __init__(__self__, *,
                 labels: pulumi.Input[Mapping[str, pulumi.Input[str]]]):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Google Compute Engine instance labels that must be present for an instance to be included in this assignment group.
        """
        pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter
    def labels(self) -> pulumi.Input[Mapping[str, pulumi.Input[str]]]:
        """
        Google Compute Engine instance labels that must be present for an instance to be included in this assignment group.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: pulumi.Input[Mapping[str, pulumi.Input[str]]]):
        pulumi.set(self, "labels", value)


@pulumi.input_type
class GuestPoliciesAssignmentOsTypeArgs:
    def __init__(__self__, *,
                 os_architecture: Optional[pulumi.Input[str]] = None,
                 os_short_name: Optional[pulumi.Input[str]] = None,
                 os_version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] os_architecture: Targets VM instances with OS Inventory enabled and having the following OS architecture.
        :param pulumi.Input[str] os_short_name: Targets VM instances with OS Inventory enabled and having the following OS short name, for example "debian" or "windows".
        :param pulumi.Input[str] os_version: Targets VM instances with OS Inventory enabled and having the following following OS version.
        """
        if os_architecture is not None:
            pulumi.set(__self__, "os_architecture", os_architecture)
        if os_short_name is not None:
            pulumi.set(__self__, "os_short_name", os_short_name)
        if os_version is not None:
            pulumi.set(__self__, "os_version", os_version)

    @property
    @pulumi.getter(name="osArchitecture")
    def os_architecture(self) -> Optional[pulumi.Input[str]]:
        """
        Targets VM instances with OS Inventory enabled and having the following OS architecture.
        """
        return pulumi.get(self, "os_architecture")

    @os_architecture.setter
    def os_architecture(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_architecture", value)

    @property
    @pulumi.getter(name="osShortName")
    def os_short_name(self) -> Optional[pulumi.Input[str]]:
        """
        Targets VM instances with OS Inventory enabled and having the following OS short name, for example "debian" or "windows".
        """
        return pulumi.get(self, "os_short_name")

    @os_short_name.setter
    def os_short_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_short_name", value)

    @property
    @pulumi.getter(name="osVersion")
    def os_version(self) -> Optional[pulumi.Input[str]]:
        """
        Targets VM instances with OS Inventory enabled and having the following following OS version.
        """
        return pulumi.get(self, "os_version")

    @os_version.setter
    def os_version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_version", value)


@pulumi.input_type
class GuestPoliciesPackageArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 desired_state: Optional[pulumi.Input[str]] = None,
                 manager: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
               Names are also used to identify resources which helps to determine whether guest policies have conflicts.
               This means that requests to create multiple recipes with the same name and version are rejected since they
               could potentially have conflicting assignments.
        :param pulumi.Input[str] desired_state: Default is INSTALLED. The desired state the agent should maintain for this recipe.
               INSTALLED: The software recipe is installed on the instance but won't be updated to new versions.
               INSTALLED_KEEP_UPDATED: The software recipe is installed on the instance. The recipe is updated to a higher version,
               if a higher version of the recipe is assigned to this instance.
               REMOVE: Remove is unsupported for software recipes and attempts to create or update a recipe to the REMOVE state is rejected.
               Default value is `INSTALLED`.
               Possible values are `INSTALLED`, `UPDATED`, and `REMOVED`.
        :param pulumi.Input[str] manager: Type of package manager that can be used to install this package. If a system does not have the package manager,
               the package is not installed or removed no error message is returned. By default, or if you specify ANY,
               the agent attempts to install and remove this package using the default package manager.
               This is useful when creating a policy that applies to different types of systems.
               The default behavior is ANY.
               Default value is `ANY`.
               Possible values are `ANY`, `APT`, `YUM`, `ZYPPER`, and `GOO`.
        """
        pulumi.set(__self__, "name", name)
        if desired_state is not None:
            pulumi.set(__self__, "desired_state", desired_state)
        if manager is not None:
            pulumi.set(__self__, "manager", manager)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
        Names are also used to identify resources which helps to determine whether guest policies have conflicts.
        This means that requests to create multiple recipes with the same name and version are rejected since they
        could potentially have conflicting assignments.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> Optional[pulumi.Input[str]]:
        """
        Default is INSTALLED. The desired state the agent should maintain for this recipe.
        INSTALLED: The software recipe is installed on the instance but won't be updated to new versions.
        INSTALLED_KEEP_UPDATED: The software recipe is installed on the instance. The recipe is updated to a higher version,
        if a higher version of the recipe is assigned to this instance.
        REMOVE: Remove is unsupported for software recipes and attempts to create or update a recipe to the REMOVE state is rejected.
        Default value is `INSTALLED`.
        Possible values are `INSTALLED`, `UPDATED`, and `REMOVED`.
        """
        return pulumi.get(self, "desired_state")

    @desired_state.setter
    def desired_state(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "desired_state", value)

    @property
    @pulumi.getter
    def manager(self) -> Optional[pulumi.Input[str]]:
        """
        Type of package manager that can be used to install this package. If a system does not have the package manager,
        the package is not installed or removed no error message is returned. By default, or if you specify ANY,
        the agent attempts to install and remove this package using the default package manager.
        This is useful when creating a policy that applies to different types of systems.
        The default behavior is ANY.
        Default value is `ANY`.
        Possible values are `ANY`, `APT`, `YUM`, `ZYPPER`, and `GOO`.
        """
        return pulumi.get(self, "manager")

    @manager.setter
    def manager(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "manager", value)


@pulumi.input_type
class GuestPoliciesPackageRepositoryArgs:
    def __init__(__self__, *,
                 apt: Optional[pulumi.Input['GuestPoliciesPackageRepositoryAptArgs']] = None,
                 goo: Optional[pulumi.Input['GuestPoliciesPackageRepositoryGooArgs']] = None,
                 yum: Optional[pulumi.Input['GuestPoliciesPackageRepositoryYumArgs']] = None,
                 zypper: Optional[pulumi.Input['GuestPoliciesPackageRepositoryZypperArgs']] = None):
        """
        :param pulumi.Input['GuestPoliciesPackageRepositoryAptArgs'] apt: An Apt Repository.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesPackageRepositoryGooArgs'] goo: A Goo Repository.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesPackageRepositoryYumArgs'] yum: A Yum Repository.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesPackageRepositoryZypperArgs'] zypper: A Zypper Repository.
               Structure is documented below.
        """
        if apt is not None:
            pulumi.set(__self__, "apt", apt)
        if goo is not None:
            pulumi.set(__self__, "goo", goo)
        if yum is not None:
            pulumi.set(__self__, "yum", yum)
        if zypper is not None:
            pulumi.set(__self__, "zypper", zypper)

    @property
    @pulumi.getter
    def apt(self) -> Optional[pulumi.Input['GuestPoliciesPackageRepositoryAptArgs']]:
        """
        An Apt Repository.
        Structure is documented below.
        """
        return pulumi.get(self, "apt")

    @apt.setter
    def apt(self, value: Optional[pulumi.Input['GuestPoliciesPackageRepositoryAptArgs']]):
        pulumi.set(self, "apt", value)

    @property
    @pulumi.getter
    def goo(self) -> Optional[pulumi.Input['GuestPoliciesPackageRepositoryGooArgs']]:
        """
        A Goo Repository.
        Structure is documented below.
        """
        return pulumi.get(self, "goo")

    @goo.setter
    def goo(self, value: Optional[pulumi.Input['GuestPoliciesPackageRepositoryGooArgs']]):
        pulumi.set(self, "goo", value)

    @property
    @pulumi.getter
    def yum(self) -> Optional[pulumi.Input['GuestPoliciesPackageRepositoryYumArgs']]:
        """
        A Yum Repository.
        Structure is documented below.
        """
        return pulumi.get(self, "yum")

    @yum.setter
    def yum(self, value: Optional[pulumi.Input['GuestPoliciesPackageRepositoryYumArgs']]):
        pulumi.set(self, "yum", value)

    @property
    @pulumi.getter
    def zypper(self) -> Optional[pulumi.Input['GuestPoliciesPackageRepositoryZypperArgs']]:
        """
        A Zypper Repository.
        Structure is documented below.
        """
        return pulumi.get(self, "zypper")

    @zypper.setter
    def zypper(self, value: Optional[pulumi.Input['GuestPoliciesPackageRepositoryZypperArgs']]):
        pulumi.set(self, "zypper", value)


@pulumi.input_type
class GuestPoliciesPackageRepositoryAptArgs:
    def __init__(__self__, *,
                 components: pulumi.Input[Sequence[pulumi.Input[str]]],
                 distribution: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 archive_type: Optional[pulumi.Input[str]] = None,
                 gpg_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] components: List of components for this repository. Must contain at least one item.
        :param pulumi.Input[str] distribution: Distribution of this repository.
        :param pulumi.Input[str] uri: URI from which to fetch the object. It should contain both the protocol and path following the format {protocol}://{location}.
        :param pulumi.Input[str] archive_type: Type of archive files in this repository. The default behavior is DEB.
               Default value is `DEB`.
               Possible values are `DEB` and `DEB_SRC`.
        :param pulumi.Input[str] gpg_key: URI of the key file for this repository. The agent maintains a keyring at
               /etc/apt/trusted.gpg.d/osconfig_agent_managed.gpg containing all the keys in any applied guest policy.
        """
        pulumi.set(__self__, "components", components)
        pulumi.set(__self__, "distribution", distribution)
        pulumi.set(__self__, "uri", uri)
        if archive_type is not None:
            pulumi.set(__self__, "archive_type", archive_type)
        if gpg_key is not None:
            pulumi.set(__self__, "gpg_key", gpg_key)

    @property
    @pulumi.getter
    def components(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        List of components for this repository. Must contain at least one item.
        """
        return pulumi.get(self, "components")

    @components.setter
    def components(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "components", value)

    @property
    @pulumi.getter
    def distribution(self) -> pulumi.Input[str]:
        """
        Distribution of this repository.
        """
        return pulumi.get(self, "distribution")

    @distribution.setter
    def distribution(self, value: pulumi.Input[str]):
        pulumi.set(self, "distribution", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        URI from which to fetch the object. It should contain both the protocol and path following the format {protocol}://{location}.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="archiveType")
    def archive_type(self) -> Optional[pulumi.Input[str]]:
        """
        Type of archive files in this repository. The default behavior is DEB.
        Default value is `DEB`.
        Possible values are `DEB` and `DEB_SRC`.
        """
        return pulumi.get(self, "archive_type")

    @archive_type.setter
    def archive_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "archive_type", value)

    @property
    @pulumi.getter(name="gpgKey")
    def gpg_key(self) -> Optional[pulumi.Input[str]]:
        """
        URI of the key file for this repository. The agent maintains a keyring at
        /etc/apt/trusted.gpg.d/osconfig_agent_managed.gpg containing all the keys in any applied guest policy.
        """
        return pulumi.get(self, "gpg_key")

    @gpg_key.setter
    def gpg_key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "gpg_key", value)


@pulumi.input_type
class GuestPoliciesPackageRepositoryGooArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 url: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
               Names are also used to identify resources which helps to determine whether guest policies have conflicts.
               This means that requests to create multiple recipes with the same name and version are rejected since they
               could potentially have conflicting assignments.
        :param pulumi.Input[str] url: The url of the repository.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
        Names are also used to identify resources which helps to determine whether guest policies have conflicts.
        This means that requests to create multiple recipes with the same name and version are rejected since they
        could potentially have conflicting assignments.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def url(self) -> pulumi.Input[str]:
        """
        The url of the repository.
        """
        return pulumi.get(self, "url")

    @url.setter
    def url(self, value: pulumi.Input[str]):
        pulumi.set(self, "url", value)


@pulumi.input_type
class GuestPoliciesPackageRepositoryYumArgs:
    def __init__(__self__, *,
                 base_url: pulumi.Input[str],
                 id: pulumi.Input[str],
                 display_name: Optional[pulumi.Input[str]] = None,
                 gpg_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] base_url: The location of the repository directory.
        :param pulumi.Input[str] id: Id of the artifact, which the installation and update steps of this recipe can reference.
               Artifacts in a recipe cannot have the same id.
        :param pulumi.Input[str] display_name: The display name of the repository.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] gpg_keys: URIs of GPG keys.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "id", id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if gpg_keys is not None:
            pulumi.set(__self__, "gpg_keys", gpg_keys)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> pulumi.Input[str]:
        """
        The location of the repository directory.
        """
        return pulumi.get(self, "base_url")

    @base_url.setter
    def base_url(self, value: pulumi.Input[str]):
        pulumi.set(self, "base_url", value)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Id of the artifact, which the installation and update steps of this recipe can reference.
        Artifacts in a recipe cannot have the same id.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the repository.
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter(name="gpgKeys")
    def gpg_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        URIs of GPG keys.
        """
        return pulumi.get(self, "gpg_keys")

    @gpg_keys.setter
    def gpg_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "gpg_keys", value)


@pulumi.input_type
class GuestPoliciesPackageRepositoryZypperArgs:
    def __init__(__self__, *,
                 base_url: pulumi.Input[str],
                 id: pulumi.Input[str],
                 display_name: Optional[pulumi.Input[str]] = None,
                 gpg_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] base_url: The location of the repository directory.
        :param pulumi.Input[str] id: Id of the artifact, which the installation and update steps of this recipe can reference.
               Artifacts in a recipe cannot have the same id.
        :param pulumi.Input[str] display_name: The display name of the repository.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] gpg_keys: URIs of GPG keys.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "id", id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if gpg_keys is not None:
            pulumi.set(__self__, "gpg_keys", gpg_keys)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> pulumi.Input[str]:
        """
        The location of the repository directory.
        """
        return pulumi.get(self, "base_url")

    @base_url.setter
    def base_url(self, value: pulumi.Input[str]):
        pulumi.set(self, "base_url", value)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Id of the artifact, which the installation and update steps of this recipe can reference.
        Artifacts in a recipe cannot have the same id.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the repository.
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter(name="gpgKeys")
    def gpg_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        URIs of GPG keys.
        """
        return pulumi.get(self, "gpg_keys")

    @gpg_keys.setter
    def gpg_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "gpg_keys", value)


@pulumi.input_type
class GuestPoliciesRecipeArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 artifacts: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeArtifactArgs']]]] = None,
                 desired_state: Optional[pulumi.Input[str]] = None,
                 install_steps: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeInstallStepArgs']]]] = None,
                 update_steps: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeUpdateStepArgs']]]] = None,
                 version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] name: Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
               Names are also used to identify resources which helps to determine whether guest policies have conflicts.
               This means that requests to create multiple recipes with the same name and version are rejected since they
               could potentially have conflicting assignments.
        :param pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeArtifactArgs']]] artifacts: Resources available to be used in the steps in the recipe.
               Structure is documented below.
        :param pulumi.Input[str] desired_state: Default is INSTALLED. The desired state the agent should maintain for this recipe.
               INSTALLED: The software recipe is installed on the instance but won't be updated to new versions.
               INSTALLED_KEEP_UPDATED: The software recipe is installed on the instance. The recipe is updated to a higher version,
               if a higher version of the recipe is assigned to this instance.
               REMOVE: Remove is unsupported for software recipes and attempts to create or update a recipe to the REMOVE state is rejected.
               Default value is `INSTALLED`.
               Possible values are `INSTALLED`, `UPDATED`, and `REMOVED`.
        :param pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeInstallStepArgs']]] install_steps: Actions to be taken for installing this recipe. On failure it stops executing steps and does not attempt another installation.
               Any steps taken (including partially completed steps) are not rolled back.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeUpdateStepArgs']]] update_steps: Actions to be taken for updating this recipe. On failure it stops executing steps and does not attempt another update for this recipe.
               Any steps taken (including partially completed steps) are not rolled back.
               Structure is documented below.
        :param pulumi.Input[str] version: The version of this software recipe. Version can be up to 4 period separated numbers (e.g. 12.34.56.78).
        """
        pulumi.set(__self__, "name", name)
        if artifacts is not None:
            pulumi.set(__self__, "artifacts", artifacts)
        if desired_state is not None:
            pulumi.set(__self__, "desired_state", desired_state)
        if install_steps is not None:
            pulumi.set(__self__, "install_steps", install_steps)
        if update_steps is not None:
            pulumi.set(__self__, "update_steps", update_steps)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Unique identifier for the recipe. Only one recipe with a given name is installed on an instance.
        Names are also used to identify resources which helps to determine whether guest policies have conflicts.
        This means that requests to create multiple recipes with the same name and version are rejected since they
        could potentially have conflicting assignments.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def artifacts(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeArtifactArgs']]]]:
        """
        Resources available to be used in the steps in the recipe.
        Structure is documented below.
        """
        return pulumi.get(self, "artifacts")

    @artifacts.setter
    def artifacts(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeArtifactArgs']]]]):
        pulumi.set(self, "artifacts", value)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> Optional[pulumi.Input[str]]:
        """
        Default is INSTALLED. The desired state the agent should maintain for this recipe.
        INSTALLED: The software recipe is installed on the instance but won't be updated to new versions.
        INSTALLED_KEEP_UPDATED: The software recipe is installed on the instance. The recipe is updated to a higher version,
        if a higher version of the recipe is assigned to this instance.
        REMOVE: Remove is unsupported for software recipes and attempts to create or update a recipe to the REMOVE state is rejected.
        Default value is `INSTALLED`.
        Possible values are `INSTALLED`, `UPDATED`, and `REMOVED`.
        """
        return pulumi.get(self, "desired_state")

    @desired_state.setter
    def desired_state(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "desired_state", value)

    @property
    @pulumi.getter(name="installSteps")
    def install_steps(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeInstallStepArgs']]]]:
        """
        Actions to be taken for installing this recipe. On failure it stops executing steps and does not attempt another installation.
        Any steps taken (including partially completed steps) are not rolled back.
        Structure is documented below.
        """
        return pulumi.get(self, "install_steps")

    @install_steps.setter
    def install_steps(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeInstallStepArgs']]]]):
        pulumi.set(self, "install_steps", value)

    @property
    @pulumi.getter(name="updateSteps")
    def update_steps(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeUpdateStepArgs']]]]:
        """
        Actions to be taken for updating this recipe. On failure it stops executing steps and does not attempt another update for this recipe.
        Any steps taken (including partially completed steps) are not rolled back.
        Structure is documented below.
        """
        return pulumi.get(self, "update_steps")

    @update_steps.setter
    def update_steps(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['GuestPoliciesRecipeUpdateStepArgs']]]]):
        pulumi.set(self, "update_steps", value)

    @property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[str]]:
        """
        The version of this software recipe. Version can be up to 4 period separated numbers (e.g. 12.34.56.78).
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "version", value)


@pulumi.input_type
class GuestPoliciesRecipeArtifactArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['GuestPoliciesRecipeArtifactGcsArgs']] = None,
                 remote: Optional[pulumi.Input['GuestPoliciesRecipeArtifactRemoteArgs']] = None):
        """
        :param pulumi.Input[str] id: Id of the artifact, which the installation and update steps of this recipe can reference.
               Artifacts in a recipe cannot have the same id.
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, recipes are subject to validations based on the artifact type:
               Remote: A checksum must be specified, and only protocols with transport-layer security are permitted.
               GCS: An object generation number must be specified.
        :param pulumi.Input['GuestPoliciesRecipeArtifactGcsArgs'] gcs: A Google Cloud Storage artifact.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeArtifactRemoteArgs'] remote: A generic remote artifact.
               Structure is documented below.
        """
        pulumi.set(__self__, "id", id)
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Id of the artifact, which the installation and update steps of this recipe can reference.
        Artifacts in a recipe cannot have the same id.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, recipes are subject to validations based on the artifact type:
        Remote: A checksum must be specified, and only protocols with transport-layer security are permitted.
        GCS: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['GuestPoliciesRecipeArtifactGcsArgs']]:
        """
        A Google Cloud Storage artifact.
        Structure is documented below.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['GuestPoliciesRecipeArtifactGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['GuestPoliciesRecipeArtifactRemoteArgs']]:
        """
        A generic remote artifact.
        Structure is documented below.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['GuestPoliciesRecipeArtifactRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class GuestPoliciesRecipeArtifactGcsArgs:
    def __init__(__self__, *,
                 bucket: Optional[pulumi.Input[str]] = None,
                 generation: Optional[pulumi.Input[int]] = None,
                 object: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] bucket: Bucket of the Google Cloud Storage object. Given an example URL: https://storage.googleapis.com/my-bucket/foo/bar#1234567
               this value would be my-bucket.
        :param pulumi.Input[int] generation: Must be provided if allowInsecure is false. Generation number of the Google Cloud Storage object.
               https://storage.googleapis.com/my-bucket/foo/bar#1234567 this value would be 1234567.
        :param pulumi.Input[str] object: Name of the Google Cloud Storage object. Given an example URL: https://storage.googleapis.com/my-bucket/foo/bar#1234567
               this value would be foo/bar.
        """
        if bucket is not None:
            pulumi.set(__self__, "bucket", bucket)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)
        if object is not None:
            pulumi.set(__self__, "object", object)

    @property
    @pulumi.getter
    def bucket(self) -> Optional[pulumi.Input[str]]:
        """
        Bucket of the Google Cloud Storage object. Given an example URL: https://storage.googleapis.com/my-bucket/foo/bar#1234567
        this value would be my-bucket.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Must be provided if allowInsecure is false. Generation number of the Google Cloud Storage object.
        https://storage.googleapis.com/my-bucket/foo/bar#1234567 this value would be 1234567.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)

    @property
    @pulumi.getter
    def object(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the Google Cloud Storage object. Given an example URL: https://storage.googleapis.com/my-bucket/foo/bar#1234567
        this value would be foo/bar.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "object", value)


@pulumi.input_type
class GuestPoliciesRecipeArtifactRemoteArgs:
    def __init__(__self__, *,
                 check_sum: Optional[pulumi.Input[str]] = None,
                 uri: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] check_sum: Must be provided if allowInsecure is false. SHA256 checksum in hex format, to compare to the checksum of the artifact.
               If the checksum is not empty and it doesn't match the artifact then the recipe installation fails before running any
               of the steps.
        :param pulumi.Input[str] uri: URI from which to fetch the object. It should contain both the protocol and path following the format {protocol}://{location}.
        """
        if check_sum is not None:
            pulumi.set(__self__, "check_sum", check_sum)
        if uri is not None:
            pulumi.set(__self__, "uri", uri)

    @property
    @pulumi.getter(name="checkSum")
    def check_sum(self) -> Optional[pulumi.Input[str]]:
        """
        Must be provided if allowInsecure is false. SHA256 checksum in hex format, to compare to the checksum of the artifact.
        If the checksum is not empty and it doesn't match the artifact then the recipe installation fails before running any
        of the steps.
        """
        return pulumi.get(self, "check_sum")

    @check_sum.setter
    def check_sum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "check_sum", value)

    @property
    @pulumi.getter
    def uri(self) -> Optional[pulumi.Input[str]]:
        """
        URI from which to fetch the object. It should contain both the protocol and path following the format {protocol}://{location}.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "uri", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepArgs:
    def __init__(__self__, *,
                 archive_extraction: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepArchiveExtractionArgs']] = None,
                 dpkg_installation: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepDpkgInstallationArgs']] = None,
                 file_copy: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileCopyArgs']] = None,
                 file_exec: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileExecArgs']] = None,
                 msi_installation: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepMsiInstallationArgs']] = None,
                 rpm_installation: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepRpmInstallationArgs']] = None,
                 script_run: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepScriptRunArgs']] = None):
        """
        :param pulumi.Input['GuestPoliciesRecipeInstallStepArchiveExtractionArgs'] archive_extraction: Extracts an archive into the specified directory.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepDpkgInstallationArgs'] dpkg_installation: Installs a deb file via dpkg.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepFileCopyArgs'] file_copy: Copies a file onto the instance.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepFileExecArgs'] file_exec: Executes an artifact or local file.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepMsiInstallationArgs'] msi_installation: Installs an MSI file.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepRpmInstallationArgs'] rpm_installation: Installs an rpm file via the rpm utility.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeInstallStepScriptRunArgs'] script_run: Runs commands in a shell.
               Structure is documented below.
        """
        if archive_extraction is not None:
            pulumi.set(__self__, "archive_extraction", archive_extraction)
        if dpkg_installation is not None:
            pulumi.set(__self__, "dpkg_installation", dpkg_installation)
        if file_copy is not None:
            pulumi.set(__self__, "file_copy", file_copy)
        if file_exec is not None:
            pulumi.set(__self__, "file_exec", file_exec)
        if msi_installation is not None:
            pulumi.set(__self__, "msi_installation", msi_installation)
        if rpm_installation is not None:
            pulumi.set(__self__, "rpm_installation", rpm_installation)
        if script_run is not None:
            pulumi.set(__self__, "script_run", script_run)

    @property
    @pulumi.getter(name="archiveExtraction")
    def archive_extraction(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepArchiveExtractionArgs']]:
        """
        Extracts an archive into the specified directory.
        Structure is documented below.
        """
        return pulumi.get(self, "archive_extraction")

    @archive_extraction.setter
    def archive_extraction(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepArchiveExtractionArgs']]):
        pulumi.set(self, "archive_extraction", value)

    @property
    @pulumi.getter(name="dpkgInstallation")
    def dpkg_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepDpkgInstallationArgs']]:
        """
        Installs a deb file via dpkg.
        Structure is documented below.
        """
        return pulumi.get(self, "dpkg_installation")

    @dpkg_installation.setter
    def dpkg_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepDpkgInstallationArgs']]):
        pulumi.set(self, "dpkg_installation", value)

    @property
    @pulumi.getter(name="fileCopy")
    def file_copy(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileCopyArgs']]:
        """
        Copies a file onto the instance.
        Structure is documented below.
        """
        return pulumi.get(self, "file_copy")

    @file_copy.setter
    def file_copy(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileCopyArgs']]):
        pulumi.set(self, "file_copy", value)

    @property
    @pulumi.getter(name="fileExec")
    def file_exec(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileExecArgs']]:
        """
        Executes an artifact or local file.
        Structure is documented below.
        """
        return pulumi.get(self, "file_exec")

    @file_exec.setter
    def file_exec(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepFileExecArgs']]):
        pulumi.set(self, "file_exec", value)

    @property
    @pulumi.getter(name="msiInstallation")
    def msi_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepMsiInstallationArgs']]:
        """
        Installs an MSI file.
        Structure is documented below.
        """
        return pulumi.get(self, "msi_installation")

    @msi_installation.setter
    def msi_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepMsiInstallationArgs']]):
        pulumi.set(self, "msi_installation", value)

    @property
    @pulumi.getter(name="rpmInstallation")
    def rpm_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepRpmInstallationArgs']]:
        """
        Installs an rpm file via the rpm utility.
        Structure is documented below.
        """
        return pulumi.get(self, "rpm_installation")

    @rpm_installation.setter
    def rpm_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepRpmInstallationArgs']]):
        pulumi.set(self, "rpm_installation", value)

    @property
    @pulumi.getter(name="scriptRun")
    def script_run(self) -> Optional[pulumi.Input['GuestPoliciesRecipeInstallStepScriptRunArgs']]:
        """
        Runs commands in a shell.
        Structure is documented below.
        """
        return pulumi.get(self, "script_run")

    @script_run.setter
    def script_run(self, value: Optional[pulumi.Input['GuestPoliciesRecipeInstallStepScriptRunArgs']]):
        pulumi.set(self, "script_run", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepArchiveExtractionArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 type: pulumi.Input[str],
                 destination: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] type: The type of the archive to extract.
               Possible values are `TAR`, `TAR_GZIP`, `TAR_BZIP`, `TAR_LZMA`, `TAR_XZ`, and `ZIP`.
        :param pulumi.Input[str] destination: Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        pulumi.set(__self__, "type", type)
        if destination is not None:
            pulumi.set(__self__, "destination", destination)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of the archive to extract.
        Possible values are `TAR`, `TAR_GZIP`, `TAR_BZIP`, `TAR_LZMA`, `TAR_XZ`, and `ZIP`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: pulumi.Input[str]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def destination(self) -> Optional[pulumi.Input[str]]:
        """
        Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "destination", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepDpkgInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepFileCopyArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 destination: pulumi.Input[str],
                 overwrite: Optional[pulumi.Input[bool]] = None,
                 permissions: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] destination: Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        :param pulumi.Input[bool] overwrite: Whether to allow this step to overwrite existing files.If this is false and the file already exists the file
               is not overwritten and the step is considered a success. Defaults to false.
        :param pulumi.Input[str] permissions: Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users
               for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit
               number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one
               bit corresponds to the execute permission. Default behavior is 755.
               Below are some examples of permissions and their associated values:
               read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        pulumi.set(__self__, "destination", destination)
        if overwrite is not None:
            pulumi.set(__self__, "overwrite", overwrite)
        if permissions is not None:
            pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter
    def destination(self) -> pulumi.Input[str]:
        """
        Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: pulumi.Input[str]):
        pulumi.set(self, "destination", value)

    @property
    @pulumi.getter
    def overwrite(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow this step to overwrite existing files.If this is false and the file already exists the file
        is not overwritten and the step is considered a success. Defaults to false.
        """
        return pulumi.get(self, "overwrite")

    @overwrite.setter
    def overwrite(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "overwrite", value)

    @property
    @pulumi.getter
    def permissions(self) -> Optional[pulumi.Input[str]]:
        """
        Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users
        for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit
        number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one
        bit corresponds to the execute permission. Default behavior is 755.
        Below are some examples of permissions and their associated values:
        read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "permissions", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepFileExecArgs:
    def __init__(__self__, *,
                 allowed_exit_codes: Optional[pulumi.Input[str]] = None,
                 args: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 artifact_id: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[Sequence[pulumi.Input[str]]] args: Arguments to be passed to the provided executable.
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] local_path: The absolute path of the file on the local filesystem.
        """
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if args is not None:
            pulumi.set(__self__, "args", args)
        if artifact_id is not None:
            pulumi.set(__self__, "artifact_id", artifact_id)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[str]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Arguments to be passed to the provided executable.
        """
        return pulumi.get(self, "args")

    @args.setter
    def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "args", value)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> Optional[pulumi.Input[str]]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        The absolute path of the file on the local filesystem.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepMsiInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 allowed_exit_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 flags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[Sequence[pulumi.Input[str]]] flags: The flags to use when installing the MSI. Defaults to the install flag.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if flags is not None:
            pulumi.set(__self__, "flags", flags)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def flags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The flags to use when installing the MSI. Defaults to the install flag.
        """
        return pulumi.get(self, "flags")

    @flags.setter
    def flags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "flags", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepRpmInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)


@pulumi.input_type
class GuestPoliciesRecipeInstallStepScriptRunArgs:
    def __init__(__self__, *,
                 script: pulumi.Input[str],
                 allowed_exit_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 interpreter: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] script: The shell script to be executed.
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script is executed directly,
               which likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        """
        pulumi.set(__self__, "script", script)
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)

    @property
    @pulumi.getter
    def script(self) -> pulumi.Input[str]:
        """
        The shell script to be executed.
        """
        return pulumi.get(self, "script")

    @script.setter
    def script(self, value: pulumi.Input[str]):
        pulumi.set(self, "script", value)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script is executed directly,
        which likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepArgs:
    def __init__(__self__, *,
                 archive_extraction: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepArchiveExtractionArgs']] = None,
                 dpkg_installation: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepDpkgInstallationArgs']] = None,
                 file_copy: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileCopyArgs']] = None,
                 file_exec: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileExecArgs']] = None,
                 msi_installation: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepMsiInstallationArgs']] = None,
                 rpm_installation: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepRpmInstallationArgs']] = None,
                 script_run: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepScriptRunArgs']] = None):
        """
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepArchiveExtractionArgs'] archive_extraction: Extracts an archive into the specified directory.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepDpkgInstallationArgs'] dpkg_installation: Installs a deb file via dpkg.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepFileCopyArgs'] file_copy: Copies a file onto the instance.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepFileExecArgs'] file_exec: Executes an artifact or local file.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepMsiInstallationArgs'] msi_installation: Installs an MSI file.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepRpmInstallationArgs'] rpm_installation: Installs an rpm file via the rpm utility.
               Structure is documented below.
        :param pulumi.Input['GuestPoliciesRecipeUpdateStepScriptRunArgs'] script_run: Runs commands in a shell.
               Structure is documented below.
        """
        if archive_extraction is not None:
            pulumi.set(__self__, "archive_extraction", archive_extraction)
        if dpkg_installation is not None:
            pulumi.set(__self__, "dpkg_installation", dpkg_installation)
        if file_copy is not None:
            pulumi.set(__self__, "file_copy", file_copy)
        if file_exec is not None:
            pulumi.set(__self__, "file_exec", file_exec)
        if msi_installation is not None:
            pulumi.set(__self__, "msi_installation", msi_installation)
        if rpm_installation is not None:
            pulumi.set(__self__, "rpm_installation", rpm_installation)
        if script_run is not None:
            pulumi.set(__self__, "script_run", script_run)

    @property
    @pulumi.getter(name="archiveExtraction")
    def archive_extraction(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepArchiveExtractionArgs']]:
        """
        Extracts an archive into the specified directory.
        Structure is documented below.
        """
        return pulumi.get(self, "archive_extraction")

    @archive_extraction.setter
    def archive_extraction(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepArchiveExtractionArgs']]):
        pulumi.set(self, "archive_extraction", value)

    @property
    @pulumi.getter(name="dpkgInstallation")
    def dpkg_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepDpkgInstallationArgs']]:
        """
        Installs a deb file via dpkg.
        Structure is documented below.
        """
        return pulumi.get(self, "dpkg_installation")

    @dpkg_installation.setter
    def dpkg_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepDpkgInstallationArgs']]):
        pulumi.set(self, "dpkg_installation", value)

    @property
    @pulumi.getter(name="fileCopy")
    def file_copy(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileCopyArgs']]:
        """
        Copies a file onto the instance.
        Structure is documented below.
        """
        return pulumi.get(self, "file_copy")

    @file_copy.setter
    def file_copy(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileCopyArgs']]):
        pulumi.set(self, "file_copy", value)

    @property
    @pulumi.getter(name="fileExec")
    def file_exec(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileExecArgs']]:
        """
        Executes an artifact or local file.
        Structure is documented below.
        """
        return pulumi.get(self, "file_exec")

    @file_exec.setter
    def file_exec(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepFileExecArgs']]):
        pulumi.set(self, "file_exec", value)

    @property
    @pulumi.getter(name="msiInstallation")
    def msi_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepMsiInstallationArgs']]:
        """
        Installs an MSI file.
        Structure is documented below.
        """
        return pulumi.get(self, "msi_installation")

    @msi_installation.setter
    def msi_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepMsiInstallationArgs']]):
        pulumi.set(self, "msi_installation", value)

    @property
    @pulumi.getter(name="rpmInstallation")
    def rpm_installation(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepRpmInstallationArgs']]:
        """
        Installs an rpm file via the rpm utility.
        Structure is documented below.
        """
        return pulumi.get(self, "rpm_installation")

    @rpm_installation.setter
    def rpm_installation(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepRpmInstallationArgs']]):
        pulumi.set(self, "rpm_installation", value)

    @property
    @pulumi.getter(name="scriptRun")
    def script_run(self) -> Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepScriptRunArgs']]:
        """
        Runs commands in a shell.
        Structure is documented below.
        """
        return pulumi.get(self, "script_run")

    @script_run.setter
    def script_run(self, value: Optional[pulumi.Input['GuestPoliciesRecipeUpdateStepScriptRunArgs']]):
        pulumi.set(self, "script_run", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepArchiveExtractionArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 type: pulumi.Input[str],
                 destination: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] type: The type of the archive to extract.
               Possible values are `TAR`, `TAR_GZIP`, `TAR_BZIP`, `TAR_LZMA`, `TAR_XZ`, and `ZIP`.
        :param pulumi.Input[str] destination: Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        pulumi.set(__self__, "type", type)
        if destination is not None:
            pulumi.set(__self__, "destination", destination)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        The type of the archive to extract.
        Possible values are `TAR`, `TAR_GZIP`, `TAR_BZIP`, `TAR_LZMA`, `TAR_XZ`, and `ZIP`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: pulumi.Input[str]):
        pulumi.set(self, "type", value)

    @property
    @pulumi.getter
    def destination(self) -> Optional[pulumi.Input[str]]:
        """
        Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "destination", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepDpkgInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepFileCopyArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 destination: pulumi.Input[str],
                 overwrite: Optional[pulumi.Input[bool]] = None,
                 permissions: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] destination: Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        :param pulumi.Input[bool] overwrite: Whether to allow this step to overwrite existing files.If this is false and the file already exists the file
               is not overwritten and the step is considered a success. Defaults to false.
        :param pulumi.Input[str] permissions: Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users
               for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit
               number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one
               bit corresponds to the execute permission. Default behavior is 755.
               Below are some examples of permissions and their associated values:
               read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        pulumi.set(__self__, "destination", destination)
        if overwrite is not None:
            pulumi.set(__self__, "overwrite", overwrite)
        if permissions is not None:
            pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter
    def destination(self) -> pulumi.Input[str]:
        """
        Directory to extract archive to. Defaults to / on Linux or C:\\ on Windows.
        """
        return pulumi.get(self, "destination")

    @destination.setter
    def destination(self, value: pulumi.Input[str]):
        pulumi.set(self, "destination", value)

    @property
    @pulumi.getter
    def overwrite(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether to allow this step to overwrite existing files.If this is false and the file already exists the file
        is not overwritten and the step is considered a success. Defaults to false.
        """
        return pulumi.get(self, "overwrite")

    @overwrite.setter
    def overwrite(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "overwrite", value)

    @property
    @pulumi.getter
    def permissions(self) -> Optional[pulumi.Input[str]]:
        """
        Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users
        for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit
        number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one
        bit corresponds to the execute permission. Default behavior is 755.
        Below are some examples of permissions and their associated values:
        read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "permissions", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepFileExecArgs:
    def __init__(__self__, *,
                 allowed_exit_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 args: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 artifact_id: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[Sequence[pulumi.Input[str]]] args: Arguments to be passed to the provided executable.
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[str] local_path: The absolute path of the file on the local filesystem.
        """
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if args is not None:
            pulumi.set(__self__, "args", args)
        if artifact_id is not None:
            pulumi.set(__self__, "artifact_id", artifact_id)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Arguments to be passed to the provided executable.
        """
        return pulumi.get(self, "args")

    @args.setter
    def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "args", value)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> Optional[pulumi.Input[str]]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        The absolute path of the file on the local filesystem.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepMsiInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str],
                 allowed_exit_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 flags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[Sequence[pulumi.Input[str]]] flags: The flags to use when installing the MSI. Defaults to the install flag.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if flags is not None:
            pulumi.set(__self__, "flags", flags)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def flags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The flags to use when installing the MSI. Defaults to the install flag.
        """
        return pulumi.get(self, "flags")

    @flags.setter
    def flags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "flags", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepRpmInstallationArgs:
    def __init__(__self__, *,
                 artifact_id: pulumi.Input[str]):
        """
        :param pulumi.Input[str] artifact_id: The id of the relevant artifact in the recipe.
        """
        pulumi.set(__self__, "artifact_id", artifact_id)

    @property
    @pulumi.getter(name="artifactId")
    def artifact_id(self) -> pulumi.Input[str]:
        """
        The id of the relevant artifact in the recipe.
        """
        return pulumi.get(self, "artifact_id")

    @artifact_id.setter
    def artifact_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "artifact_id", value)


@pulumi.input_type
class GuestPoliciesRecipeUpdateStepScriptRunArgs:
    def __init__(__self__, *,
                 script: pulumi.Input[str],
                 allowed_exit_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 interpreter: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] script: The shell script to be executed.
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_exit_codes: Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script is executed directly,
               which likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        """
        pulumi.set(__self__, "script", script)
        if allowed_exit_codes is not None:
            pulumi.set(__self__, "allowed_exit_codes", allowed_exit_codes)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)

    @property
    @pulumi.getter
    def script(self) -> pulumi.Input[str]:
        """
        The shell script to be executed.
        """
        return pulumi.get(self, "script")

    @script.setter
    def script(self, value: pulumi.Input[str]):
        pulumi.set(self, "script", value)

    @property
    @pulumi.getter(name="allowedExitCodes")
    def allowed_exit_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Return codes that indicate that the software installed or updated successfully. Behaviour defaults to [0]
        """
        return pulumi.get(self, "allowed_exit_codes")

    @allowed_exit_codes.setter
    def allowed_exit_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_exit_codes", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script is executed directly,
        which likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)


@pulumi.input_type
class OsPolicyAssignmentInstanceFilterArgs:
    def __init__(__self__, *,
                 all: Optional[pulumi.Input[bool]] = None,
                 exclusion_labels: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterExclusionLabelArgs']]]] = None,
                 inclusion_labels: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInclusionLabelArgs']]]] = None,
                 inventories: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInventoryArgs']]]] = None):
        """
        :param pulumi.Input[bool] all: Target all VMs in the project. If true, no other criteria is permitted.
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterExclusionLabelArgs']]] exclusion_labels: List of label sets used for VM exclusion. If the list has more than one label set, the VM is excluded if any of the label sets are applicable for the VM.
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInclusionLabelArgs']]] inclusion_labels: List of label sets used for VM inclusion. If the list has more than one `LabelSet`, the VM is included if any of the label sets are applicable for the VM.
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInventoryArgs']]] inventories: List of inventories to select VMs. A VM is selected if its inventory data matches at least one of the following inventories.
        """
        if all is not None:
            pulumi.set(__self__, "all", all)
        if exclusion_labels is not None:
            pulumi.set(__self__, "exclusion_labels", exclusion_labels)
        if inclusion_labels is not None:
            pulumi.set(__self__, "inclusion_labels", inclusion_labels)
        if inventories is not None:
            pulumi.set(__self__, "inventories", inventories)

    @property
    @pulumi.getter
    def all(self) -> Optional[pulumi.Input[bool]]:
        """
        Target all VMs in the project. If true, no other criteria is permitted.
        """
        return pulumi.get(self, "all")

    @all.setter
    def all(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "all", value)

    @property
    @pulumi.getter(name="exclusionLabels")
    def exclusion_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterExclusionLabelArgs']]]]:
        """
        List of label sets used for VM exclusion. If the list has more than one label set, the VM is excluded if any of the label sets are applicable for the VM.
        """
        return pulumi.get(self, "exclusion_labels")

    @exclusion_labels.setter
    def exclusion_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterExclusionLabelArgs']]]]):
        pulumi.set(self, "exclusion_labels", value)

    @property
    @pulumi.getter(name="inclusionLabels")
    def inclusion_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInclusionLabelArgs']]]]:
        """
        List of label sets used for VM inclusion. If the list has more than one `LabelSet`, the VM is included if any of the label sets are applicable for the VM.
        """
        return pulumi.get(self, "inclusion_labels")

    @inclusion_labels.setter
    def inclusion_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInclusionLabelArgs']]]]):
        pulumi.set(self, "inclusion_labels", value)

    @property
    @pulumi.getter
    def inventories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInventoryArgs']]]]:
        """
        List of inventories to select VMs. A VM is selected if its inventory data matches at least one of the following inventories.
        """
        return pulumi.get(self, "inventories")

    @inventories.setter
    def inventories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentInstanceFilterInventoryArgs']]]]):
        pulumi.set(self, "inventories", value)


@pulumi.input_type
class OsPolicyAssignmentInstanceFilterExclusionLabelArgs:
    def __init__(__self__, *,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels are identified by key/value pairs in this map. A VM should contain all the key/value pairs specified in this map to be selected.
        """
        if labels is not None:
            pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Labels are identified by key/value pairs in this map. A VM should contain all the key/value pairs specified in this map to be selected.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "labels", value)


@pulumi.input_type
class OsPolicyAssignmentInstanceFilterInclusionLabelArgs:
    def __init__(__self__, *,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels are identified by key/value pairs in this map. A VM should contain all the key/value pairs specified in this map to be selected.
        """
        if labels is not None:
            pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Labels are identified by key/value pairs in this map. A VM should contain all the key/value pairs specified in this map to be selected.
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "labels", value)


@pulumi.input_type
class OsPolicyAssignmentInstanceFilterInventoryArgs:
    def __init__(__self__, *,
                 os_short_name: pulumi.Input[str],
                 os_version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] os_short_name: Required. The OS short name
        :param pulumi.Input[str] os_version: The OS version Prefix matches are supported if asterisk(*) is provided as the last character. For example, to match all versions with a major version of `7`, specify the following value for this field `7.*` An empty string matches all OS versions.
        """
        pulumi.set(__self__, "os_short_name", os_short_name)
        if os_version is not None:
            pulumi.set(__self__, "os_version", os_version)

    @property
    @pulumi.getter(name="osShortName")
    def os_short_name(self) -> pulumi.Input[str]:
        """
        Required. The OS short name
        """
        return pulumi.get(self, "os_short_name")

    @os_short_name.setter
    def os_short_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "os_short_name", value)

    @property
    @pulumi.getter(name="osVersion")
    def os_version(self) -> Optional[pulumi.Input[str]]:
        """
        The OS version Prefix matches are supported if asterisk(*) is provided as the last character. For example, to match all versions with a major version of `7`, specify the following value for this field `7.*` An empty string matches all OS versions.
        """
        return pulumi.get(self, "os_version")

    @os_version.setter
    def os_version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_version", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 mode: pulumi.Input[str],
                 resource_groups: pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupArgs']]],
                 allow_no_resource_group_match: Optional[pulumi.Input[bool]] = None,
                 description: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        :param pulumi.Input[str] mode: Required. Policy mode Possible values: MODE_UNSPECIFIED, VALIDATION, ENFORCEMENT
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupArgs']]] resource_groups: Required. List of resource groups for the policy. For a particular VM, resource groups are evaluated in the order specified and the first resource group that is applicable is selected and the rest are ignored. If none of the resource groups are applicable for a VM, the VM is considered to be non-compliant w.r.t this policy. This behavior can be toggled by the flag `allow_no_resource_group_match`
        :param pulumi.Input[bool] allow_no_resource_group_match: This flag determines the OS policy compliance status when none of the resource groups within the policy are applicable for a VM. Set this value to `true` if the policy needs to be reported as compliant even if the policy has nothing to validate or enforce.
        :param pulumi.Input[str] description: OS policy assignment description. Length of the description is limited to 1024 characters.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "mode", mode)
        pulumi.set(__self__, "resource_groups", resource_groups)
        if allow_no_resource_group_match is not None:
            pulumi.set(__self__, "allow_no_resource_group_match", allow_no_resource_group_match)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def mode(self) -> pulumi.Input[str]:
        """
        Required. Policy mode Possible values: MODE_UNSPECIFIED, VALIDATION, ENFORCEMENT
        """
        return pulumi.get(self, "mode")

    @mode.setter
    def mode(self, value: pulumi.Input[str]):
        pulumi.set(self, "mode", value)

    @property
    @pulumi.getter(name="resourceGroups")
    def resource_groups(self) -> pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupArgs']]]:
        """
        Required. List of resource groups for the policy. For a particular VM, resource groups are evaluated in the order specified and the first resource group that is applicable is selected and the rest are ignored. If none of the resource groups are applicable for a VM, the VM is considered to be non-compliant w.r.t this policy. This behavior can be toggled by the flag `allow_no_resource_group_match`
        """
        return pulumi.get(self, "resource_groups")

    @resource_groups.setter
    def resource_groups(self, value: pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupArgs']]]):
        pulumi.set(self, "resource_groups", value)

    @property
    @pulumi.getter(name="allowNoResourceGroupMatch")
    def allow_no_resource_group_match(self) -> Optional[pulumi.Input[bool]]:
        """
        This flag determines the OS policy compliance status when none of the resource groups within the policy are applicable for a VM. Set this value to `true` if the policy needs to be reported as compliant even if the policy has nothing to validate or enforce.
        """
        return pulumi.get(self, "allow_no_resource_group_match")

    @allow_no_resource_group_match.setter
    def allow_no_resource_group_match(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_no_resource_group_match", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        OS policy assignment description. Length of the description is limited to 1024 characters.
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "description", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupArgs:
    def __init__(__self__, *,
                 resources: pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceArgs']]],
                 inventory_filters: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceArgs']]] resources: Required. List of resources configured for this resource group. The resources are executed in the exact order specified here.
        :param pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs']]] inventory_filters: List of inventory filters for the resource group. The resources in this resource group are applied to the target VM if it satisfies at least one of the following inventory filters. For example, to apply this resource group to VMs running either `RHEL` or `CentOS` operating systems, specify 2 items for the list with following values: inventory_filters[0].os_short_name='rhel' and inventory_filters[1].os_short_name='centos' If the list is empty, this resource group will be applied to the target VM unconditionally.
        """
        pulumi.set(__self__, "resources", resources)
        if inventory_filters is not None:
            pulumi.set(__self__, "inventory_filters", inventory_filters)

    @property
    @pulumi.getter
    def resources(self) -> pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceArgs']]]:
        """
        Required. List of resources configured for this resource group. The resources are executed in the exact order specified here.
        """
        return pulumi.get(self, "resources")

    @resources.setter
    def resources(self, value: pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceArgs']]]):
        pulumi.set(self, "resources", value)

    @property
    @pulumi.getter(name="inventoryFilters")
    def inventory_filters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs']]]]:
        """
        List of inventory filters for the resource group. The resources in this resource group are applied to the target VM if it satisfies at least one of the following inventory filters. For example, to apply this resource group to VMs running either `RHEL` or `CentOS` operating systems, specify 2 items for the list with following values: inventory_filters[0].os_short_name='rhel' and inventory_filters[1].os_short_name='centos' If the list is empty, this resource group will be applied to the target VM unconditionally.
        """
        return pulumi.get(self, "inventory_filters")

    @inventory_filters.setter
    def inventory_filters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs']]]]):
        pulumi.set(self, "inventory_filters", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupInventoryFilterArgs:
    def __init__(__self__, *,
                 os_short_name: pulumi.Input[str],
                 os_version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] os_short_name: Required. The OS short name
        :param pulumi.Input[str] os_version: The OS version Prefix matches are supported if asterisk(*) is provided as the last character. For example, to match all versions with a major version of `7`, specify the following value for this field `7.*` An empty string matches all OS versions.
        """
        pulumi.set(__self__, "os_short_name", os_short_name)
        if os_version is not None:
            pulumi.set(__self__, "os_version", os_version)

    @property
    @pulumi.getter(name="osShortName")
    def os_short_name(self) -> pulumi.Input[str]:
        """
        Required. The OS short name
        """
        return pulumi.get(self, "os_short_name")

    @os_short_name.setter
    def os_short_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "os_short_name", value)

    @property
    @pulumi.getter(name="osVersion")
    def os_version(self) -> Optional[pulumi.Input[str]]:
        """
        The OS version Prefix matches are supported if asterisk(*) is provided as the last character. For example, to match all versions with a major version of `7`, specify the following value for this field `7.*` An empty string matches all OS versions.
        """
        return pulumi.get(self, "os_version")

    @os_version.setter
    def os_version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "os_version", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 exec_: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs']] = None,
                 file: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs']] = None,
                 pkg: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs']] = None,
                 repository: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs']] = None):
        """
        :param pulumi.Input[str] id: Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs'] exec_: Exec resource
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs'] file: A remote or local source.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs'] pkg: Package resource
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs'] repository: Package repository resource
        """
        pulumi.set(__self__, "id", id)
        if exec_ is not None:
            pulumi.set(__self__, "exec_", exec_)
        if file is not None:
            pulumi.set(__self__, "file", file)
        if pkg is not None:
            pulumi.set(__self__, "pkg", pkg)
        if repository is not None:
            pulumi.set(__self__, "repository", repository)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="exec")
    def exec_(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs']]:
        """
        Exec resource
        """
        return pulumi.get(self, "exec_")

    @exec_.setter
    def exec_(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs']]):
        pulumi.set(self, "exec_", value)

    @property
    @pulumi.getter
    def file(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs']]:
        """
        A remote or local source.
        """
        return pulumi.get(self, "file")

    @file.setter
    def file(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs']]):
        pulumi.set(self, "file", value)

    @property
    @pulumi.getter
    def pkg(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs']]:
        """
        Package resource
        """
        return pulumi.get(self, "pkg")

    @pkg.setter
    def pkg(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs']]):
        pulumi.set(self, "pkg", value)

    @property
    @pulumi.getter
    def repository(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs']]:
        """
        Package repository resource
        """
        return pulumi.get(self, "repository")

    @repository.setter
    def repository(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs']]):
        pulumi.set(self, "repository", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecArgs:
    def __init__(__self__, *,
                 validate: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs'],
                 enforce: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs']] = None):
        """
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs'] validate: Required. What to run to validate this resource is in the desired state. An exit code of 100 indicates "in desired state", and exit code of 101 indicates "not in desired state". Any other exit code indicates a failure running validate.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs'] enforce: What to run to bring this resource into the desired state. An exit code of 100 indicates "success", any other exit code indicates a failure running enforce.
        """
        pulumi.set(__self__, "validate", validate)
        if enforce is not None:
            pulumi.set(__self__, "enforce", enforce)

    @property
    @pulumi.getter
    def validate(self) -> pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs']:
        """
        Required. What to run to validate this resource is in the desired state. An exit code of 100 indicates "in desired state", and exit code of 101 indicates "not in desired state". Any other exit code indicates a failure running validate.
        """
        return pulumi.get(self, "validate")

    @validate.setter
    def validate(self, value: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs']):
        pulumi.set(self, "validate", value)

    @property
    @pulumi.getter
    def enforce(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs']]:
        """
        What to run to bring this resource into the desired state. An exit code of 100 indicates "success", any other exit code indicates a failure running enforce.
        """
        return pulumi.get(self, "enforce")

    @enforce.setter
    def enforce(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs']]):
        pulumi.set(self, "enforce", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceArgs:
    def __init__(__self__, *,
                 interpreter: pulumi.Input[str],
                 args: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 file: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs']] = None,
                 output_file_path: Optional[pulumi.Input[str]] = None,
                 script: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] interpreter: Required. The script interpreter to use. Possible values: INTERPRETER_UNSPECIFIED, NONE, SHELL, POWERSHELL
        :param pulumi.Input[Sequence[pulumi.Input[str]]] args: Optional arguments to pass to the source during execution.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs'] file: A remote or local source.
        :param pulumi.Input[str] output_file_path: Only recorded for enforce Exec. Path to an output file (that is created by this Exec) whose content will be recorded in OSPolicyResourceCompliance after a successful run. Absence or failure to read this file will result in this ExecResource being non-compliant. Output file size is limited to 100K bytes.
        :param pulumi.Input[str] script: An inline script. The size of the script is limited to 1024 characters.
        """
        pulumi.set(__self__, "interpreter", interpreter)
        if args is not None:
            pulumi.set(__self__, "args", args)
        if file is not None:
            pulumi.set(__self__, "file", file)
        if output_file_path is not None:
            pulumi.set(__self__, "output_file_path", output_file_path)
        if script is not None:
            pulumi.set(__self__, "script", script)

    @property
    @pulumi.getter
    def interpreter(self) -> pulumi.Input[str]:
        """
        Required. The script interpreter to use. Possible values: INTERPRETER_UNSPECIFIED, NONE, SHELL, POWERSHELL
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: pulumi.Input[str]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter
    def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Optional arguments to pass to the source during execution.
        """
        return pulumi.get(self, "args")

    @args.setter
    def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "args", value)

    @property
    @pulumi.getter
    def file(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs']]:
        """
        A remote or local source.
        """
        return pulumi.get(self, "file")

    @file.setter
    def file(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs']]):
        pulumi.set(self, "file", value)

    @property
    @pulumi.getter(name="outputFilePath")
    def output_file_path(self) -> Optional[pulumi.Input[str]]:
        """
        Only recorded for enforce Exec. Path to an output file (that is created by this Exec) whose content will be recorded in OSPolicyResourceCompliance after a successful run. Absence or failure to read this file will result in this ExecResource being non-compliant. Output file size is limited to 100K bytes.
        """
        return pulumi.get(self, "output_file_path")

    @output_file_path.setter
    def output_file_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "output_file_path", value)

    @property
    @pulumi.getter
    def script(self) -> Optional[pulumi.Input[str]]:
        """
        An inline script. The size of the script is limited to 1024 characters.
        """
        return pulumi.get(self, "script")

    @script.setter
    def script(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "script", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecEnforceFileRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateArgs:
    def __init__(__self__, *,
                 interpreter: pulumi.Input[str],
                 args: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 file: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs']] = None,
                 output_file_path: Optional[pulumi.Input[str]] = None,
                 script: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] interpreter: Required. The script interpreter to use. Possible values: INTERPRETER_UNSPECIFIED, NONE, SHELL, POWERSHELL
        :param pulumi.Input[Sequence[pulumi.Input[str]]] args: Optional arguments to pass to the source during execution.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs'] file: A remote or local source.
        :param pulumi.Input[str] output_file_path: Only recorded for enforce Exec. Path to an output file (that is created by this Exec) whose content will be recorded in OSPolicyResourceCompliance after a successful run. Absence or failure to read this file will result in this ExecResource being non-compliant. Output file size is limited to 100K bytes.
        :param pulumi.Input[str] script: An inline script. The size of the script is limited to 1024 characters.
        """
        pulumi.set(__self__, "interpreter", interpreter)
        if args is not None:
            pulumi.set(__self__, "args", args)
        if file is not None:
            pulumi.set(__self__, "file", file)
        if output_file_path is not None:
            pulumi.set(__self__, "output_file_path", output_file_path)
        if script is not None:
            pulumi.set(__self__, "script", script)

    @property
    @pulumi.getter
    def interpreter(self) -> pulumi.Input[str]:
        """
        Required. The script interpreter to use. Possible values: INTERPRETER_UNSPECIFIED, NONE, SHELL, POWERSHELL
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: pulumi.Input[str]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter
    def args(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Optional arguments to pass to the source during execution.
        """
        return pulumi.get(self, "args")

    @args.setter
    def args(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "args", value)

    @property
    @pulumi.getter
    def file(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs']]:
        """
        A remote or local source.
        """
        return pulumi.get(self, "file")

    @file.setter
    def file(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs']]):
        pulumi.set(self, "file", value)

    @property
    @pulumi.getter(name="outputFilePath")
    def output_file_path(self) -> Optional[pulumi.Input[str]]:
        """
        Only recorded for enforce Exec. Path to an output file (that is created by this Exec) whose content will be recorded in OSPolicyResourceCompliance after a successful run. Absence or failure to read this file will result in this ExecResource being non-compliant. Output file size is limited to 100K bytes.
        """
        return pulumi.get(self, "output_file_path")

    @output_file_path.setter
    def output_file_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "output_file_path", value)

    @property
    @pulumi.getter
    def script(self) -> Optional[pulumi.Input[str]]:
        """
        An inline script. The size of the script is limited to 1024 characters.
        """
        return pulumi.get(self, "script")

    @script.setter
    def script(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "script", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceExecValidateFileRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceFileArgs:
    def __init__(__self__, *,
                 path: pulumi.Input[str],
                 state: pulumi.Input[str],
                 content: Optional[pulumi.Input[str]] = None,
                 file: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs']] = None,
                 permissions: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] path: Required. The absolute path of the file within the VM.
        :param pulumi.Input[str] state: Required. Desired state of the file. Possible values: OS_POLICY_COMPLIANCE_STATE_UNSPECIFIED, COMPLIANT, NON_COMPLIANT, UNKNOWN, NO_OS_POLICIES_APPLICABLE
        :param pulumi.Input[str] content: A a file with this content. The size of the content is limited to 1024 characters.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs'] file: A remote or local source.
        :param pulumi.Input[str] permissions: -
               Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one bit corresponds to the execute permission. Default behavior is 755. Below are some examples of permissions and their associated values: read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        pulumi.set(__self__, "path", path)
        pulumi.set(__self__, "state", state)
        if content is not None:
            pulumi.set(__self__, "content", content)
        if file is not None:
            pulumi.set(__self__, "file", file)
        if permissions is not None:
            pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def path(self) -> pulumi.Input[str]:
        """
        Required. The absolute path of the file within the VM.
        """
        return pulumi.get(self, "path")

    @path.setter
    def path(self, value: pulumi.Input[str]):
        pulumi.set(self, "path", value)

    @property
    @pulumi.getter
    def state(self) -> pulumi.Input[str]:
        """
        Required. Desired state of the file. Possible values: OS_POLICY_COMPLIANCE_STATE_UNSPECIFIED, COMPLIANT, NON_COMPLIANT, UNKNOWN, NO_OS_POLICIES_APPLICABLE
        """
        return pulumi.get(self, "state")

    @state.setter
    def state(self, value: pulumi.Input[str]):
        pulumi.set(self, "state", value)

    @property
    @pulumi.getter
    def content(self) -> Optional[pulumi.Input[str]]:
        """
        A a file with this content. The size of the content is limited to 1024 characters.
        """
        return pulumi.get(self, "content")

    @content.setter
    def content(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "content", value)

    @property
    @pulumi.getter
    def file(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs']]:
        """
        A remote or local source.
        """
        return pulumi.get(self, "file")

    @file.setter
    def file(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs']]):
        pulumi.set(self, "file", value)

    @property
    @pulumi.getter
    def permissions(self) -> Optional[pulumi.Input[str]]:
        """
        -
        Consists of three octal digits which represent, in order, the permissions of the owner, group, and other users for the file (similarly to the numeric mode used in the linux chmod utility). Each digit represents a three bit number with the 4 bit corresponding to the read permissions, the 2 bit corresponds to the write bit, and the one bit corresponds to the execute permission. Default behavior is 755. Below are some examples of permissions and their associated values: read, write, and execute: 7 read and execute: 5 read and write: 6 read only: 4
        """
        return pulumi.get(self, "permissions")

    @permissions.setter
    def permissions(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "permissions", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceFileFileRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgArgs:
    def __init__(__self__, *,
                 desired_state: pulumi.Input[str],
                 apt: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs']] = None,
                 deb: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs']] = None,
                 googet: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs']] = None,
                 msi: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs']] = None,
                 rpm: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs']] = None,
                 yum: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs']] = None,
                 zypper: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs']] = None):
        """
        :param pulumi.Input[str] desired_state: Required. The desired state the agent should maintain for this package. Possible values: DESIRED_STATE_UNSPECIFIED, INSTALLED, REMOVED
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs'] apt: An Apt Repository.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs'] deb: A deb package file.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs'] googet: A package managed by GooGet.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs'] msi: An MSI package.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs'] rpm: An rpm package file.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs'] yum: A Yum Repository.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs'] zypper: A Zypper Repository.
        """
        pulumi.set(__self__, "desired_state", desired_state)
        if apt is not None:
            pulumi.set(__self__, "apt", apt)
        if deb is not None:
            pulumi.set(__self__, "deb", deb)
        if googet is not None:
            pulumi.set(__self__, "googet", googet)
        if msi is not None:
            pulumi.set(__self__, "msi", msi)
        if rpm is not None:
            pulumi.set(__self__, "rpm", rpm)
        if yum is not None:
            pulumi.set(__self__, "yum", yum)
        if zypper is not None:
            pulumi.set(__self__, "zypper", zypper)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> pulumi.Input[str]:
        """
        Required. The desired state the agent should maintain for this package. Possible values: DESIRED_STATE_UNSPECIFIED, INSTALLED, REMOVED
        """
        return pulumi.get(self, "desired_state")

    @desired_state.setter
    def desired_state(self, value: pulumi.Input[str]):
        pulumi.set(self, "desired_state", value)

    @property
    @pulumi.getter
    def apt(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs']]:
        """
        An Apt Repository.
        """
        return pulumi.get(self, "apt")

    @apt.setter
    def apt(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs']]):
        pulumi.set(self, "apt", value)

    @property
    @pulumi.getter
    def deb(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs']]:
        """
        A deb package file.
        """
        return pulumi.get(self, "deb")

    @deb.setter
    def deb(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs']]):
        pulumi.set(self, "deb", value)

    @property
    @pulumi.getter
    def googet(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs']]:
        """
        A package managed by GooGet.
        """
        return pulumi.get(self, "googet")

    @googet.setter
    def googet(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs']]):
        pulumi.set(self, "googet", value)

    @property
    @pulumi.getter
    def msi(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs']]:
        """
        An MSI package.
        """
        return pulumi.get(self, "msi")

    @msi.setter
    def msi(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs']]):
        pulumi.set(self, "msi", value)

    @property
    @pulumi.getter
    def rpm(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs']]:
        """
        An rpm package file.
        """
        return pulumi.get(self, "rpm")

    @rpm.setter
    def rpm(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs']]):
        pulumi.set(self, "rpm", value)

    @property
    @pulumi.getter
    def yum(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs']]:
        """
        A Yum Repository.
        """
        return pulumi.get(self, "yum")

    @yum.setter
    def yum(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs']]):
        pulumi.set(self, "yum", value)

    @property
    @pulumi.getter
    def zypper(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs']]:
        """
        A Zypper Repository.
        """
        return pulumi.get(self, "zypper")

    @zypper.setter
    def zypper(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs']]):
        pulumi.set(self, "zypper", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgAptArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Required. The name of the repository.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Required. The name of the repository.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebArgs:
    def __init__(__self__, *,
                 source: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs'],
                 pull_deps: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs'] source: Required. An rpm package.
        :param pulumi.Input[bool] pull_deps: Whether dependencies should also be installed. - install when false: `rpm --upgrade --replacepkgs package.rpm` - install when true: `yum -y install package.rpm` or `zypper -y install package.rpm`
        """
        pulumi.set(__self__, "source", source)
        if pull_deps is not None:
            pulumi.set(__self__, "pull_deps", pull_deps)

    @property
    @pulumi.getter
    def source(self) -> pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs']:
        """
        Required. An rpm package.
        """
        return pulumi.get(self, "source")

    @source.setter
    def source(self, value: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs']):
        pulumi.set(self, "source", value)

    @property
    @pulumi.getter(name="pullDeps")
    def pull_deps(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether dependencies should also be installed. - install when false: `rpm --upgrade --replacepkgs package.rpm` - install when true: `yum -y install package.rpm` or `zypper -y install package.rpm`
        """
        return pulumi.get(self, "pull_deps")

    @pull_deps.setter
    def pull_deps(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "pull_deps", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgDebSourceRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgGoogetArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Required. The name of the repository.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Required. The name of the repository.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiArgs:
    def __init__(__self__, *,
                 source: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs'],
                 properties: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs'] source: Required. An rpm package.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] properties: Additional properties to use during installation. This should be in the format of Property=Setting. Appended to the defaults of `ACTION=INSTALL REBOOT=ReallySuppress`.
        """
        pulumi.set(__self__, "source", source)
        if properties is not None:
            pulumi.set(__self__, "properties", properties)

    @property
    @pulumi.getter
    def source(self) -> pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs']:
        """
        Required. An rpm package.
        """
        return pulumi.get(self, "source")

    @source.setter
    def source(self, value: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs']):
        pulumi.set(self, "source", value)

    @property
    @pulumi.getter
    def properties(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Additional properties to use during installation. This should be in the format of Property=Setting. Appended to the defaults of `ACTION=INSTALL REBOOT=ReallySuppress`.
        """
        return pulumi.get(self, "properties")

    @properties.setter
    def properties(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "properties", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgMsiSourceRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmArgs:
    def __init__(__self__, *,
                 source: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs'],
                 pull_deps: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs'] source: Required. An rpm package.
        :param pulumi.Input[bool] pull_deps: Whether dependencies should also be installed. - install when false: `rpm --upgrade --replacepkgs package.rpm` - install when true: `yum -y install package.rpm` or `zypper -y install package.rpm`
        """
        pulumi.set(__self__, "source", source)
        if pull_deps is not None:
            pulumi.set(__self__, "pull_deps", pull_deps)

    @property
    @pulumi.getter
    def source(self) -> pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs']:
        """
        Required. An rpm package.
        """
        return pulumi.get(self, "source")

    @source.setter
    def source(self, value: pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs']):
        pulumi.set(self, "source", value)

    @property
    @pulumi.getter(name="pullDeps")
    def pull_deps(self) -> Optional[pulumi.Input[bool]]:
        """
        Whether dependencies should also be installed. - install when false: `rpm --upgrade --replacepkgs package.rpm` - install when true: `yum -y install package.rpm` or `zypper -y install package.rpm`
        """
        return pulumi.get(self, "pull_deps")

    @pull_deps.setter
    def pull_deps(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "pull_deps", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceArgs:
    def __init__(__self__, *,
                 allow_insecure: Optional[pulumi.Input[bool]] = None,
                 gcs: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs']] = None,
                 local_path: Optional[pulumi.Input[str]] = None,
                 remote: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs']] = None):
        """
        :param pulumi.Input[bool] allow_insecure: Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs'] gcs: A Cloud Storage object.
        :param pulumi.Input[str] local_path: A local path within the VM to use.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs'] remote: A generic remote file.
        """
        if allow_insecure is not None:
            pulumi.set(__self__, "allow_insecure", allow_insecure)
        if gcs is not None:
            pulumi.set(__self__, "gcs", gcs)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)
        if remote is not None:
            pulumi.set(__self__, "remote", remote)

    @property
    @pulumi.getter(name="allowInsecure")
    def allow_insecure(self) -> Optional[pulumi.Input[bool]]:
        """
        Defaults to false. When false, files are subject to validations based on the file type: Remote: A checksum must be specified. Cloud Storage: An object generation number must be specified.
        """
        return pulumi.get(self, "allow_insecure")

    @allow_insecure.setter
    def allow_insecure(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "allow_insecure", value)

    @property
    @pulumi.getter
    def gcs(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs']]:
        """
        A Cloud Storage object.
        """
        return pulumi.get(self, "gcs")

    @gcs.setter
    def gcs(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs']]):
        pulumi.set(self, "gcs", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        A local path within the VM to use.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)

    @property
    @pulumi.getter
    def remote(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs']]:
        """
        A generic remote file.
        """
        return pulumi.get(self, "remote")

    @remote.setter
    def remote(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs']]):
        pulumi.set(self, "remote", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceGcsArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 object: pulumi.Input[str],
                 generation: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] bucket: Required. Bucket of the Cloud Storage object.
        :param pulumi.Input[str] object: Required. Name of the Cloud Storage object.
        :param pulumi.Input[int] generation: Generation number of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "object", object)
        if generation is not None:
            pulumi.set(__self__, "generation", generation)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Required. Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Required. Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)

    @property
    @pulumi.getter
    def generation(self) -> Optional[pulumi.Input[int]]:
        """
        Generation number of the Cloud Storage object.
        """
        return pulumi.get(self, "generation")

    @generation.setter
    def generation(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "generation", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgRpmSourceRemoteArgs:
    def __init__(__self__, *,
                 uri: pulumi.Input[str],
                 sha256_checksum: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] sha256_checksum: SHA256 checksum of the remote file.
        """
        pulumi.set(__self__, "uri", uri)
        if sha256_checksum is not None:
            pulumi.set(__self__, "sha256_checksum", sha256_checksum)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="sha256Checksum")
    def sha256_checksum(self) -> Optional[pulumi.Input[str]]:
        """
        SHA256 checksum of the remote file.
        """
        return pulumi.get(self, "sha256_checksum")

    @sha256_checksum.setter
    def sha256_checksum(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "sha256_checksum", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgYumArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Required. The name of the repository.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Required. The name of the repository.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourcePkgZypperArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Required. The name of the repository.
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Required. The name of the repository.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryArgs:
    def __init__(__self__, *,
                 apt: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs']] = None,
                 goo: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs']] = None,
                 yum: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs']] = None,
                 zypper: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs']] = None):
        """
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs'] apt: An Apt Repository.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs'] goo: A Goo Repository.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs'] yum: A Yum Repository.
        :param pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs'] zypper: A Zypper Repository.
        """
        if apt is not None:
            pulumi.set(__self__, "apt", apt)
        if goo is not None:
            pulumi.set(__self__, "goo", goo)
        if yum is not None:
            pulumi.set(__self__, "yum", yum)
        if zypper is not None:
            pulumi.set(__self__, "zypper", zypper)

    @property
    @pulumi.getter
    def apt(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs']]:
        """
        An Apt Repository.
        """
        return pulumi.get(self, "apt")

    @apt.setter
    def apt(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs']]):
        pulumi.set(self, "apt", value)

    @property
    @pulumi.getter
    def goo(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs']]:
        """
        A Goo Repository.
        """
        return pulumi.get(self, "goo")

    @goo.setter
    def goo(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs']]):
        pulumi.set(self, "goo", value)

    @property
    @pulumi.getter
    def yum(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs']]:
        """
        A Yum Repository.
        """
        return pulumi.get(self, "yum")

    @yum.setter
    def yum(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs']]):
        pulumi.set(self, "yum", value)

    @property
    @pulumi.getter
    def zypper(self) -> Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs']]:
        """
        A Zypper Repository.
        """
        return pulumi.get(self, "zypper")

    @zypper.setter
    def zypper(self, value: Optional[pulumi.Input['OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs']]):
        pulumi.set(self, "zypper", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryAptArgs:
    def __init__(__self__, *,
                 archive_type: pulumi.Input[str],
                 components: pulumi.Input[Sequence[pulumi.Input[str]]],
                 distribution: pulumi.Input[str],
                 uri: pulumi.Input[str],
                 gpg_key: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] archive_type: Required. Type of archive files in this repository. Possible values: ARCHIVE_TYPE_UNSPECIFIED, DEB, DEB_SRC
        :param pulumi.Input[Sequence[pulumi.Input[str]]] components: Required. List of components for this repository. Must contain at least one item.
        :param pulumi.Input[str] distribution: Required. Distribution of this repository.
        :param pulumi.Input[str] uri: Required. URI for this repository.
        :param pulumi.Input[str] gpg_key: URI of the key file for this repository. The agent maintains a keyring at `/etc/apt/trusted.gpg.d/osconfig_agent_managed.gpg`.
        """
        pulumi.set(__self__, "archive_type", archive_type)
        pulumi.set(__self__, "components", components)
        pulumi.set(__self__, "distribution", distribution)
        pulumi.set(__self__, "uri", uri)
        if gpg_key is not None:
            pulumi.set(__self__, "gpg_key", gpg_key)

    @property
    @pulumi.getter(name="archiveType")
    def archive_type(self) -> pulumi.Input[str]:
        """
        Required. Type of archive files in this repository. Possible values: ARCHIVE_TYPE_UNSPECIFIED, DEB, DEB_SRC
        """
        return pulumi.get(self, "archive_type")

    @archive_type.setter
    def archive_type(self, value: pulumi.Input[str]):
        pulumi.set(self, "archive_type", value)

    @property
    @pulumi.getter
    def components(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        Required. List of components for this repository. Must contain at least one item.
        """
        return pulumi.get(self, "components")

    @components.setter
    def components(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "components", value)

    @property
    @pulumi.getter
    def distribution(self) -> pulumi.Input[str]:
        """
        Required. Distribution of this repository.
        """
        return pulumi.get(self, "distribution")

    @distribution.setter
    def distribution(self, value: pulumi.Input[str]):
        pulumi.set(self, "distribution", value)

    @property
    @pulumi.getter
    def uri(self) -> pulumi.Input[str]:
        """
        Required. URI for this repository.
        """
        return pulumi.get(self, "uri")

    @uri.setter
    def uri(self, value: pulumi.Input[str]):
        pulumi.set(self, "uri", value)

    @property
    @pulumi.getter(name="gpgKey")
    def gpg_key(self) -> Optional[pulumi.Input[str]]:
        """
        URI of the key file for this repository. The agent maintains a keyring at `/etc/apt/trusted.gpg.d/osconfig_agent_managed.gpg`.
        """
        return pulumi.get(self, "gpg_key")

    @gpg_key.setter
    def gpg_key(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "gpg_key", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryGooArgs:
    def __init__(__self__, *,
                 name: pulumi.Input[str],
                 url: pulumi.Input[str]):
        """
        :param pulumi.Input[str] name: Required. The name of the repository.
        :param pulumi.Input[str] url: Required. The url of the repository.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "url", url)

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[str]:
        """
        Required. The name of the repository.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: pulumi.Input[str]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def url(self) -> pulumi.Input[str]:
        """
        Required. The url of the repository.
        """
        return pulumi.get(self, "url")

    @url.setter
    def url(self, value: pulumi.Input[str]):
        pulumi.set(self, "url", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryYumArgs:
    def __init__(__self__, *,
                 base_url: pulumi.Input[str],
                 id: pulumi.Input[str],
                 display_name: Optional[pulumi.Input[str]] = None,
                 gpg_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] base_url: Required. The location of the repository directory.
        :param pulumi.Input[str] id: Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        :param pulumi.Input[str] display_name: The display name of the repository.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] gpg_keys: URIs of GPG keys.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "id", id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if gpg_keys is not None:
            pulumi.set(__self__, "gpg_keys", gpg_keys)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> pulumi.Input[str]:
        """
        Required. The location of the repository directory.
        """
        return pulumi.get(self, "base_url")

    @base_url.setter
    def base_url(self, value: pulumi.Input[str]):
        pulumi.set(self, "base_url", value)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the repository.
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter(name="gpgKeys")
    def gpg_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        URIs of GPG keys.
        """
        return pulumi.get(self, "gpg_keys")

    @gpg_keys.setter
    def gpg_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "gpg_keys", value)


@pulumi.input_type
class OsPolicyAssignmentOsPolicyResourceGroupResourceRepositoryZypperArgs:
    def __init__(__self__, *,
                 base_url: pulumi.Input[str],
                 id: pulumi.Input[str],
                 display_name: Optional[pulumi.Input[str]] = None,
                 gpg_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] base_url: Required. The location of the repository directory.
        :param pulumi.Input[str] id: Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        :param pulumi.Input[str] display_name: The display name of the repository.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] gpg_keys: URIs of GPG keys.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "id", id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if gpg_keys is not None:
            pulumi.set(__self__, "gpg_keys", gpg_keys)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> pulumi.Input[str]:
        """
        Required. The location of the repository directory.
        """
        return pulumi.get(self, "base_url")

    @base_url.setter
    def base_url(self, value: pulumi.Input[str]):
        pulumi.set(self, "base_url", value)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        Required. A one word, unique name for this repository. This is the `repo id` in the zypper config file and also the `display_name` if `display_name` is omitted. This id is also used as the unique identifier when checking for GuestPolicy conflicts.
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[str]]:
        """
        The display name of the repository.
        """
        return pulumi.get(self, "display_name")

    @display_name.setter
    def display_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "display_name", value)

    @property
    @pulumi.getter(name="gpgKeys")
    def gpg_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        URIs of GPG keys.
        """
        return pulumi.get(self, "gpg_keys")

    @gpg_keys.setter
    def gpg_keys(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "gpg_keys", value)


@pulumi.input_type
class OsPolicyAssignmentRolloutArgs:
    def __init__(__self__, *,
                 disruption_budget: pulumi.Input['OsPolicyAssignmentRolloutDisruptionBudgetArgs'],
                 min_wait_duration: pulumi.Input[str]):
        """
        :param pulumi.Input['OsPolicyAssignmentRolloutDisruptionBudgetArgs'] disruption_budget: Required. The maximum number (or percentage) of VMs per zone to disrupt at any given moment.
        :param pulumi.Input[str] min_wait_duration: Required. This determines the minimum duration of time to wait after the configuration changes are applied through the current rollout. A VM continues to count towards the `disruption_budget` at least until this duration of time has passed after configuration changes are applied.
        """
        pulumi.set(__self__, "disruption_budget", disruption_budget)
        pulumi.set(__self__, "min_wait_duration", min_wait_duration)

    @property
    @pulumi.getter(name="disruptionBudget")
    def disruption_budget(self) -> pulumi.Input['OsPolicyAssignmentRolloutDisruptionBudgetArgs']:
        """
        Required. The maximum number (or percentage) of VMs per zone to disrupt at any given moment.
        """
        return pulumi.get(self, "disruption_budget")

    @disruption_budget.setter
    def disruption_budget(self, value: pulumi.Input['OsPolicyAssignmentRolloutDisruptionBudgetArgs']):
        pulumi.set(self, "disruption_budget", value)

    @property
    @pulumi.getter(name="minWaitDuration")
    def min_wait_duration(self) -> pulumi.Input[str]:
        """
        Required. This determines the minimum duration of time to wait after the configuration changes are applied through the current rollout. A VM continues to count towards the `disruption_budget` at least until this duration of time has passed after configuration changes are applied.
        """
        return pulumi.get(self, "min_wait_duration")

    @min_wait_duration.setter
    def min_wait_duration(self, value: pulumi.Input[str]):
        pulumi.set(self, "min_wait_duration", value)


@pulumi.input_type
class OsPolicyAssignmentRolloutDisruptionBudgetArgs:
    def __init__(__self__, *,
                 fixed: Optional[pulumi.Input[int]] = None,
                 percent: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] fixed: Specifies a fixed value.
        :param pulumi.Input[int] percent: Specifies the relative value defined as a percentage, which will be multiplied by a reference value.
        """
        if fixed is not None:
            pulumi.set(__self__, "fixed", fixed)
        if percent is not None:
            pulumi.set(__self__, "percent", percent)

    @property
    @pulumi.getter
    def fixed(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies a fixed value.
        """
        return pulumi.get(self, "fixed")

    @fixed.setter
    def fixed(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "fixed", value)

    @property
    @pulumi.getter
    def percent(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies the relative value defined as a percentage, which will be multiplied by a reference value.
        """
        return pulumi.get(self, "percent")

    @percent.setter
    def percent(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "percent", value)


@pulumi.input_type
class PatchDeploymentInstanceFilterArgs:
    def __init__(__self__, *,
                 all: Optional[pulumi.Input[bool]] = None,
                 group_labels: Optional[pulumi.Input[Sequence[pulumi.Input['PatchDeploymentInstanceFilterGroupLabelArgs']]]] = None,
                 instance_name_prefixes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 instances: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[bool] all: Target all VM instances in the project. If true, no other criteria is permitted.
        :param pulumi.Input[Sequence[pulumi.Input['PatchDeploymentInstanceFilterGroupLabelArgs']]] group_labels: Targets VM instances matching ANY of these GroupLabels. This allows targeting of disparate groups of VM instances.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] instance_name_prefixes: Targets VMs whose name starts with one of these prefixes. Similar to labels, this is another way to group
               VMs when targeting configs, for example prefix="prod-".
        :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: Targets any of the VM instances specified. Instances are specified by their URI in the `form zones/{{zone}}/instances/{{instance_name}}`,
               `projects/{{project_id}}/zones/{{zone}}/instances/{{instance_name}}`, or
               `https://www.googleapis.com/compute/v1/projects/{{project_id}}/zones/{{zone}}/instances/{{instance_name}}`
        :param pulumi.Input[Sequence[pulumi.Input[str]]] zones: Targets VM instances in ANY of these zones. Leave empty to target VM instances in any zone.
        """
        if all is not None:
            pulumi.set(__self__, "all", all)
        if group_labels is not None:
            pulumi.set(__self__, "group_labels", group_labels)
        if instance_name_prefixes is not None:
            pulumi.set(__self__, "instance_name_prefixes", instance_name_prefixes)
        if instances is not None:
            pulumi.set(__self__, "instances", instances)
        if zones is not None:
            pulumi.set(__self__, "zones", zones)

    @property
    @pulumi.getter
    def all(self) -> Optional[pulumi.Input[bool]]:
        """
        Target all VM instances in the project. If true, no other criteria is permitted.
        """
        return pulumi.get(self, "all")

    @all.setter
    def all(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "all", value)

    @property
    @pulumi.getter(name="groupLabels")
    def group_labels(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['PatchDeploymentInstanceFilterGroupLabelArgs']]]]:
        """
        Targets VM instances matching ANY of these GroupLabels. This allows targeting of disparate groups of VM instances.
        Structure is documented below.
        """
        return pulumi.get(self, "group_labels")

    @group_labels.setter
    def group_labels(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['PatchDeploymentInstanceFilterGroupLabelArgs']]]]):
        pulumi.set(self, "group_labels", value)

    @property
    @pulumi.getter(name="instanceNamePrefixes")
    def instance_name_prefixes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets VMs whose name starts with one of these prefixes. Similar to labels, this is another way to group
        VMs when targeting configs, for example prefix="prod-".
        """
        return pulumi.get(self, "instance_name_prefixes")

    @instance_name_prefixes.setter
    def instance_name_prefixes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "instance_name_prefixes", value)

    @property
    @pulumi.getter
    def instances(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets any of the VM instances specified. Instances are specified by their URI in the `form zones/{{zone}}/instances/{{instance_name}}`,
        `projects/{{project_id}}/zones/{{zone}}/instances/{{instance_name}}`, or
        `https://www.googleapis.com/compute/v1/projects/{{project_id}}/zones/{{zone}}/instances/{{instance_name}}`
        """
        return pulumi.get(self, "instances")

    @instances.setter
    def instances(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "instances", value)

    @property
    @pulumi.getter
    def zones(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Targets VM instances in ANY of these zones. Leave empty to target VM instances in any zone.
        """
        return pulumi.get(self, "zones")

    @zones.setter
    def zones(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "zones", value)


@pulumi.input_type
class PatchDeploymentInstanceFilterGroupLabelArgs:
    def __init__(__self__, *,
                 labels: pulumi.Input[Mapping[str, pulumi.Input[str]]]):
        """
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Compute Engine instance labels that must be present for a VM instance to be targeted by this filter
        """
        pulumi.set(__self__, "labels", labels)

    @property
    @pulumi.getter
    def labels(self) -> pulumi.Input[Mapping[str, pulumi.Input[str]]]:
        """
        Compute Engine instance labels that must be present for a VM instance to be targeted by this filter
        """
        return pulumi.get(self, "labels")

    @labels.setter
    def labels(self, value: pulumi.Input[Mapping[str, pulumi.Input[str]]]):
        pulumi.set(self, "labels", value)


@pulumi.input_type
class PatchDeploymentOneTimeScheduleArgs:
    def __init__(__self__, *,
                 execute_time: pulumi.Input[str]):
        """
        :param pulumi.Input[str] execute_time: The desired patch job execution time. A timestamp in RFC3339 UTC "Zulu" format,
               accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        pulumi.set(__self__, "execute_time", execute_time)

    @property
    @pulumi.getter(name="executeTime")
    def execute_time(self) -> pulumi.Input[str]:
        """
        The desired patch job execution time. A timestamp in RFC3339 UTC "Zulu" format,
        accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        return pulumi.get(self, "execute_time")

    @execute_time.setter
    def execute_time(self, value: pulumi.Input[str]):
        pulumi.set(self, "execute_time", value)


@pulumi.input_type
class PatchDeploymentPatchConfigArgs:
    def __init__(__self__, *,
                 apt: Optional[pulumi.Input['PatchDeploymentPatchConfigAptArgs']] = None,
                 goo: Optional[pulumi.Input['PatchDeploymentPatchConfigGooArgs']] = None,
                 mig_instances_allowed: Optional[pulumi.Input[bool]] = None,
                 post_step: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepArgs']] = None,
                 pre_step: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepArgs']] = None,
                 reboot_config: Optional[pulumi.Input[str]] = None,
                 windows_update: Optional[pulumi.Input['PatchDeploymentPatchConfigWindowsUpdateArgs']] = None,
                 yum: Optional[pulumi.Input['PatchDeploymentPatchConfigYumArgs']] = None,
                 zypper: Optional[pulumi.Input['PatchDeploymentPatchConfigZypperArgs']] = None):
        """
        :param pulumi.Input['PatchDeploymentPatchConfigAptArgs'] apt: Apt update settings. Use this setting to override the default apt patch rules.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigGooArgs'] goo: goo update settings. Use this setting to override the default goo patch rules.
               Structure is documented below.
        :param pulumi.Input[bool] mig_instances_allowed: Allows the patch job to run on Managed instance groups (MIGs).
        :param pulumi.Input['PatchDeploymentPatchConfigPostStepArgs'] post_step: The ExecStep to run after the patch update.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigPreStepArgs'] pre_step: The ExecStep to run before the patch update.
               Structure is documented below.
        :param pulumi.Input[str] reboot_config: Post-patch reboot settings.
               Possible values are `DEFAULT`, `ALWAYS`, and `NEVER`.
        :param pulumi.Input['PatchDeploymentPatchConfigWindowsUpdateArgs'] windows_update: Windows update settings. Use this setting to override the default Windows patch rules.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigYumArgs'] yum: Yum update settings. Use this setting to override the default yum patch rules.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigZypperArgs'] zypper: zypper update settings. Use this setting to override the default zypper patch rules.
               Structure is documented below.
        """
        if apt is not None:
            pulumi.set(__self__, "apt", apt)
        if goo is not None:
            pulumi.set(__self__, "goo", goo)
        if mig_instances_allowed is not None:
            pulumi.set(__self__, "mig_instances_allowed", mig_instances_allowed)
        if post_step is not None:
            pulumi.set(__self__, "post_step", post_step)
        if pre_step is not None:
            pulumi.set(__self__, "pre_step", pre_step)
        if reboot_config is not None:
            pulumi.set(__self__, "reboot_config", reboot_config)
        if windows_update is not None:
            pulumi.set(__self__, "windows_update", windows_update)
        if yum is not None:
            pulumi.set(__self__, "yum", yum)
        if zypper is not None:
            pulumi.set(__self__, "zypper", zypper)

    @property
    @pulumi.getter
    def apt(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigAptArgs']]:
        """
        Apt update settings. Use this setting to override the default apt patch rules.
        Structure is documented below.
        """
        return pulumi.get(self, "apt")

    @apt.setter
    def apt(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigAptArgs']]):
        pulumi.set(self, "apt", value)

    @property
    @pulumi.getter
    def goo(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigGooArgs']]:
        """
        goo update settings. Use this setting to override the default goo patch rules.
        Structure is documented below.
        """
        return pulumi.get(self, "goo")

    @goo.setter
    def goo(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigGooArgs']]):
        pulumi.set(self, "goo", value)

    @property
    @pulumi.getter(name="migInstancesAllowed")
    def mig_instances_allowed(self) -> Optional[pulumi.Input[bool]]:
        """
        Allows the patch job to run on Managed instance groups (MIGs).
        """
        return pulumi.get(self, "mig_instances_allowed")

    @mig_instances_allowed.setter
    def mig_instances_allowed(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "mig_instances_allowed", value)

    @property
    @pulumi.getter(name="postStep")
    def post_step(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepArgs']]:
        """
        The ExecStep to run after the patch update.
        Structure is documented below.
        """
        return pulumi.get(self, "post_step")

    @post_step.setter
    def post_step(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepArgs']]):
        pulumi.set(self, "post_step", value)

    @property
    @pulumi.getter(name="preStep")
    def pre_step(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepArgs']]:
        """
        The ExecStep to run before the patch update.
        Structure is documented below.
        """
        return pulumi.get(self, "pre_step")

    @pre_step.setter
    def pre_step(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepArgs']]):
        pulumi.set(self, "pre_step", value)

    @property
    @pulumi.getter(name="rebootConfig")
    def reboot_config(self) -> Optional[pulumi.Input[str]]:
        """
        Post-patch reboot settings.
        Possible values are `DEFAULT`, `ALWAYS`, and `NEVER`.
        """
        return pulumi.get(self, "reboot_config")

    @reboot_config.setter
    def reboot_config(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "reboot_config", value)

    @property
    @pulumi.getter(name="windowsUpdate")
    def windows_update(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigWindowsUpdateArgs']]:
        """
        Windows update settings. Use this setting to override the default Windows patch rules.
        Structure is documented below.
        """
        return pulumi.get(self, "windows_update")

    @windows_update.setter
    def windows_update(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigWindowsUpdateArgs']]):
        pulumi.set(self, "windows_update", value)

    @property
    @pulumi.getter
    def yum(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigYumArgs']]:
        """
        Yum update settings. Use this setting to override the default yum patch rules.
        Structure is documented below.
        """
        return pulumi.get(self, "yum")

    @yum.setter
    def yum(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigYumArgs']]):
        pulumi.set(self, "yum", value)

    @property
    @pulumi.getter
    def zypper(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigZypperArgs']]:
        """
        zypper update settings. Use this setting to override the default zypper patch rules.
        Structure is documented below.
        """
        return pulumi.get(self, "zypper")

    @zypper.setter
    def zypper(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigZypperArgs']]):
        pulumi.set(self, "zypper", value)


@pulumi.input_type
class PatchDeploymentPatchConfigAptArgs:
    def __init__(__self__, *,
                 excludes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 exclusive_packages: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] excludes: List of KBs to exclude from update.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] exclusive_packages: An exclusive list of packages to be updated. These are the only packages that will be updated.
               If these packages are not installed, they will be ignored. This field cannot be specified with
               any other patch configuration fields.
        :param pulumi.Input[str] type: By changing the type to DIST, the patching is performed using apt-get dist-upgrade instead.
               Possible values are `DIST` and `UPGRADE`.
        """
        if excludes is not None:
            pulumi.set(__self__, "excludes", excludes)
        if exclusive_packages is not None:
            pulumi.set(__self__, "exclusive_packages", exclusive_packages)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def excludes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of KBs to exclude from update.
        """
        return pulumi.get(self, "excludes")

    @excludes.setter
    def excludes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "excludes", value)

    @property
    @pulumi.getter(name="exclusivePackages")
    def exclusive_packages(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An exclusive list of packages to be updated. These are the only packages that will be updated.
        If these packages are not installed, they will be ignored. This field cannot be specified with
        any other patch configuration fields.
        """
        return pulumi.get(self, "exclusive_packages")

    @exclusive_packages.setter
    def exclusive_packages(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "exclusive_packages", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        By changing the type to DIST, the patching is performed using apt-get dist-upgrade instead.
        Possible values are `DIST` and `UPGRADE`.
        """
        return pulumi.get(self, "type")

    @type.setter
    def type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "type", value)


@pulumi.input_type
class PatchDeploymentPatchConfigGooArgs:
    def __init__(__self__, *,
                 enabled: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] enabled: goo update settings. Use this setting to override the default goo patch rules.
        """
        pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Input[bool]:
        """
        goo update settings. Use this setting to override the default goo patch rules.
        """
        return pulumi.get(self, "enabled")

    @enabled.setter
    def enabled(self, value: pulumi.Input[bool]):
        pulumi.set(self, "enabled", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPostStepArgs:
    def __init__(__self__, *,
                 linux_exec_step_config: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs']] = None,
                 windows_exec_step_config: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs']] = None):
        """
        :param pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs'] linux_exec_step_config: The ExecStepConfig for all Linux VMs targeted by the PatchJob.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs'] windows_exec_step_config: The ExecStepConfig for all Windows VMs targeted by the PatchJob.
               Structure is documented below.
        """
        if linux_exec_step_config is not None:
            pulumi.set(__self__, "linux_exec_step_config", linux_exec_step_config)
        if windows_exec_step_config is not None:
            pulumi.set(__self__, "windows_exec_step_config", windows_exec_step_config)

    @property
    @pulumi.getter(name="linuxExecStepConfig")
    def linux_exec_step_config(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs']]:
        """
        The ExecStepConfig for all Linux VMs targeted by the PatchJob.
        Structure is documented below.
        """
        return pulumi.get(self, "linux_exec_step_config")

    @linux_exec_step_config.setter
    def linux_exec_step_config(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs']]):
        pulumi.set(self, "linux_exec_step_config", value)

    @property
    @pulumi.getter(name="windowsExecStepConfig")
    def windows_exec_step_config(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs']]:
        """
        The ExecStepConfig for all Windows VMs targeted by the PatchJob.
        Structure is documented below.
        """
        return pulumi.get(self, "windows_exec_step_config")

    @windows_exec_step_config.setter
    def windows_exec_step_config(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs']]):
        pulumi.set(self, "windows_exec_step_config", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs:
    def __init__(__self__, *,
                 allowed_success_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 gcs_object: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs']] = None,
                 interpreter: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_success_codes: Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        :param pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs'] gcs_object: A Cloud Storage object containing the executable.
               Structure is documented below.
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script will
               be executed directly, which will likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        :param pulumi.Input[str] local_path: An absolute path to the executable on the VM.
        """
        if allowed_success_codes is not None:
            pulumi.set(__self__, "allowed_success_codes", allowed_success_codes)
        if gcs_object is not None:
            pulumi.set(__self__, "gcs_object", gcs_object)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedSuccessCodes")
    def allowed_success_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        """
        return pulumi.get(self, "allowed_success_codes")

    @allowed_success_codes.setter
    def allowed_success_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_success_codes", value)

    @property
    @pulumi.getter(name="gcsObject")
    def gcs_object(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs']]:
        """
        A Cloud Storage object containing the executable.
        Structure is documented below.
        """
        return pulumi.get(self, "gcs_object")

    @gcs_object.setter
    def gcs_object(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs']]):
        pulumi.set(self, "gcs_object", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script will
        be executed directly, which will likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        An absolute path to the executable on the VM.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 generation_number: pulumi.Input[str],
                 object: pulumi.Input[str]):
        """
        :param pulumi.Input[str] bucket: Bucket of the Cloud Storage object.
        :param pulumi.Input[str] generation_number: Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        :param pulumi.Input[str] object: Name of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "generation_number", generation_number)
        pulumi.set(__self__, "object", object)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter(name="generationNumber")
    def generation_number(self) -> pulumi.Input[str]:
        """
        Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        """
        return pulumi.get(self, "generation_number")

    @generation_number.setter
    def generation_number(self, value: pulumi.Input[str]):
        pulumi.set(self, "generation_number", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs:
    def __init__(__self__, *,
                 allowed_success_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 gcs_object: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs']] = None,
                 interpreter: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_success_codes: Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        :param pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs'] gcs_object: A Cloud Storage object containing the executable.
               Structure is documented below.
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script will
               be executed directly, which will likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        :param pulumi.Input[str] local_path: An absolute path to the executable on the VM.
        """
        if allowed_success_codes is not None:
            pulumi.set(__self__, "allowed_success_codes", allowed_success_codes)
        if gcs_object is not None:
            pulumi.set(__self__, "gcs_object", gcs_object)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedSuccessCodes")
    def allowed_success_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        """
        return pulumi.get(self, "allowed_success_codes")

    @allowed_success_codes.setter
    def allowed_success_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_success_codes", value)

    @property
    @pulumi.getter(name="gcsObject")
    def gcs_object(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs']]:
        """
        A Cloud Storage object containing the executable.
        Structure is documented below.
        """
        return pulumi.get(self, "gcs_object")

    @gcs_object.setter
    def gcs_object(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs']]):
        pulumi.set(self, "gcs_object", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script will
        be executed directly, which will likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        An absolute path to the executable on the VM.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 generation_number: pulumi.Input[str],
                 object: pulumi.Input[str]):
        """
        :param pulumi.Input[str] bucket: Bucket of the Cloud Storage object.
        :param pulumi.Input[str] generation_number: Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        :param pulumi.Input[str] object: Name of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "generation_number", generation_number)
        pulumi.set(__self__, "object", object)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter(name="generationNumber")
    def generation_number(self) -> pulumi.Input[str]:
        """
        Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        """
        return pulumi.get(self, "generation_number")

    @generation_number.setter
    def generation_number(self, value: pulumi.Input[str]):
        pulumi.set(self, "generation_number", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPreStepArgs:
    def __init__(__self__, *,
                 linux_exec_step_config: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs']] = None,
                 windows_exec_step_config: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs']] = None):
        """
        :param pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs'] linux_exec_step_config: The ExecStepConfig for all Linux VMs targeted by the PatchJob.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs'] windows_exec_step_config: The ExecStepConfig for all Windows VMs targeted by the PatchJob.
               Structure is documented below.
        """
        if linux_exec_step_config is not None:
            pulumi.set(__self__, "linux_exec_step_config", linux_exec_step_config)
        if windows_exec_step_config is not None:
            pulumi.set(__self__, "windows_exec_step_config", windows_exec_step_config)

    @property
    @pulumi.getter(name="linuxExecStepConfig")
    def linux_exec_step_config(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs']]:
        """
        The ExecStepConfig for all Linux VMs targeted by the PatchJob.
        Structure is documented below.
        """
        return pulumi.get(self, "linux_exec_step_config")

    @linux_exec_step_config.setter
    def linux_exec_step_config(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs']]):
        pulumi.set(self, "linux_exec_step_config", value)

    @property
    @pulumi.getter(name="windowsExecStepConfig")
    def windows_exec_step_config(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs']]:
        """
        The ExecStepConfig for all Windows VMs targeted by the PatchJob.
        Structure is documented below.
        """
        return pulumi.get(self, "windows_exec_step_config")

    @windows_exec_step_config.setter
    def windows_exec_step_config(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs']]):
        pulumi.set(self, "windows_exec_step_config", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs:
    def __init__(__self__, *,
                 allowed_success_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 gcs_object: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs']] = None,
                 interpreter: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_success_codes: Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        :param pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs'] gcs_object: A Cloud Storage object containing the executable.
               Structure is documented below.
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script will
               be executed directly, which will likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        :param pulumi.Input[str] local_path: An absolute path to the executable on the VM.
        """
        if allowed_success_codes is not None:
            pulumi.set(__self__, "allowed_success_codes", allowed_success_codes)
        if gcs_object is not None:
            pulumi.set(__self__, "gcs_object", gcs_object)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedSuccessCodes")
    def allowed_success_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        """
        return pulumi.get(self, "allowed_success_codes")

    @allowed_success_codes.setter
    def allowed_success_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_success_codes", value)

    @property
    @pulumi.getter(name="gcsObject")
    def gcs_object(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs']]:
        """
        A Cloud Storage object containing the executable.
        Structure is documented below.
        """
        return pulumi.get(self, "gcs_object")

    @gcs_object.setter
    def gcs_object(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs']]):
        pulumi.set(self, "gcs_object", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script will
        be executed directly, which will likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        An absolute path to the executable on the VM.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPreStepLinuxExecStepConfigGcsObjectArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 generation_number: pulumi.Input[str],
                 object: pulumi.Input[str]):
        """
        :param pulumi.Input[str] bucket: Bucket of the Cloud Storage object.
        :param pulumi.Input[str] generation_number: Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        :param pulumi.Input[str] object: Name of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "generation_number", generation_number)
        pulumi.set(__self__, "object", object)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter(name="generationNumber")
    def generation_number(self) -> pulumi.Input[str]:
        """
        Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        """
        return pulumi.get(self, "generation_number")

    @generation_number.setter
    def generation_number(self, value: pulumi.Input[str]):
        pulumi.set(self, "generation_number", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs:
    def __init__(__self__, *,
                 allowed_success_codes: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]] = None,
                 gcs_object: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs']] = None,
                 interpreter: Optional[pulumi.Input[str]] = None,
                 local_path: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[int]]] allowed_success_codes: Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        :param pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs'] gcs_object: A Cloud Storage object containing the executable.
               Structure is documented below.
        :param pulumi.Input[str] interpreter: The script interpreter to use to run the script. If no interpreter is specified the script will
               be executed directly, which will likely only succeed for scripts with shebang lines.
               Possible values are `SHELL` and `POWERSHELL`.
        :param pulumi.Input[str] local_path: An absolute path to the executable on the VM.
        """
        if allowed_success_codes is not None:
            pulumi.set(__self__, "allowed_success_codes", allowed_success_codes)
        if gcs_object is not None:
            pulumi.set(__self__, "gcs_object", gcs_object)
        if interpreter is not None:
            pulumi.set(__self__, "interpreter", interpreter)
        if local_path is not None:
            pulumi.set(__self__, "local_path", local_path)

    @property
    @pulumi.getter(name="allowedSuccessCodes")
    def allowed_success_codes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]:
        """
        Defaults to [0]. A list of possible return values that the execution can return to indicate a success.
        """
        return pulumi.get(self, "allowed_success_codes")

    @allowed_success_codes.setter
    def allowed_success_codes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int]]]]):
        pulumi.set(self, "allowed_success_codes", value)

    @property
    @pulumi.getter(name="gcsObject")
    def gcs_object(self) -> Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs']]:
        """
        A Cloud Storage object containing the executable.
        Structure is documented below.
        """
        return pulumi.get(self, "gcs_object")

    @gcs_object.setter
    def gcs_object(self, value: Optional[pulumi.Input['PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs']]):
        pulumi.set(self, "gcs_object", value)

    @property
    @pulumi.getter
    def interpreter(self) -> Optional[pulumi.Input[str]]:
        """
        The script interpreter to use to run the script. If no interpreter is specified the script will
        be executed directly, which will likely only succeed for scripts with shebang lines.
        Possible values are `SHELL` and `POWERSHELL`.
        """
        return pulumi.get(self, "interpreter")

    @interpreter.setter
    def interpreter(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "interpreter", value)

    @property
    @pulumi.getter(name="localPath")
    def local_path(self) -> Optional[pulumi.Input[str]]:
        """
        An absolute path to the executable on the VM.
        """
        return pulumi.get(self, "local_path")

    @local_path.setter
    def local_path(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "local_path", value)


@pulumi.input_type
class PatchDeploymentPatchConfigPreStepWindowsExecStepConfigGcsObjectArgs:
    def __init__(__self__, *,
                 bucket: pulumi.Input[str],
                 generation_number: pulumi.Input[str],
                 object: pulumi.Input[str]):
        """
        :param pulumi.Input[str] bucket: Bucket of the Cloud Storage object.
        :param pulumi.Input[str] generation_number: Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        :param pulumi.Input[str] object: Name of the Cloud Storage object.
        """
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "generation_number", generation_number)
        pulumi.set(__self__, "object", object)

    @property
    @pulumi.getter
    def bucket(self) -> pulumi.Input[str]:
        """
        Bucket of the Cloud Storage object.
        """
        return pulumi.get(self, "bucket")

    @bucket.setter
    def bucket(self, value: pulumi.Input[str]):
        pulumi.set(self, "bucket", value)

    @property
    @pulumi.getter(name="generationNumber")
    def generation_number(self) -> pulumi.Input[str]:
        """
        Generation number of the Cloud Storage object. This is used to ensure that the ExecStep specified by this PatchJob does not change.
        """
        return pulumi.get(self, "generation_number")

    @generation_number.setter
    def generation_number(self, value: pulumi.Input[str]):
        pulumi.set(self, "generation_number", value)

    @property
    @pulumi.getter
    def object(self) -> pulumi.Input[str]:
        """
        Name of the Cloud Storage object.
        """
        return pulumi.get(self, "object")

    @object.setter
    def object(self, value: pulumi.Input[str]):
        pulumi.set(self, "object", value)


@pulumi.input_type
class PatchDeploymentPatchConfigWindowsUpdateArgs:
    def __init__(__self__, *,
                 classifications: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 excludes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 exclusive_patches: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] classifications: Only apply updates of these windows update classifications. If empty, all updates are applied.
               Each value may be one of `CRITICAL`, `SECURITY`, `DEFINITION`, `DRIVER`, `FEATURE_PACK`, `SERVICE_PACK`, `TOOL`, `UPDATE_ROLLUP`, and `UPDATE`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] excludes: List of KBs to exclude from update.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] exclusive_patches: An exclusive list of kbs to be updated. These are the only patches that will be updated.
               This field must not be used with other patch configurations.
        """
        if classifications is not None:
            pulumi.set(__self__, "classifications", classifications)
        if excludes is not None:
            pulumi.set(__self__, "excludes", excludes)
        if exclusive_patches is not None:
            pulumi.set(__self__, "exclusive_patches", exclusive_patches)

    @property
    @pulumi.getter
    def classifications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Only apply updates of these windows update classifications. If empty, all updates are applied.
        Each value may be one of `CRITICAL`, `SECURITY`, `DEFINITION`, `DRIVER`, `FEATURE_PACK`, `SERVICE_PACK`, `TOOL`, `UPDATE_ROLLUP`, and `UPDATE`.
        """
        return pulumi.get(self, "classifications")

    @classifications.setter
    def classifications(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "classifications", value)

    @property
    @pulumi.getter
    def excludes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of KBs to exclude from update.
        """
        return pulumi.get(self, "excludes")

    @excludes.setter
    def excludes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "excludes", value)

    @property
    @pulumi.getter(name="exclusivePatches")
    def exclusive_patches(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An exclusive list of kbs to be updated. These are the only patches that will be updated.
        This field must not be used with other patch configurations.
        """
        return pulumi.get(self, "exclusive_patches")

    @exclusive_patches.setter
    def exclusive_patches(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "exclusive_patches", value)


@pulumi.input_type
class PatchDeploymentPatchConfigYumArgs:
    def __init__(__self__, *,
                 excludes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 exclusive_packages: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 minimal: Optional[pulumi.Input[bool]] = None,
                 security: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] excludes: List of KBs to exclude from update.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] exclusive_packages: An exclusive list of packages to be updated. These are the only packages that will be updated.
               If these packages are not installed, they will be ignored. This field cannot be specified with
               any other patch configuration fields.
        :param pulumi.Input[bool] minimal: Will cause patch to run yum update-minimal instead.
        :param pulumi.Input[bool] security: Adds the --security flag to yum update. Not supported on all platforms.
        """
        if excludes is not None:
            pulumi.set(__self__, "excludes", excludes)
        if exclusive_packages is not None:
            pulumi.set(__self__, "exclusive_packages", exclusive_packages)
        if minimal is not None:
            pulumi.set(__self__, "minimal", minimal)
        if security is not None:
            pulumi.set(__self__, "security", security)

    @property
    @pulumi.getter
    def excludes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of KBs to exclude from update.
        """
        return pulumi.get(self, "excludes")

    @excludes.setter
    def excludes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "excludes", value)

    @property
    @pulumi.getter(name="exclusivePackages")
    def exclusive_packages(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An exclusive list of packages to be updated. These are the only packages that will be updated.
        If these packages are not installed, they will be ignored. This field cannot be specified with
        any other patch configuration fields.
        """
        return pulumi.get(self, "exclusive_packages")

    @exclusive_packages.setter
    def exclusive_packages(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "exclusive_packages", value)

    @property
    @pulumi.getter
    def minimal(self) -> Optional[pulumi.Input[bool]]:
        """
        Will cause patch to run yum update-minimal instead.
        """
        return pulumi.get(self, "minimal")

    @minimal.setter
    def minimal(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "minimal", value)

    @property
    @pulumi.getter
    def security(self) -> Optional[pulumi.Input[bool]]:
        """
        Adds the --security flag to yum update. Not supported on all platforms.
        """
        return pulumi.get(self, "security")

    @security.setter
    def security(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "security", value)


@pulumi.input_type
class PatchDeploymentPatchConfigZypperArgs:
    def __init__(__self__, *,
                 categories: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 excludes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 exclusive_patches: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 severities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 with_optional: Optional[pulumi.Input[bool]] = None,
                 with_update: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input[str]]] categories: Install only patches with these categories. Common categories include security, recommended, and feature.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] excludes: List of KBs to exclude from update.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] exclusive_patches: An exclusive list of kbs to be updated. These are the only patches that will be updated.
               This field must not be used with other patch configurations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] severities: Install only patches with these severities. Common severities include critical, important, moderate, and low.
        :param pulumi.Input[bool] with_optional: Adds the --with-optional flag to zypper patch.
        :param pulumi.Input[bool] with_update: Adds the --with-update flag, to zypper patch.
        """
        if categories is not None:
            pulumi.set(__self__, "categories", categories)
        if excludes is not None:
            pulumi.set(__self__, "excludes", excludes)
        if exclusive_patches is not None:
            pulumi.set(__self__, "exclusive_patches", exclusive_patches)
        if severities is not None:
            pulumi.set(__self__, "severities", severities)
        if with_optional is not None:
            pulumi.set(__self__, "with_optional", with_optional)
        if with_update is not None:
            pulumi.set(__self__, "with_update", with_update)

    @property
    @pulumi.getter
    def categories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Install only patches with these categories. Common categories include security, recommended, and feature.
        """
        return pulumi.get(self, "categories")

    @categories.setter
    def categories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "categories", value)

    @property
    @pulumi.getter
    def excludes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        List of KBs to exclude from update.
        """
        return pulumi.get(self, "excludes")

    @excludes.setter
    def excludes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "excludes", value)

    @property
    @pulumi.getter(name="exclusivePatches")
    def exclusive_patches(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        An exclusive list of kbs to be updated. These are the only patches that will be updated.
        This field must not be used with other patch configurations.
        """
        return pulumi.get(self, "exclusive_patches")

    @exclusive_patches.setter
    def exclusive_patches(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "exclusive_patches", value)

    @property
    @pulumi.getter
    def severities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Install only patches with these severities. Common severities include critical, important, moderate, and low.
        """
        return pulumi.get(self, "severities")

    @severities.setter
    def severities(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "severities", value)

    @property
    @pulumi.getter(name="withOptional")
    def with_optional(self) -> Optional[pulumi.Input[bool]]:
        """
        Adds the --with-optional flag to zypper patch.
        """
        return pulumi.get(self, "with_optional")

    @with_optional.setter
    def with_optional(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "with_optional", value)

    @property
    @pulumi.getter(name="withUpdate")
    def with_update(self) -> Optional[pulumi.Input[bool]]:
        """
        Adds the --with-update flag, to zypper patch.
        """
        return pulumi.get(self, "with_update")

    @with_update.setter
    def with_update(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "with_update", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleArgs:
    def __init__(__self__, *,
                 time_of_day: pulumi.Input['PatchDeploymentRecurringScheduleTimeOfDayArgs'],
                 time_zone: pulumi.Input['PatchDeploymentRecurringScheduleTimeZoneArgs'],
                 end_time: Optional[pulumi.Input[str]] = None,
                 last_execute_time: Optional[pulumi.Input[str]] = None,
                 monthly: Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyArgs']] = None,
                 next_execute_time: Optional[pulumi.Input[str]] = None,
                 start_time: Optional[pulumi.Input[str]] = None,
                 weekly: Optional[pulumi.Input['PatchDeploymentRecurringScheduleWeeklyArgs']] = None):
        """
        :param pulumi.Input['PatchDeploymentRecurringScheduleTimeOfDayArgs'] time_of_day: Time of the day to run a recurring deployment.
               Structure is documented below.
        :param pulumi.Input['PatchDeploymentRecurringScheduleTimeZoneArgs'] time_zone: Defines the time zone that timeOfDay is relative to. The rules for daylight saving time are
               determined by the chosen time zone.
               Structure is documented below.
        :param pulumi.Input[str] end_time: The end time at which a recurring patch deployment schedule is no longer active.
               A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        :param pulumi.Input[str] last_execute_time: -
               The time the last patch job ran successfully.
               A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        :param pulumi.Input['PatchDeploymentRecurringScheduleMonthlyArgs'] monthly: Schedule with monthly executions.
               Structure is documented below.
        :param pulumi.Input[str] next_execute_time: -
               The time the next patch job is scheduled to run.
               A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        :param pulumi.Input[str] start_time: The time that the recurring schedule becomes effective. Defaults to createTime of the patch deployment.
               A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        :param pulumi.Input['PatchDeploymentRecurringScheduleWeeklyArgs'] weekly: Schedule with weekly executions.
               Structure is documented below.
        """
        pulumi.set(__self__, "time_of_day", time_of_day)
        pulumi.set(__self__, "time_zone", time_zone)
        if end_time is not None:
            pulumi.set(__self__, "end_time", end_time)
        if last_execute_time is not None:
            pulumi.set(__self__, "last_execute_time", last_execute_time)
        if monthly is not None:
            pulumi.set(__self__, "monthly", monthly)
        if next_execute_time is not None:
            pulumi.set(__self__, "next_execute_time", next_execute_time)
        if start_time is not None:
            pulumi.set(__self__, "start_time", start_time)
        if weekly is not None:
            pulumi.set(__self__, "weekly", weekly)

    @property
    @pulumi.getter(name="timeOfDay")
    def time_of_day(self) -> pulumi.Input['PatchDeploymentRecurringScheduleTimeOfDayArgs']:
        """
        Time of the day to run a recurring deployment.
        Structure is documented below.
        """
        return pulumi.get(self, "time_of_day")

    @time_of_day.setter
    def time_of_day(self, value: pulumi.Input['PatchDeploymentRecurringScheduleTimeOfDayArgs']):
        pulumi.set(self, "time_of_day", value)

    @property
    @pulumi.getter(name="timeZone")
    def time_zone(self) -> pulumi.Input['PatchDeploymentRecurringScheduleTimeZoneArgs']:
        """
        Defines the time zone that timeOfDay is relative to. The rules for daylight saving time are
        determined by the chosen time zone.
        Structure is documented below.
        """
        return pulumi.get(self, "time_zone")

    @time_zone.setter
    def time_zone(self, value: pulumi.Input['PatchDeploymentRecurringScheduleTimeZoneArgs']):
        pulumi.set(self, "time_zone", value)

    @property
    @pulumi.getter(name="endTime")
    def end_time(self) -> Optional[pulumi.Input[str]]:
        """
        The end time at which a recurring patch deployment schedule is no longer active.
        A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        return pulumi.get(self, "end_time")

    @end_time.setter
    def end_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "end_time", value)

    @property
    @pulumi.getter(name="lastExecuteTime")
    def last_execute_time(self) -> Optional[pulumi.Input[str]]:
        """
        -
        The time the last patch job ran successfully.
        A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        return pulumi.get(self, "last_execute_time")

    @last_execute_time.setter
    def last_execute_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "last_execute_time", value)

    @property
    @pulumi.getter
    def monthly(self) -> Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyArgs']]:
        """
        Schedule with monthly executions.
        Structure is documented below.
        """
        return pulumi.get(self, "monthly")

    @monthly.setter
    def monthly(self, value: Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyArgs']]):
        pulumi.set(self, "monthly", value)

    @property
    @pulumi.getter(name="nextExecuteTime")
    def next_execute_time(self) -> Optional[pulumi.Input[str]]:
        """
        -
        The time the next patch job is scheduled to run.
        A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        return pulumi.get(self, "next_execute_time")

    @next_execute_time.setter
    def next_execute_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "next_execute_time", value)

    @property
    @pulumi.getter(name="startTime")
    def start_time(self) -> Optional[pulumi.Input[str]]:
        """
        The time that the recurring schedule becomes effective. Defaults to createTime of the patch deployment.
        A timestamp in RFC3339 UTC "Zulu" format, accurate to nanoseconds. Example: "2014-10-02T15:01:23.045123456Z".
        """
        return pulumi.get(self, "start_time")

    @start_time.setter
    def start_time(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "start_time", value)

    @property
    @pulumi.getter
    def weekly(self) -> Optional[pulumi.Input['PatchDeploymentRecurringScheduleWeeklyArgs']]:
        """
        Schedule with weekly executions.
        Structure is documented below.
        """
        return pulumi.get(self, "weekly")

    @weekly.setter
    def weekly(self, value: Optional[pulumi.Input['PatchDeploymentRecurringScheduleWeeklyArgs']]):
        pulumi.set(self, "weekly", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleMonthlyArgs:
    def __init__(__self__, *,
                 month_day: Optional[pulumi.Input[int]] = None,
                 week_day_of_month: Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs']] = None):
        """
        :param pulumi.Input[int] month_day: One day of the month. 1-31 indicates the 1st to the 31st day. -1 indicates the last day of the month.
               Months without the target day will be skipped. For example, a schedule to run "every month on the 31st"
               will not run in February, April, June, etc.
        :param pulumi.Input['PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs'] week_day_of_month: Week day in a month.
               Structure is documented below.
        """
        if month_day is not None:
            pulumi.set(__self__, "month_day", month_day)
        if week_day_of_month is not None:
            pulumi.set(__self__, "week_day_of_month", week_day_of_month)

    @property
    @pulumi.getter(name="monthDay")
    def month_day(self) -> Optional[pulumi.Input[int]]:
        """
        One day of the month. 1-31 indicates the 1st to the 31st day. -1 indicates the last day of the month.
        Months without the target day will be skipped. For example, a schedule to run "every month on the 31st"
        will not run in February, April, June, etc.
        """
        return pulumi.get(self, "month_day")

    @month_day.setter
    def month_day(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "month_day", value)

    @property
    @pulumi.getter(name="weekDayOfMonth")
    def week_day_of_month(self) -> Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs']]:
        """
        Week day in a month.
        Structure is documented below.
        """
        return pulumi.get(self, "week_day_of_month")

    @week_day_of_month.setter
    def week_day_of_month(self, value: Optional[pulumi.Input['PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs']]):
        pulumi.set(self, "week_day_of_month", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[str],
                 week_ordinal: pulumi.Input[int]):
        """
        :param pulumi.Input[str] day_of_week: A day of the week.
               Possible values are `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, and `SUNDAY`.
        :param pulumi.Input[int] week_ordinal: Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1 indicates the last week of the month.
        """
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "week_ordinal", week_ordinal)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[str]:
        """
        A day of the week.
        Possible values are `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, and `SUNDAY`.
        """
        return pulumi.get(self, "day_of_week")

    @day_of_week.setter
    def day_of_week(self, value: pulumi.Input[str]):
        pulumi.set(self, "day_of_week", value)

    @property
    @pulumi.getter(name="weekOrdinal")
    def week_ordinal(self) -> pulumi.Input[int]:
        """
        Week number in a month. 1-4 indicates the 1st to 4th week of the month. -1 indicates the last week of the month.
        """
        return pulumi.get(self, "week_ordinal")

    @week_ordinal.setter
    def week_ordinal(self, value: pulumi.Input[int]):
        pulumi.set(self, "week_ordinal", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleTimeOfDayArgs:
    def __init__(__self__, *,
                 hours: Optional[pulumi.Input[int]] = None,
                 minutes: Optional[pulumi.Input[int]] = None,
                 nanos: Optional[pulumi.Input[int]] = None,
                 seconds: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] hours: Hours of day in 24 hour format. Should be from 0 to 23.
               An API may choose to allow the value "24:00:00" for scenarios like business closing time.
        :param pulumi.Input[int] minutes: Minutes of hour of day. Must be from 0 to 59.
        :param pulumi.Input[int] nanos: Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
        :param pulumi.Input[int] seconds: Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
        """
        if hours is not None:
            pulumi.set(__self__, "hours", hours)
        if minutes is not None:
            pulumi.set(__self__, "minutes", minutes)
        if nanos is not None:
            pulumi.set(__self__, "nanos", nanos)
        if seconds is not None:
            pulumi.set(__self__, "seconds", seconds)

    @property
    @pulumi.getter
    def hours(self) -> Optional[pulumi.Input[int]]:
        """
        Hours of day in 24 hour format. Should be from 0 to 23.
        An API may choose to allow the value "24:00:00" for scenarios like business closing time.
        """
        return pulumi.get(self, "hours")

    @hours.setter
    def hours(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "hours", value)

    @property
    @pulumi.getter
    def minutes(self) -> Optional[pulumi.Input[int]]:
        """
        Minutes of hour of day. Must be from 0 to 59.
        """
        return pulumi.get(self, "minutes")

    @minutes.setter
    def minutes(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "minutes", value)

    @property
    @pulumi.getter
    def nanos(self) -> Optional[pulumi.Input[int]]:
        """
        Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
        """
        return pulumi.get(self, "nanos")

    @nanos.setter
    def nanos(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "nanos", value)

    @property
    @pulumi.getter
    def seconds(self) -> Optional[pulumi.Input[int]]:
        """
        Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
        """
        return pulumi.get(self, "seconds")

    @seconds.setter
    def seconds(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "seconds", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleTimeZoneArgs:
    def __init__(__self__, *,
                 id: pulumi.Input[str],
                 version: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] id: IANA Time Zone Database time zone, e.g. "America/New_York".
        :param pulumi.Input[str] version: IANA Time Zone Database version number, e.g. "2019a".
        """
        pulumi.set(__self__, "id", id)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def id(self) -> pulumi.Input[str]:
        """
        IANA Time Zone Database time zone, e.g. "America/New_York".
        """
        return pulumi.get(self, "id")

    @id.setter
    def id(self, value: pulumi.Input[str]):
        pulumi.set(self, "id", value)

    @property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[str]]:
        """
        IANA Time Zone Database version number, e.g. "2019a".
        """
        return pulumi.get(self, "version")

    @version.setter
    def version(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "version", value)


@pulumi.input_type
class PatchDeploymentRecurringScheduleWeeklyArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[str]):
        """
        :param pulumi.Input[str] day_of_week: A day of the week.
               Possible values are `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, and `SUNDAY`.
        """
        pulumi.set(__self__, "day_of_week", day_of_week)

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[str]:
        """
        A day of the week.
        Possible values are `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, and `SUNDAY`.
        """
        return pulumi.get(self, "day_of_week")

    @day_of_week.setter
    def day_of_week(self, value: pulumi.Input[str]):
        pulumi.set(self, "day_of_week", value)


@pulumi.input_type
class PatchDeploymentRolloutArgs:
    def __init__(__self__, *,
                 disruption_budget: pulumi.Input['PatchDeploymentRolloutDisruptionBudgetArgs'],
                 mode: pulumi.Input[str]):
        """
        :param pulumi.Input['PatchDeploymentRolloutDisruptionBudgetArgs'] disruption_budget: The maximum number (or percentage) of VMs per zone to disrupt at any given moment. The number of VMs calculated from multiplying the percentage by the total number of VMs in a zone is rounded up.
               During patching, a VM is considered disrupted from the time the agent is notified to begin until patching has completed. This disruption time includes the time to complete reboot and any post-patch steps.
               A VM contributes to the disruption budget if its patching operation fails either when applying the patches, running pre or post patch steps, or if it fails to respond with a success notification before timing out. VMs that are not running or do not have an active agent do not count toward this disruption budget.
               For zone-by-zone rollouts, if the disruption budget in a zone is exceeded, the patch job stops, because continuing to the next zone requires completion of the patch process in the previous zone.
               For example, if the disruption budget has a fixed value of 10, and 8 VMs fail to patch in the current zone, the patch job continues to patch 2 VMs at a time until the zone is completed. When that zone is completed successfully, patching begins with 10 VMs at a time in the next zone. If 10 VMs in the next zone fail to patch, the patch job stops.
               Structure is documented below.
        :param pulumi.Input[str] mode: Mode of the patch rollout.
               Possible values are `ZONE_BY_ZONE` and `CONCURRENT_ZONES`.
        """
        pulumi.set(__self__, "disruption_budget", disruption_budget)
        pulumi.set(__self__, "mode", mode)

    @property
    @pulumi.getter(name="disruptionBudget")
    def disruption_budget(self) -> pulumi.Input['PatchDeploymentRolloutDisruptionBudgetArgs']:
        """
        The maximum number (or percentage) of VMs per zone to disrupt at any given moment. The number of VMs calculated from multiplying the percentage by the total number of VMs in a zone is rounded up.
        During patching, a VM is considered disrupted from the time the agent is notified to begin until patching has completed. This disruption time includes the time to complete reboot and any post-patch steps.
        A VM contributes to the disruption budget if its patching operation fails either when applying the patches, running pre or post patch steps, or if it fails to respond with a success notification before timing out. VMs that are not running or do not have an active agent do not count toward this disruption budget.
        For zone-by-zone rollouts, if the disruption budget in a zone is exceeded, the patch job stops, because continuing to the next zone requires completion of the patch process in the previous zone.
        For example, if the disruption budget has a fixed value of 10, and 8 VMs fail to patch in the current zone, the patch job continues to patch 2 VMs at a time until the zone is completed. When that zone is completed successfully, patching begins with 10 VMs at a time in the next zone. If 10 VMs in the next zone fail to patch, the patch job stops.
        Structure is documented below.
        """
        return pulumi.get(self, "disruption_budget")

    @disruption_budget.setter
    def disruption_budget(self, value: pulumi.Input['PatchDeploymentRolloutDisruptionBudgetArgs']):
        pulumi.set(self, "disruption_budget", value)

    @property
    @pulumi.getter
    def mode(self) -> pulumi.Input[str]:
        """
        Mode of the patch rollout.
        Possible values are `ZONE_BY_ZONE` and `CONCURRENT_ZONES`.
        """
        return pulumi.get(self, "mode")

    @mode.setter
    def mode(self, value: pulumi.Input[str]):
        pulumi.set(self, "mode", value)


@pulumi.input_type
class PatchDeploymentRolloutDisruptionBudgetArgs:
    def __init__(__self__, *,
                 fixed: Optional[pulumi.Input[int]] = None,
                 percentage: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[int] fixed: Specifies a fixed value.
        :param pulumi.Input[int] percentage: Specifies the relative value defined as a percentage, which will be multiplied by a reference value.
        """
        if fixed is not None:
            pulumi.set(__self__, "fixed", fixed)
        if percentage is not None:
            pulumi.set(__self__, "percentage", percentage)

    @property
    @pulumi.getter
    def fixed(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies a fixed value.
        """
        return pulumi.get(self, "fixed")

    @fixed.setter
    def fixed(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "fixed", value)

    @property
    @pulumi.getter
    def percentage(self) -> Optional[pulumi.Input[int]]:
        """
        Specifies the relative value defined as a percentage, which will be multiplied by a reference value.
        """
        return pulumi.get(self, "percentage")

    @percentage.setter
    def percentage(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "percentage", value)


