# 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

__all__ = [
    'MigrationPlanMigrationPlanStat',
    'MigrationPlanMigrationPlanStatTotalEstimatedCost',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostCompute',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostStorage',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume',
    'MigrationPlanStrategy',
    'MigrationPlanTargetEnvironment',
    'TargetAssetCompatibilityMessage',
    'TargetAssetEstimatedCost',
    'TargetAssetEstimatedCostCompute',
    'TargetAssetEstimatedCostOsImage',
    'TargetAssetEstimatedCostStorage',
    'TargetAssetEstimatedCostStorageVolume',
    'TargetAssetMigrationAsset',
    'TargetAssetRecommendedSpec',
    'TargetAssetRecommendedSpecAgentConfig',
    'TargetAssetRecommendedSpecAgentConfigPluginsConfig',
    'TargetAssetRecommendedSpecCreateVnicDetail',
    'TargetAssetRecommendedSpecInstanceOption',
    'TargetAssetRecommendedSpecPreemptibleInstanceConfig',
    'TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction',
    'TargetAssetRecommendedSpecShapeConfig',
    'TargetAssetRecommendedSpecSourceDetail',
    'TargetAssetTestSpec',
    'TargetAssetTestSpecAgentConfig',
    'TargetAssetTestSpecAgentConfigPluginsConfig',
    'TargetAssetTestSpecCreateVnicDetail',
    'TargetAssetTestSpecInstanceOption',
    'TargetAssetTestSpecPreemptibleInstanceConfig',
    'TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction',
    'TargetAssetTestSpecShapeConfig',
    'TargetAssetTestSpecSourceDetail',
    'TargetAssetUserSpec',
    'TargetAssetUserSpecAgentConfig',
    'TargetAssetUserSpecAgentConfigPluginsConfig',
    'TargetAssetUserSpecCreateVnicDetails',
    'TargetAssetUserSpecInstanceOptions',
    'TargetAssetUserSpecPreemptibleInstanceConfig',
    'TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction',
    'TargetAssetUserSpecShapeConfig',
    'TargetAssetUserSpecSourceDetails',
    'GetMigrationAssetsFilterResult',
    'GetMigrationAssetsMigrationAssetCollectionResult',
    'GetMigrationAssetsMigrationAssetCollectionItemResult',
    'GetMigrationPlanAvailableShapeItemResult',
    'GetMigrationPlanAvailableShapesAvailableShapesCollectionResult',
    'GetMigrationPlanAvailableShapesAvailableShapesCollectionItemResult',
    'GetMigrationPlanAvailableShapesFilterResult',
    'GetMigrationPlanMigrationPlanStatResult',
    'GetMigrationPlanMigrationPlanStatTotalEstimatedCostResult',
    'GetMigrationPlanMigrationPlanStatTotalEstimatedCostComputeResult',
    'GetMigrationPlanMigrationPlanStatTotalEstimatedCostOsImageResult',
    'GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageResult',
    'GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeResult',
    'GetMigrationPlanStrategyResult',
    'GetMigrationPlanTargetEnvironmentResult',
    'GetMigrationPlansFilterResult',
    'GetMigrationPlansMigrationPlanCollectionResult',
    'GetMigrationPlansMigrationPlanCollectionItemResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostComputeResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostOsImageResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageResult',
    'GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageVolumeResult',
    'GetMigrationPlansMigrationPlanCollectionItemStrategyResult',
    'GetMigrationPlansMigrationPlanCollectionItemTargetEnvironmentResult',
    'GetMigrationsFilterResult',
    'GetMigrationsMigrationCollectionResult',
    'GetMigrationsMigrationCollectionItemResult',
    'GetReplicationSchedulesFilterResult',
    'GetReplicationSchedulesReplicationScheduleCollectionResult',
    'GetReplicationSchedulesReplicationScheduleCollectionItemResult',
    'GetTargetAssetCompatibilityMessageResult',
    'GetTargetAssetEstimatedCostResult',
    'GetTargetAssetEstimatedCostComputeResult',
    'GetTargetAssetEstimatedCostOsImageResult',
    'GetTargetAssetEstimatedCostStorageResult',
    'GetTargetAssetEstimatedCostStorageVolumeResult',
    'GetTargetAssetMigrationAssetResult',
    'GetTargetAssetRecommendedSpecResult',
    'GetTargetAssetRecommendedSpecAgentConfigResult',
    'GetTargetAssetRecommendedSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetRecommendedSpecCreateVnicDetailResult',
    'GetTargetAssetRecommendedSpecInstanceOptionResult',
    'GetTargetAssetRecommendedSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetRecommendedSpecShapeConfigResult',
    'GetTargetAssetRecommendedSpecSourceDetailResult',
    'GetTargetAssetTestSpecResult',
    'GetTargetAssetTestSpecAgentConfigResult',
    'GetTargetAssetTestSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetTestSpecCreateVnicDetailResult',
    'GetTargetAssetTestSpecInstanceOptionResult',
    'GetTargetAssetTestSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetTestSpecShapeConfigResult',
    'GetTargetAssetTestSpecSourceDetailResult',
    'GetTargetAssetUserSpecResult',
    'GetTargetAssetUserSpecAgentConfigResult',
    'GetTargetAssetUserSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetUserSpecCreateVnicDetailResult',
    'GetTargetAssetUserSpecInstanceOptionResult',
    'GetTargetAssetUserSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetUserSpecShapeConfigResult',
    'GetTargetAssetUserSpecSourceDetailResult',
    'GetTargetAssetsFilterResult',
    'GetTargetAssetsTargetAssetCollectionResult',
    'GetTargetAssetsTargetAssetCollectionItemResult',
    'GetTargetAssetsTargetAssetCollectionItemCompatibilityMessageResult',
    'GetTargetAssetsTargetAssetCollectionItemEstimatedCostResult',
    'GetTargetAssetsTargetAssetCollectionItemEstimatedCostComputeResult',
    'GetTargetAssetsTargetAssetCollectionItemEstimatedCostOsImageResult',
    'GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageResult',
    'GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageVolumeResult',
    'GetTargetAssetsTargetAssetCollectionItemMigrationAssetResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecCreateVnicDetailResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecInstanceOptionResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecShapeConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemRecommendedSpecSourceDetailResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecCreateVnicDetailResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecInstanceOptionResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecShapeConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemTestSpecSourceDetailResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigPluginsConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecCreateVnicDetailResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecInstanceOptionResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigPreemptionActionResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecShapeConfigResult',
    'GetTargetAssetsTargetAssetCollectionItemUserSpecSourceDetailResult',
]

@pulumi.output_type
class MigrationPlanMigrationPlanStat(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "timeUpdated":
            suggest = "time_updated"
        elif key == "totalEstimatedCosts":
            suggest = "total_estimated_costs"
        elif key == "vmCount":
            suggest = "vm_count"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStat. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStat.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStat.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 time_updated: Optional[str] = None,
                 total_estimated_costs: Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCost']] = None,
                 vm_count: Optional[int] = None):
        """
        :param str time_updated: The time when the migration plan was updated. An RFC3339 formatted datetime string.
        :param Sequence['MigrationPlanMigrationPlanStatTotalEstimatedCostArgs'] total_estimated_costs: Cost estimation description
        :param int vm_count: The total count of VMs in migration
        """
        if time_updated is not None:
            pulumi.set(__self__, "time_updated", time_updated)
        if total_estimated_costs is not None:
            pulumi.set(__self__, "total_estimated_costs", total_estimated_costs)
        if vm_count is not None:
            pulumi.set(__self__, "vm_count", vm_count)

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> Optional[str]:
        """
        The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter(name="totalEstimatedCosts")
    def total_estimated_costs(self) -> Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCost']]:
        """
        Cost estimation description
        """
        return pulumi.get(self, "total_estimated_costs")

    @property
    @pulumi.getter(name="vmCount")
    def vm_count(self) -> Optional[int]:
        """
        The total count of VMs in migration
        """
        return pulumi.get(self, "vm_count")


@pulumi.output_type
class MigrationPlanMigrationPlanStatTotalEstimatedCost(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "currencyCode":
            suggest = "currency_code"
        elif key == "osImages":
            suggest = "os_images"
        elif key == "subscriptionId":
            suggest = "subscription_id"
        elif key == "totalEstimationPerMonth":
            suggest = "total_estimation_per_month"
        elif key == "totalEstimationPerMonthBySubscription":
            suggest = "total_estimation_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStatTotalEstimatedCost. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCost.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCost.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 computes: Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostCompute']] = None,
                 currency_code: Optional[str] = None,
                 os_images: Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage']] = None,
                 storages: Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostStorage']] = None,
                 subscription_id: Optional[str] = None,
                 total_estimation_per_month: Optional[float] = None,
                 total_estimation_per_month_by_subscription: Optional[float] = None):
        """
        :param Sequence['MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['MigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['MigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        if computes is not None:
            pulumi.set(__self__, "computes", computes)
        if currency_code is not None:
            pulumi.set(__self__, "currency_code", currency_code)
        if os_images is not None:
            pulumi.set(__self__, "os_images", os_images)
        if storages is not None:
            pulumi.set(__self__, "storages", storages)
        if subscription_id is not None:
            pulumi.set(__self__, "subscription_id", subscription_id)
        if total_estimation_per_month is not None:
            pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        if total_estimation_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostCompute']]:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> Optional[str]:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage']]:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostStorage']]:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> Optional[str]:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> Optional[float]:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> Optional[float]:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostCompute(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "gpuCount":
            suggest = "gpu_count"
        elif key == "gpuPerHour":
            suggest = "gpu_per_hour"
        elif key == "gpuPerHourBySubscription":
            suggest = "gpu_per_hour_by_subscription"
        elif key == "memoryAmountGb":
            suggest = "memory_amount_gb"
        elif key == "memoryGbPerHour":
            suggest = "memory_gb_per_hour"
        elif key == "memoryGbPerHourBySubscription":
            suggest = "memory_gb_per_hour_by_subscription"
        elif key == "ocpuCount":
            suggest = "ocpu_count"
        elif key == "ocpuPerHour":
            suggest = "ocpu_per_hour"
        elif key == "ocpuPerHourBySubscription":
            suggest = "ocpu_per_hour_by_subscription"
        elif key == "totalPerHour":
            suggest = "total_per_hour"
        elif key == "totalPerHourBySubscription":
            suggest = "total_per_hour_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStatTotalEstimatedCostCompute. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostCompute.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostCompute.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 gpu_count: Optional[float] = None,
                 gpu_per_hour: Optional[float] = None,
                 gpu_per_hour_by_subscription: Optional[float] = None,
                 memory_amount_gb: Optional[float] = None,
                 memory_gb_per_hour: Optional[float] = None,
                 memory_gb_per_hour_by_subscription: Optional[float] = None,
                 ocpu_count: Optional[float] = None,
                 ocpu_per_hour: Optional[float] = None,
                 ocpu_per_hour_by_subscription: Optional[float] = None,
                 total_per_hour: Optional[float] = None,
                 total_per_hour_by_subscription: Optional[float] = None):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        if gpu_count is not None:
            pulumi.set(__self__, "gpu_count", gpu_count)
        if gpu_per_hour is not None:
            pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        if gpu_per_hour_by_subscription is not None:
            pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        if memory_amount_gb is not None:
            pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        if memory_gb_per_hour is not None:
            pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        if memory_gb_per_hour_by_subscription is not None:
            pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        if ocpu_count is not None:
            pulumi.set(__self__, "ocpu_count", ocpu_count)
        if ocpu_per_hour is not None:
            pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        if ocpu_per_hour_by_subscription is not None:
            pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        if total_per_hour is not None:
            pulumi.set(__self__, "total_per_hour", total_per_hour)
        if total_per_hour_by_subscription is not None:
            pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> Optional[float]:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> Optional[float]:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> Optional[float]:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> Optional[float]:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> Optional[float]:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> Optional[float]:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> Optional[float]:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> Optional[float]:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> Optional[float]:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> Optional[float]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> Optional[float]:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "totalPerHour":
            suggest = "total_per_hour"
        elif key == "totalPerHourBySubscription":
            suggest = "total_per_hour_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostOsImage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 total_per_hour: Optional[float] = None,
                 total_per_hour_by_subscription: Optional[float] = None):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        if total_per_hour is not None:
            pulumi.set(__self__, "total_per_hour", total_per_hour)
        if total_per_hour_by_subscription is not None:
            pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> Optional[float]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> Optional[float]:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostStorage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "totalGbPerMonth":
            suggest = "total_gb_per_month"
        elif key == "totalGbPerMonthBySubscription":
            suggest = "total_gb_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStatTotalEstimatedCostStorage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostStorage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostStorage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 total_gb_per_month: Optional[float] = None,
                 total_gb_per_month_by_subscription: Optional[float] = None,
                 volumes: Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume']] = None):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        if total_gb_per_month is not None:
            pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        if total_gb_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        if volumes is not None:
            pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Optional[Sequence['outputs.MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume']]:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "capacityGb":
            suggest = "capacity_gb"
        elif key == "totalGbPerMonth":
            suggest = "total_gb_per_month"
        elif key == "totalGbPerMonthBySubscription":
            suggest = "total_gb_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolume.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 capacity_gb: Optional[float] = None,
                 description: Optional[str] = None,
                 total_gb_per_month: Optional[float] = None,
                 total_gb_per_month_by_subscription: Optional[float] = None):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        if capacity_gb is not None:
            pulumi.set(__self__, "capacity_gb", capacity_gb)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if total_gb_per_month is not None:
            pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        if total_gb_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> Optional[float]:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

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

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class MigrationPlanStrategy(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "resourceType":
            suggest = "resource_type"
        elif key == "strategyType":
            suggest = "strategy_type"
        elif key == "adjustmentMultiplier":
            suggest = "adjustment_multiplier"
        elif key == "metricTimeWindow":
            suggest = "metric_time_window"
        elif key == "metricType":
            suggest = "metric_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanStrategy. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanStrategy.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanStrategy.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 resource_type: str,
                 strategy_type: str,
                 adjustment_multiplier: Optional[float] = None,
                 metric_time_window: Optional[str] = None,
                 metric_type: Optional[str] = None,
                 percentile: Optional[str] = None):
        """
        :param str resource_type: (Updatable) The type of resource.
        :param str strategy_type: (Updatable) The type of strategy used for migration.
        :param float adjustment_multiplier: (Updatable) The real resource usage is multiplied to this number before making any recommendation.
        :param str metric_time_window: (Updatable) The current state of the migration plan.
        :param str metric_type: (Updatable) The current state of the migration plan.
        :param str percentile: (Updatable) Percentile value
        """
        pulumi.set(__self__, "resource_type", resource_type)
        pulumi.set(__self__, "strategy_type", strategy_type)
        if adjustment_multiplier is not None:
            pulumi.set(__self__, "adjustment_multiplier", adjustment_multiplier)
        if metric_time_window is not None:
            pulumi.set(__self__, "metric_time_window", metric_time_window)
        if metric_type is not None:
            pulumi.set(__self__, "metric_type", metric_type)
        if percentile is not None:
            pulumi.set(__self__, "percentile", percentile)

    @property
    @pulumi.getter(name="resourceType")
    def resource_type(self) -> str:
        """
        (Updatable) The type of resource.
        """
        return pulumi.get(self, "resource_type")

    @property
    @pulumi.getter(name="strategyType")
    def strategy_type(self) -> str:
        """
        (Updatable) The type of strategy used for migration.
        """
        return pulumi.get(self, "strategy_type")

    @property
    @pulumi.getter(name="adjustmentMultiplier")
    def adjustment_multiplier(self) -> Optional[float]:
        """
        (Updatable) The real resource usage is multiplied to this number before making any recommendation.
        """
        return pulumi.get(self, "adjustment_multiplier")

    @property
    @pulumi.getter(name="metricTimeWindow")
    def metric_time_window(self) -> Optional[str]:
        """
        (Updatable) The current state of the migration plan.
        """
        return pulumi.get(self, "metric_time_window")

    @property
    @pulumi.getter(name="metricType")
    def metric_type(self) -> Optional[str]:
        """
        (Updatable) The current state of the migration plan.
        """
        return pulumi.get(self, "metric_type")

    @property
    @pulumi.getter
    def percentile(self) -> Optional[str]:
        """
        (Updatable) Percentile value
        """
        return pulumi.get(self, "percentile")


