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

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

__all__ = [
    'MigrationPlanMigrationPlanStatArgs',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostArgs',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs',
    'MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeArgs',
    'MigrationPlanStrategyArgs',
    'MigrationPlanTargetEnvironmentArgs',
    'TargetAssetCompatibilityMessageArgs',
    'TargetAssetEstimatedCostArgs',
    'TargetAssetEstimatedCostComputeArgs',
    'TargetAssetEstimatedCostOsImageArgs',
    'TargetAssetEstimatedCostStorageArgs',
    'TargetAssetEstimatedCostStorageVolumeArgs',
    'TargetAssetMigrationAssetArgs',
    'TargetAssetRecommendedSpecArgs',
    'TargetAssetRecommendedSpecAgentConfigArgs',
    'TargetAssetRecommendedSpecAgentConfigPluginsConfigArgs',
    'TargetAssetRecommendedSpecCreateVnicDetailArgs',
    'TargetAssetRecommendedSpecInstanceOptionArgs',
    'TargetAssetRecommendedSpecPreemptibleInstanceConfigArgs',
    'TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs',
    'TargetAssetRecommendedSpecShapeConfigArgs',
    'TargetAssetRecommendedSpecSourceDetailArgs',
    'TargetAssetTestSpecArgs',
    'TargetAssetTestSpecAgentConfigArgs',
    'TargetAssetTestSpecAgentConfigPluginsConfigArgs',
    'TargetAssetTestSpecCreateVnicDetailArgs',
    'TargetAssetTestSpecInstanceOptionArgs',
    'TargetAssetTestSpecPreemptibleInstanceConfigArgs',
    'TargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs',
    'TargetAssetTestSpecShapeConfigArgs',
    'TargetAssetTestSpecSourceDetailArgs',
    'TargetAssetUserSpecArgs',
    'TargetAssetUserSpecAgentConfigArgs',
    'TargetAssetUserSpecAgentConfigPluginsConfigArgs',
    'TargetAssetUserSpecCreateVnicDetailsArgs',
    'TargetAssetUserSpecInstanceOptionsArgs',
    'TargetAssetUserSpecPreemptibleInstanceConfigArgs',
    'TargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs',
    'TargetAssetUserSpecShapeConfigArgs',
    'TargetAssetUserSpecSourceDetailsArgs',
    'GetMigrationAssetsFilterArgs',
    'GetMigrationPlanAvailableShapesFilterArgs',
    'GetMigrationPlansFilterArgs',
    'GetMigrationsFilterArgs',
    'GetReplicationSchedulesFilterArgs',
    'GetTargetAssetsFilterArgs',
]

