# 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
from . import outputs
from ._inputs import *

__all__ = ['MachineArgs', 'Machine']

@pulumi.input_type
class MachineArgs:
    def __init__(__self__, *,
                 flavor: pulumi.Input[str],
                 project_id: pulumi.Input[str],
                 boot_config: Optional[pulumi.Input['MachineBootConfigArgs']] = None,
                 constraints: Optional[pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]]] = None,
                 custom_properties: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 deployment_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]]] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 image_disk_constraints: Optional[pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]]] = None,
                 image_ref: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nics: Optional[pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]]] = None):
        """
        The set of arguments for constructing a Machine resource.
        :param pulumi.Input[str] flavor: Flavor of machine instance.
        :param pulumi.Input[str] project_id: ID of project that resource belongs to.
        :param pulumi.Input['MachineBootConfigArgs'] boot_config: Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        :param pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]] constraints: Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
               Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        :param pulumi.Input[Mapping[str, Any]] custom_properties: Additional properties that may be used to extend the base type.
        :param pulumi.Input[str] deployment_id: Describes machine within the scope of your organization and is not propagated to the cloud.
        :param pulumi.Input[str] description: Human-friendly description.
        :param pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]] disks: Specification for attaching/detaching disks to a machine.
        :param pulumi.Input[str] image: Type of image used for this machine.
        :param pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]] image_disk_constraints: Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        :param pulumi.Input[str] image_ref: Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        :param pulumi.Input[str] name: Human-friendly name used as an identifier in APIs that support this option.
        :param pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]] nics: Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        :param pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]] tags: Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        pulumi.set(__self__, "flavor", flavor)
        pulumi.set(__self__, "project_id", project_id)
        if boot_config is not None:
            pulumi.set(__self__, "boot_config", boot_config)
        if constraints is not None:
            pulumi.set(__self__, "constraints", constraints)
        if custom_properties is not None:
            pulumi.set(__self__, "custom_properties", custom_properties)
        if deployment_id is not None:
            pulumi.set(__self__, "deployment_id", deployment_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if image_disk_constraints is not None:
            pulumi.set(__self__, "image_disk_constraints", image_disk_constraints)
        if image_ref is not None:
            pulumi.set(__self__, "image_ref", image_ref)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if nics is not None:
            pulumi.set(__self__, "nics", nics)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def flavor(self) -> pulumi.Input[str]:
        """
        Flavor of machine instance.
        """
        return pulumi.get(self, "flavor")

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

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> pulumi.Input[str]:
        """
        ID of project that resource belongs to.
        """
        return pulumi.get(self, "project_id")

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

    @property
    @pulumi.getter(name="bootConfig")
    def boot_config(self) -> Optional[pulumi.Input['MachineBootConfigArgs']]:
        """
        Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        """
        return pulumi.get(self, "boot_config")

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

    @property
    @pulumi.getter
    def constraints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]]]:
        """
        Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
        Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        """
        return pulumi.get(self, "constraints")

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

    @property
    @pulumi.getter(name="customProperties")
    def custom_properties(self) -> Optional[pulumi.Input[Mapping[str, Any]]]:
        """
        Additional properties that may be used to extend the base type.
        """
        return pulumi.get(self, "custom_properties")

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

    @property
    @pulumi.getter(name="deploymentId")
    def deployment_id(self) -> Optional[pulumi.Input[str]]:
        """
        Describes machine within the scope of your organization and is not propagated to the cloud.
        """
        return pulumi.get(self, "deployment_id")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Human-friendly description.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]]]:
        """
        Specification for attaching/detaching disks to a machine.
        """
        return pulumi.get(self, "disks")

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

    @property
    @pulumi.getter
    def image(self) -> Optional[pulumi.Input[str]]:
        """
        Type of image used for this machine.
        """
        return pulumi.get(self, "image")

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

    @property
    @pulumi.getter(name="imageDiskConstraints")
    def image_disk_constraints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]]]:
        """
        Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "image_disk_constraints")

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

    @property
    @pulumi.getter(name="imageRef")
    def image_ref(self) -> Optional[pulumi.Input[str]]:
        """
        Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        """
        return pulumi.get(self, "image_ref")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Human-friendly name used as an identifier in APIs that support this option.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def nics(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]]]:
        """
        Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        """
        return pulumi.get(self, "nics")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]]]:
        """
        Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "tags")

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


@pulumi.input_type
class _MachineState:
    def __init__(__self__, *,
                 address: Optional[pulumi.Input[str]] = None,
                 boot_config: Optional[pulumi.Input['MachineBootConfigArgs']] = None,
                 constraints: Optional[pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]]] = None,
                 created_at: Optional[pulumi.Input[str]] = None,
                 custom_properties: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 deployment_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]]] = None,
                 disks_lists: Optional[pulumi.Input[Sequence[pulumi.Input['MachineDisksListArgs']]]] = None,
                 external_id: Optional[pulumi.Input[str]] = None,
                 external_region_id: Optional[pulumi.Input[str]] = None,
                 external_zone_id: Optional[pulumi.Input[str]] = None,
                 flavor: Optional[pulumi.Input[str]] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 image_disk_constraints: Optional[pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]]] = None,
                 image_ref: Optional[pulumi.Input[str]] = None,
                 links: Optional[pulumi.Input[Sequence[pulumi.Input['MachineLinkArgs']]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nics: Optional[pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]]] = None,
                 organization_id: Optional[pulumi.Input[str]] = None,
                 owner: Optional[pulumi.Input[str]] = None,
                 power_state: Optional[pulumi.Input[str]] = None,
                 project_id: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]]] = None,
                 updated_at: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering Machine resources.
        :param pulumi.Input[str] address: Primary address allocated or in use by this machine. The actual type of the address depends on the adapter type. Typically it is either the public or the external IP address.
        :param pulumi.Input['MachineBootConfigArgs'] boot_config: Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        :param pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]] constraints: Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
               Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        :param pulumi.Input[str] created_at: Date when the entity was created. Date and time format is ISO 8601 and UTC.
        :param pulumi.Input[Mapping[str, Any]] custom_properties: Additional properties that may be used to extend the base type.
        :param pulumi.Input[str] deployment_id: Describes machine within the scope of your organization and is not propagated to the cloud.
        :param pulumi.Input[str] description: Human-friendly description.
        :param pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]] disks: Specification for attaching/detaching disks to a machine.
        :param pulumi.Input[Sequence[pulumi.Input['MachineDisksListArgs']]] disks_lists: List of all disks attached to a machine including boot disk, and additional block devices attached using the disks attribute.
        :param pulumi.Input[str] external_id: External entity ID on the provider side.
        :param pulumi.Input[str] external_region_id: External regionId of the resource.
        :param pulumi.Input[str] external_zone_id: External zoneId of the resource.
        :param pulumi.Input[str] flavor: Flavor of machine instance.
        :param pulumi.Input[str] image: Type of image used for this machine.
        :param pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]] image_disk_constraints: Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        :param pulumi.Input[str] image_ref: Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        :param pulumi.Input[Sequence[pulumi.Input['MachineLinkArgs']]] links: HATEOAS of the entity
        :param pulumi.Input[str] name: Human-friendly name used as an identifier in APIs that support this option.
        :param pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]] nics: Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        :param pulumi.Input[str] organization_id: ID of the organization this entity belongs to.
        :param pulumi.Input[str] owner: Email of entity owner.
        :param pulumi.Input[str] power_state: Power state of machine.
        :param pulumi.Input[str] project_id: ID of project that resource belongs to.
        :param pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]] tags: Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        if address is not None:
            pulumi.set(__self__, "address", address)
        if boot_config is not None:
            pulumi.set(__self__, "boot_config", boot_config)
        if constraints is not None:
            pulumi.set(__self__, "constraints", constraints)
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if custom_properties is not None:
            pulumi.set(__self__, "custom_properties", custom_properties)
        if deployment_id is not None:
            pulumi.set(__self__, "deployment_id", deployment_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disks is not None:
            pulumi.set(__self__, "disks", disks)
        if disks_lists is not None:
            pulumi.set(__self__, "disks_lists", disks_lists)
        if external_id is not None:
            pulumi.set(__self__, "external_id", external_id)
        if external_region_id is not None:
            pulumi.set(__self__, "external_region_id", external_region_id)
        if external_zone_id is not None:
            pulumi.set(__self__, "external_zone_id", external_zone_id)
        if flavor is not None:
            pulumi.set(__self__, "flavor", flavor)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if image_disk_constraints is not None:
            pulumi.set(__self__, "image_disk_constraints", image_disk_constraints)
        if image_ref is not None:
            pulumi.set(__self__, "image_ref", image_ref)
        if links is not None:
            pulumi.set(__self__, "links", links)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if nics is not None:
            pulumi.set(__self__, "nics", nics)
        if organization_id is not None:
            pulumi.set(__self__, "organization_id", organization_id)
        if owner is not None:
            pulumi.set(__self__, "owner", owner)
        if power_state is not None:
            pulumi.set(__self__, "power_state", power_state)
        if project_id is not None:
            pulumi.set(__self__, "project_id", project_id)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if updated_at is not None:
            pulumi.set(__self__, "updated_at", updated_at)

    @property
    @pulumi.getter
    def address(self) -> Optional[pulumi.Input[str]]:
        """
        Primary address allocated or in use by this machine. The actual type of the address depends on the adapter type. Typically it is either the public or the external IP address.
        """
        return pulumi.get(self, "address")

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

    @property
    @pulumi.getter(name="bootConfig")
    def boot_config(self) -> Optional[pulumi.Input['MachineBootConfigArgs']]:
        """
        Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        """
        return pulumi.get(self, "boot_config")

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

    @property
    @pulumi.getter
    def constraints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineConstraintArgs']]]]:
        """
        Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
        Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        """
        return pulumi.get(self, "constraints")

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

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[pulumi.Input[str]]:
        """
        Date when the entity was created. Date and time format is ISO 8601 and UTC.
        """
        return pulumi.get(self, "created_at")

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

    @property
    @pulumi.getter(name="customProperties")
    def custom_properties(self) -> Optional[pulumi.Input[Mapping[str, Any]]]:
        """
        Additional properties that may be used to extend the base type.
        """
        return pulumi.get(self, "custom_properties")

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

    @property
    @pulumi.getter(name="deploymentId")
    def deployment_id(self) -> Optional[pulumi.Input[str]]:
        """
        Describes machine within the scope of your organization and is not propagated to the cloud.
        """
        return pulumi.get(self, "deployment_id")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        Human-friendly description.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineDiskArgs']]]]:
        """
        Specification for attaching/detaching disks to a machine.
        """
        return pulumi.get(self, "disks")

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

    @property
    @pulumi.getter(name="disksLists")
    def disks_lists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineDisksListArgs']]]]:
        """
        List of all disks attached to a machine including boot disk, and additional block devices attached using the disks attribute.
        """
        return pulumi.get(self, "disks_lists")

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

    @property
    @pulumi.getter(name="externalId")
    def external_id(self) -> Optional[pulumi.Input[str]]:
        """
        External entity ID on the provider side.
        """
        return pulumi.get(self, "external_id")

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

    @property
    @pulumi.getter(name="externalRegionId")
    def external_region_id(self) -> Optional[pulumi.Input[str]]:
        """
        External regionId of the resource.
        """
        return pulumi.get(self, "external_region_id")

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

    @property
    @pulumi.getter(name="externalZoneId")
    def external_zone_id(self) -> Optional[pulumi.Input[str]]:
        """
        External zoneId of the resource.
        """
        return pulumi.get(self, "external_zone_id")

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

    @property
    @pulumi.getter
    def flavor(self) -> Optional[pulumi.Input[str]]:
        """
        Flavor of machine instance.
        """
        return pulumi.get(self, "flavor")

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

    @property
    @pulumi.getter
    def image(self) -> Optional[pulumi.Input[str]]:
        """
        Type of image used for this machine.
        """
        return pulumi.get(self, "image")

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

    @property
    @pulumi.getter(name="imageDiskConstraints")
    def image_disk_constraints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineImageDiskConstraintArgs']]]]:
        """
        Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "image_disk_constraints")

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

    @property
    @pulumi.getter(name="imageRef")
    def image_ref(self) -> Optional[pulumi.Input[str]]:
        """
        Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        """
        return pulumi.get(self, "image_ref")

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

    @property
    @pulumi.getter
    def links(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineLinkArgs']]]]:
        """
        HATEOAS of the entity
        """
        return pulumi.get(self, "links")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Human-friendly name used as an identifier in APIs that support this option.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def nics(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineNicArgs']]]]:
        """
        Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        """
        return pulumi.get(self, "nics")

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

    @property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> Optional[pulumi.Input[str]]:
        """
        ID of the organization this entity belongs to.
        """
        return pulumi.get(self, "organization_id")

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

    @property
    @pulumi.getter
    def owner(self) -> Optional[pulumi.Input[str]]:
        """
        Email of entity owner.
        """
        return pulumi.get(self, "owner")

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

    @property
    @pulumi.getter(name="powerState")
    def power_state(self) -> Optional[pulumi.Input[str]]:
        """
        Power state of machine.
        """
        return pulumi.get(self, "power_state")

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

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> Optional[pulumi.Input[str]]:
        """
        ID of project that resource belongs to.
        """
        return pulumi.get(self, "project_id")

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

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MachineTagArgs']]]]:
        """
        Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "tags")

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

    @property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "updated_at")

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


class Machine(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 boot_config: Optional[pulumi.Input[pulumi.InputType['MachineBootConfigArgs']]] = None,
                 constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineConstraintArgs']]]]] = None,
                 custom_properties: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 deployment_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDiskArgs']]]]] = None,
                 flavor: Optional[pulumi.Input[str]] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 image_disk_constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineImageDiskConstraintArgs']]]]] = None,
                 image_ref: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nics: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineNicArgs']]]]] = None,
                 project_id: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineTagArgs']]]]] = None,
                 __props__=None):
        """
        Creates a VMware vRealize Automation machine resource.

        ## Example Usage
        ### S

        The following example shows how to create a machine resource.

        ```python
        import pulumi
        import pulumiverse_vra as vra

        this = vra.machine.Machine("this",
            description="terrafrom test machine",
            project_id=data["vra_project"]["this"]["id"],
            image="ubuntu2",
            flavor="medium",
            boot_config=vra.machine.MachineBootConfigArgs(
                content=\"\"\"#cloud-config
          users:
          - default
          - name: myuser
            sudo: ['ALL=(ALL) NOPASSWD:ALL']
            groups: [wheel, sudo, admin]
            shell: '/bin/bash'
            ssh-authorized-keys: |
              ssh-rsa your-ssh-rsa:
            - sudo sed -e 's/.*PasswordAuthentication yes.*/PasswordAuthentication no/' -i /etc/ssh/sshd_config
            - sudo service sshd restart
        \"\"\",
            ),
            nics=[vra.machine.MachineNicArgs(
                network_id=data["vra_network"]["this"]["id"],
            )],
            constraints=[vra.machine.MachineConstraintArgs(
                mandatory=True,
                expression="AWS",
            )],
            tags=[vra.machine.MachineTagArgs(
                key="foo",
                value="bar",
            )],
            disks=[
                vra.machine.MachineDiskArgs(
                    block_device_id=vra_block_device["disk1"]["id"],
                ),
                vra.machine.MachineDiskArgs(
                    block_device_id=vra_block_device["disk2"]["id"],
                ),
            ])
        ```
        A machine resource supports the following resource:

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['MachineBootConfigArgs']] boot_config: Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineConstraintArgs']]]] constraints: Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
               Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        :param pulumi.Input[Mapping[str, Any]] custom_properties: Additional properties that may be used to extend the base type.
        :param pulumi.Input[str] deployment_id: Describes machine within the scope of your organization and is not propagated to the cloud.
        :param pulumi.Input[str] description: Human-friendly description.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDiskArgs']]]] disks: Specification for attaching/detaching disks to a machine.
        :param pulumi.Input[str] flavor: Flavor of machine instance.
        :param pulumi.Input[str] image: Type of image used for this machine.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineImageDiskConstraintArgs']]]] image_disk_constraints: Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        :param pulumi.Input[str] image_ref: Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        :param pulumi.Input[str] name: Human-friendly name used as an identifier in APIs that support this option.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineNicArgs']]]] nics: Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        :param pulumi.Input[str] project_id: ID of project that resource belongs to.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineTagArgs']]]] tags: Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: MachineArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Creates a VMware vRealize Automation machine resource.

        ## Example Usage
        ### S

        The following example shows how to create a machine resource.

        ```python
        import pulumi
        import pulumiverse_vra as vra

        this = vra.machine.Machine("this",
            description="terrafrom test machine",
            project_id=data["vra_project"]["this"]["id"],
            image="ubuntu2",
            flavor="medium",
            boot_config=vra.machine.MachineBootConfigArgs(
                content=\"\"\"#cloud-config
          users:
          - default
          - name: myuser
            sudo: ['ALL=(ALL) NOPASSWD:ALL']
            groups: [wheel, sudo, admin]
            shell: '/bin/bash'
            ssh-authorized-keys: |
              ssh-rsa your-ssh-rsa:
            - sudo sed -e 's/.*PasswordAuthentication yes.*/PasswordAuthentication no/' -i /etc/ssh/sshd_config
            - sudo service sshd restart
        \"\"\",
            ),
            nics=[vra.machine.MachineNicArgs(
                network_id=data["vra_network"]["this"]["id"],
            )],
            constraints=[vra.machine.MachineConstraintArgs(
                mandatory=True,
                expression="AWS",
            )],
            tags=[vra.machine.MachineTagArgs(
                key="foo",
                value="bar",
            )],
            disks=[
                vra.machine.MachineDiskArgs(
                    block_device_id=vra_block_device["disk1"]["id"],
                ),
                vra.machine.MachineDiskArgs(
                    block_device_id=vra_block_device["disk2"]["id"],
                ),
            ])
        ```
        A machine resource supports the following resource:

        :param str resource_name: The name of the resource.
        :param MachineArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(MachineArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 boot_config: Optional[pulumi.Input[pulumi.InputType['MachineBootConfigArgs']]] = None,
                 constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineConstraintArgs']]]]] = None,
                 custom_properties: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 deployment_id: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDiskArgs']]]]] = None,
                 flavor: Optional[pulumi.Input[str]] = None,
                 image: Optional[pulumi.Input[str]] = None,
                 image_disk_constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineImageDiskConstraintArgs']]]]] = None,
                 image_ref: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 nics: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineNicArgs']]]]] = None,
                 project_id: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineTagArgs']]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = MachineArgs.__new__(MachineArgs)

            __props__.__dict__["boot_config"] = boot_config
            __props__.__dict__["constraints"] = constraints
            __props__.__dict__["custom_properties"] = custom_properties
            __props__.__dict__["deployment_id"] = deployment_id
            __props__.__dict__["description"] = description
            __props__.__dict__["disks"] = disks
            if flavor is None and not opts.urn:
                raise TypeError("Missing required property 'flavor'")
            __props__.__dict__["flavor"] = flavor
            __props__.__dict__["image"] = image
            __props__.__dict__["image_disk_constraints"] = image_disk_constraints
            __props__.__dict__["image_ref"] = image_ref
            __props__.__dict__["name"] = name
            __props__.__dict__["nics"] = nics
            if project_id is None and not opts.urn:
                raise TypeError("Missing required property 'project_id'")
            __props__.__dict__["project_id"] = project_id
            __props__.__dict__["tags"] = tags
            __props__.__dict__["address"] = None
            __props__.__dict__["created_at"] = None
            __props__.__dict__["disks_lists"] = None
            __props__.__dict__["external_id"] = None
            __props__.__dict__["external_region_id"] = None
            __props__.__dict__["external_zone_id"] = None
            __props__.__dict__["links"] = None
            __props__.__dict__["organization_id"] = None
            __props__.__dict__["owner"] = None
            __props__.__dict__["power_state"] = None
            __props__.__dict__["updated_at"] = None
        super(Machine, __self__).__init__(
            'vra:machine/machine:Machine',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            address: Optional[pulumi.Input[str]] = None,
            boot_config: Optional[pulumi.Input[pulumi.InputType['MachineBootConfigArgs']]] = None,
            constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineConstraintArgs']]]]] = None,
            created_at: Optional[pulumi.Input[str]] = None,
            custom_properties: Optional[pulumi.Input[Mapping[str, Any]]] = None,
            deployment_id: Optional[pulumi.Input[str]] = None,
            description: Optional[pulumi.Input[str]] = None,
            disks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDiskArgs']]]]] = None,
            disks_lists: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDisksListArgs']]]]] = None,
            external_id: Optional[pulumi.Input[str]] = None,
            external_region_id: Optional[pulumi.Input[str]] = None,
            external_zone_id: Optional[pulumi.Input[str]] = None,
            flavor: Optional[pulumi.Input[str]] = None,
            image: Optional[pulumi.Input[str]] = None,
            image_disk_constraints: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineImageDiskConstraintArgs']]]]] = None,
            image_ref: Optional[pulumi.Input[str]] = None,
            links: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineLinkArgs']]]]] = None,
            name: Optional[pulumi.Input[str]] = None,
            nics: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineNicArgs']]]]] = None,
            organization_id: Optional[pulumi.Input[str]] = None,
            owner: Optional[pulumi.Input[str]] = None,
            power_state: Optional[pulumi.Input[str]] = None,
            project_id: Optional[pulumi.Input[str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineTagArgs']]]]] = None,
            updated_at: Optional[pulumi.Input[str]] = None) -> 'Machine':
        """
        Get an existing Machine resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] address: Primary address allocated or in use by this machine. The actual type of the address depends on the adapter type. Typically it is either the public or the external IP address.
        :param pulumi.Input[pulumi.InputType['MachineBootConfigArgs']] boot_config: Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineConstraintArgs']]]] constraints: Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
               Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        :param pulumi.Input[str] created_at: Date when the entity was created. Date and time format is ISO 8601 and UTC.
        :param pulumi.Input[Mapping[str, Any]] custom_properties: Additional properties that may be used to extend the base type.
        :param pulumi.Input[str] deployment_id: Describes machine within the scope of your organization and is not propagated to the cloud.
        :param pulumi.Input[str] description: Human-friendly description.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDiskArgs']]]] disks: Specification for attaching/detaching disks to a machine.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineDisksListArgs']]]] disks_lists: List of all disks attached to a machine including boot disk, and additional block devices attached using the disks attribute.
        :param pulumi.Input[str] external_id: External entity ID on the provider side.
        :param pulumi.Input[str] external_region_id: External regionId of the resource.
        :param pulumi.Input[str] external_zone_id: External zoneId of the resource.
        :param pulumi.Input[str] flavor: Flavor of machine instance.
        :param pulumi.Input[str] image: Type of image used for this machine.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineImageDiskConstraintArgs']]]] image_disk_constraints: Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        :param pulumi.Input[str] image_ref: Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineLinkArgs']]]] links: HATEOAS of the entity
        :param pulumi.Input[str] name: Human-friendly name used as an identifier in APIs that support this option.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineNicArgs']]]] nics: Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        :param pulumi.Input[str] organization_id: ID of the organization this entity belongs to.
        :param pulumi.Input[str] owner: Email of entity owner.
        :param pulumi.Input[str] power_state: Power state of machine.
        :param pulumi.Input[str] project_id: ID of project that resource belongs to.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['MachineTagArgs']]]] tags: Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _MachineState.__new__(_MachineState)

        __props__.__dict__["address"] = address
        __props__.__dict__["boot_config"] = boot_config
        __props__.__dict__["constraints"] = constraints
        __props__.__dict__["created_at"] = created_at
        __props__.__dict__["custom_properties"] = custom_properties
        __props__.__dict__["deployment_id"] = deployment_id
        __props__.__dict__["description"] = description
        __props__.__dict__["disks"] = disks
        __props__.__dict__["disks_lists"] = disks_lists
        __props__.__dict__["external_id"] = external_id
        __props__.__dict__["external_region_id"] = external_region_id
        __props__.__dict__["external_zone_id"] = external_zone_id
        __props__.__dict__["flavor"] = flavor
        __props__.__dict__["image"] = image
        __props__.__dict__["image_disk_constraints"] = image_disk_constraints
        __props__.__dict__["image_ref"] = image_ref
        __props__.__dict__["links"] = links
        __props__.__dict__["name"] = name
        __props__.__dict__["nics"] = nics
        __props__.__dict__["organization_id"] = organization_id
        __props__.__dict__["owner"] = owner
        __props__.__dict__["power_state"] = power_state
        __props__.__dict__["project_id"] = project_id
        __props__.__dict__["tags"] = tags
        __props__.__dict__["updated_at"] = updated_at
        return Machine(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def address(self) -> pulumi.Output[str]:
        """
        Primary address allocated or in use by this machine. The actual type of the address depends on the adapter type. Typically it is either the public or the external IP address.
        """
        return pulumi.get(self, "address")

    @property
    @pulumi.getter(name="bootConfig")
    def boot_config(self) -> pulumi.Output[Optional['outputs.MachineBootConfig']]:
        """
        Machine boot config that will be passed to the instance. Used to perform common automated configuration tasks and even run scripts after instance starts.
        """
        return pulumi.get(self, "boot_config")

    @property
    @pulumi.getter
    def constraints(self) -> pulumi.Output[Optional[Sequence['outputs.MachineConstraint']]]:
        """
        Constraints used to drive placement policies for the virtual machine produced from the specification. Constraint expressions are matched against tags on existing placement targets.  
        Example:[{"mandatory" : "true", "expression": "environment":"prod"}, {"mandatory" : "false", "expression": "pci"}]
        """
        return pulumi.get(self, "constraints")

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> pulumi.Output[str]:
        """
        Date when the entity was created. Date and time format is ISO 8601 and UTC.
        """
        return pulumi.get(self, "created_at")

    @property
    @pulumi.getter(name="customProperties")
    def custom_properties(self) -> pulumi.Output[Mapping[str, Any]]:
        """
        Additional properties that may be used to extend the base type.
        """
        return pulumi.get(self, "custom_properties")

    @property
    @pulumi.getter(name="deploymentId")
    def deployment_id(self) -> pulumi.Output[str]:
        """
        Describes machine within the scope of your organization and is not propagated to the cloud.
        """
        return pulumi.get(self, "deployment_id")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[str]]:
        """
        Human-friendly description.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disks(self) -> pulumi.Output[Optional[Sequence['outputs.MachineDisk']]]:
        """
        Specification for attaching/detaching disks to a machine.
        """
        return pulumi.get(self, "disks")

    @property
    @pulumi.getter(name="disksLists")
    def disks_lists(self) -> pulumi.Output[Sequence['outputs.MachineDisksList']]:
        """
        List of all disks attached to a machine including boot disk, and additional block devices attached using the disks attribute.
        """
        return pulumi.get(self, "disks_lists")

    @property
    @pulumi.getter(name="externalId")
    def external_id(self) -> pulumi.Output[str]:
        """
        External entity ID on the provider side.
        """
        return pulumi.get(self, "external_id")

    @property
    @pulumi.getter(name="externalRegionId")
    def external_region_id(self) -> pulumi.Output[str]:
        """
        External regionId of the resource.
        """
        return pulumi.get(self, "external_region_id")

    @property
    @pulumi.getter(name="externalZoneId")
    def external_zone_id(self) -> pulumi.Output[str]:
        """
        External zoneId of the resource.
        """
        return pulumi.get(self, "external_zone_id")

    @property
    @pulumi.getter
    def flavor(self) -> pulumi.Output[str]:
        """
        Flavor of machine instance.
        """
        return pulumi.get(self, "flavor")

    @property
    @pulumi.getter
    def image(self) -> pulumi.Output[Optional[str]]:
        """
        Type of image used for this machine.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="imageDiskConstraints")
    def image_disk_constraints(self) -> pulumi.Output[Optional[Sequence['outputs.MachineImageDiskConstraint']]]:
        """
        Constraints that are used to drive placement policies for the image disk. Constraint expressions are matched against tags on existing placement targets. example:[{"mandatory" : "true", "expression": "environment:prod"}, {"mandatory" : "false", "expression": "pci"}]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "image_disk_constraints")

    @property
    @pulumi.getter(name="imageRef")
    def image_ref(self) -> pulumi.Output[Optional[str]]:
        """
        Direct image reference used for this machine (name, path, location, uri, etc.). Valid if no image property is provided
        """
        return pulumi.get(self, "image_ref")

    @property
    @pulumi.getter
    def links(self) -> pulumi.Output[Sequence['outputs.MachineLink']]:
        """
        HATEOAS of the entity
        """
        return pulumi.get(self, "links")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        Human-friendly name used as an identifier in APIs that support this option.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def nics(self) -> pulumi.Output[Optional[Sequence['outputs.MachineNic']]]:
        """
        Set of network interface controller specifications for this machine. If not specified, then a default network connection will be created.
        """
        return pulumi.get(self, "nics")

    @property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> pulumi.Output[str]:
        """
        ID of the organization this entity belongs to.
        """
        return pulumi.get(self, "organization_id")

    @property
    @pulumi.getter
    def owner(self) -> pulumi.Output[str]:
        """
        Email of entity owner.
        """
        return pulumi.get(self, "owner")

    @property
    @pulumi.getter(name="powerState")
    def power_state(self) -> pulumi.Output[str]:
        """
        Power state of machine.
        """
        return pulumi.get(self, "power_state")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> pulumi.Output[str]:
        """
        ID of project that resource belongs to.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Sequence['outputs.MachineTag']]:
        """
        Set of tag keys and optional values that should be set on any resource that is produced from this specification. example:[ { "key" : "ownedBy", "value": "Rainpole" } ]. It is nested argument with the following properties.
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> pulumi.Output[str]:
        return pulumi.get(self, "updated_at")