@pulumi.output_type
class MigrationPlanTargetEnvironment(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "targetEnvironmentType":
            suggest = "target_environment_type"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "dedicatedVmHost":
            suggest = "dedicated_vm_host"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "msLicense":
            suggest = "ms_license"
        elif key == "preferredShapeType":
            suggest = "preferred_shape_type"
        elif key == "targetCompartmentId":
            suggest = "target_compartment_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in MigrationPlanTargetEnvironment. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        MigrationPlanTargetEnvironment.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        MigrationPlanTargetEnvironment.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 subnet: str,
                 target_environment_type: str,
                 vcn: str,
                 availability_domain: Optional[str] = None,
                 dedicated_vm_host: Optional[str] = None,
                 fault_domain: Optional[str] = None,
                 ms_license: Optional[str] = None,
                 preferred_shape_type: Optional[str] = None,
                 target_compartment_id: Optional[str] = None):
        """
        :param str subnet: (Updatable) OCID of the VM configuration subnet.
        :param str target_environment_type: (Updatable) The type of target environment.
        :param str vcn: (Updatable) OCID of the VM configuration VCN.
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str availability_domain: (Updatable) Availability Domain of the VM configuration.
        :param str dedicated_vm_host: (Updatable) OCID of the dedicated VM configuration host.
        :param str fault_domain: (Updatable) Fault domain of the VM configuration.
        :param str ms_license: (Updatable) Microsoft license for the VM configuration.
        :param str preferred_shape_type: (Updatable) Preferred VM shape type provided by the customer.
        :param str target_compartment_id: (Updatable) Target compartment identifier
        """
        pulumi.set(__self__, "subnet", subnet)
        pulumi.set(__self__, "target_environment_type", target_environment_type)
        pulumi.set(__self__, "vcn", vcn)
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if dedicated_vm_host is not None:
            pulumi.set(__self__, "dedicated_vm_host", dedicated_vm_host)
        if fault_domain is not None:
            pulumi.set(__self__, "fault_domain", fault_domain)
        if ms_license is not None:
            pulumi.set(__self__, "ms_license", ms_license)
        if preferred_shape_type is not None:
            pulumi.set(__self__, "preferred_shape_type", preferred_shape_type)
        if target_compartment_id is not None:
            pulumi.set(__self__, "target_compartment_id", target_compartment_id)

    @property
    @pulumi.getter
    def subnet(self) -> str:
        """
        (Updatable) OCID of the VM configuration subnet.
        """
        return pulumi.get(self, "subnet")

    @property
    @pulumi.getter(name="targetEnvironmentType")
    def target_environment_type(self) -> str:
        """
        (Updatable) The type of target environment.
        """
        return pulumi.get(self, "target_environment_type")

    @property
    @pulumi.getter
    def vcn(self) -> str:
        """
        (Updatable) OCID of the VM configuration VCN.


        ** IMPORTANT **
        Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        return pulumi.get(self, "vcn")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> Optional[str]:
        """
        (Updatable) Availability Domain of the VM configuration.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="dedicatedVmHost")
    def dedicated_vm_host(self) -> Optional[str]:
        """
        (Updatable) OCID of the dedicated VM configuration host.
        """
        return pulumi.get(self, "dedicated_vm_host")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[str]:
        """
        (Updatable) Fault domain of the VM configuration.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="msLicense")
    def ms_license(self) -> Optional[str]:
        """
        (Updatable) Microsoft license for the VM configuration.
        """
        return pulumi.get(self, "ms_license")

    @property
    @pulumi.getter(name="preferredShapeType")
    def preferred_shape_type(self) -> Optional[str]:
        """
        (Updatable) Preferred VM shape type provided by the customer.
        """
        return pulumi.get(self, "preferred_shape_type")

    @property
    @pulumi.getter(name="targetCompartmentId")
    def target_compartment_id(self) -> Optional[str]:
        """
        (Updatable) Target compartment identifier
        """
        return pulumi.get(self, "target_compartment_id")


@pulumi.output_type
class TargetAssetCompatibilityMessage(dict):
    def __init__(__self__, *,
                 message: Optional[str] = None,
                 name: Optional[str] = None,
                 severity: Optional[str] = None):
        """
        :param str message: Detailed description of the compatibility issue.
        :param str name: (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param str severity: Severity level of the compatibility issue.
        """
        if message is not None:
            pulumi.set(__self__, "message", message)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if severity is not None:
            pulumi.set(__self__, "severity", severity)

    @property
    @pulumi.getter
    def message(self) -> Optional[str]:
        """
        Detailed description of the compatibility issue.
        """
        return pulumi.get(self, "message")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def severity(self) -> Optional[str]:
        """
        Severity level of the compatibility issue.
        """
        return pulumi.get(self, "severity")


@pulumi.output_type
class TargetAssetEstimatedCost(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "currencyCode":
            suggest = "currency_code"
        elif key == "osImages":
            suggest = "os_images"
        elif key == "subscriptionId":
            suggest = "subscription_id"
        elif key == "totalEstimationPerMonth":
            suggest = "total_estimation_per_month"
        elif key == "totalEstimationPerMonthBySubscription":
            suggest = "total_estimation_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetEstimatedCost. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetEstimatedCost.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetEstimatedCost.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 computes: Optional[Sequence['outputs.TargetAssetEstimatedCostCompute']] = None,
                 currency_code: Optional[str] = None,
                 os_images: Optional[Sequence['outputs.TargetAssetEstimatedCostOsImage']] = None,
                 storages: Optional[Sequence['outputs.TargetAssetEstimatedCostStorage']] = None,
                 subscription_id: Optional[str] = None,
                 total_estimation_per_month: Optional[float] = None,
                 total_estimation_per_month_by_subscription: Optional[float] = None):
        """
        :param Sequence['TargetAssetEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['TargetAssetEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['TargetAssetEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        if computes is not None:
            pulumi.set(__self__, "computes", computes)
        if currency_code is not None:
            pulumi.set(__self__, "currency_code", currency_code)
        if os_images is not None:
            pulumi.set(__self__, "os_images", os_images)
        if storages is not None:
            pulumi.set(__self__, "storages", storages)
        if subscription_id is not None:
            pulumi.set(__self__, "subscription_id", subscription_id)
        if total_estimation_per_month is not None:
            pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        if total_estimation_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Optional[Sequence['outputs.TargetAssetEstimatedCostCompute']]:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> Optional[str]:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Optional[Sequence['outputs.TargetAssetEstimatedCostOsImage']]:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Optional[Sequence['outputs.TargetAssetEstimatedCostStorage']]:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> Optional[str]:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> Optional[float]:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> Optional[float]:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class TargetAssetEstimatedCostCompute(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "gpuCount":
            suggest = "gpu_count"
        elif key == "gpuPerHour":
            suggest = "gpu_per_hour"
        elif key == "gpuPerHourBySubscription":
            suggest = "gpu_per_hour_by_subscription"
        elif key == "memoryAmountGb":
            suggest = "memory_amount_gb"
        elif key == "memoryGbPerHour":
            suggest = "memory_gb_per_hour"
        elif key == "memoryGbPerHourBySubscription":
            suggest = "memory_gb_per_hour_by_subscription"
        elif key == "ocpuCount":
            suggest = "ocpu_count"
        elif key == "ocpuPerHour":
            suggest = "ocpu_per_hour"
        elif key == "ocpuPerHourBySubscription":
            suggest = "ocpu_per_hour_by_subscription"
        elif key == "totalPerHour":
            suggest = "total_per_hour"
        elif key == "totalPerHourBySubscription":
            suggest = "total_per_hour_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetEstimatedCostCompute. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetEstimatedCostCompute.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetEstimatedCostCompute.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 gpu_count: Optional[float] = None,
                 gpu_per_hour: Optional[float] = None,
                 gpu_per_hour_by_subscription: Optional[float] = None,
                 memory_amount_gb: Optional[float] = None,
                 memory_gb_per_hour: Optional[float] = None,
                 memory_gb_per_hour_by_subscription: Optional[float] = None,
                 ocpu_count: Optional[float] = None,
                 ocpu_per_hour: Optional[float] = None,
                 ocpu_per_hour_by_subscription: Optional[float] = None,
                 total_per_hour: Optional[float] = None,
                 total_per_hour_by_subscription: Optional[float] = None):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        if gpu_count is not None:
            pulumi.set(__self__, "gpu_count", gpu_count)
        if gpu_per_hour is not None:
            pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        if gpu_per_hour_by_subscription is not None:
            pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        if memory_amount_gb is not None:
            pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        if memory_gb_per_hour is not None:
            pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        if memory_gb_per_hour_by_subscription is not None:
            pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        if ocpu_count is not None:
            pulumi.set(__self__, "ocpu_count", ocpu_count)
        if ocpu_per_hour is not None:
            pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        if ocpu_per_hour_by_subscription is not None:
            pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        if total_per_hour is not None:
            pulumi.set(__self__, "total_per_hour", total_per_hour)
        if total_per_hour_by_subscription is not None:
            pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> Optional[float]:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> Optional[float]:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> Optional[float]:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> Optional[float]:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> Optional[float]:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> Optional[float]:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> Optional[float]:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> Optional[float]:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> Optional[float]:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> Optional[float]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> Optional[float]:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class TargetAssetEstimatedCostOsImage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "totalPerHour":
            suggest = "total_per_hour"
        elif key == "totalPerHourBySubscription":
            suggest = "total_per_hour_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetEstimatedCostOsImage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetEstimatedCostOsImage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetEstimatedCostOsImage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 total_per_hour: Optional[float] = None,
                 total_per_hour_by_subscription: Optional[float] = None):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        if total_per_hour is not None:
            pulumi.set(__self__, "total_per_hour", total_per_hour)
        if total_per_hour_by_subscription is not None:
            pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> Optional[float]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> Optional[float]:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class TargetAssetEstimatedCostStorage(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "totalGbPerMonth":
            suggest = "total_gb_per_month"
        elif key == "totalGbPerMonthBySubscription":
            suggest = "total_gb_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetEstimatedCostStorage. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetEstimatedCostStorage.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetEstimatedCostStorage.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 total_gb_per_month: Optional[float] = None,
                 total_gb_per_month_by_subscription: Optional[float] = None,
                 volumes: Optional[Sequence['outputs.TargetAssetEstimatedCostStorageVolume']] = None):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['TargetAssetEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        if total_gb_per_month is not None:
            pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        if total_gb_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        if volumes is not None:
            pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Optional[Sequence['outputs.TargetAssetEstimatedCostStorageVolume']]:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class TargetAssetEstimatedCostStorageVolume(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "capacityGb":
            suggest = "capacity_gb"
        elif key == "totalGbPerMonth":
            suggest = "total_gb_per_month"
        elif key == "totalGbPerMonthBySubscription":
            suggest = "total_gb_per_month_by_subscription"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetEstimatedCostStorageVolume. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetEstimatedCostStorageVolume.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetEstimatedCostStorageVolume.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 capacity_gb: Optional[float] = None,
                 description: Optional[str] = None,
                 total_gb_per_month: Optional[float] = None,
                 total_gb_per_month_by_subscription: Optional[float] = None):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        if capacity_gb is not None:
            pulumi.set(__self__, "capacity_gb", capacity_gb)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if total_gb_per_month is not None:
            pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        if total_gb_per_month_by_subscription is not None:
            pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> Optional[float]:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

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

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> Optional[float]:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class TargetAssetMigrationAsset(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "dependedOnBies":
            suggest = "depended_on_bies"
        elif key == "dependsOns":
            suggest = "depends_ons"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "lifecycleDetails":
            suggest = "lifecycle_details"
        elif key == "migrationId":
            suggest = "migration_id"
        elif key == "parentSnapshot":
            suggest = "parent_snapshot"
        elif key == "replicationCompartmentId":
            suggest = "replication_compartment_id"
        elif key == "replicationScheduleId":
            suggest = "replication_schedule_id"
        elif key == "snapShotBucketName":
            suggest = "snap_shot_bucket_name"
        elif key == "sourceAssetData":
            suggest = "source_asset_data"
        elif key == "sourceAssetId":
            suggest = "source_asset_id"
        elif key == "tenancyId":
            suggest = "tenancy_id"
        elif key == "timeCreated":
            suggest = "time_created"
        elif key == "timeUpdated":
            suggest = "time_updated"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetMigrationAsset. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetMigrationAsset.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetMigrationAsset.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 availability_domain: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 depended_on_bies: Optional[Sequence[str]] = None,
                 depends_ons: Optional[Sequence[str]] = None,
                 display_name: Optional[str] = None,
                 id: Optional[str] = None,
                 lifecycle_details: Optional[str] = None,
                 migration_id: Optional[str] = None,
                 notifications: Optional[Sequence[str]] = None,
                 parent_snapshot: Optional[str] = None,
                 replication_compartment_id: Optional[str] = None,
                 replication_schedule_id: Optional[str] = None,
                 snap_shot_bucket_name: Optional[str] = None,
                 snapshots: Optional[Mapping[str, Any]] = None,
                 source_asset_data: Optional[Mapping[str, Any]] = None,
                 source_asset_id: Optional[str] = None,
                 state: Optional[str] = None,
                 tenancy_id: Optional[str] = None,
                 time_created: Optional[str] = None,
                 time_updated: Optional[str] = None,
                 type: Optional[str] = None):
        """
        :param str availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: (Updatable) The OCID of the compartment.
        :param Sequence[str] depended_on_bies: List of migration assets that depend on the asset.
        :param Sequence[str] depends_ons: List of migration assets that depends on the asset.
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str migration_id: OCID of the associated migration.
        :param Sequence[str] notifications: List of notifications
        :param str parent_snapshot: The parent snapshot of the migration asset to be used by the replication task.
        :param str replication_compartment_id: Replication compartment identifier
        :param str replication_schedule_id: Replication schedule identifier
        :param str snap_shot_bucket_name: Name of snapshot bucket
        :param Mapping[str, Any] snapshots: Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        :param Mapping[str, Any] source_asset_data: Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        :param str source_asset_id: OCID that is referenced to an asset for an inventory.
        :param str state: The current state of the target asset.
        :param str tenancy_id: Tenancy identifier
        :param str time_created: The time when the target asset was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the target asset was updated. An RFC3339 formatted datetime string.
        :param str type: (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_id)
        if depended_on_bies is not None:
            pulumi.set(__self__, "depended_on_bies", depended_on_bies)
        if depends_ons is not None:
            pulumi.set(__self__, "depends_ons", depends_ons)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if lifecycle_details is not None:
            pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        if migration_id is not None:
            pulumi.set(__self__, "migration_id", migration_id)
        if notifications is not None:
            pulumi.set(__self__, "notifications", notifications)
        if parent_snapshot is not None:
            pulumi.set(__self__, "parent_snapshot", parent_snapshot)
        if replication_compartment_id is not None:
            pulumi.set(__self__, "replication_compartment_id", replication_compartment_id)
        if replication_schedule_id is not None:
            pulumi.set(__self__, "replication_schedule_id", replication_schedule_id)
        if snap_shot_bucket_name is not None:
            pulumi.set(__self__, "snap_shot_bucket_name", snap_shot_bucket_name)
        if snapshots is not None:
            pulumi.set(__self__, "snapshots", snapshots)
        if source_asset_data is not None:
            pulumi.set(__self__, "source_asset_data", source_asset_data)
        if source_asset_id is not None:
            pulumi.set(__self__, "source_asset_id", source_asset_id)
        if state is not None:
            pulumi.set(__self__, "state", state)
        if tenancy_id is not None:
            pulumi.set(__self__, "tenancy_id", tenancy_id)
        if time_created is not None:
            pulumi.set(__self__, "time_created", time_created)
        if time_updated is not None:
            pulumi.set(__self__, "time_updated", time_updated)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> Optional[str]:
        """
        (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="dependedOnBies")
    def depended_on_bies(self) -> Optional[Sequence[str]]:
        """
        List of migration assets that depend on the asset.
        """
        return pulumi.get(self, "depended_on_bies")

    @property
    @pulumi.getter(name="dependsOns")
    def depends_ons(self) -> Optional[Sequence[str]]:
        """
        List of migration assets that depends on the asset.
        """
        return pulumi.get(self, "depends_ons")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> Optional[str]:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationId")
    def migration_id(self) -> Optional[str]:
        """
        OCID of the associated migration.
        """
        return pulumi.get(self, "migration_id")

    @property
    @pulumi.getter
    def notifications(self) -> Optional[Sequence[str]]:
        """
        List of notifications
        """
        return pulumi.get(self, "notifications")

    @property
    @pulumi.getter(name="parentSnapshot")
    def parent_snapshot(self) -> Optional[str]:
        """
        The parent snapshot of the migration asset to be used by the replication task.
        """
        return pulumi.get(self, "parent_snapshot")

    @property
    @pulumi.getter(name="replicationCompartmentId")
    def replication_compartment_id(self) -> Optional[str]:
        """
        Replication compartment identifier
        """
        return pulumi.get(self, "replication_compartment_id")

    @property
    @pulumi.getter(name="replicationScheduleId")
    def replication_schedule_id(self) -> Optional[str]:
        """
        Replication schedule identifier
        """
        return pulumi.get(self, "replication_schedule_id")

    @property
    @pulumi.getter(name="snapShotBucketName")
    def snap_shot_bucket_name(self) -> Optional[str]:
        """
        Name of snapshot bucket
        """
        return pulumi.get(self, "snap_shot_bucket_name")

    @property
    @pulumi.getter
    def snapshots(self) -> Optional[Mapping[str, Any]]:
        """
        Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "snapshots")

    @property
    @pulumi.getter(name="sourceAssetData")
    def source_asset_data(self) -> Optional[Mapping[str, Any]]:
        """
        Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "source_asset_data")

    @property
    @pulumi.getter(name="sourceAssetId")
    def source_asset_id(self) -> Optional[str]:
        """
        OCID that is referenced to an asset for an inventory.
        """
        return pulumi.get(self, "source_asset_id")

    @property
    @pulumi.getter
    def state(self) -> Optional[str]:
        """
        The current state of the target asset.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="tenancyId")
    def tenancy_id(self) -> Optional[str]:
        """
        Tenancy identifier
        """
        return pulumi.get(self, "tenancy_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> Optional[str]:
        """
        The time when the target asset was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> Optional[str]:
        """
        The time when the target asset was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter
    def type(self) -> Optional[str]:
        """
        (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class TargetAssetRecommendedSpec(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "agentConfigs":
            suggest = "agent_configs"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "capacityReservationId":
            suggest = "capacity_reservation_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "createVnicDetails":
            suggest = "create_vnic_details"
        elif key == "dedicatedVmHostId":
            suggest = "dedicated_vm_host_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "instanceOptions":
            suggest = "instance_options"
        elif key == "ipxeScript":
            suggest = "ipxe_script"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "preemptibleInstanceConfigs":
            suggest = "preemptible_instance_configs"
        elif key == "shapeConfigs":
            suggest = "shape_configs"
        elif key == "sourceDetails":
            suggest = "source_details"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpec. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpec.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpec.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 agent_configs: Optional[Sequence['outputs.TargetAssetRecommendedSpecAgentConfig']] = None,
                 availability_domain: Optional[str] = None,
                 capacity_reservation_id: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 create_vnic_details: Optional[Sequence['outputs.TargetAssetRecommendedSpecCreateVnicDetail']] = None,
                 dedicated_vm_host_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 fault_domain: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 instance_options: Optional[Sequence['outputs.TargetAssetRecommendedSpecInstanceOption']] = None,
                 ipxe_script: Optional[str] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 preemptible_instance_configs: Optional[Sequence['outputs.TargetAssetRecommendedSpecPreemptibleInstanceConfig']] = None,
                 shape: Optional[str] = None,
                 shape_configs: Optional[Sequence['outputs.TargetAssetRecommendedSpecShapeConfig']] = None,
                 source_details: Optional[Sequence['outputs.TargetAssetRecommendedSpecSourceDetail']] = None):
        """
        :param Sequence['TargetAssetRecommendedSpecAgentConfigArgs'] agent_configs: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: (Updatable) The OCID of the compartment.
        :param Sequence['TargetAssetRecommendedSpecCreateVnicDetailArgs'] create_vnic_details: (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
               
               If you do not specify the fault domain, the system selects one for you.
               
               To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.
               
               Example: `FAULT-DOMAIN-1`
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['TargetAssetRecommendedSpecInstanceOptionArgs'] instance_options: (Updatable) Optional mutable instance options
        :param str ipxe_script: (Updatable) This is an advanced option.
               
               When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.
               
               If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.
               
               By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.
               
               If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.
               
               For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).
               
               For more information about iPXE, see http://ipxe.org.
        :param bool is_pv_encryption_in_transit_enabled: (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['TargetAssetRecommendedSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: (Updatable) Configuration options for preemptible instances.
        :param str shape: (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
               
               You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param Sequence['TargetAssetRecommendedSpecShapeConfigArgs'] shape_configs: (Updatable) The shape configuration requested for the instance.
               
               If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.
               
               Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        :param Sequence['TargetAssetRecommendedSpecSourceDetailArgs'] source_details: (Updatable)
        """
        if agent_configs is not None:
            pulumi.set(__self__, "agent_configs", agent_configs)
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if capacity_reservation_id is not None:
            pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_id)
        if create_vnic_details is not None:
            pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        if dedicated_vm_host_id is not None:
            pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if fault_domain is not None:
            pulumi.set(__self__, "fault_domain", fault_domain)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if instance_options is not None:
            pulumi.set(__self__, "instance_options", instance_options)
        if ipxe_script is not None:
            pulumi.set(__self__, "ipxe_script", ipxe_script)
        if is_pv_encryption_in_transit_enabled is not None:
            pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        if preemptible_instance_configs is not None:
            pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        if shape is not None:
            pulumi.set(__self__, "shape", shape)
        if shape_configs is not None:
            pulumi.set(__self__, "shape_configs", shape_configs)
        if source_details is not None:
            pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecAgentConfig']]:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> Optional[str]:
        """
        (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecCreateVnicDetail']]:
        """
        (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[str]:
        """
        (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.

        If you do not specify the fault domain, the system selects one for you.

        To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.

        Example: `FAULT-DOMAIN-1`
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecInstanceOption']]:
        """
        (Updatable) Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[str]:
        """
        (Updatable) This is an advanced option.

        When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.

        If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.

        By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.

        If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.

        For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).

        For more information about iPXE, see http://ipxe.org.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecPreemptibleInstanceConfig']]:
        """
        (Updatable) Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> Optional[str]:
        """
        (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.

        You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecShapeConfig']]:
        """
        (Updatable) The shape configuration requested for the instance.

        If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.

        Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecSourceDetail']]:
        """
        (Updatable)
        """
        return pulumi.get(self, "source_details")


@pulumi.output_type
class TargetAssetRecommendedSpecAgentConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areAllPluginsDisabled":
            suggest = "are_all_plugins_disabled"
        elif key == "isManagementDisabled":
            suggest = "is_management_disabled"
        elif key == "isMonitoringDisabled":
            suggest = "is_monitoring_disabled"
        elif key == "pluginsConfigs":
            suggest = "plugins_configs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecAgentConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecAgentConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecAgentConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[bool] = None,
                 is_management_disabled: Optional[bool] = None,
                 is_monitoring_disabled: Optional[bool] = None,
                 plugins_configs: Optional[Sequence['outputs.TargetAssetRecommendedSpecAgentConfigPluginsConfig']] = None):
        """
        :param bool are_all_plugins_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
               
               To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param bool is_management_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
               
               These are the management plugins: OS Management Service Agent and Compute instance run command.
               
               The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
               * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
               * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        :param bool is_monitoring_disabled: (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
               
               These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.
               
               The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
               * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
               * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        :param Sequence['TargetAssetRecommendedSpecAgentConfigPluginsConfigArgs'] plugins_configs: (Updatable) The configuration of plugins associated with this instance.
        """
        if are_all_plugins_disabled is not None:
            pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        if is_management_disabled is not None:
            pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        if is_monitoring_disabled is not None:
            pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        if plugins_configs is not None:
            pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.

        To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).

        These are the management plugins: OS Management Service Agent and Compute instance run command.

        The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
        * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
        * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).

        These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.

        The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
        * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
        * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecAgentConfigPluginsConfig']]:
        """
        (Updatable) The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class TargetAssetRecommendedSpecAgentConfigPluginsConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "desiredState":
            suggest = "desired_state"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecAgentConfigPluginsConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 desired_state: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str desired_state: (Updatable) Whether the plugin should be enabled or disabled.
               
               To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        :param str name: (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        if desired_state is not None:
            pulumi.set(__self__, "desired_state", desired_state)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> Optional[str]:
        """
        (Updatable) Whether the plugin should be enabled or disabled.

        To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class TargetAssetRecommendedSpecCreateVnicDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "assignPrivateDnsRecord":
            suggest = "assign_private_dns_record"
        elif key == "assignPublicIp":
            suggest = "assign_public_ip"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "nsgIds":
            suggest = "nsg_ids"
        elif key == "privateIp":
            suggest = "private_ip"
        elif key == "skipSourceDestCheck":
            suggest = "skip_source_dest_check"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecCreateVnicDetail. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecCreateVnicDetail.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecCreateVnicDetail.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[bool] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None,
                 vlan_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
               
               If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        :param bool assign_public_ip: (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
               
               **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).
               
               **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).
               
               Example: `false`
               
               If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
               
               If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param str private_ip: (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
               
               If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `10.0.3.3`
        :param bool skip_source_dest_check: (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
               
               If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `true`
        :param str subnet_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
               
               If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        :param str vlan_id: (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        if assign_private_dns_record is not None:
            pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        if assign_public_ip is not None:
            pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if nsg_ids is not None:
            pulumi.set(__self__, "nsg_ids", nsg_ids)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if skip_source_dest_check is not None:
            pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.

        If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.

        **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).

        **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).

        Example: `false`

        If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[Sequence[str]]:
        """
        (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).

        If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[str]:
        """
        (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).

        If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `10.0.3.3`
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[bool]:
        """
        (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).

        If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `true`
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.

        If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[str]:
        """
        (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class TargetAssetRecommendedSpecInstanceOption(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areLegacyImdsEndpointsDisabled":
            suggest = "are_legacy_imds_endpoints_disabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecInstanceOption. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecInstanceOption.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecInstanceOption.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[bool] = None):
        """
        :param bool are_legacy_imds_endpoints_disabled: (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        if are_legacy_imds_endpoints_disabled is not None:
            pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class TargetAssetRecommendedSpecPreemptibleInstanceConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preemptionActions":
            suggest = "preemption_actions"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecPreemptibleInstanceConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 preemption_actions: Optional[Sequence['outputs.TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction']] = None):
        """
        :param Sequence['TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        if preemption_actions is not None:
            pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Optional[Sequence['outputs.TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction']]:
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preserveBootVolume":
            suggest = "preserve_boot_volume"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 preserve_boot_volume: Optional[bool] = None,
                 type: Optional[str] = None):
        """
        :param bool preserve_boot_volume: (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        if preserve_boot_volume is not None:
            pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> Optional[bool]:
        """
        (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> Optional[str]:
        """
        (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class TargetAssetRecommendedSpecShapeConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baselineOcpuUtilization":
            suggest = "baseline_ocpu_utilization"
        elif key == "memoryInGbs":
            suggest = "memory_in_gbs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecShapeConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecShapeConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecShapeConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[str] = None,
                 memory_in_gbs: Optional[float] = None,
                 ocpus: Optional[float] = None):
        """
        :param str baseline_ocpu_utilization: (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
               
               The following values are supported:
        :param float memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: (Updatable) The total number of OCPUs available to the instance.
        """
        if baseline_ocpu_utilization is not None:
            pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        if memory_in_gbs is not None:
            pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        if ocpus is not None:
            pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> Optional[str]:
        """
        (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.

        The following values are supported:
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> Optional[float]:
        """
        (Updatable) The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> Optional[float]:
        """
        (Updatable) The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class TargetAssetRecommendedSpecSourceDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeId":
            suggest = "boot_volume_id"
        elif key == "bootVolumeSizeInGbs":
            suggest = "boot_volume_size_in_gbs"
        elif key == "bootVolumeVpusPerGb":
            suggest = "boot_volume_vpus_per_gb"
        elif key == "imageId":
            suggest = "image_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"
        elif key == "sourceType":
            suggest = "source_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetRecommendedSpecSourceDetail. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetRecommendedSpecSourceDetail.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetRecommendedSpecSourceDetail.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 boot_volume_id: Optional[str] = None,
                 boot_volume_size_in_gbs: Optional[str] = None,
                 boot_volume_vpus_per_gb: Optional[str] = None,
                 image_id: Optional[str] = None,
                 kms_key_id: Optional[str] = None,
                 source_type: Optional[str] = None):
        """
        :param str boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
               
               Allowed values:
        :param str image_id: (Updatable) The OCID of the image used to boot the instance.
        :param str kms_key_id: (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        if boot_volume_id is not None:
            pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        if boot_volume_size_in_gbs is not None:
            pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        if boot_volume_vpus_per_gb is not None:
            pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        if image_id is not None:
            pulumi.set(__self__, "image_id", image_id)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)
        if source_type is not None:
            pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[str]:
        """
        (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[str]:
        """
        (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.

        Allowed values:
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> Optional[str]:
        """
        (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 


        ** IMPORTANT **
        Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class TargetAssetTestSpec(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "agentConfigs":
            suggest = "agent_configs"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "capacityReservationId":
            suggest = "capacity_reservation_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "createVnicDetails":
            suggest = "create_vnic_details"
        elif key == "dedicatedVmHostId":
            suggest = "dedicated_vm_host_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "instanceOptions":
            suggest = "instance_options"
        elif key == "ipxeScript":
            suggest = "ipxe_script"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "preemptibleInstanceConfigs":
            suggest = "preemptible_instance_configs"
        elif key == "shapeConfigs":
            suggest = "shape_configs"
        elif key == "sourceDetails":
            suggest = "source_details"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpec. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpec.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpec.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 agent_configs: Optional[Sequence['outputs.TargetAssetTestSpecAgentConfig']] = None,
                 availability_domain: Optional[str] = None,
                 capacity_reservation_id: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 create_vnic_details: Optional[Sequence['outputs.TargetAssetTestSpecCreateVnicDetail']] = None,
                 dedicated_vm_host_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 fault_domain: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 instance_options: Optional[Sequence['outputs.TargetAssetTestSpecInstanceOption']] = None,
                 ipxe_script: Optional[str] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 preemptible_instance_configs: Optional[Sequence['outputs.TargetAssetTestSpecPreemptibleInstanceConfig']] = None,
                 shape: Optional[str] = None,
                 shape_configs: Optional[Sequence['outputs.TargetAssetTestSpecShapeConfig']] = None,
                 source_details: Optional[Sequence['outputs.TargetAssetTestSpecSourceDetail']] = None):
        """
        :param Sequence['TargetAssetTestSpecAgentConfigArgs'] agent_configs: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: (Updatable) The OCID of the compartment.
        :param Sequence['TargetAssetTestSpecCreateVnicDetailArgs'] create_vnic_details: (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
               
               If you do not specify the fault domain, the system selects one for you.
               
               To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.
               
               Example: `FAULT-DOMAIN-1`
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['TargetAssetTestSpecInstanceOptionArgs'] instance_options: (Updatable) Optional mutable instance options
        :param str ipxe_script: (Updatable) This is an advanced option.
               
               When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.
               
               If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.
               
               By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.
               
               If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.
               
               For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).
               
               For more information about iPXE, see http://ipxe.org.
        :param bool is_pv_encryption_in_transit_enabled: (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['TargetAssetTestSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: (Updatable) Configuration options for preemptible instances.
        :param str shape: (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
               
               You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param Sequence['TargetAssetTestSpecShapeConfigArgs'] shape_configs: (Updatable) The shape configuration requested for the instance.
               
               If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.
               
               Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        :param Sequence['TargetAssetTestSpecSourceDetailArgs'] source_details: (Updatable)
        """
        if agent_configs is not None:
            pulumi.set(__self__, "agent_configs", agent_configs)
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if capacity_reservation_id is not None:
            pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_id)
        if create_vnic_details is not None:
            pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        if dedicated_vm_host_id is not None:
            pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if fault_domain is not None:
            pulumi.set(__self__, "fault_domain", fault_domain)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if instance_options is not None:
            pulumi.set(__self__, "instance_options", instance_options)
        if ipxe_script is not None:
            pulumi.set(__self__, "ipxe_script", ipxe_script)
        if is_pv_encryption_in_transit_enabled is not None:
            pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        if preemptible_instance_configs is not None:
            pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        if shape is not None:
            pulumi.set(__self__, "shape", shape)
        if shape_configs is not None:
            pulumi.set(__self__, "shape_configs", shape_configs)
        if source_details is not None:
            pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Optional[Sequence['outputs.TargetAssetTestSpecAgentConfig']]:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> Optional[str]:
        """
        (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional[Sequence['outputs.TargetAssetTestSpecCreateVnicDetail']]:
        """
        (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[str]:
        """
        (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.

        If you do not specify the fault domain, the system selects one for you.

        To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.

        Example: `FAULT-DOMAIN-1`
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Optional[Sequence['outputs.TargetAssetTestSpecInstanceOption']]:
        """
        (Updatable) Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[str]:
        """
        (Updatable) This is an advanced option.

        When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.

        If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.

        By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.

        If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.

        For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).

        For more information about iPXE, see http://ipxe.org.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Optional[Sequence['outputs.TargetAssetTestSpecPreemptibleInstanceConfig']]:
        """
        (Updatable) Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> Optional[str]:
        """
        (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.

        You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Optional[Sequence['outputs.TargetAssetTestSpecShapeConfig']]:
        """
        (Updatable) The shape configuration requested for the instance.

        If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.

        Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Optional[Sequence['outputs.TargetAssetTestSpecSourceDetail']]:
        """
        (Updatable)
        """
        return pulumi.get(self, "source_details")


@pulumi.output_type
class TargetAssetTestSpecAgentConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areAllPluginsDisabled":
            suggest = "are_all_plugins_disabled"
        elif key == "isManagementDisabled":
            suggest = "is_management_disabled"
        elif key == "isMonitoringDisabled":
            suggest = "is_monitoring_disabled"
        elif key == "pluginsConfigs":
            suggest = "plugins_configs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecAgentConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecAgentConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecAgentConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[bool] = None,
                 is_management_disabled: Optional[bool] = None,
                 is_monitoring_disabled: Optional[bool] = None,
                 plugins_configs: Optional[Sequence['outputs.TargetAssetTestSpecAgentConfigPluginsConfig']] = None):
        """
        :param bool are_all_plugins_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
               
               To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param bool is_management_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
               
               These are the management plugins: OS Management Service Agent and Compute instance run command.
               
               The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
               * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
               * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        :param bool is_monitoring_disabled: (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
               
               These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.
               
               The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
               * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
               * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        :param Sequence['TargetAssetTestSpecAgentConfigPluginsConfigArgs'] plugins_configs: (Updatable) The configuration of plugins associated with this instance.
        """
        if are_all_plugins_disabled is not None:
            pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        if is_management_disabled is not None:
            pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        if is_monitoring_disabled is not None:
            pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        if plugins_configs is not None:
            pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.

        To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).

        These are the management plugins: OS Management Service Agent and Compute instance run command.

        The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
        * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
        * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).

        These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.

        The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
        * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
        * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Optional[Sequence['outputs.TargetAssetTestSpecAgentConfigPluginsConfig']]:
        """
        (Updatable) The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class TargetAssetTestSpecAgentConfigPluginsConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "desiredState":
            suggest = "desired_state"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecAgentConfigPluginsConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 desired_state: Optional[str] = None,
                 name: Optional[str] = None):
        """
        :param str desired_state: (Updatable) Whether the plugin should be enabled or disabled.
               
               To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        :param str name: (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        if desired_state is not None:
            pulumi.set(__self__, "desired_state", desired_state)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> Optional[str]:
        """
        (Updatable) Whether the plugin should be enabled or disabled.

        To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        """
        (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class TargetAssetTestSpecCreateVnicDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "assignPrivateDnsRecord":
            suggest = "assign_private_dns_record"
        elif key == "assignPublicIp":
            suggest = "assign_public_ip"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "nsgIds":
            suggest = "nsg_ids"
        elif key == "privateIp":
            suggest = "private_ip"
        elif key == "skipSourceDestCheck":
            suggest = "skip_source_dest_check"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecCreateVnicDetail. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecCreateVnicDetail.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecCreateVnicDetail.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[bool] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None,
                 vlan_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
               
               If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        :param bool assign_public_ip: (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
               
               **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).
               
               **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).
               
               Example: `false`
               
               If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
               
               If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param str private_ip: (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
               
               If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `10.0.3.3`
        :param bool skip_source_dest_check: (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
               
               If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `true`
        :param str subnet_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
               
               If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        :param str vlan_id: (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        if assign_private_dns_record is not None:
            pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        if assign_public_ip is not None:
            pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if nsg_ids is not None:
            pulumi.set(__self__, "nsg_ids", nsg_ids)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if skip_source_dest_check is not None:
            pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.

        If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.

        **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).

        **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).

        Example: `false`

        If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[Sequence[str]]:
        """
        (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).

        If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[str]:
        """
        (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).

        If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `10.0.3.3`
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[bool]:
        """
        (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).

        If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `true`
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.

        If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[str]:
        """
        (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class TargetAssetTestSpecInstanceOption(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areLegacyImdsEndpointsDisabled":
            suggest = "are_legacy_imds_endpoints_disabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecInstanceOption. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecInstanceOption.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecInstanceOption.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[bool] = None):
        """
        :param bool are_legacy_imds_endpoints_disabled: (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        if are_legacy_imds_endpoints_disabled is not None:
            pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class TargetAssetTestSpecPreemptibleInstanceConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preemptionActions":
            suggest = "preemption_actions"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecPreemptibleInstanceConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 preemption_actions: Optional[Sequence['outputs.TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction']] = None):
        """
        :param Sequence['TargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        if preemption_actions is not None:
            pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Optional[Sequence['outputs.TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction']]:
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preserveBootVolume":
            suggest = "preserve_boot_volume"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 preserve_boot_volume: Optional[bool] = None,
                 type: Optional[str] = None):
        """
        :param bool preserve_boot_volume: (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        if preserve_boot_volume is not None:
            pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> Optional[bool]:
        """
        (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> Optional[str]:
        """
        (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class TargetAssetTestSpecShapeConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baselineOcpuUtilization":
            suggest = "baseline_ocpu_utilization"
        elif key == "memoryInGbs":
            suggest = "memory_in_gbs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecShapeConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecShapeConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecShapeConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[str] = None,
                 memory_in_gbs: Optional[float] = None,
                 ocpus: Optional[float] = None):
        """
        :param str baseline_ocpu_utilization: (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
               
               The following values are supported:
        :param float memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: (Updatable) The total number of OCPUs available to the instance.
        """
        if baseline_ocpu_utilization is not None:
            pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        if memory_in_gbs is not None:
            pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        if ocpus is not None:
            pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> Optional[str]:
        """
        (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.

        The following values are supported:
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> Optional[float]:
        """
        (Updatable) The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> Optional[float]:
        """
        (Updatable) The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class TargetAssetTestSpecSourceDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeId":
            suggest = "boot_volume_id"
        elif key == "bootVolumeSizeInGbs":
            suggest = "boot_volume_size_in_gbs"
        elif key == "bootVolumeVpusPerGb":
            suggest = "boot_volume_vpus_per_gb"
        elif key == "imageId":
            suggest = "image_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"
        elif key == "sourceType":
            suggest = "source_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetTestSpecSourceDetail. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetTestSpecSourceDetail.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetTestSpecSourceDetail.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 boot_volume_id: Optional[str] = None,
                 boot_volume_size_in_gbs: Optional[str] = None,
                 boot_volume_vpus_per_gb: Optional[str] = None,
                 image_id: Optional[str] = None,
                 kms_key_id: Optional[str] = None,
                 source_type: Optional[str] = None):
        """
        :param str boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
               
               Allowed values:
        :param str image_id: (Updatable) The OCID of the image used to boot the instance.
        :param str kms_key_id: (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        if boot_volume_id is not None:
            pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        if boot_volume_size_in_gbs is not None:
            pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        if boot_volume_vpus_per_gb is not None:
            pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        if image_id is not None:
            pulumi.set(__self__, "image_id", image_id)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)
        if source_type is not None:
            pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[str]:
        """
        (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[str]:
        """
        (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.

        Allowed values:
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> Optional[str]:
        """
        (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 


        ** IMPORTANT **
        Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class TargetAssetUserSpec(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "agentConfig":
            suggest = "agent_config"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "capacityReservationId":
            suggest = "capacity_reservation_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "createVnicDetails":
            suggest = "create_vnic_details"
        elif key == "dedicatedVmHostId":
            suggest = "dedicated_vm_host_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "instanceOptions":
            suggest = "instance_options"
        elif key == "ipxeScript":
            suggest = "ipxe_script"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "preemptibleInstanceConfig":
            suggest = "preemptible_instance_config"
        elif key == "shapeConfig":
            suggest = "shape_config"
        elif key == "sourceDetails":
            suggest = "source_details"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpec. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpec.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpec.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 agent_config: Optional['outputs.TargetAssetUserSpecAgentConfig'] = None,
                 availability_domain: Optional[str] = None,
                 capacity_reservation_id: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 create_vnic_details: Optional['outputs.TargetAssetUserSpecCreateVnicDetails'] = None,
                 dedicated_vm_host_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 fault_domain: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 instance_options: Optional['outputs.TargetAssetUserSpecInstanceOptions'] = None,
                 ipxe_script: Optional[str] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 preemptible_instance_config: Optional['outputs.TargetAssetUserSpecPreemptibleInstanceConfig'] = None,
                 shape: Optional[str] = None,
                 shape_config: Optional['outputs.TargetAssetUserSpecShapeConfig'] = None,
                 source_details: Optional['outputs.TargetAssetUserSpecSourceDetails'] = None):
        """
        :param 'TargetAssetUserSpecAgentConfigArgs' agent_config: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: (Updatable) The OCID of the compartment.
        :param 'TargetAssetUserSpecCreateVnicDetailsArgs' create_vnic_details: (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
               
               If you do not specify the fault domain, the system selects one for you.
               
               To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.
               
               Example: `FAULT-DOMAIN-1`
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param 'TargetAssetUserSpecInstanceOptionsArgs' instance_options: (Updatable) Optional mutable instance options
        :param str ipxe_script: (Updatable) This is an advanced option.
               
               When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.
               
               If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.
               
               By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.
               
               If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.
               
               For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).
               
               For more information about iPXE, see http://ipxe.org.
        :param bool is_pv_encryption_in_transit_enabled: (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param 'TargetAssetUserSpecPreemptibleInstanceConfigArgs' preemptible_instance_config: (Updatable) Configuration options for preemptible instances.
        :param str shape: (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
               
               You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param 'TargetAssetUserSpecShapeConfigArgs' shape_config: (Updatable) The shape configuration requested for the instance.
               
               If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.
               
               Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        :param 'TargetAssetUserSpecSourceDetailsArgs' source_details: (Updatable)
        """
        if agent_config is not None:
            pulumi.set(__self__, "agent_config", agent_config)
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if capacity_reservation_id is not None:
            pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_id)
        if create_vnic_details is not None:
            pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        if dedicated_vm_host_id is not None:
            pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if fault_domain is not None:
            pulumi.set(__self__, "fault_domain", fault_domain)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if instance_options is not None:
            pulumi.set(__self__, "instance_options", instance_options)
        if ipxe_script is not None:
            pulumi.set(__self__, "ipxe_script", ipxe_script)
        if is_pv_encryption_in_transit_enabled is not None:
            pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        if preemptible_instance_config is not None:
            pulumi.set(__self__, "preemptible_instance_config", preemptible_instance_config)
        if shape is not None:
            pulumi.set(__self__, "shape", shape)
        if shape_config is not None:
            pulumi.set(__self__, "shape_config", shape_config)
        if source_details is not None:
            pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfig")
    def agent_config(self) -> Optional['outputs.TargetAssetUserSpecAgentConfig']:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_config")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> Optional[str]:
        """
        (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional['outputs.TargetAssetUserSpecCreateVnicDetails']:
        """
        (Updatable) Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[str]:
        """
        (Updatable) A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.

        If you do not specify the fault domain, the system selects one for you.

        To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.

        Example: `FAULT-DOMAIN-1`
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Optional['outputs.TargetAssetUserSpecInstanceOptions']:
        """
        (Updatable) Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[str]:
        """
        (Updatable) This is an advanced option.

        When a bare metal or virtual machine instance boots, the iPXE firmware that runs on the instance is configured to run an iPXE script to continue the boot process.

        If you want more control over the boot process, you can provide your own custom iPXE script that will run when the instance boots. Be aware that the same iPXE script will run every time an instance boots, not only after the initial LaunchInstance call.

        By default, the iPXE script connects to the instance's local boot volume over iSCSI and performs a network boot. If you use a custom iPXE script and want to network-boot from the instance's local boot volume over iSCSI in the same way as the default iPXE script, use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.

        If your instance boot volume type is paravirtualized, the boot volume is attached to the instance through virtio-scsi and no iPXE script is used. If your instance boot volume type is paravirtualized and you use custom iPXE to perform network-boot into your instance, the primary boot volume is attached as a data volume through the virtio-scsi drive.

        For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).

        For more information about iPXE, see http://ipxe.org.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfig")
    def preemptible_instance_config(self) -> Optional['outputs.TargetAssetUserSpecPreemptibleInstanceConfig']:
        """
        (Updatable) Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_config")

    @property
    @pulumi.getter
    def shape(self) -> Optional[str]:
        """
        (Updatable) The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.

        You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfig")
    def shape_config(self) -> Optional['outputs.TargetAssetUserSpecShapeConfig']:
        """
        (Updatable) The shape configuration requested for the instance.

        If the parameter is provided, the instance is created with the resources that you specify. If some properties are missing or the entire parameter is not provided, the instance is created with the default configuration values for the `shape` that you specify.

        Each shape only supports certain configurable values. If the values that you provide are not valid for the specified `shape`, an error is returned.
        """
        return pulumi.get(self, "shape_config")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Optional['outputs.TargetAssetUserSpecSourceDetails']:
        """
        (Updatable)
        """
        return pulumi.get(self, "source_details")


@pulumi.output_type
class TargetAssetUserSpecAgentConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areAllPluginsDisabled":
            suggest = "are_all_plugins_disabled"
        elif key == "isManagementDisabled":
            suggest = "is_management_disabled"
        elif key == "isMonitoringDisabled":
            suggest = "is_monitoring_disabled"
        elif key == "pluginsConfigs":
            suggest = "plugins_configs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecAgentConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecAgentConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecAgentConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[bool] = None,
                 is_management_disabled: Optional[bool] = None,
                 is_monitoring_disabled: Optional[bool] = None,
                 plugins_configs: Optional[Sequence['outputs.TargetAssetUserSpecAgentConfigPluginsConfig']] = None):
        """
        :param bool are_all_plugins_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
               
               To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param bool is_management_disabled: (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
               
               These are the management plugins: OS Management Service Agent and Compute instance run command.
               
               The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
               * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
               * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        :param bool is_monitoring_disabled: (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
               
               These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.
               
               The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
               * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
               * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        :param Sequence['TargetAssetUserSpecAgentConfigPluginsConfigArgs'] plugins_configs: (Updatable) The configuration of plugins associated with this instance.
        """
        if are_all_plugins_disabled is not None:
            pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        if is_management_disabled is not None:
            pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        if is_monitoring_disabled is not None:
            pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        if plugins_configs is not None:
            pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.

        To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).

        These are the management plugins: OS Management Service Agent and Compute instance run command.

        The management plugins are controlled by this parameter and the per-plugin configuration in the `pluginsConfig` object.
        * If `isManagementDisabled` is true, all the management plugins are disabled, regardless of the per-plugin configuration.
        * If `isManagementDisabled` is false, all the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).

        These are the monitoring plugins: Compute instance monitoring and Custom logs monitoring.

        The monitoring plugins are controlled by this parameter and by the per-plugin configuration in the `pluginsConfig` object.
        * If `isMonitoringDisabled` is true, all the monitoring plugins are disabled, regardless of the per-plugin configuration.
        * If `isMonitoringDisabled` is false, all the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Optional[Sequence['outputs.TargetAssetUserSpecAgentConfigPluginsConfig']]:
        """
        (Updatable) The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class TargetAssetUserSpecAgentConfigPluginsConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "desiredState":
            suggest = "desired_state"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecAgentConfigPluginsConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecAgentConfigPluginsConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: (Updatable) Whether the plugin should be enabled or disabled.
               
               To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        :param str name: (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        (Updatable) Whether the plugin should be enabled or disabled.

        To enable the monitoring and management plugins, the `isMonitoringDisabled` and `isManagementDisabled` attributes must also be set to false.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        (Updatable) The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class TargetAssetUserSpecCreateVnicDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "assignPrivateDnsRecord":
            suggest = "assign_private_dns_record"
        elif key == "assignPublicIp":
            suggest = "assign_public_ip"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "hostnameLabel":
            suggest = "hostname_label"
        elif key == "nsgIds":
            suggest = "nsg_ids"
        elif key == "privateIp":
            suggest = "private_ip"
        elif key == "skipSourceDestCheck":
            suggest = "skip_source_dest_check"
        elif key == "subnetId":
            suggest = "subnet_id"
        elif key == "vlanId":
            suggest = "vlan_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecCreateVnicDetails. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecCreateVnicDetails.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecCreateVnicDetails.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[bool] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None,
                 vlan_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
               
               If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        :param bool assign_public_ip: (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
               
               **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).
               
               **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).
               
               Example: `false`
               
               If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
               
               If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param str private_ip: (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
               
               If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `10.0.3.3`
        :param bool skip_source_dest_check: (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
               
               If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `true`
        :param str subnet_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
               
               If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        :param str vlan_id: (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        if assign_private_dns_record is not None:
            pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        if assign_public_ip is not None:
            pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if nsg_ids is not None:
            pulumi.set(__self__, "nsg_ids", nsg_ids)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if skip_source_dest_check is not None:
            pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.

        If you specify a `hostnameLabel`, then `assignPrivateDnsRecord` must be set to true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[bool]:
        """
        (Updatable) Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.

        **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).

        **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).

        Example: `false`

        If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[Sequence[str]]:
        """
        (Updatable) List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).

        If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[str]:
        """
        (Updatable) A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).

        If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `10.0.3.3`
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[bool]:
        """
        (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).

        If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Example: `true`
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.

        If you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN instead of a subnet, provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[str]:
        """
        (Updatable) Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).

        Provide a `vlanId` instead of a `subnetId`. If you provide both `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class TargetAssetUserSpecInstanceOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areLegacyImdsEndpointsDisabled":
            suggest = "are_legacy_imds_endpoints_disabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecInstanceOptions. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecInstanceOptions.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecInstanceOptions.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[bool] = None):
        """
        :param bool are_legacy_imds_endpoints_disabled: (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        if are_legacy_imds_endpoints_disabled is not None:
            pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class TargetAssetUserSpecPreemptibleInstanceConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preemptionAction":
            suggest = "preemption_action"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecPreemptibleInstanceConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecPreemptibleInstanceConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 preemption_action: 'outputs.TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction'):
        """
        :param 'TargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs' preemption_action: (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_action", preemption_action)

    @property
    @pulumi.getter(name="preemptionAction")
    def preemption_action(self) -> 'outputs.TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction':
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_action")


@pulumi.output_type
class TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preserveBootVolume":
            suggest = "preserve_boot_volume"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecPreemptibleInstanceConfigPreemptionAction.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 type: str,
                 preserve_boot_volume: Optional[bool] = None):
        """
        :param str type: (Updatable) The type of action to run when the instance is interrupted for eviction.
        :param bool preserve_boot_volume: (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        pulumi.set(__self__, "type", type)
        if preserve_boot_volume is not None:
            pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> Optional[bool]:
        """
        (Updatable) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")


@pulumi.output_type
class TargetAssetUserSpecShapeConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baselineOcpuUtilization":
            suggest = "baseline_ocpu_utilization"
        elif key == "memoryInGbs":
            suggest = "memory_in_gbs"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecShapeConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecShapeConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecShapeConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[str] = None,
                 memory_in_gbs: Optional[float] = None,
                 ocpus: Optional[float] = None):
        """
        :param str baseline_ocpu_utilization: (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
               
               The following values are supported:
        :param float memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: (Updatable) The total number of OCPUs available to the instance.
        """
        if baseline_ocpu_utilization is not None:
            pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        if memory_in_gbs is not None:
            pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        if ocpus is not None:
            pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> Optional[str]:
        """
        (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.

        The following values are supported:
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> Optional[float]:
        """
        (Updatable) The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> Optional[float]:
        """
        (Updatable) The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class TargetAssetUserSpecSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourceType":
            suggest = "source_type"
        elif key == "bootVolumeId":
            suggest = "boot_volume_id"
        elif key == "bootVolumeSizeInGbs":
            suggest = "boot_volume_size_in_gbs"
        elif key == "bootVolumeVpusPerGb":
            suggest = "boot_volume_vpus_per_gb"
        elif key == "imageId":
            suggest = "image_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in TargetAssetUserSpecSourceDetails. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        TargetAssetUserSpecSourceDetails.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        TargetAssetUserSpecSourceDetails.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 source_type: str,
                 boot_volume_id: Optional[str] = None,
                 boot_volume_size_in_gbs: Optional[str] = None,
                 boot_volume_vpus_per_gb: Optional[str] = None,
                 image_id: Optional[str] = None,
                 kms_key_id: Optional[str] = None):
        """
        :param str source_type: (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
               
               Allowed values:
        :param str image_id: (Updatable) The OCID of the image used to boot the instance.
        :param str kms_key_id: (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        pulumi.set(__self__, "source_type", source_type)
        if boot_volume_id is not None:
            pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        if boot_volume_size_in_gbs is not None:
            pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        if boot_volume_vpus_per_gb is not None:
            pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        if image_id is not None:
            pulumi.set(__self__, "image_id", image_id)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. 


        ** IMPORTANT **
        Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[str]:
        """
        (Updatable) The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[str]:
        """
        (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.

        Allowed values:
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")


@pulumi.output_type
class GetMigrationAssetsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetMigrationAssetsMigrationAssetCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetMigrationAssetsMigrationAssetCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetMigrationAssetsMigrationAssetCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetMigrationAssetsMigrationAssetCollectionItemResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 depended_on_bies: Sequence[str],
                 display_name: str,
                 id: str,
                 inventory_asset_id: str,
                 lifecycle_details: str,
                 migration_asset_depends_ons: Sequence[str],
                 migration_id: str,
                 notifications: Sequence[str],
                 parent_snapshot: str,
                 replication_compartment_id: str,
                 replication_schedule_id: str,
                 snap_shot_bucket_name: str,
                 snapshots: Mapping[str, Any],
                 source_asset_id: str,
                 state: str,
                 tenancy_id: str,
                 time_created: str,
                 time_updated: str,
                 type: str):
        """
        :param str availability_domain: Availability domain
        :param str compartment_id: Compartment Identifier
        :param Sequence[str] depended_on_bies: List of migration assets that depend on the asset.
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str migration_id: Unique migration identifier
        :param Sequence[str] notifications: List of notifications
        :param str parent_snapshot: The parent snapshot of the migration asset to be used by the replication task.
        :param str replication_compartment_id: Replication compartment identifier
        :param str replication_schedule_id: Replication schedule identifier
        :param str snap_shot_bucket_name: Name of snapshot bucket
        :param Mapping[str, Any] snapshots: Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        :param str source_asset_id: OCID that is referenced to an asset for an inventory.
        :param str state: The current state of the migration asset.
        :param str tenancy_id: Tenancy identifier
        :param str time_created: The time when the migration asset was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the migration asset was updated. An RFC3339 formatted datetime string.
        :param str type: The type of asset referenced for inventory.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "depended_on_bies", depended_on_bies)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "inventory_asset_id", inventory_asset_id)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "migration_asset_depends_ons", migration_asset_depends_ons)
        pulumi.set(__self__, "migration_id", migration_id)
        pulumi.set(__self__, "notifications", notifications)
        pulumi.set(__self__, "parent_snapshot", parent_snapshot)
        pulumi.set(__self__, "replication_compartment_id", replication_compartment_id)
        pulumi.set(__self__, "replication_schedule_id", replication_schedule_id)
        pulumi.set(__self__, "snap_shot_bucket_name", snap_shot_bucket_name)
        pulumi.set(__self__, "snapshots", snapshots)
        pulumi.set(__self__, "source_asset_id", source_asset_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "tenancy_id", tenancy_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        Availability domain
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        Compartment Identifier
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="dependedOnBies")
    def depended_on_bies(self) -> Sequence[str]:
        """
        List of migration assets that depend on the asset.
        """
        return pulumi.get(self, "depended_on_bies")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="inventoryAssetId")
    def inventory_asset_id(self) -> str:
        return pulumi.get(self, "inventory_asset_id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationAssetDependsOns")
    def migration_asset_depends_ons(self) -> Sequence[str]:
        return pulumi.get(self, "migration_asset_depends_ons")

    @property
    @pulumi.getter(name="migrationId")
    def migration_id(self) -> str:
        """
        Unique migration identifier
        """
        return pulumi.get(self, "migration_id")

    @property
    @pulumi.getter
    def notifications(self) -> Sequence[str]:
        """
        List of notifications
        """
        return pulumi.get(self, "notifications")

    @property
    @pulumi.getter(name="parentSnapshot")
    def parent_snapshot(self) -> str:
        """
        The parent snapshot of the migration asset to be used by the replication task.
        """
        return pulumi.get(self, "parent_snapshot")

    @property
    @pulumi.getter(name="replicationCompartmentId")
    def replication_compartment_id(self) -> str:
        """
        Replication compartment identifier
        """
        return pulumi.get(self, "replication_compartment_id")

    @property
    @pulumi.getter(name="replicationScheduleId")
    def replication_schedule_id(self) -> str:
        """
        Replication schedule identifier
        """
        return pulumi.get(self, "replication_schedule_id")

    @property
    @pulumi.getter(name="snapShotBucketName")
    def snap_shot_bucket_name(self) -> str:
        """
        Name of snapshot bucket
        """
        return pulumi.get(self, "snap_shot_bucket_name")

    @property
    @pulumi.getter
    def snapshots(self) -> Mapping[str, Any]:
        """
        Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "snapshots")

    @property
    @pulumi.getter(name="sourceAssetId")
    def source_asset_id(self) -> str:
        """
        OCID that is referenced to an asset for an inventory.
        """
        return pulumi.get(self, "source_asset_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the migration asset.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="tenancyId")
    def tenancy_id(self) -> str:
        """
        Tenancy identifier
        """
        return pulumi.get(self, "tenancy_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the migration asset was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the migration asset was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of asset referenced for inventory.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetMigrationPlanAvailableShapeItemResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 defined_tags: Mapping[str, Any],
                 freeform_tags: Mapping[str, Any],
                 gpu_description: str,
                 gpus: int,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 min_total_baseline_ocpus_required: float,
                 networking_bandwidth_in_gbps: float,
                 ocpus: float,
                 pagination_token: str,
                 processor_description: str,
                 shape: str,
                 system_tags: Mapping[str, Any]):
        """
        :param str availability_domain: The availability domain in which to list resources.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str gpu_description: Description of the GPUs.
        :param int gpus: Number of GPUs.
        :param str local_disk_description: Description of local disks.
        :param int local_disks: Number of local disks.
        :param float local_disks_total_size_in_gbs: Total size of local disks for shape.
        :param int max_vnic_attachments: Maximum number of virtual network interfaces that can be attached.
        :param float memory_in_gbs: Amount of memory for the shape.
        :param float min_total_baseline_ocpus_required: Minimum CPUs required.
        :param float networking_bandwidth_in_gbps: Shape bandwidth.
        :param float ocpus: Number of CPUs.
        :param str pagination_token: Shape name and availability domain.  Used for pagination.
        :param str processor_description: Description of the processor.
        :param str shape: Name of the shape.
        :param Mapping[str, Any] system_tags: Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "min_total_baseline_ocpus_required", min_total_baseline_ocpus_required)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "pagination_token", pagination_token)
        pulumi.set(__self__, "processor_description", processor_description)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "system_tags", system_tags)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain in which to list resources.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        """
        Description of the GPUs.
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        """
        Number of GPUs.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        """
        Description of local disks.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        """
        Number of local disks.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        """
        Total size of local disks for shape.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        """
        Maximum number of virtual network interfaces that can be attached.
        """
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        Amount of memory for the shape.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="minTotalBaselineOcpusRequired")
    def min_total_baseline_ocpus_required(self) -> float:
        """
        Minimum CPUs required.
        """
        return pulumi.get(self, "min_total_baseline_ocpus_required")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        """
        Shape bandwidth.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        Number of CPUs.
        """
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="paginationToken")
    def pagination_token(self) -> str:
        """
        Shape name and availability domain.  Used for pagination.
        """
        return pulumi.get(self, "pagination_token")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        """
        Description of the processor.
        """
        return pulumi.get(self, "processor_description")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        Name of the shape.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        return pulumi.get(self, "system_tags")


@pulumi.output_type
class GetMigrationPlanAvailableShapesAvailableShapesCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetMigrationPlanAvailableShapesAvailableShapesCollectionItemResult']):
        """
        :param Sequence['GetMigrationPlanAvailableShapesAvailableShapesCollectionItemArgs'] items: Available shapes list.
        """
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetMigrationPlanAvailableShapesAvailableShapesCollectionItemResult']:
        """
        Available shapes list.
        """
        return pulumi.get(self, "items")


@pulumi.output_type
class GetMigrationPlanAvailableShapesAvailableShapesCollectionItemResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 defined_tags: Mapping[str, Any],
                 freeform_tags: Mapping[str, Any],
                 gpu_description: str,
                 gpus: int,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 min_total_baseline_ocpus_required: float,
                 networking_bandwidth_in_gbps: float,
                 ocpus: float,
                 pagination_token: str,
                 processor_description: str,
                 shape: str,
                 system_tags: Mapping[str, Any]):
        """
        :param str availability_domain: The availability domain in which to list resources.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str gpu_description: Description of the GPUs.
        :param int gpus: Number of GPUs.
        :param str local_disk_description: Description of local disks.
        :param int local_disks: Number of local disks.
        :param float local_disks_total_size_in_gbs: Total size of local disks for shape.
        :param int max_vnic_attachments: Maximum number of virtual network interfaces that can be attached.
        :param float memory_in_gbs: Amount of memory for the shape.
        :param float min_total_baseline_ocpus_required: Minimum CPUs required.
        :param float networking_bandwidth_in_gbps: Shape bandwidth.
        :param float ocpus: Number of CPUs.
        :param str pagination_token: Shape name and availability domain.  Used for pagination.
        :param str processor_description: Description of the processor.
        :param str shape: Name of the shape.
        :param Mapping[str, Any] system_tags: Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "min_total_baseline_ocpus_required", min_total_baseline_ocpus_required)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "pagination_token", pagination_token)
        pulumi.set(__self__, "processor_description", processor_description)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "system_tags", system_tags)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain in which to list resources.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        """
        Description of the GPUs.
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        """
        Number of GPUs.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        """
        Description of local disks.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        """
        Number of local disks.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        """
        Total size of local disks for shape.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        """
        Maximum number of virtual network interfaces that can be attached.
        """
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        Amount of memory for the shape.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="minTotalBaselineOcpusRequired")
    def min_total_baseline_ocpus_required(self) -> float:
        """
        Minimum CPUs required.
        """
        return pulumi.get(self, "min_total_baseline_ocpus_required")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        """
        Shape bandwidth.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        Number of CPUs.
        """
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="paginationToken")
    def pagination_token(self) -> str:
        """
        Shape name and availability domain.  Used for pagination.
        """
        return pulumi.get(self, "pagination_token")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        """
        Description of the processor.
        """
        return pulumi.get(self, "processor_description")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        Name of the shape.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        return pulumi.get(self, "system_tags")


@pulumi.output_type
class GetMigrationPlanAvailableShapesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatResult(dict):
    def __init__(__self__, *,
                 time_updated: str,
                 total_estimated_costs: Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostResult'],
                 vm_count: int):
        """
        :param str time_updated: The time when the migration plan was updated. An RFC3339 formatted datetime string.
        :param Sequence['GetMigrationPlanMigrationPlanStatTotalEstimatedCostArgs'] total_estimated_costs: Cost estimation description
        :param int vm_count: The total count of VMs in migration
        """
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "total_estimated_costs", total_estimated_costs)
        pulumi.set(__self__, "vm_count", vm_count)

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter(name="totalEstimatedCosts")
    def total_estimated_costs(self) -> Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostResult']:
        """
        Cost estimation description
        """
        return pulumi.get(self, "total_estimated_costs")

    @property
    @pulumi.getter(name="vmCount")
    def vm_count(self) -> int:
        """
        The total count of VMs in migration
        """
        return pulumi.get(self, "vm_count")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatTotalEstimatedCostResult(dict):
    def __init__(__self__, *,
                 computes: Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostComputeResult'],
                 currency_code: str,
                 os_images: Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostOsImageResult'],
                 storages: Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageResult'],
                 subscription_id: str,
                 total_estimation_per_month: float,
                 total_estimation_per_month_by_subscription: float):
        """
        :param Sequence['GetMigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['GetMigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        pulumi.set(__self__, "computes", computes)
        pulumi.set(__self__, "currency_code", currency_code)
        pulumi.set(__self__, "os_images", os_images)
        pulumi.set(__self__, "storages", storages)
        pulumi.set(__self__, "subscription_id", subscription_id)
        pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostComputeResult']:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> str:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostOsImageResult']:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageResult']:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> str:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> float:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> float:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatTotalEstimatedCostComputeResult(dict):
    def __init__(__self__, *,
                 gpu_count: float,
                 gpu_per_hour: float,
                 gpu_per_hour_by_subscription: float,
                 memory_amount_gb: float,
                 memory_gb_per_hour: float,
                 memory_gb_per_hour_by_subscription: float,
                 ocpu_count: float,
                 ocpu_per_hour: float,
                 ocpu_per_hour_by_subscription: float,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "gpu_count", gpu_count)
        pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        pulumi.set(__self__, "ocpu_count", ocpu_count)
        pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> float:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> float:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> float:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> float:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> float:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> float:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> float:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> float:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> float:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatTotalEstimatedCostOsImageResult(dict):
    def __init__(__self__, *,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageResult(dict):
    def __init__(__self__, *,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float,
                 volumes: Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeResult']):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Sequence['outputs.GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeResult']:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class GetMigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeResult(dict):
    def __init__(__self__, *,
                 capacity_gb: float,
                 description: str,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        pulumi.set(__self__, "capacity_gb", capacity_gb)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> float:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Volume description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class GetMigrationPlanStrategyResult(dict):
    def __init__(__self__, *,
                 adjustment_multiplier: float,
                 metric_time_window: str,
                 metric_type: str,
                 percentile: str,
                 resource_type: str,
                 strategy_type: str):
        """
        :param float adjustment_multiplier: The real resource usage is multiplied to this number before making any recommendation.
        :param str metric_time_window: The current state of the migration plan.
        :param str metric_type: The current state of the migration plan.
        :param str percentile: Percentile value
        :param str resource_type: The type of resource.
        :param str strategy_type: The type of strategy used for migration.
        """
        pulumi.set(__self__, "adjustment_multiplier", adjustment_multiplier)
        pulumi.set(__self__, "metric_time_window", metric_time_window)
        pulumi.set(__self__, "metric_type", metric_type)
        pulumi.set(__self__, "percentile", percentile)
        pulumi.set(__self__, "resource_type", resource_type)
        pulumi.set(__self__, "strategy_type", strategy_type)

    @property
    @pulumi.getter(name="adjustmentMultiplier")
    def adjustment_multiplier(self) -> float:
        """
        The real resource usage is multiplied to this number before making any recommendation.
        """
        return pulumi.get(self, "adjustment_multiplier")

    @property
    @pulumi.getter(name="metricTimeWindow")
    def metric_time_window(self) -> str:
        """
        The current state of the migration plan.
        """
        return pulumi.get(self, "metric_time_window")

    @property
    @pulumi.getter(name="metricType")
    def metric_type(self) -> str:
        """
        The current state of the migration plan.
        """
        return pulumi.get(self, "metric_type")

    @property
    @pulumi.getter
    def percentile(self) -> str:
        """
        Percentile value
        """
        return pulumi.get(self, "percentile")

    @property
    @pulumi.getter(name="resourceType")
    def resource_type(self) -> str:
        """
        The type of resource.
        """
        return pulumi.get(self, "resource_type")

    @property
    @pulumi.getter(name="strategyType")
    def strategy_type(self) -> str:
        """
        The type of strategy used for migration.
        """
        return pulumi.get(self, "strategy_type")


@pulumi.output_type
class GetMigrationPlanTargetEnvironmentResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 dedicated_vm_host: str,
                 fault_domain: str,
                 ms_license: str,
                 preferred_shape_type: str,
                 subnet: str,
                 target_compartment_id: str,
                 target_environment_type: str,
                 vcn: str):
        """
        :param str availability_domain: Availability Domain of the VM configuration.
        :param str dedicated_vm_host: OCID of the dedicated VM configuration host.
        :param str fault_domain: Fault domain of the VM configuration.
        :param str ms_license: Microsoft license for the VM configuration.
        :param str preferred_shape_type: Preferred VM shape type provided by the customer.
        :param str subnet: OCID of the VM configuration subnet.
        :param str target_compartment_id: Target compartment identifier
        :param str target_environment_type: The type of target environment.
        :param str vcn: OCID of the VM configuration VCN.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "dedicated_vm_host", dedicated_vm_host)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "ms_license", ms_license)
        pulumi.set(__self__, "preferred_shape_type", preferred_shape_type)
        pulumi.set(__self__, "subnet", subnet)
        pulumi.set(__self__, "target_compartment_id", target_compartment_id)
        pulumi.set(__self__, "target_environment_type", target_environment_type)
        pulumi.set(__self__, "vcn", vcn)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        Availability Domain of the VM configuration.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="dedicatedVmHost")
    def dedicated_vm_host(self) -> str:
        """
        OCID of the dedicated VM configuration host.
        """
        return pulumi.get(self, "dedicated_vm_host")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        Fault domain of the VM configuration.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="msLicense")
    def ms_license(self) -> str:
        """
        Microsoft license for the VM configuration.
        """
        return pulumi.get(self, "ms_license")

    @property
    @pulumi.getter(name="preferredShapeType")
    def preferred_shape_type(self) -> str:
        """
        Preferred VM shape type provided by the customer.
        """
        return pulumi.get(self, "preferred_shape_type")

    @property
    @pulumi.getter
    def subnet(self) -> str:
        """
        OCID of the VM configuration subnet.
        """
        return pulumi.get(self, "subnet")

    @property
    @pulumi.getter(name="targetCompartmentId")
    def target_compartment_id(self) -> str:
        """
        Target compartment identifier
        """
        return pulumi.get(self, "target_compartment_id")

    @property
    @pulumi.getter(name="targetEnvironmentType")
    def target_environment_type(self) -> str:
        """
        The type of target environment.
        """
        return pulumi.get(self, "target_environment_type")

    @property
    @pulumi.getter
    def vcn(self) -> str:
        """
        OCID of the VM configuration VCN.
        """
        return pulumi.get(self, "vcn")


@pulumi.output_type
class GetMigrationPlansFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemResult(dict):
    def __init__(__self__, *,
                 calculated_limits: Mapping[str, Any],
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 lifecycle_details: str,
                 migration_id: str,
                 migration_plan_stats: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatResult'],
                 reference_to_rms_stack: str,
                 source_migration_plan_id: str,
                 state: str,
                 strategies: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemStrategyResult'],
                 system_tags: Mapping[str, Any],
                 target_environments: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemTargetEnvironmentResult'],
                 time_created: str,
                 time_updated: str):
        """
        :param Mapping[str, Any] calculated_limits: Limits of the resources that are needed for migration. Example: {"BlockVolume": 2, "VCN": 1}
        :param str compartment_id: The ID of the compartment in which to list resources.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str id: The unique Oracle ID (OCID) that is immutable on creation.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str migration_id: Unique migration identifier
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatArgs'] migration_plan_stats: Status of the migration plan.
        :param str reference_to_rms_stack: OCID of the referenced ORM job.
        :param str source_migration_plan_id: Source migraiton plan ID to be cloned.
        :param str state: The current state of the migration plan.
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemStrategyArgs'] strategies: List of strategies for the resources to be migrated.
        :param Mapping[str, Any] system_tags: Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemTargetEnvironmentArgs'] target_environments: List of target environments.
        :param str time_created: The time when the migration plan was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        pulumi.set(__self__, "calculated_limits", calculated_limits)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "migration_id", migration_id)
        pulumi.set(__self__, "migration_plan_stats", migration_plan_stats)
        pulumi.set(__self__, "reference_to_rms_stack", reference_to_rms_stack)
        pulumi.set(__self__, "source_migration_plan_id", source_migration_plan_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "strategies", strategies)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "target_environments", target_environments)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)

    @property
    @pulumi.getter(name="calculatedLimits")
    def calculated_limits(self) -> Mapping[str, Any]:
        """
        Limits of the resources that are needed for migration. Example: {"BlockVolume": 2, "VCN": 1}
        """
        return pulumi.get(self, "calculated_limits")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The ID of the compartment in which to list resources.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The unique Oracle ID (OCID) that is immutable on creation.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationId")
    def migration_id(self) -> str:
        """
        Unique migration identifier
        """
        return pulumi.get(self, "migration_id")

    @property
    @pulumi.getter(name="migrationPlanStats")
    def migration_plan_stats(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatResult']:
        """
        Status of the migration plan.
        """
        return pulumi.get(self, "migration_plan_stats")

    @property
    @pulumi.getter(name="referenceToRmsStack")
    def reference_to_rms_stack(self) -> str:
        """
        OCID of the referenced ORM job.
        """
        return pulumi.get(self, "reference_to_rms_stack")

    @property
    @pulumi.getter(name="sourceMigrationPlanId")
    def source_migration_plan_id(self) -> str:
        """
        Source migraiton plan ID to be cloned.
        """
        return pulumi.get(self, "source_migration_plan_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the migration plan.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter
    def strategies(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemStrategyResult']:
        """
        List of strategies for the resources to be migrated.
        """
        return pulumi.get(self, "strategies")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="targetEnvironments")
    def target_environments(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemTargetEnvironmentResult']:
        """
        List of target environments.
        """
        return pulumi.get(self, "target_environments")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the migration plan was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatResult(dict):
    def __init__(__self__, *,
                 time_updated: str,
                 total_estimated_costs: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostResult'],
                 vm_count: int):
        """
        :param str time_updated: The time when the migration plan was updated. An RFC3339 formatted datetime string.
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostArgs'] total_estimated_costs: Cost estimation description
        :param int vm_count: The total count of VMs in migration
        """
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "total_estimated_costs", total_estimated_costs)
        pulumi.set(__self__, "vm_count", vm_count)

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter(name="totalEstimatedCosts")
    def total_estimated_costs(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostResult']:
        """
        Cost estimation description
        """
        return pulumi.get(self, "total_estimated_costs")

    @property
    @pulumi.getter(name="vmCount")
    def vm_count(self) -> int:
        """
        The total count of VMs in migration
        """
        return pulumi.get(self, "vm_count")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostResult(dict):
    def __init__(__self__, *,
                 computes: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostComputeResult'],
                 currency_code: str,
                 os_images: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostOsImageResult'],
                 storages: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageResult'],
                 subscription_id: str,
                 total_estimation_per_month: float,
                 total_estimation_per_month_by_subscription: float):
        """
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        pulumi.set(__self__, "computes", computes)
        pulumi.set(__self__, "currency_code", currency_code)
        pulumi.set(__self__, "os_images", os_images)
        pulumi.set(__self__, "storages", storages)
        pulumi.set(__self__, "subscription_id", subscription_id)
        pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostComputeResult']:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> str:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostOsImageResult']:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageResult']:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> str:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> float:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> float:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostComputeResult(dict):
    def __init__(__self__, *,
                 gpu_count: float,
                 gpu_per_hour: float,
                 gpu_per_hour_by_subscription: float,
                 memory_amount_gb: float,
                 memory_gb_per_hour: float,
                 memory_gb_per_hour_by_subscription: float,
                 ocpu_count: float,
                 ocpu_per_hour: float,
                 ocpu_per_hour_by_subscription: float,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "gpu_count", gpu_count)
        pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        pulumi.set(__self__, "ocpu_count", ocpu_count)
        pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> float:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> float:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> float:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> float:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> float:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> float:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> float:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> float:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> float:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostOsImageResult(dict):
    def __init__(__self__, *,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageResult(dict):
    def __init__(__self__, *,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float,
                 volumes: Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageVolumeResult']):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Sequence['outputs.GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageVolumeResult']:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemMigrationPlanStatTotalEstimatedCostStorageVolumeResult(dict):
    def __init__(__self__, *,
                 capacity_gb: float,
                 description: str,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        pulumi.set(__self__, "capacity_gb", capacity_gb)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> float:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Volume description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemStrategyResult(dict):
    def __init__(__self__, *,
                 adjustment_multiplier: float,
                 metric_time_window: str,
                 metric_type: str,
                 percentile: str,
                 resource_type: str,
                 strategy_type: str):
        """
        :param float adjustment_multiplier: The real resource usage is multiplied to this number before making any recommendation.
        :param str metric_time_window: The current state of the migration plan.
        :param str metric_type: The current state of the migration plan.
        :param str percentile: Percentile value
        :param str resource_type: The type of resource.
        :param str strategy_type: The type of strategy used for migration.
        """
        pulumi.set(__self__, "adjustment_multiplier", adjustment_multiplier)
        pulumi.set(__self__, "metric_time_window", metric_time_window)
        pulumi.set(__self__, "metric_type", metric_type)
        pulumi.set(__self__, "percentile", percentile)
        pulumi.set(__self__, "resource_type", resource_type)
        pulumi.set(__self__, "strategy_type", strategy_type)

    @property
    @pulumi.getter(name="adjustmentMultiplier")
    def adjustment_multiplier(self) -> float:
        """
        The real resource usage is multiplied to this number before making any recommendation.
        """
        return pulumi.get(self, "adjustment_multiplier")

    @property
    @pulumi.getter(name="metricTimeWindow")
    def metric_time_window(self) -> str:
        """
        The current state of the migration plan.
        """
        return pulumi.get(self, "metric_time_window")

    @property
    @pulumi.getter(name="metricType")
    def metric_type(self) -> str:
        """
        The current state of the migration plan.
        """
        return pulumi.get(self, "metric_type")

    @property
    @pulumi.getter
    def percentile(self) -> str:
        """
        Percentile value
        """
        return pulumi.get(self, "percentile")

    @property
    @pulumi.getter(name="resourceType")
    def resource_type(self) -> str:
        """
        The type of resource.
        """
        return pulumi.get(self, "resource_type")

    @property
    @pulumi.getter(name="strategyType")
    def strategy_type(self) -> str:
        """
        The type of strategy used for migration.
        """
        return pulumi.get(self, "strategy_type")


@pulumi.output_type
class GetMigrationPlansMigrationPlanCollectionItemTargetEnvironmentResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 dedicated_vm_host: str,
                 fault_domain: str,
                 ms_license: str,
                 preferred_shape_type: str,
                 subnet: str,
                 target_compartment_id: str,
                 target_environment_type: str,
                 vcn: str):
        """
        :param str availability_domain: Availability Domain of the VM configuration.
        :param str dedicated_vm_host: OCID of the dedicated VM configuration host.
        :param str fault_domain: Fault domain of the VM configuration.
        :param str ms_license: Microsoft license for the VM configuration.
        :param str preferred_shape_type: Preferred VM shape type provided by the customer.
        :param str subnet: OCID of the VM configuration subnet.
        :param str target_compartment_id: Target compartment identifier
        :param str target_environment_type: The type of target environment.
        :param str vcn: OCID of the VM configuration VCN.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "dedicated_vm_host", dedicated_vm_host)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "ms_license", ms_license)
        pulumi.set(__self__, "preferred_shape_type", preferred_shape_type)
        pulumi.set(__self__, "subnet", subnet)
        pulumi.set(__self__, "target_compartment_id", target_compartment_id)
        pulumi.set(__self__, "target_environment_type", target_environment_type)
        pulumi.set(__self__, "vcn", vcn)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        Availability Domain of the VM configuration.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="dedicatedVmHost")
    def dedicated_vm_host(self) -> str:
        """
        OCID of the dedicated VM configuration host.
        """
        return pulumi.get(self, "dedicated_vm_host")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        Fault domain of the VM configuration.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="msLicense")
    def ms_license(self) -> str:
        """
        Microsoft license for the VM configuration.
        """
        return pulumi.get(self, "ms_license")

    @property
    @pulumi.getter(name="preferredShapeType")
    def preferred_shape_type(self) -> str:
        """
        Preferred VM shape type provided by the customer.
        """
        return pulumi.get(self, "preferred_shape_type")

    @property
    @pulumi.getter
    def subnet(self) -> str:
        """
        OCID of the VM configuration subnet.
        """
        return pulumi.get(self, "subnet")

    @property
    @pulumi.getter(name="targetCompartmentId")
    def target_compartment_id(self) -> str:
        """
        Target compartment identifier
        """
        return pulumi.get(self, "target_compartment_id")

    @property
    @pulumi.getter(name="targetEnvironmentType")
    def target_environment_type(self) -> str:
        """
        The type of target environment.
        """
        return pulumi.get(self, "target_environment_type")

    @property
    @pulumi.getter
    def vcn(self) -> str:
        """
        OCID of the VM configuration VCN.
        """
        return pulumi.get(self, "vcn")


@pulumi.output_type
class GetMigrationsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetMigrationsMigrationCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetMigrationsMigrationCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetMigrationsMigrationCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetMigrationsMigrationCollectionItemResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_completed: bool,
                 lifecycle_details: str,
                 replication_schedule_id: str,
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 time_updated: str):
        """
        :param str compartment_id: The ID of the compartment in which to list resources.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str id: Unique identifier that is immutable on creation
        :param bool is_completed: Indicates whether migration is marked as completed.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str replication_schedule_id: Replication schedule identifier
        :param str state: A filter to return only resources where the resource's lifecycle state matches the given lifecycle state.
        :param Mapping[str, Any] system_tags: Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        :param str time_created: The time when the migration project was created. An RFC3339 formatted datetime string
        :param str time_updated: The time when the migration project was updated. An RFC3339 formatted datetime string
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_completed", is_completed)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "replication_schedule_id", replication_schedule_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The ID of the compartment in which to list resources.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Unique identifier that is immutable on creation
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isCompleted")
    def is_completed(self) -> bool:
        """
        Indicates whether migration is marked as completed.
        """
        return pulumi.get(self, "is_completed")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="replicationScheduleId")
    def replication_schedule_id(self) -> str:
        """
        Replication schedule identifier
        """
        return pulumi.get(self, "replication_schedule_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources where the resource's lifecycle state matches the given lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the migration project was created. An RFC3339 formatted datetime string
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the migration project was updated. An RFC3339 formatted datetime string
        """
        return pulumi.get(self, "time_updated")


@pulumi.output_type
class GetReplicationSchedulesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetReplicationSchedulesReplicationScheduleCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetReplicationSchedulesReplicationScheduleCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetReplicationSchedulesReplicationScheduleCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetReplicationSchedulesReplicationScheduleCollectionItemResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 execution_recurrences: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 lifecycle_details: str,
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 time_updated: str):
        """
        :param str compartment_id: The ID of the compartment in which to list resources.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str execution_recurrences: Recurrence specification for the replication schedule execution.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the replication schedule.
        :param str lifecycle_details: The detailed state of the replication schedule.
        :param str state: The current state of the replication schedule.
        :param Mapping[str, Any] system_tags: Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        :param str time_created: The time when the replication schedule was created in RFC3339 format.
        :param str time_updated: The time when the replication schedule was last updated in RFC3339 format.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "execution_recurrences", execution_recurrences)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The ID of the compartment in which to list resources.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="executionRecurrences")
    def execution_recurrences(self) -> str:
        """
        Recurrence specification for the replication schedule execution.
        """
        return pulumi.get(self, "execution_recurrences")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the replication schedule.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        The detailed state of the replication schedule.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the replication schedule.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        Usage of system tag keys. These predefined keys are scoped to namespaces. Example: `{"orcl-cloud.free-tier-retained": "true"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the replication schedule was created in RFC3339 format.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the replication schedule was last updated in RFC3339 format.
        """
        return pulumi.get(self, "time_updated")


@pulumi.output_type
class GetTargetAssetCompatibilityMessageResult(dict):
    def __init__(__self__, *,
                 message: str,
                 name: str,
                 severity: str):
        """
        :param str message: Detailed description of the compatibility issue.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param str severity: Severity level of the compatibility issue.
        """
        pulumi.set(__self__, "message", message)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "severity", severity)

    @property
    @pulumi.getter
    def message(self) -> str:
        """
        Detailed description of the compatibility issue.
        """
        return pulumi.get(self, "message")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def severity(self) -> str:
        """
        Severity level of the compatibility issue.
        """
        return pulumi.get(self, "severity")


@pulumi.output_type
class GetTargetAssetEstimatedCostResult(dict):
    def __init__(__self__, *,
                 computes: Sequence['outputs.GetTargetAssetEstimatedCostComputeResult'],
                 currency_code: str,
                 os_images: Sequence['outputs.GetTargetAssetEstimatedCostOsImageResult'],
                 storages: Sequence['outputs.GetTargetAssetEstimatedCostStorageResult'],
                 subscription_id: str,
                 total_estimation_per_month: float,
                 total_estimation_per_month_by_subscription: float):
        """
        :param Sequence['GetTargetAssetEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['GetTargetAssetEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['GetTargetAssetEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        pulumi.set(__self__, "computes", computes)
        pulumi.set(__self__, "currency_code", currency_code)
        pulumi.set(__self__, "os_images", os_images)
        pulumi.set(__self__, "storages", storages)
        pulumi.set(__self__, "subscription_id", subscription_id)
        pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Sequence['outputs.GetTargetAssetEstimatedCostComputeResult']:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> str:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Sequence['outputs.GetTargetAssetEstimatedCostOsImageResult']:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Sequence['outputs.GetTargetAssetEstimatedCostStorageResult']:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> str:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> float:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> float:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class GetTargetAssetEstimatedCostComputeResult(dict):
    def __init__(__self__, *,
                 gpu_count: float,
                 gpu_per_hour: float,
                 gpu_per_hour_by_subscription: float,
                 memory_amount_gb: float,
                 memory_gb_per_hour: float,
                 memory_gb_per_hour_by_subscription: float,
                 ocpu_count: float,
                 ocpu_per_hour: float,
                 ocpu_per_hour_by_subscription: float,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "gpu_count", gpu_count)
        pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        pulumi.set(__self__, "ocpu_count", ocpu_count)
        pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> float:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> float:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> float:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> float:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> float:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> float:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> float:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> float:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> float:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetTargetAssetEstimatedCostOsImageResult(dict):
    def __init__(__self__, *,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetTargetAssetEstimatedCostStorageResult(dict):
    def __init__(__self__, *,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float,
                 volumes: Sequence['outputs.GetTargetAssetEstimatedCostStorageVolumeResult']):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['GetTargetAssetEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Sequence['outputs.GetTargetAssetEstimatedCostStorageVolumeResult']:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class GetTargetAssetEstimatedCostStorageVolumeResult(dict):
    def __init__(__self__, *,
                 capacity_gb: float,
                 description: str,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        pulumi.set(__self__, "capacity_gb", capacity_gb)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> float:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Volume description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class GetTargetAssetMigrationAssetResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 depended_on_bies: Sequence[str],
                 depends_ons: Sequence[str],
                 display_name: str,
                 id: str,
                 lifecycle_details: str,
                 migration_id: str,
                 notifications: Sequence[str],
                 parent_snapshot: str,
                 replication_compartment_id: str,
                 replication_schedule_id: str,
                 snap_shot_bucket_name: str,
                 snapshots: Mapping[str, Any],
                 source_asset_data: Mapping[str, Any],
                 source_asset_id: str,
                 state: str,
                 tenancy_id: str,
                 time_created: str,
                 time_updated: str,
                 type: str):
        """
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The OCID of the compartment.
        :param Sequence[str] depended_on_bies: List of migration assets that depend on the asset.
        :param Sequence[str] depends_ons: List of migration assets that depends on the asset.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str migration_id: OCID of the associated migration.
        :param Sequence[str] notifications: List of notifications
        :param str parent_snapshot: The parent snapshot of the migration asset to be used by the replication task.
        :param str replication_compartment_id: Replication compartment identifier
        :param str replication_schedule_id: Replication schedule identifier
        :param str snap_shot_bucket_name: Name of snapshot bucket
        :param Mapping[str, Any] snapshots: Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        :param Mapping[str, Any] source_asset_data: Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        :param str source_asset_id: OCID that is referenced to an asset for an inventory.
        :param str state: The current state of the target asset.
        :param str tenancy_id: Tenancy identifier
        :param str time_created: The time when the target asset was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the target asset was updated. An RFC3339 formatted datetime string.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "depended_on_bies", depended_on_bies)
        pulumi.set(__self__, "depends_ons", depends_ons)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "migration_id", migration_id)
        pulumi.set(__self__, "notifications", notifications)
        pulumi.set(__self__, "parent_snapshot", parent_snapshot)
        pulumi.set(__self__, "replication_compartment_id", replication_compartment_id)
        pulumi.set(__self__, "replication_schedule_id", replication_schedule_id)
        pulumi.set(__self__, "snap_shot_bucket_name", snap_shot_bucket_name)
        pulumi.set(__self__, "snapshots", snapshots)
        pulumi.set(__self__, "source_asset_data", source_asset_data)
        pulumi.set(__self__, "source_asset_id", source_asset_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "tenancy_id", tenancy_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="dependedOnBies")
    def depended_on_bies(self) -> Sequence[str]:
        """
        List of migration assets that depend on the asset.
        """
        return pulumi.get(self, "depended_on_bies")

    @property
    @pulumi.getter(name="dependsOns")
    def depends_ons(self) -> Sequence[str]:
        """
        List of migration assets that depends on the asset.
        """
        return pulumi.get(self, "depends_ons")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationId")
    def migration_id(self) -> str:
        """
        OCID of the associated migration.
        """
        return pulumi.get(self, "migration_id")

    @property
    @pulumi.getter
    def notifications(self) -> Sequence[str]:
        """
        List of notifications
        """
        return pulumi.get(self, "notifications")

    @property
    @pulumi.getter(name="parentSnapshot")
    def parent_snapshot(self) -> str:
        """
        The parent snapshot of the migration asset to be used by the replication task.
        """
        return pulumi.get(self, "parent_snapshot")

    @property
    @pulumi.getter(name="replicationCompartmentId")
    def replication_compartment_id(self) -> str:
        """
        Replication compartment identifier
        """
        return pulumi.get(self, "replication_compartment_id")

    @property
    @pulumi.getter(name="replicationScheduleId")
    def replication_schedule_id(self) -> str:
        """
        Replication schedule identifier
        """
        return pulumi.get(self, "replication_schedule_id")

    @property
    @pulumi.getter(name="snapShotBucketName")
    def snap_shot_bucket_name(self) -> str:
        """
        Name of snapshot bucket
        """
        return pulumi.get(self, "snap_shot_bucket_name")

    @property
    @pulumi.getter
    def snapshots(self) -> Mapping[str, Any]:
        """
        Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "snapshots")

    @property
    @pulumi.getter(name="sourceAssetData")
    def source_asset_data(self) -> Mapping[str, Any]:
        """
        Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "source_asset_data")

    @property
    @pulumi.getter(name="sourceAssetId")
    def source_asset_id(self) -> str:
        """
        OCID that is referenced to an asset for an inventory.
        """
        return pulumi.get(self, "source_asset_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the target asset.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="tenancyId")
    def tenancy_id(self) -> str:
        """
        Tenancy identifier
        """
        return pulumi.get(self, "tenancy_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the target asset was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the target asset was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetRecommendedSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetRecommendedSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetRecommendedSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetRecommendedSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetRecommendedSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetRecommendedSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetRecommendedSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetRecommendedSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetRecommendedSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetRecommendedSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetRecommendedSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetRecommendedSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetRecommendedSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetRecommendedSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetRecommendedSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetRecommendedSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetRecommendedSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetRecommendedSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetRecommendedSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetRecommendedSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetRecommendedSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetTargetAssetTestSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetTestSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetTestSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetTestSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetTestSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetTestSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetTestSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetTestSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetTestSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetTestSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetTestSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetTestSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetTestSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetTestSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetTestSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetTestSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetTestSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetTestSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetTestSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetTestSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetTestSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetTestSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetTestSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetTestSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetTestSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetTestSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetTestSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetTestSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetTargetAssetUserSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetUserSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetUserSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetUserSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetUserSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetUserSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetUserSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetUserSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetUserSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetUserSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetUserSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetUserSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetUserSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetUserSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetUserSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetUserSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetUserSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetUserSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetUserSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetUserSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetUserSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetUserSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetUserSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetUserSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetUserSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetUserSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetUserSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetUserSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetTargetAssetsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemResult(dict):
    def __init__(__self__, *,
                 block_volumes_performance: int,
                 compartment_id: str,
                 compatibility_messages: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemCompatibilityMessageResult'],
                 created_resource_id: str,
                 display_name: str,
                 estimated_costs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostResult'],
                 id: str,
                 is_excluded_from_execution: bool,
                 lifecycle_details: str,
                 migration_assets: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemMigrationAssetResult'],
                 migration_plan_id: str,
                 ms_license: str,
                 preferred_shape_type: str,
                 recommended_specs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecResult'],
                 state: str,
                 test_specs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecResult'],
                 time_assessed: str,
                 time_created: str,
                 time_updated: str,
                 type: str,
                 user_specs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecResult']):
        """
        :param int block_volumes_performance: Performance of the block volumes.
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemCompatibilityMessageArgs'] compatibility_messages: Messages about the compatibility issues.
        :param str created_resource_id: Created resource identifier
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemEstimatedCostArgs'] estimated_costs: Cost estimation description
        :param str id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param bool is_excluded_from_execution: A boolean indicating whether the asset should be migrated.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemMigrationAssetArgs'] migration_assets: Description of the migration asset.
        :param str migration_plan_id: Unique migration plan identifier
        :param str ms_license: Microsoft license for VM configuration.
        :param str preferred_shape_type: Preferred VM shape type that you provide.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecArgs'] recommended_specs: Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        :param str state: The current state of the target asset.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecArgs'] test_specs: Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        :param str time_assessed: The time when the assessment was done. An RFC3339 formatted datetime string.
        :param str time_created: The time when the target asset was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the target asset was updated. An RFC3339 formatted datetime string.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecArgs'] user_specs: Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        pulumi.set(__self__, "block_volumes_performance", block_volumes_performance)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "compatibility_messages", compatibility_messages)
        pulumi.set(__self__, "created_resource_id", created_resource_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "estimated_costs", estimated_costs)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_excluded_from_execution", is_excluded_from_execution)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "migration_assets", migration_assets)
        pulumi.set(__self__, "migration_plan_id", migration_plan_id)
        pulumi.set(__self__, "ms_license", ms_license)
        pulumi.set(__self__, "preferred_shape_type", preferred_shape_type)
        pulumi.set(__self__, "recommended_specs", recommended_specs)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "test_specs", test_specs)
        pulumi.set(__self__, "time_assessed", time_assessed)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "user_specs", user_specs)

    @property
    @pulumi.getter(name="blockVolumesPerformance")
    def block_volumes_performance(self) -> int:
        """
        Performance of the block volumes.
        """
        return pulumi.get(self, "block_volumes_performance")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="compatibilityMessages")
    def compatibility_messages(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemCompatibilityMessageResult']:
        """
        Messages about the compatibility issues.
        """
        return pulumi.get(self, "compatibility_messages")

    @property
    @pulumi.getter(name="createdResourceId")
    def created_resource_id(self) -> str:
        """
        Created resource identifier
        """
        return pulumi.get(self, "created_resource_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="estimatedCosts")
    def estimated_costs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostResult']:
        """
        Cost estimation description
        """
        return pulumi.get(self, "estimated_costs")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isExcludedFromExecution")
    def is_excluded_from_execution(self) -> bool:
        """
        A boolean indicating whether the asset should be migrated.
        """
        return pulumi.get(self, "is_excluded_from_execution")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationAssets")
    def migration_assets(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemMigrationAssetResult']:
        """
        Description of the migration asset.
        """
        return pulumi.get(self, "migration_assets")

    @property
    @pulumi.getter(name="migrationPlanId")
    def migration_plan_id(self) -> str:
        """
        Unique migration plan identifier
        """
        return pulumi.get(self, "migration_plan_id")

    @property
    @pulumi.getter(name="msLicense")
    def ms_license(self) -> str:
        """
        Microsoft license for VM configuration.
        """
        return pulumi.get(self, "ms_license")

    @property
    @pulumi.getter(name="preferredShapeType")
    def preferred_shape_type(self) -> str:
        """
        Preferred VM shape type that you provide.
        """
        return pulumi.get(self, "preferred_shape_type")

    @property
    @pulumi.getter(name="recommendedSpecs")
    def recommended_specs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecResult']:
        """
        Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        return pulumi.get(self, "recommended_specs")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the target asset.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="testSpecs")
    def test_specs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecResult']:
        """
        Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        return pulumi.get(self, "test_specs")

    @property
    @pulumi.getter(name="timeAssessed")
    def time_assessed(self) -> str:
        """
        The time when the assessment was done. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_assessed")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the target asset was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the target asset was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="userSpecs")
    def user_specs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecResult']:
        """
        Instance launch details. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        return pulumi.get(self, "user_specs")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemCompatibilityMessageResult(dict):
    def __init__(__self__, *,
                 message: str,
                 name: str,
                 severity: str):
        """
        :param str message: Detailed description of the compatibility issue.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        :param str severity: Severity level of the compatibility issue.
        """
        pulumi.set(__self__, "message", message)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "severity", severity)

    @property
    @pulumi.getter
    def message(self) -> str:
        """
        Detailed description of the compatibility issue.
        """
        return pulumi.get(self, "message")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def severity(self) -> str:
        """
        Severity level of the compatibility issue.
        """
        return pulumi.get(self, "severity")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemEstimatedCostResult(dict):
    def __init__(__self__, *,
                 computes: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostComputeResult'],
                 currency_code: str,
                 os_images: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostOsImageResult'],
                 storages: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageResult'],
                 subscription_id: str,
                 total_estimation_per_month: float,
                 total_estimation_per_month_by_subscription: float):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemEstimatedCostComputeArgs'] computes: Cost estimation for compute
        :param str currency_code: Currency code in the ISO format.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemEstimatedCostOsImageArgs'] os_images: Cost estimation for the OS image.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageArgs'] storages: Cost estimation for storage
        :param str subscription_id: Subscription ID
        :param float total_estimation_per_month: Total estimation per month
        :param float total_estimation_per_month_by_subscription: Total estimation per month by subscription.
        """
        pulumi.set(__self__, "computes", computes)
        pulumi.set(__self__, "currency_code", currency_code)
        pulumi.set(__self__, "os_images", os_images)
        pulumi.set(__self__, "storages", storages)
        pulumi.set(__self__, "subscription_id", subscription_id)
        pulumi.set(__self__, "total_estimation_per_month", total_estimation_per_month)
        pulumi.set(__self__, "total_estimation_per_month_by_subscription", total_estimation_per_month_by_subscription)

    @property
    @pulumi.getter
    def computes(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostComputeResult']:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

    @property
    @pulumi.getter(name="currencyCode")
    def currency_code(self) -> str:
        """
        Currency code in the ISO format.
        """
        return pulumi.get(self, "currency_code")

    @property
    @pulumi.getter(name="osImages")
    def os_images(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostOsImageResult']:
        """
        Cost estimation for the OS image.
        """
        return pulumi.get(self, "os_images")

    @property
    @pulumi.getter
    def storages(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageResult']:
        """
        Cost estimation for storage
        """
        return pulumi.get(self, "storages")

    @property
    @pulumi.getter(name="subscriptionId")
    def subscription_id(self) -> str:
        """
        Subscription ID
        """
        return pulumi.get(self, "subscription_id")

    @property
    @pulumi.getter(name="totalEstimationPerMonth")
    def total_estimation_per_month(self) -> float:
        """
        Total estimation per month
        """
        return pulumi.get(self, "total_estimation_per_month")

    @property
    @pulumi.getter(name="totalEstimationPerMonthBySubscription")
    def total_estimation_per_month_by_subscription(self) -> float:
        """
        Total estimation per month by subscription.
        """
        return pulumi.get(self, "total_estimation_per_month_by_subscription")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemEstimatedCostComputeResult(dict):
    def __init__(__self__, *,
                 gpu_count: float,
                 gpu_per_hour: float,
                 gpu_per_hour_by_subscription: float,
                 memory_amount_gb: float,
                 memory_gb_per_hour: float,
                 memory_gb_per_hour_by_subscription: float,
                 ocpu_count: float,
                 ocpu_per_hour: float,
                 ocpu_per_hour_by_subscription: float,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float gpu_count: Total number of GPU
        :param float gpu_per_hour: GPU per hour
        :param float gpu_per_hour_by_subscription: GPU per hour by subscription
        :param float memory_amount_gb: Total usage of memory
        :param float memory_gb_per_hour: Gigabyte per hour
        :param float memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param float ocpu_count: Total number of OCPUs
        :param float ocpu_per_hour: OCPU per hour
        :param float ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "gpu_count", gpu_count)
        pulumi.set(__self__, "gpu_per_hour", gpu_per_hour)
        pulumi.set(__self__, "gpu_per_hour_by_subscription", gpu_per_hour_by_subscription)
        pulumi.set(__self__, "memory_amount_gb", memory_amount_gb)
        pulumi.set(__self__, "memory_gb_per_hour", memory_gb_per_hour)
        pulumi.set(__self__, "memory_gb_per_hour_by_subscription", memory_gb_per_hour_by_subscription)
        pulumi.set(__self__, "ocpu_count", ocpu_count)
        pulumi.set(__self__, "ocpu_per_hour", ocpu_per_hour)
        pulumi.set(__self__, "ocpu_per_hour_by_subscription", ocpu_per_hour_by_subscription)
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="gpuCount")
    def gpu_count(self) -> float:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

    @property
    @pulumi.getter(name="gpuPerHour")
    def gpu_per_hour(self) -> float:
        """
        GPU per hour
        """
        return pulumi.get(self, "gpu_per_hour")

    @property
    @pulumi.getter(name="gpuPerHourBySubscription")
    def gpu_per_hour_by_subscription(self) -> float:
        """
        GPU per hour by subscription
        """
        return pulumi.get(self, "gpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="memoryAmountGb")
    def memory_amount_gb(self) -> float:
        """
        Total usage of memory
        """
        return pulumi.get(self, "memory_amount_gb")

    @property
    @pulumi.getter(name="memoryGbPerHour")
    def memory_gb_per_hour(self) -> float:
        """
        Gigabyte per hour
        """
        return pulumi.get(self, "memory_gb_per_hour")

    @property
    @pulumi.getter(name="memoryGbPerHourBySubscription")
    def memory_gb_per_hour_by_subscription(self) -> float:
        """
        Gigabyte per hour by subscription
        """
        return pulumi.get(self, "memory_gb_per_hour_by_subscription")

    @property
    @pulumi.getter(name="ocpuCount")
    def ocpu_count(self) -> float:
        """
        Total number of OCPUs
        """
        return pulumi.get(self, "ocpu_count")

    @property
    @pulumi.getter(name="ocpuPerHour")
    def ocpu_per_hour(self) -> float:
        """
        OCPU per hour
        """
        return pulumi.get(self, "ocpu_per_hour")

    @property
    @pulumi.getter(name="ocpuPerHourBySubscription")
    def ocpu_per_hour_by_subscription(self) -> float:
        """
        OCPU per hour by subscription
        """
        return pulumi.get(self, "ocpu_per_hour_by_subscription")

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemEstimatedCostOsImageResult(dict):
    def __init__(__self__, *,
                 total_per_hour: float,
                 total_per_hour_by_subscription: float):
        """
        :param float total_per_hour: Total price per hour
        :param float total_per_hour_by_subscription: Total price per hour by subscription
        """
        pulumi.set(__self__, "total_per_hour", total_per_hour)
        pulumi.set(__self__, "total_per_hour_by_subscription", total_per_hour_by_subscription)

    @property
    @pulumi.getter(name="totalPerHour")
    def total_per_hour(self) -> float:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

    @property
    @pulumi.getter(name="totalPerHourBySubscription")
    def total_per_hour_by_subscription(self) -> float:
        """
        Total price per hour by subscription
        """
        return pulumi.get(self, "total_per_hour_by_subscription")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageResult(dict):
    def __init__(__self__, *,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float,
                 volumes: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageVolumeResult']):
        """
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageVolumeArgs'] volumes: Volume estimation
        """
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)
        pulumi.set(__self__, "volumes", volumes)

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")

    @property
    @pulumi.getter
    def volumes(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageVolumeResult']:
        """
        Volume estimation
        """
        return pulumi.get(self, "volumes")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemEstimatedCostStorageVolumeResult(dict):
    def __init__(__self__, *,
                 capacity_gb: float,
                 description: str,
                 total_gb_per_month: float,
                 total_gb_per_month_by_subscription: float):
        """
        :param float capacity_gb: Gigabyte storage capacity
        :param str description: Volume description
        :param float total_gb_per_month: Gigabyte storage capacity per month.
        :param float total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        """
        pulumi.set(__self__, "capacity_gb", capacity_gb)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "total_gb_per_month", total_gb_per_month)
        pulumi.set(__self__, "total_gb_per_month_by_subscription", total_gb_per_month_by_subscription)

    @property
    @pulumi.getter(name="capacityGb")
    def capacity_gb(self) -> float:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Volume description
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="totalGbPerMonth")
    def total_gb_per_month(self) -> float:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

    @property
    @pulumi.getter(name="totalGbPerMonthBySubscription")
    def total_gb_per_month_by_subscription(self) -> float:
        """
        Gigabyte storage capacity per month by subscription
        """
        return pulumi.get(self, "total_gb_per_month_by_subscription")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemMigrationAssetResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 depended_on_bies: Sequence[str],
                 depends_ons: Sequence[str],
                 display_name: str,
                 id: str,
                 lifecycle_details: str,
                 migration_id: str,
                 notifications: Sequence[str],
                 parent_snapshot: str,
                 replication_compartment_id: str,
                 replication_schedule_id: str,
                 snap_shot_bucket_name: str,
                 snapshots: Mapping[str, Any],
                 source_asset_data: Mapping[str, Any],
                 source_asset_id: str,
                 state: str,
                 tenancy_id: str,
                 time_created: str,
                 time_updated: str,
                 type: str):
        """
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The OCID of the compartment.
        :param Sequence[str] depended_on_bies: List of migration assets that depend on the asset.
        :param Sequence[str] depends_ons: List of migration assets that depends on the asset.
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param str lifecycle_details: A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        :param str migration_id: OCID of the associated migration.
        :param Sequence[str] notifications: List of notifications
        :param str parent_snapshot: The parent snapshot of the migration asset to be used by the replication task.
        :param str replication_compartment_id: Replication compartment identifier
        :param str replication_schedule_id: Replication schedule identifier
        :param str snap_shot_bucket_name: Name of snapshot bucket
        :param Mapping[str, Any] snapshots: Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        :param Mapping[str, Any] source_asset_data: Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        :param str source_asset_id: OCID that is referenced to an asset for an inventory.
        :param str state: The current state of the target asset.
        :param str tenancy_id: Tenancy identifier
        :param str time_created: The time when the target asset was created. An RFC3339 formatted datetime string.
        :param str time_updated: The time when the target asset was updated. An RFC3339 formatted datetime string.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "depended_on_bies", depended_on_bies)
        pulumi.set(__self__, "depends_ons", depends_ons)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "migration_id", migration_id)
        pulumi.set(__self__, "notifications", notifications)
        pulumi.set(__self__, "parent_snapshot", parent_snapshot)
        pulumi.set(__self__, "replication_compartment_id", replication_compartment_id)
        pulumi.set(__self__, "replication_schedule_id", replication_schedule_id)
        pulumi.set(__self__, "snap_shot_bucket_name", snap_shot_bucket_name)
        pulumi.set(__self__, "snapshots", snapshots)
        pulumi.set(__self__, "source_asset_data", source_asset_data)
        pulumi.set(__self__, "source_asset_id", source_asset_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "tenancy_id", tenancy_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="dependedOnBies")
    def depended_on_bies(self) -> Sequence[str]:
        """
        List of migration assets that depend on the asset.
        """
        return pulumi.get(self, "depended_on_bies")

    @property
    @pulumi.getter(name="dependsOns")
    def depends_ons(self) -> Sequence[str]:
        """
        List of migration assets that depends on the asset.
        """
        return pulumi.get(self, "depends_ons")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        A message describing the current state in more detail. For example, it can be used to provide actionable information for a resource in Failed state.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter(name="migrationId")
    def migration_id(self) -> str:
        """
        OCID of the associated migration.
        """
        return pulumi.get(self, "migration_id")

    @property
    @pulumi.getter
    def notifications(self) -> Sequence[str]:
        """
        List of notifications
        """
        return pulumi.get(self, "notifications")

    @property
    @pulumi.getter(name="parentSnapshot")
    def parent_snapshot(self) -> str:
        """
        The parent snapshot of the migration asset to be used by the replication task.
        """
        return pulumi.get(self, "parent_snapshot")

    @property
    @pulumi.getter(name="replicationCompartmentId")
    def replication_compartment_id(self) -> str:
        """
        Replication compartment identifier
        """
        return pulumi.get(self, "replication_compartment_id")

    @property
    @pulumi.getter(name="replicationScheduleId")
    def replication_schedule_id(self) -> str:
        """
        Replication schedule identifier
        """
        return pulumi.get(self, "replication_schedule_id")

    @property
    @pulumi.getter(name="snapShotBucketName")
    def snap_shot_bucket_name(self) -> str:
        """
        Name of snapshot bucket
        """
        return pulumi.get(self, "snap_shot_bucket_name")

    @property
    @pulumi.getter
    def snapshots(self) -> Mapping[str, Any]:
        """
        Key-value pair representing disks ID mapped to the OCIDs of replicated or hydration server volume snapshots. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "snapshots")

    @property
    @pulumi.getter(name="sourceAssetData")
    def source_asset_data(self) -> Mapping[str, Any]:
        """
        Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "source_asset_data")

    @property
    @pulumi.getter(name="sourceAssetId")
    def source_asset_id(self) -> str:
        """
        OCID that is referenced to an asset for an inventory.
        """
        return pulumi.get(self, "source_asset_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the target asset.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="tenancyId")
    def tenancy_id(self) -> str:
        """
        Tenancy identifier
        """
        return pulumi.get(self, "tenancy_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The time when the target asset was created. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The time when the target asset was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemRecommendedSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemTestSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 instance_options: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 preemptible_instance_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigResult'],
                 shape: str,
                 shape_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecShapeConfigResult'],
                 source_details: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecSourceDetailResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str compartment_id: The OCID of the compartment.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecCreateVnicDetailArgs'] create_vnic_details: Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated VM host.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation under which this instance is launched. You can opt out of all default reservations by specifying an empty string as input for this field. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecCreateVnicDetailResult']:
        """
        Contains properties for a VNIC. You use this object when creating the primary VNIC during instance launch or when creating a secondary VNIC. For more information about VNICs, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated VM host.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains lets you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether to enable in-transit encryption for the data volume's paravirtualized attachment. This field applies to both block volumes and boot volumes. By default, the value is false.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. By default, the value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. By default, the value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str display_name: A filter to return only resources that match the entire given display name.
        :param Mapping[str, Any] freeform_tags: Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        :param str hostname_label: Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        :param Sequence[str] nsg_ids: List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, there will be no DNS record registration for the VNIC. If set to true, the DNS record will be registered. By default, the value is true.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the entire given display name.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Simple key-value pair that is applied without any predefined name, type or scope. It exists only for cross-compatibility. Example: `{"bar-key": "value"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        Deprecated. Instead use `hostnameLabel` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). If you provide both, the values must match.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        List of OCIDs of the network security groups (NSGs) that are added to the VNIC. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you should skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC. When launching an instance, use this `subnetId` instead of the deprecated `subnetId` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. By default, it is false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory in gigabytes that is available to the instance.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory in gigabytes that is available to the instance.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetTargetAssetsTargetAssetCollectionItemUserSpecSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 kms_key_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str kms_key_id: The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB that represents the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the key management key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