@pulumi.input_type
class MigrationPlanMigrationPlanStatArgs:
    def __init__(__self__, *,
                 time_updated: Optional[pulumi.Input[str]] = None,
                 total_estimated_costs: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostArgs']]]] = None,
                 vm_count: Optional[pulumi.Input[int]] = None):
        """
        :param pulumi.Input[str] time_updated: The time when the migration plan was updated. An RFC3339 formatted datetime string.
        :param pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostArgs']]] total_estimated_costs: Cost estimation description
        :param pulumi.Input[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[pulumi.Input[str]]:
        """
        The time when the migration plan was updated. An RFC3339 formatted datetime string.
        """
        return pulumi.get(self, "time_updated")

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

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

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

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

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


@pulumi.input_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostArgs:
    def __init__(__self__, *,
                 computes: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs']]]] = None,
                 currency_code: Optional[pulumi.Input[str]] = None,
                 os_images: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs']]]] = None,
                 storages: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs']]]] = None,
                 subscription_id: Optional[pulumi.Input[str]] = None,
                 total_estimation_per_month: Optional[pulumi.Input[float]] = None,
                 total_estimation_per_month_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs']]] computes: Cost estimation for compute
        :param pulumi.Input[str] currency_code: Currency code in the ISO format.
        :param pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs']]] os_images: Cost estimation for the OS image.
        :param pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs']]] storages: Cost estimation for storage
        :param pulumi.Input[str] subscription_id: Subscription ID
        :param pulumi.Input[float] total_estimation_per_month: Total estimation per month
        :param pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs']]]]:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostComputeArgs:
    def __init__(__self__, *,
                 gpu_count: Optional[pulumi.Input[float]] = None,
                 gpu_per_hour: Optional[pulumi.Input[float]] = None,
                 gpu_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 memory_amount_gb: Optional[pulumi.Input[float]] = None,
                 memory_gb_per_hour: Optional[pulumi.Input[float]] = None,
                 memory_gb_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 ocpu_count: Optional[pulumi.Input[float]] = None,
                 ocpu_per_hour: Optional[pulumi.Input[float]] = None,
                 ocpu_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 total_per_hour: Optional[pulumi.Input[float]] = None,
                 total_per_hour_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] gpu_count: Total number of GPU
        :param pulumi.Input[float] gpu_per_hour: GPU per hour
        :param pulumi.Input[float] gpu_per_hour_by_subscription: GPU per hour by subscription
        :param pulumi.Input[float] memory_amount_gb: Total usage of memory
        :param pulumi.Input[float] memory_gb_per_hour: Gigabyte per hour
        :param pulumi.Input[float] memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param pulumi.Input[float] ocpu_count: Total number of OCPUs
        :param pulumi.Input[float] ocpu_per_hour: OCPU per hour
        :param pulumi.Input[float] ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param pulumi.Input[float] total_per_hour: Total price per hour
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostOsImageArgs:
    def __init__(__self__, *,
                 total_per_hour: Optional[pulumi.Input[float]] = None,
                 total_per_hour_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] total_per_hour: Total price per hour
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

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

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

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


@pulumi.input_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostStorageArgs:
    def __init__(__self__, *,
                 total_gb_per_month: Optional[pulumi.Input[float]] = None,
                 total_gb_per_month_by_subscription: Optional[pulumi.Input[float]] = None,
                 volumes: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeArgs']]]] = None):
        """
        :param pulumi.Input[float] total_gb_per_month: Gigabyte storage capacity per month.
        :param pulumi.Input[float] total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[float]]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

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

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

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

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

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


@pulumi.input_type
class MigrationPlanMigrationPlanStatTotalEstimatedCostStorageVolumeArgs:
    def __init__(__self__, *,
                 capacity_gb: Optional[pulumi.Input[float]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 total_gb_per_month: Optional[pulumi.Input[float]] = None,
                 total_gb_per_month_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] capacity_gb: Gigabyte storage capacity
        :param pulumi.Input[str] description: Volume description
        :param pulumi.Input[float] total_gb_per_month: Gigabyte storage capacity per month.
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

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

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

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

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

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

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

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


@pulumi.input_type
class MigrationPlanStrategyArgs:
    def __init__(__self__, *,
                 resource_type: pulumi.Input[str],
                 strategy_type: pulumi.Input[str],
                 adjustment_multiplier: Optional[pulumi.Input[float]] = None,
                 metric_time_window: Optional[pulumi.Input[str]] = None,
                 metric_type: Optional[pulumi.Input[str]] = None,
                 percentile: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] resource_type: (Updatable) The type of resource.
        :param pulumi.Input[str] strategy_type: (Updatable) The type of strategy used for migration.
        :param pulumi.Input[float] adjustment_multiplier: (Updatable) The real resource usage is multiplied to this number before making any recommendation.
        :param pulumi.Input[str] metric_time_window: (Updatable) The current state of the migration plan.
        :param pulumi.Input[str] metric_type: (Updatable) The current state of the migration plan.
        :param pulumi.Input[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) -> pulumi.Input[str]:
        """
        (Updatable) The type of resource.
        """
        return pulumi.get(self, "resource_type")

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class MigrationPlanTargetEnvironmentArgs:
    def __init__(__self__, *,
                 subnet: pulumi.Input[str],
                 target_environment_type: pulumi.Input[str],
                 vcn: pulumi.Input[str],
                 availability_domain: Optional[pulumi.Input[str]] = None,
                 dedicated_vm_host: Optional[pulumi.Input[str]] = None,
                 fault_domain: Optional[pulumi.Input[str]] = None,
                 ms_license: Optional[pulumi.Input[str]] = None,
                 preferred_shape_type: Optional[pulumi.Input[str]] = None,
                 target_compartment_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] subnet: (Updatable) OCID of the VM configuration subnet.
        :param pulumi.Input[str] target_environment_type: (Updatable) The type of target environment.
        :param pulumi.Input[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 pulumi.Input[str] availability_domain: (Updatable) Availability Domain of the VM configuration.
        :param pulumi.Input[str] dedicated_vm_host: (Updatable) OCID of the dedicated VM configuration host.
        :param pulumi.Input[str] fault_domain: (Updatable) Fault domain of the VM configuration.
        :param pulumi.Input[str] ms_license: (Updatable) Microsoft license for the VM configuration.
        :param pulumi.Input[str] preferred_shape_type: (Updatable) Preferred VM shape type provided by the customer.
        :param pulumi.Input[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) -> pulumi.Input[str]:
        """
        (Updatable) OCID of the VM configuration subnet.
        """
        return pulumi.get(self, "subnet")

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

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

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

    @property
    @pulumi.getter
    def vcn(self) -> pulumi.Input[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")

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class TargetAssetCompatibilityMessageArgs:
    def __init__(__self__, *,
                 message: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 severity: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] message: Detailed description of the compatibility issue.
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[str]]:
        """
        Detailed description of the compatibility issue.
        """
        return pulumi.get(self, "message")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetEstimatedCostArgs:
    def __init__(__self__, *,
                 computes: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostComputeArgs']]]] = None,
                 currency_code: Optional[pulumi.Input[str]] = None,
                 os_images: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostOsImageArgs']]]] = None,
                 storages: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostStorageArgs']]]] = None,
                 subscription_id: Optional[pulumi.Input[str]] = None,
                 total_estimation_per_month: Optional[pulumi.Input[float]] = None,
                 total_estimation_per_month_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostComputeArgs']]] computes: Cost estimation for compute
        :param pulumi.Input[str] currency_code: Currency code in the ISO format.
        :param pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostOsImageArgs']]] os_images: Cost estimation for the OS image.
        :param pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostStorageArgs']]] storages: Cost estimation for storage
        :param pulumi.Input[str] subscription_id: Subscription ID
        :param pulumi.Input[float] total_estimation_per_month: Total estimation per month
        :param pulumi.Input[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[pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostComputeArgs']]]]:
        """
        Cost estimation for compute
        """
        return pulumi.get(self, "computes")

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class TargetAssetEstimatedCostComputeArgs:
    def __init__(__self__, *,
                 gpu_count: Optional[pulumi.Input[float]] = None,
                 gpu_per_hour: Optional[pulumi.Input[float]] = None,
                 gpu_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 memory_amount_gb: Optional[pulumi.Input[float]] = None,
                 memory_gb_per_hour: Optional[pulumi.Input[float]] = None,
                 memory_gb_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 ocpu_count: Optional[pulumi.Input[float]] = None,
                 ocpu_per_hour: Optional[pulumi.Input[float]] = None,
                 ocpu_per_hour_by_subscription: Optional[pulumi.Input[float]] = None,
                 total_per_hour: Optional[pulumi.Input[float]] = None,
                 total_per_hour_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] gpu_count: Total number of GPU
        :param pulumi.Input[float] gpu_per_hour: GPU per hour
        :param pulumi.Input[float] gpu_per_hour_by_subscription: GPU per hour by subscription
        :param pulumi.Input[float] memory_amount_gb: Total usage of memory
        :param pulumi.Input[float] memory_gb_per_hour: Gigabyte per hour
        :param pulumi.Input[float] memory_gb_per_hour_by_subscription: Gigabyte per hour by subscription
        :param pulumi.Input[float] ocpu_count: Total number of OCPUs
        :param pulumi.Input[float] ocpu_per_hour: OCPU per hour
        :param pulumi.Input[float] ocpu_per_hour_by_subscription: OCPU per hour by subscription
        :param pulumi.Input[float] total_per_hour: Total price per hour
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Total number of GPU
        """
        return pulumi.get(self, "gpu_count")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class TargetAssetEstimatedCostOsImageArgs:
    def __init__(__self__, *,
                 total_per_hour: Optional[pulumi.Input[float]] = None,
                 total_per_hour_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] total_per_hour: Total price per hour
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Total price per hour
        """
        return pulumi.get(self, "total_per_hour")

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

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

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


@pulumi.input_type
class TargetAssetEstimatedCostStorageArgs:
    def __init__(__self__, *,
                 total_gb_per_month: Optional[pulumi.Input[float]] = None,
                 total_gb_per_month_by_subscription: Optional[pulumi.Input[float]] = None,
                 volumes: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetEstimatedCostStorageVolumeArgs']]]] = None):
        """
        :param pulumi.Input[float] total_gb_per_month: Gigabyte storage capacity per month.
        :param pulumi.Input[float] total_gb_per_month_by_subscription: Gigabyte storage capacity per month by subscription
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[float]]:
        """
        Gigabyte storage capacity per month.
        """
        return pulumi.get(self, "total_gb_per_month")

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

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

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

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

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


@pulumi.input_type
class TargetAssetEstimatedCostStorageVolumeArgs:
    def __init__(__self__, *,
                 capacity_gb: Optional[pulumi.Input[float]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 total_gb_per_month: Optional[pulumi.Input[float]] = None,
                 total_gb_per_month_by_subscription: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[float] capacity_gb: Gigabyte storage capacity
        :param pulumi.Input[str] description: Volume description
        :param pulumi.Input[float] total_gb_per_month: Gigabyte storage capacity per month.
        :param pulumi.Input[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[pulumi.Input[float]]:
        """
        Gigabyte storage capacity
        """
        return pulumi.get(self, "capacity_gb")

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

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

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

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

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

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

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


@pulumi.input_type
class TargetAssetMigrationAssetArgs:
    def __init__(__self__, *,
                 availability_domain: Optional[pulumi.Input[str]] = None,
                 compartment_id: Optional[pulumi.Input[str]] = None,
                 depended_on_bies: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 depends_ons: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 id: Optional[pulumi.Input[str]] = None,
                 lifecycle_details: Optional[pulumi.Input[str]] = None,
                 migration_id: Optional[pulumi.Input[str]] = None,
                 notifications: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 parent_snapshot: Optional[pulumi.Input[str]] = None,
                 replication_compartment_id: Optional[pulumi.Input[str]] = None,
                 replication_schedule_id: Optional[pulumi.Input[str]] = None,
                 snap_shot_bucket_name: Optional[pulumi.Input[str]] = None,
                 snapshots: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 source_asset_data: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 source_asset_id: Optional[pulumi.Input[str]] = None,
                 state: Optional[pulumi.Input[str]] = None,
                 tenancy_id: Optional[pulumi.Input[str]] = None,
                 time_created: Optional[pulumi.Input[str]] = None,
                 time_updated: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param pulumi.Input[str] compartment_id: (Updatable) The OCID of the compartment.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] depended_on_bies: List of migration assets that depend on the asset.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] depends_ons: List of migration assets that depends on the asset.
        :param pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[str] id: Asset ID generated by mirgration service. It is used in the mirgration service pipeline.
        :param pulumi.Input[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 pulumi.Input[str] migration_id: OCID of the associated migration.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] notifications: List of notifications
        :param pulumi.Input[str] parent_snapshot: The parent snapshot of the migration asset to be used by the replication task.
        :param pulumi.Input[str] replication_compartment_id: Replication compartment identifier
        :param pulumi.Input[str] replication_schedule_id: Replication schedule identifier
        :param pulumi.Input[str] snap_shot_bucket_name: Name of snapshot bucket
        :param pulumi.Input[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 pulumi.Input[Mapping[str, Any]] source_asset_data: Key-value pair representing asset metadata keys and values scoped to a namespace. Example: `{"bar-key": "value"}`
        :param pulumi.Input[str] source_asset_id: OCID that is referenced to an asset for an inventory.
        :param pulumi.Input[str] state: The current state of the target asset.
        :param pulumi.Input[str] tenancy_id: Tenancy identifier
        :param pulumi.Input[str] time_created: The time when the target asset was created. An RFC3339 formatted datetime string.
        :param pulumi.Input[str] time_updated: The time when the target asset was updated. An RFC3339 formatted datetime string.
        :param pulumi.Input[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[pulumi.Input[str]]:
        """
        (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> Optional[pulumi.Input[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")

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

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

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter
    def snapshots(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="sourceAssetData")
    def source_asset_data(self) -> Optional[pulumi.Input[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")

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

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.input_type
class TargetAssetRecommendedSpecArgs:
    def __init__(__self__, *,
                 agent_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecAgentConfigArgs']]]] = None,
                 availability_domain: Optional[pulumi.Input[str]] = None,
                 capacity_reservation_id: Optional[pulumi.Input[str]] = None,
                 compartment_id: Optional[pulumi.Input[str]] = None,
                 create_vnic_details: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecCreateVnicDetailArgs']]]] = None,
                 dedicated_vm_host_id: Optional[pulumi.Input[str]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 fault_domain: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 instance_options: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecInstanceOptionArgs']]]] = None,
                 ipxe_script: Optional[pulumi.Input[str]] = None,
                 is_pv_encryption_in_transit_enabled: Optional[pulumi.Input[bool]] = None,
                 preemptible_instance_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecPreemptibleInstanceConfigArgs']]]] = None,
                 shape: Optional[pulumi.Input[str]] = None,
                 shape_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecShapeConfigArgs']]]] = None,
                 source_details: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecSourceDetailArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecAgentConfigArgs']]] agent_configs: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param pulumi.Input[str] availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param pulumi.Input[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 pulumi.Input[str] compartment_id: (Updatable) The OCID of the compartment.
        :param pulumi.Input[Sequence[pulumi.Input['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 pulumi.Input[str] dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecInstanceOptionArgs']]] instance_options: (Updatable) Optional mutable instance options
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecPreemptibleInstanceConfigArgs']]] preemptible_instance_configs: (Updatable) Configuration options for preemptible instances.
        :param pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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 pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecAgentConfigArgs']]]]:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

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

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

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

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecCreateVnicDetailArgs']]]]:
        """
        (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")

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

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter
    def shape(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecShapeConfigArgs']]]]:
        """
        (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")

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

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

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


@pulumi.input_type
class TargetAssetRecommendedSpecAgentConfigArgs:
    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[pulumi.Input[bool]] = None,
                 is_management_disabled: Optional[pulumi.Input[bool]] = None,
                 is_monitoring_disabled: Optional[pulumi.Input[bool]] = None,
                 plugins_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecAgentConfigPluginsConfigArgs']]]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetRecommendedSpecAgentConfigPluginsConfigArgs:
    def __init__(__self__, *,
                 desired_state: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetRecommendedSpecCreateVnicDetailArgs:
    def __init__(__self__, *,
                 assign_private_dns_record: Optional[pulumi.Input[bool]] = None,
                 assign_public_ip: Optional[pulumi.Input[bool]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 nsg_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 skip_source_dest_check: Optional[pulumi.Input[bool]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 vlan_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetRecommendedSpecInstanceOptionArgs:
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[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[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetRecommendedSpecPreemptibleInstanceConfigArgs:
    def __init__(__self__, *,
                 preemption_actions: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[Sequence[pulumi.Input['TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs']]]]:
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")

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


@pulumi.input_type
class TargetAssetRecommendedSpecPreemptibleInstanceConfigPreemptionActionArgs:
    def __init__(__self__, *,
                 preserve_boot_volume: Optional[pulumi.Input[bool]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetRecommendedSpecShapeConfigArgs:
    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[pulumi.Input[str]] = None,
                 memory_in_gbs: Optional[pulumi.Input[float]] = None,
                 ocpus: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[float] memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param pulumi.Input[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[pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class TargetAssetRecommendedSpecSourceDetailArgs:
    def __init__(__self__, *,
                 boot_volume_id: Optional[pulumi.Input[str]] = None,
                 boot_volume_size_in_gbs: Optional[pulumi.Input[str]] = None,
                 boot_volume_vpus_per_gb: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 kms_key_id: Optional[pulumi.Input[str]] = None,
                 source_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] image_id: (Updatable) The OCID of the image used to boot the instance.
        :param pulumi.Input[str] kms_key_id: (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param pulumi.Input[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[pulumi.Input[str]]:
        """
        (Updatable) The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

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

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetTestSpecArgs:
    def __init__(__self__, *,
                 agent_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecAgentConfigArgs']]]] = None,
                 availability_domain: Optional[pulumi.Input[str]] = None,
                 capacity_reservation_id: Optional[pulumi.Input[str]] = None,
                 compartment_id: Optional[pulumi.Input[str]] = None,
                 create_vnic_details: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecCreateVnicDetailArgs']]]] = None,
                 dedicated_vm_host_id: Optional[pulumi.Input[str]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 fault_domain: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 instance_options: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecInstanceOptionArgs']]]] = None,
                 ipxe_script: Optional[pulumi.Input[str]] = None,
                 is_pv_encryption_in_transit_enabled: Optional[pulumi.Input[bool]] = None,
                 preemptible_instance_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecPreemptibleInstanceConfigArgs']]]] = None,
                 shape: Optional[pulumi.Input[str]] = None,
                 shape_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecShapeConfigArgs']]]] = None,
                 source_details: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecSourceDetailArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecAgentConfigArgs']]] agent_configs: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param pulumi.Input[str] availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param pulumi.Input[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 pulumi.Input[str] compartment_id: (Updatable) The OCID of the compartment.
        :param pulumi.Input[Sequence[pulumi.Input['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 pulumi.Input[str] dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecInstanceOptionArgs']]] instance_options: (Updatable) Optional mutable instance options
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecPreemptibleInstanceConfigArgs']]] preemptible_instance_configs: (Updatable) Configuration options for preemptible instances.
        :param pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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 pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecAgentConfigArgs']]]]:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

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

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

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

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecCreateVnicDetailArgs']]]]:
        """
        (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")

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

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter
    def shape(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecShapeConfigArgs']]]]:
        """
        (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")

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

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

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


@pulumi.input_type
class TargetAssetTestSpecAgentConfigArgs:
    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[pulumi.Input[bool]] = None,
                 is_management_disabled: Optional[pulumi.Input[bool]] = None,
                 is_monitoring_disabled: Optional[pulumi.Input[bool]] = None,
                 plugins_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecAgentConfigPluginsConfigArgs']]]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetTestSpecAgentConfigPluginsConfigArgs:
    def __init__(__self__, *,
                 desired_state: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetTestSpecCreateVnicDetailArgs:
    def __init__(__self__, *,
                 assign_private_dns_record: Optional[pulumi.Input[bool]] = None,
                 assign_public_ip: Optional[pulumi.Input[bool]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 nsg_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 skip_source_dest_check: Optional[pulumi.Input[bool]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 vlan_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetTestSpecInstanceOptionArgs:
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[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[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetTestSpecPreemptibleInstanceConfigArgs:
    def __init__(__self__, *,
                 preemption_actions: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs']]]] = None):
        """
        :param pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[Sequence[pulumi.Input['TargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs']]]]:
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")

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


@pulumi.input_type
class TargetAssetTestSpecPreemptibleInstanceConfigPreemptionActionArgs:
    def __init__(__self__, *,
                 preserve_boot_volume: Optional[pulumi.Input[bool]] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetTestSpecShapeConfigArgs:
    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[pulumi.Input[str]] = None,
                 memory_in_gbs: Optional[pulumi.Input[float]] = None,
                 ocpus: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[float] memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param pulumi.Input[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[pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class TargetAssetTestSpecSourceDetailArgs:
    def __init__(__self__, *,
                 boot_volume_id: Optional[pulumi.Input[str]] = None,
                 boot_volume_size_in_gbs: Optional[pulumi.Input[str]] = None,
                 boot_volume_vpus_per_gb: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 kms_key_id: Optional[pulumi.Input[str]] = None,
                 source_type: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] image_id: (Updatable) The OCID of the image used to boot the instance.
        :param pulumi.Input[str] kms_key_id: (Updatable) The OCID of the key management key to assign as the master encryption key for the boot volume.
        :param pulumi.Input[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[pulumi.Input[str]]:
        """
        (Updatable) The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

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

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetUserSpecArgs:
    def __init__(__self__, *,
                 agent_config: Optional[pulumi.Input['TargetAssetUserSpecAgentConfigArgs']] = None,
                 availability_domain: Optional[pulumi.Input[str]] = None,
                 capacity_reservation_id: Optional[pulumi.Input[str]] = None,
                 compartment_id: Optional[pulumi.Input[str]] = None,
                 create_vnic_details: Optional[pulumi.Input['TargetAssetUserSpecCreateVnicDetailsArgs']] = None,
                 dedicated_vm_host_id: Optional[pulumi.Input[str]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 fault_domain: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 instance_options: Optional[pulumi.Input['TargetAssetUserSpecInstanceOptionsArgs']] = None,
                 ipxe_script: Optional[pulumi.Input[str]] = None,
                 is_pv_encryption_in_transit_enabled: Optional[pulumi.Input[bool]] = None,
                 preemptible_instance_config: Optional[pulumi.Input['TargetAssetUserSpecPreemptibleInstanceConfigArgs']] = None,
                 shape: Optional[pulumi.Input[str]] = None,
                 shape_config: Optional[pulumi.Input['TargetAssetUserSpecShapeConfigArgs']] = None,
                 source_details: Optional[pulumi.Input['TargetAssetUserSpecSourceDetailsArgs']] = None):
        """
        :param pulumi.Input['TargetAssetUserSpecAgentConfigArgs'] agent_config: (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        :param pulumi.Input[str] availability_domain: (Updatable) The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param pulumi.Input[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 pulumi.Input[str] compartment_id: (Updatable) The OCID of the compartment.
        :param pulumi.Input['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 pulumi.Input[str] dedicated_vm_host_id: (Updatable) The OCID of the dedicated VM host.
        :param pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input['TargetAssetUserSpecInstanceOptionsArgs'] instance_options: (Updatable) Optional mutable instance options
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input['TargetAssetUserSpecPreemptibleInstanceConfigArgs'] preemptible_instance_config: (Updatable) Configuration options for preemptible instances.
        :param pulumi.Input[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 pulumi.Input['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 pulumi.Input['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[pulumi.Input['TargetAssetUserSpecAgentConfigArgs']]:
        """
        (Updatable) Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_config")

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

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

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

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional[pulumi.Input['TargetAssetUserSpecCreateVnicDetailsArgs']]:
        """
        (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")

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

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter
    def shape(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="shapeConfig")
    def shape_config(self) -> Optional[pulumi.Input['TargetAssetUserSpecShapeConfigArgs']]:
        """
        (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")

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

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

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


@pulumi.input_type
class TargetAssetUserSpecAgentConfigArgs:
    def __init__(__self__, *,
                 are_all_plugins_disabled: Optional[pulumi.Input[bool]] = None,
                 is_management_disabled: Optional[pulumi.Input[bool]] = None,
                 is_monitoring_disabled: Optional[pulumi.Input[bool]] = None,
                 plugins_configs: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssetUserSpecAgentConfigPluginsConfigArgs']]]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input['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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[pulumi.Input[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")

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

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

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


@pulumi.input_type
class TargetAssetUserSpecAgentConfigPluginsConfigArgs:
    def __init__(__self__, *,
                 desired_state: pulumi.Input[str],
                 name: pulumi.Input[str]):
        """
        :param pulumi.Input[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 pulumi.Input[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) -> pulumi.Input[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")

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

    @property
    @pulumi.getter
    def name(self) -> pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetUserSpecCreateVnicDetailsArgs:
    def __init__(__self__, *,
                 assign_private_dns_record: Optional[pulumi.Input[bool]] = None,
                 assign_public_ip: Optional[pulumi.Input[bool]] = None,
                 defined_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 display_name: Optional[pulumi.Input[str]] = None,
                 freeform_tags: Optional[pulumi.Input[Mapping[str, Any]]] = None,
                 hostname_label: Optional[pulumi.Input[str]] = None,
                 nsg_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 skip_source_dest_check: Optional[pulumi.Input[bool]] = None,
                 subnet_id: Optional[pulumi.Input[str]] = None,
                 vlan_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[Sequence[pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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 pulumi.Input[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[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetUserSpecInstanceOptionsArgs:
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[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[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetUserSpecPreemptibleInstanceConfigArgs:
    def __init__(__self__, *,
                 preemption_action: pulumi.Input['TargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs']):
        """
        :param pulumi.Input['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) -> pulumi.Input['TargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs']:
        """
        (Updatable) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_action")

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


@pulumi.input_type
class TargetAssetUserSpecPreemptibleInstanceConfigPreemptionActionArgs:
    def __init__(__self__, *,
                 type: pulumi.Input[str],
                 preserve_boot_volume: Optional[pulumi.Input[bool]] = None):
        """
        :param pulumi.Input[str] type: (Updatable) The type of action to run when the instance is interrupted for eviction.
        :param pulumi.Input[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) -> pulumi.Input[str]:
        """
        (Updatable) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class TargetAssetUserSpecShapeConfigArgs:
    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[pulumi.Input[str]] = None,
                 memory_in_gbs: Optional[pulumi.Input[float]] = None,
                 ocpus: Optional[pulumi.Input[float]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[float] memory_in_gbs: (Updatable) The total amount of memory in gigabytes that is available to the instance.
        :param pulumi.Input[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[pulumi.Input[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")

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

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

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

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

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


@pulumi.input_type
class TargetAssetUserSpecSourceDetailsArgs:
    def __init__(__self__, *,
                 source_type: pulumi.Input[str],
                 boot_volume_id: Optional[pulumi.Input[str]] = None,
                 boot_volume_size_in_gbs: Optional[pulumi.Input[str]] = None,
                 boot_volume_vpus_per_gb: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 kms_key_id: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[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 pulumi.Input[str] boot_volume_id: (Updatable) The OCID of the boot volume used to boot the instance.
        :param pulumi.Input[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 pulumi.Input[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 pulumi.Input[str] image_id: (Updatable) The OCID of the image used to boot the instance.
        :param pulumi.Input[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) -> pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> Optional[pulumi.Input[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")

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

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> Optional[pulumi.Input[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")

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

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

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[pulumi.Input[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")

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


@pulumi.input_type
class GetMigrationAssetsFilterArgs:
    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")

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

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

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

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

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


@pulumi.input_type
class GetMigrationPlanAvailableShapesFilterArgs:
    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")

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

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

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

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

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


@pulumi.input_type
class GetMigrationPlansFilterArgs:
    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")

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

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

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

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

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


@pulumi.input_type
class GetMigrationsFilterArgs:
    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")

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

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

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

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

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


@pulumi.input_type
class GetReplicationSchedulesFilterArgs:
    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")

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

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

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

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

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


@pulumi.input_type
class GetTargetAssetsFilterArgs:
    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")

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

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

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

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

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


