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

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

__all__ = [
    'BootVolumeAutotunePolicy',
    'BootVolumeBackupSourceDetails',
    'BootVolumeBootVolumeReplica',
    'BootVolumeSourceDetails',
    'CaptureFilterVtapCaptureFilterRule',
    'CaptureFilterVtapCaptureFilterRuleIcmpOptions',
    'CaptureFilterVtapCaptureFilterRuleTcpOptions',
    'CaptureFilterVtapCaptureFilterRuleTcpOptionsDestinationPortRange',
    'CaptureFilterVtapCaptureFilterRuleTcpOptionsSourcePortRange',
    'CaptureFilterVtapCaptureFilterRuleUdpOptions',
    'CaptureFilterVtapCaptureFilterRuleUdpOptionsDestinationPortRange',
    'CaptureFilterVtapCaptureFilterRuleUdpOptionsSourcePortRange',
    'ClusterNetworkInstancePool',
    'ClusterNetworkInstancePoolLoadBalancer',
    'ClusterNetworkInstancePoolPlacementConfiguration',
    'ClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnet',
    'ClusterNetworkPlacementConfiguration',
    'ClusterNetworkPlacementConfigurationSecondaryVnicSubnet',
    'ComputeCapacityReservationInstanceReservationConfig',
    'ComputeCapacityReservationInstanceReservationConfigClusterConfig',
    'ComputeCapacityReservationInstanceReservationConfigInstanceShapeConfig',
    'CrossConnectGroupMacsecProperties',
    'CrossConnectGroupMacsecPropertiesPrimaryKey',
    'CrossConnectMacsecProperties',
    'CrossConnectMacsecPropertiesPrimaryKey',
    'DefaultDhcpOptionsOption',
    'DefaultRouteTableRouteRule',
    'DefaultSecurityListEgressSecurityRule',
    'DefaultSecurityListEgressSecurityRuleIcmpOptions',
    'DefaultSecurityListEgressSecurityRuleTcpOptions',
    'DefaultSecurityListEgressSecurityRuleTcpOptionsSourcePortRange',
    'DefaultSecurityListEgressSecurityRuleUdpOptions',
    'DefaultSecurityListEgressSecurityRuleUdpOptionsSourcePortRange',
    'DefaultSecurityListIngressSecurityRule',
    'DefaultSecurityListIngressSecurityRuleIcmpOptions',
    'DefaultSecurityListIngressSecurityRuleTcpOptions',
    'DefaultSecurityListIngressSecurityRuleTcpOptionsSourcePortRange',
    'DefaultSecurityListIngressSecurityRuleUdpOptions',
    'DefaultSecurityListIngressSecurityRuleUdpOptionsSourcePortRange',
    'DhcpOptionsOption',
    'DrgAttachmentManagementNetworkDetails',
    'DrgAttachmentNetworkDetails',
    'DrgAttachmentsListDrgAllAttachment',
    'DrgDefaultDrgRouteTable',
    'DrgRouteDistributionStatementMatchCriteria',
    'ImageAgentFeature',
    'ImageImageSourceDetails',
    'ImageLaunchOption',
    'InstanceAgentConfig',
    'InstanceAgentConfigPluginsConfig',
    'InstanceAvailabilityConfig',
    'InstanceConfigurationInstanceDetails',
    'InstanceConfigurationInstanceDetailsBlockVolume',
    'InstanceConfigurationInstanceDetailsBlockVolumeAttachDetails',
    'InstanceConfigurationInstanceDetailsBlockVolumeCreateDetails',
    'InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsAutotunePolicy',
    'InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsSourceDetails',
    'InstanceConfigurationInstanceDetailsLaunchDetails',
    'InstanceConfigurationInstanceDetailsLaunchDetailsAgentConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsAgentConfigPluginsConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsAvailabilityConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsCreateVnicDetails',
    'InstanceConfigurationInstanceDetailsLaunchDetailsInstanceOptions',
    'InstanceConfigurationInstanceDetailsLaunchDetailsLaunchOptions',
    'InstanceConfigurationInstanceDetailsLaunchDetailsPlatformConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsPreemptibleInstanceConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsPreemptibleInstanceConfigPreemptionAction',
    'InstanceConfigurationInstanceDetailsLaunchDetailsShapeConfig',
    'InstanceConfigurationInstanceDetailsLaunchDetailsSourceDetails',
    'InstanceConfigurationInstanceDetailsSecondaryVnic',
    'InstanceConfigurationInstanceDetailsSecondaryVnicCreateVnicDetails',
    'InstanceCreateVnicDetails',
    'InstanceInstanceOptions',
    'InstanceLaunchOptions',
    'InstancePlatformConfig',
    'InstancePoolInstanceLoadBalancerBackend',
    'InstancePoolLoadBalancer',
    'InstancePoolPlacementConfiguration',
    'InstancePoolPlacementConfigurationSecondaryVnicSubnet',
    'InstancePreemptibleInstanceConfig',
    'InstancePreemptibleInstanceConfigPreemptionAction',
    'InstanceShapeConfig',
    'InstanceSourceDetails',
    'IpsecConnectionTunnelManagementBgpSessionInfo',
    'IpsecConnectionTunnelManagementDpdConfig',
    'IpsecConnectionTunnelManagementEncryptionDomainConfig',
    'IpsecConnectionTunnelManagementPhaseOneDetail',
    'IpsecConnectionTunnelManagementPhaseTwoDetail',
    'NetworkSecurityGroupSecurityRuleIcmpOptions',
    'NetworkSecurityGroupSecurityRuleTcpOptions',
    'NetworkSecurityGroupSecurityRuleTcpOptionsDestinationPortRange',
    'NetworkSecurityGroupSecurityRuleTcpOptionsSourcePortRange',
    'NetworkSecurityGroupSecurityRuleUdpOptions',
    'NetworkSecurityGroupSecurityRuleUdpOptionsDestinationPortRange',
    'NetworkSecurityGroupSecurityRuleUdpOptionsSourcePortRange',
    'RouteTableRouteRule',
    'SecurityListEgressSecurityRule',
    'SecurityListEgressSecurityRuleIcmpOptions',
    'SecurityListEgressSecurityRuleTcpOptions',
    'SecurityListEgressSecurityRuleTcpOptionsSourcePortRange',
    'SecurityListEgressSecurityRuleUdpOptions',
    'SecurityListEgressSecurityRuleUdpOptionsSourcePortRange',
    'SecurityListIngressSecurityRule',
    'SecurityListIngressSecurityRuleIcmpOptions',
    'SecurityListIngressSecurityRuleTcpOptions',
    'SecurityListIngressSecurityRuleTcpOptionsSourcePortRange',
    'SecurityListIngressSecurityRuleUdpOptions',
    'SecurityListIngressSecurityRuleUdpOptionsSourcePortRange',
    'ServiceGatewayService',
    'VcnByoipv6cidrDetail',
    'VirtualCircuitCrossConnectMapping',
    'VirtualCircuitPublicPrefix',
    'VirtualNetworkByoipv6cidrDetail',
    'VnicAttachmentCreateVnicDetails',
    'VolumeAttachmentMultipathDevice',
    'VolumeAutotunePolicy',
    'VolumeBackupPolicySchedule',
    'VolumeBackupSourceDetails',
    'VolumeBlockVolumeReplica',
    'VolumeGroupBackupSourceDetails',
    'VolumeGroupSourceDetails',
    'VolumeGroupVolumeGroupReplica',
    'VolumeSourceDetails',
    'GetAppCatalogListingResourceVersionsAppCatalogListingResourceVersionResult',
    'GetAppCatalogListingResourceVersionsFilterResult',
    'GetAppCatalogListingsAppCatalogListingResult',
    'GetAppCatalogListingsFilterResult',
    'GetAppCatalogSubscriptionsAppCatalogSubscriptionResult',
    'GetAppCatalogSubscriptionsFilterResult',
    'GetBlockVolumeReplicasBlockVolumeReplicaResult',
    'GetBlockVolumeReplicasFilterResult',
    'GetBootVolumeAttachmentsBootVolumeAttachmentResult',
    'GetBootVolumeAttachmentsFilterResult',
    'GetBootVolumeAutotunePolicyResult',
    'GetBootVolumeBackupSourceDetailResult',
    'GetBootVolumeBackupsBootVolumeBackupResult',
    'GetBootVolumeBackupsBootVolumeBackupSourceDetailResult',
    'GetBootVolumeBackupsFilterResult',
    'GetBootVolumeBootVolumeReplicaResult',
    'GetBootVolumeReplicasBootVolumeReplicaResult',
    'GetBootVolumeReplicasFilterResult',
    'GetBootVolumeSourceDetailResult',
    'GetBootVolumesBootVolumeResult',
    'GetBootVolumesBootVolumeAutotunePolicyResult',
    'GetBootVolumesBootVolumeBootVolumeReplicaResult',
    'GetBootVolumesBootVolumeSourceDetailResult',
    'GetBootVolumesFilterResult',
    'GetByoipAllocatedRangesByoipAllocatedRangeCollectionResult',
    'GetByoipAllocatedRangesByoipAllocatedRangeCollectionItemResult',
    'GetByoipAllocatedRangesFilterResult',
    'GetByoipRangeByoipRangeVcnIpv6allocationResult',
    'GetByoipRangesByoipRangeCollectionResult',
    'GetByoipRangesByoipRangeCollectionItemResult',
    'GetByoipRangesByoipRangeCollectionItemByoipRangeVcnIpv6allocationResult',
    'GetByoipRangesFilterResult',
    'GetCaptureFilterVtapCaptureFilterRuleResult',
    'GetCaptureFilterVtapCaptureFilterRuleIcmpOptionResult',
    'GetCaptureFilterVtapCaptureFilterRuleTcpOptionResult',
    'GetCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult',
    'GetCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult',
    'GetCaptureFilterVtapCaptureFilterRuleUdpOptionResult',
    'GetCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult',
    'GetCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult',
    'GetCaptureFiltersCaptureFilterResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleIcmpOptionResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult',
    'GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult',
    'GetCaptureFiltersFilterResult',
    'GetClusterNetworkInstancePoolResult',
    'GetClusterNetworkInstancePoolLoadBalancerResult',
    'GetClusterNetworkInstancePoolPlacementConfigurationResult',
    'GetClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult',
    'GetClusterNetworkInstancesFilterResult',
    'GetClusterNetworkInstancesInstanceResult',
    'GetClusterNetworkInstancesInstanceLoadBalancerBackendResult',
    'GetClusterNetworkPlacementConfigurationResult',
    'GetClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult',
    'GetClusterNetworksClusterNetworkResult',
    'GetClusterNetworksClusterNetworkInstancePoolResult',
    'GetClusterNetworksClusterNetworkInstancePoolLoadBalancerResult',
    'GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationResult',
    'GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult',
    'GetClusterNetworksClusterNetworkPlacementConfigurationResult',
    'GetClusterNetworksClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult',
    'GetClusterNetworksFilterResult',
    'GetComputeCapacityReservationInstanceReservationConfigResult',
    'GetComputeCapacityReservationInstanceReservationConfigClusterConfigResult',
    'GetComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult',
    'GetComputeCapacityReservationInstanceShapesComputeCapacityReservationInstanceShapeResult',
    'GetComputeCapacityReservationInstanceShapesFilterResult',
    'GetComputeCapacityReservationInstancesCapacityReservationInstanceResult',
    'GetComputeCapacityReservationInstancesCapacityReservationInstanceShapeConfigResult',
    'GetComputeCapacityReservationInstancesFilterResult',
    'GetComputeCapacityReservationsComputeCapacityReservationResult',
    'GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigResult',
    'GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigClusterConfigResult',
    'GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult',
    'GetComputeCapacityReservationsFilterResult',
    'GetComputeClustersComputeClusterCollectionResult',
    'GetComputeClustersComputeClusterCollectionItemResult',
    'GetComputeClustersFilterResult',
    'GetComputeGlobalImageCapabilitySchemasComputeGlobalImageCapabilitySchemaResult',
    'GetComputeGlobalImageCapabilitySchemasFilterResult',
    'GetComputeGlobalImageCapabilitySchemasVersionsComputeGlobalImageCapabilitySchemaVersionResult',
    'GetComputeGlobalImageCapabilitySchemasVersionsFilterResult',
    'GetComputeImageCapabilitySchemasComputeImageCapabilitySchemaResult',
    'GetComputeImageCapabilitySchemasFilterResult',
    'GetConsoleHistoriesConsoleHistoryResult',
    'GetConsoleHistoriesFilterResult',
    'GetCpeDeviceShapeCpeDeviceInfoResult',
    'GetCpeDeviceShapeParameterResult',
    'GetCpeDeviceShapesCpeDeviceShapeResult',
    'GetCpeDeviceShapesCpeDeviceShapeCpeDeviceInfoResult',
    'GetCpeDeviceShapesFilterResult',
    'GetCpesCpeResult',
    'GetCpesFilterResult',
    'GetCrossConnectGroupMacsecPropertyResult',
    'GetCrossConnectGroupMacsecPropertyPrimaryKeyResult',
    'GetCrossConnectGroupsCrossConnectGroupResult',
    'GetCrossConnectGroupsCrossConnectGroupMacsecPropertyResult',
    'GetCrossConnectGroupsCrossConnectGroupMacsecPropertyPrimaryKeyResult',
    'GetCrossConnectGroupsFilterResult',
    'GetCrossConnectLocationsCrossConnectLocationResult',
    'GetCrossConnectLocationsFilterResult',
    'GetCrossConnectMacsecPropertyResult',
    'GetCrossConnectMacsecPropertyPrimaryKeyResult',
    'GetCrossConnectPortSpeedShapeCrossConnectPortSpeedShapeResult',
    'GetCrossConnectPortSpeedShapeFilterResult',
    'GetCrossConnectsCrossConnectResult',
    'GetCrossConnectsCrossConnectMacsecPropertyResult',
    'GetCrossConnectsCrossConnectMacsecPropertyPrimaryKeyResult',
    'GetCrossConnectsFilterResult',
    'GetDedicatedVmHostInstanceShapesDedicatedVmHostInstanceShapeResult',
    'GetDedicatedVmHostInstanceShapesFilterResult',
    'GetDedicatedVmHostInstancesDedicatedVmHostInstanceResult',
    'GetDedicatedVmHostInstancesFilterResult',
    'GetDedicatedVmHostShapesDedicatedVmHostShapeResult',
    'GetDedicatedVmHostShapesFilterResult',
    'GetDedicatedVmHostsDedicatedVmHostResult',
    'GetDedicatedVmHostsFilterResult',
    'GetDhcpOptionsFilterResult',
    'GetDhcpOptionsOptionResult',
    'GetDhcpOptionsOptionOptionResult',
    'GetDrgAttachmentsDrgAttachmentResult',
    'GetDrgAttachmentsDrgAttachmentNetworkDetailResult',
    'GetDrgAttachmentsFilterResult',
    'GetDrgRouteDistributionStatementsDrgRouteDistributionStatementResult',
    'GetDrgRouteDistributionStatementsDrgRouteDistributionStatementMatchCriteriaResult',
    'GetDrgRouteDistributionStatementsFilterResult',
    'GetDrgRouteDistributionsDrgRouteDistributionResult',
    'GetDrgRouteDistributionsFilterResult',
    'GetDrgRouteTableRouteRulesDrgRouteRuleResult',
    'GetDrgRouteTableRouteRulesFilterResult',
    'GetDrgRouteTablesDrgRouteTableResult',
    'GetDrgRouteTablesFilterResult',
    'GetDrgsDrgResult',
    'GetDrgsDrgDefaultDrgRouteTableResult',
    'GetDrgsFilterResult',
    'GetFastConnectProviderServicesFastConnectProviderServiceResult',
    'GetFastConnectProviderServicesFilterResult',
    'GetImageAgentFeatureResult',
    'GetImageImageSourceDetailResult',
    'GetImageLaunchOptionResult',
    'GetImageShapeMemoryConstraintResult',
    'GetImageShapeOcpuConstraintResult',
    'GetImageShapesFilterResult',
    'GetImageShapesImageShapeCompatibilityResult',
    'GetImageShapesImageShapeCompatibilityMemoryConstraintResult',
    'GetImageShapesImageShapeCompatibilityOcpuConstraintResult',
    'GetImagesFilterResult',
    'GetImagesImageResult',
    'GetImagesImageAgentFeatureResult',
    'GetImagesImageImageSourceDetailResult',
    'GetImagesImageLaunchOptionResult',
    'GetInstanceAgentConfigResult',
    'GetInstanceAgentConfigPluginsConfigResult',
    'GetInstanceAvailabilityConfigResult',
    'GetInstanceConfigurationInstanceDetailResult',
    'GetInstanceConfigurationInstanceDetailBlockVolumeResult',
    'GetInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult',
    'GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult',
    'GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult',
    'GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult',
    'GetInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult',
    'GetInstanceConfigurationInstanceDetailSecondaryVnicResult',
    'GetInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult',
    'GetInstanceConfigurationsFilterResult',
    'GetInstanceConfigurationsInstanceConfigurationResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicResult',
    'GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult',
    'GetInstanceConsoleConnectionsFilterResult',
    'GetInstanceConsoleConnectionsInstanceConsoleConnectionResult',
    'GetInstanceCreateVnicDetailResult',
    'GetInstanceDevicesDeviceResult',
    'GetInstanceDevicesFilterResult',
    'GetInstanceInstanceOptionResult',
    'GetInstanceLaunchOptionResult',
    'GetInstanceMeasuredBootReportMeasurementResult',
    'GetInstanceMeasuredBootReportMeasurementActualResult',
    'GetInstanceMeasuredBootReportMeasurementPolicyResult',
    'GetInstancePlatformConfigResult',
    'GetInstancePoolInstancesFilterResult',
    'GetInstancePoolInstancesInstanceResult',
    'GetInstancePoolInstancesInstanceLoadBalancerBackendResult',
    'GetInstancePoolLoadBalancerResult',
    'GetInstancePoolPlacementConfigurationResult',
    'GetInstancePoolPlacementConfigurationSecondaryVnicSubnetResult',
    'GetInstancePoolsFilterResult',
    'GetInstancePoolsInstancePoolResult',
    'GetInstancePoolsInstancePoolLoadBalancerResult',
    'GetInstancePoolsInstancePoolPlacementConfigurationResult',
    'GetInstancePoolsInstancePoolPlacementConfigurationSecondaryVnicSubnetResult',
    'GetInstancePreemptibleInstanceConfigResult',
    'GetInstancePreemptibleInstanceConfigPreemptionActionResult',
    'GetInstanceShapeConfigResult',
    'GetInstanceSourceDetailResult',
    'GetInstancesFilterResult',
    'GetInstancesInstanceResult',
    'GetInstancesInstanceAgentConfigResult',
    'GetInstancesInstanceAgentConfigPluginsConfigResult',
    'GetInstancesInstanceAvailabilityConfigResult',
    'GetInstancesInstanceCreateVnicDetailResult',
    'GetInstancesInstanceInstanceOptionResult',
    'GetInstancesInstanceLaunchOptionResult',
    'GetInstancesInstancePlatformConfigResult',
    'GetInstancesInstancePreemptibleInstanceConfigResult',
    'GetInstancesInstancePreemptibleInstanceConfigPreemptionActionResult',
    'GetInstancesInstanceShapeConfigResult',
    'GetInstancesInstanceSourceDetailResult',
    'GetInternetGatewaysFilterResult',
    'GetInternetGatewaysGatewayResult',
    'GetIpsecAlgorithmAllowedPhaseOneParameterResult',
    'GetIpsecAlgorithmAllowedPhaseTwoParameterResult',
    'GetIpsecAlgorithmDefaultPhaseOneParameterResult',
    'GetIpsecAlgorithmDefaultPhaseTwoParameterResult',
    'GetIpsecConfigFilterResult',
    'GetIpsecConfigTunnelResult',
    'GetIpsecConnectionTunnelBgpSessionInfoResult',
    'GetIpsecConnectionTunnelEncryptionDomainConfigResult',
    'GetIpsecConnectionTunnelRoutesFilterResult',
    'GetIpsecConnectionTunnelRoutesTunnelRouteResult',
    'GetIpsecConnectionTunnelsFilterResult',
    'GetIpsecConnectionTunnelsIpSecConnectionTunnelResult',
    'GetIpsecConnectionTunnelsIpSecConnectionTunnelBgpSessionInfoResult',
    'GetIpsecConnectionTunnelsIpSecConnectionTunnelEncryptionDomainConfigResult',
    'GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseOneDetailResult',
    'GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseTwoDetailResult',
    'GetIpsecConnectionsConnectionResult',
    'GetIpsecConnectionsFilterResult',
    'GetIpsecStatusFilterResult',
    'GetIpsecStatusTunnelResult',
    'GetIpv6sFilterResult',
    'GetIpv6sIpv6Result',
    'GetListingResourceVersionsAppCatalogListingResourceVersionResult',
    'GetListingResourceVersionsFilterResult',
    'GetLocalPeeringGatewaysFilterResult',
    'GetLocalPeeringGatewaysLocalPeeringGatewayResult',
    'GetNatGatewaysFilterResult',
    'GetNatGatewaysNatGatewayResult',
    'GetNetworkSecurityGroupSecurityRulesFilterResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleIcmpOptionResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionDestinationPortRangeResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionSourcePortRangeResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionDestinationPortRangeResult',
    'GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionSourcePortRangeResult',
    'GetNetworkSecurityGroupVnicsFilterResult',
    'GetNetworkSecurityGroupVnicsNetworkSecurityGroupVnicResult',
    'GetNetworkSecurityGroupsFilterResult',
    'GetNetworkSecurityGroupsNetworkSecurityGroupResult',
    'GetPeerRegionForRemotePeeringsFilterResult',
    'GetPeerRegionForRemotePeeringsPeerRegionForRemotePeeringResult',
    'GetPrivateIpsFilterResult',
    'GetPrivateIpsPrivateIpResult',
    'GetPublicIpPoolsFilterResult',
    'GetPublicIpPoolsPublicIpPoolCollectionResult',
    'GetPublicIpPoolsPublicIpPoolCollectionItemResult',
    'GetPublicIpsFilterResult',
    'GetPublicIpsPublicIpResult',
    'GetRemotePeeringConnectionsFilterResult',
    'GetRemotePeeringConnectionsRemotePeeringConnectionResult',
    'GetRouteTablesFilterResult',
    'GetRouteTablesRouteTableResult',
    'GetRouteTablesRouteTableRouteRuleResult',
    'GetSecurityListsFilterResult',
    'GetSecurityListsSecurityListResult',
    'GetSecurityListsSecurityListEgressSecurityRuleResult',
    'GetSecurityListsSecurityListEgressSecurityRuleIcmpOptionResult',
    'GetSecurityListsSecurityListEgressSecurityRuleTcpOptionResult',
    'GetSecurityListsSecurityListEgressSecurityRuleTcpOptionSourcePortRangeResult',
    'GetSecurityListsSecurityListEgressSecurityRuleUdpOptionResult',
    'GetSecurityListsSecurityListEgressSecurityRuleUdpOptionSourcePortRangeResult',
    'GetSecurityListsSecurityListIngressSecurityRuleResult',
    'GetSecurityListsSecurityListIngressSecurityRuleIcmpOptionResult',
    'GetSecurityListsSecurityListIngressSecurityRuleTcpOptionResult',
    'GetSecurityListsSecurityListIngressSecurityRuleTcpOptionSourcePortRangeResult',
    'GetSecurityListsSecurityListIngressSecurityRuleUdpOptionResult',
    'GetSecurityListsSecurityListIngressSecurityRuleUdpOptionSourcePortRangeResult',
    'GetServiceGatewaysFilterResult',
    'GetServiceGatewaysServiceGatewayResult',
    'GetServiceGatewaysServiceGatewayServiceResult',
    'GetServicesFilterResult',
    'GetServicesServiceResult',
    'GetShapeFilterResult',
    'GetShapeShapeResult',
    'GetShapeShapeMaxVnicAttachmentOptionResult',
    'GetShapeShapeMemoryOptionResult',
    'GetShapeShapeNetworkingBandwidthOptionResult',
    'GetShapeShapeOcpuOptionResult',
    'GetShapeShapePlatformConfigOptionResult',
    'GetShapeShapePlatformConfigOptionAccessControlServiceOptionResult',
    'GetShapeShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult',
    'GetShapeShapePlatformConfigOptionMeasuredBootOptionResult',
    'GetShapeShapePlatformConfigOptionMemoryEncryptionOptionResult',
    'GetShapeShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult',
    'GetShapeShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult',
    'GetShapeShapePlatformConfigOptionSecureBootOptionResult',
    'GetShapeShapePlatformConfigOptionSymmetricMultiThreadingOptionResult',
    'GetShapeShapePlatformConfigOptionTrustedPlatformModuleOptionResult',
    'GetShapeShapePlatformConfigOptionVirtualInstructionsOptionResult',
    'GetShapeShapeRecommendedAlternativeResult',
    'GetShapesFilterResult',
    'GetShapesShapeResult',
    'GetShapesShapeMaxVnicAttachmentOptionResult',
    'GetShapesShapeMemoryOptionResult',
    'GetShapesShapeNetworkingBandwidthOptionResult',
    'GetShapesShapeOcpuOptionResult',
    'GetShapesShapePlatformConfigOptionResult',
    'GetShapesShapePlatformConfigOptionAccessControlServiceOptionResult',
    'GetShapesShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult',
    'GetShapesShapePlatformConfigOptionMeasuredBootOptionResult',
    'GetShapesShapePlatformConfigOptionMemoryEncryptionOptionResult',
    'GetShapesShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult',
    'GetShapesShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult',
    'GetShapesShapePlatformConfigOptionSecureBootOptionResult',
    'GetShapesShapePlatformConfigOptionSymmetricMultiThreadingOptionResult',
    'GetShapesShapePlatformConfigOptionTrustedPlatformModuleOptionResult',
    'GetShapesShapePlatformConfigOptionVirtualInstructionsOptionResult',
    'GetShapesShapeRecommendedAlternativeResult',
    'GetSubnetsFilterResult',
    'GetSubnetsSubnetResult',
    'GetTunnelSecurityAssociationsFilterResult',
    'GetTunnelSecurityAssociationsTunnelSecurityAssociationResult',
    'GetVcnByoipv6cidrDetailResult',
    'GetVcnsFilterResult',
    'GetVcnsVirtualNetworkResult',
    'GetVcnsVirtualNetworkByoipv6cidrDetailResult',
    'GetVirtualCircuitBandwidthShapesFilterResult',
    'GetVirtualCircuitBandwidthShapesVirtualCircuitBandwidthShapeResult',
    'GetVirtualCircuitCrossConnectMappingResult',
    'GetVirtualCircuitPublicPrefixResult',
    'GetVirtualCircuitPublicPrefixesFilterResult',
    'GetVirtualCircuitPublicPrefixesVirtualCircuitPublicPrefixResult',
    'GetVirtualCircuitsFilterResult',
    'GetVirtualCircuitsVirtualCircuitResult',
    'GetVirtualCircuitsVirtualCircuitCrossConnectMappingResult',
    'GetVirtualCircuitsVirtualCircuitPublicPrefixResult',
    'GetVirtualNetworksFilterResult',
    'GetVirtualNetworksVirtualNetworkResult',
    'GetVirtualNetworksVirtualNetworkByoipv6cidrDetailResult',
    'GetVlansFilterResult',
    'GetVlansVlanResult',
    'GetVnicAttachmentsFilterResult',
    'GetVnicAttachmentsVnicAttachmentResult',
    'GetVnicAttachmentsVnicAttachmentCreateVnicDetailResult',
    'GetVolumeAttachmentsFilterResult',
    'GetVolumeAttachmentsVolumeAttachmentResult',
    'GetVolumeAttachmentsVolumeAttachmentMultipathDeviceResult',
    'GetVolumeAutotunePolicyResult',
    'GetVolumeBackupPoliciesFilterResult',
    'GetVolumeBackupPoliciesVolumeBackupPolicyResult',
    'GetVolumeBackupPoliciesVolumeBackupPolicyScheduleResult',
    'GetVolumeBackupPolicyAssignmentsFilterResult',
    'GetVolumeBackupPolicyAssignmentsVolumeBackupPolicyAssignmentResult',
    'GetVolumeBackupsFilterResult',
    'GetVolumeBackupsVolumeBackupResult',
    'GetVolumeBackupsVolumeBackupSourceDetailResult',
    'GetVolumeBlockVolumeReplicaResult',
    'GetVolumeGroupBackupsFilterResult',
    'GetVolumeGroupBackupsVolumeGroupBackupResult',
    'GetVolumeGroupBackupsVolumeGroupBackupSourceDetailResult',
    'GetVolumeGroupReplicaMemberReplicaResult',
    'GetVolumeGroupReplicasFilterResult',
    'GetVolumeGroupReplicasVolumeGroupReplicaResult',
    'GetVolumeGroupReplicasVolumeGroupReplicaMemberReplicaResult',
    'GetVolumeGroupsFilterResult',
    'GetVolumeGroupsVolumeGroupResult',
    'GetVolumeGroupsVolumeGroupSourceDetailResult',
    'GetVolumeGroupsVolumeGroupVolumeGroupReplicaResult',
    'GetVolumeSourceDetailResult',
    'GetVolumesFilterResult',
    'GetVolumesVolumeResult',
    'GetVolumesVolumeAutotunePolicyResult',
    'GetVolumesVolumeBlockVolumeReplicaResult',
    'GetVolumesVolumeSourceDetailResult',
    'GetVtapsFilterResult',
    'GetVtapsVtapResult',
]

@pulumi.output_type
class BootVolumeAutotunePolicy(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autotuneType":
            suggest = "autotune_type"
        elif key == "maxVpusPerGb":
            suggest = "max_vpus_per_gb"

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

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

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

    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: Optional[str] = None):
        """
        :param str autotune_type: (Updatable) This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: (Updatable) This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        if max_vpus_per_gb is not None:
            pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        (Updatable) This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> Optional[str]:
        """
        (Updatable) This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class BootVolumeBackupSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeBackupId":
            suggest = "boot_volume_backup_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"

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

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

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

    def __init__(__self__, *,
                 boot_volume_backup_id: str,
                 region: str,
                 kms_key_id: Optional[str] = None):
        """
        :param str region: The region of the volume backup source.
        :param str kms_key_id: The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        pulumi.set(__self__, "boot_volume_backup_id", boot_volume_backup_id)
        pulumi.set(__self__, "region", region)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

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

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of the volume backup source.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        return pulumi.get(self, "kms_key_id")


@pulumi.output_type
class BootVolumeBootVolumeReplica(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "bootVolumeReplicaId":
            suggest = "boot_volume_replica_id"
        elif key == "displayName":
            suggest = "display_name"

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

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

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

    def __init__(__self__, *,
                 availability_domain: str,
                 boot_volume_replica_id: Optional[str] = None,
                 display_name: Optional[str] = None):
        """
        :param str availability_domain: (Updatable) The availability domain of the boot volume replica.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_replica_id: The boot volume replica's Oracle ID (OCID).
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        if boot_volume_replica_id is not None:
            pulumi.set(__self__, "boot_volume_replica_id", boot_volume_replica_id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)

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

    @property
    @pulumi.getter(name="bootVolumeReplicaId")
    def boot_volume_replica_id(self) -> Optional[str]:
        """
        The boot volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "boot_volume_replica_id")

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


@pulumi.output_type
class BootVolumeSourceDetails(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the boot volume replica.
        :param str type: The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "trafficDirection":
            suggest = "traffic_direction"
        elif key == "destinationCidr":
            suggest = "destination_cidr"
        elif key == "icmpOptions":
            suggest = "icmp_options"
        elif key == "ruleAction":
            suggest = "rule_action"
        elif key == "sourceCidr":
            suggest = "source_cidr"
        elif key == "tcpOptions":
            suggest = "tcp_options"
        elif key == "udpOptions":
            suggest = "udp_options"

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

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

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

    def __init__(__self__, *,
                 traffic_direction: str,
                 destination_cidr: Optional[str] = None,
                 icmp_options: Optional['outputs.CaptureFilterVtapCaptureFilterRuleIcmpOptions'] = None,
                 protocol: Optional[str] = None,
                 rule_action: Optional[str] = None,
                 source_cidr: Optional[str] = None,
                 tcp_options: Optional['outputs.CaptureFilterVtapCaptureFilterRuleTcpOptions'] = None,
                 udp_options: Optional['outputs.CaptureFilterVtapCaptureFilterRuleUdpOptions'] = None):
        """
        :param str traffic_direction: (Updatable) The traffic direction the VTAP is configured to mirror.
        :param str destination_cidr: (Updatable) Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        :param 'CaptureFilterVtapCaptureFilterRuleIcmpOptionsArgs' icmp_options: (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
               
               If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        :param str protocol: (Updatable) The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
               * 1 = ICMP
               * 6 = TCP
               * 17 = UDP
        :param str rule_action: (Updatable) Include or exclude packets meeting this definition from mirrored traffic.
        :param str source_cidr: (Updatable) Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        :param 'CaptureFilterVtapCaptureFilterRuleTcpOptionsArgs' tcp_options: (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param 'CaptureFilterVtapCaptureFilterRuleUdpOptionsArgs' udp_options: (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "traffic_direction", traffic_direction)
        if destination_cidr is not None:
            pulumi.set(__self__, "destination_cidr", destination_cidr)
        if icmp_options is not None:
            pulumi.set(__self__, "icmp_options", icmp_options)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if rule_action is not None:
            pulumi.set(__self__, "rule_action", rule_action)
        if source_cidr is not None:
            pulumi.set(__self__, "source_cidr", source_cidr)
        if tcp_options is not None:
            pulumi.set(__self__, "tcp_options", tcp_options)
        if udp_options is not None:
            pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter(name="trafficDirection")
    def traffic_direction(self) -> str:
        """
        (Updatable) The traffic direction the VTAP is configured to mirror.
        """
        return pulumi.get(self, "traffic_direction")

    @property
    @pulumi.getter(name="destinationCidr")
    def destination_cidr(self) -> Optional[str]:
        """
        (Updatable) Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "destination_cidr")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Optional['outputs.CaptureFilterVtapCaptureFilterRuleIcmpOptions']:
        """
        (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)

        If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def protocol(self) -> Optional[str]:
        """
        (Updatable) The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
        * 1 = ICMP
        * 6 = TCP
        * 17 = UDP
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="ruleAction")
    def rule_action(self) -> Optional[str]:
        """
        (Updatable) Include or exclude packets meeting this definition from mirrored traffic.
        """
        return pulumi.get(self, "rule_action")

    @property
    @pulumi.getter(name="sourceCidr")
    def source_cidr(self) -> Optional[str]:
        """
        (Updatable) Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "source_cidr")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Optional['outputs.CaptureFilterVtapCaptureFilterRuleTcpOptions']:
        """
        (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Optional['outputs.CaptureFilterVtapCaptureFilterRuleUdpOptions']:
        """
        (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        """
        :param int type: (Updatable) The ICMP type.
        :param int code: (Updatable) The ICMP code (optional).
        """
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        (Updatable) The ICMP type.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def code(self) -> Optional[int]:
        """
        (Updatable) The ICMP code (optional).
        """
        return pulumi.get(self, "code")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationPortRange":
            suggest = "destination_port_range"
        elif key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 destination_port_range: Optional['outputs.CaptureFilterVtapCaptureFilterRuleTcpOptionsDestinationPortRange'] = None,
                 source_port_range: Optional['outputs.CaptureFilterVtapCaptureFilterRuleTcpOptionsSourcePortRange'] = None):
        """
        :param 'CaptureFilterVtapCaptureFilterRuleTcpOptionsDestinationPortRangeArgs' destination_port_range: (Updatable)
        :param 'CaptureFilterVtapCaptureFilterRuleTcpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if destination_port_range is not None:
            pulumi.set(__self__, "destination_port_range", destination_port_range)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleTcpOptionsDestinationPortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationPortRange":
            suggest = "destination_port_range"
        elif key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 destination_port_range: Optional['outputs.CaptureFilterVtapCaptureFilterRuleUdpOptionsDestinationPortRange'] = None,
                 source_port_range: Optional['outputs.CaptureFilterVtapCaptureFilterRuleUdpOptionsSourcePortRange'] = None):
        """
        :param 'CaptureFilterVtapCaptureFilterRuleUdpOptionsDestinationPortRangeArgs' destination_port_range: (Updatable)
        :param 'CaptureFilterVtapCaptureFilterRuleUdpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if destination_port_range is not None:
            pulumi.set(__self__, "destination_port_range", destination_port_range)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleUdpOptionsDestinationPortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class CaptureFilterVtapCaptureFilterRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class ClusterNetworkInstancePool(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceConfigurationId":
            suggest = "instance_configuration_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "loadBalancers":
            suggest = "load_balancers"
        elif key == "placementConfigurations":
            suggest = "placement_configurations"
        elif key == "timeCreated":
            suggest = "time_created"

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

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

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

    def __init__(__self__, *,
                 instance_configuration_id: str,
                 size: int,
                 compartment_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 id: Optional[str] = None,
                 load_balancers: Optional[Sequence['outputs.ClusterNetworkInstancePoolLoadBalancer']] = None,
                 placement_configurations: Optional[Sequence['outputs.ClusterNetworkInstancePoolPlacementConfiguration']] = None,
                 state: Optional[str] = None,
                 time_created: Optional[str] = None):
        """
        :param str instance_configuration_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        :param int size: (Updatable) The number of instances that should be in the instance pool.
        :param str compartment_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the instance pool.
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param Mapping[str, Any] freeform_tags: (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param Sequence['ClusterNetworkInstancePoolLoadBalancerArgs'] load_balancers: The load balancers attached to the instance pool.
        :param Sequence['ClusterNetworkInstancePoolPlacementConfigurationArgs'] placement_configurations: The placement configurations for the instance pool.
        :param str state: The current state of the cluster network.
        :param str time_created: The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "size", size)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_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 freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if load_balancers is not None:
            pulumi.set(__self__, "load_balancers", load_balancers)
        if placement_configurations is not None:
            pulumi.set(__self__, "placement_configurations", placement_configurations)
        if state is not None:
            pulumi.set(__self__, "state", state)
        if time_created is not None:
            pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        (Updatable) The number of instances that should be in the instance pool.
        """
        return pulumi.get(self, "size")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the instance pool.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Optional[Sequence['outputs.ClusterNetworkInstancePoolLoadBalancer']]:
        """
        The load balancers attached to the instance pool.
        """
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter(name="placementConfigurations")
    def placement_configurations(self) -> Optional[Sequence['outputs.ClusterNetworkInstancePoolPlacementConfiguration']]:
        """
        The placement configurations for the instance pool.
        """
        return pulumi.get(self, "placement_configurations")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> Optional[str]:
        """
        The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class ClusterNetworkInstancePoolLoadBalancer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendSetName":
            suggest = "backend_set_name"
        elif key == "instancePoolId":
            suggest = "instance_pool_id"
        elif key == "loadBalancerId":
            suggest = "load_balancer_id"
        elif key == "vnicSelection":
            suggest = "vnic_selection"

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

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

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

    def __init__(__self__, *,
                 backend_set_name: Optional[str] = None,
                 id: Optional[str] = None,
                 instance_pool_id: Optional[str] = None,
                 load_balancer_id: Optional[str] = None,
                 port: Optional[int] = None,
                 state: Optional[str] = None,
                 vnic_selection: Optional[str] = None):
        """
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        :param int port: The port value used for the backends.
        :param str state: The current state of the cluster network.
        :param str vnic_selection: Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        if backend_set_name is not None:
            pulumi.set(__self__, "backend_set_name", backend_set_name)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if instance_pool_id is not None:
            pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        if load_balancer_id is not None:
            pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if state is not None:
            pulumi.set(__self__, "state", state)
        if vnic_selection is not None:
            pulumi.set(__self__, "vnic_selection", vnic_selection)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> Optional[str]:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

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

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> Optional[int]:
        """
        The port value used for the backends.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> Optional[str]:
        """
        Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")


@pulumi.output_type
class ClusterNetworkInstancePoolPlacementConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "faultDomains":
            suggest = "fault_domains"
        elif key == "primarySubnetId":
            suggest = "primary_subnet_id"
        elif key == "secondaryVnicSubnets":
            suggest = "secondary_vnic_subnets"

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

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

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

    def __init__(__self__, *,
                 availability_domain: Optional[str] = None,
                 fault_domains: Optional[Sequence[str]] = None,
                 primary_subnet_id: Optional[str] = None,
                 secondary_vnic_subnets: Optional[Sequence['outputs.ClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnet']] = None):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param Sequence[str] fault_domains: The fault domains to place instances.
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['ClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if fault_domains is not None:
            pulumi.set(__self__, "fault_domains", fault_domains)
        if primary_subnet_id is not None:
            pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        if secondary_vnic_subnets is not None:
            pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

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

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Optional[Sequence[str]]:
        """
        The fault domains to place instances.
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Optional[Sequence['outputs.ClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnet']]:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class ClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnet(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "displayName":
            suggest = "display_name"
        elif key == "subnetId":
            suggest = "subnet_id"

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

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

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

    def __init__(__self__, *,
                 display_name: Optional[str] = None,
                 subnet_id: Optional[str] = None):
        """
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
               
               
               ** 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 display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.


        ** 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, "subnet_id")


@pulumi.output_type
class ClusterNetworkPlacementConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "primarySubnetId":
            suggest = "primary_subnet_id"
        elif key == "secondaryVnicSubnets":
            suggest = "secondary_vnic_subnets"

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

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

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

    def __init__(__self__, *,
                 availability_domain: str,
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Optional[Sequence['outputs.ClusterNetworkPlacementConfigurationSecondaryVnicSubnet']] = None):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['ClusterNetworkPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        if secondary_vnic_subnets is not None:
            pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Optional[Sequence['outputs.ClusterNetworkPlacementConfigurationSecondaryVnicSubnet']]:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class ClusterNetworkPlacementConfigurationSecondaryVnicSubnet(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "subnetId":
            suggest = "subnet_id"
        elif key == "displayName":
            suggest = "display_name"

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

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

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

    def __init__(__self__, *,
                 subnet_id: str,
                 display_name: Optional[str] = None):
        """
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        pulumi.set(__self__, "subnet_id", subnet_id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.


        ** 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, "subnet_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")


@pulumi.output_type
class ComputeCapacityReservationInstanceReservationConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceShape":
            suggest = "instance_shape"
        elif key == "reservedCount":
            suggest = "reserved_count"
        elif key == "clusterConfig":
            suggest = "cluster_config"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "instanceShapeConfig":
            suggest = "instance_shape_config"
        elif key == "usedCount":
            suggest = "used_count"

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

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

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

    def __init__(__self__, *,
                 instance_shape: str,
                 reserved_count: str,
                 cluster_config: Optional['outputs.ComputeCapacityReservationInstanceReservationConfigClusterConfig'] = None,
                 fault_domain: Optional[str] = None,
                 instance_shape_config: Optional['outputs.ComputeCapacityReservationInstanceReservationConfigInstanceShapeConfig'] = None,
                 used_count: Optional[str] = None):
        """
        :param str instance_shape: (Updatable) The shape requested when launching instances using reserved capacity. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        :param str reserved_count: (Updatable) The total number of instances that can be launched from the capacity configuration.
        :param 'ComputeCapacityReservationInstanceReservationConfigClusterConfigArgs' cluster_config: (Updatable) The HPC cluster configuration requested when launching instances in a compute capacity reservation.
               
               If the parameter is provided, the reservation is created with the HPC island and a list of HPC blocks that you specify. If a list of HPC blocks are missing or not provided, the reservation is created with any HPC blocks in the HPC island that you specify. If the values of HPC island or HPC block that you provide are not valid, an error is returned.
        :param str fault_domain: (Updatable) The fault domain to use for instances created using this capacity configuration. For more information, see [Fault Domains](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm#fault). If you do not specify the fault domain, the capacity is available for an instance that does not specify a fault domain. To change the fault domain for a reservation, delete the reservation and create a new one in the preferred fault domain.
               
               To retrieve a list of fault domains, use the `ListFaultDomains` operation in the [Identity and Access Management Service API](https://www.terraform.io/iaas/api/#/en/identity/20160918/).
               
               Example: `FAULT-DOMAIN-1`
        :param 'ComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigArgs' instance_shape_config: (Updatable) The shape configuration requested when launching instances in a compute capacity reservation.
               
               If the parameter is provided, the reservation is created with the resources that you specify. If some properties are missing or the parameter is not provided, the reservation 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.
               
               For more information about customizing the resources that are allocated to flexible shapes, see [Flexible Shapes](https://docs.cloud.oracle.com/iaas/Content/Compute/References/computeshapes.htm#flexible).
        :param str used_count: The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        pulumi.set(__self__, "instance_shape", instance_shape)
        pulumi.set(__self__, "reserved_count", reserved_count)
        if cluster_config is not None:
            pulumi.set(__self__, "cluster_config", cluster_config)
        if fault_domain is not None:
            pulumi.set(__self__, "fault_domain", fault_domain)
        if instance_shape_config is not None:
            pulumi.set(__self__, "instance_shape_config", instance_shape_config)
        if used_count is not None:
            pulumi.set(__self__, "used_count", used_count)

    @property
    @pulumi.getter(name="instanceShape")
    def instance_shape(self) -> str:
        """
        (Updatable) The shape requested when launching instances using reserved capacity. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        """
        return pulumi.get(self, "instance_shape")

    @property
    @pulumi.getter(name="reservedCount")
    def reserved_count(self) -> str:
        """
        (Updatable) The total number of instances that can be launched from the capacity configuration.
        """
        return pulumi.get(self, "reserved_count")

    @property
    @pulumi.getter(name="clusterConfig")
    def cluster_config(self) -> Optional['outputs.ComputeCapacityReservationInstanceReservationConfigClusterConfig']:
        """
        (Updatable) The HPC cluster configuration requested when launching instances in a compute capacity reservation.

        If the parameter is provided, the reservation is created with the HPC island and a list of HPC blocks that you specify. If a list of HPC blocks are missing or not provided, the reservation is created with any HPC blocks in the HPC island that you specify. If the values of HPC island or HPC block that you provide are not valid, an error is returned.
        """
        return pulumi.get(self, "cluster_config")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> Optional[str]:
        """
        (Updatable) The fault domain to use for instances created using this capacity configuration. For more information, see [Fault Domains](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm#fault). If you do not specify the fault domain, the capacity is available for an instance that does not specify a fault domain. To change the fault domain for a reservation, delete the reservation and create a new one in the preferred fault domain.

        To retrieve a list of fault domains, use the `ListFaultDomains` operation in the [Identity and Access Management Service API](https://www.terraform.io/iaas/api/#/en/identity/20160918/).

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

    @property
    @pulumi.getter(name="instanceShapeConfig")
    def instance_shape_config(self) -> Optional['outputs.ComputeCapacityReservationInstanceReservationConfigInstanceShapeConfig']:
        """
        (Updatable) The shape configuration requested when launching instances in a compute capacity reservation.

        If the parameter is provided, the reservation is created with the resources that you specify. If some properties are missing or the parameter is not provided, the reservation 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.

        For more information about customizing the resources that are allocated to flexible shapes, see [Flexible Shapes](https://docs.cloud.oracle.com/iaas/Content/Compute/References/computeshapes.htm#flexible).
        """
        return pulumi.get(self, "instance_shape_config")

    @property
    @pulumi.getter(name="usedCount")
    def used_count(self) -> Optional[str]:
        """
        The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        return pulumi.get(self, "used_count")


@pulumi.output_type
class ComputeCapacityReservationInstanceReservationConfigClusterConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "hpcIslandId":
            suggest = "hpc_island_id"
        elif key == "networkBlockIds":
            suggest = "network_block_ids"

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

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

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

    def __init__(__self__, *,
                 hpc_island_id: str,
                 network_block_ids: Optional[Sequence[str]] = None):
        """
        :param str hpc_island_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the HpcIsland.
        :param Sequence[str] network_block_ids: (Updatable) The list of OCID of the network blocks.
        """
        pulumi.set(__self__, "hpc_island_id", hpc_island_id)
        if network_block_ids is not None:
            pulumi.set(__self__, "network_block_ids", network_block_ids)

    @property
    @pulumi.getter(name="hpcIslandId")
    def hpc_island_id(self) -> str:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the HpcIsland.
        """
        return pulumi.get(self, "hpc_island_id")

    @property
    @pulumi.getter(name="networkBlockIds")
    def network_block_ids(self) -> Optional[Sequence[str]]:
        """
        (Updatable) The list of OCID of the network blocks.
        """
        return pulumi.get(self, "network_block_ids")


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

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

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

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

    def __init__(__self__, *,
                 memory_in_gbs: Optional[float] = None,
                 ocpus: Optional[float] = None):
        """
        :param float memory_in_gbs: (Updatable) The total amount of memory available to the instance, in gigabytes.
        :param float ocpus: (Updatable) The total number of OCPUs available to the instance.
        """
        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="memoryInGbs")
    def memory_in_gbs(self) -> Optional[float]:
        """
        (Updatable) The total amount of memory available to the instance, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

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


@pulumi.output_type
class CrossConnectGroupMacsecProperties(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "encryptionCipher":
            suggest = "encryption_cipher"
        elif key == "primaryKey":
            suggest = "primary_key"

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

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

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

    def __init__(__self__, *,
                 state: str,
                 encryption_cipher: Optional[str] = None,
                 primary_key: Optional['outputs.CrossConnectGroupMacsecPropertiesPrimaryKey'] = None):
        """
        :param str state: The cross-connect group's current state.
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param 'CrossConnectGroupMacsecPropertiesPrimaryKeyArgs' primary_key: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        pulumi.set(__self__, "state", state)
        if encryption_cipher is not None:
            pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        if primary_key is not None:
            pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The cross-connect group's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> Optional[str]:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> Optional['outputs.CrossConnectGroupMacsecPropertiesPrimaryKey']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_key")


@pulumi.output_type
class CrossConnectGroupMacsecPropertiesPrimaryKey(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectivityAssociationKeySecretId":
            suggest = "connectivity_association_key_secret_id"
        elif key == "connectivityAssociationNameSecretId":
            suggest = "connectivity_association_name_secret_id"
        elif key == "connectivityAssociationKeySecretVersion":
            suggest = "connectivity_association_key_secret_version"
        elif key == "connectivityAssociationNameSecretVersion":
            suggest = "connectivity_association_name_secret_version"

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

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

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

    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_key_secret_version: Optional[str] = None,
                 connectivity_association_name_secret_version: Optional[str] = None):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        if connectivity_association_key_secret_version is not None:
            pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        if connectivity_association_name_secret_version is not None:
            pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> Optional[str]:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> Optional[str]:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


@pulumi.output_type
class CrossConnectMacsecProperties(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "encryptionCipher":
            suggest = "encryption_cipher"
        elif key == "primaryKey":
            suggest = "primary_key"

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

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

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

    def __init__(__self__, *,
                 state: str,
                 encryption_cipher: Optional[str] = None,
                 primary_key: Optional['outputs.CrossConnectMacsecPropertiesPrimaryKey'] = None):
        """
        :param str state: The cross-connect's current state.
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param 'CrossConnectMacsecPropertiesPrimaryKeyArgs' primary_key: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        pulumi.set(__self__, "state", state)
        if encryption_cipher is not None:
            pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        if primary_key is not None:
            pulumi.set(__self__, "primary_key", primary_key)

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The cross-connect's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> Optional[str]:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKey")
    def primary_key(self) -> Optional['outputs.CrossConnectMacsecPropertiesPrimaryKey']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_key")


@pulumi.output_type
class CrossConnectMacsecPropertiesPrimaryKey(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "connectivityAssociationKeySecretId":
            suggest = "connectivity_association_key_secret_id"
        elif key == "connectivityAssociationNameSecretId":
            suggest = "connectivity_association_name_secret_id"
        elif key == "connectivityAssociationKeySecretVersion":
            suggest = "connectivity_association_key_secret_version"
        elif key == "connectivityAssociationNameSecretVersion":
            suggest = "connectivity_association_name_secret_version"

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

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

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

    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_key_secret_version: Optional[str] = None,
                 connectivity_association_name_secret_version: Optional[str] = None):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        if connectivity_association_key_secret_version is not None:
            pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        if connectivity_association_name_secret_version is not None:
            pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> Optional[str]:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> Optional[str]:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


@pulumi.output_type
class DefaultDhcpOptionsOption(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customDnsServers":
            suggest = "custom_dns_servers"
        elif key == "searchDomainNames":
            suggest = "search_domain_names"
        elif key == "serverType":
            suggest = "server_type"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 custom_dns_servers: Optional[Sequence[str]] = None,
                 search_domain_names: Optional[Sequence[str]] = None,
                 server_type: Optional[str] = None):
        pulumi.set(__self__, "type", type)
        if custom_dns_servers is not None:
            pulumi.set(__self__, "custom_dns_servers", custom_dns_servers)
        if search_domain_names is not None:
            pulumi.set(__self__, "search_domain_names", search_domain_names)
        if server_type is not None:
            pulumi.set(__self__, "server_type", server_type)

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

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

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

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


@pulumi.output_type
class DefaultRouteTableRouteRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "networkEntityId":
            suggest = "network_entity_id"
        elif key == "cidrBlock":
            suggest = "cidr_block"
        elif key == "destinationType":
            suggest = "destination_type"
        elif key == "routeType":
            suggest = "route_type"

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

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

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

    def __init__(__self__, *,
                 network_entity_id: str,
                 cidr_block: Optional[str] = None,
                 description: Optional[str] = None,
                 destination: Optional[str] = None,
                 destination_type: Optional[str] = None,
                 route_type: Optional[str] = None):
        pulumi.set(__self__, "network_entity_id", network_entity_id)
        if cidr_block is not None:
            pulumi.set(__self__, "cidr_block", cidr_block)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination is not None:
            pulumi.set(__self__, "destination", destination)
        if destination_type is not None:
            pulumi.set(__self__, "destination_type", destination_type)
        if route_type is not None:
            pulumi.set(__self__, "route_type", route_type)

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

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

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

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

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

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


@pulumi.output_type
class DefaultSecurityListEgressSecurityRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationType":
            suggest = "destination_type"
        elif key == "icmpOptions":
            suggest = "icmp_options"
        elif key == "tcpOptions":
            suggest = "tcp_options"
        elif key == "udpOptions":
            suggest = "udp_options"

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

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

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

    def __init__(__self__, *,
                 destination: str,
                 protocol: str,
                 description: Optional[str] = None,
                 destination_type: Optional[str] = None,
                 icmp_options: Optional['outputs.DefaultSecurityListEgressSecurityRuleIcmpOptions'] = None,
                 stateless: Optional[bool] = None,
                 tcp_options: Optional['outputs.DefaultSecurityListEgressSecurityRuleTcpOptions'] = None,
                 udp_options: Optional['outputs.DefaultSecurityListEgressSecurityRuleUdpOptions'] = None):
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_type is not None:
            pulumi.set(__self__, "destination_type", destination_type)
        if icmp_options is not None:
            pulumi.set(__self__, "icmp_options", icmp_options)
        if stateless is not None:
            pulumi.set(__self__, "stateless", stateless)
        if tcp_options is not None:
            pulumi.set(__self__, "tcp_options", tcp_options)
        if udp_options is not None:
            pulumi.set(__self__, "udp_options", udp_options)

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

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

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

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

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Optional['outputs.DefaultSecurityListEgressSecurityRuleIcmpOptions']:
        return pulumi.get(self, "icmp_options")

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

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Optional['outputs.DefaultSecurityListEgressSecurityRuleTcpOptions']:
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Optional['outputs.DefaultSecurityListEgressSecurityRuleUdpOptions']:
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class DefaultSecurityListEgressSecurityRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

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

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


@pulumi.output_type
class DefaultSecurityListEgressSecurityRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.DefaultSecurityListEgressSecurityRuleTcpOptionsSourcePortRange'] = None):
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.DefaultSecurityListEgressSecurityRuleTcpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class DefaultSecurityListEgressSecurityRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

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

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


@pulumi.output_type
class DefaultSecurityListEgressSecurityRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.DefaultSecurityListEgressSecurityRuleUdpOptionsSourcePortRange'] = None):
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.DefaultSecurityListEgressSecurityRuleUdpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class DefaultSecurityListEgressSecurityRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

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

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


@pulumi.output_type
class DefaultSecurityListIngressSecurityRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "icmpOptions":
            suggest = "icmp_options"
        elif key == "sourceType":
            suggest = "source_type"
        elif key == "tcpOptions":
            suggest = "tcp_options"
        elif key == "udpOptions":
            suggest = "udp_options"

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

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

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

    def __init__(__self__, *,
                 protocol: str,
                 source: str,
                 description: Optional[str] = None,
                 icmp_options: Optional['outputs.DefaultSecurityListIngressSecurityRuleIcmpOptions'] = None,
                 source_type: Optional[str] = None,
                 stateless: Optional[bool] = None,
                 tcp_options: Optional['outputs.DefaultSecurityListIngressSecurityRuleTcpOptions'] = None,
                 udp_options: Optional['outputs.DefaultSecurityListIngressSecurityRuleUdpOptions'] = None):
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "source", source)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if icmp_options is not None:
            pulumi.set(__self__, "icmp_options", icmp_options)
        if source_type is not None:
            pulumi.set(__self__, "source_type", source_type)
        if stateless is not None:
            pulumi.set(__self__, "stateless", stateless)
        if tcp_options is not None:
            pulumi.set(__self__, "tcp_options", tcp_options)
        if udp_options is not None:
            pulumi.set(__self__, "udp_options", udp_options)

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

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

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

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Optional['outputs.DefaultSecurityListIngressSecurityRuleIcmpOptions']:
        return pulumi.get(self, "icmp_options")

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

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

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Optional['outputs.DefaultSecurityListIngressSecurityRuleTcpOptions']:
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Optional['outputs.DefaultSecurityListIngressSecurityRuleUdpOptions']:
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class DefaultSecurityListIngressSecurityRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

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

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


@pulumi.output_type
class DefaultSecurityListIngressSecurityRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.DefaultSecurityListIngressSecurityRuleTcpOptionsSourcePortRange'] = None):
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.DefaultSecurityListIngressSecurityRuleTcpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class DefaultSecurityListIngressSecurityRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

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

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


@pulumi.output_type
class DefaultSecurityListIngressSecurityRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.DefaultSecurityListIngressSecurityRuleUdpOptionsSourcePortRange'] = None):
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

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

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

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.DefaultSecurityListIngressSecurityRuleUdpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class DefaultSecurityListIngressSecurityRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

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

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


@pulumi.output_type
class DhcpOptionsOption(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customDnsServers":
            suggest = "custom_dns_servers"
        elif key == "searchDomainNames":
            suggest = "search_domain_names"
        elif key == "serverType":
            suggest = "server_type"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 custom_dns_servers: Optional[Sequence[str]] = None,
                 search_domain_names: Optional[Sequence[str]] = None,
                 server_type: Optional[str] = None):
        """
        :param str type: (Updatable) The specific DHCP option. Either `DomainNameServer` (for [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/)) or `SearchDomain` (for [DhcpSearchDomainOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpSearchDomainOption/)).
        :param Sequence[str] custom_dns_servers: (Updatable) If you set `serverType` to `CustomDnsServer`, specify the IP address of at least one DNS server of your choice (three maximum).
        :param Sequence[str] search_domain_names: (Updatable) A single search domain name according to [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). During a DNS query, the OS will append this search domain name to the value being queried.
               
               If you set [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/) to `VcnLocalPlusInternet`, and you assign a DNS label to the VCN during creation, the search domain name in the VCN's default set of DHCP options is automatically set to the VCN domain (for example, `vcn1.oraclevcn.com`).
               
               If you don't want to use a search domain name, omit this option from the set of DHCP options. Do not include this option with an empty list of search domain names, or with an empty string as the value for any search domain name.
        :param str server_type: (Updatable) 
               * **VcnLocal:** Reserved for future use.
               * **VcnLocalPlusInternet:** Also referred to as "Internet and VCN Resolver". Instances can resolve internet hostnames (no internet gateway is required), and can resolve hostnames of instances in the VCN. This is the default value in the default set of DHCP options in the VCN. For the Internet and VCN Resolver to work across the VCN, there must also be a DNS label set for the VCN, a DNS label set for each subnet, and a hostname for each instance. The Internet and VCN Resolver also enables reverse DNS lookup, which lets you determine the hostname corresponding to the private IP address. For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).
               * **CustomDnsServer:** Instances use a DNS server of your choice (three maximum).
        """
        pulumi.set(__self__, "type", type)
        if custom_dns_servers is not None:
            pulumi.set(__self__, "custom_dns_servers", custom_dns_servers)
        if search_domain_names is not None:
            pulumi.set(__self__, "search_domain_names", search_domain_names)
        if server_type is not None:
            pulumi.set(__self__, "server_type", server_type)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Updatable) The specific DHCP option. Either `DomainNameServer` (for [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/)) or `SearchDomain` (for [DhcpSearchDomainOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpSearchDomainOption/)).
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="customDnsServers")
    def custom_dns_servers(self) -> Optional[Sequence[str]]:
        """
        (Updatable) If you set `serverType` to `CustomDnsServer`, specify the IP address of at least one DNS server of your choice (three maximum).
        """
        return pulumi.get(self, "custom_dns_servers")

    @property
    @pulumi.getter(name="searchDomainNames")
    def search_domain_names(self) -> Optional[Sequence[str]]:
        """
        (Updatable) A single search domain name according to [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). During a DNS query, the OS will append this search domain name to the value being queried.

        If you set [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/) to `VcnLocalPlusInternet`, and you assign a DNS label to the VCN during creation, the search domain name in the VCN's default set of DHCP options is automatically set to the VCN domain (for example, `vcn1.oraclevcn.com`).

        If you don't want to use a search domain name, omit this option from the set of DHCP options. Do not include this option with an empty list of search domain names, or with an empty string as the value for any search domain name.
        """
        return pulumi.get(self, "search_domain_names")

    @property
    @pulumi.getter(name="serverType")
    def server_type(self) -> Optional[str]:
        """
        (Updatable) 
        * **VcnLocal:** Reserved for future use.
        * **VcnLocalPlusInternet:** Also referred to as "Internet and VCN Resolver". Instances can resolve internet hostnames (no internet gateway is required), and can resolve hostnames of instances in the VCN. This is the default value in the default set of DHCP options in the VCN. For the Internet and VCN Resolver to work across the VCN, there must also be a DNS label set for the VCN, a DNS label set for each subnet, and a hostname for each instance. The Internet and VCN Resolver also enables reverse DNS lookup, which lets you determine the hostname corresponding to the private IP address. For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).
        * **CustomDnsServer:** Instances use a DNS server of your choice (three maximum).
        """
        return pulumi.get(self, "server_type")


@pulumi.output_type
class DrgAttachmentManagementNetworkDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ipsecConnectionId":
            suggest = "ipsec_connection_id"
        elif key == "routeTableId":
            suggest = "route_table_id"

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

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

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

    def __init__(__self__, *,
                 id: str,
                 type: str,
                 ipsec_connection_id: Optional[str] = None,
                 route_table_id: Optional[str] = None):
        """
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network attached to the DRG.
        :param str type: The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`,`VIRTUAL_CIRCUIT`
        :param str ipsec_connection_id: The IPSec connection that contains the attached IPSec tunnel.
        :param str route_table_id: The OCID of the route table the DRG attachment is using.
               
               For information about why you would associate a route table with a DRG attachment, see:
               * [Transit Routing: Access to Multiple VCNs in Same Region](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitrouting.htm)
               * [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm) This field is deprecated. Instead, use the `networkDetails` field to view the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the attached resource.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)
        if ipsec_connection_id is not None:
            pulumi.set(__self__, "ipsec_connection_id", ipsec_connection_id)
        if route_table_id is not None:
            pulumi.set(__self__, "route_table_id", route_table_id)

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

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`,`VIRTUAL_CIRCUIT`
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="ipsecConnectionId")
    def ipsec_connection_id(self) -> Optional[str]:
        """
        The IPSec connection that contains the attached IPSec tunnel.
        """
        return pulumi.get(self, "ipsec_connection_id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> Optional[str]:
        """
        The OCID of the route table the DRG attachment is using.

        For information about why you would associate a route table with a DRG attachment, see:
        * [Transit Routing: Access to Multiple VCNs in Same Region](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitrouting.htm)
        * [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm) This field is deprecated. Instead, use the `networkDetails` field to view the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the attached resource.
        """
        return pulumi.get(self, "route_table_id")


@pulumi.output_type
class DrgAttachmentNetworkDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ipsecConnectionId":
            suggest = "ipsec_connection_id"
        elif key == "routeTableId":
            suggest = "route_table_id"
        elif key == "vcnRouteType":
            suggest = "vcn_route_type"

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

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

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

    def __init__(__self__, *,
                 id: str,
                 type: str,
                 ipsec_connection_id: Optional[str] = None,
                 route_table_id: Optional[str] = None,
                 vcn_route_type: Optional[str] = None):
        """
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network attached to the DRG.
        :param str type: (Updatable) The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`, `VIRTUAL_CIRCUIT`
        :param str ipsec_connection_id: The IPSec connection that contains the attached IPSec tunnel.
        :param str route_table_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table used by the DRG attachment.
               
               If you don't specify a route table here, the DRG attachment is created without an associated route table. The Networking service does NOT automatically associate the attached VCN's default route table with the DRG attachment. For information about why you would associate a route table with a DRG attachment, see:
               * [Transit Routing: Access to Multiple VCNs in Same Region](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitrouting.htm)
               * [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm)
               This field is deprecated. Instead, use the networkDetails field to specify the VCN route table for this attachment.
        :param str vcn_route_type: (Updatable) Indicates whether the VCN CIDRs or the individual subnet CIDRs are imported from the attachment. Routes from the VCN ingress route table are always imported.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)
        if ipsec_connection_id is not None:
            pulumi.set(__self__, "ipsec_connection_id", ipsec_connection_id)
        if route_table_id is not None:
            pulumi.set(__self__, "route_table_id", route_table_id)
        if vcn_route_type is not None:
            pulumi.set(__self__, "vcn_route_type", vcn_route_type)

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

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Updatable) The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`, `VIRTUAL_CIRCUIT`
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="ipsecConnectionId")
    def ipsec_connection_id(self) -> Optional[str]:
        """
        The IPSec connection that contains the attached IPSec tunnel.
        """
        return pulumi.get(self, "ipsec_connection_id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table used by the DRG attachment.

        If you don't specify a route table here, the DRG attachment is created without an associated route table. The Networking service does NOT automatically associate the attached VCN's default route table with the DRG attachment. For information about why you would associate a route table with a DRG attachment, see:
        * [Transit Routing: Access to Multiple VCNs in Same Region](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitrouting.htm)
        * [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm)
        This field is deprecated. Instead, use the networkDetails field to specify the VCN route table for this attachment.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter(name="vcnRouteType")
    def vcn_route_type(self) -> Optional[str]:
        """
        (Updatable) Indicates whether the VCN CIDRs or the individual subnet CIDRs are imported from the attachment. Routes from the VCN ingress route table are always imported.
        """
        return pulumi.get(self, "vcn_route_type")


@pulumi.output_type
class DrgAttachmentsListDrgAllAttachment(dict):
    def __init__(__self__, *,
                 id: Optional[str] = None):
        """
        :param str id: The Oracle-assigned ID of the DRG attachment
        """
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        The Oracle-assigned ID of the DRG attachment
        """
        return pulumi.get(self, "id")


@pulumi.output_type
class DrgDefaultDrgRouteTable(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "ipsecTunnel":
            suggest = "ipsec_tunnel"
        elif key == "remotePeeringConnection":
            suggest = "remote_peering_connection"
        elif key == "virtualCircuit":
            suggest = "virtual_circuit"

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

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

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

    def __init__(__self__, *,
                 ipsec_tunnel: Optional[str] = None,
                 remote_peering_connection: Optional[str] = None,
                 vcn: Optional[str] = None,
                 virtual_circuit: Optional[str] = None):
        """
        :param str ipsec_tunnel: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table assigned to DRG attachments of type IPSEC_TUNNEL on creation.
        :param str remote_peering_connection: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type REMOTE_PEERING_CONNECTION on creation.
        :param str vcn: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VCN on creation.
        :param str virtual_circuit: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VIRTUAL_CIRCUIT on creation.
        """
        if ipsec_tunnel is not None:
            pulumi.set(__self__, "ipsec_tunnel", ipsec_tunnel)
        if remote_peering_connection is not None:
            pulumi.set(__self__, "remote_peering_connection", remote_peering_connection)
        if vcn is not None:
            pulumi.set(__self__, "vcn", vcn)
        if virtual_circuit is not None:
            pulumi.set(__self__, "virtual_circuit", virtual_circuit)

    @property
    @pulumi.getter(name="ipsecTunnel")
    def ipsec_tunnel(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table assigned to DRG attachments of type IPSEC_TUNNEL on creation.
        """
        return pulumi.get(self, "ipsec_tunnel")

    @property
    @pulumi.getter(name="remotePeeringConnection")
    def remote_peering_connection(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type REMOTE_PEERING_CONNECTION on creation.
        """
        return pulumi.get(self, "remote_peering_connection")

    @property
    @pulumi.getter
    def vcn(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VCN on creation.
        """
        return pulumi.get(self, "vcn")

    @property
    @pulumi.getter(name="virtualCircuit")
    def virtual_circuit(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VIRTUAL_CIRCUIT on creation.
        """
        return pulumi.get(self, "virtual_circuit")


@pulumi.output_type
class DrgRouteDistributionStatementMatchCriteria(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "attachmentType":
            suggest = "attachment_type"
        elif key == "drgAttachmentId":
            suggest = "drg_attachment_id"
        elif key == "matchType":
            suggest = "match_type"

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

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

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

    def __init__(__self__, *,
                 attachment_type: Optional[str] = None,
                 drg_attachment_id: Optional[str] = None,
                 match_type: Optional[str] = None):
        """
        :param str attachment_type: The type of the network resource to be included in this match. A match for a network type implies that all DRG attachments of that type insert routes into the table.
        :param str drg_attachment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG attachment.
        :param str match_type: (Updatable) The type of the match criteria for a route distribution statement.
        """
        if attachment_type is not None:
            pulumi.set(__self__, "attachment_type", attachment_type)
        if drg_attachment_id is not None:
            pulumi.set(__self__, "drg_attachment_id", drg_attachment_id)
        if match_type is not None:
            pulumi.set(__self__, "match_type", match_type)

    @property
    @pulumi.getter(name="attachmentType")
    def attachment_type(self) -> Optional[str]:
        """
        The type of the network resource to be included in this match. A match for a network type implies that all DRG attachments of that type insert routes into the table.
        """
        return pulumi.get(self, "attachment_type")

    @property
    @pulumi.getter(name="drgAttachmentId")
    def drg_attachment_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG attachment.
        """
        return pulumi.get(self, "drg_attachment_id")

    @property
    @pulumi.getter(name="matchType")
    def match_type(self) -> Optional[str]:
        """
        (Updatable) The type of the match criteria for a route distribution statement.
        """
        return pulumi.get(self, "match_type")


@pulumi.output_type
class ImageAgentFeature(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "isManagementSupported":
            suggest = "is_management_supported"
        elif key == "isMonitoringSupported":
            suggest = "is_monitoring_supported"

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

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

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

    def __init__(__self__, *,
                 is_management_supported: Optional[bool] = None,
                 is_monitoring_supported: Optional[bool] = None):
        """
        :param bool is_management_supported: This attribute is not used.
        :param bool is_monitoring_supported: This attribute is not used.
        """
        if is_management_supported is not None:
            pulumi.set(__self__, "is_management_supported", is_management_supported)
        if is_monitoring_supported is not None:
            pulumi.set(__self__, "is_monitoring_supported", is_monitoring_supported)

    @property
    @pulumi.getter(name="isManagementSupported")
    def is_management_supported(self) -> Optional[bool]:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_management_supported")

    @property
    @pulumi.getter(name="isMonitoringSupported")
    def is_monitoring_supported(self) -> Optional[bool]:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_monitoring_supported")


@pulumi.output_type
class ImageImageSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourceType":
            suggest = "source_type"
        elif key == "bucketName":
            suggest = "bucket_name"
        elif key == "namespaceName":
            suggest = "namespace_name"
        elif key == "objectName":
            suggest = "object_name"
        elif key == "operatingSystem":
            suggest = "operating_system"
        elif key == "operatingSystemVersion":
            suggest = "operating_system_version"
        elif key == "sourceImageType":
            suggest = "source_image_type"
        elif key == "sourceUri":
            suggest = "source_uri"

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

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

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

    def __init__(__self__, *,
                 source_type: str,
                 bucket_name: Optional[str] = None,
                 namespace_name: Optional[str] = None,
                 object_name: Optional[str] = None,
                 operating_system: Optional[str] = None,
                 operating_system_version: Optional[str] = None,
                 source_image_type: Optional[str] = None,
                 source_uri: Optional[str] = None):
        """
        :param str source_type: The source type for the image. Use `objectStorageTuple` when specifying the namespace, bucket name, and object name. Use `objectStorageUri` when specifying the Object Storage URL.
        :param str bucket_name: The Object Storage bucket for the image.
        :param str namespace_name: The Object Storage namespace for the image.
        :param str object_name: The Object Storage name for the image.
        :param str operating_system: The image's operating system.  Example: `Oracle Linux`
        :param str operating_system_version: The image's operating system version.  Example: `7.2`
        :param str source_image_type: The format of the image to be imported.  Only monolithic images are supported. This attribute is not used for exported Oracle images with the Oracle Cloud Infrastructure image format. Allowed values are:
        :param str source_uri: The Object Storage URL for the image.
        """
        pulumi.set(__self__, "source_type", source_type)
        if bucket_name is not None:
            pulumi.set(__self__, "bucket_name", bucket_name)
        if namespace_name is not None:
            pulumi.set(__self__, "namespace_name", namespace_name)
        if object_name is not None:
            pulumi.set(__self__, "object_name", object_name)
        if operating_system is not None:
            pulumi.set(__self__, "operating_system", operating_system)
        if operating_system_version is not None:
            pulumi.set(__self__, "operating_system_version", operating_system_version)
        if source_image_type is not None:
            pulumi.set(__self__, "source_image_type", source_image_type)
        if source_uri is not None:
            pulumi.set(__self__, "source_uri", source_uri)

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the image. Use `objectStorageTuple` when specifying the namespace, bucket name, and object name. Use `objectStorageUri` when specifying the Object Storage URL.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter(name="bucketName")
    def bucket_name(self) -> Optional[str]:
        """
        The Object Storage bucket for the image.
        """
        return pulumi.get(self, "bucket_name")

    @property
    @pulumi.getter(name="namespaceName")
    def namespace_name(self) -> Optional[str]:
        """
        The Object Storage namespace for the image.
        """
        return pulumi.get(self, "namespace_name")

    @property
    @pulumi.getter(name="objectName")
    def object_name(self) -> Optional[str]:
        """
        The Object Storage name for the image.
        """
        return pulumi.get(self, "object_name")

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> Optional[str]:
        """
        The image's operating system.  Example: `Oracle Linux`
        """
        return pulumi.get(self, "operating_system")

    @property
    @pulumi.getter(name="operatingSystemVersion")
    def operating_system_version(self) -> Optional[str]:
        """
        The image's operating system version.  Example: `7.2`
        """
        return pulumi.get(self, "operating_system_version")

    @property
    @pulumi.getter(name="sourceImageType")
    def source_image_type(self) -> Optional[str]:
        """
        The format of the image to be imported.  Only monolithic images are supported. This attribute is not used for exported Oracle images with the Oracle Cloud Infrastructure image format. Allowed values are:
        """
        return pulumi.get(self, "source_image_type")

    @property
    @pulumi.getter(name="sourceUri")
    def source_uri(self) -> Optional[str]:
        """
        The Object Storage URL for the image.
        """
        return pulumi.get(self, "source_uri")


@pulumi.output_type
class ImageLaunchOption(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeType":
            suggest = "boot_volume_type"
        elif key == "isConsistentVolumeNamingEnabled":
            suggest = "is_consistent_volume_naming_enabled"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "networkType":
            suggest = "network_type"
        elif key == "remoteDataVolumeType":
            suggest = "remote_data_volume_type"

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

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

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

    def __init__(__self__, *,
                 boot_volume_type: Optional[str] = None,
                 firmware: Optional[str] = None,
                 is_consistent_volume_naming_enabled: Optional[bool] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 network_type: Optional[str] = None,
                 remote_data_volume_type: Optional[str] = None):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        if boot_volume_type is not None:
            pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        if firmware is not None:
            pulumi.set(__self__, "firmware", firmware)
        if is_consistent_volume_naming_enabled is not None:
            pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        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 network_type is not None:
            pulumi.set(__self__, "network_type", network_type)
        if remote_data_volume_type is not None:
            pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> Optional[str]:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> Optional[str]:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> Optional[bool]:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> Optional[str]:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> Optional[str]:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can run all the available management plugins. Default 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 by the per-plugin configuration in the `pluginsConfig` object.
        * If `isManagementDisabled` is true, all of the management plugins are disabled, regardless of the per-plugin configuration.
        * If `isManagementDisabled` is false, all of the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[bool]:
        """
        (Updatable) Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default 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 of the monitoring plugins are disabled, regardless of the per-plugin configuration.
        * If `isMonitoringDisabled` is false, all of the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_monitoring_disabled")

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


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

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

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

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

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

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

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

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


@pulumi.output_type
class InstanceAvailabilityConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "isLiveMigrationPreferred":
            suggest = "is_live_migration_preferred"
        elif key == "recoveryAction":
            suggest = "recovery_action"

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

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

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

    def __init__(__self__, *,
                 is_live_migration_preferred: Optional[bool] = None,
                 recovery_action: Optional[str] = None):
        """
        :param bool is_live_migration_preferred: (Updatable) Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        :param str recovery_action: (Updatable) The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        if is_live_migration_preferred is not None:
            pulumi.set(__self__, "is_live_migration_preferred", is_live_migration_preferred)
        if recovery_action is not None:
            pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="isLiveMigrationPreferred")
    def is_live_migration_preferred(self) -> Optional[bool]:
        """
        (Updatable) Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        """
        return pulumi.get(self, "is_live_migration_preferred")

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> Optional[str]:
        """
        (Updatable) The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


@pulumi.output_type
class InstanceConfigurationInstanceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "instanceType":
            suggest = "instance_type"
        elif key == "blockVolumes":
            suggest = "block_volumes"
        elif key == "launchDetails":
            suggest = "launch_details"
        elif key == "secondaryVnics":
            suggest = "secondary_vnics"

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

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

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

    def __init__(__self__, *,
                 instance_type: str,
                 block_volumes: Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsBlockVolume']] = None,
                 launch_details: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetails'] = None,
                 secondary_vnics: Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsSecondaryVnic']] = None):
        """
        :param str instance_type: The type of instance details. Supported instanceType is compute
        :param Sequence['InstanceConfigurationInstanceDetailsBlockVolumeArgs'] block_volumes: Block volume parameters.
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsArgs' launch_details: Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
               
               See [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/LaunchInstanceDetails) for more information.
        :param Sequence['InstanceConfigurationInstanceDetailsSecondaryVnicArgs'] secondary_vnics: Secondary VNIC parameters.
        """
        pulumi.set(__self__, "instance_type", instance_type)
        if block_volumes is not None:
            pulumi.set(__self__, "block_volumes", block_volumes)
        if launch_details is not None:
            pulumi.set(__self__, "launch_details", launch_details)
        if secondary_vnics is not None:
            pulumi.set(__self__, "secondary_vnics", secondary_vnics)

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> str:
        """
        The type of instance details. Supported instanceType is compute
        """
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="blockVolumes")
    def block_volumes(self) -> Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsBlockVolume']]:
        """
        Block volume parameters.
        """
        return pulumi.get(self, "block_volumes")

    @property
    @pulumi.getter(name="launchDetails")
    def launch_details(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetails']:
        """
        Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.

        See [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/LaunchInstanceDetails) for more information.
        """
        return pulumi.get(self, "launch_details")

    @property
    @pulumi.getter(name="secondaryVnics")
    def secondary_vnics(self) -> Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsSecondaryVnic']]:
        """
        Secondary VNIC parameters.
        """
        return pulumi.get(self, "secondary_vnics")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsBlockVolume(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "attachDetails":
            suggest = "attach_details"
        elif key == "createDetails":
            suggest = "create_details"
        elif key == "volumeId":
            suggest = "volume_id"

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

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

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

    def __init__(__self__, *,
                 attach_details: Optional['outputs.InstanceConfigurationInstanceDetailsBlockVolumeAttachDetails'] = None,
                 create_details: Optional['outputs.InstanceConfigurationInstanceDetailsBlockVolumeCreateDetails'] = None,
                 volume_id: Optional[str] = None):
        """
        :param 'InstanceConfigurationInstanceDetailsBlockVolumeAttachDetailsArgs' attach_details: Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        :param 'InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsArgs' create_details: Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        :param str volume_id: The OCID of the volume.
        """
        if attach_details is not None:
            pulumi.set(__self__, "attach_details", attach_details)
        if create_details is not None:
            pulumi.set(__self__, "create_details", create_details)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="attachDetails")
    def attach_details(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsBlockVolumeAttachDetails']:
        """
        Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        """
        return pulumi.get(self, "attach_details")

    @property
    @pulumi.getter(name="createDetails")
    def create_details(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsBlockVolumeCreateDetails']:
        """
        Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        """
        return pulumi.get(self, "create_details")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[str]:
        """
        The OCID of the volume.
        """
        return pulumi.get(self, "volume_id")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsBlockVolumeAttachDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "displayName":
            suggest = "display_name"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "isReadOnly":
            suggest = "is_read_only"
        elif key == "isShareable":
            suggest = "is_shareable"
        elif key == "useChap":
            suggest = "use_chap"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 device: Optional[str] = None,
                 display_name: Optional[str] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 is_read_only: Optional[bool] = None,
                 is_shareable: Optional[bool] = None,
                 use_chap: Optional[bool] = None):
        """
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param str device: The device name.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param bool is_read_only: Whether the attachment should be created in read-only mode.
        :param bool is_shareable: Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        :param bool use_chap: Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        pulumi.set(__self__, "type", type)
        if device is not None:
            pulumi.set(__self__, "device", device)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        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 is_read_only is not None:
            pulumi.set(__self__, "is_read_only", is_read_only)
        if is_shareable is not None:
            pulumi.set(__self__, "is_shareable", is_shareable)
        if use_chap is not None:
            pulumi.set(__self__, "use_chap", use_chap)

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

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

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

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="isReadOnly")
    def is_read_only(self) -> Optional[bool]:
        """
        Whether the attachment should be created in read-only mode.
        """
        return pulumi.get(self, "is_read_only")

    @property
    @pulumi.getter(name="isShareable")
    def is_shareable(self) -> Optional[bool]:
        """
        Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        """
        return pulumi.get(self, "is_shareable")

    @property
    @pulumi.getter(name="useChap")
    def use_chap(self) -> Optional[bool]:
        """
        Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        return pulumi.get(self, "use_chap")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsBlockVolumeCreateDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autotunePolicies":
            suggest = "autotune_policies"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "backupPolicyId":
            suggest = "backup_policy_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"
        elif key == "sizeInGbs":
            suggest = "size_in_gbs"
        elif key == "sourceDetails":
            suggest = "source_details"
        elif key == "vpusPerGb":
            suggest = "vpus_per_gb"

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

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

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

    def __init__(__self__, *,
                 autotune_policies: Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsAutotunePolicy']] = None,
                 availability_domain: Optional[str] = None,
                 backup_policy_id: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 kms_key_id: Optional[str] = None,
                 size_in_gbs: Optional[str] = None,
                 source_details: Optional['outputs.InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsSourceDetails'] = None,
                 vpus_per_gb: Optional[str] = None):
        """
        :param Sequence['InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsAutotunePolicyArgs'] autotune_policies: The list of autotune policies enabled for this volume.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str backup_policy_id: If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        :param str compartment_id: The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the volume.
        :param str size_in_gbs: The size of the volume in GBs.
        :param str vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing 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:
        """
        if autotune_policies is not None:
            pulumi.set(__self__, "autotune_policies", autotune_policies)
        if availability_domain is not None:
            pulumi.set(__self__, "availability_domain", availability_domain)
        if backup_policy_id is not None:
            pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_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 freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)
        if size_in_gbs is not None:
            pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        if source_details is not None:
            pulumi.set(__self__, "source_details", source_details)
        if vpus_per_gb is not None:
            pulumi.set(__self__, "vpus_per_gb", vpus_per_gb)

    @property
    @pulumi.getter(name="autotunePolicies")
    def autotune_policies(self) -> Optional[Sequence['outputs.InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsAutotunePolicy']]:
        """
        The list of autotune policies enabled for this volume.
        """
        return pulumi.get(self, "autotune_policies")

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

    @property
    @pulumi.getter(name="backupPolicyId")
    def backup_policy_id(self) -> Optional[str]:
        """
        If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        """
        return pulumi.get(self, "backup_policy_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> Optional[str]:
        """
        The size of the volume in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

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

    @property
    @pulumi.getter(name="vpusPerGb")
    def vpus_per_gb(self) -> Optional[str]:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing 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, "vpus_per_gb")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsAutotunePolicy(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autotuneType":
            suggest = "autotune_type"
        elif key == "maxVpusPerGb":
            suggest = "max_vpus_per_gb"

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

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

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

    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: Optional[str] = None):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        if max_vpus_per_gb is not None:
            pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> Optional[str]:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsBlockVolumeCreateDetailsSourceDetails(dict):
    def __init__(__self__, *,
                 type: str,
                 id: Optional[str] = None):
        """
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param str id: The OCID of the volume backup.
        """
        pulumi.set(__self__, "type", type)
        if id is not None:
            pulumi.set(__self__, "id", id)

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

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        The OCID of the volume backup.
        """
        return pulumi.get(self, "id")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsLaunchDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "agentConfig":
            suggest = "agent_config"
        elif key == "availabilityConfig":
            suggest = "availability_config"
        elif key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "capacityReservationId":
            suggest = "capacity_reservation_id"
        elif key == "compartmentId":
            suggest = "compartment_id"
        elif key == "createVnicDetails":
            suggest = "create_vnic_details"
        elif key == "dedicatedVmHostId":
            suggest = "dedicated_vm_host_id"
        elif key == "definedTags":
            suggest = "defined_tags"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "extendedMetadata":
            suggest = "extended_metadata"
        elif key == "faultDomain":
            suggest = "fault_domain"
        elif key == "freeformTags":
            suggest = "freeform_tags"
        elif key == "instanceOptions":
            suggest = "instance_options"
        elif key == "ipxeScript":
            suggest = "ipxe_script"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "launchMode":
            suggest = "launch_mode"
        elif key == "launchOptions":
            suggest = "launch_options"
        elif key == "platformConfig":
            suggest = "platform_config"
        elif key == "preemptibleInstanceConfig":
            suggest = "preemptible_instance_config"
        elif key == "preferredMaintenanceAction":
            suggest = "preferred_maintenance_action"
        elif key == "shapeConfig":
            suggest = "shape_config"
        elif key == "sourceDetails":
            suggest = "source_details"

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

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

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

    def __init__(__self__, *,
                 agent_config: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsAgentConfig'] = None,
                 availability_config: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsAvailabilityConfig'] = None,
                 availability_domain: Optional[str] = None,
                 capacity_reservation_id: Optional[str] = None,
                 compartment_id: Optional[str] = None,
                 create_vnic_details: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsCreateVnicDetails'] = None,
                 dedicated_vm_host_id: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 extended_metadata: Optional[Mapping[str, Any]] = None,
                 fault_domain: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 instance_options: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsInstanceOptions'] = None,
                 ipxe_script: Optional[str] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 launch_mode: Optional[str] = None,
                 launch_options: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsLaunchOptions'] = None,
                 metadata: Optional[Mapping[str, Any]] = None,
                 platform_config: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsPlatformConfig'] = None,
                 preemptible_instance_config: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsPreemptibleInstanceConfig'] = None,
                 preferred_maintenance_action: Optional[str] = None,
                 shape: Optional[str] = None,
                 shape_config: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsShapeConfig'] = None,
                 source_details: Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsSourceDetails'] = None):
        """
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsAgentConfigArgs' agent_config: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsAvailabilityConfigArgs' availability_config: Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation this instance is launched under.
        :param str compartment_id: The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsCreateVnicDetailsArgs' create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str dedicated_vm_host_id: The OCID of the dedicated virtual machine host to place the instance on.
               
               Dedicated VM hosts can be used when launching individual instances from an instance configuration. They cannot be used to launch instance pools.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] extended_metadata: Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
               
               They are distinguished from `metadata` fields in that these can be nested JSON objects (whereas `metadata` fields are string/string maps only).
               
               The combined size of the `metadata` and `extendedMetadata` objects can be a maximum of 32,000 bytes.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains let you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
               
               If you do not specify the fault domain, the system selects one for you.
               
               To get a list of fault domains, use the [ListFaultDomains](https://docs.cloud.oracle.com/iaas/api/#/en/identity/20160918/FaultDomain/ListFaultDomains) operation in the Identity and Access Management Service API.
               
               Example: `FAULT-DOMAIN-1`
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsInstanceOptionsArgs' instance_options: Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        :param str ipxe_script: 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; however, you should be aware that the same iPXE script will run every time an instance boots; not only after the initial LaunchInstance call.
               
               The default 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 the same way as the default iPXE script, you should use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.
               
               For more information about the Bring Your Own Image feature of Oracle Cloud Infrastructure, see [Bring Your Own Image](https://docs.cloud.oracle.com/iaas/Content/Compute/References/bringyourownimage.htm).
               
               For more information about iPXE, see http://ipxe.org.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str launch_mode: Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsLaunchOptionsArgs' launch_options: Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        :param Mapping[str, Any] metadata: Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.
               
               A metadata service runs on every launched instance. The service is an HTTP endpoint listening on 169.254.169.254. You can use the service to:
               * Provide information to [Cloud-Init](https://cloudinit.readthedocs.org/en/latest/) to be used for various system initialization tasks.
               * Get information about the instance, including the custom metadata that you provide when you launch the instance.
               
               **Providing Cloud-Init Metadata**
               
               You can use the following metadata key names to provide information to Cloud-Init:
               
               **"ssh_authorized_keys"** - Provide one or more public SSH keys to be included in the `~/.ssh/authorized_keys` file for the default user on the instance. Use a newline character to separate multiple keys. The SSH keys must be in the format necessary for the `authorized_keys` file, as shown in the example below.
               
               **"user_data"** - Provide your own base64-encoded data to be used by Cloud-Init to run custom scripts or provide custom Cloud-Init configuration. For information about how to take advantage of user data, see the [Cloud-Init Documentation](http://cloudinit.readthedocs.org/en/latest/topics/format.html).
               
               **Metadata Example**
               
               "metadata" : { "quake_bot_level" : "Severe", "ssh_authorized_keys" : "ssh-rsa <your_public_SSH_key>== rsa-key-20160227", "user_data" : "<your_public_SSH_key>==" } **Getting Metadata on the Instance**
               
               To get information about your instance, connect to the instance using SSH and issue any of the following GET requests:
               
               curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/metadata/ curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/metadata/<any-key-name>
               
               You'll get back a response that includes all the instance information; only the metadata information; or the metadata information for the specified key name, respectively.
               
               The combined size of the `metadata` and `extendedMetadata` objects can be a maximum of 32,000 bytes.
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsPlatformConfigArgs' platform_config: The platform configuration requested for the instance.
               
               If you provide the parameter, the instance is created with the platform configuration that you specify. For any values that you omit, the instance uses the default configuration values for the `shape` that you specify. If you don't provide the parameter, the default values for the `shape` are used.
               
               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 'InstanceConfigurationInstanceDetailsLaunchDetailsPreemptibleInstanceConfigArgs' preemptible_instance_config: Configuration options for preemptible instances.
        :param str preferred_maintenance_action: The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
               
               You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param 'InstanceConfigurationInstanceDetailsLaunchDetailsShapeConfigArgs' shape_config: 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.
        """
        if agent_config is not None:
            pulumi.set(__self__, "agent_config", agent_config)
        if availability_config is not None:
            pulumi.set(__self__, "availability_config", availability_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 extended_metadata is not None:
            pulumi.set(__self__, "extended_metadata", extended_metadata)
        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 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 launch_mode is not None:
            pulumi.set(__self__, "launch_mode", launch_mode)
        if launch_options is not None:
            pulumi.set(__self__, "launch_options", launch_options)
        if metadata is not None:
            pulumi.set(__self__, "metadata", metadata)
        if platform_config is not None:
            pulumi.set(__self__, "platform_config", platform_config)
        if preemptible_instance_config is not None:
            pulumi.set(__self__, "preemptible_instance_config", preemptible_instance_config)
        if preferred_maintenance_action is not None:
            pulumi.set(__self__, "preferred_maintenance_action", preferred_maintenance_action)
        if shape is not None:
            pulumi.set(__self__, "shape", shape)
        if shape_config is not None:
            pulumi.set(__self__, "shape_config", shape_config)
        if source_details is not None:
            pulumi.set(__self__, "source_details", source_details)

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

    @property
    @pulumi.getter(name="availabilityConfig")
    def availability_config(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsAvailabilityConfig']:
        """
        Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        """
        return pulumi.get(self, "availability_config")

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

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> Optional[str]:
        """
        The OCID of the compute capacity reservation this instance is launched under.
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsCreateVnicDetails']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> Optional[str]:
        """
        The OCID of the dedicated virtual machine host to place the instance on.

        Dedicated VM hosts can be used when launching individual instances from an instance configuration. They cannot be used to launch instance pools.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="extendedMetadata")
    def extended_metadata(self) -> Optional[Mapping[str, Any]]:
        """
        Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.

        They are distinguished from `metadata` fields in that these can be nested JSON objects (whereas `metadata` fields are string/string maps only).

        The combined size of the `metadata` and `extendedMetadata` objects can be a maximum of 32,000 bytes.
        """
        return pulumi.get(self, "extended_metadata")

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

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

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

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsInstanceOptions']:
        """
        Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> Optional[str]:
        """
        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; however, you should be aware that the same iPXE script will run every time an instance boots; not only after the initial LaunchInstance call.

        The default 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 the same way as the default iPXE script, you should use the following iSCSI IP address: 169.254.0.2, and boot volume IQN: iqn.2015-02.oracle.boot.

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

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

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="launchMode")
    def launch_mode(self) -> Optional[str]:
        """
        Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        """
        return pulumi.get(self, "launch_mode")

    @property
    @pulumi.getter(name="launchOptions")
    def launch_options(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsLaunchOptions']:
        """
        Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        """
        return pulumi.get(self, "launch_options")

    @property
    @pulumi.getter
    def metadata(self) -> Optional[Mapping[str, Any]]:
        """
        Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.

        A metadata service runs on every launched instance. The service is an HTTP endpoint listening on 169.254.169.254. You can use the service to:
        * Provide information to [Cloud-Init](https://cloudinit.readthedocs.org/en/latest/) to be used for various system initialization tasks.
        * Get information about the instance, including the custom metadata that you provide when you launch the instance.

        **Providing Cloud-Init Metadata**

        You can use the following metadata key names to provide information to Cloud-Init:

        **"ssh_authorized_keys"** - Provide one or more public SSH keys to be included in the `~/.ssh/authorized_keys` file for the default user on the instance. Use a newline character to separate multiple keys. The SSH keys must be in the format necessary for the `authorized_keys` file, as shown in the example below.

        **"user_data"** - Provide your own base64-encoded data to be used by Cloud-Init to run custom scripts or provide custom Cloud-Init configuration. For information about how to take advantage of user data, see the [Cloud-Init Documentation](http://cloudinit.readthedocs.org/en/latest/topics/format.html).

        **Metadata Example**

        "metadata" : { "quake_bot_level" : "Severe", "ssh_authorized_keys" : "ssh-rsa <your_public_SSH_key>== rsa-key-20160227", "user_data" : "<your_public_SSH_key>==" } **Getting Metadata on the Instance**

        To get information about your instance, connect to the instance using SSH and issue any of the following GET requests:

        curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/metadata/ curl -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/metadata/<any-key-name>

        You'll get back a response that includes all the instance information; only the metadata information; or the metadata information for the specified key name, respectively.

        The combined size of the `metadata` and `extendedMetadata` objects can be a maximum of 32,000 bytes.
        """
        return pulumi.get(self, "metadata")

    @property
    @pulumi.getter(name="platformConfig")
    def platform_config(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsLaunchDetailsPlatformConfig']:
        """
        The platform configuration requested for the instance.

        If you provide the parameter, the instance is created with the platform configuration that you specify. For any values that you omit, the instance uses the default configuration values for the `shape` that you specify. If you don't provide the parameter, the default values for the `shape` are used.

        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, "platform_config")

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

    @property
    @pulumi.getter(name="preferredMaintenanceAction")
    def preferred_maintenance_action(self) -> Optional[str]:
        """
        The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        """
        return pulumi.get(self, "preferred_maintenance_action")

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

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

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

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

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

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


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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> Optional[bool]:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. Default 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 by the per-plugin configuration in the `pluginsConfig` object.
        * If `isManagementDisabled` is true, all of the management plugins are disabled, regardless of the per-plugin configuration.
        * If `isManagementDisabled` is false, all of the management plugins are enabled. You can optionally disable individual management plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> Optional[bool]:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default 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 of the monitoring plugins are disabled, regardless of the per-plugin configuration.
        * If `isMonitoringDisabled` is false, all of the monitoring plugins are enabled. You can optionally disable individual monitoring plugins by providing a value in the `pluginsConfig` object.
        """
        return pulumi.get(self, "is_monitoring_disabled")

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


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

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

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

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

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

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled. Accepted values are `ENABLED` and `DISABLED`

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

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


@pulumi.output_type
class InstanceConfigurationInstanceDetailsLaunchDetailsAvailabilityConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "recoveryAction":
            suggest = "recovery_action"

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

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

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

    def __init__(__self__, *,
                 recovery_action: Optional[str] = None):
        """
        :param str recovery_action: The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        if recovery_action is not None:
            pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> Optional[str]:
        """
        The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


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

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

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

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

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[bool] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        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)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[bool]:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

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

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[str]:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[bool]:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


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

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

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

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

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

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


@pulumi.output_type
class InstanceConfigurationInstanceDetailsLaunchDetailsLaunchOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeType":
            suggest = "boot_volume_type"
        elif key == "isConsistentVolumeNamingEnabled":
            suggest = "is_consistent_volume_naming_enabled"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "networkType":
            suggest = "network_type"
        elif key == "remoteDataVolumeType":
            suggest = "remote_data_volume_type"

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

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

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

    def __init__(__self__, *,
                 boot_volume_type: Optional[str] = None,
                 firmware: Optional[str] = None,
                 is_consistent_volume_naming_enabled: Optional[bool] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 network_type: Optional[str] = None,
                 remote_data_volume_type: Optional[str] = None):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        if boot_volume_type is not None:
            pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        if firmware is not None:
            pulumi.set(__self__, "firmware", firmware)
        if is_consistent_volume_naming_enabled is not None:
            pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        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 network_type is not None:
            pulumi.set(__self__, "network_type", network_type)
        if remote_data_volume_type is not None:
            pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> Optional[str]:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> Optional[str]:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> Optional[bool]:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> Optional[str]:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> Optional[str]:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class InstanceConfigurationInstanceDetailsLaunchDetailsPlatformConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areVirtualInstructionsEnabled":
            suggest = "are_virtual_instructions_enabled"
        elif key == "isAccessControlServiceEnabled":
            suggest = "is_access_control_service_enabled"
        elif key == "isInputOutputMemoryManagementUnitEnabled":
            suggest = "is_input_output_memory_management_unit_enabled"
        elif key == "isMeasuredBootEnabled":
            suggest = "is_measured_boot_enabled"
        elif key == "isMemoryEncryptionEnabled":
            suggest = "is_memory_encryption_enabled"
        elif key == "isSecureBootEnabled":
            suggest = "is_secure_boot_enabled"
        elif key == "isSymmetricMultiThreadingEnabled":
            suggest = "is_symmetric_multi_threading_enabled"
        elif key == "isTrustedPlatformModuleEnabled":
            suggest = "is_trusted_platform_module_enabled"
        elif key == "numaNodesPerSocket":
            suggest = "numa_nodes_per_socket"
        elif key == "percentageOfCoresEnabled":
            suggest = "percentage_of_cores_enabled"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 are_virtual_instructions_enabled: Optional[bool] = None,
                 is_access_control_service_enabled: Optional[bool] = None,
                 is_input_output_memory_management_unit_enabled: Optional[bool] = None,
                 is_measured_boot_enabled: Optional[bool] = None,
                 is_memory_encryption_enabled: Optional[bool] = None,
                 is_secure_boot_enabled: Optional[bool] = None,
                 is_symmetric_multi_threading_enabled: Optional[bool] = None,
                 is_trusted_platform_module_enabled: Optional[bool] = None,
                 numa_nodes_per_socket: Optional[str] = None,
                 percentage_of_cores_enabled: Optional[int] = None):
        """
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available. For example, Secure Virtual Machine for AMD shapes or VT-x for Intel shapes.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device pass-through.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot feature is enabled on the instance.
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether Secure Boot is enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multithreading is enabled on the instance. Symmetric multithreading is also called simultaneous multithreading (SMT) or Intel Hyper-Threading.
               
               Intel and AMD processors have two hardware execution threads per core (OCPU). SMT permits multiple independent threads of execution, to better use the resources and increase the efficiency of the CPU. When multithreading is disabled, only one thread is permitted to run on each core, which can provide higher or more predictable performance for some workloads.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled. Value must be a multiple of 25%. If the requested percentage results in a fractional number of cores, the system rounds up the number of cores across processors and provisions an instance with a whole number of cores.
               
               If the applications that you run on the instance use a core-based licensing model and need fewer cores than the full size of the shape, you can disable cores to reduce your licensing costs. The instance itself is billed for the full shape, regardless of whether all cores are enabled.
        """
        pulumi.set(__self__, "type", type)
        if are_virtual_instructions_enabled is not None:
            pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        if is_access_control_service_enabled is not None:
            pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        if is_input_output_memory_management_unit_enabled is not None:
            pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        if is_measured_boot_enabled is not None:
            pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        if is_memory_encryption_enabled is not None:
            pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        if is_secure_boot_enabled is not None:
            pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        if is_symmetric_multi_threading_enabled is not None:
            pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        if is_trusted_platform_module_enabled is not None:
            pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        if numa_nodes_per_socket is not None:
            pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        if percentage_of_cores_enabled is not None:
            pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)

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

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> Optional[bool]:
        """
        Whether virtualization instructions are available. For example, Secure Virtual Machine for AMD shapes or VT-x for Intel shapes.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> Optional[bool]:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device pass-through.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> Optional[bool]:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> Optional[bool]:
        """
        Whether the Measured Boot feature is enabled on the instance.
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> Optional[bool]:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> Optional[bool]:
        """
        Whether Secure Boot is enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> Optional[bool]:
        """
        Whether symmetric multithreading is enabled on the instance. Symmetric multithreading is also called simultaneous multithreading (SMT) or Intel Hyper-Threading.

        Intel and AMD processors have two hardware execution threads per core (OCPU). SMT permits multiple independent threads of execution, to better use the resources and increase the efficiency of the CPU. When multithreading is disabled, only one thread is permitted to run on each core, which can provide higher or more predictable performance for some workloads.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> Optional[bool]:
        """
        Whether the Trusted Platform Module (TPM) is enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> Optional[str]:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> Optional[int]:
        """
        The percentage of cores enabled. Value must be a multiple of 25%. If the requested percentage results in a fractional number of cores, the system rounds up the number of cores across processors and provisions an instance with a whole number of cores.

        If the applications that you run on the instance use a core-based licensing model and need fewer cores than the full size of the shape, you can disable cores to reduce your licensing costs. The instance itself is billed for the full shape, regardless of whether all cores are enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")


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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[str] = None,
                 memory_in_gbs: Optional[float] = None,
                 nvmes: Optional[int] = None,
                 ocpus: Optional[float] = None):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
               
               The following values are supported:
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param int nvmes: The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        :param float ocpus: 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 nvmes is not None:
            pulumi.set(__self__, "nvmes", nvmes)
        if ocpus is not None:
            pulumi.set(__self__, "ocpus", ocpus)

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

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

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

    @property
    @pulumi.getter
    def nvmes(self) -> Optional[int]:
        """
        The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        """
        return pulumi.get(self, "nvmes")

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


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

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

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

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

    def __init__(__self__, *,
                 source_type: str,
                 boot_volume_id: Optional[str] = None,
                 boot_volume_size_in_gbs: Optional[str] = None,
                 boot_volume_vpus_per_gb: Optional[str] = None,
                 image_id: Optional[str] = None):
        """
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
               
               Allowed values:
        :param str image_id: The OCID of the image used to boot the instance.
        """
        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)

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

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

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

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

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

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


@pulumi.output_type
class InstanceConfigurationInstanceDetailsSecondaryVnic(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "createVnicDetails":
            suggest = "create_vnic_details"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "nicIndex":
            suggest = "nic_index"

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

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

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

    def __init__(__self__, *,
                 create_vnic_details: Optional['outputs.InstanceConfigurationInstanceDetailsSecondaryVnicCreateVnicDetails'] = None,
                 display_name: Optional[str] = None,
                 nic_index: Optional[int] = None):
        """
        :param 'InstanceConfigurationInstanceDetailsSecondaryVnicCreateVnicDetailsArgs' create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param int nic_index: Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        if create_vnic_details is not None:
            pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if nic_index is not None:
            pulumi.set(__self__, "nic_index", nic_index)

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Optional['outputs.InstanceConfigurationInstanceDetailsSecondaryVnicCreateVnicDetails']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

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

    @property
    @pulumi.getter(name="nicIndex")
    def nic_index(self) -> Optional[int]:
        """
        Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "nic_index")


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

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

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

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

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[bool] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        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)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> Optional[bool]:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

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

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[str]:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> Optional[bool]:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


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

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

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

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

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

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

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

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

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

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

        Example: `false`

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        Deprecated. Instead use `subnetId` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). At least one of them is required; if you provide both, the values must match.
        """
        return pulumi.get(self, "subnet_id")

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

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


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

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

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

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

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

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


@pulumi.output_type
class InstanceLaunchOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bootVolumeType":
            suggest = "boot_volume_type"
        elif key == "isConsistentVolumeNamingEnabled":
            suggest = "is_consistent_volume_naming_enabled"
        elif key == "isPvEncryptionInTransitEnabled":
            suggest = "is_pv_encryption_in_transit_enabled"
        elif key == "networkType":
            suggest = "network_type"
        elif key == "remoteDataVolumeType":
            suggest = "remote_data_volume_type"

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

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

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

    def __init__(__self__, *,
                 boot_volume_type: Optional[str] = None,
                 firmware: Optional[str] = None,
                 is_consistent_volume_naming_enabled: Optional[bool] = None,
                 is_pv_encryption_in_transit_enabled: Optional[bool] = None,
                 network_type: Optional[str] = None,
                 remote_data_volume_type: Optional[str] = None):
        """
        :param str boot_volume_type: (Updatable) Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: (Updatable) Use this for update operation only. This field is  Deprecated during create. For create use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/datatypes/LaunchInstanceDetails).
        :param str network_type: (Updatable) Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        if boot_volume_type is not None:
            pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        if firmware is not None:
            pulumi.set(__self__, "firmware", firmware)
        if is_consistent_volume_naming_enabled is not None:
            pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        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 network_type is not None:
            pulumi.set(__self__, "network_type", network_type)
        if remote_data_volume_type is not None:
            pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> Optional[str]:
        """
        (Updatable) Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> Optional[str]:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> Optional[bool]:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> Optional[bool]:
        """
        (Updatable) Use this for update operation only. This field is  Deprecated during create. For create use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> Optional[str]:
        """
        (Updatable) Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> Optional[str]:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class InstancePlatformConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "areVirtualInstructionsEnabled":
            suggest = "are_virtual_instructions_enabled"
        elif key == "isAccessControlServiceEnabled":
            suggest = "is_access_control_service_enabled"
        elif key == "isInputOutputMemoryManagementUnitEnabled":
            suggest = "is_input_output_memory_management_unit_enabled"
        elif key == "isMeasuredBootEnabled":
            suggest = "is_measured_boot_enabled"
        elif key == "isMemoryEncryptionEnabled":
            suggest = "is_memory_encryption_enabled"
        elif key == "isSecureBootEnabled":
            suggest = "is_secure_boot_enabled"
        elif key == "isSymmetricMultiThreadingEnabled":
            suggest = "is_symmetric_multi_threading_enabled"
        elif key == "isTrustedPlatformModuleEnabled":
            suggest = "is_trusted_platform_module_enabled"
        elif key == "numaNodesPerSocket":
            suggest = "numa_nodes_per_socket"
        elif key == "percentageOfCoresEnabled":
            suggest = "percentage_of_cores_enabled"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 are_virtual_instructions_enabled: Optional[bool] = None,
                 is_access_control_service_enabled: Optional[bool] = None,
                 is_input_output_memory_management_unit_enabled: Optional[bool] = None,
                 is_measured_boot_enabled: Optional[bool] = None,
                 is_memory_encryption_enabled: Optional[bool] = None,
                 is_secure_boot_enabled: Optional[bool] = None,
                 is_symmetric_multi_threading_enabled: Optional[bool] = None,
                 is_trusted_platform_module_enabled: Optional[bool] = None,
                 numa_nodes_per_socket: Optional[str] = None,
                 percentage_of_cores_enabled: Optional[int] = None):
        """
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available. For example, Secure Virtual Machine for AMD shapes or VT-x for Intel shapes.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device pass-through.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot feature is enabled on the instance.
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether Secure Boot is enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multithreading is enabled on the instance. Symmetric multithreading is also called simultaneous multithreading (SMT) or Intel Hyper-Threading.
               
               Intel and AMD processors have two hardware execution threads per core (OCPU). SMT permits multiple independent threads of execution, to better use the resources and increase the efficiency of the CPU. When multithreading is disabled, only one thread is permitted to run on each core, which can provide higher or more predictable performance for some workloads.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled. Value must be a multiple of 25%. If the requested percentage results in a fractional number of cores, the system rounds up the number of cores across processors and provisions an instance with a whole number of cores.
               
               If the applications that you run on the instance use a core-based licensing model and need fewer cores than the full size of the shape, you can disable cores to reduce your licensing costs. The instance itself is billed for the full shape, regardless of whether all cores are enabled.
        """
        pulumi.set(__self__, "type", type)
        if are_virtual_instructions_enabled is not None:
            pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        if is_access_control_service_enabled is not None:
            pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        if is_input_output_memory_management_unit_enabled is not None:
            pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        if is_measured_boot_enabled is not None:
            pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        if is_memory_encryption_enabled is not None:
            pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        if is_secure_boot_enabled is not None:
            pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        if is_symmetric_multi_threading_enabled is not None:
            pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        if is_trusted_platform_module_enabled is not None:
            pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        if numa_nodes_per_socket is not None:
            pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        if percentage_of_cores_enabled is not None:
            pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)

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

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> Optional[bool]:
        """
        Whether virtualization instructions are available. For example, Secure Virtual Machine for AMD shapes or VT-x for Intel shapes.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> Optional[bool]:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device pass-through.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> Optional[bool]:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> Optional[bool]:
        """
        Whether the Measured Boot feature is enabled on the instance.
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> Optional[bool]:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> Optional[bool]:
        """
        Whether Secure Boot is enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> Optional[bool]:
        """
        Whether symmetric multithreading is enabled on the instance. Symmetric multithreading is also called simultaneous multithreading (SMT) or Intel Hyper-Threading.

        Intel and AMD processors have two hardware execution threads per core (OCPU). SMT permits multiple independent threads of execution, to better use the resources and increase the efficiency of the CPU. When multithreading is disabled, only one thread is permitted to run on each core, which can provide higher or more predictable performance for some workloads.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> Optional[bool]:
        """
        Whether the Trusted Platform Module (TPM) is enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> Optional[str]:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> Optional[int]:
        """
        The percentage of cores enabled. Value must be a multiple of 25%. If the requested percentage results in a fractional number of cores, the system rounds up the number of cores across processors and provisions an instance with a whole number of cores.

        If the applications that you run on the instance use a core-based licensing model and need fewer cores than the full size of the shape, you can disable cores to reduce your licensing costs. The instance itself is billed for the full shape, regardless of whether all cores are enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")


@pulumi.output_type
class InstancePoolInstanceLoadBalancerBackend(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendHealthStatus":
            suggest = "backend_health_status"
        elif key == "backendName":
            suggest = "backend_name"
        elif key == "backendSetName":
            suggest = "backend_set_name"
        elif key == "loadBalancerId":
            suggest = "load_balancer_id"

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

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

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

    def __init__(__self__, *,
                 backend_health_status: Optional[str] = None,
                 backend_name: Optional[str] = None,
                 backend_set_name: Optional[str] = None,
                 load_balancer_id: Optional[str] = None,
                 state: Optional[str] = None):
        """
        :param str backend_health_status: The health of the backend as observed by the load balancer.
        :param str backend_name: The name of the backend in the backend set.
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str load_balancer_id: The OCID of the load balancer attached to the instance pool.
        :param str state: The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        """
        if backend_health_status is not None:
            pulumi.set(__self__, "backend_health_status", backend_health_status)
        if backend_name is not None:
            pulumi.set(__self__, "backend_name", backend_name)
        if backend_set_name is not None:
            pulumi.set(__self__, "backend_set_name", backend_set_name)
        if load_balancer_id is not None:
            pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        if state is not None:
            pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="backendHealthStatus")
    def backend_health_status(self) -> Optional[str]:
        """
        The health of the backend as observed by the load balancer.
        """
        return pulumi.get(self, "backend_health_status")

    @property
    @pulumi.getter(name="backendName")
    def backend_name(self) -> Optional[str]:
        """
        The name of the backend in the backend set.
        """
        return pulumi.get(self, "backend_name")

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> Optional[str]:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> Optional[str]:
        """
        The OCID of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def state(self) -> Optional[str]:
        """
        The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class InstancePoolLoadBalancer(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backendSetName":
            suggest = "backend_set_name"
        elif key == "loadBalancerId":
            suggest = "load_balancer_id"
        elif key == "vnicSelection":
            suggest = "vnic_selection"
        elif key == "instancePoolId":
            suggest = "instance_pool_id"

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

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

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

    def __init__(__self__, *,
                 backend_set_name: str,
                 load_balancer_id: str,
                 port: int,
                 vnic_selection: str,
                 id: Optional[str] = None,
                 instance_pool_id: Optional[str] = None,
                 state: Optional[str] = None):
        """
        :param str backend_set_name: The name of the backend set on the load balancer to add instances to.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer to attach to the instance pool.
        :param int port: The port value to use when creating the backend set.
        :param str vnic_selection: Indicates which VNIC on each instance in the pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        :param str state: (Updatable) The target state for the instance pool update operation (ignored at create time and should not be set). Could be set to RUNNING or STOPPED.
               
               
               ** 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
        """
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "vnic_selection", vnic_selection)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if instance_pool_id is not None:
            pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        if state is not None:
            pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer to add instances to.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer to attach to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port value to use when creating the backend set.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> str:
        """
        Indicates which VNIC on each instance in the pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")

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

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter
    def state(self) -> Optional[str]:
        """
        (Updatable) The target state for the instance pool update operation (ignored at create time and should not be set). Could be set to RUNNING or STOPPED.


        ** 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, "state")


@pulumi.output_type
class InstancePoolPlacementConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "primarySubnetId":
            suggest = "primary_subnet_id"
        elif key == "faultDomains":
            suggest = "fault_domains"
        elif key == "secondaryVnicSubnets":
            suggest = "secondary_vnic_subnets"

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

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

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

    def __init__(__self__, *,
                 availability_domain: str,
                 primary_subnet_id: str,
                 fault_domains: Optional[Sequence[str]] = None,
                 secondary_vnic_subnets: Optional[Sequence['outputs.InstancePoolPlacementConfigurationSecondaryVnicSubnet']] = None):
        """
        :param str availability_domain: (Updatable) The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param str primary_subnet_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence[str] fault_domains: (Updatable) The fault domains to place instances.
               
               If you don't provide any values, the system makes a best effort to distribute instances across all fault domains based on capacity.
               
               To distribute the instances evenly across selected fault domains, provide a set of fault domains. For example, you might want instances to be evenly distributed if your applications require high availability.
               
               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, FAULT-DOMAIN-2, FAULT-DOMAIN-3]`
        :param Sequence['InstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: (Updatable) The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        if fault_domains is not None:
            pulumi.set(__self__, "fault_domains", fault_domains)
        if secondary_vnic_subnets is not None:
            pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        (Updatable) The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Optional[Sequence[str]]:
        """
        (Updatable) The fault domains to place instances.

        If you don't provide any values, the system makes a best effort to distribute instances across all fault domains based on capacity.

        To distribute the instances evenly across selected fault domains, provide a set of fault domains. For example, you might want instances to be evenly distributed if your applications require high availability.

        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, FAULT-DOMAIN-2, FAULT-DOMAIN-3]`
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Optional[Sequence['outputs.InstancePoolPlacementConfigurationSecondaryVnicSubnet']]:
        """
        (Updatable) The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class InstancePoolPlacementConfigurationSecondaryVnicSubnet(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "subnetId":
            suggest = "subnet_id"
        elif key == "displayName":
            suggest = "display_name"

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

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

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

    def __init__(__self__, *,
                 subnet_id: str,
                 display_name: Optional[str] = None):
        """
        :param str subnet_id: (Updatable) The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        :param str display_name: (Updatable) The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        pulumi.set(__self__, "subnet_id", subnet_id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        (Updatable) The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> Optional[str]:
        """
        (Updatable) The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")


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

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

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

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

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

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


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

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

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

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

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

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

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


@pulumi.output_type
class InstanceShapeConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baselineOcpuUtilization":
            suggest = "baseline_ocpu_utilization"
        elif key == "gpuDescription":
            suggest = "gpu_description"
        elif key == "localDiskDescription":
            suggest = "local_disk_description"
        elif key == "localDisks":
            suggest = "local_disks"
        elif key == "localDisksTotalSizeInGbs":
            suggest = "local_disks_total_size_in_gbs"
        elif key == "maxVnicAttachments":
            suggest = "max_vnic_attachments"
        elif key == "memoryInGbs":
            suggest = "memory_in_gbs"
        elif key == "networkingBandwidthInGbps":
            suggest = "networking_bandwidth_in_gbps"
        elif key == "processorDescription":
            suggest = "processor_description"

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

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

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

    def __init__(__self__, *,
                 baseline_ocpu_utilization: Optional[str] = None,
                 gpu_description: Optional[str] = None,
                 gpus: Optional[int] = None,
                 local_disk_description: Optional[str] = None,
                 local_disks: Optional[int] = None,
                 local_disks_total_size_in_gbs: Optional[float] = None,
                 max_vnic_attachments: Optional[int] = None,
                 memory_in_gbs: Optional[float] = None,
                 networking_bandwidth_in_gbps: Optional[float] = None,
                 nvmes: Optional[int] = None,
                 ocpus: Optional[float] = None,
                 processor_description: Optional[str] = None):
        """
        :param str baseline_ocpu_utilization: (Updatable) The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
               
               The following values are supported:
        :param str gpu_description: A short description of the instance's graphics processing unit (GPU).
        :param int gpus: The number of GPUs available to the instance.
        :param str local_disk_description: A short description of the local disks available to this instance.
        :param int local_disks: The number of local disks available to the instance.
        :param float local_disks_total_size_in_gbs: The aggregate size of all local disks, in gigabytes.
        :param int max_vnic_attachments: The maximum number of VNIC attachments for the instance.
        :param float memory_in_gbs: (Updatable) The total amount of memory available to the instance, in gigabytes.
        :param float networking_bandwidth_in_gbps: The networking bandwidth available to the instance, in gigabits per second.
        :param int nvmes: (Updatable) The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        :param float ocpus: (Updatable) The total number of OCPUs available to the instance.
        :param str processor_description: A short description of the instance's processor (CPU).
        """
        if baseline_ocpu_utilization is not None:
            pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        if gpu_description is not None:
            pulumi.set(__self__, "gpu_description", gpu_description)
        if gpus is not None:
            pulumi.set(__self__, "gpus", gpus)
        if local_disk_description is not None:
            pulumi.set(__self__, "local_disk_description", local_disk_description)
        if local_disks is not None:
            pulumi.set(__self__, "local_disks", local_disks)
        if local_disks_total_size_in_gbs is not None:
            pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        if max_vnic_attachments is not None:
            pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        if memory_in_gbs is not None:
            pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        if networking_bandwidth_in_gbps is not None:
            pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        if nvmes is not None:
            pulumi.set(__self__, "nvmes", nvmes)
        if ocpus is not None:
            pulumi.set(__self__, "ocpus", ocpus)
        if processor_description is not None:
            pulumi.set(__self__, "processor_description", processor_description)

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

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

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> Optional[str]:
        """
        A short description of the instance's graphics processing unit (GPU).
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> Optional[int]:
        """
        The number of GPUs available to the instance.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> Optional[str]:
        """
        A short description of the local disks available to this instance.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> Optional[int]:
        """
        The number of local disks available to the instance.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> Optional[float]:
        """
        The aggregate size of all local disks, in gigabytes.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> Optional[int]:
        """
        The maximum number of VNIC attachments for the instance.
        """
        return pulumi.get(self, "max_vnic_attachments")

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

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> Optional[float]:
        """
        The networking bandwidth available to the instance, in gigabits per second.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter
    def nvmes(self) -> Optional[int]:
        """
        (Updatable) The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        """
        return pulumi.get(self, "nvmes")

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

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> Optional[str]:
        """
        A short description of the instance's processor (CPU).
        """
        return pulumi.get(self, "processor_description")


@pulumi.output_type
class InstanceSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourceId":
            suggest = "source_id"
        elif key == "sourceType":
            suggest = "source_type"
        elif key == "bootVolumeSizeInGbs":
            suggest = "boot_volume_size_in_gbs"
        elif key == "bootVolumeVpusPerGb":
            suggest = "boot_volume_vpus_per_gb"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"

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

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

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

    def __init__(__self__, *,
                 source_id: str,
                 source_type: str,
                 boot_volume_size_in_gbs: Optional[str] = None,
                 boot_volume_vpus_per_gb: Optional[str] = None,
                 kms_key_id: Optional[str] = None):
        """
        :param str source_id: The OCID of an image or a boot volume to use, depending on the value of `source_type`.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        :param str boot_volume_size_in_gbs: (Updatable) The size of the boot volume in GBs. Minimum value is 50 GB and maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
               
               Allowed values:
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the boot volume.
        """
        pulumi.set(__self__, "source_id", source_id)
        pulumi.set(__self__, "source_type", source_type)
        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 kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter(name="sourceId")
    def source_id(self) -> str:
        """
        The OCID of an image or a boot volume to use, depending on the value of `source_type`.
        """
        return pulumi.get(self, "source_id")

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

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

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

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

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


@pulumi.output_type
class IpsecConnectionTunnelManagementBgpSessionInfo(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bgpIpv6state":
            suggest = "bgp_ipv6state"
        elif key == "bgpState":
            suggest = "bgp_state"
        elif key == "customerBgpAsn":
            suggest = "customer_bgp_asn"
        elif key == "customerInterfaceIp":
            suggest = "customer_interface_ip"
        elif key == "oracleBgpAsn":
            suggest = "oracle_bgp_asn"
        elif key == "oracleInterfaceIp":
            suggest = "oracle_interface_ip"

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

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

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

    def __init__(__self__, *,
                 bgp_ipv6state: Optional[str] = None,
                 bgp_state: Optional[str] = None,
                 customer_bgp_asn: Optional[str] = None,
                 customer_interface_ip: Optional[str] = None,
                 oracle_bgp_asn: Optional[str] = None,
                 oracle_interface_ip: Optional[str] = None):
        """
        :param str bgp_state: the state of the BGP.
        :param str customer_bgp_asn: If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this ASN is required and used for the tunnel's BGP session. This is the ASN of the network on the CPE end of the BGP session. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.
               
               If the tunnel's `routing` attribute is set to `STATIC`, the `customerBgpAsn` must be null.
               
               Example: `12345` (2-byte) or `1587232876` (4-byte)
        :param str customer_interface_ip: The IP address for the CPE end of the inside tunnel interface.
               
               If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this IP address is required and used for the tunnel's BGP session.
               
               If `routing` is instead set to `STATIC`, this IP address is optional. You can set this IP address to troubleshoot or monitor the tunnel.
               
               The value must be a /30 or /31.
               
               Example: `10.0.0.5/31`
        :param str oracle_bgp_asn: This is the value of the Oracle Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        :param str oracle_interface_ip: The IP address for the Oracle end of the inside tunnel interface.
               
               If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this IP address is required and used for the tunnel's BGP session.
               
               If `routing` is instead set to `STATIC`, this IP address is optional. You can set this IP address to troubleshoot or monitor the tunnel.
               
               The value must be a /30 or /31.
               
               Example: `10.0.0.4/31`
        """
        if bgp_ipv6state is not None:
            pulumi.set(__self__, "bgp_ipv6state", bgp_ipv6state)
        if bgp_state is not None:
            pulumi.set(__self__, "bgp_state", bgp_state)
        if customer_bgp_asn is not None:
            pulumi.set(__self__, "customer_bgp_asn", customer_bgp_asn)
        if customer_interface_ip is not None:
            pulumi.set(__self__, "customer_interface_ip", customer_interface_ip)
        if oracle_bgp_asn is not None:
            pulumi.set(__self__, "oracle_bgp_asn", oracle_bgp_asn)
        if oracle_interface_ip is not None:
            pulumi.set(__self__, "oracle_interface_ip", oracle_interface_ip)

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

    @property
    @pulumi.getter(name="bgpState")
    def bgp_state(self) -> Optional[str]:
        """
        the state of the BGP.
        """
        return pulumi.get(self, "bgp_state")

    @property
    @pulumi.getter(name="customerBgpAsn")
    def customer_bgp_asn(self) -> Optional[str]:
        """
        If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this ASN is required and used for the tunnel's BGP session. This is the ASN of the network on the CPE end of the BGP session. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.

        If the tunnel's `routing` attribute is set to `STATIC`, the `customerBgpAsn` must be null.

        Example: `12345` (2-byte) or `1587232876` (4-byte)
        """
        return pulumi.get(self, "customer_bgp_asn")

    @property
    @pulumi.getter(name="customerInterfaceIp")
    def customer_interface_ip(self) -> Optional[str]:
        """
        The IP address for the CPE end of the inside tunnel interface.

        If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this IP address is required and used for the tunnel's BGP session.

        If `routing` is instead set to `STATIC`, this IP address is optional. You can set this IP address to troubleshoot or monitor the tunnel.

        The value must be a /30 or /31.

        Example: `10.0.0.5/31`
        """
        return pulumi.get(self, "customer_interface_ip")

    @property
    @pulumi.getter(name="oracleBgpAsn")
    def oracle_bgp_asn(self) -> Optional[str]:
        """
        This is the value of the Oracle Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        """
        return pulumi.get(self, "oracle_bgp_asn")

    @property
    @pulumi.getter(name="oracleInterfaceIp")
    def oracle_interface_ip(self) -> Optional[str]:
        """
        The IP address for the Oracle end of the inside tunnel interface.

        If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/IPSecConnectionTunnel/)), this IP address is required and used for the tunnel's BGP session.

        If `routing` is instead set to `STATIC`, this IP address is optional. You can set this IP address to troubleshoot or monitor the tunnel.

        The value must be a /30 or /31.

        Example: `10.0.0.4/31`
        """
        return pulumi.get(self, "oracle_interface_ip")


@pulumi.output_type
class IpsecConnectionTunnelManagementDpdConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dpdMode":
            suggest = "dpd_mode"
        elif key == "dpdTimeoutInSec":
            suggest = "dpd_timeout_in_sec"

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

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

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

    def __init__(__self__, *,
                 dpd_mode: Optional[str] = None,
                 dpd_timeout_in_sec: Optional[int] = None):
        if dpd_mode is not None:
            pulumi.set(__self__, "dpd_mode", dpd_mode)
        if dpd_timeout_in_sec is not None:
            pulumi.set(__self__, "dpd_timeout_in_sec", dpd_timeout_in_sec)

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

    @property
    @pulumi.getter(name="dpdTimeoutInSec")
    def dpd_timeout_in_sec(self) -> Optional[int]:
        return pulumi.get(self, "dpd_timeout_in_sec")


@pulumi.output_type
class IpsecConnectionTunnelManagementEncryptionDomainConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cpeTrafficSelectors":
            suggest = "cpe_traffic_selectors"
        elif key == "oracleTrafficSelectors":
            suggest = "oracle_traffic_selectors"

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

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

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

    def __init__(__self__, *,
                 cpe_traffic_selectors: Optional[Sequence[str]] = None,
                 oracle_traffic_selectors: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] cpe_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        :param Sequence[str] oracle_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        if cpe_traffic_selectors is not None:
            pulumi.set(__self__, "cpe_traffic_selectors", cpe_traffic_selectors)
        if oracle_traffic_selectors is not None:
            pulumi.set(__self__, "oracle_traffic_selectors", oracle_traffic_selectors)

    @property
    @pulumi.getter(name="cpeTrafficSelectors")
    def cpe_traffic_selectors(self) -> Optional[Sequence[str]]:
        """
        Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        """
        return pulumi.get(self, "cpe_traffic_selectors")

    @property
    @pulumi.getter(name="oracleTrafficSelectors")
    def oracle_traffic_selectors(self) -> Optional[Sequence[str]]:
        """
        Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        return pulumi.get(self, "oracle_traffic_selectors")


@pulumi.output_type
class IpsecConnectionTunnelManagementPhaseOneDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customAuthenticationAlgorithm":
            suggest = "custom_authentication_algorithm"
        elif key == "customDhGroup":
            suggest = "custom_dh_group"
        elif key == "customEncryptionAlgorithm":
            suggest = "custom_encryption_algorithm"
        elif key == "isCustomPhaseOneConfig":
            suggest = "is_custom_phase_one_config"
        elif key == "isIkeEstablished":
            suggest = "is_ike_established"
        elif key == "negotiatedAuthenticationAlgorithm":
            suggest = "negotiated_authentication_algorithm"
        elif key == "negotiatedDhGroup":
            suggest = "negotiated_dh_group"
        elif key == "negotiatedEncryptionAlgorithm":
            suggest = "negotiated_encryption_algorithm"
        elif key == "remainingLifetime":
            suggest = "remaining_lifetime"
        elif key == "remainingLifetimeLastRetrieved":
            suggest = "remaining_lifetime_last_retrieved"

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

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

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

    def __init__(__self__, *,
                 custom_authentication_algorithm: Optional[str] = None,
                 custom_dh_group: Optional[str] = None,
                 custom_encryption_algorithm: Optional[str] = None,
                 is_custom_phase_one_config: Optional[bool] = None,
                 is_ike_established: Optional[bool] = None,
                 lifetime: Optional[int] = None,
                 negotiated_authentication_algorithm: Optional[str] = None,
                 negotiated_dh_group: Optional[str] = None,
                 negotiated_encryption_algorithm: Optional[str] = None,
                 remaining_lifetime: Optional[str] = None,
                 remaining_lifetime_last_retrieved: Optional[str] = None):
        if custom_authentication_algorithm is not None:
            pulumi.set(__self__, "custom_authentication_algorithm", custom_authentication_algorithm)
        if custom_dh_group is not None:
            pulumi.set(__self__, "custom_dh_group", custom_dh_group)
        if custom_encryption_algorithm is not None:
            pulumi.set(__self__, "custom_encryption_algorithm", custom_encryption_algorithm)
        if is_custom_phase_one_config is not None:
            pulumi.set(__self__, "is_custom_phase_one_config", is_custom_phase_one_config)
        if is_ike_established is not None:
            pulumi.set(__self__, "is_ike_established", is_ike_established)
        if lifetime is not None:
            pulumi.set(__self__, "lifetime", lifetime)
        if negotiated_authentication_algorithm is not None:
            pulumi.set(__self__, "negotiated_authentication_algorithm", negotiated_authentication_algorithm)
        if negotiated_dh_group is not None:
            pulumi.set(__self__, "negotiated_dh_group", negotiated_dh_group)
        if negotiated_encryption_algorithm is not None:
            pulumi.set(__self__, "negotiated_encryption_algorithm", negotiated_encryption_algorithm)
        if remaining_lifetime is not None:
            pulumi.set(__self__, "remaining_lifetime", remaining_lifetime)
        if remaining_lifetime_last_retrieved is not None:
            pulumi.set(__self__, "remaining_lifetime_last_retrieved", remaining_lifetime_last_retrieved)

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

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

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

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

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

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

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

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

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

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

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


@pulumi.output_type
class IpsecConnectionTunnelManagementPhaseTwoDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customAuthenticationAlgorithm":
            suggest = "custom_authentication_algorithm"
        elif key == "customEncryptionAlgorithm":
            suggest = "custom_encryption_algorithm"
        elif key == "dhGroup":
            suggest = "dh_group"
        elif key == "isCustomPhaseTwoConfig":
            suggest = "is_custom_phase_two_config"
        elif key == "isEspEstablished":
            suggest = "is_esp_established"
        elif key == "isPfsEnabled":
            suggest = "is_pfs_enabled"
        elif key == "negotiatedAuthenticationAlgorithm":
            suggest = "negotiated_authentication_algorithm"
        elif key == "negotiatedDhGroup":
            suggest = "negotiated_dh_group"
        elif key == "negotiatedEncryptionAlgorithm":
            suggest = "negotiated_encryption_algorithm"
        elif key == "remainingLifetime":
            suggest = "remaining_lifetime"
        elif key == "remainingLifetimeLastRetrieved":
            suggest = "remaining_lifetime_last_retrieved"

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

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

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

    def __init__(__self__, *,
                 custom_authentication_algorithm: Optional[str] = None,
                 custom_encryption_algorithm: Optional[str] = None,
                 dh_group: Optional[str] = None,
                 is_custom_phase_two_config: Optional[bool] = None,
                 is_esp_established: Optional[bool] = None,
                 is_pfs_enabled: Optional[bool] = None,
                 lifetime: Optional[int] = None,
                 negotiated_authentication_algorithm: Optional[str] = None,
                 negotiated_dh_group: Optional[str] = None,
                 negotiated_encryption_algorithm: Optional[str] = None,
                 remaining_lifetime: Optional[str] = None,
                 remaining_lifetime_last_retrieved: Optional[str] = None):
        if custom_authentication_algorithm is not None:
            pulumi.set(__self__, "custom_authentication_algorithm", custom_authentication_algorithm)
        if custom_encryption_algorithm is not None:
            pulumi.set(__self__, "custom_encryption_algorithm", custom_encryption_algorithm)
        if dh_group is not None:
            pulumi.set(__self__, "dh_group", dh_group)
        if is_custom_phase_two_config is not None:
            pulumi.set(__self__, "is_custom_phase_two_config", is_custom_phase_two_config)
        if is_esp_established is not None:
            pulumi.set(__self__, "is_esp_established", is_esp_established)
        if is_pfs_enabled is not None:
            pulumi.set(__self__, "is_pfs_enabled", is_pfs_enabled)
        if lifetime is not None:
            pulumi.set(__self__, "lifetime", lifetime)
        if negotiated_authentication_algorithm is not None:
            pulumi.set(__self__, "negotiated_authentication_algorithm", negotiated_authentication_algorithm)
        if negotiated_dh_group is not None:
            pulumi.set(__self__, "negotiated_dh_group", negotiated_dh_group)
        if negotiated_encryption_algorithm is not None:
            pulumi.set(__self__, "negotiated_encryption_algorithm", negotiated_encryption_algorithm)
        if remaining_lifetime is not None:
            pulumi.set(__self__, "remaining_lifetime", remaining_lifetime)
        if remaining_lifetime_last_retrieved is not None:
            pulumi.set(__self__, "remaining_lifetime_last_retrieved", remaining_lifetime_last_retrieved)

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

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

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

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

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

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

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

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

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

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

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

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


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        """
        :param int type: The ICMP type.
        :param int code: The ICMP code (optional).
        """
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def code(self) -> Optional[int]:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationPortRange":
            suggest = "destination_port_range"
        elif key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 destination_port_range: Optional['outputs.NetworkSecurityGroupSecurityRuleTcpOptionsDestinationPortRange'] = None,
                 source_port_range: Optional['outputs.NetworkSecurityGroupSecurityRuleTcpOptionsSourcePortRange'] = None):
        if destination_port_range is not None:
            pulumi.set(__self__, "destination_port_range", destination_port_range)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter(name="destinationPortRange")
    def destination_port_range(self) -> Optional['outputs.NetworkSecurityGroupSecurityRuleTcpOptionsDestinationPortRange']:
        return pulumi.get(self, "destination_port_range")

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.NetworkSecurityGroupSecurityRuleTcpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleTcpOptionsDestinationPortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationPortRange":
            suggest = "destination_port_range"
        elif key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 destination_port_range: Optional['outputs.NetworkSecurityGroupSecurityRuleUdpOptionsDestinationPortRange'] = None,
                 source_port_range: Optional['outputs.NetworkSecurityGroupSecurityRuleUdpOptionsSourcePortRange'] = None):
        if destination_port_range is not None:
            pulumi.set(__self__, "destination_port_range", destination_port_range)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter(name="destinationPortRange")
    def destination_port_range(self) -> Optional['outputs.NetworkSecurityGroupSecurityRuleUdpOptionsDestinationPortRange']:
        return pulumi.get(self, "destination_port_range")

    @property
    @pulumi.getter(name="sourcePortRange")
    def source_port_range(self) -> Optional['outputs.NetworkSecurityGroupSecurityRuleUdpOptionsSourcePortRange']:
        return pulumi.get(self, "source_port_range")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleUdpOptionsDestinationPortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class NetworkSecurityGroupSecurityRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number. 
               
               
               ** 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
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number. 


        ** 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, "min")


@pulumi.output_type
class RouteTableRouteRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "networkEntityId":
            suggest = "network_entity_id"
        elif key == "cidrBlock":
            suggest = "cidr_block"
        elif key == "destinationType":
            suggest = "destination_type"
        elif key == "routeType":
            suggest = "route_type"

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

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

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

    def __init__(__self__, *,
                 network_entity_id: str,
                 cidr_block: Optional[str] = None,
                 description: Optional[str] = None,
                 destination: Optional[str] = None,
                 destination_type: Optional[str] = None,
                 route_type: Optional[str] = None):
        """
        :param str network_entity_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the route rule's target. For information about the type of targets you can specify, see [Route Tables](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm).
        :param str cidr_block: (Updatable) Deprecated. Instead use `destination` and `destinationType`. Requests that include both `cidrBlock` and `destination` will be rejected.
               
               A destination IP address range in CIDR notation. Matching packets will be routed to the indicated network entity (the target).
               
               Cannot be an IPv6 CIDR.
               
               Example: `0.0.0.0/0`
        :param str description: (Updatable) An optional description of your choice for the rule.
        :param str destination: (Updatable) Conceptually, this is the range of IP addresses used for matching when routing traffic. Required if you provide a `destinationType`.
               
               Allowed values:
               * IP address range in CIDR notation. Can be an IPv4 or IPv6 CIDR. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56`. If you set this to an IPv6 CIDR, the route rule's target can only be a DRG or internet gateway. IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
               * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a route rule for traffic destined for a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        :param str destination_type: (Updatable) Type of destination for the rule. Required if you provide a `destination`.
        :param str route_type: (Updatable) A route rule can be STATIC if manually added to the route table, LOCAL if added by Oracle Cloud Infrastructure to the route table.
        """
        pulumi.set(__self__, "network_entity_id", network_entity_id)
        if cidr_block is not None:
            pulumi.set(__self__, "cidr_block", cidr_block)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination is not None:
            pulumi.set(__self__, "destination", destination)
        if destination_type is not None:
            pulumi.set(__self__, "destination_type", destination_type)
        if route_type is not None:
            pulumi.set(__self__, "route_type", route_type)

    @property
    @pulumi.getter(name="networkEntityId")
    def network_entity_id(self) -> str:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the route rule's target. For information about the type of targets you can specify, see [Route Tables](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm).
        """
        return pulumi.get(self, "network_entity_id")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> Optional[str]:
        """
        (Updatable) Deprecated. Instead use `destination` and `destinationType`. Requests that include both `cidrBlock` and `destination` will be rejected.

        A destination IP address range in CIDR notation. Matching packets will be routed to the indicated network entity (the target).

        Cannot be an IPv6 CIDR.

        Example: `0.0.0.0/0`
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        (Updatable) An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def destination(self) -> Optional[str]:
        """
        (Updatable) Conceptually, this is the range of IP addresses used for matching when routing traffic. Required if you provide a `destinationType`.

        Allowed values:
        * IP address range in CIDR notation. Can be an IPv4 or IPv6 CIDR. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56`. If you set this to an IPv6 CIDR, the route rule's target can only be a DRG or internet gateway. IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
        * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a route rule for traffic destined for a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> Optional[str]:
        """
        (Updatable) Type of destination for the rule. Required if you provide a `destination`.
        """
        return pulumi.get(self, "destination_type")

    @property
    @pulumi.getter(name="routeType")
    def route_type(self) -> Optional[str]:
        """
        (Updatable) A route rule can be STATIC if manually added to the route table, LOCAL if added by Oracle Cloud Infrastructure to the route table.
        """
        return pulumi.get(self, "route_type")


@pulumi.output_type
class SecurityListEgressSecurityRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "destinationType":
            suggest = "destination_type"
        elif key == "icmpOptions":
            suggest = "icmp_options"
        elif key == "tcpOptions":
            suggest = "tcp_options"
        elif key == "udpOptions":
            suggest = "udp_options"

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

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

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

    def __init__(__self__, *,
                 destination: str,
                 protocol: str,
                 description: Optional[str] = None,
                 destination_type: Optional[str] = None,
                 icmp_options: Optional['outputs.SecurityListEgressSecurityRuleIcmpOptions'] = None,
                 stateless: Optional[bool] = None,
                 tcp_options: Optional['outputs.SecurityListEgressSecurityRuleTcpOptions'] = None,
                 udp_options: Optional['outputs.SecurityListEgressSecurityRuleUdpOptions'] = None):
        """
        :param str destination: (Updatable) Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.
               
               Allowed values:
               * IP address range in CIDR notation. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56` Note that IPv6 addressing is currently supported only in certain regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
               * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a security list rule for traffic destined for a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        :param str protocol: (Updatable) The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        :param str description: (Updatable) An optional description of your choice for the rule.
        :param str destination_type: (Updatable) Type of destination for the rule. The default is `CIDR_BLOCK`.
               
               Allowed values:
        :param 'SecurityListEgressSecurityRuleIcmpOptionsArgs' icmp_options: (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
               
               If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        :param bool stateless: (Updatable) A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        :param 'SecurityListEgressSecurityRuleTcpOptionsArgs' tcp_options: (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param 'SecurityListEgressSecurityRuleUdpOptionsArgs' udp_options: (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "protocol", protocol)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if destination_type is not None:
            pulumi.set(__self__, "destination_type", destination_type)
        if icmp_options is not None:
            pulumi.set(__self__, "icmp_options", icmp_options)
        if stateless is not None:
            pulumi.set(__self__, "stateless", stateless)
        if tcp_options is not None:
            pulumi.set(__self__, "tcp_options", tcp_options)
        if udp_options is not None:
            pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter
    def destination(self) -> str:
        """
        (Updatable) Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.

        Allowed values:
        * IP address range in CIDR notation. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56` Note that IPv6 addressing is currently supported only in certain regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
        * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a security list rule for traffic destined for a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        (Updatable) The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        (Updatable) An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> Optional[str]:
        """
        (Updatable) Type of destination for the rule. The default is `CIDR_BLOCK`.

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

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Optional['outputs.SecurityListEgressSecurityRuleIcmpOptions']:
        """
        (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)

        If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def stateless(self) -> Optional[bool]:
        """
        (Updatable) A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        """
        return pulumi.get(self, "stateless")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Optional['outputs.SecurityListEgressSecurityRuleTcpOptions']:
        """
        (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Optional['outputs.SecurityListEgressSecurityRuleUdpOptions']:
        """
        (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class SecurityListEgressSecurityRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        """
        :param int type: (Updatable) The ICMP type.
        :param int code: (Updatable) The ICMP code (optional).
        """
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        (Updatable) The ICMP type.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def code(self) -> Optional[int]:
        """
        (Updatable) The ICMP code (optional).
        """
        return pulumi.get(self, "code")


@pulumi.output_type
class SecurityListEgressSecurityRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.SecurityListEgressSecurityRuleTcpOptionsSourcePortRange'] = None):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        :param 'SecurityListEgressSecurityRuleTcpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter
    def max(self) -> Optional[int]:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> Optional[int]:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

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


@pulumi.output_type
class SecurityListEgressSecurityRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class SecurityListEgressSecurityRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.SecurityListEgressSecurityRuleUdpOptionsSourcePortRange'] = None):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        :param 'SecurityListEgressSecurityRuleUdpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter
    def max(self) -> Optional[int]:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> Optional[int]:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

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


@pulumi.output_type
class SecurityListEgressSecurityRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class SecurityListIngressSecurityRule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "icmpOptions":
            suggest = "icmp_options"
        elif key == "sourceType":
            suggest = "source_type"
        elif key == "tcpOptions":
            suggest = "tcp_options"
        elif key == "udpOptions":
            suggest = "udp_options"

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

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

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

    def __init__(__self__, *,
                 protocol: str,
                 source: str,
                 description: Optional[str] = None,
                 icmp_options: Optional['outputs.SecurityListIngressSecurityRuleIcmpOptions'] = None,
                 source_type: Optional[str] = None,
                 stateless: Optional[bool] = None,
                 tcp_options: Optional['outputs.SecurityListIngressSecurityRuleTcpOptions'] = None,
                 udp_options: Optional['outputs.SecurityListIngressSecurityRuleUdpOptions'] = None):
        """
        :param str protocol: (Updatable) The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        :param str source: (Updatable) Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.
               
               Allowed values:
               * IP address range in CIDR notation. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56`. IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
               * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a security list rule for traffic coming from a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        :param str description: (Updatable) An optional description of your choice for the rule.
        :param 'SecurityListIngressSecurityRuleIcmpOptionsArgs' icmp_options: (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
               
               If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        :param str source_type: (Updatable) Type of source for the rule. The default is `CIDR_BLOCK`.
        :param bool stateless: (Updatable) A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        :param 'SecurityListIngressSecurityRuleTcpOptionsArgs' tcp_options: (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param 'SecurityListIngressSecurityRuleUdpOptionsArgs' udp_options: (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "source", source)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if icmp_options is not None:
            pulumi.set(__self__, "icmp_options", icmp_options)
        if source_type is not None:
            pulumi.set(__self__, "source_type", source_type)
        if stateless is not None:
            pulumi.set(__self__, "stateless", stateless)
        if tcp_options is not None:
            pulumi.set(__self__, "tcp_options", tcp_options)
        if udp_options is not None:
            pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        (Updatable) The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter
    def source(self) -> str:
        """
        (Updatable) Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.

        Allowed values:
        * IP address range in CIDR notation. For example: `192.168.1.0/24` or `2001:0db8:0123:45::/56`. IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
        * The `cidrBlock` value for a [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/), if you're setting up a security list rule for traffic coming from a particular `Service` through a service gateway. For example: `oci-phx-objectstorage`.
        """
        return pulumi.get(self, "source")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        (Updatable) An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Optional['outputs.SecurityListIngressSecurityRuleIcmpOptions']:
        """
        (Updatable) Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)

        If you specify ICMP or ICMPv6 as the protocol but omit this object, then all ICMP types and codes are allowed. If you do provide this object, the type is required and the code is optional. To enable MTU negotiation for ingress internet traffic via IPv4, make sure to allow type 3 ("Destination Unreachable") code 4 ("Fragmentation Needed and Don't Fragment was Set"). If you need to specify multiple codes for a single type, create a separate security list rule for each.
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> Optional[str]:
        """
        (Updatable) Type of source for the rule. The default is `CIDR_BLOCK`.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter
    def stateless(self) -> Optional[bool]:
        """
        (Updatable) A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        """
        return pulumi.get(self, "stateless")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Optional['outputs.SecurityListIngressSecurityRuleTcpOptions']:
        """
        (Updatable) Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Optional['outputs.SecurityListIngressSecurityRuleUdpOptions']:
        """
        (Updatable) Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class SecurityListIngressSecurityRuleIcmpOptions(dict):
    def __init__(__self__, *,
                 type: int,
                 code: Optional[int] = None):
        """
        :param int type: (Updatable) The ICMP type.
        :param int code: (Updatable) The ICMP code (optional).
        """
        pulumi.set(__self__, "type", type)
        if code is not None:
            pulumi.set(__self__, "code", code)

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        (Updatable) The ICMP type.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def code(self) -> Optional[int]:
        """
        (Updatable) The ICMP code (optional).
        """
        return pulumi.get(self, "code")


@pulumi.output_type
class SecurityListIngressSecurityRuleTcpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.SecurityListIngressSecurityRuleTcpOptionsSourcePortRange'] = None):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        :param 'SecurityListIngressSecurityRuleTcpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter
    def max(self) -> Optional[int]:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> Optional[int]:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

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


@pulumi.output_type
class SecurityListIngressSecurityRuleTcpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class SecurityListIngressSecurityRuleUdpOptions(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "sourcePortRange":
            suggest = "source_port_range"

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

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

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

    def __init__(__self__, *,
                 max: Optional[int] = None,
                 min: Optional[int] = None,
                 source_port_range: Optional['outputs.SecurityListIngressSecurityRuleUdpOptionsSourcePortRange'] = None):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        :param 'SecurityListIngressSecurityRuleUdpOptionsSourcePortRangeArgs' source_port_range: (Updatable)
        """
        if max is not None:
            pulumi.set(__self__, "max", max)
        if min is not None:
            pulumi.set(__self__, "min", min)
        if source_port_range is not None:
            pulumi.set(__self__, "source_port_range", source_port_range)

    @property
    @pulumi.getter
    def max(self) -> Optional[int]:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> Optional[int]:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

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


@pulumi.output_type
class SecurityListIngressSecurityRuleUdpOptionsSourcePortRange(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        (Updatable) The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        (Updatable) The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class ServiceGatewayService(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "serviceId":
            suggest = "service_id"
        elif key == "serviceName":
            suggest = "service_name"

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

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

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

    def __init__(__self__, *,
                 service_id: str,
                 service_name: Optional[str] = None):
        """
        :param str service_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/).
        :param str service_name: The name of the service.
        """
        pulumi.set(__self__, "service_id", service_id)
        if service_name is not None:
            pulumi.set(__self__, "service_name", service_name)

    @property
    @pulumi.getter(name="serviceId")
    def service_id(self) -> str:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/).
        """
        return pulumi.get(self, "service_id")

    @property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> Optional[str]:
        """
        The name of the service.
        """
        return pulumi.get(self, "service_name")


@pulumi.output_type
class VcnByoipv6cidrDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "byoipv6rangeId":
            suggest = "byoipv6range_id"
        elif key == "ipv6cidrBlock":
            suggest = "ipv6cidr_block"

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

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

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

    def __init__(__self__, *,
                 byoipv6range_id: str,
                 ipv6cidr_block: str):
        """
        :param str byoipv6range_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource to which the CIDR block belongs.
        :param str ipv6cidr_block: An IPv6 CIDR block required to create a VCN with a BYOIP prefix. It could be the whole CIDR block identified in `byoipv6RangeId`, or a subrange. Example: `2001:0db8:0123::/48`
        """
        pulumi.set(__self__, "byoipv6range_id", byoipv6range_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)

    @property
    @pulumi.getter(name="byoipv6rangeId")
    def byoipv6range_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource to which the CIDR block belongs.
        """
        return pulumi.get(self, "byoipv6range_id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        """
        An IPv6 CIDR block required to create a VCN with a BYOIP prefix. It could be the whole CIDR block identified in `byoipv6RangeId`, or a subrange. Example: `2001:0db8:0123::/48`
        """
        return pulumi.get(self, "ipv6cidr_block")


@pulumi.output_type
class VirtualCircuitCrossConnectMapping(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "bgpMd5authKey":
            suggest = "bgp_md5auth_key"
        elif key == "crossConnectOrCrossConnectGroupId":
            suggest = "cross_connect_or_cross_connect_group_id"
        elif key == "customerBgpPeeringIp":
            suggest = "customer_bgp_peering_ip"
        elif key == "customerBgpPeeringIpv6":
            suggest = "customer_bgp_peering_ipv6"
        elif key == "oracleBgpPeeringIp":
            suggest = "oracle_bgp_peering_ip"
        elif key == "oracleBgpPeeringIpv6":
            suggest = "oracle_bgp_peering_ipv6"

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

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

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

    def __init__(__self__, *,
                 bgp_md5auth_key: Optional[str] = None,
                 cross_connect_or_cross_connect_group_id: Optional[str] = None,
                 customer_bgp_peering_ip: Optional[str] = None,
                 customer_bgp_peering_ipv6: Optional[str] = None,
                 oracle_bgp_peering_ip: Optional[str] = None,
                 oracle_bgp_peering_ipv6: Optional[str] = None,
                 vlan: Optional[int] = None):
        """
        :param str bgp_md5auth_key: (Updatable) The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        :param str cross_connect_or_cross_connect_group_id: (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        :param str customer_bgp_peering_ip: (Updatable) The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.
               
               There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv4 addresses.
               
               Example: `10.0.0.18/31`
        :param str customer_bgp_peering_ipv6: (Updatable) IPv6 is currently supported only in the Government Cloud. The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.
               
               There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv6 addresses.
               
               IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
               
               Example: `2001:db8::1/64`
        :param str oracle_bgp_peering_ip: (Updatable) The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
               
               There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv4 addresses.
               
               Example: `10.0.0.19/31`
        :param str oracle_bgp_peering_ipv6: (Updatable) IPv6 is currently supported only in the Government Cloud. The IPv6 address for Oracle's end of the BGP session.  Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
               
               There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv6 addresses.
               
               Note that IPv6 addressing is currently supported only in certain regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).
               
               Example: `2001:db8::2/64`
        :param int vlan: (Updatable) The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        if bgp_md5auth_key is not None:
            pulumi.set(__self__, "bgp_md5auth_key", bgp_md5auth_key)
        if cross_connect_or_cross_connect_group_id is not None:
            pulumi.set(__self__, "cross_connect_or_cross_connect_group_id", cross_connect_or_cross_connect_group_id)
        if customer_bgp_peering_ip is not None:
            pulumi.set(__self__, "customer_bgp_peering_ip", customer_bgp_peering_ip)
        if customer_bgp_peering_ipv6 is not None:
            pulumi.set(__self__, "customer_bgp_peering_ipv6", customer_bgp_peering_ipv6)
        if oracle_bgp_peering_ip is not None:
            pulumi.set(__self__, "oracle_bgp_peering_ip", oracle_bgp_peering_ip)
        if oracle_bgp_peering_ipv6 is not None:
            pulumi.set(__self__, "oracle_bgp_peering_ipv6", oracle_bgp_peering_ipv6)
        if vlan is not None:
            pulumi.set(__self__, "vlan", vlan)

    @property
    @pulumi.getter(name="bgpMd5authKey")
    def bgp_md5auth_key(self) -> Optional[str]:
        """
        (Updatable) The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        """
        return pulumi.get(self, "bgp_md5auth_key")

    @property
    @pulumi.getter(name="crossConnectOrCrossConnectGroupId")
    def cross_connect_or_cross_connect_group_id(self) -> Optional[str]:
        """
        (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        """
        return pulumi.get(self, "cross_connect_or_cross_connect_group_id")

    @property
    @pulumi.getter(name="customerBgpPeeringIp")
    def customer_bgp_peering_ip(self) -> Optional[str]:
        """
        (Updatable) The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.

        There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv4 addresses.

        Example: `10.0.0.18/31`
        """
        return pulumi.get(self, "customer_bgp_peering_ip")

    @property
    @pulumi.getter(name="customerBgpPeeringIpv6")
    def customer_bgp_peering_ipv6(self) -> Optional[str]:
        """
        (Updatable) IPv6 is currently supported only in the Government Cloud. The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.

        There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv6 addresses.

        IPv6 addressing is supported for all commercial and government regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).

        Example: `2001:db8::1/64`
        """
        return pulumi.get(self, "customer_bgp_peering_ipv6")

    @property
    @pulumi.getter(name="oracleBgpPeeringIp")
    def oracle_bgp_peering_ip(self) -> Optional[str]:
        """
        (Updatable) The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.

        There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv4 addresses.

        Example: `10.0.0.19/31`
        """
        return pulumi.get(self, "oracle_bgp_peering_ip")

    @property
    @pulumi.getter(name="oracleBgpPeeringIpv6")
    def oracle_bgp_peering_ipv6(self) -> Optional[str]:
        """
        (Updatable) IPv6 is currently supported only in the Government Cloud. The IPv6 address for Oracle's end of the BGP session.  Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.

        There's one exception: for a public virtual circuit, Oracle specifies the BGP IPv6 addresses.

        Note that IPv6 addressing is currently supported only in certain regions. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).

        Example: `2001:db8::2/64`
        """
        return pulumi.get(self, "oracle_bgp_peering_ipv6")

    @property
    @pulumi.getter
    def vlan(self) -> Optional[int]:
        """
        (Updatable) The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        return pulumi.get(self, "vlan")


@pulumi.output_type
class VirtualCircuitPublicPrefix(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "cidrBlock":
            suggest = "cidr_block"

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

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

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

    def __init__(__self__, *,
                 cidr_block: str):
        """
        :param str cidr_block: (Updatable) An individual public IP prefix (CIDR) to add to the public virtual circuit. All prefix sizes are allowed.
        """
        pulumi.set(__self__, "cidr_block", cidr_block)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        (Updatable) An individual public IP prefix (CIDR) to add to the public virtual circuit. All prefix sizes are allowed.
        """
        return pulumi.get(self, "cidr_block")


@pulumi.output_type
class VirtualNetworkByoipv6cidrDetail(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "byoipv6rangeId":
            suggest = "byoipv6range_id"
        elif key == "ipv6cidrBlock":
            suggest = "ipv6cidr_block"

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

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

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

    def __init__(__self__, *,
                 byoipv6range_id: str,
                 ipv6cidr_block: str):
        pulumi.set(__self__, "byoipv6range_id", byoipv6range_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)

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

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


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

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

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

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

    def __init__(__self__, *,
                 assign_private_dns_record: Optional[bool] = None,
                 assign_public_ip: Optional[str] = None,
                 defined_tags: Optional[Mapping[str, Any]] = None,
                 display_name: Optional[str] = None,
                 freeform_tags: Optional[Mapping[str, Any]] = None,
                 hostname_label: Optional[str] = None,
                 nsg_ids: Optional[Sequence[str]] = None,
                 private_ip: Optional[str] = None,
                 skip_source_dest_check: Optional[bool] = None,
                 subnet_id: Optional[str] = None,
                 vlan_id: Optional[str] = None):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a DNS record. If set to false, no DNS record registion for the VNIC; if set to true, DNS record will be registered. Example: `true`
               
               If you specify a `hostnameLabel`, the `assignPrivateDnsRecord` is require to be set to true.
        :param str assign_public_ip: Whether the VNIC should be assigned a public IP address. Defaults to whether the subnet is public or private. If not set and the VNIC is being created in a private subnet (that is, where `prohibitPublicIpOnVnic` = true in the [Subnet](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Subnet/)), then no public IP address is assigned. If not set and the subnet is public (`prohibitPublicIpOnVnic` = false), then a public IP address is assigned. If set to true and `prohibitPublicIpOnVnic` = true, an error is returned.
               
               **Note:** This public IP address is associated with the primary private IP on the VNIC. For more information, see [IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingIPaddresses.htm).
               
               **Note:** There's a limit to the number of [public IPs](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PublicIp/) a VNIC or instance can have. If you try to create a secondary VNIC with an assigned public IP for an instance that has already reached its public IP limit, an error is returned. For information about the public IP limits, see [Public IP Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingpublicIPs.htm).
               
               Example: `false`
               
               If you specify a `vlanId`, then `assignPublicIp` must be set to false. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param Mapping[str, Any] defined_tags: (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: (Updatable) The hostname for the VNIC's primary private IP. Used for DNS. The value is the hostname portion of the primary private IP's fully qualified domain name (FQDN) (for example, `bminstance1` in FQDN `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be unique across all VNICs in the subnet and comply with [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). 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).
               
               For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).
               
               When launching an instance, use this `hostnameLabel` instead of the deprecated `hostnameLabel` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). If you provide both, the values must match.
               
               Example: `bminstance1`
               
               If you specify a `vlanId`, the `hostnameLabel` cannot be specified. VNICs on a VLAN can not be assigned a hostname. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param Sequence[str] nsg_ids: (Updatable) A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
               
               If a `vlanId` is specified, the `nsgIds` cannot be specified. The `vlanId` indicates that the VNIC will belong to a VLAN instead of a subnet. With VLANs, all VNICs in the VLAN belong to the NSGs that are associated with the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. Must be an available IP address within the subnet's CIDR. If you don't specify a value, Oracle automatically assigns a private IP address from the subnet. This is the VNIC's *primary* private IP address. The value appears in the [Vnic](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vnic/) object and also the [PrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/) object returned by [ListPrivateIps](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/ListPrivateIps) and [GetPrivateIp](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/PrivateIp/GetPrivateIp).
               
               If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `10.0.3.3`
        :param bool skip_source_dest_check: (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you would skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip).
               
               If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Example: `true`
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC in. 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 a `vlanId` and `subnetId`, the request fails.
        :param str vlan_id: Provide this attribute only if you are an Oracle Cloud VMware Solution customer and creating a secondary VNIC in a VLAN. The value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
               
               Provide a `vlanId` instead of a `subnetId`. If you provide both a `vlanId` and `subnetId`, the request fails.
        """
        if assign_private_dns_record is not None:
            pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        if assign_public_ip is not None:
            pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        if defined_tags is not None:
            pulumi.set(__self__, "defined_tags", defined_tags)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if freeform_tags is not None:
            pulumi.set(__self__, "freeform_tags", freeform_tags)
        if hostname_label is not None:
            pulumi.set(__self__, "hostname_label", hostname_label)
        if nsg_ids is not None:
            pulumi.set(__self__, "nsg_ids", nsg_ids)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if skip_source_dest_check is not None:
            pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        if subnet_id is not None:
            pulumi.set(__self__, "subnet_id", subnet_id)
        if vlan_id is not None:
            pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> Optional[bool]:
        """
        Whether the VNIC should be assigned a DNS record. If set to false, no DNS record registion for the VNIC; if set to true, DNS record will be registered. Example: `true`

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

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

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

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

        Example: `false`

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Optional[Mapping[str, Any]]:
        """
        (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> Optional[str]:
        """
        (Updatable) The hostname for the VNIC's primary private IP. Used for DNS. The value is the hostname portion of the primary private IP's fully qualified domain name (FQDN) (for example, `bminstance1` in FQDN `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be unique across all VNICs in the subnet and comply with [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). 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).

        For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).

        When launching an instance, use this `hostnameLabel` instead of the deprecated `hostnameLabel` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/requests/LaunchInstanceDetails). If you provide both, the values must match.

        Example: `bminstance1`

        If you specify a `vlanId`, the `hostnameLabel` cannot be specified. VNICs on a VLAN can not be assigned a hostname. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "hostname_label")

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet to create the VNIC in. 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 a `vlanId` and `subnetId`, the request fails.
        """
        return pulumi.get(self, "subnet_id")

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

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


@pulumi.output_type
class VolumeAttachmentMultipathDevice(dict):
    def __init__(__self__, *,
                 ipv4: Optional[str] = None,
                 iqn: Optional[str] = None,
                 port: Optional[int] = None):
        """
        :param str ipv4: The volume's iSCSI IP address.  Example: `169.254.2.2`
        :param str iqn: The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        :param int port: The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        """
        if ipv4 is not None:
            pulumi.set(__self__, "ipv4", ipv4)
        if iqn is not None:
            pulumi.set(__self__, "iqn", iqn)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ipv4(self) -> Optional[str]:
        """
        The volume's iSCSI IP address.  Example: `169.254.2.2`
        """
        return pulumi.get(self, "ipv4")

    @property
    @pulumi.getter
    def iqn(self) -> Optional[str]:
        """
        The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        """
        return pulumi.get(self, "iqn")

    @property
    @pulumi.getter
    def port(self) -> Optional[int]:
        """
        The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        """
        return pulumi.get(self, "port")


@pulumi.output_type
class VolumeAutotunePolicy(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "autotuneType":
            suggest = "autotune_type"
        elif key == "maxVpusPerGb":
            suggest = "max_vpus_per_gb"

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

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

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

    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: Optional[str] = None):
        """
        :param str autotune_type: (Updatable) This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: (Updatable) This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        if max_vpus_per_gb is not None:
            pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        (Updatable) This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> Optional[str]:
        """
        (Updatable) This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class VolumeBackupPolicySchedule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "backupType":
            suggest = "backup_type"
        elif key == "retentionSeconds":
            suggest = "retention_seconds"
        elif key == "dayOfMonth":
            suggest = "day_of_month"
        elif key == "dayOfWeek":
            suggest = "day_of_week"
        elif key == "hourOfDay":
            suggest = "hour_of_day"
        elif key == "offsetSeconds":
            suggest = "offset_seconds"
        elif key == "offsetType":
            suggest = "offset_type"
        elif key == "timeZone":
            suggest = "time_zone"

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

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

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

    def __init__(__self__, *,
                 backup_type: str,
                 period: str,
                 retention_seconds: int,
                 day_of_month: Optional[int] = None,
                 day_of_week: Optional[str] = None,
                 hour_of_day: Optional[int] = None,
                 month: Optional[str] = None,
                 offset_seconds: Optional[int] = None,
                 offset_type: Optional[str] = None,
                 time_zone: Optional[str] = None):
        """
        :param str backup_type: (Updatable) The type of volume backup to create.
        :param str period: (Updatable) The volume backup frequency.
        :param int retention_seconds: (Updatable) How long, in seconds, to keep the volume backups created by this schedule.
        :param int day_of_month: (Updatable) The day of the month to schedule the volume backup.
        :param str day_of_week: (Updatable) The day of the week to schedule the volume backup.
        :param int hour_of_day: (Updatable) The hour of the day to schedule the volume backup.
        :param str month: (Updatable) The month of the year to schedule the volume backup.
        :param int offset_seconds: (Updatable) The number of seconds that the volume backup start time should be shifted from the default interval boundaries specified by the period. The volume backup start time is the frequency start time plus the offset.
        :param str offset_type: (Updatable) Indicates how the offset is defined. If value is `STRUCTURED`, then `hourOfDay`, `dayOfWeek`, `dayOfMonth`, and `month` fields are used and `offsetSeconds` will be ignored in requests and users should ignore its value from the responses.
               
               `hourOfDay` is applicable for periods `ONE_DAY`, `ONE_WEEK`, `ONE_MONTH` and `ONE_YEAR`.
               
               `dayOfWeek` is applicable for period `ONE_WEEK`.
               
               `dayOfMonth` is applicable for periods `ONE_MONTH` and `ONE_YEAR`.
               
               'month' is applicable for period 'ONE_YEAR'.
               
               They will be ignored in the requests for inapplicable periods.
               
               If value is `NUMERIC_SECONDS`, then `offsetSeconds` will be used for both requests and responses and the structured fields will be ignored in the requests and users should ignore their values from the responses.
               
               For clients using older versions of Apis and not sending `offsetType` in their requests, the behaviour is just like `NUMERIC_SECONDS`.
        :param str time_zone: (Updatable) Specifies what time zone is the schedule in
               enum:
        """
        pulumi.set(__self__, "backup_type", backup_type)
        pulumi.set(__self__, "period", period)
        pulumi.set(__self__, "retention_seconds", retention_seconds)
        if day_of_month is not None:
            pulumi.set(__self__, "day_of_month", day_of_month)
        if day_of_week is not None:
            pulumi.set(__self__, "day_of_week", day_of_week)
        if hour_of_day is not None:
            pulumi.set(__self__, "hour_of_day", hour_of_day)
        if month is not None:
            pulumi.set(__self__, "month", month)
        if offset_seconds is not None:
            pulumi.set(__self__, "offset_seconds", offset_seconds)
        if offset_type is not None:
            pulumi.set(__self__, "offset_type", offset_type)
        if time_zone is not None:
            pulumi.set(__self__, "time_zone", time_zone)

    @property
    @pulumi.getter(name="backupType")
    def backup_type(self) -> str:
        """
        (Updatable) The type of volume backup to create.
        """
        return pulumi.get(self, "backup_type")

    @property
    @pulumi.getter
    def period(self) -> str:
        """
        (Updatable) The volume backup frequency.
        """
        return pulumi.get(self, "period")

    @property
    @pulumi.getter(name="retentionSeconds")
    def retention_seconds(self) -> int:
        """
        (Updatable) How long, in seconds, to keep the volume backups created by this schedule.
        """
        return pulumi.get(self, "retention_seconds")

    @property
    @pulumi.getter(name="dayOfMonth")
    def day_of_month(self) -> Optional[int]:
        """
        (Updatable) The day of the month to schedule the volume backup.
        """
        return pulumi.get(self, "day_of_month")

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> Optional[str]:
        """
        (Updatable) The day of the week to schedule the volume backup.
        """
        return pulumi.get(self, "day_of_week")

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> Optional[int]:
        """
        (Updatable) The hour of the day to schedule the volume backup.
        """
        return pulumi.get(self, "hour_of_day")

    @property
    @pulumi.getter
    def month(self) -> Optional[str]:
        """
        (Updatable) The month of the year to schedule the volume backup.
        """
        return pulumi.get(self, "month")

    @property
    @pulumi.getter(name="offsetSeconds")
    def offset_seconds(self) -> Optional[int]:
        """
        (Updatable) The number of seconds that the volume backup start time should be shifted from the default interval boundaries specified by the period. The volume backup start time is the frequency start time plus the offset.
        """
        return pulumi.get(self, "offset_seconds")

    @property
    @pulumi.getter(name="offsetType")
    def offset_type(self) -> Optional[str]:
        """
        (Updatable) Indicates how the offset is defined. If value is `STRUCTURED`, then `hourOfDay`, `dayOfWeek`, `dayOfMonth`, and `month` fields are used and `offsetSeconds` will be ignored in requests and users should ignore its value from the responses.

        `hourOfDay` is applicable for periods `ONE_DAY`, `ONE_WEEK`, `ONE_MONTH` and `ONE_YEAR`.

        `dayOfWeek` is applicable for period `ONE_WEEK`.

        `dayOfMonth` is applicable for periods `ONE_MONTH` and `ONE_YEAR`.

        'month' is applicable for period 'ONE_YEAR'.

        They will be ignored in the requests for inapplicable periods.

        If value is `NUMERIC_SECONDS`, then `offsetSeconds` will be used for both requests and responses and the structured fields will be ignored in the requests and users should ignore their values from the responses.

        For clients using older versions of Apis and not sending `offsetType` in their requests, the behaviour is just like `NUMERIC_SECONDS`.
        """
        return pulumi.get(self, "offset_type")

    @property
    @pulumi.getter(name="timeZone")
    def time_zone(self) -> Optional[str]:
        """
        (Updatable) Specifies what time zone is the schedule in
        enum:
        """
        return pulumi.get(self, "time_zone")


@pulumi.output_type
class VolumeBackupSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeBackupId":
            suggest = "volume_backup_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"

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

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

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

    def __init__(__self__, *,
                 region: str,
                 volume_backup_id: str,
                 kms_key_id: Optional[str] = None):
        """
        :param str region: The region of the volume backup source.
        :param str volume_backup_id: The OCID of the source volume backup.
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str kms_key_id: The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "volume_backup_id", volume_backup_id)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of the volume backup source.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="volumeBackupId")
    def volume_backup_id(self) -> str:
        """
        The OCID of the source volume backup.


        ** 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, "volume_backup_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        return pulumi.get(self, "kms_key_id")


@pulumi.output_type
class VolumeBlockVolumeReplica(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "blockVolumeReplicaId":
            suggest = "block_volume_replica_id"
        elif key == "displayName":
            suggest = "display_name"

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

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

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

    def __init__(__self__, *,
                 availability_domain: str,
                 block_volume_replica_id: Optional[str] = None,
                 display_name: Optional[str] = None):
        """
        :param str availability_domain: (Updatable) The availability domain of the block volume replica.  Example: `Uocm:PHX-AD-1`
        :param str block_volume_replica_id: The block volume replica's Oracle ID (OCID).
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        if block_volume_replica_id is not None:
            pulumi.set(__self__, "block_volume_replica_id", block_volume_replica_id)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)

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

    @property
    @pulumi.getter(name="blockVolumeReplicaId")
    def block_volume_replica_id(self) -> Optional[str]:
        """
        The block volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "block_volume_replica_id")

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


@pulumi.output_type
class VolumeGroupBackupSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeGroupBackupId":
            suggest = "volume_group_backup_id"
        elif key == "kmsKeyId":
            suggest = "kms_key_id"

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

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

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

    def __init__(__self__, *,
                 region: str,
                 volume_group_backup_id: str,
                 kms_key_id: Optional[str] = None):
        """
        :param str region: The region of the volume backup source.
        :param str volume_group_backup_id: The OCID of the source volume group backup.
               
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str kms_key_id: The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "volume_group_backup_id", volume_group_backup_id)
        if kms_key_id is not None:
            pulumi.set(__self__, "kms_key_id", kms_key_id)

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region of the volume backup source.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="volumeGroupBackupId")
    def volume_group_backup_id(self) -> str:
        """
        The OCID of the source volume group backup.



        ** 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, "volume_group_backup_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> Optional[str]:
        """
        The OCID of the KMS key in the destination region which will be the master encryption key for the copied volume backup.
        """
        return pulumi.get(self, "kms_key_id")


@pulumi.output_type
class VolumeGroupSourceDetails(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "volumeGroupBackupId":
            suggest = "volume_group_backup_id"
        elif key == "volumeGroupId":
            suggest = "volume_group_id"
        elif key == "volumeGroupReplicaId":
            suggest = "volume_group_replica_id"
        elif key == "volumeIds":
            suggest = "volume_ids"

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

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

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

    def __init__(__self__, *,
                 type: str,
                 volume_group_backup_id: Optional[str] = None,
                 volume_group_id: Optional[str] = None,
                 volume_group_replica_id: Optional[str] = None,
                 volume_ids: Optional[Sequence[str]] = None):
        """
        :param str type: The type can be one of these values: `volumeGroupBackupId`, `volumeGroupId`, `volumeGroupReplicaId`, `volumeIds`
        :param str volume_group_backup_id: The OCID of the volume group backup to restore from.
        :param str volume_group_id: The OCID of the volume group to clone from.
        :param str volume_group_replica_id: The OCID of the volume group replica.
        :param Sequence[str] volume_ids: OCIDs for the volumes in this volume group.
        """
        pulumi.set(__self__, "type", type)
        if volume_group_backup_id is not None:
            pulumi.set(__self__, "volume_group_backup_id", volume_group_backup_id)
        if volume_group_id is not None:
            pulumi.set(__self__, "volume_group_id", volume_group_id)
        if volume_group_replica_id is not None:
            pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)
        if volume_ids is not None:
            pulumi.set(__self__, "volume_ids", volume_ids)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `volumeGroupBackupId`, `volumeGroupId`, `volumeGroupReplicaId`, `volumeIds`
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="volumeGroupBackupId")
    def volume_group_backup_id(self) -> Optional[str]:
        """
        The OCID of the volume group backup to restore from.
        """
        return pulumi.get(self, "volume_group_backup_id")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> Optional[str]:
        """
        The OCID of the volume group to clone from.
        """
        return pulumi.get(self, "volume_group_id")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> Optional[str]:
        """
        The OCID of the volume group replica.
        """
        return pulumi.get(self, "volume_group_replica_id")

    @property
    @pulumi.getter(name="volumeIds")
    def volume_ids(self) -> Optional[Sequence[str]]:
        """
        OCIDs for the volumes in this volume group.
        """
        return pulumi.get(self, "volume_ids")


@pulumi.output_type
class VolumeGroupVolumeGroupReplica(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "availabilityDomain":
            suggest = "availability_domain"
        elif key == "displayName":
            suggest = "display_name"
        elif key == "volumeGroupReplicaId":
            suggest = "volume_group_replica_id"

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

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

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

    def __init__(__self__, *,
                 availability_domain: str,
                 display_name: Optional[str] = None,
                 volume_group_replica_id: Optional[str] = None):
        """
        :param str availability_domain: (Updatable) The availability domain of the volume group replica.  Example: `Uocm:PHX-AD-1`
        :param str display_name: (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. 
               
               
               ** IMPORTANT **
               Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
        :param str volume_group_replica_id: The OCID of the volume group replica.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        if display_name is not None:
            pulumi.set(__self__, "display_name", display_name)
        if volume_group_replica_id is not None:
            pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)

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

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


        ** 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, "display_name")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> Optional[str]:
        """
        The OCID of the volume group replica.
        """
        return pulumi.get(self, "volume_group_replica_id")


@pulumi.output_type
class VolumeSourceDetails(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the block volume replica.
        :param str type: The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the block volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetAppCatalogListingResourceVersionsAppCatalogListingResourceVersionResult(dict):
    def __init__(__self__, *,
                 accessible_ports: Sequence[int],
                 allowed_actions: Sequence[str],
                 available_regions: Sequence[str],
                 compatible_shapes: Sequence[str],
                 listing_id: str,
                 listing_resource_id: str,
                 listing_resource_version: str,
                 time_published: str):
        """
        :param Sequence[int] accessible_ports: List of accessible ports for instances launched with this listing resource version.
        :param Sequence[str] allowed_actions: Allowed actions for the listing resource.
        :param Sequence[str] available_regions: List of regions that this listing resource version is available.
        :param Sequence[str] compatible_shapes: Array of shapes compatible with this resource.
        :param str listing_id: The OCID of the listing.
        :param str listing_resource_id: OCID of the listing resource.
        :param str listing_resource_version: Resource Version.
        :param str time_published: Date and time the listing resource version was published, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        pulumi.set(__self__, "accessible_ports", accessible_ports)
        pulumi.set(__self__, "allowed_actions", allowed_actions)
        pulumi.set(__self__, "available_regions", available_regions)
        pulumi.set(__self__, "compatible_shapes", compatible_shapes)
        pulumi.set(__self__, "listing_id", listing_id)
        pulumi.set(__self__, "listing_resource_id", listing_resource_id)
        pulumi.set(__self__, "listing_resource_version", listing_resource_version)
        pulumi.set(__self__, "time_published", time_published)

    @property
    @pulumi.getter(name="accessiblePorts")
    def accessible_ports(self) -> Sequence[int]:
        """
        List of accessible ports for instances launched with this listing resource version.
        """
        return pulumi.get(self, "accessible_ports")

    @property
    @pulumi.getter(name="allowedActions")
    def allowed_actions(self) -> Sequence[str]:
        """
        Allowed actions for the listing resource.
        """
        return pulumi.get(self, "allowed_actions")

    @property
    @pulumi.getter(name="availableRegions")
    def available_regions(self) -> Sequence[str]:
        """
        List of regions that this listing resource version is available.
        """
        return pulumi.get(self, "available_regions")

    @property
    @pulumi.getter(name="compatibleShapes")
    def compatible_shapes(self) -> Sequence[str]:
        """
        Array of shapes compatible with this resource.
        """
        return pulumi.get(self, "compatible_shapes")

    @property
    @pulumi.getter(name="listingId")
    def listing_id(self) -> str:
        """
        The OCID of the listing.
        """
        return pulumi.get(self, "listing_id")

    @property
    @pulumi.getter(name="listingResourceId")
    def listing_resource_id(self) -> str:
        """
        OCID of the listing resource.
        """
        return pulumi.get(self, "listing_resource_id")

    @property
    @pulumi.getter(name="listingResourceVersion")
    def listing_resource_version(self) -> str:
        """
        Resource Version.
        """
        return pulumi.get(self, "listing_resource_version")

    @property
    @pulumi.getter(name="timePublished")
    def time_published(self) -> str:
        """
        Date and time the listing resource version was published, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        return pulumi.get(self, "time_published")


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

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

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

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


@pulumi.output_type
class GetAppCatalogListingsAppCatalogListingResult(dict):
    def __init__(__self__, *,
                 contact_url: str,
                 description: str,
                 display_name: str,
                 listing_id: str,
                 publisher_logo_url: str,
                 publisher_name: str,
                 summary: str,
                 time_published: str):
        """
        :param str contact_url: Listing's contact URL.
        :param str description: Description of the listing.
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str listing_id: the region free ocid of the listing resource.
        :param str publisher_logo_url: Publisher's logo URL.
        :param str publisher_name: A filter to return only the publisher that matches the given publisher name exactly.
        :param str summary: The short summary for the listing.
        :param str time_published: Date and time the listing was published, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        pulumi.set(__self__, "contact_url", contact_url)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "listing_id", listing_id)
        pulumi.set(__self__, "publisher_logo_url", publisher_logo_url)
        pulumi.set(__self__, "publisher_name", publisher_name)
        pulumi.set(__self__, "summary", summary)
        pulumi.set(__self__, "time_published", time_published)

    @property
    @pulumi.getter(name="contactUrl")
    def contact_url(self) -> str:
        """
        Listing's contact URL.
        """
        return pulumi.get(self, "contact_url")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Description of the listing.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="listingId")
    def listing_id(self) -> str:
        """
        the region free ocid of the listing resource.
        """
        return pulumi.get(self, "listing_id")

    @property
    @pulumi.getter(name="publisherLogoUrl")
    def publisher_logo_url(self) -> str:
        """
        Publisher's logo URL.
        """
        return pulumi.get(self, "publisher_logo_url")

    @property
    @pulumi.getter(name="publisherName")
    def publisher_name(self) -> str:
        """
        A filter to return only the publisher that matches the given publisher name exactly.
        """
        return pulumi.get(self, "publisher_name")

    @property
    @pulumi.getter
    def summary(self) -> str:
        """
        The short summary for the listing.
        """
        return pulumi.get(self, "summary")

    @property
    @pulumi.getter(name="timePublished")
    def time_published(self) -> str:
        """
        Date and time the listing was published, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        return pulumi.get(self, "time_published")


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

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

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

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


@pulumi.output_type
class GetAppCatalogSubscriptionsAppCatalogSubscriptionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 display_name: str,
                 listing_id: str,
                 listing_resource_id: str,
                 listing_resource_version: str,
                 oracle_terms_of_use_link: str,
                 publisher_name: str,
                 signature: str,
                 summary: str,
                 time_created: str,
                 time_retrieved: str,
                 eula_link: Optional[str] = None):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str listing_id: A filter to return only the listings that matches the given listing id.
        :param str listing_resource_id: Listing resource id.
        :param str listing_resource_version: Listing resource version.
        :param str publisher_name: Name of the publisher who published this listing.
        :param str summary: The short summary to the listing.
        :param str time_created: Date and time at which the subscription was created, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "listing_id", listing_id)
        pulumi.set(__self__, "listing_resource_id", listing_resource_id)
        pulumi.set(__self__, "listing_resource_version", listing_resource_version)
        pulumi.set(__self__, "oracle_terms_of_use_link", oracle_terms_of_use_link)
        pulumi.set(__self__, "publisher_name", publisher_name)
        pulumi.set(__self__, "signature", signature)
        pulumi.set(__self__, "summary", summary)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_retrieved", time_retrieved)
        if eula_link is not None:
            pulumi.set(__self__, "eula_link", eula_link)

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

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

    @property
    @pulumi.getter(name="listingId")
    def listing_id(self) -> str:
        """
        A filter to return only the listings that matches the given listing id.
        """
        return pulumi.get(self, "listing_id")

    @property
    @pulumi.getter(name="listingResourceId")
    def listing_resource_id(self) -> str:
        """
        Listing resource id.
        """
        return pulumi.get(self, "listing_resource_id")

    @property
    @pulumi.getter(name="listingResourceVersion")
    def listing_resource_version(self) -> str:
        """
        Listing resource version.
        """
        return pulumi.get(self, "listing_resource_version")

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

    @property
    @pulumi.getter(name="publisherName")
    def publisher_name(self) -> str:
        """
        Name of the publisher who published this listing.
        """
        return pulumi.get(self, "publisher_name")

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

    @property
    @pulumi.getter
    def summary(self) -> str:
        """
        The short summary to the listing.
        """
        return pulumi.get(self, "summary")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        Date and time at which the subscription was created, in [RFC3339](https://tools.ietf.org/html/rfc3339) format. Example: `2018-03-20T12:32:53.532Z`
        """
        return pulumi.get(self, "time_created")

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

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


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

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

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

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


@pulumi.output_type
class GetBlockVolumeReplicasBlockVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 block_volume_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 size_in_gbs: str,
                 state: str,
                 time_created: str,
                 time_last_synced: str,
                 volume_group_replica_id: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str block_volume_id: The OCID of the source block volume.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The block volume replica's Oracle ID (OCID).
        :param str size_in_gbs: The size of the source block volume, in GBs.
        :param str state: A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        :param str time_created: The date and time the block volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_last_synced: The date and time the block volume replica was last synced from the source block volume. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str volume_group_replica_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the volume group replica.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "block_volume_id", block_volume_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_last_synced", time_last_synced)
        pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)

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

    @property
    @pulumi.getter(name="blockVolumeId")
    def block_volume_id(self) -> str:
        """
        The OCID of the source block volume.
        """
        return pulumi.get(self, "block_volume_id")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The block volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the source block volume, in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the block volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeLastSynced")
    def time_last_synced(self) -> str:
        """
        The date and time the block volume replica was last synced from the source block volume. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_last_synced")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the volume group replica.
        """
        return pulumi.get(self, "volume_group_replica_id")


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

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

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

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


@pulumi.output_type
class GetBootVolumeAttachmentsBootVolumeAttachmentResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 boot_volume_id: str,
                 compartment_id: str,
                 display_name: str,
                 encryption_in_transit_type: str,
                 id: str,
                 instance_id: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 state: str,
                 time_created: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_id: The OCID of the boot volume.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str encryption_in_transit_type: Refer the top-level definition of encryptionInTransitType. The default value is NONE.
        :param str id: The OCID of the boot volume attachment.
        :param str instance_id: The OCID of the instance.
        :param bool is_pv_encryption_in_transit_enabled: Whether in-transit encryption for the boot volume's paravirtualized attachment is enabled or not.
        :param str state: The current state of the boot volume attachment.
        :param str time_created: The date and time the boot volume was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "encryption_in_transit_type", encryption_in_transit_type)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume.
        """
        return pulumi.get(self, "boot_volume_id")

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

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

    @property
    @pulumi.getter(name="encryptionInTransitType")
    def encryption_in_transit_type(self) -> str:
        """
        Refer the top-level definition of encryptionInTransitType. The default value is NONE.
        """
        return pulumi.get(self, "encryption_in_transit_type")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether in-transit encryption for the boot volume's paravirtualized attachment is enabled or not.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the boot volume was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetBootVolumeAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetBootVolumeBackupSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_backup_id: str,
                 kms_key_id: str,
                 region: str):
        """
        :param str boot_volume_backup_id: The OCID of the boot volume backup.
        :param str kms_key_id: The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        pulumi.set(__self__, "boot_volume_backup_id", boot_volume_backup_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter(name="bootVolumeBackupId")
    def boot_volume_backup_id(self) -> str:
        """
        The OCID of the boot volume backup.
        """
        return pulumi.get(self, "boot_volume_backup_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        return pulumi.get(self, "kms_key_id")

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


@pulumi.output_type
class GetBootVolumeBackupsBootVolumeBackupResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 expiration_time: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 image_id: str,
                 kms_key_id: str,
                 size_in_gbs: str,
                 source_boot_volume_backup_id: str,
                 source_details: Sequence['outputs.GetBootVolumeBackupsBootVolumeBackupSourceDetailResult'],
                 source_type: str,
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 time_request_received: str,
                 type: str,
                 unique_size_in_gbs: str):
        """
        :param str boot_volume_id: The OCID of the boot volume.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str expiration_time: The date and time the volume backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for backups that were created automatically by a scheduled-backup policy. For manually created backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the boot volume backup.
        :param str image_id: The image OCID used to create the boot volume the backup is taken from.
        :param str kms_key_id: The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        :param str size_in_gbs: The size of the boot volume, in GBs.
        :param str source_boot_volume_backup_id: A filter to return only resources that originated from the given source boot volume backup.
        :param str source_type: Specifies whether the backup was created manually, or via scheduled backup policy.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param Mapping[str, Any] system_tags: System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str time_created: The date and time the boot volume backup was created. This is the time the actual point-in-time image of the volume data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_request_received: The date and time the request to create the boot volume backup was received. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str type: The type of a volume backup. Supported values are 'FULL' or 'INCREMENTAL'.
        :param str unique_size_in_gbs: The size used by the backup, in GBs. It is typically smaller than sizeInGBs, depending on the space consumed on the boot volume and whether the backup is full or incremental.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "expiration_time", expiration_time)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "source_boot_volume_backup_id", source_boot_volume_backup_id)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_request_received", time_request_received)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "unique_size_in_gbs", unique_size_in_gbs)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume.
        """
        return pulumi.get(self, "boot_volume_id")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> str:
        """
        The date and time the volume backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for backups that were created automatically by a scheduled-backup policy. For manually created backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        """
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The image OCID used to create the boot volume the backup is taken from.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the boot volume, in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sourceBootVolumeBackupId")
    def source_boot_volume_backup_id(self) -> str:
        """
        A filter to return only resources that originated from the given source boot volume backup.
        """
        return pulumi.get(self, "source_boot_volume_backup_id")

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

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        Specifies whether the backup was created manually, or via scheduled backup policy.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the boot volume backup was created. This is the time the actual point-in-time image of the volume data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeRequestReceived")
    def time_request_received(self) -> str:
        """
        The date and time the request to create the boot volume backup was received. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_request_received")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of a volume backup. Supported values are 'FULL' or 'INCREMENTAL'.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="uniqueSizeInGbs")
    def unique_size_in_gbs(self) -> str:
        """
        The size used by the backup, in GBs. It is typically smaller than sizeInGBs, depending on the space consumed on the boot volume and whether the backup is full or incremental.
        """
        return pulumi.get(self, "unique_size_in_gbs")


@pulumi.output_type
class GetBootVolumeBackupsBootVolumeBackupSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_backup_id: str,
                 kms_key_id: str,
                 region: str):
        """
        :param str kms_key_id: The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        pulumi.set(__self__, "boot_volume_backup_id", boot_volume_backup_id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "region", region)

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

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service master encryption assigned to the boot volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        return pulumi.get(self, "kms_key_id")

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


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

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

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

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


@pulumi.output_type
class GetBootVolumeBootVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 boot_volume_replica_id: str,
                 display_name: str):
        """
        :param str availability_domain: The availability domain of the boot volume replica.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_replica_id: The boot volume replica's Oracle ID (OCID).
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "boot_volume_replica_id", boot_volume_replica_id)
        pulumi.set(__self__, "display_name", display_name)

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

    @property
    @pulumi.getter(name="bootVolumeReplicaId")
    def boot_volume_replica_id(self) -> str:
        """
        The boot volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "boot_volume_replica_id")

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


@pulumi.output_type
class GetBootVolumeReplicasBootVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 boot_volume_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 image_id: str,
                 size_in_gbs: str,
                 state: str,
                 time_created: str,
                 time_last_synced: str,
                 volume_group_replica_id: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_id: The OCID of the source boot volume.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The boot volume replica's Oracle ID (OCID).
        :param str image_id: The image OCID used to create the boot volume the replica is replicated from.
        :param str size_in_gbs: The size of the source boot volume, in GBs.
        :param str state: A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        :param str time_created: The date and time the boot volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_last_synced: The date and time the boot volume replica was last synced from the source boot volume. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str volume_group_replica_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the volume group replica.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_last_synced", time_last_synced)
        pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)

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

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the source boot volume.
        """
        return pulumi.get(self, "boot_volume_id")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The boot volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The image OCID used to create the boot volume the replica is replicated from.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the source boot volume, in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the boot volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeLastSynced")
    def time_last_synced(self) -> str:
        """
        The date and time the boot volume replica was last synced from the source boot volume. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_last_synced")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the volume group replica.
        """
        return pulumi.get(self, "volume_group_replica_id")


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

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

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

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


@pulumi.output_type
class GetBootVolumeSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the boot volume replica.
        :param str type: The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetBootVolumesBootVolumeResult(dict):
    def __init__(__self__, *,
                 auto_tuned_vpus_per_gb: str,
                 autotune_policies: Sequence['outputs.GetBootVolumesBootVolumeAutotunePolicyResult'],
                 availability_domain: str,
                 backup_policy_id: str,
                 boot_volume_replicas: Sequence['outputs.GetBootVolumesBootVolumeBootVolumeReplicaResult'],
                 boot_volume_replicas_deletion: bool,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 image_id: str,
                 is_auto_tune_enabled: bool,
                 is_hydrated: bool,
                 kms_key_id: str,
                 size_in_gbs: str,
                 size_in_mbs: str,
                 source_details: Sequence['outputs.GetBootVolumesBootVolumeSourceDetailResult'],
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 volume_group_id: str,
                 vpus_per_gb: str):
        """
        :param str auto_tuned_vpus_per_gb: The number of Volume Performance Units per GB that this boot volume is effectively tuned to.
        :param Sequence['GetBootVolumesBootVolumeAutotunePolicyArgs'] autotune_policies: The list of autotune policies enabled for this volume.
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param Sequence['GetBootVolumesBootVolumeBootVolumeReplicaArgs'] boot_volume_replicas: The list of boot volume replicas of this boot volume
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the boot volume replica.
        :param str image_id: The image OCID used to create the boot volume.
        :param bool is_auto_tune_enabled: Specifies whether the auto-tune performance is enabled for this boot volume. This field is deprecated. Use the `DetachedVolumeAutotunePolicy` instead to enable the volume for detached autotune.
        :param bool is_hydrated: Specifies whether the boot volume's data has finished copying from the source boot volume or boot volume backup.
        :param str kms_key_id: The OCID of the Vault service master encryption key assigned to the boot volume.
        :param str size_in_gbs: The size of the boot volume in GBs.
        :param str size_in_mbs: The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`.
        :param str state: The current state of a boot volume.
        :param Mapping[str, Any] system_tags: System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str time_created: The date and time the boot volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str volume_group_id: The OCID of the volume group.
        :param str vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this boot volume per GB, representing 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.
        """
        pulumi.set(__self__, "auto_tuned_vpus_per_gb", auto_tuned_vpus_per_gb)
        pulumi.set(__self__, "autotune_policies", autotune_policies)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        pulumi.set(__self__, "boot_volume_replicas", boot_volume_replicas)
        pulumi.set(__self__, "boot_volume_replicas_deletion", boot_volume_replicas_deletion)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "is_auto_tune_enabled", is_auto_tune_enabled)
        pulumi.set(__self__, "is_hydrated", is_hydrated)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "volume_group_id", volume_group_id)
        pulumi.set(__self__, "vpus_per_gb", vpus_per_gb)

    @property
    @pulumi.getter(name="autoTunedVpusPerGb")
    def auto_tuned_vpus_per_gb(self) -> str:
        """
        The number of Volume Performance Units per GB that this boot volume is effectively tuned to.
        """
        return pulumi.get(self, "auto_tuned_vpus_per_gb")

    @property
    @pulumi.getter(name="autotunePolicies")
    def autotune_policies(self) -> Sequence['outputs.GetBootVolumesBootVolumeAutotunePolicyResult']:
        """
        The list of autotune policies enabled for this volume.
        """
        return pulumi.get(self, "autotune_policies")

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

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

    @property
    @pulumi.getter(name="bootVolumeReplicas")
    def boot_volume_replicas(self) -> Sequence['outputs.GetBootVolumesBootVolumeBootVolumeReplicaResult']:
        """
        The list of boot volume replicas of this boot volume
        """
        return pulumi.get(self, "boot_volume_replicas")

    @property
    @pulumi.getter(name="bootVolumeReplicasDeletion")
    def boot_volume_replicas_deletion(self) -> bool:
        return pulumi.get(self, "boot_volume_replicas_deletion")

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The image OCID used to create the boot volume.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="isAutoTuneEnabled")
    def is_auto_tune_enabled(self) -> bool:
        """
        Specifies whether the auto-tune performance is enabled for this boot volume. This field is deprecated. Use the `DetachedVolumeAutotunePolicy` instead to enable the volume for detached autotune.
        """
        return pulumi.get(self, "is_auto_tune_enabled")

    @property
    @pulumi.getter(name="isHydrated")
    def is_hydrated(self) -> bool:
        """
        Specifies whether the boot volume's data has finished copying from the source boot volume or boot volume backup.
        """
        return pulumi.get(self, "is_hydrated")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service master encryption key assigned to the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`.
        """
        return pulumi.get(self, "size_in_mbs")

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

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of a boot volume.
        """
        return pulumi.get(self, "state")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the boot volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> str:
        """
        The OCID of the volume group.
        """
        return pulumi.get(self, "volume_group_id")

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


@pulumi.output_type
class GetBootVolumesBootVolumeAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetBootVolumesBootVolumeBootVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 boot_volume_replica_id: str,
                 display_name: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_replica_id: The boot volume replica's Oracle ID (OCID).
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "boot_volume_replica_id", boot_volume_replica_id)
        pulumi.set(__self__, "display_name", display_name)

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

    @property
    @pulumi.getter(name="bootVolumeReplicaId")
    def boot_volume_replica_id(self) -> str:
        """
        The boot volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "boot_volume_replica_id")

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


@pulumi.output_type
class GetBootVolumesBootVolumeSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the boot volume replica.
        :param str type: The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the boot volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica`
        """
        return pulumi.get(self, "type")


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

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

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

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


@pulumi.output_type
class GetByoipAllocatedRangesByoipAllocatedRangeCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetByoipAllocatedRangesByoipAllocatedRangeCollectionItemResult']):
        """
        :param Sequence['GetByoipAllocatedRangesByoipAllocatedRangeCollectionItemArgs'] items: A list of subranges of a BYOIP CIDR block allocated to an IP pool.
        """
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetByoipAllocatedRangesByoipAllocatedRangeCollectionItemResult']:
        """
        A list of subranges of a BYOIP CIDR block allocated to an IP pool.
        """
        return pulumi.get(self, "items")


@pulumi.output_type
class GetByoipAllocatedRangesByoipAllocatedRangeCollectionItemResult(dict):
    def __init__(__self__, *,
                 cidr_block: str,
                 public_ip_pool_id: str):
        """
        :param str cidr_block: The BYOIP CIDR block range or subrange allocated to an IP pool. This could be all or part of a BYOIP CIDR block.
        :param str public_ip_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IP pool containing the CIDR block.
        """
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "public_ip_pool_id", public_ip_pool_id)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        The BYOIP CIDR block range or subrange allocated to an IP pool. This could be all or part of a BYOIP CIDR block.
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="publicIpPoolId")
    def public_ip_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IP pool containing the CIDR block.
        """
        return pulumi.get(self, "public_ip_pool_id")


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

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

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

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


@pulumi.output_type
class GetByoipRangeByoipRangeVcnIpv6allocationResult(dict):
    def __init__(__self__, *,
                 byoip_range_id: str,
                 compartment_id: str,
                 ipv6cidr_block: str,
                 vcn_id: str):
        """
        :param str byoip_range_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource containing the BYOIP CIDR block.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the BYOIP CIDR block.
        :param str ipv6cidr_block: The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `Vcn` resource to which the ByoipRange belongs.
        """
        pulumi.set(__self__, "byoip_range_id", byoip_range_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="byoipRangeId")
    def byoip_range_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource containing the BYOIP CIDR block.
        """
        return pulumi.get(self, "byoip_range_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the BYOIP CIDR block.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        """
        The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        """
        return pulumi.get(self, "ipv6cidr_block")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `Vcn` resource to which the ByoipRange belongs.
        """
        return pulumi.get(self, "vcn_id")


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

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


@pulumi.output_type
class GetByoipRangesByoipRangeCollectionItemResult(dict):
    def __init__(__self__, *,
                 byoip_range_vcn_ipv6allocations: Sequence['outputs.GetByoipRangesByoipRangeCollectionItemByoipRangeVcnIpv6allocationResult'],
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ipv6cidr_block: str,
                 lifecycle_details: str,
                 state: str,
                 time_advertised: str,
                 time_created: str,
                 time_validated: str,
                 time_withdrawn: str,
                 validation_token: str,
                 cidr_block: Optional[str] = None,
                 compartment_id: Optional[str] = None):
        """
        :param Sequence['GetByoipRangesByoipRangeCollectionItemByoipRangeVcnIpv6allocationArgs'] byoip_range_vcn_ipv6allocations: A list of `ByoipRangeVcnIpv6AllocationSummary` objects.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource.
        :param str ipv6cidr_block: The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        :param str lifecycle_details: The `ByoipRange` resource's current status.
        :param str state: A filter to return only resources that match the given lifecycle state name exactly.
        :param str time_advertised: The date and time the `ByoipRange` resource was advertised to the internet by BGP, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_created: The date and time the `ByoipRange` resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_validated: The date and time the `ByoipRange` resource was validated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_withdrawn: The date and time the `ByoipRange` resource was withdrawn from advertisement by BGP to the internet, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str validation_token: The validation token is an internally-generated ASCII string used in the validation process. See [Importing a CIDR block](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/BYOIP.htm#import_cidr) for details.
        :param str cidr_block: The public IPv4 CIDR block being imported from on-premises to the Oracle cloud.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        pulumi.set(__self__, "byoip_range_vcn_ipv6allocations", byoip_range_vcn_ipv6allocations)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)
        pulumi.set(__self__, "lifecycle_details", lifecycle_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_advertised", time_advertised)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_validated", time_validated)
        pulumi.set(__self__, "time_withdrawn", time_withdrawn)
        pulumi.set(__self__, "validation_token", validation_token)
        if cidr_block is not None:
            pulumi.set(__self__, "cidr_block", cidr_block)
        if compartment_id is not None:
            pulumi.set(__self__, "compartment_id", compartment_id)

    @property
    @pulumi.getter(name="byoipRangeVcnIpv6allocations")
    def byoip_range_vcn_ipv6allocations(self) -> Sequence['outputs.GetByoipRangesByoipRangeCollectionItemByoipRangeVcnIpv6allocationResult']:
        """
        A list of `ByoipRangeVcnIpv6AllocationSummary` objects.
        """
        return pulumi.get(self, "byoip_range_vcn_ipv6allocations")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        """
        The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        """
        return pulumi.get(self, "ipv6cidr_block")

    @property
    @pulumi.getter(name="lifecycleDetails")
    def lifecycle_details(self) -> str:
        """
        The `ByoipRange` resource's current status.
        """
        return pulumi.get(self, "lifecycle_details")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the given lifecycle state name exactly.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeAdvertised")
    def time_advertised(self) -> str:
        """
        The date and time the `ByoipRange` resource was advertised to the internet by BGP, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_advertised")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the `ByoipRange` resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeValidated")
    def time_validated(self) -> str:
        """
        The date and time the `ByoipRange` resource was validated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_validated")

    @property
    @pulumi.getter(name="timeWithdrawn")
    def time_withdrawn(self) -> str:
        """
        The date and time the `ByoipRange` resource was withdrawn from advertisement by BGP to the internet, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_withdrawn")

    @property
    @pulumi.getter(name="validationToken")
    def validation_token(self) -> str:
        """
        The validation token is an internally-generated ASCII string used in the validation process. See [Importing a CIDR block](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/BYOIP.htm#import_cidr) for details.
        """
        return pulumi.get(self, "validation_token")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> Optional[str]:
        """
        The public IPv4 CIDR block being imported from on-premises to the Oracle cloud.
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> Optional[str]:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")


@pulumi.output_type
class GetByoipRangesByoipRangeCollectionItemByoipRangeVcnIpv6allocationResult(dict):
    def __init__(__self__, *,
                 byoip_range_id: str,
                 compartment_id: str,
                 ipv6cidr_block: str,
                 vcn_id: str):
        """
        :param str byoip_range_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource to which the CIDR block belongs.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str ipv6cidr_block: The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `Vcn` resource to which the ByoipRange belongs.
        """
        pulumi.set(__self__, "byoip_range_id", byoip_range_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="byoipRangeId")
    def byoip_range_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `ByoipRange` resource to which the CIDR block belongs.
        """
        return pulumi.get(self, "byoip_range_id")

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

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        """
        The IPv6 CIDR block being imported to the Oracle cloud. This CIDR block must be /48 or larger, and can be subdivided into sub-ranges used across multiple VCNs. A BYOIPv6 prefix can be also assigned across multiple VCNs, and each VCN must be /64 or larger. You may specify a ULA or private IPv6 prefix of /64 or larger to use in the VCN. IPv6-enabled subnets will remain a fixed /64 in size.
        """
        return pulumi.get(self, "ipv6cidr_block")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the `Vcn` resource to which the ByoipRange belongs.
        """
        return pulumi.get(self, "vcn_id")


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

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

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

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


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleResult(dict):
    def __init__(__self__, *,
                 destination_cidr: str,
                 icmp_options: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleIcmpOptionResult'],
                 protocol: str,
                 rule_action: str,
                 source_cidr: str,
                 tcp_options: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionResult'],
                 traffic_direction: str,
                 udp_options: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionResult']):
        """
        :param str destination_cidr: Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        :param Sequence['GetCaptureFilterVtapCaptureFilterRuleIcmpOptionArgs'] icmp_options: Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        :param str protocol: The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
               * 1 = ICMP
               * 6 = TCP
               * 17 = UDP
        :param str rule_action: Include or exclude packets meeting this definition from mirrored traffic.
        :param str source_cidr: Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        :param Sequence['GetCaptureFilterVtapCaptureFilterRuleTcpOptionArgs'] tcp_options: Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param str traffic_direction: The traffic direction the VTAP is configured to mirror.
        :param Sequence['GetCaptureFilterVtapCaptureFilterRuleUdpOptionArgs'] udp_options: Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "destination_cidr", destination_cidr)
        pulumi.set(__self__, "icmp_options", icmp_options)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "rule_action", rule_action)
        pulumi.set(__self__, "source_cidr", source_cidr)
        pulumi.set(__self__, "tcp_options", tcp_options)
        pulumi.set(__self__, "traffic_direction", traffic_direction)
        pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter(name="destinationCidr")
    def destination_cidr(self) -> str:
        """
        Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "destination_cidr")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleIcmpOptionResult']:
        """
        Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
        * 1 = ICMP
        * 6 = TCP
        * 17 = UDP
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="ruleAction")
    def rule_action(self) -> str:
        """
        Include or exclude packets meeting this definition from mirrored traffic.
        """
        return pulumi.get(self, "rule_action")

    @property
    @pulumi.getter(name="sourceCidr")
    def source_cidr(self) -> str:
        """
        Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "source_cidr")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionResult']:
        """
        Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="trafficDirection")
    def traffic_direction(self) -> str:
        """
        The traffic direction the VTAP is configured to mirror.
        """
        return pulumi.get(self, "traffic_direction")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionResult']:
        """
        Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleIcmpOptionResult(dict):
    def __init__(__self__, *,
                 code: int,
                 type: int):
        """
        :param int code: The ICMP code (optional).
        :param int type: The ICMP type.
        """
        pulumi.set(__self__, "code", code)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def code(self) -> int:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleTcpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleUdpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 filter_type: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 time_created: str,
                 vtap_capture_filter_rules: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleResult']):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str filter_type: Indicates which service will use this capture filter
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The capture filter's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str state: A filter to return only resources that match the given capture filter lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the capture filter was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2021-08-25T21:10:29.600Z`
        :param Sequence['GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleArgs'] vtap_capture_filter_rules: The set of rules governing what traffic a VTAP mirrors.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "filter_type", filter_type)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vtap_capture_filter_rules", vtap_capture_filter_rules)

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="filterType")
    def filter_type(self) -> str:
        """
        Indicates which service will use this capture filter
        """
        return pulumi.get(self, "filter_type")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The capture filter's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the given capture filter lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the capture filter was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2021-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vtapCaptureFilterRules")
    def vtap_capture_filter_rules(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleResult']:
        """
        The set of rules governing what traffic a VTAP mirrors.
        """
        return pulumi.get(self, "vtap_capture_filter_rules")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleResult(dict):
    def __init__(__self__, *,
                 destination_cidr: str,
                 icmp_options: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleIcmpOptionResult'],
                 protocol: str,
                 rule_action: str,
                 source_cidr: str,
                 tcp_options: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionResult'],
                 traffic_direction: str,
                 udp_options: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionResult']):
        """
        :param str destination_cidr: Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        :param Sequence['GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleIcmpOptionArgs'] icmp_options: Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        :param str protocol: The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
               * 1 = ICMP
               * 6 = TCP
               * 17 = UDP
        :param str rule_action: Include or exclude packets meeting this definition from mirrored traffic.
        :param str source_cidr: Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        :param Sequence['GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionArgs'] tcp_options: Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param str traffic_direction: The traffic direction the VTAP is configured to mirror.
        :param Sequence['GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionArgs'] udp_options: Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "destination_cidr", destination_cidr)
        pulumi.set(__self__, "icmp_options", icmp_options)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "rule_action", rule_action)
        pulumi.set(__self__, "source_cidr", source_cidr)
        pulumi.set(__self__, "tcp_options", tcp_options)
        pulumi.set(__self__, "traffic_direction", traffic_direction)
        pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter(name="destinationCidr")
    def destination_cidr(self) -> str:
        """
        Traffic sent to this CIDR block through the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "destination_cidr")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleIcmpOptionResult']:
        """
        Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The transport protocol used in the filter. If do not choose a protocol, all protocols will be used in the filter. Supported options are:
        * 1 = ICMP
        * 6 = TCP
        * 17 = UDP
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="ruleAction")
    def rule_action(self) -> str:
        """
        Include or exclude packets meeting this definition from mirrored traffic.
        """
        return pulumi.get(self, "rule_action")

    @property
    @pulumi.getter(name="sourceCidr")
    def source_cidr(self) -> str:
        """
        Traffic from this CIDR block to the VTAP source will be mirrored to the VTAP target.
        """
        return pulumi.get(self, "source_cidr")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionResult']:
        """
        Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="trafficDirection")
    def traffic_direction(self) -> str:
        """
        The traffic direction the VTAP is configured to mirror.
        """
        return pulumi.get(self, "traffic_direction")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionResult']:
        """
        Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleIcmpOptionResult(dict):
    def __init__(__self__, *,
                 code: int,
                 type: int):
        """
        :param int code: The ICMP code (optional).
        :param int type: The ICMP type.
        """
        pulumi.set(__self__, "code", code)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def code(self) -> int:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleTcpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetCaptureFiltersCaptureFilterVtapCaptureFilterRuleUdpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number, which must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number, which must not be less than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number, which must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


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

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

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

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


@pulumi.output_type
class GetClusterNetworkInstancePoolResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_configuration_id: str,
                 load_balancers: Sequence['outputs.GetClusterNetworkInstancePoolLoadBalancerResult'],
                 placement_configurations: Sequence['outputs.GetClusterNetworkInstancePoolPlacementConfigurationResult'],
                 size: int,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the instance pool.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_configuration_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        :param Sequence['GetClusterNetworkInstancePoolLoadBalancerArgs'] load_balancers: The load balancers attached to the instance pool.
        :param Sequence['GetClusterNetworkInstancePoolPlacementConfigurationArgs'] placement_configurations: The placement configurations for the instance pool.
        :param int size: The number of instances that should be in the instance pool.
        :param str state: The current state of the cluster network.
        :param str time_created: The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "load_balancers", load_balancers)
        pulumi.set(__self__, "placement_configurations", placement_configurations)
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the instance pool.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Sequence['outputs.GetClusterNetworkInstancePoolLoadBalancerResult']:
        """
        The load balancers attached to the instance pool.
        """
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter(name="placementConfigurations")
    def placement_configurations(self) -> Sequence['outputs.GetClusterNetworkInstancePoolPlacementConfigurationResult']:
        """
        The placement configurations for the instance pool.
        """
        return pulumi.get(self, "placement_configurations")

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The number of instances that should be in the instance pool.
        """
        return pulumi.get(self, "size")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetClusterNetworkInstancePoolLoadBalancerResult(dict):
    def __init__(__self__, *,
                 backend_set_name: str,
                 id: str,
                 instance_pool_id: str,
                 load_balancer_id: str,
                 port: int,
                 state: str,
                 vnic_selection: str):
        """
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        :param int port: The port value used for the backends.
        :param str state: The current state of the cluster network.
        :param str vnic_selection: Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "vnic_selection", vnic_selection)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

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

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port value used for the backends.
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> str:
        """
        Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")


@pulumi.output_type
class GetClusterNetworkInstancePoolPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 fault_domains: Sequence[str],
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param Sequence[str] fault_domains: The fault domains to place instances.
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "fault_domains", fault_domains)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Sequence[str]:
        """
        The fault domains to place instances.
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


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

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

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

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


@pulumi.output_type
class GetClusterNetworkInstancesInstanceResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 display_name: str,
                 fault_domain: str,
                 id: str,
                 instance_configuration_id: str,
                 load_balancer_backends: Sequence['outputs.GetClusterNetworkInstancesInstanceLoadBalancerBackendResult'],
                 region: str,
                 shape: str,
                 state: str,
                 time_created: str):
        """
        :param str availability_domain: The availability domain the instance is running in.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str fault_domain: The fault domain the instance is running in.
        :param str id: The OCID of the instance.
        :param str instance_configuration_id: The OCID of the instance confgiuration used to create the instance.
        :param Sequence['GetClusterNetworkInstancesInstanceLoadBalancerBackendArgs'] load_balancer_backends: The load balancer backends that are configured for the instance pool instance.
        :param str region: The region that contains the availability domain the instance is running in.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param str state: The current state of the instance pool instance.
        :param str time_created: The date and time the instance pool instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "load_balancer_backends", load_balancer_backends)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain the instance is running in.
        """
        return pulumi.get(self, "availability_domain")

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

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain the instance is running in.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        The OCID of the instance confgiuration used to create the instance.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter(name="loadBalancerBackends")
    def load_balancer_backends(self) -> Sequence['outputs.GetClusterNetworkInstancesInstanceLoadBalancerBackendResult']:
        """
        The load balancer backends that are configured for the instance pool instance.
        """
        return pulumi.get(self, "load_balancer_backends")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region that contains the availability domain the instance is running in.
        """
        return pulumi.get(self, "region")

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

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the instance pool instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetClusterNetworkInstancesInstanceLoadBalancerBackendResult(dict):
    def __init__(__self__, *,
                 backend_health_status: str,
                 backend_name: str,
                 backend_set_name: str,
                 load_balancer_id: str,
                 state: str):
        """
        :param str backend_health_status: The health of the backend as observed by the load balancer.
        :param str backend_name: The name of the backend in the backend set.
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str load_balancer_id: The OCID of the load balancer attached to the instance pool.
        :param str state: The current state of the instance pool instance.
        """
        pulumi.set(__self__, "backend_health_status", backend_health_status)
        pulumi.set(__self__, "backend_name", backend_name)
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="backendHealthStatus")
    def backend_health_status(self) -> str:
        """
        The health of the backend as observed by the load balancer.
        """
        return pulumi.get(self, "backend_health_status")

    @property
    @pulumi.getter(name="backendName")
    def backend_name(self) -> str:
        """
        The name of the backend in the backend set.
        """
        return pulumi.get(self, "backend_name")

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The OCID of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

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


@pulumi.output_type
class GetClusterNetworkPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetClusterNetworkPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetClusterNetworksClusterNetworkResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hpc_island_id: str,
                 id: str,
                 instance_pools: Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolResult'],
                 network_block_ids: Sequence[str],
                 placement_configurations: Sequence['outputs.GetClusterNetworksClusterNetworkPlacementConfigurationResult'],
                 state: str,
                 time_created: str,
                 time_updated: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hpc_island_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the hpc island used by the cluster network.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param Sequence['GetClusterNetworksClusterNetworkInstancePoolArgs'] instance_pools: The instance pools in the cluster network.
        :param Sequence[str] network_block_ids: The list of network block OCIDs of the HPC island.
        :param Sequence['GetClusterNetworksClusterNetworkPlacementConfigurationArgs'] placement_configurations: The location for where the instance pools in a cluster network will place instances.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_updated: The date and time the resource was updated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hpc_island_id", hpc_island_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_pools", instance_pools)
        pulumi.set(__self__, "network_block_ids", network_block_ids)
        pulumi.set(__self__, "placement_configurations", placement_configurations)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hpcIslandId")
    def hpc_island_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the hpc island used by the cluster network.
        """
        return pulumi.get(self, "hpc_island_id")

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

    @property
    @pulumi.getter(name="instancePools")
    def instance_pools(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolResult']:
        """
        The instance pools in the cluster network.
        """
        return pulumi.get(self, "instance_pools")

    @property
    @pulumi.getter(name="networkBlockIds")
    def network_block_ids(self) -> Sequence[str]:
        """
        The list of network block OCIDs of the HPC island.
        """
        return pulumi.get(self, "network_block_ids")

    @property
    @pulumi.getter(name="placementConfigurations")
    def placement_configurations(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkPlacementConfigurationResult']:
        """
        The location for where the instance pools in a cluster network will place instances.
        """
        return pulumi.get(self, "placement_configurations")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The date and time the resource was updated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_updated")


@pulumi.output_type
class GetClusterNetworksClusterNetworkInstancePoolResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_configuration_id: str,
                 load_balancers: Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolLoadBalancerResult'],
                 placement_configurations: Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationResult'],
                 size: int,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_configuration_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        :param Sequence['GetClusterNetworksClusterNetworkInstancePoolLoadBalancerArgs'] load_balancers: The load balancers attached to the instance pool.
        :param Sequence['GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationArgs'] placement_configurations: The placement configurations for the instance pool.
        :param int size: The number of instances that should be in the instance pool.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "load_balancers", load_balancers)
        pulumi.set(__self__, "placement_configurations", placement_configurations)
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolLoadBalancerResult']:
        """
        The load balancers attached to the instance pool.
        """
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter(name="placementConfigurations")
    def placement_configurations(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationResult']:
        """
        The placement configurations for the instance pool.
        """
        return pulumi.get(self, "placement_configurations")

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The number of instances that should be in the instance pool.
        """
        return pulumi.get(self, "size")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the resource was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetClusterNetworksClusterNetworkInstancePoolLoadBalancerResult(dict):
    def __init__(__self__, *,
                 backend_set_name: str,
                 id: str,
                 instance_pool_id: str,
                 load_balancer_id: str,
                 port: int,
                 state: str,
                 vnic_selection: str):
        """
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        :param int port: The port value used for the backends.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str vnic_selection: Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "vnic_selection", vnic_selection)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

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

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port value used for the backends.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> str:
        """
        Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")


@pulumi.output_type
class GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 fault_domains: Sequence[str],
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param Sequence[str] fault_domains: The fault domains to place instances.
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "fault_domains", fault_domains)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Sequence[str]:
        """
        The fault domains to place instances.
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetClusterNetworksClusterNetworkInstancePoolPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetClusterNetworksClusterNetworkPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetClusterNetworksClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetClusterNetworksClusterNetworkPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetClusterNetworksClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetClusterNetworksClusterNetworkPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

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

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


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

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

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

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


@pulumi.output_type
class GetComputeCapacityReservationInstanceReservationConfigResult(dict):
    def __init__(__self__, *,
                 cluster_configs: Sequence['outputs.GetComputeCapacityReservationInstanceReservationConfigClusterConfigResult'],
                 fault_domain: str,
                 instance_shape: str,
                 instance_shape_configs: Sequence['outputs.GetComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult'],
                 reserved_count: str,
                 used_count: str):
        """
        :param Sequence['GetComputeCapacityReservationInstanceReservationConfigClusterConfigArgs'] cluster_configs: The HPC cluster configuration requested when launching instances in a compute capacity reservation.
        :param str fault_domain: The fault domain of this capacity configuration. If a value is not supplied, this capacity configuration is applicable to all fault domains in the specified availability domain. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm).
        :param str instance_shape: The shape to use when launching instances using compute capacity reservations. The shape determines the number of CPUs, the amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        :param Sequence['GetComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigArgs'] instance_shape_configs: The shape configuration requested when launching instances in a compute capacity reservation.
        :param str reserved_count: The total number of instances that can be launched from the capacity configuration.
        :param str used_count: The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        pulumi.set(__self__, "cluster_configs", cluster_configs)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "instance_shape", instance_shape)
        pulumi.set(__self__, "instance_shape_configs", instance_shape_configs)
        pulumi.set(__self__, "reserved_count", reserved_count)
        pulumi.set(__self__, "used_count", used_count)

    @property
    @pulumi.getter(name="clusterConfigs")
    def cluster_configs(self) -> Sequence['outputs.GetComputeCapacityReservationInstanceReservationConfigClusterConfigResult']:
        """
        The HPC cluster configuration requested when launching instances in a compute capacity reservation.
        """
        return pulumi.get(self, "cluster_configs")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain of this capacity configuration. If a value is not supplied, this capacity configuration is applicable to all fault domains in the specified availability domain. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm).
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="instanceShape")
    def instance_shape(self) -> str:
        """
        The shape to use when launching instances using compute capacity reservations. The shape determines the number of CPUs, the amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        """
        return pulumi.get(self, "instance_shape")

    @property
    @pulumi.getter(name="instanceShapeConfigs")
    def instance_shape_configs(self) -> Sequence['outputs.GetComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult']:
        """
        The shape configuration requested when launching instances in a compute capacity reservation.
        """
        return pulumi.get(self, "instance_shape_configs")

    @property
    @pulumi.getter(name="reservedCount")
    def reserved_count(self) -> str:
        """
        The total number of instances that can be launched from the capacity configuration.
        """
        return pulumi.get(self, "reserved_count")

    @property
    @pulumi.getter(name="usedCount")
    def used_count(self) -> str:
        """
        The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        return pulumi.get(self, "used_count")


@pulumi.output_type
class GetComputeCapacityReservationInstanceReservationConfigClusterConfigResult(dict):
    def __init__(__self__, *,
                 hpc_island_id: str,
                 network_block_ids: Sequence[str]):
        """
        :param str hpc_island_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the HpcIsland.
        :param Sequence[str] network_block_ids: The list of OCID of the network blocks.
        """
        pulumi.set(__self__, "hpc_island_id", hpc_island_id)
        pulumi.set(__self__, "network_block_ids", network_block_ids)

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

    @property
    @pulumi.getter(name="networkBlockIds")
    def network_block_ids(self) -> Sequence[str]:
        """
        The list of OCID of the network blocks.
        """
        return pulumi.get(self, "network_block_ids")


@pulumi.output_type
class GetComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult(dict):
    def __init__(__self__, *,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

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

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


@pulumi.output_type
class GetComputeCapacityReservationInstanceShapesComputeCapacityReservationInstanceShapeResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 instance_shape: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str instance_shape: The name of the available shape used to launch instances in a compute capacity reservation.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "instance_shape", instance_shape)

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

    @property
    @pulumi.getter(name="instanceShape")
    def instance_shape(self) -> str:
        """
        The name of the available shape used to launch instances in a compute capacity reservation.
        """
        return pulumi.get(self, "instance_shape")


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

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

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

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


@pulumi.output_type
class GetComputeCapacityReservationInstancesCapacityReservationInstanceResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 fault_domain: str,
                 id: str,
                 shape: str,
                 shape_configs: Sequence['outputs.GetComputeCapacityReservationInstancesCapacityReservationInstanceShapeConfigResult']):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str fault_domain: The fault domain the instance is running in.
        :param str id: The OCID of the instance.
        :param str shape: The shape of the instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetComputeCapacityReservationInstancesCapacityReservationInstanceShapeConfigArgs'] shape_configs: The shape configuration requested when launching instances in a compute capacity reservation.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)

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

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain the instance is running in.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetComputeCapacityReservationInstancesCapacityReservationInstanceShapeConfigResult']:
        """
        The shape configuration requested when launching instances in a compute capacity reservation.
        """
        return pulumi.get(self, "shape_configs")


@pulumi.output_type
class GetComputeCapacityReservationInstancesCapacityReservationInstanceShapeConfigResult(dict):
    def __init__(__self__, *,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

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

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


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

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

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

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


@pulumi.output_type
class GetComputeCapacityReservationsComputeCapacityReservationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_reservation_configs: Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigResult'],
                 is_default_reservation: bool,
                 reserved_instance_count: str,
                 state: str,
                 time_created: str,
                 time_updated: str,
                 used_instance_count: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute capacity reservation.
        :param Sequence['GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigArgs'] instance_reservation_configs: The capacity configurations for the capacity reservation.
        :param bool is_default_reservation: Whether this capacity reservation is the default. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        :param str reserved_instance_count: The number of instances for which capacity will be held with this compute capacity reservation. This number is the sum of the values of the `reservedCount` fields for all of the instance capacity configurations under this reservation. The purpose of this field is to calculate the percentage usage of the reservation.
        :param str state: A filter to only return resources that match the given lifecycle state.
        :param str time_created: The date and time the compute capacity reservation was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_updated: The date and time the compute capacity reservation was updated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str used_instance_count: The total number of instances currently consuming space in this compute capacity reservation. This number is the sum of the values of the `usedCount` fields for all of the instance capacity configurations under this reservation. The purpose of this field is to calculate the percentage usage of the reservation.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_reservation_configs", instance_reservation_configs)
        pulumi.set(__self__, "is_default_reservation", is_default_reservation)
        pulumi.set(__self__, "reserved_instance_count", reserved_instance_count)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_updated", time_updated)
        pulumi.set(__self__, "used_instance_count", used_instance_count)

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="instanceReservationConfigs")
    def instance_reservation_configs(self) -> Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigResult']:
        """
        The capacity configurations for the capacity reservation.
        """
        return pulumi.get(self, "instance_reservation_configs")

    @property
    @pulumi.getter(name="isDefaultReservation")
    def is_default_reservation(self) -> bool:
        """
        Whether this capacity reservation is the default. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm#default).
        """
        return pulumi.get(self, "is_default_reservation")

    @property
    @pulumi.getter(name="reservedInstanceCount")
    def reserved_instance_count(self) -> str:
        """
        The number of instances for which capacity will be held with this compute capacity reservation. This number is the sum of the values of the `reservedCount` fields for all of the instance capacity configurations under this reservation. The purpose of this field is to calculate the percentage usage of the reservation.
        """
        return pulumi.get(self, "reserved_instance_count")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the compute capacity reservation was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeUpdated")
    def time_updated(self) -> str:
        """
        The date and time the compute capacity reservation was updated, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_updated")

    @property
    @pulumi.getter(name="usedInstanceCount")
    def used_instance_count(self) -> str:
        """
        The total number of instances currently consuming space in this compute capacity reservation. This number is the sum of the values of the `usedCount` fields for all of the instance capacity configurations under this reservation. The purpose of this field is to calculate the percentage usage of the reservation.
        """
        return pulumi.get(self, "used_instance_count")


@pulumi.output_type
class GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigResult(dict):
    def __init__(__self__, *,
                 cluster_configs: Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigClusterConfigResult'],
                 fault_domain: str,
                 instance_shape: str,
                 instance_shape_configs: Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult'],
                 reserved_count: str,
                 used_count: str):
        """
        :param Sequence['GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigClusterConfigArgs'] cluster_configs: The HPC cluster configuration requested when launching instances in a compute capacity reservation.
        :param str fault_domain: The fault domain of this capacity configuration. If a value is not supplied, this capacity configuration is applicable to all fault domains in the specified availability domain. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm).
        :param str instance_shape: The shape to use when launching instances using compute capacity reservations. The shape determines the number of CPUs, the amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        :param Sequence['GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigArgs'] instance_shape_configs: The shape configuration requested when launching instances in a compute capacity reservation.
        :param str reserved_count: The total number of instances that can be launched from the capacity configuration.
        :param str used_count: The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        pulumi.set(__self__, "cluster_configs", cluster_configs)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "instance_shape", instance_shape)
        pulumi.set(__self__, "instance_shape_configs", instance_shape_configs)
        pulumi.set(__self__, "reserved_count", reserved_count)
        pulumi.set(__self__, "used_count", used_count)

    @property
    @pulumi.getter(name="clusterConfigs")
    def cluster_configs(self) -> Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigClusterConfigResult']:
        """
        The HPC cluster configuration requested when launching instances in a compute capacity reservation.
        """
        return pulumi.get(self, "cluster_configs")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain of this capacity configuration. If a value is not supplied, this capacity configuration is applicable to all fault domains in the specified availability domain. For more information, see [Capacity Reservations](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/reserve-capacity.htm).
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="instanceShape")
    def instance_shape(self) -> str:
        """
        The shape to use when launching instances using compute capacity reservations. The shape determines the number of CPUs, the amount of memory, and other resources allocated to the instance. You can list all available shapes by calling [ListComputeCapacityReservationInstanceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/computeCapacityReservationInstanceShapes/ListComputeCapacityReservationInstanceShapes).
        """
        return pulumi.get(self, "instance_shape")

    @property
    @pulumi.getter(name="instanceShapeConfigs")
    def instance_shape_configs(self) -> Sequence['outputs.GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult']:
        """
        The shape configuration requested when launching instances in a compute capacity reservation.
        """
        return pulumi.get(self, "instance_shape_configs")

    @property
    @pulumi.getter(name="reservedCount")
    def reserved_count(self) -> str:
        """
        The total number of instances that can be launched from the capacity configuration.
        """
        return pulumi.get(self, "reserved_count")

    @property
    @pulumi.getter(name="usedCount")
    def used_count(self) -> str:
        """
        The amount of capacity in use out of the total capacity reserved in this capacity configuration.
        """
        return pulumi.get(self, "used_count")


@pulumi.output_type
class GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigClusterConfigResult(dict):
    def __init__(__self__, *,
                 hpc_island_id: str,
                 network_block_ids: Sequence[str]):
        """
        :param str hpc_island_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the HpcIsland.
        :param Sequence[str] network_block_ids: The list of OCID of the network blocks.
        """
        pulumi.set(__self__, "hpc_island_id", hpc_island_id)
        pulumi.set(__self__, "network_block_ids", network_block_ids)

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

    @property
    @pulumi.getter(name="networkBlockIds")
    def network_block_ids(self) -> Sequence[str]:
        """
        The list of OCID of the network blocks.
        """
        return pulumi.get(self, "network_block_ids")


@pulumi.output_type
class GetComputeCapacityReservationsComputeCapacityReservationInstanceReservationConfigInstanceShapeConfigResult(dict):
    def __init__(__self__, *,
                 memory_in_gbs: float,
                 ocpus: float):
        """
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "ocpus", ocpus)

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

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


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

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

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

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


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

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


@pulumi.output_type
class GetComputeClustersComputeClusterCollectionItemResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 time_created: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of this compute cluster.
        :param str state: The current state of the compute cluster.
        :param str time_created: The date and time the compute cluster was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the compute cluster was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetComputeGlobalImageCapabilitySchemasComputeGlobalImageCapabilitySchemaResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 current_version_name: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 time_created: str):
        """
        :param str compartment_id: A filter to return only resources that match the given compartment OCID exactly.
        :param str current_version_name: The name of the global capabilities version resource that is considered the current version.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute global image capability schema
        :param str time_created: The date and time the compute global image capability schema was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "current_version_name", current_version_name)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        A filter to return only resources that match the given compartment OCID exactly.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="currentVersionName")
    def current_version_name(self) -> str:
        """
        The name of the global capabilities version resource that is considered the current version.
        """
        return pulumi.get(self, "current_version_name")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the compute global image capability schema was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetComputeGlobalImageCapabilitySchemasVersionsComputeGlobalImageCapabilitySchemaVersionResult(dict):
    def __init__(__self__, *,
                 compute_global_image_capability_schema_id: str,
                 display_name: str,
                 name: str,
                 schema_data: Mapping[str, Any],
                 time_created: str):
        """
        :param str compute_global_image_capability_schema_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute global image capability schema
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str name: The name of the compute global image capability schema version
        :param Mapping[str, Any] schema_data: The map of each capability name to its ImageCapabilityDescriptor.
        :param str time_created: The date and time the compute global image capability schema version was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compute_global_image_capability_schema_id", compute_global_image_capability_schema_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "schema_data", schema_data)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="computeGlobalImageCapabilitySchemaId")
    def compute_global_image_capability_schema_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute global image capability schema
        """
        return pulumi.get(self, "compute_global_image_capability_schema_id")

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

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the compute global image capability schema version
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="schemaData")
    def schema_data(self) -> Mapping[str, Any]:
        """
        The map of each capability name to its ImageCapabilityDescriptor.
        """
        return pulumi.get(self, "schema_data")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the compute global image capability schema version was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetComputeGlobalImageCapabilitySchemasVersionsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The name of the compute global image capability schema version
        :param Sequence[str] values: the list of values for the enum
        """
        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 name of the compute global image capability schema version
        """
        return pulumi.get(self, "name")

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

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


@pulumi.output_type
class GetComputeImageCapabilitySchemasComputeImageCapabilitySchemaResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 compute_global_image_capability_schema_id: str,
                 compute_global_image_capability_schema_version_name: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 image_id: str,
                 schema_data: Mapping[str, Any],
                 time_created: str):
        """
        :param str compartment_id: A filter to return only resources that match the given compartment OCID exactly.
        :param str compute_global_image_capability_schema_id: The ocid of the compute global image capability schema
        :param str compute_global_image_capability_schema_version_name: The name of the compute global image capability schema version
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The compute image capability schema [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm).
        :param str image_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of an image.
        :param Mapping[str, Any] schema_data: A mapping of each capability name to its ImageCapabilityDescriptor.
        :param str time_created: The date and time the compute image capability schema was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "compute_global_image_capability_schema_id", compute_global_image_capability_schema_id)
        pulumi.set(__self__, "compute_global_image_capability_schema_version_name", compute_global_image_capability_schema_version_name)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "schema_data", schema_data)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        A filter to return only resources that match the given compartment OCID exactly.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="computeGlobalImageCapabilitySchemaId")
    def compute_global_image_capability_schema_id(self) -> str:
        """
        The ocid of the compute global image capability schema
        """
        return pulumi.get(self, "compute_global_image_capability_schema_id")

    @property
    @pulumi.getter(name="computeGlobalImageCapabilitySchemaVersionName")
    def compute_global_image_capability_schema_version_name(self) -> str:
        """
        The name of the compute global image capability schema version
        """
        return pulumi.get(self, "compute_global_image_capability_schema_version_name")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of an image.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="schemaData")
    def schema_data(self) -> Mapping[str, Any]:
        """
        A mapping of each capability name to its ImageCapabilityDescriptor.
        """
        return pulumi.get(self, "schema_data")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the compute image capability schema was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetComputeImageCapabilitySchemasFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param Sequence[str] values: the list of values for the enum
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

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

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

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


@pulumi.output_type
class GetConsoleHistoriesConsoleHistoryResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_id: str,
                 state: str,
                 time_created: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the console history metadata object.
        :param str instance_id: The OCID of the instance.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the history was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the console history metadata object.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the history was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetCpeDeviceShapeCpeDeviceInfoResult(dict):
    def __init__(__self__, *,
                 platform_software_version: str,
                 vendor: str):
        """
        :param str platform_software_version: The platform or software version of the CPE device.
        :param str vendor: The vendor that makes the CPE device.
        """
        pulumi.set(__self__, "platform_software_version", platform_software_version)
        pulumi.set(__self__, "vendor", vendor)

    @property
    @pulumi.getter(name="platformSoftwareVersion")
    def platform_software_version(self) -> str:
        """
        The platform or software version of the CPE device.
        """
        return pulumi.get(self, "platform_software_version")

    @property
    @pulumi.getter
    def vendor(self) -> str:
        """
        The vendor that makes the CPE device.
        """
        return pulumi.get(self, "vendor")


@pulumi.output_type
class GetCpeDeviceShapeParameterResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 explanation: str,
                 key: str):
        """
        :param str display_name: A descriptive label for the question (for example, to display in a form in a graphical interface). Avoid entering confidential information.
        :param str explanation: A description or explanation of the question, to help the customer answer accurately.
        :param str key: A string that identifies the question.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "explanation", explanation)
        pulumi.set(__self__, "key", key)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A descriptive label for the question (for example, to display in a form in a graphical interface). Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def explanation(self) -> str:
        """
        A description or explanation of the question, to help the customer answer accurately.
        """
        return pulumi.get(self, "explanation")

    @property
    @pulumi.getter
    def key(self) -> str:
        """
        A string that identifies the question.
        """
        return pulumi.get(self, "key")


@pulumi.output_type
class GetCpeDeviceShapesCpeDeviceShapeResult(dict):
    def __init__(__self__, *,
                 cpe_device_infos: Sequence['outputs.GetCpeDeviceShapesCpeDeviceShapeCpeDeviceInfoResult'],
                 cpe_device_shape_id: str,
                 template: str):
        """
        :param Sequence['GetCpeDeviceShapesCpeDeviceShapeCpeDeviceInfoArgs'] cpe_device_infos: Basic information about a particular CPE device type.
        :param str cpe_device_shape_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE device shape. This value uniquely identifies the type of CPE device.
        :param str template: A template of CPE device configuration information that will be merged with the customer's answers to the questions to render the final CPE device configuration content. Also see:
               * [GetCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Cpe/GetCpeDeviceConfigContent)
               * [GetIpsecCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/IPSecConnection/GetIpsecCpeDeviceConfigContent)
               * [GetTunnelCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/TunnelCpeDeviceConfig/GetTunnelCpeDeviceConfigContent)
        """
        pulumi.set(__self__, "cpe_device_infos", cpe_device_infos)
        pulumi.set(__self__, "cpe_device_shape_id", cpe_device_shape_id)
        pulumi.set(__self__, "template", template)

    @property
    @pulumi.getter(name="cpeDeviceInfos")
    def cpe_device_infos(self) -> Sequence['outputs.GetCpeDeviceShapesCpeDeviceShapeCpeDeviceInfoResult']:
        """
        Basic information about a particular CPE device type.
        """
        return pulumi.get(self, "cpe_device_infos")

    @property
    @pulumi.getter(name="cpeDeviceShapeId")
    def cpe_device_shape_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE device shape. This value uniquely identifies the type of CPE device.
        """
        return pulumi.get(self, "cpe_device_shape_id")

    @property
    @pulumi.getter
    def template(self) -> str:
        """
        A template of CPE device configuration information that will be merged with the customer's answers to the questions to render the final CPE device configuration content. Also see:
        * [GetCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Cpe/GetCpeDeviceConfigContent)
        * [GetIpsecCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/IPSecConnection/GetIpsecCpeDeviceConfigContent)
        * [GetTunnelCpeDeviceConfigContent](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/TunnelCpeDeviceConfig/GetTunnelCpeDeviceConfigContent)
        """
        return pulumi.get(self, "template")


@pulumi.output_type
class GetCpeDeviceShapesCpeDeviceShapeCpeDeviceInfoResult(dict):
    def __init__(__self__, *,
                 platform_software_version: str,
                 vendor: str):
        """
        :param str platform_software_version: The platform or software version of the CPE device.
        :param str vendor: The vendor that makes the CPE device.
        """
        pulumi.set(__self__, "platform_software_version", platform_software_version)
        pulumi.set(__self__, "vendor", vendor)

    @property
    @pulumi.getter(name="platformSoftwareVersion")
    def platform_software_version(self) -> str:
        """
        The platform or software version of the CPE device.
        """
        return pulumi.get(self, "platform_software_version")

    @property
    @pulumi.getter
    def vendor(self) -> str:
        """
        The vendor that makes the CPE device.
        """
        return pulumi.get(self, "vendor")


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

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

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

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


@pulumi.output_type
class GetCpesCpeResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 cpe_device_shape_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ip_address: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str cpe_device_shape_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE's device type. The Networking service maintains a general list of CPE device types (for example, Cisco ASA). For each type, Oracle provides CPE configuration content that can help a network engineer configure the CPE. The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) uniquely identifies the type of device. To get the OCIDs for the device types on the list, see [ListCpeDeviceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CpeDeviceShapeSummary/ListCpeDeviceShapes).
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The CPE's Oracle ID (OCID).
        :param str ip_address: The public IP address of the on-premises router.
        :param str time_created: The date and time the CPE was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "cpe_device_shape_id", cpe_device_shape_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="cpeDeviceShapeId")
    def cpe_device_shape_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE's device type. The Networking service maintains a general list of CPE device types (for example, Cisco ASA). For each type, Oracle provides CPE configuration content that can help a network engineer configure the CPE. The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) uniquely identifies the type of device. To get the OCIDs for the device types on the list, see [ListCpeDeviceShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CpeDeviceShapeSummary/ListCpeDeviceShapes).
        """
        return pulumi.get(self, "cpe_device_shape_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The CPE's Oracle ID (OCID).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        The public IP address of the on-premises router.
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the CPE was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetCrossConnectGroupMacsecPropertyResult(dict):
    def __init__(__self__, *,
                 encryption_cipher: str,
                 primary_keys: Sequence['outputs.GetCrossConnectGroupMacsecPropertyPrimaryKeyResult'],
                 state: str):
        """
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param Sequence['GetCrossConnectGroupMacsecPropertyPrimaryKeyArgs'] primary_keys: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        :param str state: The cross-connect group's current state.
        """
        pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        pulumi.set(__self__, "primary_keys", primary_keys)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> str:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKeys")
    def primary_keys(self) -> Sequence['outputs.GetCrossConnectGroupMacsecPropertyPrimaryKeyResult']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_keys")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The cross-connect group's current state.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class GetCrossConnectGroupMacsecPropertyPrimaryKeyResult(dict):
    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_key_secret_version: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_name_secret_version: str):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> str:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> str:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


@pulumi.output_type
class GetCrossConnectGroupsCrossConnectGroupResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 customer_reference_name: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 macsec_properties: Sequence['outputs.GetCrossConnectGroupsCrossConnectGroupMacsecPropertyResult'],
                 oci_logical_device_name: str,
                 oci_physical_device_name: str,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str customer_reference_name: A reference name or identifier for the physical fiber connection that this cross-connect group uses.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The cross-connect group's Oracle ID (OCID).
        :param Sequence['GetCrossConnectGroupsCrossConnectGroupMacsecPropertyArgs'] macsec_properties: Properties used for MACsec (if capable).
        :param str oci_logical_device_name: The FastConnect device that terminates the logical connection. This device might be different than the device that terminates the physical connection.
        :param str oci_physical_device_name: The FastConnect device that terminates the physical connection.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the cross-connect group was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "customer_reference_name", customer_reference_name)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "macsec_properties", macsec_properties)
        pulumi.set(__self__, "oci_logical_device_name", oci_logical_device_name)
        pulumi.set(__self__, "oci_physical_device_name", oci_physical_device_name)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="customerReferenceName")
    def customer_reference_name(self) -> str:
        """
        A reference name or identifier for the physical fiber connection that this cross-connect group uses.
        """
        return pulumi.get(self, "customer_reference_name")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The cross-connect group's Oracle ID (OCID).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="macsecProperties")
    def macsec_properties(self) -> Sequence['outputs.GetCrossConnectGroupsCrossConnectGroupMacsecPropertyResult']:
        """
        Properties used for MACsec (if capable).
        """
        return pulumi.get(self, "macsec_properties")

    @property
    @pulumi.getter(name="ociLogicalDeviceName")
    def oci_logical_device_name(self) -> str:
        """
        The FastConnect device that terminates the logical connection. This device might be different than the device that terminates the physical connection.
        """
        return pulumi.get(self, "oci_logical_device_name")

    @property
    @pulumi.getter(name="ociPhysicalDeviceName")
    def oci_physical_device_name(self) -> str:
        """
        The FastConnect device that terminates the physical connection.
        """
        return pulumi.get(self, "oci_physical_device_name")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the cross-connect group was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetCrossConnectGroupsCrossConnectGroupMacsecPropertyResult(dict):
    def __init__(__self__, *,
                 encryption_cipher: str,
                 primary_keys: Sequence['outputs.GetCrossConnectGroupsCrossConnectGroupMacsecPropertyPrimaryKeyResult'],
                 state: str):
        """
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param Sequence['GetCrossConnectGroupsCrossConnectGroupMacsecPropertyPrimaryKeyArgs'] primary_keys: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        pulumi.set(__self__, "primary_keys", primary_keys)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> str:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKeys")
    def primary_keys(self) -> Sequence['outputs.GetCrossConnectGroupsCrossConnectGroupMacsecPropertyPrimaryKeyResult']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_keys")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class GetCrossConnectGroupsCrossConnectGroupMacsecPropertyPrimaryKeyResult(dict):
    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_key_secret_version: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_name_secret_version: str):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> str:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> str:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


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

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

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

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


@pulumi.output_type
class GetCrossConnectLocationsCrossConnectLocationResult(dict):
    def __init__(__self__, *,
                 description: str,
                 name: str):
        """
        :param str description: A description of the location.
        :param str name: The name of the location.  Example: `CyrusOne, Chandler, AZ`
        """
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        A description of the location.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the location.  Example: `CyrusOne, Chandler, AZ`
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetCrossConnectLocationsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The name of the location.  Example: `CyrusOne, Chandler, AZ`
        """
        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 name of the location.  Example: `CyrusOne, Chandler, AZ`
        """
        return pulumi.get(self, "name")

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

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


@pulumi.output_type
class GetCrossConnectMacsecPropertyResult(dict):
    def __init__(__self__, *,
                 encryption_cipher: str,
                 primary_keys: Sequence['outputs.GetCrossConnectMacsecPropertyPrimaryKeyResult'],
                 state: str):
        """
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param Sequence['GetCrossConnectMacsecPropertyPrimaryKeyArgs'] primary_keys: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        :param str state: The cross-connect's current state.
        """
        pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        pulumi.set(__self__, "primary_keys", primary_keys)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> str:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKeys")
    def primary_keys(self) -> Sequence['outputs.GetCrossConnectMacsecPropertyPrimaryKeyResult']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_keys")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The cross-connect's current state.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class GetCrossConnectMacsecPropertyPrimaryKeyResult(dict):
    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_key_secret_version: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_name_secret_version: str):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> str:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> str:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


@pulumi.output_type
class GetCrossConnectPortSpeedShapeCrossConnectPortSpeedShapeResult(dict):
    def __init__(__self__, *,
                 name: str,
                 port_speed_in_gbps: int):
        """
        :param str name: The name of the port speed shape.  Example: `10 Gbps`
        :param int port_speed_in_gbps: The port speed in Gbps.  Example: `10`
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "port_speed_in_gbps", port_speed_in_gbps)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the port speed shape.  Example: `10 Gbps`
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="portSpeedInGbps")
    def port_speed_in_gbps(self) -> int:
        """
        The port speed in Gbps.  Example: `10`
        """
        return pulumi.get(self, "port_speed_in_gbps")


@pulumi.output_type
class GetCrossConnectPortSpeedShapeFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The name of the port speed shape.  Example: `10 Gbps`
        """
        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 name of the port speed shape.  Example: `10 Gbps`
        """
        return pulumi.get(self, "name")

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

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


@pulumi.output_type
class GetCrossConnectsCrossConnectResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 cross_connect_group_id: str,
                 customer_reference_name: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 far_cross_connect_or_cross_connect_group_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_active: bool,
                 location_name: str,
                 macsec_properties: Sequence['outputs.GetCrossConnectsCrossConnectMacsecPropertyResult'],
                 near_cross_connect_or_cross_connect_group_id: str,
                 oci_logical_device_name: str,
                 oci_physical_device_name: str,
                 port_name: str,
                 port_speed_shape_name: str,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str cross_connect_group_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect group.
        :param str customer_reference_name: A reference name or identifier for the physical fiber connection that this cross-connect uses.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The cross-connect's Oracle ID (OCID).
        :param str location_name: The name of the FastConnect location where this cross-connect is installed.
        :param Sequence['GetCrossConnectsCrossConnectMacsecPropertyArgs'] macsec_properties: Properties used for MACsec (if capable).
        :param str oci_logical_device_name: The FastConnect device that terminates the logical connection. This device might be different than the device that terminates the physical connection.
        :param str oci_physical_device_name: The FastConnect device that terminates the physical connection.
        :param str port_name: A string identifying the meet-me room port for this cross-connect.
        :param str port_speed_shape_name: The port speed for this cross-connect.  Example: `10 Gbps`
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the cross-connect was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "cross_connect_group_id", cross_connect_group_id)
        pulumi.set(__self__, "customer_reference_name", customer_reference_name)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "far_cross_connect_or_cross_connect_group_id", far_cross_connect_or_cross_connect_group_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_active", is_active)
        pulumi.set(__self__, "location_name", location_name)
        pulumi.set(__self__, "macsec_properties", macsec_properties)
        pulumi.set(__self__, "near_cross_connect_or_cross_connect_group_id", near_cross_connect_or_cross_connect_group_id)
        pulumi.set(__self__, "oci_logical_device_name", oci_logical_device_name)
        pulumi.set(__self__, "oci_physical_device_name", oci_physical_device_name)
        pulumi.set(__self__, "port_name", port_name)
        pulumi.set(__self__, "port_speed_shape_name", port_speed_shape_name)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="crossConnectGroupId")
    def cross_connect_group_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect group.
        """
        return pulumi.get(self, "cross_connect_group_id")

    @property
    @pulumi.getter(name="customerReferenceName")
    def customer_reference_name(self) -> str:
        """
        A reference name or identifier for the physical fiber connection that this cross-connect uses.
        """
        return pulumi.get(self, "customer_reference_name")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The cross-connect's Oracle ID (OCID).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isActive")
    def is_active(self) -> bool:
        return pulumi.get(self, "is_active")

    @property
    @pulumi.getter(name="locationName")
    def location_name(self) -> str:
        """
        The name of the FastConnect location where this cross-connect is installed.
        """
        return pulumi.get(self, "location_name")

    @property
    @pulumi.getter(name="macsecProperties")
    def macsec_properties(self) -> Sequence['outputs.GetCrossConnectsCrossConnectMacsecPropertyResult']:
        """
        Properties used for MACsec (if capable).
        """
        return pulumi.get(self, "macsec_properties")

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

    @property
    @pulumi.getter(name="ociLogicalDeviceName")
    def oci_logical_device_name(self) -> str:
        """
        The FastConnect device that terminates the logical connection. This device might be different than the device that terminates the physical connection.
        """
        return pulumi.get(self, "oci_logical_device_name")

    @property
    @pulumi.getter(name="ociPhysicalDeviceName")
    def oci_physical_device_name(self) -> str:
        """
        The FastConnect device that terminates the physical connection.
        """
        return pulumi.get(self, "oci_physical_device_name")

    @property
    @pulumi.getter(name="portName")
    def port_name(self) -> str:
        """
        A string identifying the meet-me room port for this cross-connect.
        """
        return pulumi.get(self, "port_name")

    @property
    @pulumi.getter(name="portSpeedShapeName")
    def port_speed_shape_name(self) -> str:
        """
        The port speed for this cross-connect.  Example: `10 Gbps`
        """
        return pulumi.get(self, "port_speed_shape_name")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the cross-connect was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetCrossConnectsCrossConnectMacsecPropertyResult(dict):
    def __init__(__self__, *,
                 encryption_cipher: str,
                 primary_keys: Sequence['outputs.GetCrossConnectsCrossConnectMacsecPropertyPrimaryKeyResult'],
                 state: str):
        """
        :param str encryption_cipher: Type of encryption cipher suite to use for the MACsec connection.
        :param Sequence['GetCrossConnectsCrossConnectMacsecPropertyPrimaryKeyArgs'] primary_keys: An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        pulumi.set(__self__, "encryption_cipher", encryption_cipher)
        pulumi.set(__self__, "primary_keys", primary_keys)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="encryptionCipher")
    def encryption_cipher(self) -> str:
        """
        Type of encryption cipher suite to use for the MACsec connection.
        """
        return pulumi.get(self, "encryption_cipher")

    @property
    @pulumi.getter(name="primaryKeys")
    def primary_keys(self) -> Sequence['outputs.GetCrossConnectsCrossConnectMacsecPropertyPrimaryKeyResult']:
        """
        An object defining the Secrets-in-Vault OCIDs representing the MACsec key.
        """
        return pulumi.get(self, "primary_keys")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class GetCrossConnectsCrossConnectMacsecPropertyPrimaryKeyResult(dict):
    def __init__(__self__, *,
                 connectivity_association_key_secret_id: str,
                 connectivity_association_key_secret_version: str,
                 connectivity_association_name_secret_id: str,
                 connectivity_association_name_secret_version: str):
        """
        :param str connectivity_association_key_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        :param str connectivity_association_key_secret_version: The secret version of the `connectivityAssociationKey` secret in Vault.
        :param str connectivity_association_name_secret_id: Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        :param str connectivity_association_name_secret_version: The secret version of the connectivity association name secret in Vault.
        """
        pulumi.set(__self__, "connectivity_association_key_secret_id", connectivity_association_key_secret_id)
        pulumi.set(__self__, "connectivity_association_key_secret_version", connectivity_association_key_secret_version)
        pulumi.set(__self__, "connectivity_association_name_secret_id", connectivity_association_name_secret_id)
        pulumi.set(__self__, "connectivity_association_name_secret_version", connectivity_association_name_secret_version)

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretId")
    def connectivity_association_key_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity Association Key (CAK) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_key_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationKeySecretVersion")
    def connectivity_association_key_secret_version(self) -> str:
        """
        The secret version of the `connectivityAssociationKey` secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_key_secret_version")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretId")
    def connectivity_association_name_secret_id(self) -> str:
        """
        Secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) containing the Connectivity association Key Name (CKN) of this MACsec key.
        """
        return pulumi.get(self, "connectivity_association_name_secret_id")

    @property
    @pulumi.getter(name="connectivityAssociationNameSecretVersion")
    def connectivity_association_name_secret_version(self) -> str:
        """
        The secret version of the connectivity association name secret in Vault.
        """
        return pulumi.get(self, "connectivity_association_name_secret_version")


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

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

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

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


@pulumi.output_type
class GetDedicatedVmHostInstanceShapesDedicatedVmHostInstanceShapeResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 instance_shape_name: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str instance_shape_name: The name of the virtual machine instance shapes that can be launched on a dedicated VM host.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "instance_shape_name", instance_shape_name)

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

    @property
    @pulumi.getter(name="instanceShapeName")
    def instance_shape_name(self) -> str:
        """
        The name of the virtual machine instance shapes that can be launched on a dedicated VM host.
        """
        return pulumi.get(self, "instance_shape_name")


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

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

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

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


@pulumi.output_type
class GetDedicatedVmHostInstancesDedicatedVmHostInstanceResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 instance_id: str,
                 shape: str,
                 time_created: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str instance_id: The OCID of the virtual machine instance.
        :param str shape: The shape of the VM instance.
        :param str time_created: The date and time the virtual machine instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "time_created", time_created)

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

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

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the virtual machine instance.
        """
        return pulumi.get(self, "instance_id")

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

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the virtual machine instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetDedicatedVmHostShapesDedicatedVmHostShapeResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 dedicated_vm_host_shape: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str dedicated_vm_host_shape: The name of the dedicated VM host shape. You can enumerate all available shapes by calling [ListDedicatedVmHostShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/dedicatedVmHostShapes).
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "dedicated_vm_host_shape", dedicated_vm_host_shape)

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

    @property
    @pulumi.getter(name="dedicatedVmHostShape")
    def dedicated_vm_host_shape(self) -> str:
        """
        The name of the dedicated VM host shape. You can enumerate all available shapes by calling [ListDedicatedVmHostShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/dedicatedVmHostShapes).
        """
        return pulumi.get(self, "dedicated_vm_host_shape")


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

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

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

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


@pulumi.output_type
class GetDedicatedVmHostsDedicatedVmHostResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 dedicated_vm_host_shape: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 remaining_memory_in_gbs: float,
                 remaining_ocpus: float,
                 state: str,
                 time_created: str,
                 total_memory_in_gbs: float,
                 total_ocpus: float):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str dedicated_vm_host_shape: The dedicated virtual machine host shape. The shape determines the number of CPUs and other resources available for VMs.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str fault_domain: The fault domain for the dedicated virtual machine host's assigned instances. For more information, see [Fault Domains](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm#fault).
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the dedicated VM host.
        :param float remaining_memory_in_gbs: The current available memory of the dedicated VM host, in GBs.
        :param float remaining_ocpus: The current available OCPUs of the dedicated VM host.
        :param str state: A filter to only return resources that match the given lifecycle state.
        :param str time_created: The date and time the dedicated VM host was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param float total_memory_in_gbs: The current total memory of the dedicated VM host, in GBs.
        :param float total_ocpus: The current total OCPUs of the dedicated VM host.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "dedicated_vm_host_shape", dedicated_vm_host_shape)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "remaining_memory_in_gbs", remaining_memory_in_gbs)
        pulumi.set(__self__, "remaining_ocpus", remaining_ocpus)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "total_memory_in_gbs", total_memory_in_gbs)
        pulumi.set(__self__, "total_ocpus", total_ocpus)

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

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

    @property
    @pulumi.getter(name="dedicatedVmHostShape")
    def dedicated_vm_host_shape(self) -> str:
        """
        The dedicated virtual machine host shape. The shape determines the number of CPUs and other resources available for VMs.
        """
        return pulumi.get(self, "dedicated_vm_host_shape")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain for the dedicated virtual machine host's assigned instances. For more information, see [Fault Domains](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm#fault).
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="remainingMemoryInGbs")
    def remaining_memory_in_gbs(self) -> float:
        """
        The current available memory of the dedicated VM host, in GBs.
        """
        return pulumi.get(self, "remaining_memory_in_gbs")

    @property
    @pulumi.getter(name="remainingOcpus")
    def remaining_ocpus(self) -> float:
        """
        The current available OCPUs of the dedicated VM host.
        """
        return pulumi.get(self, "remaining_ocpus")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the dedicated VM host was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="totalMemoryInGbs")
    def total_memory_in_gbs(self) -> float:
        """
        The current total memory of the dedicated VM host, in GBs.
        """
        return pulumi.get(self, "total_memory_in_gbs")

    @property
    @pulumi.getter(name="totalOcpus")
    def total_ocpus(self) -> float:
        """
        The current total OCPUs of the dedicated VM host.
        """
        return pulumi.get(self, "total_ocpus")


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

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

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

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


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

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

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

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


@pulumi.output_type
class GetDhcpOptionsOptionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 domain_name_type: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 options: Sequence['outputs.GetDhcpOptionsOptionOptionResult'],
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str domain_name_type: The search domain name type of DHCP options
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)) for the set of DHCP options.
        :param Sequence['GetDhcpOptionsOptionOptionArgs'] options: The collection of individual DHCP options.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: Date and time the set of DHCP options was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "domain_name_type", domain_name_type)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "options", options)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="domainNameType")
    def domain_name_type(self) -> str:
        """
        The search domain name type of DHCP options
        """
        return pulumi.get(self, "domain_name_type")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)) for the set of DHCP options.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def options(self) -> Sequence['outputs.GetDhcpOptionsOptionOptionResult']:
        """
        The collection of individual DHCP options.
        """
        return pulumi.get(self, "options")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        Date and time the set of DHCP options was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

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


@pulumi.output_type
class GetDhcpOptionsOptionOptionResult(dict):
    def __init__(__self__, *,
                 custom_dns_servers: Sequence[str],
                 search_domain_names: Sequence[str],
                 server_type: str,
                 type: str):
        """
        :param Sequence[str] custom_dns_servers: If you set `serverType` to `CustomDnsServer`, specify the IP address of at least one DNS server of your choice (three maximum).
        :param Sequence[str] search_domain_names: A single search domain name according to [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). During a DNS query, the OS will append this search domain name to the value being queried.
        :param str server_type: * **VcnLocal:** Reserved for future use.
               * **VcnLocalPlusInternet:** Also referred to as "Internet and VCN Resolver". Instances can resolve internet hostnames (no internet gateway is required), and can resolve hostnames of instances in the VCN. This is the default value in the default set of DHCP options in the VCN. For the Internet and VCN Resolver to work across the VCN, there must also be a DNS label set for the VCN, a DNS label set for each subnet, and a hostname for each instance. The Internet and VCN Resolver also enables reverse DNS lookup, which lets you determine the hostname corresponding to the private IP address. For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).
               * **CustomDnsServer:** Instances use a DNS server of your choice (three maximum).
        :param str type: The specific DHCP option. Either `DomainNameServer` (for [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/)) or `SearchDomain` (for [DhcpSearchDomainOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpSearchDomainOption/)).
        """
        pulumi.set(__self__, "custom_dns_servers", custom_dns_servers)
        pulumi.set(__self__, "search_domain_names", search_domain_names)
        pulumi.set(__self__, "server_type", server_type)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="customDnsServers")
    def custom_dns_servers(self) -> Sequence[str]:
        """
        If you set `serverType` to `CustomDnsServer`, specify the IP address of at least one DNS server of your choice (three maximum).
        """
        return pulumi.get(self, "custom_dns_servers")

    @property
    @pulumi.getter(name="searchDomainNames")
    def search_domain_names(self) -> Sequence[str]:
        """
        A single search domain name according to [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123). During a DNS query, the OS will append this search domain name to the value being queried.
        """
        return pulumi.get(self, "search_domain_names")

    @property
    @pulumi.getter(name="serverType")
    def server_type(self) -> str:
        """
        * **VcnLocal:** Reserved for future use.
        * **VcnLocalPlusInternet:** Also referred to as "Internet and VCN Resolver". Instances can resolve internet hostnames (no internet gateway is required), and can resolve hostnames of instances in the VCN. This is the default value in the default set of DHCP options in the VCN. For the Internet and VCN Resolver to work across the VCN, there must also be a DNS label set for the VCN, a DNS label set for each subnet, and a hostname for each instance. The Internet and VCN Resolver also enables reverse DNS lookup, which lets you determine the hostname corresponding to the private IP address. For more information, see [DNS in Your Virtual Cloud Network](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/dns.htm).
        * **CustomDnsServer:** Instances use a DNS server of your choice (three maximum).
        """
        return pulumi.get(self, "server_type")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The specific DHCP option. Either `DomainNameServer` (for [DhcpDnsOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpDnsOption/)) or `SearchDomain` (for [DhcpSearchDomainOption](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/DhcpSearchDomainOption/)).
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetDrgAttachmentsDrgAttachmentResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 drg_id: str,
                 drg_route_table_id: str,
                 export_drg_route_distribution_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_cross_tenancy: bool,
                 network_details: Sequence['outputs.GetDrgAttachmentsDrgAttachmentNetworkDetailResult'],
                 remove_export_drg_route_distribution_trigger: bool,
                 route_table_id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str drg_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        :param str drg_route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG route table assigned to the DRG attachment.
        :param str export_drg_route_distribution_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the export route distribution used to specify how routes in the assigned DRG route table are advertised to the attachment. If this value is null, no routes are advertised through this attachment.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network attached to the DRG.
        :param bool is_cross_tenancy: Indicates whether the DRG attachment and attached network live in a different tenancy than the DRG.  Example: `false`
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the DRG attachment is using.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the DRG attachment was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "drg_id", drg_id)
        pulumi.set(__self__, "drg_route_table_id", drg_route_table_id)
        pulumi.set(__self__, "export_drg_route_distribution_id", export_drg_route_distribution_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_cross_tenancy", is_cross_tenancy)
        pulumi.set(__self__, "network_details", network_details)
        pulumi.set(__self__, "remove_export_drg_route_distribution_trigger", remove_export_drg_route_distribution_trigger)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

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

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

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

    @property
    @pulumi.getter(name="drgRouteTableId")
    def drg_route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG route table assigned to the DRG attachment.
        """
        return pulumi.get(self, "drg_route_table_id")

    @property
    @pulumi.getter(name="exportDrgRouteDistributionId")
    def export_drg_route_distribution_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the export route distribution used to specify how routes in the assigned DRG route table are advertised to the attachment. If this value is null, no routes are advertised through this attachment.
        """
        return pulumi.get(self, "export_drg_route_distribution_id")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="isCrossTenancy")
    def is_cross_tenancy(self) -> bool:
        """
        Indicates whether the DRG attachment and attached network live in a different tenancy than the DRG.  Example: `false`
        """
        return pulumi.get(self, "is_cross_tenancy")

    @property
    @pulumi.getter(name="networkDetails")
    def network_details(self) -> Sequence['outputs.GetDrgAttachmentsDrgAttachmentNetworkDetailResult']:
        return pulumi.get(self, "network_details")

    @property
    @pulumi.getter(name="removeExportDrgRouteDistributionTrigger")
    def remove_export_drg_route_distribution_trigger(self) -> bool:
        return pulumi.get(self, "remove_export_drg_route_distribution_trigger")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the DRG attachment is using.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the DRG attachment was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

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


@pulumi.output_type
class GetDrgAttachmentsDrgAttachmentNetworkDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 ipsec_connection_id: str,
                 route_table_id: str,
                 type: str,
                 vcn_route_type: str):
        """
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network attached to the DRG.
        :param str ipsec_connection_id: The IPSec connection that contains the attached IPSec tunnel.
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the DRG attachment is using.
        :param str type: The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`, `VIRTUAL_CIRCUIT`
        :param str vcn_route_type: Indicates whether the VCN CIDRs or the individual subnet CIDRs are imported from the attachment. Routes from the VCN ingress route table are always imported.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipsec_connection_id", ipsec_connection_id)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "vcn_route_type", vcn_route_type)

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

    @property
    @pulumi.getter(name="ipsecConnectionId")
    def ipsec_connection_id(self) -> str:
        """
        The IPSec connection that contains the attached IPSec tunnel.
        """
        return pulumi.get(self, "ipsec_connection_id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the DRG attachment is using.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `IPSEC_TUNNEL`, `REMOTE_PEERING_CONNECTION`, `VCN`, `VIRTUAL_CIRCUIT`
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="vcnRouteType")
    def vcn_route_type(self) -> str:
        """
        Indicates whether the VCN CIDRs or the individual subnet CIDRs are imported from the attachment. Routes from the VCN ingress route table are always imported.
        """
        return pulumi.get(self, "vcn_route_type")


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

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

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

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


@pulumi.output_type
class GetDrgRouteDistributionStatementsDrgRouteDistributionStatementResult(dict):
    def __init__(__self__, *,
                 action: str,
                 id: str,
                 match_criterias: Sequence['outputs.GetDrgRouteDistributionStatementsDrgRouteDistributionStatementMatchCriteriaResult'],
                 priority: int):
        """
        :param str action: `ACCEPT` indicates the route should be imported or exported as-is.
        :param str id: The Oracle-assigned ID of the route distribution statement.
        :param Sequence['GetDrgRouteDistributionStatementsDrgRouteDistributionStatementMatchCriteriaArgs'] match_criterias: The action is applied only if all of the match criteria is met. If match type is MATCH_ALL, any input is considered a match.
        :param int priority: This field specifies the priority of each statement in a route distribution. Priorities must be unique within a particular route distribution. The priority will be represented as a number between 0 and 65535 where a lower number indicates a higher priority. When a route is processed, statements are applied in the order defined by their priority. The first matching rule dictates the action that will be taken on the route.
        """
        pulumi.set(__self__, "action", action)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "match_criterias", match_criterias)
        pulumi.set(__self__, "priority", priority)

    @property
    @pulumi.getter
    def action(self) -> str:
        """
        `ACCEPT` indicates the route should be imported or exported as-is.
        """
        return pulumi.get(self, "action")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The Oracle-assigned ID of the route distribution statement.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="matchCriterias")
    def match_criterias(self) -> Sequence['outputs.GetDrgRouteDistributionStatementsDrgRouteDistributionStatementMatchCriteriaResult']:
        """
        The action is applied only if all of the match criteria is met. If match type is MATCH_ALL, any input is considered a match.
        """
        return pulumi.get(self, "match_criterias")

    @property
    @pulumi.getter
    def priority(self) -> int:
        """
        This field specifies the priority of each statement in a route distribution. Priorities must be unique within a particular route distribution. The priority will be represented as a number between 0 and 65535 where a lower number indicates a higher priority. When a route is processed, statements are applied in the order defined by their priority. The first matching rule dictates the action that will be taken on the route.
        """
        return pulumi.get(self, "priority")


@pulumi.output_type
class GetDrgRouteDistributionStatementsDrgRouteDistributionStatementMatchCriteriaResult(dict):
    def __init__(__self__, *,
                 attachment_type: str,
                 drg_attachment_id: str,
                 match_type: str):
        """
        :param str attachment_type: The type of the network resource to be included in this match. A match for a network type implies that all DRG attachments of that type insert routes into the table.
        :param str drg_attachment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG attachment.
        :param str match_type: The type of the match criteria for a route distribution statement.
        """
        pulumi.set(__self__, "attachment_type", attachment_type)
        pulumi.set(__self__, "drg_attachment_id", drg_attachment_id)
        pulumi.set(__self__, "match_type", match_type)

    @property
    @pulumi.getter(name="attachmentType")
    def attachment_type(self) -> str:
        """
        The type of the network resource to be included in this match. A match for a network type implies that all DRG attachments of that type insert routes into the table.
        """
        return pulumi.get(self, "attachment_type")

    @property
    @pulumi.getter(name="drgAttachmentId")
    def drg_attachment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG attachment.
        """
        return pulumi.get(self, "drg_attachment_id")

    @property
    @pulumi.getter(name="matchType")
    def match_type(self) -> str:
        """
        The type of the match criteria for a route distribution statement.
        """
        return pulumi.get(self, "match_type")


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

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

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

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


@pulumi.output_type
class GetDrgRouteDistributionsDrgRouteDistributionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 distribution_type: str,
                 drg_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the route distribution.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str distribution_type: Whether this distribution defines how routes get imported into route tables or exported through DRG attachments.
        :param str drg_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The route distribution's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str state: A filter that only returns resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the route distribution was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "distribution_type", distribution_type)
        pulumi.set(__self__, "drg_id", drg_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the route distribution.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="distributionType")
    def distribution_type(self) -> str:
        """
        Whether this distribution defines how routes get imported into route tables or exported through DRG attachments.
        """
        return pulumi.get(self, "distribution_type")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The route distribution's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter that only returns resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the route distribution was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetDrgRouteTableRouteRulesDrgRouteRuleResult(dict):
    def __init__(__self__, *,
                 attributes: Mapping[str, Any],
                 destination: str,
                 destination_type: str,
                 id: str,
                 is_blackhole: bool,
                 is_conflict: bool,
                 next_hop_drg_attachment_id: str,
                 route_provenance: str,
                 route_type: str):
        """
        :param Mapping[str, Any] attributes: Additional properties for the route, computed by the service.
        :param str destination: Represents the range of IP addresses to match against when routing traffic.
        :param str destination_type: The type of destination for the rule.
        :param str id: The Oracle-assigned ID of the DRG route rule.
        :param bool is_blackhole: Indicates that if the next hop attachment does not exist, so traffic for this route is discarded without notification.
        :param bool is_conflict: Indicates that the route was not imported due to a conflict between route rules.
        :param str next_hop_drg_attachment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next hop DRG attachment responsible for reaching the network destination.
        :param str route_provenance: The earliest origin of a route. If a route is advertised to a DRG through an IPsec tunnel attachment, and is propagated to peered DRGs via RPC attachments, the route's provenance in the peered DRGs remains `IPSEC_TUNNEL`, because that is the earliest origin.
        :param str route_type: Static routes are specified through the DRG route table API. Dynamic routes are learned by the DRG from the DRG attachments through various routing protocols.
        """
        pulumi.set(__self__, "attributes", attributes)
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "destination_type", destination_type)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_blackhole", is_blackhole)
        pulumi.set(__self__, "is_conflict", is_conflict)
        pulumi.set(__self__, "next_hop_drg_attachment_id", next_hop_drg_attachment_id)
        pulumi.set(__self__, "route_provenance", route_provenance)
        pulumi.set(__self__, "route_type", route_type)

    @property
    @pulumi.getter
    def attributes(self) -> Mapping[str, Any]:
        """
        Additional properties for the route, computed by the service.
        """
        return pulumi.get(self, "attributes")

    @property
    @pulumi.getter
    def destination(self) -> str:
        """
        Represents the range of IP addresses to match against when routing traffic.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> str:
        """
        The type of destination for the rule.
        """
        return pulumi.get(self, "destination_type")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The Oracle-assigned ID of the DRG route rule.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isBlackhole")
    def is_blackhole(self) -> bool:
        """
        Indicates that if the next hop attachment does not exist, so traffic for this route is discarded without notification.
        """
        return pulumi.get(self, "is_blackhole")

    @property
    @pulumi.getter(name="isConflict")
    def is_conflict(self) -> bool:
        """
        Indicates that the route was not imported due to a conflict between route rules.
        """
        return pulumi.get(self, "is_conflict")

    @property
    @pulumi.getter(name="nextHopDrgAttachmentId")
    def next_hop_drg_attachment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next hop DRG attachment responsible for reaching the network destination.
        """
        return pulumi.get(self, "next_hop_drg_attachment_id")

    @property
    @pulumi.getter(name="routeProvenance")
    def route_provenance(self) -> str:
        """
        The earliest origin of a route. If a route is advertised to a DRG through an IPsec tunnel attachment, and is propagated to peered DRGs via RPC attachments, the route's provenance in the peered DRGs remains `IPSEC_TUNNEL`, because that is the earliest origin.
        """
        return pulumi.get(self, "route_provenance")

    @property
    @pulumi.getter(name="routeType")
    def route_type(self) -> str:
        """
        Static routes are specified through the DRG route table API. Dynamic routes are learned by the DRG from the DRG attachments through various routing protocols.
        """
        return pulumi.get(self, "route_type")


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

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

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

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


@pulumi.output_type
class GetDrgRouteTablesDrgRouteTableResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 drg_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 import_drg_route_distribution_id: str,
                 is_ecmp_enabled: bool,
                 remove_import_trigger: bool,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment the DRG is in. The DRG route table is always in the same compartment as the DRG.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str drg_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG route table.
        :param str import_drg_route_distribution_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the import route distribution.
        :param bool is_ecmp_enabled: If you want traffic to be routed using ECMP across your virtual circuits or IPSec tunnels to your on-premises network, enable ECMP on the DRG route table to which these attachments import routes.
        :param str state: A filter that only returns matches for the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the DRG route table was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "drg_id", drg_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "import_drg_route_distribution_id", import_drg_route_distribution_id)
        pulumi.set(__self__, "is_ecmp_enabled", is_ecmp_enabled)
        pulumi.set(__self__, "remove_import_trigger", remove_import_trigger)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment the DRG is in. The DRG route table is always in the same compartment as the DRG.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

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

    @property
    @pulumi.getter(name="importDrgRouteDistributionId")
    def import_drg_route_distribution_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the import route distribution.
        """
        return pulumi.get(self, "import_drg_route_distribution_id")

    @property
    @pulumi.getter(name="isEcmpEnabled")
    def is_ecmp_enabled(self) -> bool:
        """
        If you want traffic to be routed using ECMP across your virtual circuits or IPSec tunnels to your on-premises network, enable ECMP on the DRG route table to which these attachments import routes.
        """
        return pulumi.get(self, "is_ecmp_enabled")

    @property
    @pulumi.getter(name="removeImportTrigger")
    def remove_import_trigger(self) -> bool:
        return pulumi.get(self, "remove_import_trigger")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter that only returns matches for the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the DRG route table was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


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

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

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

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


@pulumi.output_type
class GetDrgsDrgResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 default_drg_route_tables: Sequence['outputs.GetDrgsDrgDefaultDrgRouteTableResult'],
                 default_export_drg_route_distribution_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 redundancy_status: str,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Sequence['GetDrgsDrgDefaultDrgRouteTableArgs'] default_drg_route_tables: The default DRG route table for this DRG. Each network type has a default DRG route table.
        :param str default_export_drg_route_distribution_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of this DRG's default export route distribution for the DRG attachments.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The DRG's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str state: The DRG's current state.
        :param str time_created: The date and time the DRG was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "default_drg_route_tables", default_drg_route_tables)
        pulumi.set(__self__, "default_export_drg_route_distribution_id", default_export_drg_route_distribution_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "redundancy_status", redundancy_status)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

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

    @property
    @pulumi.getter(name="defaultDrgRouteTables")
    def default_drg_route_tables(self) -> Sequence['outputs.GetDrgsDrgDefaultDrgRouteTableResult']:
        """
        The default DRG route table for this DRG. Each network type has a default DRG route table.
        """
        return pulumi.get(self, "default_drg_route_tables")

    @property
    @pulumi.getter(name="defaultExportDrgRouteDistributionId")
    def default_export_drg_route_distribution_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of this DRG's default export route distribution for the DRG attachments.
        """
        return pulumi.get(self, "default_export_drg_route_distribution_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

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

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The DRG's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

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

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The DRG's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the DRG was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetDrgsDrgDefaultDrgRouteTableResult(dict):
    def __init__(__self__, *,
                 ipsec_tunnel: str,
                 remote_peering_connection: str,
                 vcn: str,
                 virtual_circuit: str):
        """
        :param str ipsec_tunnel: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table assigned to DRG attachments of type IPSEC_TUNNEL on creation.
        :param str remote_peering_connection: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type REMOTE_PEERING_CONNECTION on creation.
        :param str vcn: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VCN on creation.
        :param str virtual_circuit: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VIRTUAL_CIRCUIT on creation.
        """
        pulumi.set(__self__, "ipsec_tunnel", ipsec_tunnel)
        pulumi.set(__self__, "remote_peering_connection", remote_peering_connection)
        pulumi.set(__self__, "vcn", vcn)
        pulumi.set(__self__, "virtual_circuit", virtual_circuit)

    @property
    @pulumi.getter(name="ipsecTunnel")
    def ipsec_tunnel(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table assigned to DRG attachments of type IPSEC_TUNNEL on creation.
        """
        return pulumi.get(self, "ipsec_tunnel")

    @property
    @pulumi.getter(name="remotePeeringConnection")
    def remote_peering_connection(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type REMOTE_PEERING_CONNECTION on creation.
        """
        return pulumi.get(self, "remote_peering_connection")

    @property
    @pulumi.getter
    def vcn(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VCN on creation.
        """
        return pulumi.get(self, "vcn")

    @property
    @pulumi.getter(name="virtualCircuit")
    def virtual_circuit(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the default DRG route table to be assigned to DRG attachments of type VIRTUAL_CIRCUIT on creation.
        """
        return pulumi.get(self, "virtual_circuit")


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

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

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

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


@pulumi.output_type
class GetFastConnectProviderServicesFastConnectProviderServiceResult(dict):
    def __init__(__self__, *,
                 bandwith_shape_management: str,
                 customer_asn_management: str,
                 description: str,
                 id: str,
                 private_peering_bgp_management: str,
                 provider_name: str,
                 provider_service_key_management: str,
                 provider_service_name: str,
                 public_peering_bgp_management: str,
                 required_total_cross_connects: int,
                 supported_virtual_circuit_types: Sequence[str],
                 type: str):
        """
        :param str bandwith_shape_management: Who is responsible for managing the virtual circuit bandwidth.
        :param str customer_asn_management: Who is responsible for managing the ASN information for the network at the other end of the connection from Oracle.
        :param str description: The location of the provider's website or portal. This portal is where you can get information about the provider service, create a virtual circuit connection from the provider to Oracle Cloud Infrastructure, and retrieve your provider service key for that virtual circuit connection.  Example: `https://example.com`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the service offered by the provider.
        :param str private_peering_bgp_management: Who is responsible for managing the private peering BGP information.
        :param str provider_name: The name of the provider.
        :param str provider_service_key_management: Who is responsible for managing the provider service key.
        :param str provider_service_name: The name of the service offered by the provider.
        :param str public_peering_bgp_management: Who is responsible for managing the public peering BGP information.
        :param int required_total_cross_connects: Total number of cross-connect or cross-connect groups required for the virtual circuit.
        :param Sequence[str] supported_virtual_circuit_types: An array of virtual circuit types supported by this service.
        :param str type: Provider service type.
        """
        pulumi.set(__self__, "bandwith_shape_management", bandwith_shape_management)
        pulumi.set(__self__, "customer_asn_management", customer_asn_management)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "private_peering_bgp_management", private_peering_bgp_management)
        pulumi.set(__self__, "provider_name", provider_name)
        pulumi.set(__self__, "provider_service_key_management", provider_service_key_management)
        pulumi.set(__self__, "provider_service_name", provider_service_name)
        pulumi.set(__self__, "public_peering_bgp_management", public_peering_bgp_management)
        pulumi.set(__self__, "required_total_cross_connects", required_total_cross_connects)
        pulumi.set(__self__, "supported_virtual_circuit_types", supported_virtual_circuit_types)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="bandwithShapeManagement")
    def bandwith_shape_management(self) -> str:
        """
        Who is responsible for managing the virtual circuit bandwidth.
        """
        return pulumi.get(self, "bandwith_shape_management")

    @property
    @pulumi.getter(name="customerAsnManagement")
    def customer_asn_management(self) -> str:
        """
        Who is responsible for managing the ASN information for the network at the other end of the connection from Oracle.
        """
        return pulumi.get(self, "customer_asn_management")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        The location of the provider's website or portal. This portal is where you can get information about the provider service, create a virtual circuit connection from the provider to Oracle Cloud Infrastructure, and retrieve your provider service key for that virtual circuit connection.  Example: `https://example.com`
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="privatePeeringBgpManagement")
    def private_peering_bgp_management(self) -> str:
        """
        Who is responsible for managing the private peering BGP information.
        """
        return pulumi.get(self, "private_peering_bgp_management")

    @property
    @pulumi.getter(name="providerName")
    def provider_name(self) -> str:
        """
        The name of the provider.
        """
        return pulumi.get(self, "provider_name")

    @property
    @pulumi.getter(name="providerServiceKeyManagement")
    def provider_service_key_management(self) -> str:
        """
        Who is responsible for managing the provider service key.
        """
        return pulumi.get(self, "provider_service_key_management")

    @property
    @pulumi.getter(name="providerServiceName")
    def provider_service_name(self) -> str:
        """
        The name of the service offered by the provider.
        """
        return pulumi.get(self, "provider_service_name")

    @property
    @pulumi.getter(name="publicPeeringBgpManagement")
    def public_peering_bgp_management(self) -> str:
        """
        Who is responsible for managing the public peering BGP information.
        """
        return pulumi.get(self, "public_peering_bgp_management")

    @property
    @pulumi.getter(name="requiredTotalCrossConnects")
    def required_total_cross_connects(self) -> int:
        """
        Total number of cross-connect or cross-connect groups required for the virtual circuit.
        """
        return pulumi.get(self, "required_total_cross_connects")

    @property
    @pulumi.getter(name="supportedVirtualCircuitTypes")
    def supported_virtual_circuit_types(self) -> Sequence[str]:
        """
        An array of virtual circuit types supported by this service.
        """
        return pulumi.get(self, "supported_virtual_circuit_types")

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


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

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

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

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


@pulumi.output_type
class GetImageAgentFeatureResult(dict):
    def __init__(__self__, *,
                 is_management_supported: bool,
                 is_monitoring_supported: bool):
        """
        :param bool is_management_supported: This attribute is not used.
        :param bool is_monitoring_supported: This attribute is not used.
        """
        pulumi.set(__self__, "is_management_supported", is_management_supported)
        pulumi.set(__self__, "is_monitoring_supported", is_monitoring_supported)

    @property
    @pulumi.getter(name="isManagementSupported")
    def is_management_supported(self) -> bool:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_management_supported")

    @property
    @pulumi.getter(name="isMonitoringSupported")
    def is_monitoring_supported(self) -> bool:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_monitoring_supported")


@pulumi.output_type
class GetImageImageSourceDetailResult(dict):
    def __init__(__self__, *,
                 bucket_name: str,
                 namespace_name: str,
                 object_name: str,
                 operating_system: str,
                 operating_system_version: str,
                 source_image_type: str,
                 source_type: str,
                 source_uri: str):
        """
        :param str operating_system: The image's operating system.  Example: `Oracle Linux`
        :param str operating_system_version: The image's operating system version.  Example: `7.2`
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "namespace_name", namespace_name)
        pulumi.set(__self__, "object_name", object_name)
        pulumi.set(__self__, "operating_system", operating_system)
        pulumi.set(__self__, "operating_system_version", operating_system_version)
        pulumi.set(__self__, "source_image_type", source_image_type)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "source_uri", source_uri)

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

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

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

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> str:
        """
        The image's operating system.  Example: `Oracle Linux`
        """
        return pulumi.get(self, "operating_system")

    @property
    @pulumi.getter(name="operatingSystemVersion")
    def operating_system_version(self) -> str:
        """
        The image's operating system version.  Example: `7.2`
        """
        return pulumi.get(self, "operating_system_version")

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

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

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


@pulumi.output_type
class GetImageLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetImageShapeMemoryConstraintResult(dict):
    def __init__(__self__, *,
                 max_in_gbs: int,
                 min_in_gbs: int):
        """
        :param int max_in_gbs: The maximum amount of memory, in gigabytes.
        :param int min_in_gbs: The minimum amount of memory, in gigabytes.
        """
        pulumi.set(__self__, "max_in_gbs", max_in_gbs)
        pulumi.set(__self__, "min_in_gbs", min_in_gbs)

    @property
    @pulumi.getter(name="maxInGbs")
    def max_in_gbs(self) -> int:
        """
        The maximum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "max_in_gbs")

    @property
    @pulumi.getter(name="minInGbs")
    def min_in_gbs(self) -> int:
        """
        The minimum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "min_in_gbs")


@pulumi.output_type
class GetImageShapeOcpuConstraintResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum number of OCPUs supported for this image and shape.
        :param int min: The minimum number of OCPUs supported for this image and shape.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum number of OCPUs supported for this image and shape.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum number of OCPUs supported for this image and shape.
        """
        return pulumi.get(self, "min")


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

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

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

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


@pulumi.output_type
class GetImageShapesImageShapeCompatibilityResult(dict):
    def __init__(__self__, *,
                 image_id: str,
                 memory_constraints: Sequence['outputs.GetImageShapesImageShapeCompatibilityMemoryConstraintResult'],
                 ocpu_constraints: Sequence['outputs.GetImageShapesImageShapeCompatibilityOcpuConstraintResult'],
                 shape: str):
        """
        :param str image_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the image.
        :param Sequence['GetImageShapesImageShapeCompatibilityMemoryConstraintArgs'] memory_constraints: For a flexible image and shape, the amount of memory supported for instances that use this image.
        :param Sequence['GetImageShapesImageShapeCompatibilityOcpuConstraintArgs'] ocpu_constraints: OCPU options for an image and shape.
        :param str shape: The shape name.
        """
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "memory_constraints", memory_constraints)
        pulumi.set(__self__, "ocpu_constraints", ocpu_constraints)
        pulumi.set(__self__, "shape", shape)

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the image.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="memoryConstraints")
    def memory_constraints(self) -> Sequence['outputs.GetImageShapesImageShapeCompatibilityMemoryConstraintResult']:
        """
        For a flexible image and shape, the amount of memory supported for instances that use this image.
        """
        return pulumi.get(self, "memory_constraints")

    @property
    @pulumi.getter(name="ocpuConstraints")
    def ocpu_constraints(self) -> Sequence['outputs.GetImageShapesImageShapeCompatibilityOcpuConstraintResult']:
        """
        OCPU options for an image and shape.
        """
        return pulumi.get(self, "ocpu_constraints")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape name.
        """
        return pulumi.get(self, "shape")


@pulumi.output_type
class GetImageShapesImageShapeCompatibilityMemoryConstraintResult(dict):
    def __init__(__self__, *,
                 max_in_gbs: int,
                 min_in_gbs: int):
        """
        :param int max_in_gbs: The maximum amount of memory, in gigabytes.
        :param int min_in_gbs: The minimum amount of memory, in gigabytes.
        """
        pulumi.set(__self__, "max_in_gbs", max_in_gbs)
        pulumi.set(__self__, "min_in_gbs", min_in_gbs)

    @property
    @pulumi.getter(name="maxInGbs")
    def max_in_gbs(self) -> int:
        """
        The maximum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "max_in_gbs")

    @property
    @pulumi.getter(name="minInGbs")
    def min_in_gbs(self) -> int:
        """
        The minimum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "min_in_gbs")


@pulumi.output_type
class GetImageShapesImageShapeCompatibilityOcpuConstraintResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum number of OCPUs supported for this image and shape.
        :param int min: The minimum number of OCPUs supported for this image and shape.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum number of OCPUs supported for this image and shape.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum number of OCPUs supported for this image and shape.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetImagesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetImagesImageResult(dict):
    def __init__(__self__, *,
                 agent_features: Sequence['outputs.GetImagesImageAgentFeatureResult'],
                 base_image_id: str,
                 billable_size_in_gbs: str,
                 compartment_id: str,
                 create_image_allowed: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 image_source_details: Sequence['outputs.GetImagesImageImageSourceDetailResult'],
                 instance_id: str,
                 launch_mode: str,
                 launch_options: Sequence['outputs.GetImagesImageLaunchOptionResult'],
                 listing_type: str,
                 operating_system: str,
                 operating_system_version: str,
                 size_in_mbs: str,
                 state: str,
                 time_created: str):
        """
        :param Sequence['GetImagesImageAgentFeatureArgs'] agent_features: Oracle Cloud Agent features supported on the image.
        :param str base_image_id: The OCID of the image originally used to launch the instance.
        :param str billable_size_in_gbs: The size of the internal storage for this image that is subject to billing (1 GB = 1,073,741,824 bytes).  Example: `100`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param bool create_image_allowed: Whether instances launched with this image can be used to create new images. For example, you cannot create an image of an Oracle Database instance.  Example: `true`
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the image.
        :param str launch_mode: Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        :param Sequence['GetImagesImageLaunchOptionArgs'] launch_options: Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        :param str listing_type: The listing type of the image. The default value is "NONE".
        :param str operating_system: The image's operating system.  Example: `Oracle Linux`
        :param str operating_system_version: The image's operating system version.  Example: `7.2`
        :param str size_in_mbs: The boot volume size for an instance launched from this image (1 MB = 1,048,576 bytes). Note this is not the same as the size of the image when it was exported or the actual size of the image.  Example: `47694`
        :param str state: A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        :param str time_created: The date and time the image was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "agent_features", agent_features)
        pulumi.set(__self__, "base_image_id", base_image_id)
        pulumi.set(__self__, "billable_size_in_gbs", billable_size_in_gbs)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_image_allowed", create_image_allowed)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image_source_details", image_source_details)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "launch_mode", launch_mode)
        pulumi.set(__self__, "launch_options", launch_options)
        pulumi.set(__self__, "listing_type", listing_type)
        pulumi.set(__self__, "operating_system", operating_system)
        pulumi.set(__self__, "operating_system_version", operating_system_version)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="agentFeatures")
    def agent_features(self) -> Sequence['outputs.GetImagesImageAgentFeatureResult']:
        """
        Oracle Cloud Agent features supported on the image.
        """
        return pulumi.get(self, "agent_features")

    @property
    @pulumi.getter(name="baseImageId")
    def base_image_id(self) -> str:
        """
        The OCID of the image originally used to launch the instance.
        """
        return pulumi.get(self, "base_image_id")

    @property
    @pulumi.getter(name="billableSizeInGbs")
    def billable_size_in_gbs(self) -> str:
        """
        The size of the internal storage for this image that is subject to billing (1 GB = 1,073,741,824 bytes).  Example: `100`
        """
        return pulumi.get(self, "billable_size_in_gbs")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createImageAllowed")
    def create_image_allowed(self) -> bool:
        """
        Whether instances launched with this image can be used to create new images. For example, you cannot create an image of an Oracle Database instance.  Example: `true`
        """
        return pulumi.get(self, "create_image_allowed")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the image.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="imageSourceDetails")
    def image_source_details(self) -> Sequence['outputs.GetImagesImageImageSourceDetailResult']:
        return pulumi.get(self, "image_source_details")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="launchMode")
    def launch_mode(self) -> str:
        """
        Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        """
        return pulumi.get(self, "launch_mode")

    @property
    @pulumi.getter(name="launchOptions")
    def launch_options(self) -> Sequence['outputs.GetImagesImageLaunchOptionResult']:
        """
        Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        """
        return pulumi.get(self, "launch_options")

    @property
    @pulumi.getter(name="listingType")
    def listing_type(self) -> str:
        """
        The listing type of the image. The default value is "NONE".
        """
        return pulumi.get(self, "listing_type")

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> str:
        """
        The image's operating system.  Example: `Oracle Linux`
        """
        return pulumi.get(self, "operating_system")

    @property
    @pulumi.getter(name="operatingSystemVersion")
    def operating_system_version(self) -> str:
        """
        The image's operating system version.  Example: `7.2`
        """
        return pulumi.get(self, "operating_system_version")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The boot volume size for an instance launched from this image (1 MB = 1,048,576 bytes). Note this is not the same as the size of the image when it was exported or the actual size of the image.  Example: `47694`
        """
        return pulumi.get(self, "size_in_mbs")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the image was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetImagesImageAgentFeatureResult(dict):
    def __init__(__self__, *,
                 is_management_supported: bool,
                 is_monitoring_supported: bool):
        """
        :param bool is_management_supported: This attribute is not used.
        :param bool is_monitoring_supported: This attribute is not used.
        """
        pulumi.set(__self__, "is_management_supported", is_management_supported)
        pulumi.set(__self__, "is_monitoring_supported", is_monitoring_supported)

    @property
    @pulumi.getter(name="isManagementSupported")
    def is_management_supported(self) -> bool:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_management_supported")

    @property
    @pulumi.getter(name="isMonitoringSupported")
    def is_monitoring_supported(self) -> bool:
        """
        This attribute is not used.
        """
        return pulumi.get(self, "is_monitoring_supported")


@pulumi.output_type
class GetImagesImageImageSourceDetailResult(dict):
    def __init__(__self__, *,
                 bucket_name: str,
                 namespace_name: str,
                 object_name: str,
                 operating_system: str,
                 operating_system_version: str,
                 source_image_type: str,
                 source_type: str,
                 source_uri: str):
        """
        :param str operating_system: The image's operating system.  Example: `Oracle Linux`
        :param str operating_system_version: The image's operating system version.  Example: `7.2`
        """
        pulumi.set(__self__, "bucket_name", bucket_name)
        pulumi.set(__self__, "namespace_name", namespace_name)
        pulumi.set(__self__, "object_name", object_name)
        pulumi.set(__self__, "operating_system", operating_system)
        pulumi.set(__self__, "operating_system_version", operating_system_version)
        pulumi.set(__self__, "source_image_type", source_image_type)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "source_uri", source_uri)

    @property
    @pulumi.getter(name="bucketName")
    def bucket_name(self) -> str:
        return pulumi.get(self, "bucket_name")

    @property
    @pulumi.getter(name="namespaceName")
    def namespace_name(self) -> str:
        return pulumi.get(self, "namespace_name")

    @property
    @pulumi.getter(name="objectName")
    def object_name(self) -> str:
        return pulumi.get(self, "object_name")

    @property
    @pulumi.getter(name="operatingSystem")
    def operating_system(self) -> str:
        """
        The image's operating system.  Example: `Oracle Linux`
        """
        return pulumi.get(self, "operating_system")

    @property
    @pulumi.getter(name="operatingSystemVersion")
    def operating_system_version(self) -> str:
        """
        The image's operating system version.  Example: `7.2`
        """
        return pulumi.get(self, "operating_system_version")

    @property
    @pulumi.getter(name="sourceImageType")
    def source_image_type(self) -> str:
        return pulumi.get(self, "source_image_type")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter(name="sourceUri")
    def source_uri(self) -> str:
        return pulumi.get(self, "source_uri")


@pulumi.output_type
class GetImagesImageLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetInstanceAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetInstanceAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all of the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins.
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins.
        :param Sequence['GetInstanceAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all of the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins.
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetInstanceAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetInstanceAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetInstanceAvailabilityConfigResult(dict):
    def __init__(__self__, *,
                 is_live_migration_preferred: bool,
                 recovery_action: str):
        """
        :param bool is_live_migration_preferred: Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        :param str recovery_action: The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        pulumi.set(__self__, "is_live_migration_preferred", is_live_migration_preferred)
        pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="isLiveMigrationPreferred")
    def is_live_migration_preferred(self) -> bool:
        """
        Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        """
        return pulumi.get(self, "is_live_migration_preferred")

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> str:
        """
        The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailResult(dict):
    def __init__(__self__, *,
                 block_volumes: Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeResult'],
                 instance_type: str,
                 launch_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailResult'],
                 secondary_vnics: Sequence['outputs.GetInstanceConfigurationInstanceDetailSecondaryVnicResult']):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailBlockVolumeArgs'] block_volumes: Block volume parameters.
        :param str instance_type: The type of instance details. Supported instanceType is compute
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailArgs'] launch_details: Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        :param Sequence['GetInstanceConfigurationInstanceDetailSecondaryVnicArgs'] secondary_vnics: Secondary VNIC parameters.
        """
        pulumi.set(__self__, "block_volumes", block_volumes)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "launch_details", launch_details)
        pulumi.set(__self__, "secondary_vnics", secondary_vnics)

    @property
    @pulumi.getter(name="blockVolumes")
    def block_volumes(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeResult']:
        """
        Block volume parameters.
        """
        return pulumi.get(self, "block_volumes")

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> str:
        """
        The type of instance details. Supported instanceType is compute
        """
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="launchDetails")
    def launch_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailResult']:
        """
        Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        return pulumi.get(self, "launch_details")

    @property
    @pulumi.getter(name="secondaryVnics")
    def secondary_vnics(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailSecondaryVnicResult']:
        """
        Secondary VNIC parameters.
        """
        return pulumi.get(self, "secondary_vnics")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailBlockVolumeResult(dict):
    def __init__(__self__, *,
                 attach_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult'],
                 create_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult'],
                 volume_id: str):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailBlockVolumeAttachDetailArgs'] attach_details: Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        :param Sequence['GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailArgs'] create_details: Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        :param str volume_id: The OCID of the volume.
        """
        pulumi.set(__self__, "attach_details", attach_details)
        pulumi.set(__self__, "create_details", create_details)
        pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="attachDetails")
    def attach_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult']:
        """
        Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        """
        return pulumi.get(self, "attach_details")

    @property
    @pulumi.getter(name="createDetails")
    def create_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult']:
        """
        Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        """
        return pulumi.get(self, "create_details")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> str:
        """
        The OCID of the volume.
        """
        return pulumi.get(self, "volume_id")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult(dict):
    def __init__(__self__, *,
                 device: str,
                 display_name: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 is_read_only: bool,
                 is_shareable: bool,
                 type: str,
                 use_chap: bool):
        """
        :param str device: The device name.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param bool is_read_only: Whether the attachment should be created in read-only mode.
        :param bool is_shareable: Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param bool use_chap: Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        pulumi.set(__self__, "device", device)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "is_read_only", is_read_only)
        pulumi.set(__self__, "is_shareable", is_shareable)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "use_chap", use_chap)

    @property
    @pulumi.getter
    def device(self) -> str:
        """
        The device name.
        """
        return pulumi.get(self, "device")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="isReadOnly")
    def is_read_only(self) -> bool:
        """
        Whether the attachment should be created in read-only mode.
        """
        return pulumi.get(self, "is_read_only")

    @property
    @pulumi.getter(name="isShareable")
    def is_shareable(self) -> bool:
        """
        Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        """
        return pulumi.get(self, "is_shareable")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="useChap")
    def use_chap(self) -> bool:
        """
        Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        return pulumi.get(self, "use_chap")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult(dict):
    def __init__(__self__, *,
                 autotune_policies: Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult'],
                 availability_domain: str,
                 backup_policy_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 kms_key_id: str,
                 size_in_gbs: str,
                 source_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult'],
                 vpus_per_gb: str):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyArgs'] autotune_policies: The list of autotune policies enabled for this volume.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str backup_policy_id: If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        :param str compartment_id: The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the volume.
        :param str size_in_gbs: The size of the volume in GBs.
        :param str vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing 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.
        """
        pulumi.set(__self__, "autotune_policies", autotune_policies)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "vpus_per_gb", vpus_per_gb)

    @property
    @pulumi.getter(name="autotunePolicies")
    def autotune_policies(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult']:
        """
        The list of autotune policies enabled for this volume.
        """
        return pulumi.get(self, "autotune_policies")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="backupPolicyId")
    def backup_policy_id(self) -> str:
        """
        If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        """
        return pulumi.get(self, "backup_policy_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key to assign as the master encryption key for the volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the volume in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter(name="vpusPerGb")
    def vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "vpus_per_gb")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the volume backup.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult'],
                 availability_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 extended_metadata: Mapping[str, Any],
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 instance_options: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 launch_mode: str,
                 launch_options: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult'],
                 metadata: Mapping[str, Any],
                 platform_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult'],
                 preemptible_instance_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult'],
                 preferred_maintenance_action: str,
                 shape: str,
                 shape_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult'],
                 source_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult']):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigArgs'] availability_configs: Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation this instance is launched under.
        :param str compartment_id: The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailArgs'] create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str dedicated_vm_host_id: The OCID of the dedicated virtual machine host to place the instance on.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] extended_metadata: Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains let you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionArgs'] instance_options: Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str launch_mode: Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionArgs'] launch_options: Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        :param Mapping[str, Any] metadata: Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigArgs'] platform_configs: The platform configuration requested for the instance.
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str preferred_maintenance_action: The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_configs", availability_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "extended_metadata", extended_metadata)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "launch_mode", launch_mode)
        pulumi.set(__self__, "launch_options", launch_options)
        pulumi.set(__self__, "metadata", metadata)
        pulumi.set(__self__, "platform_configs", platform_configs)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "preferred_maintenance_action", preferred_maintenance_action)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityConfigs")
    def availability_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult']:
        """
        Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        """
        return pulumi.get(self, "availability_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation this instance is launched under.
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment containing the instance. Instances created from instance configurations are placed in the same compartment as the instance that was used to create the instance configuration.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated virtual machine host to place the instance on.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="extendedMetadata")
    def extended_metadata(self) -> Mapping[str, Any]:
        """
        Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        """
        return pulumi.get(self, "extended_metadata")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains let you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult']:
        """
        Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="launchMode")
    def launch_mode(self) -> str:
        """
        Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        """
        return pulumi.get(self, "launch_mode")

    @property
    @pulumi.getter(name="launchOptions")
    def launch_options(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult']:
        """
        Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        """
        return pulumi.get(self, "launch_options")

    @property
    @pulumi.getter
    def metadata(self) -> Mapping[str, Any]:
        """
        Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.
        """
        return pulumi.get(self, "metadata")

    @property
    @pulumi.getter(name="platformConfigs")
    def platform_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult']:
        """
        The platform configuration requested for the instance.
        """
        return pulumi.get(self, "platform_configs")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter(name="preferredMaintenanceAction")
    def preferred_maintenance_action(self) -> str:
        """
        The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        """
        return pulumi.get(self, "preferred_maintenance_action")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. Default value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default value is false (monitoring plugins are enabled).
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. Default value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled. Accepted values are `ENABLED` and `DISABLED`
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled. Accepted values are `ENABLED` and `DISABLED`
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult(dict):
    def __init__(__self__, *,
                 recovery_action: str):
        """
        :param str recovery_action: The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> str:
        """
        The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult(dict):
    def __init__(__self__, *,
                 are_virtual_instructions_enabled: bool,
                 is_access_control_service_enabled: bool,
                 is_input_output_memory_management_unit_enabled: bool,
                 is_measured_boot_enabled: bool,
                 is_memory_encryption_enabled: bool,
                 is_secure_boot_enabled: bool,
                 is_symmetric_multi_threading_enabled: bool,
                 is_trusted_platform_module_enabled: bool,
                 numa_nodes_per_socket: str,
                 percentage_of_cores_enabled: int,
                 type: str):
        """
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot feature is enabled on the instance.
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether Secure Boot is enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multi-threading is enabled on the instance.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> bool:
        """
        Whether virtualization instructions are available.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> bool:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> bool:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> bool:
        """
        Whether the Measured Boot feature is enabled on the instance.
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> bool:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> bool:
        """
        Whether Secure Boot is enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> bool:
        """
        Whether symmetric multi-threading is enabled on the instance.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> bool:
        """
        Whether the Trusted Platform Module (TPM) is enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> str:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> int:
        """
        The percentage of cores enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 nvmes: int,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param int nvmes: The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "nvmes", nvmes)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory available to the instance, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def nvmes(self) -> int:
        """
        The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        """
        return pulumi.get(self, "nvmes")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailSecondaryVnicResult(dict):
    def __init__(__self__, *,
                 create_vnic_details: Sequence['outputs.GetInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult'],
                 display_name: str,
                 nic_index: int):
        """
        :param Sequence['GetInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailArgs'] create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param int nic_index: Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "nic_index", nic_index)

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="nicIndex")
    def nic_index(self) -> int:
        """
        Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "nic_index")


@pulumi.output_type
class GetInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstanceConfigurationsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 deferred_fields: Sequence[str],
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailResult'],
                 instance_id: str,
                 source: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Sequence[str] deferred_fields: Parameters that were not specified when the instance configuration was created, but that are required to launch an instance from the instance configuration. See the [LaunchInstanceConfiguration](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance/LaunchInstanceConfiguration) operation.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the volume backup.
        :param str time_created: The date and time the instance configuration was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "deferred_fields", deferred_fields)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_details", instance_details)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "source", source)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="deferredFields")
    def deferred_fields(self) -> Sequence[str]:
        """
        Parameters that were not specified when the instance configuration was created, but that are required to launch an instance from the instance configuration. See the [LaunchInstanceConfiguration](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance/LaunchInstanceConfiguration) operation.
        """
        return pulumi.get(self, "deferred_fields")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceDetails")
    def instance_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailResult']:
        return pulumi.get(self, "instance_details")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter
    def source(self) -> str:
        return pulumi.get(self, "source")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the instance configuration was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailResult(dict):
    def __init__(__self__, *,
                 block_volumes: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeResult'],
                 instance_type: str,
                 launch_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailResult'],
                 secondary_vnics: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicResult']):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeArgs'] block_volumes: Block volume parameters.
        :param str instance_type: The type of instance details. Supported instanceType is compute
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailArgs'] launch_details: Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicArgs'] secondary_vnics: Secondary VNIC parameters.
        """
        pulumi.set(__self__, "block_volumes", block_volumes)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "launch_details", launch_details)
        pulumi.set(__self__, "secondary_vnics", secondary_vnics)

    @property
    @pulumi.getter(name="blockVolumes")
    def block_volumes(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeResult']:
        """
        Block volume parameters.
        """
        return pulumi.get(self, "block_volumes")

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> str:
        """
        The type of instance details. Supported instanceType is compute
        """
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="launchDetails")
    def launch_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailResult']:
        """
        Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance.
        """
        return pulumi.get(self, "launch_details")

    @property
    @pulumi.getter(name="secondaryVnics")
    def secondary_vnics(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicResult']:
        """
        Secondary VNIC parameters.
        """
        return pulumi.get(self, "secondary_vnics")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeResult(dict):
    def __init__(__self__, *,
                 attach_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult'],
                 create_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult'],
                 volume_id: str):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeAttachDetailArgs'] attach_details: Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailArgs'] create_details: Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        :param str volume_id: The OCID of the volume.
        """
        pulumi.set(__self__, "attach_details", attach_details)
        pulumi.set(__self__, "create_details", create_details)
        pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="attachDetails")
    def attach_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult']:
        """
        Volume attachmentDetails. Please see [AttachVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/AttachVolumeDetails/)
        """
        return pulumi.get(self, "attach_details")

    @property
    @pulumi.getter(name="createDetails")
    def create_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult']:
        """
        Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/)
        """
        return pulumi.get(self, "create_details")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> str:
        """
        The OCID of the volume.
        """
        return pulumi.get(self, "volume_id")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeAttachDetailResult(dict):
    def __init__(__self__, *,
                 device: str,
                 display_name: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 is_read_only: bool,
                 is_shareable: bool,
                 type: str,
                 use_chap: bool):
        """
        :param str device: The device name.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param bool is_read_only: Whether the attachment should be created in read-only mode.
        :param bool is_shareable: Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        :param bool use_chap: Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        pulumi.set(__self__, "device", device)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "is_read_only", is_read_only)
        pulumi.set(__self__, "is_shareable", is_shareable)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "use_chap", use_chap)

    @property
    @pulumi.getter
    def device(self) -> str:
        """
        The device name.
        """
        return pulumi.get(self, "device")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="isReadOnly")
    def is_read_only(self) -> bool:
        """
        Whether the attachment should be created in read-only mode.
        """
        return pulumi.get(self, "is_read_only")

    @property
    @pulumi.getter(name="isShareable")
    def is_shareable(self) -> bool:
        """
        Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified.
        """
        return pulumi.get(self, "is_shareable")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="useChap")
    def use_chap(self) -> bool:
        """
        Whether to use CHAP authentication for the volume attachment. Defaults to false.
        """
        return pulumi.get(self, "use_chap")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailResult(dict):
    def __init__(__self__, *,
                 autotune_policies: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult'],
                 availability_domain: str,
                 backup_policy_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 kms_key_id: str,
                 size_in_gbs: str,
                 source_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult'],
                 vpus_per_gb: str):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyArgs'] autotune_policies: The list of autotune policies enabled for this volume.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str backup_policy_id: If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the volume.
        :param str size_in_gbs: The size of the volume in GBs.
        :param str vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing 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.
        """
        pulumi.set(__self__, "autotune_policies", autotune_policies)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "vpus_per_gb", vpus_per_gb)

    @property
    @pulumi.getter(name="autotunePolicies")
    def autotune_policies(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult']:
        """
        The list of autotune policies enabled for this volume.
        """
        return pulumi.get(self, "autotune_policies")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="backupPolicyId")
    def backup_policy_id(self) -> str:
        """
        If provided, specifies the ID of the volume backup policy to assign to the newly created volume. If omitted, no policy will be assigned.
        """
        return pulumi.get(self, "backup_policy_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key to assign as the master encryption key for the volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the volume in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter(name="vpusPerGb")
    def vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "vpus_per_gb")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailBlockVolumeCreateDetailSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the volume backup.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult'],
                 availability_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult'],
                 availability_domain: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 extended_metadata: Mapping[str, Any],
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 instance_options: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult'],
                 ipxe_script: str,
                 is_pv_encryption_in_transit_enabled: bool,
                 launch_mode: str,
                 launch_options: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult'],
                 metadata: Mapping[str, Any],
                 platform_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult'],
                 preemptible_instance_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult'],
                 preferred_maintenance_action: str,
                 shape: str,
                 shape_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult'],
                 source_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult']):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigArgs'] availability_configs: Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        :param str availability_domain: The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        :param str capacity_reservation_id: The OCID of the compute capacity reservation this instance is launched under.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailArgs'] create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str dedicated_vm_host_id: The OCID of the dedicated virtual machine host to place the instance on.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] extended_metadata: Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        :param str fault_domain: A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains let you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionArgs'] instance_options: Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        :param str ipxe_script: This is an advanced option.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str launch_mode: Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionArgs'] launch_options: Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        :param Mapping[str, Any] metadata: Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigArgs'] platform_configs: The platform configuration requested for the instance.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigArgs'] preemptible_instance_configs: Configuration options for preemptible instances.
        :param str preferred_maintenance_action: The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailShapeConfigArgs'] shape_configs: The shape configuration requested for the instance.
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "availability_configs", availability_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "extended_metadata", extended_metadata)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "launch_mode", launch_mode)
        pulumi.set(__self__, "launch_options", launch_options)
        pulumi.set(__self__, "metadata", metadata)
        pulumi.set(__self__, "platform_configs", platform_configs)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "preferred_maintenance_action", preferred_maintenance_action)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="availabilityConfigs")
    def availability_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult']:
        """
        Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        """
        return pulumi.get(self, "availability_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the instance.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation this instance is launched under.
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated virtual machine host to place the instance on.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="extendedMetadata")
    def extended_metadata(self) -> Mapping[str, Any]:
        """
        Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        """
        return pulumi.get(self, "extended_metadata")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        A fault domain is a grouping of hardware and infrastructure within an availability domain. Each availability domain contains three fault domains. Fault domains let you distribute your instances so that they are not on the same physical hardware within a single availability domain. A hardware failure or Compute hardware maintenance that affects one fault domain does not affect instances in other fault domains.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult']:
        """
        Optional mutable instance options. As a part of Instance Metadata Service Security Header, This allows user to disable the legacy imds endpoints.
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        This is an advanced option.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="launchMode")
    def launch_mode(self) -> str:
        """
        Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        """
        return pulumi.get(self, "launch_mode")

    @property
    @pulumi.getter(name="launchOptions")
    def launch_options(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult']:
        """
        Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        """
        return pulumi.get(self, "launch_options")

    @property
    @pulumi.getter
    def metadata(self) -> Mapping[str, Any]:
        """
        Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance.
        """
        return pulumi.get(self, "metadata")

    @property
    @pulumi.getter(name="platformConfigs")
    def platform_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult']:
        """
        The platform configuration requested for the instance.
        """
        return pulumi.get(self, "platform_configs")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult']:
        """
        Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter(name="preferredMaintenanceAction")
    def preferred_maintenance_action(self) -> str:
        """
        The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported.
        """
        return pulumi.get(self, "preferred_maintenance_action")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult']:
        """
        The shape configuration requested for the instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult']:
        return pulumi.get(self, "source_details")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins. Default value is false (management plugins are enabled).
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default value is false (monitoring plugins are enabled).
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins. Default value is false (management plugins are enabled).
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins. Default value is false (monitoring plugins are enabled).
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled. Accepted values are `ENABLED` and `DISABLED`
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled. Accepted values are `ENABLED` and `DISABLED`
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailAvailabilityConfigResult(dict):
    def __init__(__self__, *,
                 recovery_action: str):
        """
        :param str recovery_action: The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> str:
        """
        The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [InstanceConfigurationLaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/InstanceConfigurationLaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPlatformConfigResult(dict):
    def __init__(__self__, *,
                 are_virtual_instructions_enabled: bool,
                 is_access_control_service_enabled: bool,
                 is_input_output_memory_management_unit_enabled: bool,
                 is_measured_boot_enabled: bool,
                 is_memory_encryption_enabled: bool,
                 is_secure_boot_enabled: bool,
                 is_symmetric_multi_threading_enabled: bool,
                 is_trusted_platform_module_enabled: bool,
                 numa_nodes_per_socket: str,
                 percentage_of_cores_enabled: int,
                 type: str):
        """
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot feature is enabled on the instance.
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether Secure Boot is enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multi-threading is enabled on the instance.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> bool:
        """
        Whether virtualization instructions are available.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> bool:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> bool:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> bool:
        """
        Whether the Measured Boot feature is enabled on the instance.
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> bool:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> bool:
        """
        Whether Secure Boot is enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> bool:
        """
        Whether symmetric multi-threading is enabled on the instance.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> bool:
        """
        Whether the Trusted Platform Module (TPM) is enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> str:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> int:
        """
        The percentage of cores enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult']:
        """
        The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailPreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        :param str type: The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 memory_in_gbs: float,
                 nvmes: int,
                 ocpus: float):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param int nvmes: The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        :param float ocpus: The total number of OCPUs available to the instance.
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "nvmes", nvmes)
        pulumi.set(__self__, "ocpus", ocpus)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory available to the instance, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter
    def nvmes(self) -> int:
        """
        The number of NVMe drives to be used for storage. A single drive has 6.8 TB available.
        """
        return pulumi.get(self, "nvmes")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailLaunchDetailSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_id: str,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 image_id: str,
                 source_type: str):
        """
        :param str boot_volume_id: The OCID of the boot volume used to boot the instance.
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str image_id: The OCID of the image used to boot the instance.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. The minimum value is 50 GB and the maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> str:
        """
        The OCID of the image used to boot the instance.
        """
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicResult(dict):
    def __init__(__self__, *,
                 create_vnic_details: Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult'],
                 display_name: str,
                 nic_index: int):
        """
        :param Sequence['GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailArgs'] create_vnic_details: Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param int nic_index: Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "nic_index", nic_index)

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult']:
        """
        Contains the properties of the VNIC for an instance configuration. See [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) and [Instance Configurations](https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/instancemanagement.htm#config) for more information.
        """
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="nicIndex")
    def nic_index(self) -> int:
        """
        Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "nic_index")


@pulumi.output_type
class GetInstanceConfigurationsInstanceConfigurationInstanceDetailSecondaryVnicCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: bool,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str):
        """
        :param bool assign_private_dns_record: Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        :param bool assign_public_ip: Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str private_ip: A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param bool skip_source_dest_check: Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        """
        Whether the VNIC should be assigned a private DNS record. See the `assignPrivateDnsRecord` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/20160918/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> bool:
        """
        Whether the VNIC should be assigned a public IP address. See the `assignPublicIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        """
        Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstanceConsoleConnectionsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstanceConsoleConnectionsInstanceConsoleConnectionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 connection_string: str,
                 defined_tags: Mapping[str, Any],
                 fingerprint: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_id: str,
                 public_key: str,
                 service_host_key_fingerprint: str,
                 state: str,
                 vnc_connection_string: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str connection_string: The SSH connection string for the console connection.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str fingerprint: The SSH public key's fingerprint for client authentication to the console connection.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the console connection.
        :param str instance_id: The OCID of the instance.
        :param str service_host_key_fingerprint: The SSH public key's fingerprint for the console connection service host.
        :param str state: The current state of the console connection.
        :param str vnc_connection_string: The SSH connection string for the SSH tunnel used to connect to the console connection over VNC.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "connection_string", connection_string)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "fingerprint", fingerprint)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "public_key", public_key)
        pulumi.set(__self__, "service_host_key_fingerprint", service_host_key_fingerprint)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "vnc_connection_string", vnc_connection_string)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="connectionString")
    def connection_string(self) -> str:
        """
        The SSH connection string for the console connection.
        """
        return pulumi.get(self, "connection_string")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter
    def fingerprint(self) -> str:
        """
        The SSH public key's fingerprint for client authentication to the console connection.
        """
        return pulumi.get(self, "fingerprint")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the console connection.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="publicKey")
    def public_key(self) -> str:
        return pulumi.get(self, "public_key")

    @property
    @pulumi.getter(name="serviceHostKeyFingerprint")
    def service_host_key_fingerprint(self) -> str:
        """
        The SSH public key's fingerprint for the console connection service host.
        """
        return pulumi.get(self, "service_host_key_fingerprint")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the console connection.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="vncConnectionString")
    def vnc_connection_string(self) -> str:
        """
        The SSH connection string for the SSH tunnel used to connect to the console connection over VNC.
        """
        return pulumi.get(self, "vnc_connection_string")


@pulumi.output_type
class GetInstanceCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the instance VNIC's primary private IP.
        :param str private_ip: The private IP address of instance VNIC. To set the private IP address, use the `private_ip` argument in create_vnic_details.
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> str:
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the instance VNIC's primary private IP.
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        """
        The private IP address of instance VNIC. To set the private IP address, use the `private_ip` argument in create_vnic_details.
        """
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetInstanceDevicesDeviceResult(dict):
    def __init__(__self__, *,
                 is_available: bool,
                 name: str):
        """
        :param bool is_available: A filter to return only available devices or only used devices.
        :param str name: A filter to return only devices that match the given name exactly.
        """
        pulumi.set(__self__, "is_available", is_available)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="isAvailable")
    def is_available(self) -> bool:
        """
        A filter to return only available devices or only used devices.
        """
        return pulumi.get(self, "is_available")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A filter to return only devices that match the given name exactly.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetInstanceDevicesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: A filter to return only devices that match the given name exactly.
        """
        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:
        """
        A filter to return only devices that match the given name exactly.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstanceInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetInstanceLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetInstanceMeasuredBootReportMeasurementResult(dict):
    def __init__(__self__, *,
                 actuals: Sequence['outputs.GetInstanceMeasuredBootReportMeasurementActualResult'],
                 policies: Sequence['outputs.GetInstanceMeasuredBootReportMeasurementPolicyResult']):
        """
        :param Sequence['GetInstanceMeasuredBootReportMeasurementActualArgs'] actuals: The list of actual PCR entries measured during boot.
        :param Sequence['GetInstanceMeasuredBootReportMeasurementPolicyArgs'] policies: The list of expected PCR entries to use during verification.
        """
        pulumi.set(__self__, "actuals", actuals)
        pulumi.set(__self__, "policies", policies)

    @property
    @pulumi.getter
    def actuals(self) -> Sequence['outputs.GetInstanceMeasuredBootReportMeasurementActualResult']:
        """
        The list of actual PCR entries measured during boot.
        """
        return pulumi.get(self, "actuals")

    @property
    @pulumi.getter
    def policies(self) -> Sequence['outputs.GetInstanceMeasuredBootReportMeasurementPolicyResult']:
        """
        The list of expected PCR entries to use during verification.
        """
        return pulumi.get(self, "policies")


@pulumi.output_type
class GetInstanceMeasuredBootReportMeasurementActualResult(dict):
    def __init__(__self__, *,
                 hash_algorithm: str,
                 pcr_index: str,
                 value: str):
        """
        :param str hash_algorithm: The type of algorithm used to calculate the hash.
        :param str pcr_index: The index of the policy.
        :param str value: The hashed PCR value.
        """
        pulumi.set(__self__, "hash_algorithm", hash_algorithm)
        pulumi.set(__self__, "pcr_index", pcr_index)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter(name="hashAlgorithm")
    def hash_algorithm(self) -> str:
        """
        The type of algorithm used to calculate the hash.
        """
        return pulumi.get(self, "hash_algorithm")

    @property
    @pulumi.getter(name="pcrIndex")
    def pcr_index(self) -> str:
        """
        The index of the policy.
        """
        return pulumi.get(self, "pcr_index")

    @property
    @pulumi.getter
    def value(self) -> str:
        """
        The hashed PCR value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetInstanceMeasuredBootReportMeasurementPolicyResult(dict):
    def __init__(__self__, *,
                 hash_algorithm: str,
                 pcr_index: str,
                 value: str):
        """
        :param str hash_algorithm: The type of algorithm used to calculate the hash.
        :param str pcr_index: The index of the policy.
        :param str value: The hashed PCR value.
        """
        pulumi.set(__self__, "hash_algorithm", hash_algorithm)
        pulumi.set(__self__, "pcr_index", pcr_index)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter(name="hashAlgorithm")
    def hash_algorithm(self) -> str:
        """
        The type of algorithm used to calculate the hash.
        """
        return pulumi.get(self, "hash_algorithm")

    @property
    @pulumi.getter(name="pcrIndex")
    def pcr_index(self) -> str:
        """
        The index of the policy.
        """
        return pulumi.get(self, "pcr_index")

    @property
    @pulumi.getter
    def value(self) -> str:
        """
        The hashed PCR value.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetInstancePlatformConfigResult(dict):
    def __init__(__self__, *,
                 are_virtual_instructions_enabled: bool,
                 is_access_control_service_enabled: bool,
                 is_input_output_memory_management_unit_enabled: bool,
                 is_measured_boot_enabled: bool,
                 is_memory_encryption_enabled: bool,
                 is_secure_boot_enabled: bool,
                 is_symmetric_multi_threading_enabled: bool,
                 is_trusted_platform_module_enabled: bool,
                 numa_nodes_per_socket: str,
                 percentage_of_cores_enabled: int,
                 type: str):
        """
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot is to be enabled on the instance
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether the Secure Boot is to be enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multi-threading is enabled on the instance.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is to be enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled.
        :param str type: (Required) The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> bool:
        """
        Whether virtualization instructions are available.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> bool:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> bool:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> bool:
        """
        Whether the Measured Boot is to be enabled on the instance
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> bool:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> bool:
        """
        Whether the Secure Boot is to be enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> bool:
        """
        Whether symmetric multi-threading is enabled on the instance.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> bool:
        """
        Whether the Trusted Platform Module (TPM) is to be enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> str:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> int:
        """
        The percentage of cores enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Required) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstancePoolInstancesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstancePoolInstancesInstanceResult(dict):
    def __init__(__self__, *,
                 auto_terminate_instance_on_delete: bool,
                 availability_domain: str,
                 compartment_id: str,
                 decrement_size_on_delete: bool,
                 display_name: str,
                 fault_domain: str,
                 id: str,
                 instance_configuration_id: str,
                 instance_id: str,
                 instance_pool_id: str,
                 load_balancer_backends: Sequence['outputs.GetInstancePoolInstancesInstanceLoadBalancerBackendResult'],
                 region: str,
                 shape: str,
                 state: str,
                 time_created: str):
        """
        :param str availability_domain: The availability domain the instance is running in.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str fault_domain: The fault domain the instance is running in.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance.
        :param str instance_configuration_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration used to create the instance.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool.
        :param Sequence['GetInstancePoolInstancesInstanceLoadBalancerBackendArgs'] load_balancer_backends: The load balancer backends that are configured for the instance pool instance.
        :param str region: The region that contains the availability domain the instance is running in.
        :param str shape: The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        :param str state: The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        :param str time_created: The date and time the instance pool instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "auto_terminate_instance_on_delete", auto_terminate_instance_on_delete)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "decrement_size_on_delete", decrement_size_on_delete)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        pulumi.set(__self__, "load_balancer_backends", load_balancer_backends)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="autoTerminateInstanceOnDelete")
    def auto_terminate_instance_on_delete(self) -> bool:
        return pulumi.get(self, "auto_terminate_instance_on_delete")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain the instance is running in.
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="decrementSizeOnDelete")
    def decrement_size_on_delete(self) -> bool:
        return pulumi.get(self, "decrement_size_on_delete")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The fault domain the instance is running in.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration used to create the instance.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerBackends")
    def load_balancer_backends(self) -> Sequence['outputs.GetInstancePoolInstancesInstanceLoadBalancerBackendResult']:
        """
        The load balancer backends that are configured for the instance pool instance.
        """
        return pulumi.get(self, "load_balancer_backends")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region that contains the availability domain the instance is running in.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources allocated to the instance.
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the instance pool instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetInstancePoolInstancesInstanceLoadBalancerBackendResult(dict):
    def __init__(__self__, *,
                 backend_health_status: str,
                 backend_name: str,
                 backend_set_name: str,
                 load_balancer_id: str,
                 state: str):
        """
        :param str backend_health_status: The health of the backend as observed by the load balancer.
        :param str backend_name: The name of the backend in the backend set.
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str load_balancer_id: The OCID of the load balancer attached to the instance pool.
        :param str state: The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        """
        pulumi.set(__self__, "backend_health_status", backend_health_status)
        pulumi.set(__self__, "backend_name", backend_name)
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter(name="backendHealthStatus")
    def backend_health_status(self) -> str:
        """
        The health of the backend as observed by the load balancer.
        """
        return pulumi.get(self, "backend_health_status")

    @property
    @pulumi.getter(name="backendName")
    def backend_name(self) -> str:
        """
        The name of the backend in the backend set.
        """
        return pulumi.get(self, "backend_name")

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The OCID of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The lifecycle state of the instance. Refer to `lifecycleState` in the [Instance](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Instance) resource.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class GetInstancePoolLoadBalancerResult(dict):
    def __init__(__self__, *,
                 backend_set_name: str,
                 id: str,
                 instance_pool_id: str,
                 load_balancer_id: str,
                 port: int,
                 state: str,
                 vnic_selection: str):
        """
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        :param int port: The port value used for the backends.
        :param str state: The current state of the instance pool.
        :param str vnic_selection: Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "vnic_selection", vnic_selection)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port value used for the backends.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the instance pool.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> str:
        """
        Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")


@pulumi.output_type
class GetInstancePoolPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 fault_domains: Sequence[str],
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param Sequence[str] fault_domains: The fault domains to place instances.
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetInstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "fault_domains", fault_domains)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Sequence[str]:
        """
        The fault domains to place instances.
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetInstancePoolPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        The display name of the VNIC. This is also used to match against the instance configuration defined secondary VNIC.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstancePoolsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstancePoolsInstancePoolResult(dict):
    def __init__(__self__, *,
                 actual_size: int,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 instance_configuration_id: str,
                 load_balancers: Sequence['outputs.GetInstancePoolsInstancePoolLoadBalancerResult'],
                 placement_configurations: Sequence['outputs.GetInstancePoolsInstancePoolPlacementConfigurationResult'],
                 size: int,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_configuration_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        :param Sequence['GetInstancePoolsInstancePoolLoadBalancerArgs'] load_balancers: The load balancers attached to the instance pool.
        :param Sequence['GetInstancePoolsInstancePoolPlacementConfigurationArgs'] placement_configurations: The placement configurations for the instance pool.
        :param int size: The number of actual instances in the instance pool on the cloud. This attribute will be different when instance pool is used along with autoScaling Configuration.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the instance pool was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "actual_size", actual_size)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_configuration_id", instance_configuration_id)
        pulumi.set(__self__, "load_balancers", load_balancers)
        pulumi.set(__self__, "placement_configurations", placement_configurations)
        pulumi.set(__self__, "size", size)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="actualSize")
    def actual_size(self) -> int:
        return pulumi.get(self, "actual_size")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceConfigurationId")
    def instance_configuration_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance configuration associated with the instance pool.
        """
        return pulumi.get(self, "instance_configuration_id")

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Sequence['outputs.GetInstancePoolsInstancePoolLoadBalancerResult']:
        """
        The load balancers attached to the instance pool.
        """
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter(name="placementConfigurations")
    def placement_configurations(self) -> Sequence['outputs.GetInstancePoolsInstancePoolPlacementConfigurationResult']:
        """
        The placement configurations for the instance pool.
        """
        return pulumi.get(self, "placement_configurations")

    @property
    @pulumi.getter
    def size(self) -> int:
        """
        The number of actual instances in the instance pool on the cloud. This attribute will be different when instance pool is used along with autoScaling Configuration.
        """
        return pulumi.get(self, "size")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the instance pool was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetInstancePoolsInstancePoolLoadBalancerResult(dict):
    def __init__(__self__, *,
                 backend_set_name: str,
                 id: str,
                 instance_pool_id: str,
                 load_balancer_id: str,
                 port: int,
                 state: str,
                 vnic_selection: str):
        """
        :param str backend_set_name: The name of the backend set on the load balancer.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        :param str instance_pool_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        :param str load_balancer_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        :param int port: The port value used for the backends.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str vnic_selection: Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        pulumi.set(__self__, "backend_set_name", backend_set_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_pool_id", instance_pool_id)
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "vnic_selection", vnic_selection)

    @property
    @pulumi.getter(name="backendSetName")
    def backend_set_name(self) -> str:
        """
        The name of the backend set on the load balancer.
        """
        return pulumi.get(self, "backend_set_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instancePoolId")
    def instance_pool_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance pool of the load balancer attachment.
        """
        return pulumi.get(self, "instance_pool_id")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the load balancer attached to the instance pool.
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The port value used for the backends.
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="vnicSelection")
    def vnic_selection(self) -> str:
        """
        Indicates which VNIC on each instance in the instance pool should be used to associate with the load balancer. Possible values are "PrimaryVnic" or the displayName of one of the secondary VNICs on the instance configuration that is associated with the instance pool.
        """
        return pulumi.get(self, "vnic_selection")


@pulumi.output_type
class GetInstancePoolsInstancePoolPlacementConfigurationResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 fault_domains: Sequence[str],
                 primary_subnet_id: str,
                 secondary_vnic_subnets: Sequence['outputs.GetInstancePoolsInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']):
        """
        :param str availability_domain: The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        :param Sequence[str] fault_domains: The fault domains to place instances.
        :param str primary_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        :param Sequence['GetInstancePoolsInstancePoolPlacementConfigurationSecondaryVnicSubnetArgs'] secondary_vnic_subnets: The set of secondary VNIC data for instances in the pool.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "fault_domains", fault_domains)
        pulumi.set(__self__, "primary_subnet_id", primary_subnet_id)
        pulumi.set(__self__, "secondary_vnic_subnets", secondary_vnic_subnets)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain to place instances.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="faultDomains")
    def fault_domains(self) -> Sequence[str]:
        """
        The fault domains to place instances.
        """
        return pulumi.get(self, "fault_domains")

    @property
    @pulumi.getter(name="primarySubnetId")
    def primary_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the primary subnet to place instances.
        """
        return pulumi.get(self, "primary_subnet_id")

    @property
    @pulumi.getter(name="secondaryVnicSubnets")
    def secondary_vnic_subnets(self) -> Sequence['outputs.GetInstancePoolsInstancePoolPlacementConfigurationSecondaryVnicSubnetResult']:
        """
        The set of secondary VNIC data for instances in the pool.
        """
        return pulumi.get(self, "secondary_vnic_subnets")


@pulumi.output_type
class GetInstancePoolsInstancePoolPlacementConfigurationSecondaryVnicSubnetResult(dict):
    def __init__(__self__, *,
                 display_name: str,
                 subnet_id: str):
        """
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str subnet_id: The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "subnet_id", subnet_id)

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The subnet [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the secondary VNIC.
        """
        return pulumi.get(self, "subnet_id")


@pulumi.output_type
class GetInstancePreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetInstancePreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetInstancePreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: (Required) The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetInstancePreemptibleInstanceConfigPreemptionActionResult']:
        """
        (Required) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetInstancePreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        :param str type: (Required) The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Required) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstanceShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 gpu_description: str,
                 gpus: int,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 networking_bandwidth_in_gbps: float,
                 nvmes: int,
                 ocpus: float,
                 processor_description: str):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param str gpu_description: A short description of the instance's graphics processing unit (GPU).
        :param int gpus: The number of GPUs available to the instance.
        :param str local_disk_description: A short description of the local disks available to this instance.
        :param int local_disks: The number of local disks available to the instance.
        :param float local_disks_total_size_in_gbs: The aggregate size of all local disks, in gigabytes.
        :param int max_vnic_attachments: The maximum number of VNIC attachments for the instance.
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param float networking_bandwidth_in_gbps: The networking bandwidth available to the instance, in gigabits per second.
        :param float ocpus: The total number of OCPUs available to the instance.
        :param str processor_description: A short description of the instance's processor (CPU).
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "nvmes", nvmes)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "processor_description", processor_description)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        """
        A short description of the instance's graphics processing unit (GPU).
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        """
        The number of GPUs available to the instance.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        """
        A short description of the local disks available to this instance.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        """
        The number of local disks available to the instance.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        """
        The aggregate size of all local disks, in gigabytes.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        """
        The maximum number of VNIC attachments for the instance.
        """
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory available to the instance, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        """
        The networking bandwidth available to the instance, in gigabits per second.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter
    def nvmes(self) -> int:
        return pulumi.get(self, "nvmes")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        """
        A short description of the instance's processor (CPU).
        """
        return pulumi.get(self, "processor_description")


@pulumi.output_type
class GetInstanceSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 kms_key_id: str,
                 source_id: str,
                 source_type: str):
        """
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. Minimum value is 50 GB and maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the boot volume.
        :param str source_id: The OCID of the boot volume used to boot the instance.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_id", source_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. Minimum value is 50 GB and maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceId")
    def source_id(self) -> str:
        """
        The OCID of the boot volume used to boot the instance.
        """
        return pulumi.get(self, "source_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetInstancesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInstancesInstanceResult(dict):
    def __init__(__self__, *,
                 agent_configs: Sequence['outputs.GetInstancesInstanceAgentConfigResult'],
                 async_: bool,
                 availability_configs: Sequence['outputs.GetInstancesInstanceAvailabilityConfigResult'],
                 availability_domain: str,
                 boot_volume_id: str,
                 capacity_reservation_id: str,
                 compartment_id: str,
                 compute_cluster_id: str,
                 create_vnic_details: Sequence['outputs.GetInstancesInstanceCreateVnicDetailResult'],
                 dedicated_vm_host_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 extended_metadata: Mapping[str, Any],
                 fault_domain: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 id: str,
                 image: str,
                 instance_options: Sequence['outputs.GetInstancesInstanceInstanceOptionResult'],
                 ipxe_script: str,
                 is_cross_numa_node: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 launch_mode: str,
                 launch_options: Sequence['outputs.GetInstancesInstanceLaunchOptionResult'],
                 metadata: Mapping[str, Any],
                 platform_configs: Sequence['outputs.GetInstancesInstancePlatformConfigResult'],
                 preemptible_instance_configs: Sequence['outputs.GetInstancesInstancePreemptibleInstanceConfigResult'],
                 preserve_boot_volume: bool,
                 private_ip: str,
                 public_ip: str,
                 region: str,
                 shape: str,
                 shape_configs: Sequence['outputs.GetInstancesInstanceShapeConfigResult'],
                 source_details: Sequence['outputs.GetInstancesInstanceSourceDetailResult'],
                 state: str,
                 subnet_id: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 time_maintenance_reboot_due: str,
                 update_operation_constraint: str):
        """
        :param Sequence['GetInstancesInstanceAgentConfigArgs'] agent_configs: Configuration options for the Oracle Cloud Agent software running on the instance.
        :param Sequence['GetInstancesInstanceAvailabilityConfigArgs'] availability_configs: Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str boot_volume_id: The OCID of the attached boot volume. If the `source_type` is `bootVolume`, this will be the same OCID as the `source_id`.
        :param str capacity_reservation_id: The OCID of the compute capacity reservation.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str compute_cluster_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute cluster. A compute cluster is a remote direct memory access (RDMA) network group. For more information, see [Compute Clusters](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/compute-clusters.htm).
        :param str dedicated_vm_host_id: The OCID of the dedicated virtual machine host that the instance is placed on.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] extended_metadata: Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        :param str fault_domain: The name of the fault domain the instance is running in.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the instance.
        :param str image: Deprecated. Use `sourceDetails` instead.
        :param Sequence['GetInstancesInstanceInstanceOptionArgs'] instance_options: Optional mutable instance options
        :param str ipxe_script: 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.
        :param bool is_cross_numa_node: Whether the instance’s OCPUs and memory are distributed across multiple NUMA nodes.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str launch_mode: Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        :param Sequence['GetInstancesInstanceLaunchOptionArgs'] launch_options: Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        :param Mapping[str, Any] metadata: Custom metadata that you provide.
        :param Sequence['GetInstancesInstancePlatformConfigArgs'] platform_configs: The platform configuration for the instance.
        :param Sequence['GetInstancesInstancePreemptibleInstanceConfigArgs'] preemptible_instance_configs: (Optional) Configuration options for preemptible instances.
        :param bool preserve_boot_volume: (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        :param str region: The region that contains the availability domain the instance is running in.
        :param str shape: The shape of the instance. The shape determines the number of CPUs and the amount of memory allocated to the instance. You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param Sequence['GetInstancesInstanceShapeConfigArgs'] shape_configs: The shape configuration for an instance. The shape configuration determines the resources allocated to an instance.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param Mapping[str, Any] system_tags: System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str time_created: The date and time the instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_maintenance_reboot_due: The date and time the instance is expected to be stopped / started,  in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). After that time if instance hasn't been rebooted, Oracle will reboot the instance within 24 hours of the due time. Regardless of how the instance was stopped, the flag will be reset to empty as soon as instance reaches Stopped state. Example: `2018-05-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "agent_configs", agent_configs)
        pulumi.set(__self__, "async_", async_)
        pulumi.set(__self__, "availability_configs", availability_configs)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "boot_volume_id", boot_volume_id)
        pulumi.set(__self__, "capacity_reservation_id", capacity_reservation_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "compute_cluster_id", compute_cluster_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "dedicated_vm_host_id", dedicated_vm_host_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "extended_metadata", extended_metadata)
        pulumi.set(__self__, "fault_domain", fault_domain)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "instance_options", instance_options)
        pulumi.set(__self__, "ipxe_script", ipxe_script)
        pulumi.set(__self__, "is_cross_numa_node", is_cross_numa_node)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "launch_mode", launch_mode)
        pulumi.set(__self__, "launch_options", launch_options)
        pulumi.set(__self__, "metadata", metadata)
        pulumi.set(__self__, "platform_configs", platform_configs)
        pulumi.set(__self__, "preemptible_instance_configs", preemptible_instance_configs)
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "public_ip", public_ip)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "shape", shape)
        pulumi.set(__self__, "shape_configs", shape_configs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_maintenance_reboot_due", time_maintenance_reboot_due)
        pulumi.set(__self__, "update_operation_constraint", update_operation_constraint)

    @property
    @pulumi.getter(name="agentConfigs")
    def agent_configs(self) -> Sequence['outputs.GetInstancesInstanceAgentConfigResult']:
        """
        Configuration options for the Oracle Cloud Agent software running on the instance.
        """
        return pulumi.get(self, "agent_configs")

    @property
    @pulumi.getter(name="async")
    def async_(self) -> bool:
        return pulumi.get(self, "async_")

    @property
    @pulumi.getter(name="availabilityConfigs")
    def availability_configs(self) -> Sequence['outputs.GetInstancesInstanceAvailabilityConfigResult']:
        """
        Options for defining the availabiity of a VM instance after a maintenance event that impacts the underlying hardware.
        """
        return pulumi.get(self, "availability_configs")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="bootVolumeId")
    def boot_volume_id(self) -> str:
        """
        The OCID of the attached boot volume. If the `source_type` is `bootVolume`, this will be the same OCID as the `source_id`.
        """
        return pulumi.get(self, "boot_volume_id")

    @property
    @pulumi.getter(name="capacityReservationId")
    def capacity_reservation_id(self) -> str:
        """
        The OCID of the compute capacity reservation.
        """
        return pulumi.get(self, "capacity_reservation_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="computeClusterId")
    def compute_cluster_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compute cluster. A compute cluster is a remote direct memory access (RDMA) network group. For more information, see [Compute Clusters](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/compute-clusters.htm).
        """
        return pulumi.get(self, "compute_cluster_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetInstancesInstanceCreateVnicDetailResult']:
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="dedicatedVmHostId")
    def dedicated_vm_host_id(self) -> str:
        """
        The OCID of the dedicated virtual machine host that the instance is placed on.
        """
        return pulumi.get(self, "dedicated_vm_host_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="extendedMetadata")
    def extended_metadata(self) -> Mapping[str, Any]:
        """
        Additional metadata key/value pairs that you provide. They serve the same purpose and functionality as fields in the `metadata` object.
        """
        return pulumi.get(self, "extended_metadata")

    @property
    @pulumi.getter(name="faultDomain")
    def fault_domain(self) -> str:
        """
        The name of the fault domain the instance is running in.
        """
        return pulumi.get(self, "fault_domain")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def image(self) -> str:
        """
        Deprecated. Use `sourceDetails` instead.
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="instanceOptions")
    def instance_options(self) -> Sequence['outputs.GetInstancesInstanceInstanceOptionResult']:
        """
        Optional mutable instance options
        """
        return pulumi.get(self, "instance_options")

    @property
    @pulumi.getter(name="ipxeScript")
    def ipxe_script(self) -> str:
        """
        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.
        """
        return pulumi.get(self, "ipxe_script")

    @property
    @pulumi.getter(name="isCrossNumaNode")
    def is_cross_numa_node(self) -> bool:
        """
        Whether the instance’s OCPUs and memory are distributed across multiple NUMA nodes.
        """
        return pulumi.get(self, "is_cross_numa_node")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="launchMode")
    def launch_mode(self) -> str:
        """
        Specifies the configuration mode for launching virtual machine (VM) instances. The configuration modes are:
        """
        return pulumi.get(self, "launch_mode")

    @property
    @pulumi.getter(name="launchOptions")
    def launch_options(self) -> Sequence['outputs.GetInstancesInstanceLaunchOptionResult']:
        """
        Options for tuning the compatibility and performance of VM shapes. The values that you specify override any default values.
        """
        return pulumi.get(self, "launch_options")

    @property
    @pulumi.getter
    def metadata(self) -> Mapping[str, Any]:
        """
        Custom metadata that you provide.
        """
        return pulumi.get(self, "metadata")

    @property
    @pulumi.getter(name="platformConfigs")
    def platform_configs(self) -> Sequence['outputs.GetInstancesInstancePlatformConfigResult']:
        """
        The platform configuration for the instance.
        """
        return pulumi.get(self, "platform_configs")

    @property
    @pulumi.getter(name="preemptibleInstanceConfigs")
    def preemptible_instance_configs(self) -> Sequence['outputs.GetInstancesInstancePreemptibleInstanceConfigResult']:
        """
        (Optional) Configuration options for preemptible instances.
        """
        return pulumi.get(self, "preemptible_instance_configs")

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="publicIp")
    def public_ip(self) -> str:
        return pulumi.get(self, "public_ip")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The region that contains the availability domain the instance is running in.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter
    def shape(self) -> str:
        """
        The shape of the instance. The shape determines the number of CPUs and the amount of memory allocated to the instance. You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        """
        return pulumi.get(self, "shape")

    @property
    @pulumi.getter(name="shapeConfigs")
    def shape_configs(self) -> Sequence['outputs.GetInstancesInstanceShapeConfigResult']:
        """
        The shape configuration for an instance. The shape configuration determines the resources allocated to an instance.
        """
        return pulumi.get(self, "shape_configs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetInstancesInstanceSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the instance was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeMaintenanceRebootDue")
    def time_maintenance_reboot_due(self) -> str:
        """
        The date and time the instance is expected to be stopped / started,  in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). After that time if instance hasn't been rebooted, Oracle will reboot the instance within 24 hours of the due time. Regardless of how the instance was stopped, the flag will be reset to empty as soon as instance reaches Stopped state. Example: `2018-05-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_maintenance_reboot_due")

    @property
    @pulumi.getter(name="updateOperationConstraint")
    def update_operation_constraint(self) -> str:
        return pulumi.get(self, "update_operation_constraint")


@pulumi.output_type
class GetInstancesInstanceAgentConfigResult(dict):
    def __init__(__self__, *,
                 are_all_plugins_disabled: bool,
                 is_management_disabled: bool,
                 is_monitoring_disabled: bool,
                 plugins_configs: Sequence['outputs.GetInstancesInstanceAgentConfigPluginsConfigResult']):
        """
        :param bool are_all_plugins_disabled: Whether Oracle Cloud Agent can run all of the available plugins. This includes the management and monitoring plugins.
        :param bool is_management_disabled: Whether Oracle Cloud Agent can run all the available management plugins.
        :param bool is_monitoring_disabled: Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins.
        :param Sequence['GetInstancesInstanceAgentConfigPluginsConfigArgs'] plugins_configs: The configuration of plugins associated with this instance.
        """
        pulumi.set(__self__, "are_all_plugins_disabled", are_all_plugins_disabled)
        pulumi.set(__self__, "is_management_disabled", is_management_disabled)
        pulumi.set(__self__, "is_monitoring_disabled", is_monitoring_disabled)
        pulumi.set(__self__, "plugins_configs", plugins_configs)

    @property
    @pulumi.getter(name="areAllPluginsDisabled")
    def are_all_plugins_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all of the available plugins. This includes the management and monitoring plugins.
        """
        return pulumi.get(self, "are_all_plugins_disabled")

    @property
    @pulumi.getter(name="isManagementDisabled")
    def is_management_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can run all the available management plugins.
        """
        return pulumi.get(self, "is_management_disabled")

    @property
    @pulumi.getter(name="isMonitoringDisabled")
    def is_monitoring_disabled(self) -> bool:
        """
        Whether Oracle Cloud Agent can gather performance metrics and monitor the instance using the monitoring plugins.
        """
        return pulumi.get(self, "is_monitoring_disabled")

    @property
    @pulumi.getter(name="pluginsConfigs")
    def plugins_configs(self) -> Sequence['outputs.GetInstancesInstanceAgentConfigPluginsConfigResult']:
        """
        The configuration of plugins associated with this instance.
        """
        return pulumi.get(self, "plugins_configs")


@pulumi.output_type
class GetInstancesInstanceAgentConfigPluginsConfigResult(dict):
    def __init__(__self__, *,
                 desired_state: str,
                 name: str):
        """
        :param str desired_state: Whether the plugin should be enabled or disabled.
        :param str name: The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        pulumi.set(__self__, "desired_state", desired_state)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="desiredState")
    def desired_state(self) -> str:
        """
        Whether the plugin should be enabled or disabled.
        """
        return pulumi.get(self, "desired_state")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The plugin name. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm).
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetInstancesInstanceAvailabilityConfigResult(dict):
    def __init__(__self__, *,
                 is_live_migration_preferred: bool,
                 recovery_action: str):
        """
        :param bool is_live_migration_preferred: Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        :param str recovery_action: The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        pulumi.set(__self__, "is_live_migration_preferred", is_live_migration_preferred)
        pulumi.set(__self__, "recovery_action", recovery_action)

    @property
    @pulumi.getter(name="isLiveMigrationPreferred")
    def is_live_migration_preferred(self) -> bool:
        """
        Whether live migration is preferred for infrastructure maintenance.  If null preference is specified, live migration will be preferred for infrastructure maintenance for applicable instances.
        """
        return pulumi.get(self, "is_live_migration_preferred")

    @property
    @pulumi.getter(name="recoveryAction")
    def recovery_action(self) -> str:
        """
        The lifecycle state for an instance when it is recovered after infrastructure maintenance.
        """
        return pulumi.get(self, "recovery_action")


@pulumi.output_type
class GetInstancesInstanceCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> str:
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetInstancesInstanceInstanceOptionResult(dict):
    def __init__(__self__, *,
                 are_legacy_imds_endpoints_disabled: bool):
        """
        :param bool are_legacy_imds_endpoints_disabled: Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        pulumi.set(__self__, "are_legacy_imds_endpoints_disabled", are_legacy_imds_endpoints_disabled)

    @property
    @pulumi.getter(name="areLegacyImdsEndpointsDisabled")
    def are_legacy_imds_endpoints_disabled(self) -> bool:
        """
        Whether to disable the legacy (/v1) instance metadata service endpoints. Customers who have migrated to /v2 should set this to true for added security. Default is false.
        """
        return pulumi.get(self, "are_legacy_imds_endpoints_disabled")


@pulumi.output_type
class GetInstancesInstanceLaunchOptionResult(dict):
    def __init__(__self__, *,
                 boot_volume_type: str,
                 firmware: str,
                 is_consistent_volume_naming_enabled: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 network_type: str,
                 remote_data_volume_type: str):
        """
        :param str boot_volume_type: Emulation type for the boot volume.
        :param str firmware: Firmware used to boot VM. Select the option that matches your operating system.
        :param bool is_consistent_volume_naming_enabled: Whether to enable consistent volume naming feature. Defaults to false.
        :param bool is_pv_encryption_in_transit_enabled: Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        :param str network_type: Emulation type for the physical network interface card (NIC).
        :param str remote_data_volume_type: Emulation type for volume.
        """
        pulumi.set(__self__, "boot_volume_type", boot_volume_type)
        pulumi.set(__self__, "firmware", firmware)
        pulumi.set(__self__, "is_consistent_volume_naming_enabled", is_consistent_volume_naming_enabled)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "network_type", network_type)
        pulumi.set(__self__, "remote_data_volume_type", remote_data_volume_type)

    @property
    @pulumi.getter(name="bootVolumeType")
    def boot_volume_type(self) -> str:
        """
        Emulation type for the boot volume.
        """
        return pulumi.get(self, "boot_volume_type")

    @property
    @pulumi.getter
    def firmware(self) -> str:
        """
        Firmware used to boot VM. Select the option that matches your operating system.
        """
        return pulumi.get(self, "firmware")

    @property
    @pulumi.getter(name="isConsistentVolumeNamingEnabled")
    def is_consistent_volume_naming_enabled(self) -> bool:
        """
        Whether to enable consistent volume naming feature. Defaults to false.
        """
        return pulumi.get(self, "is_consistent_volume_naming_enabled")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Deprecated. Instead use `isPvEncryptionInTransitEnabled` in [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/datatypes/LaunchInstanceDetails).
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> str:
        """
        Emulation type for the physical network interface card (NIC).
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="remoteDataVolumeType")
    def remote_data_volume_type(self) -> str:
        """
        Emulation type for volume.
        """
        return pulumi.get(self, "remote_data_volume_type")


@pulumi.output_type
class GetInstancesInstancePlatformConfigResult(dict):
    def __init__(__self__, *,
                 are_virtual_instructions_enabled: bool,
                 is_access_control_service_enabled: bool,
                 is_input_output_memory_management_unit_enabled: bool,
                 is_measured_boot_enabled: bool,
                 is_memory_encryption_enabled: bool,
                 is_secure_boot_enabled: bool,
                 is_symmetric_multi_threading_enabled: bool,
                 is_trusted_platform_module_enabled: bool,
                 numa_nodes_per_socket: str,
                 percentage_of_cores_enabled: int,
                 type: str):
        """
        :param bool are_virtual_instructions_enabled: Whether virtualization instructions are available.
        :param bool is_access_control_service_enabled: Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        :param bool is_input_output_memory_management_unit_enabled: Whether the input-output memory management unit is enabled.
        :param bool is_measured_boot_enabled: Whether the Measured Boot is to be enabled on the instance.
        :param bool is_memory_encryption_enabled: Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        :param bool is_secure_boot_enabled: Whether the Secure Boot is to be enabled on the instance.
        :param bool is_symmetric_multi_threading_enabled: Whether symmetric multi-threading is enabled on the instance.
        :param bool is_trusted_platform_module_enabled: Whether the Trusted Platform Module (TPM) is to be enabled on the instance.
        :param str numa_nodes_per_socket: The number of NUMA nodes per socket (NPS).
        :param int percentage_of_cores_enabled: The percentage of cores enabled.
        :param str type: (Required) The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "are_virtual_instructions_enabled", are_virtual_instructions_enabled)
        pulumi.set(__self__, "is_access_control_service_enabled", is_access_control_service_enabled)
        pulumi.set(__self__, "is_input_output_memory_management_unit_enabled", is_input_output_memory_management_unit_enabled)
        pulumi.set(__self__, "is_measured_boot_enabled", is_measured_boot_enabled)
        pulumi.set(__self__, "is_memory_encryption_enabled", is_memory_encryption_enabled)
        pulumi.set(__self__, "is_secure_boot_enabled", is_secure_boot_enabled)
        pulumi.set(__self__, "is_symmetric_multi_threading_enabled", is_symmetric_multi_threading_enabled)
        pulumi.set(__self__, "is_trusted_platform_module_enabled", is_trusted_platform_module_enabled)
        pulumi.set(__self__, "numa_nodes_per_socket", numa_nodes_per_socket)
        pulumi.set(__self__, "percentage_of_cores_enabled", percentage_of_cores_enabled)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="areVirtualInstructionsEnabled")
    def are_virtual_instructions_enabled(self) -> bool:
        """
        Whether virtualization instructions are available.
        """
        return pulumi.get(self, "are_virtual_instructions_enabled")

    @property
    @pulumi.getter(name="isAccessControlServiceEnabled")
    def is_access_control_service_enabled(self) -> bool:
        """
        Whether the Access Control Service is enabled on the instance. When enabled, the platform can enforce PCIe device isolation, required for VFIO device passthrough.
        """
        return pulumi.get(self, "is_access_control_service_enabled")

    @property
    @pulumi.getter(name="isInputOutputMemoryManagementUnitEnabled")
    def is_input_output_memory_management_unit_enabled(self) -> bool:
        """
        Whether the input-output memory management unit is enabled.
        """
        return pulumi.get(self, "is_input_output_memory_management_unit_enabled")

    @property
    @pulumi.getter(name="isMeasuredBootEnabled")
    def is_measured_boot_enabled(self) -> bool:
        """
        Whether the Measured Boot is to be enabled on the instance.
        """
        return pulumi.get(self, "is_measured_boot_enabled")

    @property
    @pulumi.getter(name="isMemoryEncryptionEnabled")
    def is_memory_encryption_enabled(self) -> bool:
        """
        Whether the instance is a confidential instance. If this value is `true`, the instance is a confidential instance. The default value is `false`.
        """
        return pulumi.get(self, "is_memory_encryption_enabled")

    @property
    @pulumi.getter(name="isSecureBootEnabled")
    def is_secure_boot_enabled(self) -> bool:
        """
        Whether the Secure Boot is to be enabled on the instance.
        """
        return pulumi.get(self, "is_secure_boot_enabled")

    @property
    @pulumi.getter(name="isSymmetricMultiThreadingEnabled")
    def is_symmetric_multi_threading_enabled(self) -> bool:
        """
        Whether symmetric multi-threading is enabled on the instance.
        """
        return pulumi.get(self, "is_symmetric_multi_threading_enabled")

    @property
    @pulumi.getter(name="isTrustedPlatformModuleEnabled")
    def is_trusted_platform_module_enabled(self) -> bool:
        """
        Whether the Trusted Platform Module (TPM) is to be enabled on the instance.
        """
        return pulumi.get(self, "is_trusted_platform_module_enabled")

    @property
    @pulumi.getter(name="numaNodesPerSocket")
    def numa_nodes_per_socket(self) -> str:
        """
        The number of NUMA nodes per socket (NPS).
        """
        return pulumi.get(self, "numa_nodes_per_socket")

    @property
    @pulumi.getter(name="percentageOfCoresEnabled")
    def percentage_of_cores_enabled(self) -> int:
        """
        The percentage of cores enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Required) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstancesInstancePreemptibleInstanceConfigResult(dict):
    def __init__(__self__, *,
                 preemption_actions: Sequence['outputs.GetInstancesInstancePreemptibleInstanceConfigPreemptionActionResult']):
        """
        :param Sequence['GetInstancesInstancePreemptibleInstanceConfigPreemptionActionArgs'] preemption_actions: (Required) The action to run when the preemptible instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preemption_actions", preemption_actions)

    @property
    @pulumi.getter(name="preemptionActions")
    def preemption_actions(self) -> Sequence['outputs.GetInstancesInstancePreemptibleInstanceConfigPreemptionActionResult']:
        """
        (Required) The action to run when the preemptible instance is interrupted for eviction.
        """
        return pulumi.get(self, "preemption_actions")


@pulumi.output_type
class GetInstancesInstancePreemptibleInstanceConfigPreemptionActionResult(dict):
    def __init__(__self__, *,
                 preserve_boot_volume: bool,
                 type: str):
        """
        :param bool preserve_boot_volume: (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        :param str type: (Required) The type of action to run when the instance is interrupted for eviction.
        """
        pulumi.set(__self__, "preserve_boot_volume", preserve_boot_volume)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="preserveBootVolume")
    def preserve_boot_volume(self) -> bool:
        """
        (Optional) Whether to preserve the boot volume that was used to launch the preemptible instance when the instance is terminated. Defaults to false if not specified.
        """
        return pulumi.get(self, "preserve_boot_volume")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        (Required) The type of action to run when the instance is interrupted for eviction.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetInstancesInstanceShapeConfigResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilization: str,
                 gpu_description: str,
                 gpus: int,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 networking_bandwidth_in_gbps: float,
                 nvmes: int,
                 ocpus: float,
                 processor_description: str):
        """
        :param str baseline_ocpu_utilization: The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        :param str gpu_description: A short description of the instance's graphics processing unit (GPU).
        :param int gpus: The number of GPUs available to the instance.
        :param str local_disk_description: A short description of the local disks available to this instance.
        :param int local_disks: The number of local disks available to the instance.
        :param float local_disks_total_size_in_gbs: The aggregate size of all local disks, in gigabytes.
        :param int max_vnic_attachments: The maximum number of VNIC attachments for the instance.
        :param float memory_in_gbs: The total amount of memory available to the instance, in gigabytes.
        :param float networking_bandwidth_in_gbps: The networking bandwidth available to the instance, in gigabits per second.
        :param float ocpus: The total number of OCPUs available to the instance.
        :param str processor_description: A short description of the instance's processor (CPU).
        """
        pulumi.set(__self__, "baseline_ocpu_utilization", baseline_ocpu_utilization)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "nvmes", nvmes)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "processor_description", processor_description)

    @property
    @pulumi.getter(name="baselineOcpuUtilization")
    def baseline_ocpu_utilization(self) -> str:
        """
        The baseline OCPU utilization for a subcore burstable VM instance. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`.
        """
        return pulumi.get(self, "baseline_ocpu_utilization")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        """
        A short description of the instance's graphics processing unit (GPU).
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        """
        The number of GPUs available to the instance.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        """
        A short description of the local disks available to this instance.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        """
        The number of local disks available to the instance.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        """
        The aggregate size of all local disks, in gigabytes.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        """
        The maximum number of VNIC attachments for the instance.
        """
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The total amount of memory available to the instance, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        """
        The networking bandwidth available to the instance, in gigabits per second.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter
    def nvmes(self) -> int:
        return pulumi.get(self, "nvmes")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The total number of OCPUs available to the instance.
        """
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        """
        A short description of the instance's processor (CPU).
        """
        return pulumi.get(self, "processor_description")


@pulumi.output_type
class GetInstancesInstanceSourceDetailResult(dict):
    def __init__(__self__, *,
                 boot_volume_size_in_gbs: str,
                 boot_volume_vpus_per_gb: str,
                 kms_key_id: str,
                 source_id: str,
                 source_type: str):
        """
        :param str boot_volume_size_in_gbs: The size of the boot volume in GBs. Minimum value is 50 GB and maximum value is 32,768 GB (32 TB).
        :param str boot_volume_vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        :param str kms_key_id: The OCID of the Vault service key to assign as the master encryption key for the boot volume.
        :param str source_id: The OCID of an image or a boot volume to use, depending on the value of `source_type`.
        :param str source_type: The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        pulumi.set(__self__, "boot_volume_size_in_gbs", boot_volume_size_in_gbs)
        pulumi.set(__self__, "boot_volume_vpus_per_gb", boot_volume_vpus_per_gb)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "source_id", source_id)
        pulumi.set(__self__, "source_type", source_type)

    @property
    @pulumi.getter(name="bootVolumeSizeInGbs")
    def boot_volume_size_in_gbs(self) -> str:
        """
        The size of the boot volume in GBs. Minimum value is 50 GB and maximum value is 32,768 GB (32 TB).
        """
        return pulumi.get(self, "boot_volume_size_in_gbs")

    @property
    @pulumi.getter(name="bootVolumeVpusPerGb")
    def boot_volume_vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "boot_volume_vpus_per_gb")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key to assign as the master encryption key for the boot volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sourceId")
    def source_id(self) -> str:
        """
        The OCID of an image or a boot volume to use, depending on the value of `source_type`.
        """
        return pulumi.get(self, "source_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID.
        """
        return pulumi.get(self, "source_type")


@pulumi.output_type
class GetInternetGatewaysFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetInternetGatewaysGatewayResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 enabled: bool,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 route_table_id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param bool enabled: Whether the gateway is enabled. When the gateway is disabled, traffic is not routed to/from the Internet, regardless of route rules.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The internet gateway's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the Internet Gateway is using.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the internet gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Whether the gateway is enabled. When the gateway is disabled, traffic is not routed to/from the Internet, regardless of route rules.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The internet gateway's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the Internet Gateway is using.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the internet gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetIpsecAlgorithmAllowedPhaseOneParameterResult(dict):
    def __init__(__self__, *,
                 authentication_algorithms: Sequence[str],
                 dh_groups: Sequence[str],
                 encryption_algorithms: Sequence[str]):
        """
        :param Sequence[str] authentication_algorithms: Allowed phase two authentication algorithms.
        :param Sequence[str] dh_groups: Allowed phase one Diffie-Hellman groups.
        :param Sequence[str] encryption_algorithms: Allowed phase two encryption algorithms.
        """
        pulumi.set(__self__, "authentication_algorithms", authentication_algorithms)
        pulumi.set(__self__, "dh_groups", dh_groups)
        pulumi.set(__self__, "encryption_algorithms", encryption_algorithms)

    @property
    @pulumi.getter(name="authenticationAlgorithms")
    def authentication_algorithms(self) -> Sequence[str]:
        """
        Allowed phase two authentication algorithms.
        """
        return pulumi.get(self, "authentication_algorithms")

    @property
    @pulumi.getter(name="dhGroups")
    def dh_groups(self) -> Sequence[str]:
        """
        Allowed phase one Diffie-Hellman groups.
        """
        return pulumi.get(self, "dh_groups")

    @property
    @pulumi.getter(name="encryptionAlgorithms")
    def encryption_algorithms(self) -> Sequence[str]:
        """
        Allowed phase two encryption algorithms.
        """
        return pulumi.get(self, "encryption_algorithms")


@pulumi.output_type
class GetIpsecAlgorithmAllowedPhaseTwoParameterResult(dict):
    def __init__(__self__, *,
                 authentication_algorithms: Sequence[str],
                 encryption_algorithms: Sequence[str],
                 pfs_dh_groups: Sequence[str]):
        """
        :param Sequence[str] authentication_algorithms: Allowed phase two authentication algorithms.
        :param Sequence[str] encryption_algorithms: Allowed phase two encryption algorithms.
        :param Sequence[str] pfs_dh_groups: Allowed perfect forward secrecy Diffie-Hellman groups.
        """
        pulumi.set(__self__, "authentication_algorithms", authentication_algorithms)
        pulumi.set(__self__, "encryption_algorithms", encryption_algorithms)
        pulumi.set(__self__, "pfs_dh_groups", pfs_dh_groups)

    @property
    @pulumi.getter(name="authenticationAlgorithms")
    def authentication_algorithms(self) -> Sequence[str]:
        """
        Allowed phase two authentication algorithms.
        """
        return pulumi.get(self, "authentication_algorithms")

    @property
    @pulumi.getter(name="encryptionAlgorithms")
    def encryption_algorithms(self) -> Sequence[str]:
        """
        Allowed phase two encryption algorithms.
        """
        return pulumi.get(self, "encryption_algorithms")

    @property
    @pulumi.getter(name="pfsDhGroups")
    def pfs_dh_groups(self) -> Sequence[str]:
        """
        Allowed perfect forward secrecy Diffie-Hellman groups.
        """
        return pulumi.get(self, "pfs_dh_groups")


@pulumi.output_type
class GetIpsecAlgorithmDefaultPhaseOneParameterResult(dict):
    def __init__(__self__, *,
                 default_authentication_algorithms: Sequence[str],
                 default_dh_groups: Sequence[str],
                 default_encryption_algorithms: Sequence[str]):
        """
        :param Sequence[str] default_authentication_algorithms: Default phase two authentication algorithms.
        :param Sequence[str] default_dh_groups: Default phase one Diffie-Hellman groups.
        :param Sequence[str] default_encryption_algorithms: Default phase two encryption algorithms.
        """
        pulumi.set(__self__, "default_authentication_algorithms", default_authentication_algorithms)
        pulumi.set(__self__, "default_dh_groups", default_dh_groups)
        pulumi.set(__self__, "default_encryption_algorithms", default_encryption_algorithms)

    @property
    @pulumi.getter(name="defaultAuthenticationAlgorithms")
    def default_authentication_algorithms(self) -> Sequence[str]:
        """
        Default phase two authentication algorithms.
        """
        return pulumi.get(self, "default_authentication_algorithms")

    @property
    @pulumi.getter(name="defaultDhGroups")
    def default_dh_groups(self) -> Sequence[str]:
        """
        Default phase one Diffie-Hellman groups.
        """
        return pulumi.get(self, "default_dh_groups")

    @property
    @pulumi.getter(name="defaultEncryptionAlgorithms")
    def default_encryption_algorithms(self) -> Sequence[str]:
        """
        Default phase two encryption algorithms.
        """
        return pulumi.get(self, "default_encryption_algorithms")


@pulumi.output_type
class GetIpsecAlgorithmDefaultPhaseTwoParameterResult(dict):
    def __init__(__self__, *,
                 default_authentication_algorithms: Sequence[str],
                 default_encryption_algorithms: Sequence[str],
                 default_pfs_dh_group: str):
        """
        :param Sequence[str] default_authentication_algorithms: Default phase two authentication algorithms.
        :param Sequence[str] default_encryption_algorithms: Default phase two encryption algorithms.
        :param str default_pfs_dh_group: Default perfect forward secrecy Diffie-Hellman groups.
        """
        pulumi.set(__self__, "default_authentication_algorithms", default_authentication_algorithms)
        pulumi.set(__self__, "default_encryption_algorithms", default_encryption_algorithms)
        pulumi.set(__self__, "default_pfs_dh_group", default_pfs_dh_group)

    @property
    @pulumi.getter(name="defaultAuthenticationAlgorithms")
    def default_authentication_algorithms(self) -> Sequence[str]:
        """
        Default phase two authentication algorithms.
        """
        return pulumi.get(self, "default_authentication_algorithms")

    @property
    @pulumi.getter(name="defaultEncryptionAlgorithms")
    def default_encryption_algorithms(self) -> Sequence[str]:
        """
        Default phase two encryption algorithms.
        """
        return pulumi.get(self, "default_encryption_algorithms")

    @property
    @pulumi.getter(name="defaultPfsDhGroup")
    def default_pfs_dh_group(self) -> str:
        """
        Default perfect forward secrecy Diffie-Hellman groups.
        """
        return pulumi.get(self, "default_pfs_dh_group")


@pulumi.output_type
class GetIpsecConfigFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpsecConfigTunnelResult(dict):
    def __init__(__self__, *,
                 ip_address: str,
                 shared_secret: str,
                 time_created: str):
        """
        :param str ip_address: The IP address of Oracle's VPN headend.  Example: `203.0.113.50 `
        :param str shared_secret: The shared secret of the IPSec tunnel.
        :param str time_created: The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "shared_secret", shared_secret)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        The IP address of Oracle's VPN headend.  Example: `203.0.113.50 `
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter(name="sharedSecret")
    def shared_secret(self) -> str:
        """
        The shared secret of the IPSec tunnel.
        """
        return pulumi.get(self, "shared_secret")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetIpsecConnectionTunnelBgpSessionInfoResult(dict):
    def __init__(__self__, *,
                 bgp_ipv6state: str,
                 bgp_state: str,
                 customer_bgp_asn: str,
                 customer_interface_ip: str,
                 oracle_bgp_asn: str,
                 oracle_interface_ip: str):
        """
        :param str bgp_state: the state of the BGP.
        :param str customer_bgp_asn: This is the value of the remote Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        :param str customer_interface_ip: This is the IPv4 Address used in the BGP peering session for the non-Oracle router. Example: 10.0.0.2/31
        :param str oracle_bgp_asn: This is the value of the Oracle Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        :param str oracle_interface_ip: This is the IPv4 Address used in the BGP peering session for the Oracle router. Example: 10.0.0.1/31
        """
        pulumi.set(__self__, "bgp_ipv6state", bgp_ipv6state)
        pulumi.set(__self__, "bgp_state", bgp_state)
        pulumi.set(__self__, "customer_bgp_asn", customer_bgp_asn)
        pulumi.set(__self__, "customer_interface_ip", customer_interface_ip)
        pulumi.set(__self__, "oracle_bgp_asn", oracle_bgp_asn)
        pulumi.set(__self__, "oracle_interface_ip", oracle_interface_ip)

    @property
    @pulumi.getter(name="bgpIpv6state")
    def bgp_ipv6state(self) -> str:
        return pulumi.get(self, "bgp_ipv6state")

    @property
    @pulumi.getter(name="bgpState")
    def bgp_state(self) -> str:
        """
        the state of the BGP.
        """
        return pulumi.get(self, "bgp_state")

    @property
    @pulumi.getter(name="customerBgpAsn")
    def customer_bgp_asn(self) -> str:
        """
        This is the value of the remote Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        """
        return pulumi.get(self, "customer_bgp_asn")

    @property
    @pulumi.getter(name="customerInterfaceIp")
    def customer_interface_ip(self) -> str:
        """
        This is the IPv4 Address used in the BGP peering session for the non-Oracle router. Example: 10.0.0.2/31
        """
        return pulumi.get(self, "customer_interface_ip")

    @property
    @pulumi.getter(name="oracleBgpAsn")
    def oracle_bgp_asn(self) -> str:
        """
        This is the value of the Oracle Bgp ASN in asplain format, as a string. Example: 1587232876 (4 byte ASN) or 12345 (2 byte ASN)
        """
        return pulumi.get(self, "oracle_bgp_asn")

    @property
    @pulumi.getter(name="oracleInterfaceIp")
    def oracle_interface_ip(self) -> str:
        """
        This is the IPv4 Address used in the BGP peering session for the Oracle router. Example: 10.0.0.1/31
        """
        return pulumi.get(self, "oracle_interface_ip")


@pulumi.output_type
class GetIpsecConnectionTunnelEncryptionDomainConfigResult(dict):
    def __init__(__self__, *,
                 cpe_traffic_selectors: Sequence[str],
                 oracle_traffic_selectors: Sequence[str]):
        """
        :param Sequence[str] cpe_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        :param Sequence[str] oracle_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        pulumi.set(__self__, "cpe_traffic_selectors", cpe_traffic_selectors)
        pulumi.set(__self__, "oracle_traffic_selectors", oracle_traffic_selectors)

    @property
    @pulumi.getter(name="cpeTrafficSelectors")
    def cpe_traffic_selectors(self) -> Sequence[str]:
        """
        Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        """
        return pulumi.get(self, "cpe_traffic_selectors")

    @property
    @pulumi.getter(name="oracleTrafficSelectors")
    def oracle_traffic_selectors(self) -> Sequence[str]:
        """
        Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        return pulumi.get(self, "oracle_traffic_selectors")


@pulumi.output_type
class GetIpsecConnectionTunnelRoutesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpsecConnectionTunnelRoutesTunnelRouteResult(dict):
    def __init__(__self__, *,
                 advertiser: str,
                 age: str,
                 as_paths: Sequence[int],
                 is_best_path: bool,
                 prefix: str):
        """
        :param str advertiser: Specifies the advertiser of the routes. If set to `ORACLE`, this returns only the routes advertised by Oracle. When set to `CUSTOMER`, this returns only the routes advertised by the CPE.
        :param str age: The age of the route.
        :param Sequence[int] as_paths: A list of ASNs in AS_Path.
        :param bool is_best_path: Indicates this is the best route.
        :param str prefix: The BGP network layer reachability information.
        """
        pulumi.set(__self__, "advertiser", advertiser)
        pulumi.set(__self__, "age", age)
        pulumi.set(__self__, "as_paths", as_paths)
        pulumi.set(__self__, "is_best_path", is_best_path)
        pulumi.set(__self__, "prefix", prefix)

    @property
    @pulumi.getter
    def advertiser(self) -> str:
        """
        Specifies the advertiser of the routes. If set to `ORACLE`, this returns only the routes advertised by Oracle. When set to `CUSTOMER`, this returns only the routes advertised by the CPE.
        """
        return pulumi.get(self, "advertiser")

    @property
    @pulumi.getter
    def age(self) -> str:
        """
        The age of the route.
        """
        return pulumi.get(self, "age")

    @property
    @pulumi.getter(name="asPaths")
    def as_paths(self) -> Sequence[int]:
        """
        A list of ASNs in AS_Path.
        """
        return pulumi.get(self, "as_paths")

    @property
    @pulumi.getter(name="isBestPath")
    def is_best_path(self) -> bool:
        """
        Indicates this is the best route.
        """
        return pulumi.get(self, "is_best_path")

    @property
    @pulumi.getter
    def prefix(self) -> str:
        """
        The BGP network layer reachability information.
        """
        return pulumi.get(self, "prefix")


@pulumi.output_type
class GetIpsecConnectionTunnelsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpsecConnectionTunnelsIpSecConnectionTunnelResult(dict):
    def __init__(__self__, *,
                 bgp_session_infos: Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelBgpSessionInfoResult'],
                 compartment_id: str,
                 cpe_ip: str,
                 display_name: str,
                 dpd_mode: str,
                 dpd_timeout_in_sec: int,
                 encryption_domain_configs: Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelEncryptionDomainConfigResult'],
                 id: str,
                 ike_version: str,
                 nat_translation_enabled: str,
                 oracle_can_initiate: str,
                 phase_one_details: Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseOneDetailResult'],
                 phase_two_details: Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseTwoDetailResult'],
                 routing: str,
                 state: str,
                 status: str,
                 time_created: str,
                 time_status_updated: str,
                 vpn_ip: str):
        """
        :param Sequence['GetIpsecConnectionTunnelsIpSecConnectionTunnelBgpSessionInfoArgs'] bgp_session_infos: Information for establishing a BGP session for the IPSec tunnel.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the tunnel.
        :param str cpe_ip: The IP address of the CPE device's VPN headend.  Example: `203.0.113.22`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str dpd_mode: Dead peer detection (DPD) mode set on the Oracle side of the connection. This mode sets whether Oracle can only respond to a request from the CPE device to start DPD, or both respond to and initiate requests.
        :param int dpd_timeout_in_sec: DPD timeout in seconds.
        :param Sequence['GetIpsecConnectionTunnelsIpSecConnectionTunnelEncryptionDomainConfigArgs'] encryption_domain_configs: Configuration information used by the encryption domain policy.
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the tunnel.
        :param str ike_version: Internet Key Exchange protocol version.
        :param str nat_translation_enabled: By default (the `AUTO` setting), IKE sends packets with a source and destination port set to 500, and when it detects that the port used to forward packets has changed (most likely because a NAT device is between the CPE device and the Oracle VPN headend) it will try to negotiate the use of NAT-T.
        :param str oracle_can_initiate: Indicates whether Oracle can only respond to a request to start an IPSec tunnel from the CPE device, or both respond to and initiate requests.
        :param Sequence['GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseOneDetailArgs'] phase_one_details: IPSec tunnel details specific to ISAKMP phase one.
        :param Sequence['GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseTwoDetailArgs'] phase_two_details: IPsec tunnel detail information specific to phase two.
        :param str routing: The type of routing used for this tunnel (BGP dynamic routing, static routing, or policy-based routing).
        :param str state: The tunnel's lifecycle state.
        :param str status: The status of the tunnel based on IPSec protocol characteristics.
        :param str time_created: The date and time the IPSec tunnel was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_status_updated: When the status of the IPSec tunnel last changed, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vpn_ip: The IP address of the Oracle VPN headend for the connection.  Example: `203.0.113.21`
        """
        pulumi.set(__self__, "bgp_session_infos", bgp_session_infos)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "cpe_ip", cpe_ip)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "dpd_mode", dpd_mode)
        pulumi.set(__self__, "dpd_timeout_in_sec", dpd_timeout_in_sec)
        pulumi.set(__self__, "encryption_domain_configs", encryption_domain_configs)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ike_version", ike_version)
        pulumi.set(__self__, "nat_translation_enabled", nat_translation_enabled)
        pulumi.set(__self__, "oracle_can_initiate", oracle_can_initiate)
        pulumi.set(__self__, "phase_one_details", phase_one_details)
        pulumi.set(__self__, "phase_two_details", phase_two_details)
        pulumi.set(__self__, "routing", routing)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_status_updated", time_status_updated)
        pulumi.set(__self__, "vpn_ip", vpn_ip)

    @property
    @pulumi.getter(name="bgpSessionInfos")
    def bgp_session_infos(self) -> Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelBgpSessionInfoResult']:
        """
        Information for establishing a BGP session for the IPSec tunnel.
        """
        return pulumi.get(self, "bgp_session_infos")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the tunnel.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="cpeIp")
    def cpe_ip(self) -> str:
        """
        The IP address of the CPE device's VPN headend.  Example: `203.0.113.22`
        """
        return pulumi.get(self, "cpe_ip")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="dpdMode")
    def dpd_mode(self) -> str:
        """
        Dead peer detection (DPD) mode set on the Oracle side of the connection. This mode sets whether Oracle can only respond to a request from the CPE device to start DPD, or both respond to and initiate requests.
        """
        return pulumi.get(self, "dpd_mode")

    @property
    @pulumi.getter(name="dpdTimeoutInSec")
    def dpd_timeout_in_sec(self) -> int:
        """
        DPD timeout in seconds.
        """
        return pulumi.get(self, "dpd_timeout_in_sec")

    @property
    @pulumi.getter(name="encryptionDomainConfigs")
    def encryption_domain_configs(self) -> Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelEncryptionDomainConfigResult']:
        """
        Configuration information used by the encryption domain policy.
        """
        return pulumi.get(self, "encryption_domain_configs")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the tunnel.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ikeVersion")
    def ike_version(self) -> str:
        """
        Internet Key Exchange protocol version.
        """
        return pulumi.get(self, "ike_version")

    @property
    @pulumi.getter(name="natTranslationEnabled")
    def nat_translation_enabled(self) -> str:
        """
        By default (the `AUTO` setting), IKE sends packets with a source and destination port set to 500, and when it detects that the port used to forward packets has changed (most likely because a NAT device is between the CPE device and the Oracle VPN headend) it will try to negotiate the use of NAT-T.
        """
        return pulumi.get(self, "nat_translation_enabled")

    @property
    @pulumi.getter(name="oracleCanInitiate")
    def oracle_can_initiate(self) -> str:
        """
        Indicates whether Oracle can only respond to a request to start an IPSec tunnel from the CPE device, or both respond to and initiate requests.
        """
        return pulumi.get(self, "oracle_can_initiate")

    @property
    @pulumi.getter(name="phaseOneDetails")
    def phase_one_details(self) -> Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseOneDetailResult']:
        """
        IPSec tunnel details specific to ISAKMP phase one.
        """
        return pulumi.get(self, "phase_one_details")

    @property
    @pulumi.getter(name="phaseTwoDetails")
    def phase_two_details(self) -> Sequence['outputs.GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseTwoDetailResult']:
        """
        IPsec tunnel detail information specific to phase two.
        """
        return pulumi.get(self, "phase_two_details")

    @property
    @pulumi.getter
    def routing(self) -> str:
        """
        The type of routing used for this tunnel (BGP dynamic routing, static routing, or policy-based routing).
        """
        return pulumi.get(self, "routing")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The tunnel's lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter
    def status(self) -> str:
        """
        The status of the tunnel based on IPSec protocol characteristics.
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the IPSec tunnel was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeStatusUpdated")
    def time_status_updated(self) -> str:
        """
        When the status of the IPSec tunnel last changed, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_status_updated")

    @property
    @pulumi.getter(name="vpnIp")
    def vpn_ip(self) -> str:
        """
        The IP address of the Oracle VPN headend for the connection.  Example: `203.0.113.21`
        """
        return pulumi.get(self, "vpn_ip")


@pulumi.output_type
class GetIpsecConnectionTunnelsIpSecConnectionTunnelBgpSessionInfoResult(dict):
    def __init__(__self__, *,
                 bgp_ipv6state: str,
                 bgp_state: str,
                 customer_bgp_asn: str,
                 customer_interface_ip: str,
                 customer_interface_ipv6: str,
                 oracle_bgp_asn: str,
                 oracle_interface_ip: str,
                 oracle_interface_ipv6: str):
        """
        :param str bgp_ipv6state: The state of the BGP IPv6 session.
        :param str bgp_state: The state of the BGP session.
        :param str customer_bgp_asn: If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/IPSecConnectionTunnel/)), this ASN is required and used for the tunnel's BGP session. This is the ASN of the network on the CPE end of the BGP session. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.
        :param str customer_interface_ip: The IP address for the CPE end of the inside tunnel interface.
        :param str customer_interface_ipv6: The IPv6 address for the CPE end of the inside tunnel interface. This IP address is optional.
        :param str oracle_bgp_asn: The Oracle BGP ASN.
        :param str oracle_interface_ip: The IP address for the Oracle end of the inside tunnel interface.
        :param str oracle_interface_ipv6: The IPv6 address for the Oracle end of the inside tunnel interface. This IP address is optional.
        """
        pulumi.set(__self__, "bgp_ipv6state", bgp_ipv6state)
        pulumi.set(__self__, "bgp_state", bgp_state)
        pulumi.set(__self__, "customer_bgp_asn", customer_bgp_asn)
        pulumi.set(__self__, "customer_interface_ip", customer_interface_ip)
        pulumi.set(__self__, "customer_interface_ipv6", customer_interface_ipv6)
        pulumi.set(__self__, "oracle_bgp_asn", oracle_bgp_asn)
        pulumi.set(__self__, "oracle_interface_ip", oracle_interface_ip)
        pulumi.set(__self__, "oracle_interface_ipv6", oracle_interface_ipv6)

    @property
    @pulumi.getter(name="bgpIpv6state")
    def bgp_ipv6state(self) -> str:
        """
        The state of the BGP IPv6 session.
        """
        return pulumi.get(self, "bgp_ipv6state")

    @property
    @pulumi.getter(name="bgpState")
    def bgp_state(self) -> str:
        """
        The state of the BGP session.
        """
        return pulumi.get(self, "bgp_state")

    @property
    @pulumi.getter(name="customerBgpAsn")
    def customer_bgp_asn(self) -> str:
        """
        If the tunnel's `routing` attribute is set to `BGP` (see [IPSecConnectionTunnel](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/IPSecConnectionTunnel/)), this ASN is required and used for the tunnel's BGP session. This is the ASN of the network on the CPE end of the BGP session. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.
        """
        return pulumi.get(self, "customer_bgp_asn")

    @property
    @pulumi.getter(name="customerInterfaceIp")
    def customer_interface_ip(self) -> str:
        """
        The IP address for the CPE end of the inside tunnel interface.
        """
        return pulumi.get(self, "customer_interface_ip")

    @property
    @pulumi.getter(name="customerInterfaceIpv6")
    def customer_interface_ipv6(self) -> str:
        """
        The IPv6 address for the CPE end of the inside tunnel interface. This IP address is optional.
        """
        return pulumi.get(self, "customer_interface_ipv6")

    @property
    @pulumi.getter(name="oracleBgpAsn")
    def oracle_bgp_asn(self) -> str:
        """
        The Oracle BGP ASN.
        """
        return pulumi.get(self, "oracle_bgp_asn")

    @property
    @pulumi.getter(name="oracleInterfaceIp")
    def oracle_interface_ip(self) -> str:
        """
        The IP address for the Oracle end of the inside tunnel interface.
        """
        return pulumi.get(self, "oracle_interface_ip")

    @property
    @pulumi.getter(name="oracleInterfaceIpv6")
    def oracle_interface_ipv6(self) -> str:
        """
        The IPv6 address for the Oracle end of the inside tunnel interface. This IP address is optional.
        """
        return pulumi.get(self, "oracle_interface_ipv6")


@pulumi.output_type
class GetIpsecConnectionTunnelsIpSecConnectionTunnelEncryptionDomainConfigResult(dict):
    def __init__(__self__, *,
                 cpe_traffic_selectors: Sequence[str],
                 oracle_traffic_selectors: Sequence[str]):
        """
        :param Sequence[str] cpe_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        :param Sequence[str] oracle_traffic_selectors: Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        pulumi.set(__self__, "cpe_traffic_selectors", cpe_traffic_selectors)
        pulumi.set(__self__, "oracle_traffic_selectors", oracle_traffic_selectors)

    @property
    @pulumi.getter(name="cpeTrafficSelectors")
    def cpe_traffic_selectors(self) -> Sequence[str]:
        """
        Lists IPv4 or IPv6-enabled subnets in your on-premises network.
        """
        return pulumi.get(self, "cpe_traffic_selectors")

    @property
    @pulumi.getter(name="oracleTrafficSelectors")
    def oracle_traffic_selectors(self) -> Sequence[str]:
        """
        Lists IPv4 or IPv6-enabled subnets in your Oracle tenancy.
        """
        return pulumi.get(self, "oracle_traffic_selectors")


@pulumi.output_type
class GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseOneDetailResult(dict):
    def __init__(__self__, *,
                 custom_authentication_algorithm: str,
                 custom_dh_group: str,
                 custom_encryption_algorithm: str,
                 is_custom_phase_one_config: bool,
                 is_ike_established: bool,
                 lifetime: int,
                 negotiated_authentication_algorithm: str,
                 negotiated_dh_group: str,
                 negotiated_encryption_algorithm: str,
                 remaining_lifetime: str,
                 remaining_lifetime_last_retrieved: str):
        """
        :param str custom_authentication_algorithm: Phase two authentication algorithm proposed during tunnel negotiation.
        :param str custom_dh_group: The proposed custom Diffie-Hellman group.
        :param str custom_encryption_algorithm: The proposed custom phase two encryption algorithm.
        :param bool is_custom_phase_one_config: Indicates whether custom phase one configuration is enabled. If this option is not enabled, default settings are proposed.
        :param bool is_ike_established: Indicates whether IKE phase one is established.
        :param int lifetime: The total configured lifetime of the IKE security association.
        :param str negotiated_authentication_algorithm: The negotiated phase two authentication algorithm.
        :param str negotiated_dh_group: The negotiated Diffie-Hellman group.
        :param str negotiated_encryption_algorithm: The negotiated encryption algorithm.
        :param str remaining_lifetime: The remaining lifetime before the key is refreshed.
        :param str remaining_lifetime_last_retrieved: The date and time the remaining lifetime was last retrieved, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "custom_authentication_algorithm", custom_authentication_algorithm)
        pulumi.set(__self__, "custom_dh_group", custom_dh_group)
        pulumi.set(__self__, "custom_encryption_algorithm", custom_encryption_algorithm)
        pulumi.set(__self__, "is_custom_phase_one_config", is_custom_phase_one_config)
        pulumi.set(__self__, "is_ike_established", is_ike_established)
        pulumi.set(__self__, "lifetime", lifetime)
        pulumi.set(__self__, "negotiated_authentication_algorithm", negotiated_authentication_algorithm)
        pulumi.set(__self__, "negotiated_dh_group", negotiated_dh_group)
        pulumi.set(__self__, "negotiated_encryption_algorithm", negotiated_encryption_algorithm)
        pulumi.set(__self__, "remaining_lifetime", remaining_lifetime)
        pulumi.set(__self__, "remaining_lifetime_last_retrieved", remaining_lifetime_last_retrieved)

    @property
    @pulumi.getter(name="customAuthenticationAlgorithm")
    def custom_authentication_algorithm(self) -> str:
        """
        Phase two authentication algorithm proposed during tunnel negotiation.
        """
        return pulumi.get(self, "custom_authentication_algorithm")

    @property
    @pulumi.getter(name="customDhGroup")
    def custom_dh_group(self) -> str:
        """
        The proposed custom Diffie-Hellman group.
        """
        return pulumi.get(self, "custom_dh_group")

    @property
    @pulumi.getter(name="customEncryptionAlgorithm")
    def custom_encryption_algorithm(self) -> str:
        """
        The proposed custom phase two encryption algorithm.
        """
        return pulumi.get(self, "custom_encryption_algorithm")

    @property
    @pulumi.getter(name="isCustomPhaseOneConfig")
    def is_custom_phase_one_config(self) -> bool:
        """
        Indicates whether custom phase one configuration is enabled. If this option is not enabled, default settings are proposed.
        """
        return pulumi.get(self, "is_custom_phase_one_config")

    @property
    @pulumi.getter(name="isIkeEstablished")
    def is_ike_established(self) -> bool:
        """
        Indicates whether IKE phase one is established.
        """
        return pulumi.get(self, "is_ike_established")

    @property
    @pulumi.getter
    def lifetime(self) -> int:
        """
        The total configured lifetime of the IKE security association.
        """
        return pulumi.get(self, "lifetime")

    @property
    @pulumi.getter(name="negotiatedAuthenticationAlgorithm")
    def negotiated_authentication_algorithm(self) -> str:
        """
        The negotiated phase two authentication algorithm.
        """
        return pulumi.get(self, "negotiated_authentication_algorithm")

    @property
    @pulumi.getter(name="negotiatedDhGroup")
    def negotiated_dh_group(self) -> str:
        """
        The negotiated Diffie-Hellman group.
        """
        return pulumi.get(self, "negotiated_dh_group")

    @property
    @pulumi.getter(name="negotiatedEncryptionAlgorithm")
    def negotiated_encryption_algorithm(self) -> str:
        """
        The negotiated encryption algorithm.
        """
        return pulumi.get(self, "negotiated_encryption_algorithm")

    @property
    @pulumi.getter(name="remainingLifetime")
    def remaining_lifetime(self) -> str:
        """
        The remaining lifetime before the key is refreshed.
        """
        return pulumi.get(self, "remaining_lifetime")

    @property
    @pulumi.getter(name="remainingLifetimeLastRetrieved")
    def remaining_lifetime_last_retrieved(self) -> str:
        """
        The date and time the remaining lifetime was last retrieved, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "remaining_lifetime_last_retrieved")


@pulumi.output_type
class GetIpsecConnectionTunnelsIpSecConnectionTunnelPhaseTwoDetailResult(dict):
    def __init__(__self__, *,
                 custom_authentication_algorithm: str,
                 custom_encryption_algorithm: str,
                 dh_group: str,
                 is_custom_phase_two_config: bool,
                 is_esp_established: bool,
                 is_pfs_enabled: bool,
                 lifetime: int,
                 negotiated_authentication_algorithm: str,
                 negotiated_dh_group: str,
                 negotiated_encryption_algorithm: str,
                 remaining_lifetime: str,
                 remaining_lifetime_last_retrieved: str):
        """
        :param str custom_authentication_algorithm: Phase two authentication algorithm proposed during tunnel negotiation.
        :param str custom_encryption_algorithm: The proposed custom phase two encryption algorithm.
        :param str dh_group: The proposed Diffie-Hellman group.
        :param bool is_custom_phase_two_config: Indicates whether custom phase two configuration is enabled. If this option is not enabled, default settings are proposed.
        :param bool is_esp_established: Indicates that ESP phase two is established.
        :param bool is_pfs_enabled: Indicates that PFS (perfect forward secrecy) is enabled.
        :param int lifetime: The total configured lifetime of the IKE security association.
        :param str negotiated_authentication_algorithm: The negotiated phase two authentication algorithm.
        :param str negotiated_dh_group: The negotiated Diffie-Hellman group.
        :param str negotiated_encryption_algorithm: The negotiated encryption algorithm.
        :param str remaining_lifetime: The remaining lifetime before the key is refreshed.
        :param str remaining_lifetime_last_retrieved: The date and time the remaining lifetime was last retrieved, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "custom_authentication_algorithm", custom_authentication_algorithm)
        pulumi.set(__self__, "custom_encryption_algorithm", custom_encryption_algorithm)
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "is_custom_phase_two_config", is_custom_phase_two_config)
        pulumi.set(__self__, "is_esp_established", is_esp_established)
        pulumi.set(__self__, "is_pfs_enabled", is_pfs_enabled)
        pulumi.set(__self__, "lifetime", lifetime)
        pulumi.set(__self__, "negotiated_authentication_algorithm", negotiated_authentication_algorithm)
        pulumi.set(__self__, "negotiated_dh_group", negotiated_dh_group)
        pulumi.set(__self__, "negotiated_encryption_algorithm", negotiated_encryption_algorithm)
        pulumi.set(__self__, "remaining_lifetime", remaining_lifetime)
        pulumi.set(__self__, "remaining_lifetime_last_retrieved", remaining_lifetime_last_retrieved)

    @property
    @pulumi.getter(name="customAuthenticationAlgorithm")
    def custom_authentication_algorithm(self) -> str:
        """
        Phase two authentication algorithm proposed during tunnel negotiation.
        """
        return pulumi.get(self, "custom_authentication_algorithm")

    @property
    @pulumi.getter(name="customEncryptionAlgorithm")
    def custom_encryption_algorithm(self) -> str:
        """
        The proposed custom phase two encryption algorithm.
        """
        return pulumi.get(self, "custom_encryption_algorithm")

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> str:
        """
        The proposed Diffie-Hellman group.
        """
        return pulumi.get(self, "dh_group")

    @property
    @pulumi.getter(name="isCustomPhaseTwoConfig")
    def is_custom_phase_two_config(self) -> bool:
        """
        Indicates whether custom phase two configuration is enabled. If this option is not enabled, default settings are proposed.
        """
        return pulumi.get(self, "is_custom_phase_two_config")

    @property
    @pulumi.getter(name="isEspEstablished")
    def is_esp_established(self) -> bool:
        """
        Indicates that ESP phase two is established.
        """
        return pulumi.get(self, "is_esp_established")

    @property
    @pulumi.getter(name="isPfsEnabled")
    def is_pfs_enabled(self) -> bool:
        """
        Indicates that PFS (perfect forward secrecy) is enabled.
        """
        return pulumi.get(self, "is_pfs_enabled")

    @property
    @pulumi.getter
    def lifetime(self) -> int:
        """
        The total configured lifetime of the IKE security association.
        """
        return pulumi.get(self, "lifetime")

    @property
    @pulumi.getter(name="negotiatedAuthenticationAlgorithm")
    def negotiated_authentication_algorithm(self) -> str:
        """
        The negotiated phase two authentication algorithm.
        """
        return pulumi.get(self, "negotiated_authentication_algorithm")

    @property
    @pulumi.getter(name="negotiatedDhGroup")
    def negotiated_dh_group(self) -> str:
        """
        The negotiated Diffie-Hellman group.
        """
        return pulumi.get(self, "negotiated_dh_group")

    @property
    @pulumi.getter(name="negotiatedEncryptionAlgorithm")
    def negotiated_encryption_algorithm(self) -> str:
        """
        The negotiated encryption algorithm.
        """
        return pulumi.get(self, "negotiated_encryption_algorithm")

    @property
    @pulumi.getter(name="remainingLifetime")
    def remaining_lifetime(self) -> str:
        """
        The remaining lifetime before the key is refreshed.
        """
        return pulumi.get(self, "remaining_lifetime")

    @property
    @pulumi.getter(name="remainingLifetimeLastRetrieved")
    def remaining_lifetime_last_retrieved(self) -> str:
        """
        The date and time the remaining lifetime was last retrieved, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "remaining_lifetime_last_retrieved")


@pulumi.output_type
class GetIpsecConnectionsConnectionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 cpe_id: str,
                 cpe_local_identifier: str,
                 cpe_local_identifier_type: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 drg_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 static_routes: Sequence[str],
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str cpe_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE.
        :param str cpe_local_identifier: Your identifier for your CPE device. Can be either an IP address or a hostname (specifically, the fully qualified domain name (FQDN)). The type of identifier here must correspond to the value for `cpeLocalIdentifierType`.
        :param str cpe_local_identifier_type: The type of identifier for your CPE device. The value here must correspond to the value for `cpeLocalIdentifier`.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str drg_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The IPSec connection's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str state: The IPSec connection's current state.
        :param Sequence[str] static_routes: Static routes to the CPE. The CIDR must not be a multicast address or class E address.
        :param str time_created: The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "cpe_id", cpe_id)
        pulumi.set(__self__, "cpe_local_identifier", cpe_local_identifier)
        pulumi.set(__self__, "cpe_local_identifier_type", cpe_local_identifier_type)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "drg_id", drg_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "static_routes", static_routes)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="cpeId")
    def cpe_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the CPE.
        """
        return pulumi.get(self, "cpe_id")

    @property
    @pulumi.getter(name="cpeLocalIdentifier")
    def cpe_local_identifier(self) -> str:
        """
        Your identifier for your CPE device. Can be either an IP address or a hostname (specifically, the fully qualified domain name (FQDN)). The type of identifier here must correspond to the value for `cpeLocalIdentifierType`.
        """
        return pulumi.get(self, "cpe_local_identifier")

    @property
    @pulumi.getter(name="cpeLocalIdentifierType")
    def cpe_local_identifier_type(self) -> str:
        """
        The type of identifier for your CPE device. The value here must correspond to the value for `cpeLocalIdentifier`.
        """
        return pulumi.get(self, "cpe_local_identifier_type")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="drgId")
    def drg_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        """
        return pulumi.get(self, "drg_id")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The IPSec connection's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The IPSec connection's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="staticRoutes")
    def static_routes(self) -> Sequence[str]:
        """
        Static routes to the CPE. The CIDR must not be a multicast address or class E address.
        """
        return pulumi.get(self, "static_routes")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetIpsecConnectionsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpsecStatusFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpsecStatusTunnelResult(dict):
    def __init__(__self__, *,
                 ip_address: str,
                 state: str,
                 time_created: str,
                 time_state_modified: str):
        """
        :param str ip_address: The IP address of Oracle's VPN headend.  Example: `203.0.113.50`
        :param str state: The tunnel's current state.
        :param str time_created: The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str time_state_modified: When the state of the tunnel last changed, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_state_modified", time_state_modified)

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        The IP address of Oracle's VPN headend.  Example: `203.0.113.50`
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The tunnel's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the IPSec connection was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeStateModified")
    def time_state_modified(self) -> str:
        """
        When the state of the tunnel last changed, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_state_modified")


@pulumi.output_type
class GetIpv6sFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetIpv6sIpv6Result(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ip_address: str,
                 ipv6subnet_cidr: str,
                 state: str,
                 subnet_id: str,
                 time_created: str,
                 vnic_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the IPv6. This is the same as the VNIC's compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IPv6.
        :param str ip_address: An IP address. This could be either IPv4 or IPv6, depending on the resource. Example: `10.0.3.3`
        :param str state: The IPv6's current state.
        :param str subnet_id: The OCID of the subnet.
        :param str time_created: The date and time the IPv6 was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vnic_id: The OCID of the VNIC.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "ipv6subnet_cidr", ipv6subnet_cidr)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vnic_id", vnic_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the IPv6. This is the same as the VNIC's compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IPv6.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        An IP address. This could be either IPv4 or IPv6, depending on the resource. Example: `10.0.3.3`
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter(name="ipv6subnetCidr")
    def ipv6subnet_cidr(self) -> str:
        return pulumi.get(self, "ipv6subnet_cidr")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The IPv6's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the IPv6 was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vnicId")
    def vnic_id(self) -> str:
        """
        The OCID of the VNIC.
        """
        return pulumi.get(self, "vnic_id")


@pulumi.output_type
class GetListingResourceVersionsAppCatalogListingResourceVersionResult(dict):
    def __init__(__self__, *,
                 accessible_ports: Sequence[int],
                 allowed_actions: Sequence[str],
                 available_regions: Sequence[str],
                 compatible_shapes: Sequence[str],
                 listing_id: str,
                 listing_resource_id: str,
                 listing_resource_version: str,
                 time_published: str):
        pulumi.set(__self__, "accessible_ports", accessible_ports)
        pulumi.set(__self__, "allowed_actions", allowed_actions)
        pulumi.set(__self__, "available_regions", available_regions)
        pulumi.set(__self__, "compatible_shapes", compatible_shapes)
        pulumi.set(__self__, "listing_id", listing_id)
        pulumi.set(__self__, "listing_resource_id", listing_resource_id)
        pulumi.set(__self__, "listing_resource_version", listing_resource_version)
        pulumi.set(__self__, "time_published", time_published)

    @property
    @pulumi.getter(name="accessiblePorts")
    def accessible_ports(self) -> Sequence[int]:
        return pulumi.get(self, "accessible_ports")

    @property
    @pulumi.getter(name="allowedActions")
    def allowed_actions(self) -> Sequence[str]:
        return pulumi.get(self, "allowed_actions")

    @property
    @pulumi.getter(name="availableRegions")
    def available_regions(self) -> Sequence[str]:
        return pulumi.get(self, "available_regions")

    @property
    @pulumi.getter(name="compatibleShapes")
    def compatible_shapes(self) -> Sequence[str]:
        return pulumi.get(self, "compatible_shapes")

    @property
    @pulumi.getter(name="listingId")
    def listing_id(self) -> str:
        return pulumi.get(self, "listing_id")

    @property
    @pulumi.getter(name="listingResourceId")
    def listing_resource_id(self) -> str:
        return pulumi.get(self, "listing_resource_id")

    @property
    @pulumi.getter(name="listingResourceVersion")
    def listing_resource_version(self) -> str:
        return pulumi.get(self, "listing_resource_version")

    @property
    @pulumi.getter(name="timePublished")
    def time_published(self) -> str:
        return pulumi.get(self, "time_published")


@pulumi.output_type
class GetListingResourceVersionsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetLocalPeeringGatewaysFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetLocalPeeringGatewaysLocalPeeringGatewayResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_cross_tenancy_peering: bool,
                 peer_advertised_cidr: str,
                 peer_advertised_cidr_details: Sequence[str],
                 peer_id: str,
                 peering_status: str,
                 peering_status_details: str,
                 route_table_id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The LPG's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param bool is_cross_tenancy_peering: Whether the VCN at the other end of the peering is in a different tenancy.  Example: `false`
        :param str peer_advertised_cidr: The smallest aggregate CIDR that contains all the CIDR routes advertised by the VCN at the other end of the peering from this LPG. See `peerAdvertisedCidrDetails` for the individual CIDRs. The value is `null` if the LPG is not peered.  Example: `192.168.0.0/16`, or if aggregated with `172.16.0.0/24` then `128.0.0.0/1`
        :param Sequence[str] peer_advertised_cidr_details: The specific ranges of IP addresses available on or via the VCN at the other end of the peering from this LPG. The value is `null` if the LPG is not peered. You can use these as destination CIDRs for route rules to route a subnet's traffic to this LPG.  Example: [`192.168.0.0/16`, `172.16.0.0/24`]
        :param str peer_id: The OCID of the peered LPG
        :param str peering_status: Whether the LPG is peered with another LPG. `NEW` means the LPG has not yet been peered. `PENDING` means the peering is being established. `REVOKED` means the LPG at the other end of the peering has been deleted.
        :param str peering_status_details: Additional information regarding the peering status, if applicable.
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the LPG is using.
        :param str state: The LPG's current lifecycle state.
        :param str time_created: The date and time the LPG was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_cross_tenancy_peering", is_cross_tenancy_peering)
        pulumi.set(__self__, "peer_advertised_cidr", peer_advertised_cidr)
        pulumi.set(__self__, "peer_advertised_cidr_details", peer_advertised_cidr_details)
        pulumi.set(__self__, "peer_id", peer_id)
        pulumi.set(__self__, "peering_status", peering_status)
        pulumi.set(__self__, "peering_status_details", peering_status_details)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The LPG's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isCrossTenancyPeering")
    def is_cross_tenancy_peering(self) -> bool:
        """
        Whether the VCN at the other end of the peering is in a different tenancy.  Example: `false`
        """
        return pulumi.get(self, "is_cross_tenancy_peering")

    @property
    @pulumi.getter(name="peerAdvertisedCidr")
    def peer_advertised_cidr(self) -> str:
        """
        The smallest aggregate CIDR that contains all the CIDR routes advertised by the VCN at the other end of the peering from this LPG. See `peerAdvertisedCidrDetails` for the individual CIDRs. The value is `null` if the LPG is not peered.  Example: `192.168.0.0/16`, or if aggregated with `172.16.0.0/24` then `128.0.0.0/1`
        """
        return pulumi.get(self, "peer_advertised_cidr")

    @property
    @pulumi.getter(name="peerAdvertisedCidrDetails")
    def peer_advertised_cidr_details(self) -> Sequence[str]:
        """
        The specific ranges of IP addresses available on or via the VCN at the other end of the peering from this LPG. The value is `null` if the LPG is not peered. You can use these as destination CIDRs for route rules to route a subnet's traffic to this LPG.  Example: [`192.168.0.0/16`, `172.16.0.0/24`]
        """
        return pulumi.get(self, "peer_advertised_cidr_details")

    @property
    @pulumi.getter(name="peerId")
    def peer_id(self) -> str:
        """
        The OCID of the peered LPG
        """
        return pulumi.get(self, "peer_id")

    @property
    @pulumi.getter(name="peeringStatus")
    def peering_status(self) -> str:
        """
        Whether the LPG is peered with another LPG. `NEW` means the LPG has not yet been peered. `PENDING` means the peering is being established. `REVOKED` means the LPG at the other end of the peering has been deleted.
        """
        return pulumi.get(self, "peering_status")

    @property
    @pulumi.getter(name="peeringStatusDetails")
    def peering_status_details(self) -> str:
        """
        Additional information regarding the peering status, if applicable.
        """
        return pulumi.get(self, "peering_status_details")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the LPG is using.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The LPG's current lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the LPG was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetNatGatewaysFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetNatGatewaysNatGatewayResult(dict):
    def __init__(__self__, *,
                 block_traffic: bool,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 nat_ip: str,
                 public_ip_id: str,
                 route_table_id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param bool block_traffic: Whether the NAT gateway blocks traffic through it. The default is `false`.  Example: `true`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the NAT gateway.
        :param str nat_ip: The IP address associated with the NAT gateway.
        :param str public_ip_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the public IP address associated with the NAT gateway.
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table used by the NAT gateway.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the NAT gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "block_traffic", block_traffic)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "nat_ip", nat_ip)
        pulumi.set(__self__, "public_ip_id", public_ip_id)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="blockTraffic")
    def block_traffic(self) -> bool:
        """
        Whether the NAT gateway blocks traffic through it. The default is `false`.  Example: `true`
        """
        return pulumi.get(self, "block_traffic")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the NAT gateway.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="natIp")
    def nat_ip(self) -> str:
        """
        The IP address associated with the NAT gateway.
        """
        return pulumi.get(self, "nat_ip")

    @property
    @pulumi.getter(name="publicIpId")
    def public_ip_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the public IP address associated with the NAT gateway.
        """
        return pulumi.get(self, "public_ip_id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table used by the NAT gateway.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the NAT gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleResult(dict):
    def __init__(__self__, *,
                 description: str,
                 destination: str,
                 destination_type: str,
                 direction: str,
                 icmp_options: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleIcmpOptionResult'],
                 id: str,
                 is_valid: bool,
                 protocol: str,
                 source: str,
                 source_type: str,
                 stateless: bool,
                 tcp_options: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionResult'],
                 time_created: str,
                 udp_options: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionResult']):
        """
        :param str description: An optional description of your choice for the rule.
        :param str destination: Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.
        :param str destination_type: Type of destination for the rule. Required if `direction` = `EGRESS`.
        :param str direction: Direction of the security rule. Set to `EGRESS` for rules that allow outbound IP packets, or `INGRESS` for rules that allow inbound IP packets.
        :param Sequence['GetNetworkSecurityGroupSecurityRulesSecurityRuleIcmpOptionArgs'] icmp_options: Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        :param str id: An Oracle-assigned identifier for the security rule. You specify this ID when you want to update or delete the rule.  Example: `04ABEC`
        :param bool is_valid: Whether the rule is valid. The value is `True` when the rule is first created. If the rule's `source` or `destination` is a network security group, the value changes to `False` if that network security group is deleted.
        :param str protocol: The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        :param str source: Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.
        :param str source_type: Type of source for the rule. Required if `direction` = `INGRESS`.
        :param bool stateless: A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if egress traffic allows TCP destination port 80, there should be an ingress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        :param Sequence['GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionArgs'] tcp_options: Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        :param str time_created: The date and time the security rule was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param Sequence['GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionArgs'] udp_options: Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "destination_type", destination_type)
        pulumi.set(__self__, "direction", direction)
        pulumi.set(__self__, "icmp_options", icmp_options)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_valid", is_valid)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "source", source)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "stateless", stateless)
        pulumi.set(__self__, "tcp_options", tcp_options)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def destination(self) -> str:
        """
        Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> str:
        """
        Type of destination for the rule. Required if `direction` = `EGRESS`.
        """
        return pulumi.get(self, "destination_type")

    @property
    @pulumi.getter
    def direction(self) -> str:
        """
        Direction of the security rule. Set to `EGRESS` for rules that allow outbound IP packets, or `INGRESS` for rules that allow inbound IP packets.
        """
        return pulumi.get(self, "direction")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleIcmpOptionResult']:
        """
        Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        An Oracle-assigned identifier for the security rule. You specify this ID when you want to update or delete the rule.  Example: `04ABEC`
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isValid")
    def is_valid(self) -> bool:
        """
        Whether the rule is valid. The value is `True` when the rule is first created. If the rule's `source` or `destination` is a network security group, the value changes to `False` if that network security group is deleted.
        """
        return pulumi.get(self, "is_valid")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter
    def source(self) -> str:
        """
        Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.
        """
        return pulumi.get(self, "source")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        Type of source for the rule. Required if `direction` = `INGRESS`.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter
    def stateless(self) -> bool:
        """
        A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if egress traffic allows TCP destination port 80, there should be an ingress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        """
        return pulumi.get(self, "stateless")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionResult']:
        """
        Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the security rule was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionResult']:
        """
        Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleIcmpOptionResult(dict):
    def __init__(__self__, *,
                 code: int,
                 type: int):
        """
        :param int code: The ICMP code (optional).
        :param int type: The ICMP type.
        """
        pulumi.set(__self__, "code", code)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def code(self) -> int:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleTcpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionResult(dict):
    def __init__(__self__, *,
                 destination_port_ranges: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionDestinationPortRangeResult'],
                 source_port_ranges: Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionSourcePortRangeResult']):
        pulumi.set(__self__, "destination_port_ranges", destination_port_ranges)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter(name="destinationPortRanges")
    def destination_port_ranges(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionDestinationPortRangeResult']:
        return pulumi.get(self, "destination_port_ranges")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionDestinationPortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetNetworkSecurityGroupSecurityRulesSecurityRuleUdpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetNetworkSecurityGroupVnicsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetNetworkSecurityGroupVnicsNetworkSecurityGroupVnicResult(dict):
    def __init__(__self__, *,
                 resource_id: str,
                 time_associated: str,
                 vnic_id: str):
        """
        :param str resource_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the parent resource that the VNIC is attached to (for example, a Compute instance).
        :param str time_associated: The date and time the VNIC was added to the network security group, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vnic_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VNIC.
        """
        pulumi.set(__self__, "resource_id", resource_id)
        pulumi.set(__self__, "time_associated", time_associated)
        pulumi.set(__self__, "vnic_id", vnic_id)

    @property
    @pulumi.getter(name="resourceId")
    def resource_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the parent resource that the VNIC is attached to (for example, a Compute instance).
        """
        return pulumi.get(self, "resource_id")

    @property
    @pulumi.getter(name="timeAssociated")
    def time_associated(self) -> str:
        """
        The date and time the VNIC was added to the network security group, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_associated")

    @property
    @pulumi.getter(name="vnicId")
    def vnic_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VNIC.
        """
        return pulumi.get(self, "vnic_id")


@pulumi.output_type
class GetNetworkSecurityGroupsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetNetworkSecurityGroupsNetworkSecurityGroupResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network security group.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the network security group was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network security group.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the network security group was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetPeerRegionForRemotePeeringsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The region's name.  Example: `us-phoenix-1`
        """
        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 region's name.  Example: `us-phoenix-1`
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetPeerRegionForRemotePeeringsPeerRegionForRemotePeeringResult(dict):
    def __init__(__self__, *,
                 name: str):
        """
        :param str name: The region's name.  Example: `us-phoenix-1`
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The region's name.  Example: `us-phoenix-1`
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetPrivateIpsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetPrivateIpsPrivateIpResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 id: str,
                 ip_address: str,
                 is_primary: bool,
                 is_reserved: bool,
                 subnet_id: str,
                 time_created: str,
                 vlan_id: str,
                 vnic_id: str):
        """
        :param str availability_domain: The private IP's availability domain. This attribute will be null if this is a *secondary* private IP assigned to a VNIC that is in a *regional* subnet.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the private IP.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str hostname_label: The hostname for the private IP. Used for DNS. The value is the hostname portion of the private IP's fully qualified domain name (FQDN) (for example, `bminstance1` in FQDN `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be unique across all VNICs in the subnet and comply with [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123).
        :param str id: The private IP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str ip_address: An IP address. This could be either IPv4 or IPv6, depending on the resource. Example: `10.0.3.3`
        :param bool is_primary: Whether this private IP is the primary one on the VNIC. Primary private IPs are unassigned and deleted automatically when the VNIC is terminated.  Example: `true`
        :param bool is_reserved: true if the IP is reserved and can exist detached from vnic
        :param str subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet.
        :param str time_created: The date and time the private IP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vlan_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN.
        :param str vnic_id: The OCID of the VNIC.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "is_primary", is_primary)
        pulumi.set(__self__, "is_reserved", is_reserved)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vlan_id", vlan_id)
        pulumi.set(__self__, "vnic_id", vnic_id)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The private IP's availability domain. This attribute will be null if this is a *secondary* private IP assigned to a VNIC that is in a *regional* subnet.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment containing the private IP.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        """
        The hostname for the private IP. Used for DNS. The value is the hostname portion of the private IP's fully qualified domain name (FQDN) (for example, `bminstance1` in FQDN `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be unique across all VNICs in the subnet and comply with [RFC 952](https://tools.ietf.org/html/rfc952) and [RFC 1123](https://tools.ietf.org/html/rfc1123).
        """
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The private IP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        An IP address. This could be either IPv4 or IPv6, depending on the resource. Example: `10.0.3.3`
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter(name="isPrimary")
    def is_primary(self) -> bool:
        """
        Whether this private IP is the primary one on the VNIC. Primary private IPs are unassigned and deleted automatically when the VNIC is terminated.  Example: `true`
        """
        return pulumi.get(self, "is_primary")

    @property
    @pulumi.getter(name="isReserved")
    def is_reserved(self) -> bool:
        """
        true if the IP is reserved and can exist detached from vnic
        """
        return pulumi.get(self, "is_reserved")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the private IP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VLAN.
        """
        return pulumi.get(self, "vlan_id")

    @property
    @pulumi.getter(name="vnicId")
    def vnic_id(self) -> str:
        """
        The OCID of the VNIC.
        """
        return pulumi.get(self, "vnic_id")


@pulumi.output_type
class GetPublicIpPoolsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetPublicIpPoolsPublicIpPoolCollectionResult(dict):
    def __init__(__self__, *,
                 items: Sequence['outputs.GetPublicIpPoolsPublicIpPoolCollectionItemResult']):
        pulumi.set(__self__, "items", items)

    @property
    @pulumi.getter
    def items(self) -> Sequence['outputs.GetPublicIpPoolsPublicIpPoolCollectionItemResult']:
        return pulumi.get(self, "items")


@pulumi.output_type
class GetPublicIpPoolsPublicIpPoolCollectionItemResult(dict):
    def __init__(__self__, *,
                 cidr_blocks: Sequence[str],
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 state: str,
                 time_created: str):
        """
        :param Sequence[str] cidr_blocks: The CIDR blocks added to this pool. This could be all or a portion of a BYOIP CIDR block.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the public IP pool.
        :param str state: The public IP pool's current state.
        :param str time_created: The date and time the public IP pool was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "cidr_blocks", cidr_blocks)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="cidrBlocks")
    def cidr_blocks(self) -> Sequence[str]:
        """
        The CIDR blocks added to this pool. This could be all or a portion of a BYOIP CIDR block.
        """
        return pulumi.get(self, "cidr_blocks")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the public IP pool.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The public IP pool's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the public IP pool was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetPublicIpsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetPublicIpsPublicIpResult(dict):
    def __init__(__self__, *,
                 assigned_entity_id: str,
                 assigned_entity_type: str,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ip_address: str,
                 lifetime: str,
                 private_ip_id: str,
                 public_ip_pool_id: str,
                 scope: str,
                 state: str,
                 time_created: str):
        """
        :param str assigned_entity_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the entity the public IP is assigned to, or in the process of being assigned to.
        :param str assigned_entity_type: The type of entity the public IP is assigned to, or in the process of being assigned to.
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The public IP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str ip_address: The public IP address of the `publicIp` object.  Example: `203.0.113.2`
        :param str lifetime: A filter to return only public IPs that match given lifetime.
        :param str private_ip_id: Deprecated. Use `assignedEntityId` instead.
        :param str public_ip_pool_id: A filter to return only resources that belong to the given public IP pool.
        :param str scope: Whether the public IP is regional or specific to a particular availability domain.
        :param str state: The public IP's current state.
        :param str time_created: The date and time the public IP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "assigned_entity_id", assigned_entity_id)
        pulumi.set(__self__, "assigned_entity_type", assigned_entity_type)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "lifetime", lifetime)
        pulumi.set(__self__, "private_ip_id", private_ip_id)
        pulumi.set(__self__, "public_ip_pool_id", public_ip_pool_id)
        pulumi.set(__self__, "scope", scope)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="assignedEntityId")
    def assigned_entity_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the entity the public IP is assigned to, or in the process of being assigned to.
        """
        return pulumi.get(self, "assigned_entity_id")

    @property
    @pulumi.getter(name="assignedEntityType")
    def assigned_entity_type(self) -> str:
        """
        The type of entity the public IP is assigned to, or in the process of being assigned to.
        """
        return pulumi.get(self, "assigned_entity_type")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The public IP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        The public IP address of the `publicIp` object.  Example: `203.0.113.2`
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter
    def lifetime(self) -> str:
        """
        A filter to return only public IPs that match given lifetime.
        """
        return pulumi.get(self, "lifetime")

    @property
    @pulumi.getter(name="privateIpId")
    def private_ip_id(self) -> str:
        """
        Deprecated. Use `assignedEntityId` instead.
        """
        return pulumi.get(self, "private_ip_id")

    @property
    @pulumi.getter(name="publicIpPoolId")
    def public_ip_pool_id(self) -> str:
        """
        A filter to return only resources that belong to the given public IP pool.
        """
        return pulumi.get(self, "public_ip_pool_id")

    @property
    @pulumi.getter
    def scope(self) -> str:
        """
        Whether the public IP is regional or specific to a particular availability domain.
        """
        return pulumi.get(self, "scope")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The public IP's current state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the public IP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetRemotePeeringConnectionsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetRemotePeeringConnectionsRemotePeeringConnectionResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 drg_id: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_cross_tenancy_peering: bool,
                 peer_id: str,
                 peer_region_name: str,
                 peer_tenancy_id: str,
                 peering_status: str,
                 state: str,
                 time_created: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str drg_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the RPC.
        :param bool is_cross_tenancy_peering: Whether the VCN at the other end of the peering is in a different tenancy.  Example: `false`
        :param str peer_id: If this RPC is peered, this value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the other RPC.
        :param str peer_region_name: If this RPC is peered, this value is the region that contains the other RPC.  Example: `us-ashburn-1`
        :param str peer_tenancy_id: If this RPC is peered, this value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the other RPC's tenancy.
        :param str peering_status: Whether the RPC is peered with another RPC. `NEW` means the RPC has not yet been peered. `PENDING` means the peering is being established. `REVOKED` means the RPC at the other end of the peering has been deleted.
        :param str state: The RPC's current lifecycle state.
        :param str time_created: The date and time the RPC was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "drg_id", drg_id)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_cross_tenancy_peering", is_cross_tenancy_peering)
        pulumi.set(__self__, "peer_id", peer_id)
        pulumi.set(__self__, "peer_region_name", peer_region_name)
        pulumi.set(__self__, "peer_tenancy_id", peer_tenancy_id)
        pulumi.set(__self__, "peering_status", peering_status)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="drgId")
    def drg_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the DRG.
        """
        return pulumi.get(self, "drg_id")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the RPC.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isCrossTenancyPeering")
    def is_cross_tenancy_peering(self) -> bool:
        """
        Whether the VCN at the other end of the peering is in a different tenancy.  Example: `false`
        """
        return pulumi.get(self, "is_cross_tenancy_peering")

    @property
    @pulumi.getter(name="peerId")
    def peer_id(self) -> str:
        """
        If this RPC is peered, this value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the other RPC.
        """
        return pulumi.get(self, "peer_id")

    @property
    @pulumi.getter(name="peerRegionName")
    def peer_region_name(self) -> str:
        """
        If this RPC is peered, this value is the region that contains the other RPC.  Example: `us-ashburn-1`
        """
        return pulumi.get(self, "peer_region_name")

    @property
    @pulumi.getter(name="peerTenancyId")
    def peer_tenancy_id(self) -> str:
        """
        If this RPC is peered, this value is the [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the other RPC's tenancy.
        """
        return pulumi.get(self, "peer_tenancy_id")

    @property
    @pulumi.getter(name="peeringStatus")
    def peering_status(self) -> str:
        """
        Whether the RPC is peered with another RPC. `NEW` means the RPC has not yet been peered. `PENDING` means the peering is being established. `REVOKED` means the RPC at the other end of the peering has been deleted.
        """
        return pulumi.get(self, "peering_status")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The RPC's current lifecycle state.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the RPC was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetRouteTablesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetRouteTablesRouteTableResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 route_rules: Sequence['outputs.GetRouteTablesRouteTableRouteRuleResult'],
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The route table's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param Sequence['GetRouteTablesRouteTableRouteRuleArgs'] route_rules: The collection of rules for routing destination IPs to network devices.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the route table was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "route_rules", route_rules)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The route table's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="routeRules")
    def route_rules(self) -> Sequence['outputs.GetRouteTablesRouteTableRouteRuleResult']:
        """
        The collection of rules for routing destination IPs to network devices.
        """
        return pulumi.get(self, "route_rules")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the route table was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetRouteTablesRouteTableRouteRuleResult(dict):
    def __init__(__self__, *,
                 cidr_block: str,
                 description: str,
                 destination: str,
                 destination_type: str,
                 network_entity_id: str,
                 route_type: str):
        """
        :param str cidr_block: Deprecated. Instead use `destination` and `destinationType`. Requests that include both `cidrBlock` and `destination` will be rejected.
        :param str description: An optional description of your choice for the rule.
        :param str destination: Conceptually, this is the range of IP addresses used for matching when routing traffic. Required if you provide a `destinationType`.
        :param str destination_type: Type of destination for the rule. Required if you provide a `destination`.
        :param str network_entity_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the route rule's target. For information about the type of targets you can specify, see [Route Tables](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm).
        :param str route_type: A route rule can be STATIC if manually added to the route table, LOCAL if added by Oracle Cloud Infrastructure to the route table.
        """
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "destination_type", destination_type)
        pulumi.set(__self__, "network_entity_id", network_entity_id)
        pulumi.set(__self__, "route_type", route_type)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        Deprecated. Instead use `destination` and `destinationType`. Requests that include both `cidrBlock` and `destination` will be rejected.
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def destination(self) -> str:
        """
        Conceptually, this is the range of IP addresses used for matching when routing traffic. Required if you provide a `destinationType`.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> str:
        """
        Type of destination for the rule. Required if you provide a `destination`.
        """
        return pulumi.get(self, "destination_type")

    @property
    @pulumi.getter(name="networkEntityId")
    def network_entity_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the route rule's target. For information about the type of targets you can specify, see [Route Tables](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm).
        """
        return pulumi.get(self, "network_entity_id")

    @property
    @pulumi.getter(name="routeType")
    def route_type(self) -> str:
        """
        A route rule can be STATIC if manually added to the route table, LOCAL if added by Oracle Cloud Infrastructure to the route table.
        """
        return pulumi.get(self, "route_type")


@pulumi.output_type
class GetSecurityListsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetSecurityListsSecurityListResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 egress_security_rules: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleResult'],
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ingress_security_rules: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleResult'],
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Sequence['GetSecurityListsSecurityListEgressSecurityRuleArgs'] egress_security_rules: Rules for allowing egress IP packets.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The security list's Oracle Cloud ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param Sequence['GetSecurityListsSecurityListIngressSecurityRuleArgs'] ingress_security_rules: Rules for allowing ingress IP packets.
        :param str state: A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        :param str time_created: The date and time the security list was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "egress_security_rules", egress_security_rules)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ingress_security_rules", ingress_security_rules)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="egressSecurityRules")
    def egress_security_rules(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleResult']:
        """
        Rules for allowing egress IP packets.
        """
        return pulumi.get(self, "egress_security_rules")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The security list's Oracle Cloud ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ingressSecurityRules")
    def ingress_security_rules(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleResult']:
        """
        Rules for allowing ingress IP packets.
        """
        return pulumi.get(self, "ingress_security_rules")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state.  The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the security list was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleResult(dict):
    def __init__(__self__, *,
                 description: str,
                 destination: str,
                 destination_type: str,
                 icmp_options: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleIcmpOptionResult'],
                 protocol: str,
                 stateless: bool,
                 tcp_options: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleTcpOptionResult'],
                 udp_options: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleUdpOptionResult']):
        """
        :param str description: An optional description of your choice for the rule.
        :param str destination: Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.
        :param str destination_type: Type of destination for the rule. The default is `CIDR_BLOCK`.
        :param Sequence['GetSecurityListsSecurityListEgressSecurityRuleIcmpOptionArgs'] icmp_options: Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        :param str protocol: The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        :param bool stateless: A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        :param Sequence['GetSecurityListsSecurityListEgressSecurityRuleTcpOptionArgs'] tcp_options: Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed. 
               * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        :param Sequence['GetSecurityListsSecurityListEgressSecurityRuleUdpOptionArgs'] udp_options: Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed. 
               * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "destination", destination)
        pulumi.set(__self__, "destination_type", destination_type)
        pulumi.set(__self__, "icmp_options", icmp_options)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "stateless", stateless)
        pulumi.set(__self__, "tcp_options", tcp_options)
        pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def destination(self) -> str:
        """
        Conceptually, this is the range of IP addresses that a packet originating from the instance can go to.
        """
        return pulumi.get(self, "destination")

    @property
    @pulumi.getter(name="destinationType")
    def destination_type(self) -> str:
        """
        Type of destination for the rule. The default is `CIDR_BLOCK`.
        """
        return pulumi.get(self, "destination_type")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleIcmpOptionResult']:
        """
        Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter
    def stateless(self) -> bool:
        """
        A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        """
        return pulumi.get(self, "stateless")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleTcpOptionResult']:
        """
        Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed. 
        * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleUdpOptionResult']:
        """
        Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed. 
        * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleIcmpOptionResult(dict):
    def __init__(__self__, *,
                 code: int,
                 type: int):
        """
        :param int code: The ICMP code (optional).
        :param int type: The ICMP type.
        """
        pulumi.set(__self__, "code", code)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def code(self) -> int:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleTcpOptionResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int,
                 source_port_ranges: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleTcpOptionSourcePortRangeResult']):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleTcpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleTcpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleUdpOptionResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int,
                 source_port_ranges: Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleUdpOptionSourcePortRangeResult']):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetSecurityListsSecurityListEgressSecurityRuleUdpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetSecurityListsSecurityListEgressSecurityRuleUdpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleResult(dict):
    def __init__(__self__, *,
                 description: str,
                 icmp_options: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleIcmpOptionResult'],
                 protocol: str,
                 source: str,
                 source_type: str,
                 stateless: bool,
                 tcp_options: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleTcpOptionResult'],
                 udp_options: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleUdpOptionResult']):
        """
        :param str description: An optional description of your choice for the rule.
        :param Sequence['GetSecurityListsSecurityListIngressSecurityRuleIcmpOptionArgs'] icmp_options: Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
               * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
               * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        :param str protocol: The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        :param str source: Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.
        :param str source_type: Type of source for the rule. The default is `CIDR_BLOCK`.
        :param bool stateless: A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        :param Sequence['GetSecurityListsSecurityListIngressSecurityRuleTcpOptionArgs'] tcp_options: Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed. 
               * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        :param Sequence['GetSecurityListsSecurityListIngressSecurityRuleUdpOptionArgs'] udp_options: Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed. 
               * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "icmp_options", icmp_options)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "source", source)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "stateless", stateless)
        pulumi.set(__self__, "tcp_options", tcp_options)
        pulumi.set(__self__, "udp_options", udp_options)

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        An optional description of your choice for the rule.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="icmpOptions")
    def icmp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleIcmpOptionResult']:
        """
        Optional and valid only for ICMP and ICMPv6. Use to specify a particular ICMP type and code as defined in:
        * [ICMP Parameters](http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
        * [ICMPv6 Parameters](https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml)
        """
        return pulumi.get(self, "icmp_options")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The transport protocol. Specify either `all` or an IPv4 protocol number as defined in [Protocol Numbers](http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). Options are supported only for ICMP ("1"), TCP ("6"), UDP ("17"), and ICMPv6 ("58").
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter
    def source(self) -> str:
        """
        Conceptually, this is the range of IP addresses that a packet coming into the instance can come from.
        """
        return pulumi.get(self, "source")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        Type of source for the rule. The default is `CIDR_BLOCK`.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter
    def stateless(self) -> bool:
        """
        A stateless rule allows traffic in one direction. Remember to add a corresponding stateless rule in the other direction if you need to support bidirectional traffic. For example, if ingress traffic allows TCP destination port 80, there should be an egress rule to allow TCP source port 80. Defaults to false, which means the rule is stateful and a corresponding rule is not necessary for bidirectional traffic.
        """
        return pulumi.get(self, "stateless")

    @property
    @pulumi.getter(name="tcpOptions")
    def tcp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleTcpOptionResult']:
        """
        Optional and valid only for TCP. Use to specify particular destination ports for TCP rules. If you specify TCP as the protocol but omit this object, then all destination ports are allowed. 
        * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        return pulumi.get(self, "tcp_options")

    @property
    @pulumi.getter(name="udpOptions")
    def udp_options(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleUdpOptionResult']:
        """
        Optional and valid only for UDP. Use to specify particular destination ports for UDP rules. If you specify UDP as the protocol but omit this object, then all destination ports are allowed. 
        * The following 2 attributes specify an inclusive range of allowed destination ports. Use the same number for the min and max to indicate a single port. Defaults to all ports if not specified.
        """
        return pulumi.get(self, "udp_options")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleIcmpOptionResult(dict):
    def __init__(__self__, *,
                 code: int,
                 type: int):
        """
        :param int code: The ICMP code (optional).
        :param int type: The ICMP type.
        """
        pulumi.set(__self__, "code", code)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def code(self) -> int:
        """
        The ICMP code (optional).
        """
        return pulumi.get(self, "code")

    @property
    @pulumi.getter
    def type(self) -> int:
        """
        The ICMP type.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleTcpOptionResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int,
                 source_port_ranges: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleTcpOptionSourcePortRangeResult']):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleTcpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleTcpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleUdpOptionResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int,
                 source_port_ranges: Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleUdpOptionSourcePortRangeResult']):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)
        pulumi.set(__self__, "source_port_ranges", source_port_ranges)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")

    @property
    @pulumi.getter(name="sourcePortRanges")
    def source_port_ranges(self) -> Sequence['outputs.GetSecurityListsSecurityListIngressSecurityRuleUdpOptionSourcePortRangeResult']:
        return pulumi.get(self, "source_port_ranges")


@pulumi.output_type
class GetSecurityListsSecurityListIngressSecurityRuleUdpOptionSourcePortRangeResult(dict):
    def __init__(__self__, *,
                 max: int,
                 min: int):
        """
        :param int max: The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        :param int min: The minimum port number. Must not be greater than the maximum port number.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum port number. Must not be lower than the minimum port number. To specify a single port number, set both the min and max to the same value.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum port number. Must not be greater than the maximum port number.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetServiceGatewaysFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetServiceGatewaysServiceGatewayResult(dict):
    def __init__(__self__, *,
                 block_traffic: bool,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 route_table_id: str,
                 services: Sequence['outputs.GetServiceGatewaysServiceGatewayServiceResult'],
                 state: str,
                 time_created: str,
                 vcn_id: str):
        """
        :param bool block_traffic: Whether the service gateway blocks all traffic through it. The default is `false`. When this is `true`, traffic is not routed to any services, regardless of route rules.  Example: `true`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the service gateway.
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the service gateway is using. For information about why you would associate a route table with a service gateway, see [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm).
        :param Sequence['GetServiceGatewaysServiceGatewayServiceArgs'] services: List of the [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/) objects enabled for this service gateway. The list can be empty. You can enable a particular `Service` by using [AttachServiceId](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/ServiceGateway/AttachServiceId) or [UpdateServiceGateway](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/ServiceGateway/UpdateServiceGateway).
        :param str state: A filter to return only resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the service gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        pulumi.set(__self__, "block_traffic", block_traffic)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "services", services)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)

    @property
    @pulumi.getter(name="blockTraffic")
    def block_traffic(self) -> bool:
        """
        Whether the service gateway blocks all traffic through it. The default is `false`. When this is `true`, traffic is not routed to any services, regardless of route rules.  Example: `true`
        """
        return pulumi.get(self, "block_traffic")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the service gateway.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table the service gateway is using. For information about why you would associate a route table with a service gateway, see [Transit Routing: Private Access to Oracle Services](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/transitroutingoracleservices.htm).
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def services(self) -> Sequence['outputs.GetServiceGatewaysServiceGatewayServiceResult']:
        """
        List of the [Service](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Service/) objects enabled for this service gateway. The list can be empty. You can enable a particular `Service` by using [AttachServiceId](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/ServiceGateway/AttachServiceId) or [UpdateServiceGateway](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/ServiceGateway/UpdateServiceGateway).
        """
        return pulumi.get(self, "services")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the service gateway was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")


@pulumi.output_type
class GetServiceGatewaysServiceGatewayServiceResult(dict):
    def __init__(__self__, *,
                 service_id: str,
                 service_name: str):
        """
        :param str service_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the service.
        :param str service_name: The name of the service.
        """
        pulumi.set(__self__, "service_id", service_id)
        pulumi.set(__self__, "service_name", service_name)

    @property
    @pulumi.getter(name="serviceId")
    def service_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the service.
        """
        return pulumi.get(self, "service_id")

    @property
    @pulumi.getter(name="serviceName")
    def service_name(self) -> str:
        """
        The name of the service.
        """
        return pulumi.get(self, "service_name")


@pulumi.output_type
class GetServicesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: Name of the `Service` object. This name can change and is not guaranteed to be unique.  Example: `OCI PHX Object Storage`
        """
        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:
        """
        Name of the `Service` object. This name can change and is not guaranteed to be unique.  Example: `OCI PHX Object Storage`
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetServicesServiceResult(dict):
    def __init__(__self__, *,
                 cidr_block: str,
                 description: str,
                 id: str,
                 name: str):
        """
        :param str cidr_block: A string that represents the regional public IP address ranges for the Oracle service or services covered by this `Service` object. Also known as the `Service` object's *service CIDR label*.
        :param str description: Description of the Oracle service or services covered by this `Service` object.  Example: `OCI PHX Object Storage`
        :param str id: The `Service` object's [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm).
        :param str name: Name of the `Service` object. This name can change and is not guaranteed to be unique.  Example: `OCI PHX Object Storage`
        """
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "description", description)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        A string that represents the regional public IP address ranges for the Oracle service or services covered by this `Service` object. Also known as the `Service` object's *service CIDR label*.
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter
    def description(self) -> str:
        """
        Description of the Oracle service or services covered by this `Service` object.  Example: `OCI PHX Object Storage`
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The `Service` object's [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Name of the `Service` object. This name can change and is not guaranteed to be unique.  Example: `OCI PHX Object Storage`
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetShapeFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetShapeShapeResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilizations: Sequence[str],
                 billing_type: str,
                 gpu_description: str,
                 gpus: int,
                 is_billed_for_stopped_instance: bool,
                 is_flexible: bool,
                 is_live_migration_supported: bool,
                 is_subcore: bool,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachment_options: Sequence['outputs.GetShapeShapeMaxVnicAttachmentOptionResult'],
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 memory_options: Sequence['outputs.GetShapeShapeMemoryOptionResult'],
                 min_total_baseline_ocpus_required: float,
                 name: str,
                 network_ports: int,
                 networking_bandwidth_in_gbps: float,
                 networking_bandwidth_options: Sequence['outputs.GetShapeShapeNetworkingBandwidthOptionResult'],
                 ocpu_options: Sequence['outputs.GetShapeShapeOcpuOptionResult'],
                 ocpus: float,
                 platform_config_options: Sequence['outputs.GetShapeShapePlatformConfigOptionResult'],
                 processor_description: str,
                 quota_names: Sequence[str],
                 rdma_bandwidth_in_gbps: int,
                 rdma_ports: int,
                 recommended_alternatives: Sequence['outputs.GetShapeShapeRecommendedAlternativeResult'],
                 resize_compatible_shapes: Sequence[str]):
        pulumi.set(__self__, "baseline_ocpu_utilizations", baseline_ocpu_utilizations)
        pulumi.set(__self__, "billing_type", billing_type)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "is_billed_for_stopped_instance", is_billed_for_stopped_instance)
        pulumi.set(__self__, "is_flexible", is_flexible)
        pulumi.set(__self__, "is_live_migration_supported", is_live_migration_supported)
        pulumi.set(__self__, "is_subcore", is_subcore)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachment_options", max_vnic_attachment_options)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "memory_options", memory_options)
        pulumi.set(__self__, "min_total_baseline_ocpus_required", min_total_baseline_ocpus_required)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "network_ports", network_ports)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "networking_bandwidth_options", networking_bandwidth_options)
        pulumi.set(__self__, "ocpu_options", ocpu_options)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "platform_config_options", platform_config_options)
        pulumi.set(__self__, "processor_description", processor_description)
        pulumi.set(__self__, "quota_names", quota_names)
        pulumi.set(__self__, "rdma_bandwidth_in_gbps", rdma_bandwidth_in_gbps)
        pulumi.set(__self__, "rdma_ports", rdma_ports)
        pulumi.set(__self__, "recommended_alternatives", recommended_alternatives)
        pulumi.set(__self__, "resize_compatible_shapes", resize_compatible_shapes)

    @property
    @pulumi.getter(name="baselineOcpuUtilizations")
    def baseline_ocpu_utilizations(self) -> Sequence[str]:
        return pulumi.get(self, "baseline_ocpu_utilizations")

    @property
    @pulumi.getter(name="billingType")
    def billing_type(self) -> str:
        return pulumi.get(self, "billing_type")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="isBilledForStoppedInstance")
    def is_billed_for_stopped_instance(self) -> bool:
        return pulumi.get(self, "is_billed_for_stopped_instance")

    @property
    @pulumi.getter(name="isFlexible")
    def is_flexible(self) -> bool:
        return pulumi.get(self, "is_flexible")

    @property
    @pulumi.getter(name="isLiveMigrationSupported")
    def is_live_migration_supported(self) -> bool:
        return pulumi.get(self, "is_live_migration_supported")

    @property
    @pulumi.getter(name="isSubcore")
    def is_subcore(self) -> bool:
        return pulumi.get(self, "is_subcore")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachmentOptions")
    def max_vnic_attachment_options(self) -> Sequence['outputs.GetShapeShapeMaxVnicAttachmentOptionResult']:
        return pulumi.get(self, "max_vnic_attachment_options")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="memoryOptions")
    def memory_options(self) -> Sequence['outputs.GetShapeShapeMemoryOptionResult']:
        return pulumi.get(self, "memory_options")

    @property
    @pulumi.getter(name="minTotalBaselineOcpusRequired")
    def min_total_baseline_ocpus_required(self) -> float:
        return pulumi.get(self, "min_total_baseline_ocpus_required")

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="networkPorts")
    def network_ports(self) -> int:
        return pulumi.get(self, "network_ports")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter(name="networkingBandwidthOptions")
    def networking_bandwidth_options(self) -> Sequence['outputs.GetShapeShapeNetworkingBandwidthOptionResult']:
        return pulumi.get(self, "networking_bandwidth_options")

    @property
    @pulumi.getter(name="ocpuOptions")
    def ocpu_options(self) -> Sequence['outputs.GetShapeShapeOcpuOptionResult']:
        return pulumi.get(self, "ocpu_options")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="platformConfigOptions")
    def platform_config_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionResult']:
        return pulumi.get(self, "platform_config_options")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        return pulumi.get(self, "processor_description")

    @property
    @pulumi.getter(name="quotaNames")
    def quota_names(self) -> Sequence[str]:
        return pulumi.get(self, "quota_names")

    @property
    @pulumi.getter(name="rdmaBandwidthInGbps")
    def rdma_bandwidth_in_gbps(self) -> int:
        return pulumi.get(self, "rdma_bandwidth_in_gbps")

    @property
    @pulumi.getter(name="rdmaPorts")
    def rdma_ports(self) -> int:
        return pulumi.get(self, "rdma_ports")

    @property
    @pulumi.getter(name="recommendedAlternatives")
    def recommended_alternatives(self) -> Sequence['outputs.GetShapeShapeRecommendedAlternativeResult']:
        return pulumi.get(self, "recommended_alternatives")

    @property
    @pulumi.getter(name="resizeCompatibleShapes")
    def resize_compatible_shapes(self) -> Sequence[str]:
        return pulumi.get(self, "resize_compatible_shapes")


@pulumi.output_type
class GetShapeShapeMaxVnicAttachmentOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu: float,
                 max: float,
                 min: int):
        pulumi.set(__self__, "default_per_ocpu", default_per_ocpu)
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter(name="defaultPerOcpu")
    def default_per_ocpu(self) -> float:
        return pulumi.get(self, "default_per_ocpu")

    @property
    @pulumi.getter
    def max(self) -> float:
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapeShapeMemoryOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu_in_gbs: float,
                 max_in_gbs: float,
                 max_per_numa_node_in_gbs: float,
                 max_per_ocpu_in_gbs: float,
                 min_in_gbs: float,
                 min_per_ocpu_in_gbs: float):
        pulumi.set(__self__, "default_per_ocpu_in_gbs", default_per_ocpu_in_gbs)
        pulumi.set(__self__, "max_in_gbs", max_in_gbs)
        pulumi.set(__self__, "max_per_numa_node_in_gbs", max_per_numa_node_in_gbs)
        pulumi.set(__self__, "max_per_ocpu_in_gbs", max_per_ocpu_in_gbs)
        pulumi.set(__self__, "min_in_gbs", min_in_gbs)
        pulumi.set(__self__, "min_per_ocpu_in_gbs", min_per_ocpu_in_gbs)

    @property
    @pulumi.getter(name="defaultPerOcpuInGbs")
    def default_per_ocpu_in_gbs(self) -> float:
        return pulumi.get(self, "default_per_ocpu_in_gbs")

    @property
    @pulumi.getter(name="maxInGbs")
    def max_in_gbs(self) -> float:
        return pulumi.get(self, "max_in_gbs")

    @property
    @pulumi.getter(name="maxPerNumaNodeInGbs")
    def max_per_numa_node_in_gbs(self) -> float:
        return pulumi.get(self, "max_per_numa_node_in_gbs")

    @property
    @pulumi.getter(name="maxPerOcpuInGbs")
    def max_per_ocpu_in_gbs(self) -> float:
        return pulumi.get(self, "max_per_ocpu_in_gbs")

    @property
    @pulumi.getter(name="minInGbs")
    def min_in_gbs(self) -> float:
        return pulumi.get(self, "min_in_gbs")

    @property
    @pulumi.getter(name="minPerOcpuInGbs")
    def min_per_ocpu_in_gbs(self) -> float:
        return pulumi.get(self, "min_per_ocpu_in_gbs")


@pulumi.output_type
class GetShapeShapeNetworkingBandwidthOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu_in_gbps: float,
                 max_in_gbps: float,
                 min_in_gbps: float):
        pulumi.set(__self__, "default_per_ocpu_in_gbps", default_per_ocpu_in_gbps)
        pulumi.set(__self__, "max_in_gbps", max_in_gbps)
        pulumi.set(__self__, "min_in_gbps", min_in_gbps)

    @property
    @pulumi.getter(name="defaultPerOcpuInGbps")
    def default_per_ocpu_in_gbps(self) -> float:
        return pulumi.get(self, "default_per_ocpu_in_gbps")

    @property
    @pulumi.getter(name="maxInGbps")
    def max_in_gbps(self) -> float:
        return pulumi.get(self, "max_in_gbps")

    @property
    @pulumi.getter(name="minInGbps")
    def min_in_gbps(self) -> float:
        return pulumi.get(self, "min_in_gbps")


@pulumi.output_type
class GetShapeShapeOcpuOptionResult(dict):
    def __init__(__self__, *,
                 max: float,
                 max_per_numa_node: float,
                 min: float):
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "max_per_numa_node", max_per_numa_node)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> float:
        return pulumi.get(self, "max")

    @property
    @pulumi.getter(name="maxPerNumaNode")
    def max_per_numa_node(self) -> float:
        return pulumi.get(self, "max_per_numa_node")

    @property
    @pulumi.getter
    def min(self) -> float:
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionResult(dict):
    def __init__(__self__, *,
                 access_control_service_options: Sequence['outputs.GetShapeShapePlatformConfigOptionAccessControlServiceOptionResult'],
                 input_output_memory_management_unit_options: Sequence['outputs.GetShapeShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult'],
                 measured_boot_options: Sequence['outputs.GetShapeShapePlatformConfigOptionMeasuredBootOptionResult'],
                 memory_encryption_options: Sequence['outputs.GetShapeShapePlatformConfigOptionMemoryEncryptionOptionResult'],
                 numa_nodes_per_socket_platform_options: Sequence['outputs.GetShapeShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult'],
                 percentage_of_cores_enabled_options: Sequence['outputs.GetShapeShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult'],
                 secure_boot_options: Sequence['outputs.GetShapeShapePlatformConfigOptionSecureBootOptionResult'],
                 symmetric_multi_threading_options: Sequence['outputs.GetShapeShapePlatformConfigOptionSymmetricMultiThreadingOptionResult'],
                 trusted_platform_module_options: Sequence['outputs.GetShapeShapePlatformConfigOptionTrustedPlatformModuleOptionResult'],
                 type: str,
                 virtual_instructions_options: Sequence['outputs.GetShapeShapePlatformConfigOptionVirtualInstructionsOptionResult']):
        pulumi.set(__self__, "access_control_service_options", access_control_service_options)
        pulumi.set(__self__, "input_output_memory_management_unit_options", input_output_memory_management_unit_options)
        pulumi.set(__self__, "measured_boot_options", measured_boot_options)
        pulumi.set(__self__, "memory_encryption_options", memory_encryption_options)
        pulumi.set(__self__, "numa_nodes_per_socket_platform_options", numa_nodes_per_socket_platform_options)
        pulumi.set(__self__, "percentage_of_cores_enabled_options", percentage_of_cores_enabled_options)
        pulumi.set(__self__, "secure_boot_options", secure_boot_options)
        pulumi.set(__self__, "symmetric_multi_threading_options", symmetric_multi_threading_options)
        pulumi.set(__self__, "trusted_platform_module_options", trusted_platform_module_options)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "virtual_instructions_options", virtual_instructions_options)

    @property
    @pulumi.getter(name="accessControlServiceOptions")
    def access_control_service_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionAccessControlServiceOptionResult']:
        return pulumi.get(self, "access_control_service_options")

    @property
    @pulumi.getter(name="inputOutputMemoryManagementUnitOptions")
    def input_output_memory_management_unit_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult']:
        return pulumi.get(self, "input_output_memory_management_unit_options")

    @property
    @pulumi.getter(name="measuredBootOptions")
    def measured_boot_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionMeasuredBootOptionResult']:
        return pulumi.get(self, "measured_boot_options")

    @property
    @pulumi.getter(name="memoryEncryptionOptions")
    def memory_encryption_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionMemoryEncryptionOptionResult']:
        return pulumi.get(self, "memory_encryption_options")

    @property
    @pulumi.getter(name="numaNodesPerSocketPlatformOptions")
    def numa_nodes_per_socket_platform_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult']:
        return pulumi.get(self, "numa_nodes_per_socket_platform_options")

    @property
    @pulumi.getter(name="percentageOfCoresEnabledOptions")
    def percentage_of_cores_enabled_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult']:
        return pulumi.get(self, "percentage_of_cores_enabled_options")

    @property
    @pulumi.getter(name="secureBootOptions")
    def secure_boot_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionSecureBootOptionResult']:
        return pulumi.get(self, "secure_boot_options")

    @property
    @pulumi.getter(name="symmetricMultiThreadingOptions")
    def symmetric_multi_threading_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionSymmetricMultiThreadingOptionResult']:
        return pulumi.get(self, "symmetric_multi_threading_options")

    @property
    @pulumi.getter(name="trustedPlatformModuleOptions")
    def trusted_platform_module_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionTrustedPlatformModuleOptionResult']:
        return pulumi.get(self, "trusted_platform_module_options")

    @property
    @pulumi.getter
    def type(self) -> str:
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="virtualInstructionsOptions")
    def virtual_instructions_options(self) -> Sequence['outputs.GetShapeShapePlatformConfigOptionVirtualInstructionsOptionResult']:
        return pulumi.get(self, "virtual_instructions_options")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionAccessControlServiceOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionMeasuredBootOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionMemoryEncryptionOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[str],
                 default_value: str):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "default_value", default_value)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[str]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="defaultValue")
    def default_value(self) -> str:
        return pulumi.get(self, "default_value")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult(dict):
    def __init__(__self__, *,
                 default_value: int,
                 max: int,
                 min: int):
        pulumi.set(__self__, "default_value", default_value)
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter(name="defaultValue")
    def default_value(self) -> int:
        return pulumi.get(self, "default_value")

    @property
    @pulumi.getter
    def max(self) -> int:
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionSecureBootOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionSymmetricMultiThreadingOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionTrustedPlatformModuleOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapePlatformConfigOptionVirtualInstructionsOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapeShapeRecommendedAlternativeResult(dict):
    def __init__(__self__, *,
                 shape_name: str):
        pulumi.set(__self__, "shape_name", shape_name)

    @property
    @pulumi.getter(name="shapeName")
    def shape_name(self) -> str:
        return pulumi.get(self, "shape_name")


@pulumi.output_type
class GetShapesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The name of the shape. You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        """
        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 name of the shape. 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, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetShapesShapeResult(dict):
    def __init__(__self__, *,
                 baseline_ocpu_utilizations: Sequence[str],
                 billing_type: str,
                 gpu_description: str,
                 gpus: int,
                 is_billed_for_stopped_instance: bool,
                 is_flexible: bool,
                 is_live_migration_supported: bool,
                 is_subcore: bool,
                 local_disk_description: str,
                 local_disks: int,
                 local_disks_total_size_in_gbs: float,
                 max_vnic_attachment_options: Sequence['outputs.GetShapesShapeMaxVnicAttachmentOptionResult'],
                 max_vnic_attachments: int,
                 memory_in_gbs: float,
                 memory_options: Sequence['outputs.GetShapesShapeMemoryOptionResult'],
                 min_total_baseline_ocpus_required: float,
                 name: str,
                 network_ports: int,
                 networking_bandwidth_in_gbps: float,
                 networking_bandwidth_options: Sequence['outputs.GetShapesShapeNetworkingBandwidthOptionResult'],
                 ocpu_options: Sequence['outputs.GetShapesShapeOcpuOptionResult'],
                 ocpus: float,
                 platform_config_options: Sequence['outputs.GetShapesShapePlatformConfigOptionResult'],
                 processor_description: str,
                 quota_names: Sequence[str],
                 rdma_bandwidth_in_gbps: int,
                 rdma_ports: int,
                 recommended_alternatives: Sequence['outputs.GetShapesShapeRecommendedAlternativeResult'],
                 resize_compatible_shapes: Sequence[str]):
        """
        :param Sequence[str] baseline_ocpu_utilizations: For a subcore burstable VM, the supported baseline OCPU utilization for instances that use this shape.
        :param str billing_type: How instances that use this shape are charged.
        :param str gpu_description: A short description of the graphics processing unit (GPU) available for this shape.
        :param int gpus: The number of GPUs available for this shape.
        :param bool is_billed_for_stopped_instance: Whether billing continues when the instances that use this shape are in the stopped state.
        :param bool is_flexible: Whether the shape supports creating flexible instances. A [flexible shape](https://docs.cloud.oracle.com/iaas/Content/Compute/References/computeshapes.htm#flexible) is a shape that lets you customize the number of OCPUs and the amount of memory when launching or resizing your instance.
        :param bool is_live_migration_supported: Whether Live Migration is currently supported for this shape.
        :param bool is_subcore: Whether the shape supports creating subcore or burstable instances. A [burstable instance](https://docs.cloud.oracle.com/iaas/Content/Compute/References/burstable-instances.htm) is a virtual machine (VM) instance that provides a baseline level of CPU performance with the ability to burst to a higher level to support occasional spikes in usage.
        :param str local_disk_description: A short description of the local disks available for this shape.
        :param int local_disks: The number of local disks available for this shape.
        :param float local_disks_total_size_in_gbs: The aggregate size of the local disks available for this shape, in gigabytes.
        :param Sequence['GetShapesShapeMaxVnicAttachmentOptionArgs'] max_vnic_attachment_options: For a flexible shape, the number of VNIC attachments that are available for instances that use this shape.
        :param int max_vnic_attachments: The maximum number of VNIC attachments available for this shape.
        :param float memory_in_gbs: The default amount of memory available for this shape, in gigabytes.
        :param Sequence['GetShapesShapeMemoryOptionArgs'] memory_options: For a flexible shape, the amount of memory available for instances that use this shape.
        :param float min_total_baseline_ocpus_required: For a subcore burstable VM, the minimum total baseline OCPUs required. The total baseline OCPUs is equal to baselineOcpuUtilization chosen multiplied by the number of OCPUs chosen.
        :param str name: The name of the shape. You can enumerate all available shapes by calling [ListShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Shape/ListShapes).
        :param int network_ports: The number of physical network interface card (NIC) ports available for this shape.
        :param float networking_bandwidth_in_gbps: The networking bandwidth available for this shape, in gigabits per second.
        :param Sequence['GetShapesShapeNetworkingBandwidthOptionArgs'] networking_bandwidth_options: For a flexible shape, the amount of networking bandwidth available for instances that use this shape.
        :param Sequence['GetShapesShapeOcpuOptionArgs'] ocpu_options: For a flexible shape, the number of OCPUs available for instances that use this shape.
        :param float ocpus: The default number of OCPUs available for this shape.
        :param Sequence['GetShapesShapePlatformConfigOptionArgs'] platform_config_options: The list of supported platform configuration options for this shape.
        :param str processor_description: A short description of the shape's processor (CPU).
        :param Sequence[str] quota_names: The list of of compartment quotas for the shape.
        :param int rdma_bandwidth_in_gbps: The networking bandwidth available for the remote direct memory access (RDMA) network for this shape, in gigabits per second.
        :param int rdma_ports: The number of networking ports available for the remote direct memory access (RDMA) network between nodes in a high performance computing (HPC) cluster network. If the shape does not support cluster networks, this value is `0`.
        :param Sequence['GetShapesShapeRecommendedAlternativeArgs'] recommended_alternatives: The list of shapes and shape details (if applicable) that Oracle recommends that you use as an alternative to the current shape.
        :param Sequence[str] resize_compatible_shapes: The list of compatible shapes that this shape can be changed to. For more information, see [Changing the Shape of an Instance](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/resizinginstances.htm).
        """
        pulumi.set(__self__, "baseline_ocpu_utilizations", baseline_ocpu_utilizations)
        pulumi.set(__self__, "billing_type", billing_type)
        pulumi.set(__self__, "gpu_description", gpu_description)
        pulumi.set(__self__, "gpus", gpus)
        pulumi.set(__self__, "is_billed_for_stopped_instance", is_billed_for_stopped_instance)
        pulumi.set(__self__, "is_flexible", is_flexible)
        pulumi.set(__self__, "is_live_migration_supported", is_live_migration_supported)
        pulumi.set(__self__, "is_subcore", is_subcore)
        pulumi.set(__self__, "local_disk_description", local_disk_description)
        pulumi.set(__self__, "local_disks", local_disks)
        pulumi.set(__self__, "local_disks_total_size_in_gbs", local_disks_total_size_in_gbs)
        pulumi.set(__self__, "max_vnic_attachment_options", max_vnic_attachment_options)
        pulumi.set(__self__, "max_vnic_attachments", max_vnic_attachments)
        pulumi.set(__self__, "memory_in_gbs", memory_in_gbs)
        pulumi.set(__self__, "memory_options", memory_options)
        pulumi.set(__self__, "min_total_baseline_ocpus_required", min_total_baseline_ocpus_required)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "network_ports", network_ports)
        pulumi.set(__self__, "networking_bandwidth_in_gbps", networking_bandwidth_in_gbps)
        pulumi.set(__self__, "networking_bandwidth_options", networking_bandwidth_options)
        pulumi.set(__self__, "ocpu_options", ocpu_options)
        pulumi.set(__self__, "ocpus", ocpus)
        pulumi.set(__self__, "platform_config_options", platform_config_options)
        pulumi.set(__self__, "processor_description", processor_description)
        pulumi.set(__self__, "quota_names", quota_names)
        pulumi.set(__self__, "rdma_bandwidth_in_gbps", rdma_bandwidth_in_gbps)
        pulumi.set(__self__, "rdma_ports", rdma_ports)
        pulumi.set(__self__, "recommended_alternatives", recommended_alternatives)
        pulumi.set(__self__, "resize_compatible_shapes", resize_compatible_shapes)

    @property
    @pulumi.getter(name="baselineOcpuUtilizations")
    def baseline_ocpu_utilizations(self) -> Sequence[str]:
        """
        For a subcore burstable VM, the supported baseline OCPU utilization for instances that use this shape.
        """
        return pulumi.get(self, "baseline_ocpu_utilizations")

    @property
    @pulumi.getter(name="billingType")
    def billing_type(self) -> str:
        """
        How instances that use this shape are charged.
        """
        return pulumi.get(self, "billing_type")

    @property
    @pulumi.getter(name="gpuDescription")
    def gpu_description(self) -> str:
        """
        A short description of the graphics processing unit (GPU) available for this shape.
        """
        return pulumi.get(self, "gpu_description")

    @property
    @pulumi.getter
    def gpus(self) -> int:
        """
        The number of GPUs available for this shape.
        """
        return pulumi.get(self, "gpus")

    @property
    @pulumi.getter(name="isBilledForStoppedInstance")
    def is_billed_for_stopped_instance(self) -> bool:
        """
        Whether billing continues when the instances that use this shape are in the stopped state.
        """
        return pulumi.get(self, "is_billed_for_stopped_instance")

    @property
    @pulumi.getter(name="isFlexible")
    def is_flexible(self) -> bool:
        """
        Whether the shape supports creating flexible instances. A [flexible shape](https://docs.cloud.oracle.com/iaas/Content/Compute/References/computeshapes.htm#flexible) is a shape that lets you customize the number of OCPUs and the amount of memory when launching or resizing your instance.
        """
        return pulumi.get(self, "is_flexible")

    @property
    @pulumi.getter(name="isLiveMigrationSupported")
    def is_live_migration_supported(self) -> bool:
        """
        Whether Live Migration is currently supported for this shape.
        """
        return pulumi.get(self, "is_live_migration_supported")

    @property
    @pulumi.getter(name="isSubcore")
    def is_subcore(self) -> bool:
        """
        Whether the shape supports creating subcore or burstable instances. A [burstable instance](https://docs.cloud.oracle.com/iaas/Content/Compute/References/burstable-instances.htm) is a virtual machine (VM) instance that provides a baseline level of CPU performance with the ability to burst to a higher level to support occasional spikes in usage.
        """
        return pulumi.get(self, "is_subcore")

    @property
    @pulumi.getter(name="localDiskDescription")
    def local_disk_description(self) -> str:
        """
        A short description of the local disks available for this shape.
        """
        return pulumi.get(self, "local_disk_description")

    @property
    @pulumi.getter(name="localDisks")
    def local_disks(self) -> int:
        """
        The number of local disks available for this shape.
        """
        return pulumi.get(self, "local_disks")

    @property
    @pulumi.getter(name="localDisksTotalSizeInGbs")
    def local_disks_total_size_in_gbs(self) -> float:
        """
        The aggregate size of the local disks available for this shape, in gigabytes.
        """
        return pulumi.get(self, "local_disks_total_size_in_gbs")

    @property
    @pulumi.getter(name="maxVnicAttachmentOptions")
    def max_vnic_attachment_options(self) -> Sequence['outputs.GetShapesShapeMaxVnicAttachmentOptionResult']:
        """
        For a flexible shape, the number of VNIC attachments that are available for instances that use this shape.
        """
        return pulumi.get(self, "max_vnic_attachment_options")

    @property
    @pulumi.getter(name="maxVnicAttachments")
    def max_vnic_attachments(self) -> int:
        """
        The maximum number of VNIC attachments available for this shape.
        """
        return pulumi.get(self, "max_vnic_attachments")

    @property
    @pulumi.getter(name="memoryInGbs")
    def memory_in_gbs(self) -> float:
        """
        The default amount of memory available for this shape, in gigabytes.
        """
        return pulumi.get(self, "memory_in_gbs")

    @property
    @pulumi.getter(name="memoryOptions")
    def memory_options(self) -> Sequence['outputs.GetShapesShapeMemoryOptionResult']:
        """
        For a flexible shape, the amount of memory available for instances that use this shape.
        """
        return pulumi.get(self, "memory_options")

    @property
    @pulumi.getter(name="minTotalBaselineOcpusRequired")
    def min_total_baseline_ocpus_required(self) -> float:
        """
        For a subcore burstable VM, the minimum total baseline OCPUs required. The total baseline OCPUs is equal to baselineOcpuUtilization chosen multiplied by the number of OCPUs chosen.
        """
        return pulumi.get(self, "min_total_baseline_ocpus_required")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the shape. 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, "name")

    @property
    @pulumi.getter(name="networkPorts")
    def network_ports(self) -> int:
        """
        The number of physical network interface card (NIC) ports available for this shape.
        """
        return pulumi.get(self, "network_ports")

    @property
    @pulumi.getter(name="networkingBandwidthInGbps")
    def networking_bandwidth_in_gbps(self) -> float:
        """
        The networking bandwidth available for this shape, in gigabits per second.
        """
        return pulumi.get(self, "networking_bandwidth_in_gbps")

    @property
    @pulumi.getter(name="networkingBandwidthOptions")
    def networking_bandwidth_options(self) -> Sequence['outputs.GetShapesShapeNetworkingBandwidthOptionResult']:
        """
        For a flexible shape, the amount of networking bandwidth available for instances that use this shape.
        """
        return pulumi.get(self, "networking_bandwidth_options")

    @property
    @pulumi.getter(name="ocpuOptions")
    def ocpu_options(self) -> Sequence['outputs.GetShapesShapeOcpuOptionResult']:
        """
        For a flexible shape, the number of OCPUs available for instances that use this shape.
        """
        return pulumi.get(self, "ocpu_options")

    @property
    @pulumi.getter
    def ocpus(self) -> float:
        """
        The default number of OCPUs available for this shape.
        """
        return pulumi.get(self, "ocpus")

    @property
    @pulumi.getter(name="platformConfigOptions")
    def platform_config_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionResult']:
        """
        The list of supported platform configuration options for this shape.
        """
        return pulumi.get(self, "platform_config_options")

    @property
    @pulumi.getter(name="processorDescription")
    def processor_description(self) -> str:
        """
        A short description of the shape's processor (CPU).
        """
        return pulumi.get(self, "processor_description")

    @property
    @pulumi.getter(name="quotaNames")
    def quota_names(self) -> Sequence[str]:
        """
        The list of of compartment quotas for the shape.
        """
        return pulumi.get(self, "quota_names")

    @property
    @pulumi.getter(name="rdmaBandwidthInGbps")
    def rdma_bandwidth_in_gbps(self) -> int:
        """
        The networking bandwidth available for the remote direct memory access (RDMA) network for this shape, in gigabits per second.
        """
        return pulumi.get(self, "rdma_bandwidth_in_gbps")

    @property
    @pulumi.getter(name="rdmaPorts")
    def rdma_ports(self) -> int:
        """
        The number of networking ports available for the remote direct memory access (RDMA) network between nodes in a high performance computing (HPC) cluster network. If the shape does not support cluster networks, this value is `0`.
        """
        return pulumi.get(self, "rdma_ports")

    @property
    @pulumi.getter(name="recommendedAlternatives")
    def recommended_alternatives(self) -> Sequence['outputs.GetShapesShapeRecommendedAlternativeResult']:
        """
        The list of shapes and shape details (if applicable) that Oracle recommends that you use as an alternative to the current shape.
        """
        return pulumi.get(self, "recommended_alternatives")

    @property
    @pulumi.getter(name="resizeCompatibleShapes")
    def resize_compatible_shapes(self) -> Sequence[str]:
        """
        The list of compatible shapes that this shape can be changed to. For more information, see [Changing the Shape of an Instance](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/resizinginstances.htm).
        """
        return pulumi.get(self, "resize_compatible_shapes")


@pulumi.output_type
class GetShapesShapeMaxVnicAttachmentOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu: float,
                 max: float,
                 min: int):
        """
        :param float default_per_ocpu: The default number of VNIC attachments allowed per OCPU.
        :param float max: The maximum allowed percentage of cores enabled.
        :param int min: The minimum allowed percentage of cores enabled.
        """
        pulumi.set(__self__, "default_per_ocpu", default_per_ocpu)
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter(name="defaultPerOcpu")
    def default_per_ocpu(self) -> float:
        """
        The default number of VNIC attachments allowed per OCPU.
        """
        return pulumi.get(self, "default_per_ocpu")

    @property
    @pulumi.getter
    def max(self) -> float:
        """
        The maximum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapesShapeMemoryOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu_in_gbs: float,
                 max_in_gbs: float,
                 max_per_numa_node_in_gbs: float,
                 max_per_ocpu_in_gbs: float,
                 min_in_gbs: float,
                 min_per_ocpu_in_gbs: float):
        """
        :param float default_per_ocpu_in_gbs: The default amount of memory per OCPU available for this shape, in gigabytes.
        :param float max_in_gbs: The maximum amount of memory, in gigabytes.
        :param float max_per_numa_node_in_gbs: The maximum amount of memory per NUMA node, in gigabytes.
        :param float max_per_ocpu_in_gbs: The maximum amount of memory per OCPU available for this shape, in gigabytes.
        :param float min_in_gbs: The minimum amount of memory, in gigabytes.
        :param float min_per_ocpu_in_gbs: The minimum amount of memory per OCPU available for this shape, in gigabytes.
        """
        pulumi.set(__self__, "default_per_ocpu_in_gbs", default_per_ocpu_in_gbs)
        pulumi.set(__self__, "max_in_gbs", max_in_gbs)
        pulumi.set(__self__, "max_per_numa_node_in_gbs", max_per_numa_node_in_gbs)
        pulumi.set(__self__, "max_per_ocpu_in_gbs", max_per_ocpu_in_gbs)
        pulumi.set(__self__, "min_in_gbs", min_in_gbs)
        pulumi.set(__self__, "min_per_ocpu_in_gbs", min_per_ocpu_in_gbs)

    @property
    @pulumi.getter(name="defaultPerOcpuInGbs")
    def default_per_ocpu_in_gbs(self) -> float:
        """
        The default amount of memory per OCPU available for this shape, in gigabytes.
        """
        return pulumi.get(self, "default_per_ocpu_in_gbs")

    @property
    @pulumi.getter(name="maxInGbs")
    def max_in_gbs(self) -> float:
        """
        The maximum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "max_in_gbs")

    @property
    @pulumi.getter(name="maxPerNumaNodeInGbs")
    def max_per_numa_node_in_gbs(self) -> float:
        """
        The maximum amount of memory per NUMA node, in gigabytes.
        """
        return pulumi.get(self, "max_per_numa_node_in_gbs")

    @property
    @pulumi.getter(name="maxPerOcpuInGbs")
    def max_per_ocpu_in_gbs(self) -> float:
        """
        The maximum amount of memory per OCPU available for this shape, in gigabytes.
        """
        return pulumi.get(self, "max_per_ocpu_in_gbs")

    @property
    @pulumi.getter(name="minInGbs")
    def min_in_gbs(self) -> float:
        """
        The minimum amount of memory, in gigabytes.
        """
        return pulumi.get(self, "min_in_gbs")

    @property
    @pulumi.getter(name="minPerOcpuInGbs")
    def min_per_ocpu_in_gbs(self) -> float:
        """
        The minimum amount of memory per OCPU available for this shape, in gigabytes.
        """
        return pulumi.get(self, "min_per_ocpu_in_gbs")


@pulumi.output_type
class GetShapesShapeNetworkingBandwidthOptionResult(dict):
    def __init__(__self__, *,
                 default_per_ocpu_in_gbps: float,
                 max_in_gbps: float,
                 min_in_gbps: float):
        """
        :param float default_per_ocpu_in_gbps: The default amount of networking bandwidth per OCPU, in gigabits per second.
        :param float max_in_gbps: The maximum amount of networking bandwidth, in gigabits per second.
        :param float min_in_gbps: The minimum amount of networking bandwidth, in gigabits per second.
        """
        pulumi.set(__self__, "default_per_ocpu_in_gbps", default_per_ocpu_in_gbps)
        pulumi.set(__self__, "max_in_gbps", max_in_gbps)
        pulumi.set(__self__, "min_in_gbps", min_in_gbps)

    @property
    @pulumi.getter(name="defaultPerOcpuInGbps")
    def default_per_ocpu_in_gbps(self) -> float:
        """
        The default amount of networking bandwidth per OCPU, in gigabits per second.
        """
        return pulumi.get(self, "default_per_ocpu_in_gbps")

    @property
    @pulumi.getter(name="maxInGbps")
    def max_in_gbps(self) -> float:
        """
        The maximum amount of networking bandwidth, in gigabits per second.
        """
        return pulumi.get(self, "max_in_gbps")

    @property
    @pulumi.getter(name="minInGbps")
    def min_in_gbps(self) -> float:
        """
        The minimum amount of networking bandwidth, in gigabits per second.
        """
        return pulumi.get(self, "min_in_gbps")


@pulumi.output_type
class GetShapesShapeOcpuOptionResult(dict):
    def __init__(__self__, *,
                 max: float,
                 max_per_numa_node: float,
                 min: float):
        """
        :param float max: The maximum allowed percentage of cores enabled.
        :param float max_per_numa_node: The maximum number of cores available per NUMA node.
        :param float min: The minimum allowed percentage of cores enabled.
        """
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "max_per_numa_node", max_per_numa_node)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter
    def max(self) -> float:
        """
        The maximum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter(name="maxPerNumaNode")
    def max_per_numa_node(self) -> float:
        """
        The maximum number of cores available per NUMA node.
        """
        return pulumi.get(self, "max_per_numa_node")

    @property
    @pulumi.getter
    def min(self) -> float:
        """
        The minimum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionResult(dict):
    def __init__(__self__, *,
                 access_control_service_options: Sequence['outputs.GetShapesShapePlatformConfigOptionAccessControlServiceOptionResult'],
                 input_output_memory_management_unit_options: Sequence['outputs.GetShapesShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult'],
                 measured_boot_options: Sequence['outputs.GetShapesShapePlatformConfigOptionMeasuredBootOptionResult'],
                 memory_encryption_options: Sequence['outputs.GetShapesShapePlatformConfigOptionMemoryEncryptionOptionResult'],
                 numa_nodes_per_socket_platform_options: Sequence['outputs.GetShapesShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult'],
                 percentage_of_cores_enabled_options: Sequence['outputs.GetShapesShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult'],
                 secure_boot_options: Sequence['outputs.GetShapesShapePlatformConfigOptionSecureBootOptionResult'],
                 symmetric_multi_threading_options: Sequence['outputs.GetShapesShapePlatformConfigOptionSymmetricMultiThreadingOptionResult'],
                 trusted_platform_module_options: Sequence['outputs.GetShapesShapePlatformConfigOptionTrustedPlatformModuleOptionResult'],
                 type: str,
                 virtual_instructions_options: Sequence['outputs.GetShapesShapePlatformConfigOptionVirtualInstructionsOptionResult']):
        """
        :param Sequence['GetShapesShapePlatformConfigOptionAccessControlServiceOptionArgs'] access_control_service_options: Configuration options for the Access Control Service.
        :param Sequence['GetShapesShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionArgs'] input_output_memory_management_unit_options: Configuration options for the input-output memory management unit.
        :param Sequence['GetShapesShapePlatformConfigOptionMeasuredBootOptionArgs'] measured_boot_options: Configuration options for the Measured Boot feature.
        :param Sequence['GetShapesShapePlatformConfigOptionMemoryEncryptionOptionArgs'] memory_encryption_options: Configuration options for memory encryption.
        :param Sequence['GetShapesShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionArgs'] numa_nodes_per_socket_platform_options: Configuration options for NUMA nodes per socket.
        :param Sequence['GetShapesShapePlatformConfigOptionPercentageOfCoresEnabledOptionArgs'] percentage_of_cores_enabled_options: Configuration options for the percentage of cores enabled.
        :param Sequence['GetShapesShapePlatformConfigOptionSecureBootOptionArgs'] secure_boot_options: Configuration options for Secure Boot.
        :param Sequence['GetShapesShapePlatformConfigOptionSymmetricMultiThreadingOptionArgs'] symmetric_multi_threading_options: Configuration options for symmetric multi-threading.
        :param Sequence['GetShapesShapePlatformConfigOptionTrustedPlatformModuleOptionArgs'] trusted_platform_module_options: Configuration options for the Trusted Platform Module (TPM).
        :param str type: The type of platform being configured. (Supported types=[INTEL_VM, AMD_MILAN_BM, AMD_ROME_BM, AMD_ROME_BM_GPU, INTEL_ICELAKE_BM, INTEL_SKYLAKE_BM])
        :param Sequence['GetShapesShapePlatformConfigOptionVirtualInstructionsOptionArgs'] virtual_instructions_options: Configuration options for the virtualization instructions.
        """
        pulumi.set(__self__, "access_control_service_options", access_control_service_options)
        pulumi.set(__self__, "input_output_memory_management_unit_options", input_output_memory_management_unit_options)
        pulumi.set(__self__, "measured_boot_options", measured_boot_options)
        pulumi.set(__self__, "memory_encryption_options", memory_encryption_options)
        pulumi.set(__self__, "numa_nodes_per_socket_platform_options", numa_nodes_per_socket_platform_options)
        pulumi.set(__self__, "percentage_of_cores_enabled_options", percentage_of_cores_enabled_options)
        pulumi.set(__self__, "secure_boot_options", secure_boot_options)
        pulumi.set(__self__, "symmetric_multi_threading_options", symmetric_multi_threading_options)
        pulumi.set(__self__, "trusted_platform_module_options", trusted_platform_module_options)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "virtual_instructions_options", virtual_instructions_options)

    @property
    @pulumi.getter(name="accessControlServiceOptions")
    def access_control_service_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionAccessControlServiceOptionResult']:
        """
        Configuration options for the Access Control Service.
        """
        return pulumi.get(self, "access_control_service_options")

    @property
    @pulumi.getter(name="inputOutputMemoryManagementUnitOptions")
    def input_output_memory_management_unit_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult']:
        """
        Configuration options for the input-output memory management unit.
        """
        return pulumi.get(self, "input_output_memory_management_unit_options")

    @property
    @pulumi.getter(name="measuredBootOptions")
    def measured_boot_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionMeasuredBootOptionResult']:
        """
        Configuration options for the Measured Boot feature.
        """
        return pulumi.get(self, "measured_boot_options")

    @property
    @pulumi.getter(name="memoryEncryptionOptions")
    def memory_encryption_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionMemoryEncryptionOptionResult']:
        """
        Configuration options for memory encryption.
        """
        return pulumi.get(self, "memory_encryption_options")

    @property
    @pulumi.getter(name="numaNodesPerSocketPlatformOptions")
    def numa_nodes_per_socket_platform_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult']:
        """
        Configuration options for NUMA nodes per socket.
        """
        return pulumi.get(self, "numa_nodes_per_socket_platform_options")

    @property
    @pulumi.getter(name="percentageOfCoresEnabledOptions")
    def percentage_of_cores_enabled_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult']:
        """
        Configuration options for the percentage of cores enabled.
        """
        return pulumi.get(self, "percentage_of_cores_enabled_options")

    @property
    @pulumi.getter(name="secureBootOptions")
    def secure_boot_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionSecureBootOptionResult']:
        """
        Configuration options for Secure Boot.
        """
        return pulumi.get(self, "secure_boot_options")

    @property
    @pulumi.getter(name="symmetricMultiThreadingOptions")
    def symmetric_multi_threading_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionSymmetricMultiThreadingOptionResult']:
        """
        Configuration options for symmetric multi-threading.
        """
        return pulumi.get(self, "symmetric_multi_threading_options")

    @property
    @pulumi.getter(name="trustedPlatformModuleOptions")
    def trusted_platform_module_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionTrustedPlatformModuleOptionResult']:
        """
        Configuration options for the Trusted Platform Module (TPM).
        """
        return pulumi.get(self, "trusted_platform_module_options")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of platform being configured. (Supported types=[INTEL_VM, AMD_MILAN_BM, AMD_ROME_BM, AMD_ROME_BM_GPU, INTEL_ICELAKE_BM, INTEL_SKYLAKE_BM])
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="virtualInstructionsOptions")
    def virtual_instructions_options(self) -> Sequence['outputs.GetShapesShapePlatformConfigOptionVirtualInstructionsOptionResult']:
        """
        Configuration options for the virtualization instructions.
        """
        return pulumi.get(self, "virtual_instructions_options")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionAccessControlServiceOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionInputOutputMemoryManagementUnitOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionMeasuredBootOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionMemoryEncryptionOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionNumaNodesPerSocketPlatformOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[str],
                 default_value: str):
        """
        :param Sequence[str] allowed_values: Whether virtualization instructions can be enabled.
        :param str default_value: The default percentage of cores enabled.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "default_value", default_value)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[str]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="defaultValue")
    def default_value(self) -> str:
        """
        The default percentage of cores enabled.
        """
        return pulumi.get(self, "default_value")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionPercentageOfCoresEnabledOptionResult(dict):
    def __init__(__self__, *,
                 default_value: int,
                 max: int,
                 min: int):
        """
        :param int default_value: The default percentage of cores enabled.
        :param int max: The maximum allowed percentage of cores enabled.
        :param int min: The minimum allowed percentage of cores enabled.
        """
        pulumi.set(__self__, "default_value", default_value)
        pulumi.set(__self__, "max", max)
        pulumi.set(__self__, "min", min)

    @property
    @pulumi.getter(name="defaultValue")
    def default_value(self) -> int:
        """
        The default percentage of cores enabled.
        """
        return pulumi.get(self, "default_value")

    @property
    @pulumi.getter
    def max(self) -> int:
        """
        The maximum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "max")

    @property
    @pulumi.getter
    def min(self) -> int:
        """
        The minimum allowed percentage of cores enabled.
        """
        return pulumi.get(self, "min")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionSecureBootOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionSymmetricMultiThreadingOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionTrustedPlatformModuleOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapePlatformConfigOptionVirtualInstructionsOptionResult(dict):
    def __init__(__self__, *,
                 allowed_values: Sequence[bool],
                 is_default_enabled: bool):
        """
        :param Sequence[bool] allowed_values: Whether virtualization instructions can be enabled.
        :param bool is_default_enabled: Whether virtualization instructions are enabled by default.
        """
        pulumi.set(__self__, "allowed_values", allowed_values)
        pulumi.set(__self__, "is_default_enabled", is_default_enabled)

    @property
    @pulumi.getter(name="allowedValues")
    def allowed_values(self) -> Sequence[bool]:
        """
        Whether virtualization instructions can be enabled.
        """
        return pulumi.get(self, "allowed_values")

    @property
    @pulumi.getter(name="isDefaultEnabled")
    def is_default_enabled(self) -> bool:
        """
        Whether virtualization instructions are enabled by default.
        """
        return pulumi.get(self, "is_default_enabled")


@pulumi.output_type
class GetShapesShapeRecommendedAlternativeResult(dict):
    def __init__(__self__, *,
                 shape_name: str):
        """
        :param str shape_name: The name of the shape.
        """
        pulumi.set(__self__, "shape_name", shape_name)

    @property
    @pulumi.getter(name="shapeName")
    def shape_name(self) -> str:
        """
        The name of the shape.
        """
        return pulumi.get(self, "shape_name")


@pulumi.output_type
class GetSubnetsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetSubnetsSubnetResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 cidr_block: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 dhcp_options_id: str,
                 display_name: str,
                 dns_label: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ipv6cidr_block: str,
                 ipv6cidr_blocks: Sequence[str],
                 ipv6virtual_router_ip: str,
                 prohibit_internet_ingress: bool,
                 prohibit_public_ip_on_vnic: bool,
                 route_table_id: str,
                 security_list_ids: Sequence[str],
                 state: str,
                 subnet_domain_name: str,
                 time_created: str,
                 vcn_id: str,
                 virtual_router_ip: str,
                 virtual_router_mac: str):
        """
        :param str availability_domain: The subnet's availability domain. This attribute will be null if this is a regional subnet instead of an AD-specific subnet. Oracle recommends creating regional subnets.  Example: `Uocm:PHX-AD-1`
        :param str cidr_block: The subnet's CIDR block.  Example: `10.0.1.0/24`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str dhcp_options_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the set of DHCP options that the subnet uses.
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str dns_label: A DNS label for the subnet, used in conjunction with the VNIC's hostname and VCN's DNS label to form a fully qualified domain name (FQDN) for each VNIC within this subnet (for example, `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be an alphanumeric string that begins with a letter and is unique within the VCN. The value cannot be changed.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The subnet's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str ipv6cidr_block: For an IPv6-enabled subnet, this is the IPv6 CIDR block for the subnet's IP address space. The subnet size is always /64. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).  Example: `2001:0db8:0123:1111::/64`
        :param Sequence[str] ipv6cidr_blocks: The list of all IPv6 CIDR blocks (Oracle allocated IPv6 GUA, ULA or private IPv6 CIDR blocks, BYOIPv6 CIDR blocks) for the subnet.
        :param str ipv6virtual_router_ip: For an IPv6-enabled subnet, this is the IPv6 address of the virtual router.  Example: `2001:0db8:0123:1111:89ab:cdef:1234:5678`
        :param bool prohibit_internet_ingress: Whether to disallow ingress internet traffic to VNICs within this subnet. Defaults to false.
        :param bool prohibit_public_ip_on_vnic: Whether VNICs within this subnet can have public IP addresses. Defaults to false, which means VNICs created in this subnet will automatically be assigned public IP addresses unless specified otherwise during instance launch or VNIC creation (with the `assignPublicIp` flag in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/)). If `prohibitPublicIpOnVnic` is set to true, VNICs created in this subnet cannot have public IP addresses (that is, it's a private subnet).  Example: `true`
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table that the subnet uses.
        :param Sequence[str] security_list_ids: The OCIDs of the security list or lists that the subnet uses. Remember that security lists are associated *with the subnet*, but the rules are applied to the individual VNICs in the subnet.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str subnet_domain_name: The subnet's domain name, which consists of the subnet's DNS label, the VCN's DNS label, and the `oraclevcn.com` domain.
        :param str time_created: The date and time the subnet was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        :param str virtual_router_ip: The IP address of the virtual router.  Example: `10.0.14.1`
        :param str virtual_router_mac: The MAC address of the virtual router.  Example: `00:00:00:00:00:01`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "dhcp_options_id", dhcp_options_id)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "dns_label", dns_label)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)
        pulumi.set(__self__, "ipv6cidr_blocks", ipv6cidr_blocks)
        pulumi.set(__self__, "ipv6virtual_router_ip", ipv6virtual_router_ip)
        pulumi.set(__self__, "prohibit_internet_ingress", prohibit_internet_ingress)
        pulumi.set(__self__, "prohibit_public_ip_on_vnic", prohibit_public_ip_on_vnic)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "security_list_ids", security_list_ids)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "subnet_domain_name", subnet_domain_name)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)
        pulumi.set(__self__, "virtual_router_ip", virtual_router_ip)
        pulumi.set(__self__, "virtual_router_mac", virtual_router_mac)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The subnet's availability domain. This attribute will be null if this is a regional subnet instead of an AD-specific subnet. Oracle recommends creating regional subnets.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        The subnet's CIDR block.  Example: `10.0.1.0/24`
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="dhcpOptionsId")
    def dhcp_options_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the set of DHCP options that the subnet uses.
        """
        return pulumi.get(self, "dhcp_options_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="dnsLabel")
    def dns_label(self) -> str:
        """
        A DNS label for the subnet, used in conjunction with the VNIC's hostname and VCN's DNS label to form a fully qualified domain name (FQDN) for each VNIC within this subnet (for example, `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be an alphanumeric string that begins with a letter and is unique within the VCN. The value cannot be changed.
        """
        return pulumi.get(self, "dns_label")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The subnet's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        """
        For an IPv6-enabled subnet, this is the IPv6 CIDR block for the subnet's IP address space. The subnet size is always /64. See [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm).  Example: `2001:0db8:0123:1111::/64`
        """
        return pulumi.get(self, "ipv6cidr_block")

    @property
    @pulumi.getter(name="ipv6cidrBlocks")
    def ipv6cidr_blocks(self) -> Sequence[str]:
        """
        The list of all IPv6 CIDR blocks (Oracle allocated IPv6 GUA, ULA or private IPv6 CIDR blocks, BYOIPv6 CIDR blocks) for the subnet.
        """
        return pulumi.get(self, "ipv6cidr_blocks")

    @property
    @pulumi.getter(name="ipv6virtualRouterIp")
    def ipv6virtual_router_ip(self) -> str:
        """
        For an IPv6-enabled subnet, this is the IPv6 address of the virtual router.  Example: `2001:0db8:0123:1111:89ab:cdef:1234:5678`
        """
        return pulumi.get(self, "ipv6virtual_router_ip")

    @property
    @pulumi.getter(name="prohibitInternetIngress")
    def prohibit_internet_ingress(self) -> bool:
        """
        Whether to disallow ingress internet traffic to VNICs within this subnet. Defaults to false.
        """
        return pulumi.get(self, "prohibit_internet_ingress")

    @property
    @pulumi.getter(name="prohibitPublicIpOnVnic")
    def prohibit_public_ip_on_vnic(self) -> bool:
        """
        Whether VNICs within this subnet can have public IP addresses. Defaults to false, which means VNICs created in this subnet will automatically be assigned public IP addresses unless specified otherwise during instance launch or VNIC creation (with the `assignPublicIp` flag in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/)). If `prohibitPublicIpOnVnic` is set to true, VNICs created in this subnet cannot have public IP addresses (that is, it's a private subnet).  Example: `true`
        """
        return pulumi.get(self, "prohibit_public_ip_on_vnic")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table that the subnet uses.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter(name="securityListIds")
    def security_list_ids(self) -> Sequence[str]:
        """
        The OCIDs of the security list or lists that the subnet uses. Remember that security lists are associated *with the subnet*, but the rules are applied to the individual VNICs in the subnet.
        """
        return pulumi.get(self, "security_list_ids")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="subnetDomainName")
    def subnet_domain_name(self) -> str:
        """
        The subnet's domain name, which consists of the subnet's DNS label, the VCN's DNS label, and the `oraclevcn.com` domain.
        """
        return pulumi.get(self, "subnet_domain_name")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the subnet was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")

    @property
    @pulumi.getter(name="virtualRouterIp")
    def virtual_router_ip(self) -> str:
        """
        The IP address of the virtual router.  Example: `10.0.14.1`
        """
        return pulumi.get(self, "virtual_router_ip")

    @property
    @pulumi.getter(name="virtualRouterMac")
    def virtual_router_mac(self) -> str:
        """
        The MAC address of the virtual router.  Example: `00:00:00:00:00:01`
        """
        return pulumi.get(self, "virtual_router_mac")


@pulumi.output_type
class GetTunnelSecurityAssociationsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetTunnelSecurityAssociationsTunnelSecurityAssociationResult(dict):
    def __init__(__self__, *,
                 cpe_subnet: str,
                 oracle_subnet: str,
                 time: str,
                 tunnel_sa_error_info: str,
                 tunnel_sa_status: str):
        """
        :param str cpe_subnet: The IP address and mask of the partner subnet used in policy based VPNs or static routes.
        :param str oracle_subnet: The IP address and mask of the local subnet used in policy based VPNs or static routes.
        :param str time: Time in the current state, in seconds.
        :param str tunnel_sa_error_info: Current state if the IPSec tunnel status is not `UP`, including phase one and phase two details and a possible reason the tunnel is not `UP`.
        :param str tunnel_sa_status: The IPSec tunnel's phase one status.
        """
        pulumi.set(__self__, "cpe_subnet", cpe_subnet)
        pulumi.set(__self__, "oracle_subnet", oracle_subnet)
        pulumi.set(__self__, "time", time)
        pulumi.set(__self__, "tunnel_sa_error_info", tunnel_sa_error_info)
        pulumi.set(__self__, "tunnel_sa_status", tunnel_sa_status)

    @property
    @pulumi.getter(name="cpeSubnet")
    def cpe_subnet(self) -> str:
        """
        The IP address and mask of the partner subnet used in policy based VPNs or static routes.
        """
        return pulumi.get(self, "cpe_subnet")

    @property
    @pulumi.getter(name="oracleSubnet")
    def oracle_subnet(self) -> str:
        """
        The IP address and mask of the local subnet used in policy based VPNs or static routes.
        """
        return pulumi.get(self, "oracle_subnet")

    @property
    @pulumi.getter
    def time(self) -> str:
        """
        Time in the current state, in seconds.
        """
        return pulumi.get(self, "time")

    @property
    @pulumi.getter(name="tunnelSaErrorInfo")
    def tunnel_sa_error_info(self) -> str:
        """
        Current state if the IPSec tunnel status is not `UP`, including phase one and phase two details and a possible reason the tunnel is not `UP`.
        """
        return pulumi.get(self, "tunnel_sa_error_info")

    @property
    @pulumi.getter(name="tunnelSaStatus")
    def tunnel_sa_status(self) -> str:
        """
        The IPSec tunnel's phase one status.
        """
        return pulumi.get(self, "tunnel_sa_status")


@pulumi.output_type
class GetVcnByoipv6cidrDetailResult(dict):
    def __init__(__self__, *,
                 byoipv6range_id: str,
                 ipv6cidr_block: str):
        pulumi.set(__self__, "byoipv6range_id", byoipv6range_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)

    @property
    @pulumi.getter(name="byoipv6rangeId")
    def byoipv6range_id(self) -> str:
        return pulumi.get(self, "byoipv6range_id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        return pulumi.get(self, "ipv6cidr_block")


@pulumi.output_type
class GetVcnsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVcnsVirtualNetworkResult(dict):
    def __init__(__self__, *,
                 byoipv6cidr_blocks: Sequence[str],
                 byoipv6cidr_details: Sequence['outputs.GetVcnsVirtualNetworkByoipv6cidrDetailResult'],
                 cidr_block: str,
                 cidr_blocks: Sequence[str],
                 compartment_id: str,
                 default_dhcp_options_id: str,
                 default_route_table_id: str,
                 default_security_list_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 dns_label: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ipv6cidr_blocks: Sequence[str],
                 ipv6private_cidr_blocks: Sequence[str],
                 is_ipv6enabled: bool,
                 is_oracle_gua_allocation_enabled: bool,
                 state: str,
                 time_created: str,
                 vcn_domain_name: str):
        """
        :param Sequence[str] byoipv6cidr_blocks: The list of BYOIPv6 CIDR blocks required to create a VCN that uses BYOIPv6 ranges.
        :param str cidr_block: Deprecated. The first CIDR IP address from cidrBlocks.  Example: `172.16.0.0/16`
        :param Sequence[str] cidr_blocks: The list of IPv4 CIDR blocks the VCN will use.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str default_dhcp_options_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default set of DHCP options.
        :param str default_route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default route table.
        :param str default_security_list_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default security list.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str dns_label: A DNS label for the VCN, used in conjunction with the VNIC's hostname and subnet's DNS label to form a fully qualified domain name (FQDN) for each VNIC within this subnet (for example, `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be an alphanumeric string that begins with a letter. The value cannot be changed.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The VCN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param Sequence[str] ipv6cidr_blocks: For an IPv6-enabled VCN, this is the list of IPv6 CIDR blocks for the VCN's IP address space. The CIDRs are provided by Oracle and the sizes are always /56.
        :param Sequence[str] ipv6private_cidr_blocks: For an IPv6-enabled VCN, this is the list of Private IPv6 CIDR blocks for the VCN's IP address space.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the VCN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_domain_name: The VCN's domain name, which consists of the VCN's DNS label, and the `oraclevcn.com` domain.
        """
        pulumi.set(__self__, "byoipv6cidr_blocks", byoipv6cidr_blocks)
        pulumi.set(__self__, "byoipv6cidr_details", byoipv6cidr_details)
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "cidr_blocks", cidr_blocks)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "default_dhcp_options_id", default_dhcp_options_id)
        pulumi.set(__self__, "default_route_table_id", default_route_table_id)
        pulumi.set(__self__, "default_security_list_id", default_security_list_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "dns_label", dns_label)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv6cidr_blocks", ipv6cidr_blocks)
        pulumi.set(__self__, "ipv6private_cidr_blocks", ipv6private_cidr_blocks)
        pulumi.set(__self__, "is_ipv6enabled", is_ipv6enabled)
        pulumi.set(__self__, "is_oracle_gua_allocation_enabled", is_oracle_gua_allocation_enabled)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_domain_name", vcn_domain_name)

    @property
    @pulumi.getter(name="byoipv6cidrBlocks")
    def byoipv6cidr_blocks(self) -> Sequence[str]:
        """
        The list of BYOIPv6 CIDR blocks required to create a VCN that uses BYOIPv6 ranges.
        """
        return pulumi.get(self, "byoipv6cidr_blocks")

    @property
    @pulumi.getter(name="byoipv6cidrDetails")
    def byoipv6cidr_details(self) -> Sequence['outputs.GetVcnsVirtualNetworkByoipv6cidrDetailResult']:
        return pulumi.get(self, "byoipv6cidr_details")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        Deprecated. The first CIDR IP address from cidrBlocks.  Example: `172.16.0.0/16`
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="cidrBlocks")
    def cidr_blocks(self) -> Sequence[str]:
        """
        The list of IPv4 CIDR blocks the VCN will use.
        """
        return pulumi.get(self, "cidr_blocks")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="defaultDhcpOptionsId")
    def default_dhcp_options_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default set of DHCP options.
        """
        return pulumi.get(self, "default_dhcp_options_id")

    @property
    @pulumi.getter(name="defaultRouteTableId")
    def default_route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default route table.
        """
        return pulumi.get(self, "default_route_table_id")

    @property
    @pulumi.getter(name="defaultSecurityListId")
    def default_security_list_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the VCN's default security list.
        """
        return pulumi.get(self, "default_security_list_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="dnsLabel")
    def dns_label(self) -> str:
        """
        A DNS label for the VCN, used in conjunction with the VNIC's hostname and subnet's DNS label to form a fully qualified domain name (FQDN) for each VNIC within this subnet (for example, `bminstance1.subnet123.vcn1.oraclevcn.com`). Must be an alphanumeric string that begins with a letter. The value cannot be changed.
        """
        return pulumi.get(self, "dns_label")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The VCN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipv6cidrBlocks")
    def ipv6cidr_blocks(self) -> Sequence[str]:
        """
        For an IPv6-enabled VCN, this is the list of IPv6 CIDR blocks for the VCN's IP address space. The CIDRs are provided by Oracle and the sizes are always /56.
        """
        return pulumi.get(self, "ipv6cidr_blocks")

    @property
    @pulumi.getter(name="ipv6privateCidrBlocks")
    def ipv6private_cidr_blocks(self) -> Sequence[str]:
        """
        For an IPv6-enabled VCN, this is the list of Private IPv6 CIDR blocks for the VCN's IP address space.
        """
        return pulumi.get(self, "ipv6private_cidr_blocks")

    @property
    @pulumi.getter(name="isIpv6enabled")
    def is_ipv6enabled(self) -> bool:
        return pulumi.get(self, "is_ipv6enabled")

    @property
    @pulumi.getter(name="isOracleGuaAllocationEnabled")
    def is_oracle_gua_allocation_enabled(self) -> bool:
        return pulumi.get(self, "is_oracle_gua_allocation_enabled")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the VCN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnDomainName")
    def vcn_domain_name(self) -> str:
        """
        The VCN's domain name, which consists of the VCN's DNS label, and the `oraclevcn.com` domain.
        """
        return pulumi.get(self, "vcn_domain_name")


@pulumi.output_type
class GetVcnsVirtualNetworkByoipv6cidrDetailResult(dict):
    def __init__(__self__, *,
                 byoipv6range_id: str,
                 ipv6cidr_block: str):
        pulumi.set(__self__, "byoipv6range_id", byoipv6range_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)

    @property
    @pulumi.getter(name="byoipv6rangeId")
    def byoipv6range_id(self) -> str:
        return pulumi.get(self, "byoipv6range_id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        return pulumi.get(self, "ipv6cidr_block")


@pulumi.output_type
class GetVirtualCircuitBandwidthShapesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        """
        :param str name: The name of the bandwidth shape.  Example: `10 Gbps`
        """
        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 name of the bandwidth shape.  Example: `10 Gbps`
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVirtualCircuitBandwidthShapesVirtualCircuitBandwidthShapeResult(dict):
    def __init__(__self__, *,
                 bandwidth_in_mbps: int,
                 name: str):
        """
        :param int bandwidth_in_mbps: The bandwidth in Mbps.  Example: `10000`
        :param str name: The name of the bandwidth shape.  Example: `10 Gbps`
        """
        pulumi.set(__self__, "bandwidth_in_mbps", bandwidth_in_mbps)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter(name="bandwidthInMbps")
    def bandwidth_in_mbps(self) -> int:
        """
        The bandwidth in Mbps.  Example: `10000`
        """
        return pulumi.get(self, "bandwidth_in_mbps")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the bandwidth shape.  Example: `10 Gbps`
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetVirtualCircuitCrossConnectMappingResult(dict):
    def __init__(__self__, *,
                 bgp_md5auth_key: str,
                 cross_connect_or_cross_connect_group_id: str,
                 customer_bgp_peering_ip: str,
                 customer_bgp_peering_ipv6: str,
                 oracle_bgp_peering_ip: str,
                 oracle_bgp_peering_ipv6: str,
                 vlan: int):
        """
        :param str bgp_md5auth_key: The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        :param str cross_connect_or_cross_connect_group_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        :param str customer_bgp_peering_ip: The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.
        :param str customer_bgp_peering_ipv6: The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.
        :param str oracle_bgp_peering_ip: The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        :param str oracle_bgp_peering_ipv6: The IPv6 address for Oracle's end of the BGP session. Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        :param int vlan: The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        pulumi.set(__self__, "bgp_md5auth_key", bgp_md5auth_key)
        pulumi.set(__self__, "cross_connect_or_cross_connect_group_id", cross_connect_or_cross_connect_group_id)
        pulumi.set(__self__, "customer_bgp_peering_ip", customer_bgp_peering_ip)
        pulumi.set(__self__, "customer_bgp_peering_ipv6", customer_bgp_peering_ipv6)
        pulumi.set(__self__, "oracle_bgp_peering_ip", oracle_bgp_peering_ip)
        pulumi.set(__self__, "oracle_bgp_peering_ipv6", oracle_bgp_peering_ipv6)
        pulumi.set(__self__, "vlan", vlan)

    @property
    @pulumi.getter(name="bgpMd5authKey")
    def bgp_md5auth_key(self) -> str:
        """
        The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        """
        return pulumi.get(self, "bgp_md5auth_key")

    @property
    @pulumi.getter(name="crossConnectOrCrossConnectGroupId")
    def cross_connect_or_cross_connect_group_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        """
        return pulumi.get(self, "cross_connect_or_cross_connect_group_id")

    @property
    @pulumi.getter(name="customerBgpPeeringIp")
    def customer_bgp_peering_ip(self) -> str:
        """
        The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.
        """
        return pulumi.get(self, "customer_bgp_peering_ip")

    @property
    @pulumi.getter(name="customerBgpPeeringIpv6")
    def customer_bgp_peering_ipv6(self) -> str:
        """
        The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.
        """
        return pulumi.get(self, "customer_bgp_peering_ipv6")

    @property
    @pulumi.getter(name="oracleBgpPeeringIp")
    def oracle_bgp_peering_ip(self) -> str:
        """
        The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        """
        return pulumi.get(self, "oracle_bgp_peering_ip")

    @property
    @pulumi.getter(name="oracleBgpPeeringIpv6")
    def oracle_bgp_peering_ipv6(self) -> str:
        """
        The IPv6 address for Oracle's end of the BGP session. Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        """
        return pulumi.get(self, "oracle_bgp_peering_ipv6")

    @property
    @pulumi.getter
    def vlan(self) -> int:
        """
        The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        return pulumi.get(self, "vlan")


@pulumi.output_type
class GetVirtualCircuitPublicPrefixResult(dict):
    def __init__(__self__, *,
                 cidr_block: str):
        pulumi.set(__self__, "cidr_block", cidr_block)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        return pulumi.get(self, "cidr_block")


@pulumi.output_type
class GetVirtualCircuitPublicPrefixesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVirtualCircuitPublicPrefixesVirtualCircuitPublicPrefixResult(dict):
    def __init__(__self__, *,
                 cidr_block: str,
                 verification_state: str):
        """
        :param str cidr_block: Publix IP prefix (CIDR) that the customer specified.
        :param str verification_state: A filter to only return resources that match the given verification state.
               
               The state value is case-insensitive.
        """
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "verification_state", verification_state)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        Publix IP prefix (CIDR) that the customer specified.
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="verificationState")
    def verification_state(self) -> str:
        """
        A filter to only return resources that match the given verification state.

        The state value is case-insensitive.
        """
        return pulumi.get(self, "verification_state")


@pulumi.output_type
class GetVirtualCircuitsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVirtualCircuitsVirtualCircuitResult(dict):
    def __init__(__self__, *,
                 bandwidth_shape_name: str,
                 bgp_admin_state: str,
                 bgp_ipv6session_state: str,
                 bgp_management: str,
                 bgp_session_state: str,
                 compartment_id: str,
                 cross_connect_mappings: Sequence['outputs.GetVirtualCircuitsVirtualCircuitCrossConnectMappingResult'],
                 customer_asn: str,
                 customer_bgp_asn: int,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 gateway_id: str,
                 id: str,
                 ip_mtu: str,
                 is_bfd_enabled: bool,
                 oracle_bgp_asn: int,
                 provider_service_id: str,
                 provider_service_key_name: str,
                 provider_state: str,
                 public_prefixes: Sequence['outputs.GetVirtualCircuitsVirtualCircuitPublicPrefixResult'],
                 reference_comment: str,
                 region: str,
                 routing_policies: Sequence[str],
                 service_type: str,
                 state: str,
                 time_created: str,
                 type: str,
                 virtual_circuit_id: str):
        """
        :param str bandwidth_shape_name: The provisioned data rate of the connection. To get a list of the available bandwidth levels (that is, shapes), see [ListFastConnectProviderServiceVirtualCircuitBandwidthShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/FastConnectProviderService/ListFastConnectProviderVirtualCircuitBandwidthShapes).  Example: `10 Gbps`
        :param str bgp_admin_state: Set to `ENABLED` (the default) to activate the BGP session of the virtual circuit, set to `DISABLED` to deactivate the virtual circuit.
        :param str bgp_ipv6session_state: The state of the Ipv6 BGP session associated with the virtual circuit.
        :param str bgp_management: Deprecated. Instead use the information in [FastConnectProviderService](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/FastConnectProviderService/).
        :param str bgp_session_state: The state of the Ipv4 BGP session associated with the virtual circuit.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Sequence['GetVirtualCircuitsVirtualCircuitCrossConnectMappingArgs'] cross_connect_mappings: An array of mappings, each containing properties for a cross-connect or cross-connect group that is associated with this virtual circuit.
        :param str customer_asn: The BGP ASN of the network at the other end of the BGP session from Oracle. If the session is between the customer's edge router and Oracle, the value is the customer's ASN. If the BGP session is between the provider's edge router and Oracle, the value is the provider's ASN. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.
        :param int customer_bgp_asn: Deprecated. Instead use `customerAsn`. If you specify values for both, the request will be rejected.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str gateway_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer's [dynamic routing gateway (DRG)](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Drg) that this virtual circuit uses. Applicable only to private virtual circuits.
        :param str id: The virtual circuit's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str ip_mtu: The layer 3 IP MTU to use on this virtual circuit.
        :param bool is_bfd_enabled: Set to `true` to enable BFD for IPv4 BGP peering, or set to `false` to disable BFD. If this is not set, the default is `false`.
        :param int oracle_bgp_asn: The Oracle BGP ASN.
        :param str provider_service_id: The OCID of the service offered by the provider (if the customer is connecting via a provider).
        :param str provider_service_key_name: The service key name offered by the provider (if the customer is connecting via a provider).
        :param str provider_state: The provider's state in relation to this virtual circuit (if the customer is connecting via a provider). ACTIVE means the provider has provisioned the virtual circuit from their end. INACTIVE means the provider has not yet provisioned the virtual circuit, or has de-provisioned it.
        :param Sequence['GetVirtualCircuitsVirtualCircuitPublicPrefixArgs'] public_prefixes: For a public virtual circuit. The public IP prefixes (CIDRs) the customer wants to advertise across the connection. All prefix sizes are allowed.
        :param str reference_comment: Provider-supplied reference information about this virtual circuit (if the customer is connecting via a provider).
        :param str region: The Oracle Cloud Infrastructure region where this virtual circuit is located.
        :param Sequence[str] routing_policies: The routing policy sets how routing information about the Oracle cloud is shared over a public virtual circuit. Policies available are: `ORACLE_SERVICE_NETWORK`, `REGIONAL`, `MARKET_LEVEL`, and `GLOBAL`. See [Route Filtering](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/routingonprem.htm#route_filtering) for details. By default, routing information is shared for all routes in the same market.
        :param str service_type: Provider service type.
        :param str state: A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        :param str time_created: The date and time the virtual circuit was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str type: Whether the virtual circuit supports private or public peering. For more information, see [FastConnect Overview](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/fastconnect.htm).
        """
        pulumi.set(__self__, "bandwidth_shape_name", bandwidth_shape_name)
        pulumi.set(__self__, "bgp_admin_state", bgp_admin_state)
        pulumi.set(__self__, "bgp_ipv6session_state", bgp_ipv6session_state)
        pulumi.set(__self__, "bgp_management", bgp_management)
        pulumi.set(__self__, "bgp_session_state", bgp_session_state)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "cross_connect_mappings", cross_connect_mappings)
        pulumi.set(__self__, "customer_asn", customer_asn)
        pulumi.set(__self__, "customer_bgp_asn", customer_bgp_asn)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "gateway_id", gateway_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_mtu", ip_mtu)
        pulumi.set(__self__, "is_bfd_enabled", is_bfd_enabled)
        pulumi.set(__self__, "oracle_bgp_asn", oracle_bgp_asn)
        pulumi.set(__self__, "provider_service_id", provider_service_id)
        pulumi.set(__self__, "provider_service_key_name", provider_service_key_name)
        pulumi.set(__self__, "provider_state", provider_state)
        pulumi.set(__self__, "public_prefixes", public_prefixes)
        pulumi.set(__self__, "reference_comment", reference_comment)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "routing_policies", routing_policies)
        pulumi.set(__self__, "service_type", service_type)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "virtual_circuit_id", virtual_circuit_id)

    @property
    @pulumi.getter(name="bandwidthShapeName")
    def bandwidth_shape_name(self) -> str:
        """
        The provisioned data rate of the connection. To get a list of the available bandwidth levels (that is, shapes), see [ListFastConnectProviderServiceVirtualCircuitBandwidthShapes](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/FastConnectProviderService/ListFastConnectProviderVirtualCircuitBandwidthShapes).  Example: `10 Gbps`
        """
        return pulumi.get(self, "bandwidth_shape_name")

    @property
    @pulumi.getter(name="bgpAdminState")
    def bgp_admin_state(self) -> str:
        """
        Set to `ENABLED` (the default) to activate the BGP session of the virtual circuit, set to `DISABLED` to deactivate the virtual circuit.
        """
        return pulumi.get(self, "bgp_admin_state")

    @property
    @pulumi.getter(name="bgpIpv6sessionState")
    def bgp_ipv6session_state(self) -> str:
        """
        The state of the Ipv6 BGP session associated with the virtual circuit.
        """
        return pulumi.get(self, "bgp_ipv6session_state")

    @property
    @pulumi.getter(name="bgpManagement")
    def bgp_management(self) -> str:
        """
        Deprecated. Instead use the information in [FastConnectProviderService](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/FastConnectProviderService/).
        """
        return pulumi.get(self, "bgp_management")

    @property
    @pulumi.getter(name="bgpSessionState")
    def bgp_session_state(self) -> str:
        """
        The state of the Ipv4 BGP session associated with the virtual circuit.
        """
        return pulumi.get(self, "bgp_session_state")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="crossConnectMappings")
    def cross_connect_mappings(self) -> Sequence['outputs.GetVirtualCircuitsVirtualCircuitCrossConnectMappingResult']:
        """
        An array of mappings, each containing properties for a cross-connect or cross-connect group that is associated with this virtual circuit.
        """
        return pulumi.get(self, "cross_connect_mappings")

    @property
    @pulumi.getter(name="customerAsn")
    def customer_asn(self) -> str:
        """
        The BGP ASN of the network at the other end of the BGP session from Oracle. If the session is between the customer's edge router and Oracle, the value is the customer's ASN. If the BGP session is between the provider's edge router and Oracle, the value is the provider's ASN. Can be a 2-byte or 4-byte ASN. Uses "asplain" format.
        """
        return pulumi.get(self, "customer_asn")

    @property
    @pulumi.getter(name="customerBgpAsn")
    def customer_bgp_asn(self) -> int:
        """
        Deprecated. Instead use `customerAsn`. If you specify values for both, the request will be rejected.
        """
        return pulumi.get(self, "customer_bgp_asn")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="gatewayId")
    def gateway_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer's [dynamic routing gateway (DRG)](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Drg) that this virtual circuit uses. Applicable only to private virtual circuits.
        """
        return pulumi.get(self, "gateway_id")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The virtual circuit's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipMtu")
    def ip_mtu(self) -> str:
        """
        The layer 3 IP MTU to use on this virtual circuit.
        """
        return pulumi.get(self, "ip_mtu")

    @property
    @pulumi.getter(name="isBfdEnabled")
    def is_bfd_enabled(self) -> bool:
        """
        Set to `true` to enable BFD for IPv4 BGP peering, or set to `false` to disable BFD. If this is not set, the default is `false`.
        """
        return pulumi.get(self, "is_bfd_enabled")

    @property
    @pulumi.getter(name="oracleBgpAsn")
    def oracle_bgp_asn(self) -> int:
        """
        The Oracle BGP ASN.
        """
        return pulumi.get(self, "oracle_bgp_asn")

    @property
    @pulumi.getter(name="providerServiceId")
    def provider_service_id(self) -> str:
        """
        The OCID of the service offered by the provider (if the customer is connecting via a provider).
        """
        return pulumi.get(self, "provider_service_id")

    @property
    @pulumi.getter(name="providerServiceKeyName")
    def provider_service_key_name(self) -> str:
        """
        The service key name offered by the provider (if the customer is connecting via a provider).
        """
        return pulumi.get(self, "provider_service_key_name")

    @property
    @pulumi.getter(name="providerState")
    def provider_state(self) -> str:
        """
        The provider's state in relation to this virtual circuit (if the customer is connecting via a provider). ACTIVE means the provider has provisioned the virtual circuit from their end. INACTIVE means the provider has not yet provisioned the virtual circuit, or has de-provisioned it.
        """
        return pulumi.get(self, "provider_state")

    @property
    @pulumi.getter(name="publicPrefixes")
    def public_prefixes(self) -> Sequence['outputs.GetVirtualCircuitsVirtualCircuitPublicPrefixResult']:
        """
        For a public virtual circuit. The public IP prefixes (CIDRs) the customer wants to advertise across the connection. All prefix sizes are allowed.
        """
        return pulumi.get(self, "public_prefixes")

    @property
    @pulumi.getter(name="referenceComment")
    def reference_comment(self) -> str:
        """
        Provider-supplied reference information about this virtual circuit (if the customer is connecting via a provider).
        """
        return pulumi.get(self, "reference_comment")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The Oracle Cloud Infrastructure region where this virtual circuit is located.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="routingPolicies")
    def routing_policies(self) -> Sequence[str]:
        """
        The routing policy sets how routing information about the Oracle cloud is shared over a public virtual circuit. Policies available are: `ORACLE_SERVICE_NETWORK`, `REGIONAL`, `MARKET_LEVEL`, and `GLOBAL`. See [Route Filtering](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/routingonprem.htm#route_filtering) for details. By default, routing information is shared for all routes in the same market.
        """
        return pulumi.get(self, "routing_policies")

    @property
    @pulumi.getter(name="serviceType")
    def service_type(self) -> str:
        """
        Provider service type.
        """
        return pulumi.get(self, "service_type")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the specified lifecycle state. The value is case insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the virtual circuit was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        Whether the virtual circuit supports private or public peering. For more information, see [FastConnect Overview](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/fastconnect.htm).
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="virtualCircuitId")
    def virtual_circuit_id(self) -> str:
        return pulumi.get(self, "virtual_circuit_id")


@pulumi.output_type
class GetVirtualCircuitsVirtualCircuitCrossConnectMappingResult(dict):
    def __init__(__self__, *,
                 bgp_md5auth_key: str,
                 cross_connect_or_cross_connect_group_id: str,
                 customer_bgp_peering_ip: str,
                 customer_bgp_peering_ipv6: str,
                 oracle_bgp_peering_ip: str,
                 oracle_bgp_peering_ipv6: str,
                 vlan: int):
        """
        :param str bgp_md5auth_key: The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        :param str cross_connect_or_cross_connect_group_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        :param str customer_bgp_peering_ip: The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.
        :param str customer_bgp_peering_ipv6: The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.
        :param str oracle_bgp_peering_ip: The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        :param str oracle_bgp_peering_ipv6: The IPv6 address for Oracle's end of the BGP session. Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        :param int vlan: The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        pulumi.set(__self__, "bgp_md5auth_key", bgp_md5auth_key)
        pulumi.set(__self__, "cross_connect_or_cross_connect_group_id", cross_connect_or_cross_connect_group_id)
        pulumi.set(__self__, "customer_bgp_peering_ip", customer_bgp_peering_ip)
        pulumi.set(__self__, "customer_bgp_peering_ipv6", customer_bgp_peering_ipv6)
        pulumi.set(__self__, "oracle_bgp_peering_ip", oracle_bgp_peering_ip)
        pulumi.set(__self__, "oracle_bgp_peering_ipv6", oracle_bgp_peering_ipv6)
        pulumi.set(__self__, "vlan", vlan)

    @property
    @pulumi.getter(name="bgpMd5authKey")
    def bgp_md5auth_key(self) -> str:
        """
        The key for BGP MD5 authentication. Only applicable if your system requires MD5 authentication. If empty or not set (null), that means you don't use BGP MD5 authentication.
        """
        return pulumi.get(self, "bgp_md5auth_key")

    @property
    @pulumi.getter(name="crossConnectOrCrossConnectGroupId")
    def cross_connect_or_cross_connect_group_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cross-connect or cross-connect group for this mapping. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).
        """
        return pulumi.get(self, "cross_connect_or_cross_connect_group_id")

    @property
    @pulumi.getter(name="customerBgpPeeringIp")
    def customer_bgp_peering_ip(self) -> str:
        """
        The BGP IPv4 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv4 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv4 address of the provider's edge router. Must use a subnet mask from /28 to /31.
        """
        return pulumi.get(self, "customer_bgp_peering_ip")

    @property
    @pulumi.getter(name="customerBgpPeeringIpv6")
    def customer_bgp_peering_ipv6(self) -> str:
        """
        The BGP IPv6 address for the router on the other end of the BGP session from Oracle. Specified by the owner of that router. If the session goes from Oracle to a customer, this is the BGP IPv6 address of the customer's edge router. If the session goes from Oracle to a provider, this is the BGP IPv6 address of the provider's edge router. Only subnet masks from /64 up to /127 are allowed.
        """
        return pulumi.get(self, "customer_bgp_peering_ipv6")

    @property
    @pulumi.getter(name="oracleBgpPeeringIp")
    def oracle_bgp_peering_ip(self) -> str:
        """
        The IPv4 address for Oracle's end of the BGP session. Must use a subnet mask from /28 to /31. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        """
        return pulumi.get(self, "oracle_bgp_peering_ip")

    @property
    @pulumi.getter(name="oracleBgpPeeringIpv6")
    def oracle_bgp_peering_ipv6(self) -> str:
        """
        The IPv6 address for Oracle's end of the BGP session. Only subnet masks from /64 up to /127 are allowed. If the session goes from Oracle to a customer's edge router, the customer specifies this information. If the session goes from Oracle to a provider's edge router, the provider specifies this.
        """
        return pulumi.get(self, "oracle_bgp_peering_ipv6")

    @property
    @pulumi.getter
    def vlan(self) -> int:
        """
        The number of the specific VLAN (on the cross-connect or cross-connect group) that is assigned to this virtual circuit. Specified by the owner of the cross-connect or cross-connect group (the customer if the customer is colocated with Oracle, or the provider if the customer is connecting via provider).  Example: `200`
        """
        return pulumi.get(self, "vlan")


@pulumi.output_type
class GetVirtualCircuitsVirtualCircuitPublicPrefixResult(dict):
    def __init__(__self__, *,
                 cidr_block: str):
        pulumi.set(__self__, "cidr_block", cidr_block)

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        return pulumi.get(self, "cidr_block")


@pulumi.output_type
class GetVirtualNetworksFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVirtualNetworksVirtualNetworkResult(dict):
    def __init__(__self__, *,
                 byoipv6cidr_blocks: Sequence[str],
                 byoipv6cidr_details: Sequence['outputs.GetVirtualNetworksVirtualNetworkByoipv6cidrDetailResult'],
                 cidr_block: str,
                 cidr_blocks: Sequence[str],
                 compartment_id: str,
                 default_dhcp_options_id: str,
                 default_route_table_id: str,
                 default_security_list_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 dns_label: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 ipv6cidr_blocks: Sequence[str],
                 ipv6private_cidr_blocks: Sequence[str],
                 is_ipv6enabled: bool,
                 is_oracle_gua_allocation_enabled: bool,
                 state: str,
                 time_created: str,
                 vcn_domain_name: str):
        pulumi.set(__self__, "byoipv6cidr_blocks", byoipv6cidr_blocks)
        pulumi.set(__self__, "byoipv6cidr_details", byoipv6cidr_details)
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "cidr_blocks", cidr_blocks)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "default_dhcp_options_id", default_dhcp_options_id)
        pulumi.set(__self__, "default_route_table_id", default_route_table_id)
        pulumi.set(__self__, "default_security_list_id", default_security_list_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "dns_label", dns_label)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ipv6cidr_blocks", ipv6cidr_blocks)
        pulumi.set(__self__, "ipv6private_cidr_blocks", ipv6private_cidr_blocks)
        pulumi.set(__self__, "is_ipv6enabled", is_ipv6enabled)
        pulumi.set(__self__, "is_oracle_gua_allocation_enabled", is_oracle_gua_allocation_enabled)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_domain_name", vcn_domain_name)

    @property
    @pulumi.getter(name="byoipv6cidrBlocks")
    def byoipv6cidr_blocks(self) -> Sequence[str]:
        return pulumi.get(self, "byoipv6cidr_blocks")

    @property
    @pulumi.getter(name="byoipv6cidrDetails")
    def byoipv6cidr_details(self) -> Sequence['outputs.GetVirtualNetworksVirtualNetworkByoipv6cidrDetailResult']:
        return pulumi.get(self, "byoipv6cidr_details")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="cidrBlocks")
    def cidr_blocks(self) -> Sequence[str]:
        return pulumi.get(self, "cidr_blocks")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="defaultDhcpOptionsId")
    def default_dhcp_options_id(self) -> str:
        return pulumi.get(self, "default_dhcp_options_id")

    @property
    @pulumi.getter(name="defaultRouteTableId")
    def default_route_table_id(self) -> str:
        return pulumi.get(self, "default_route_table_id")

    @property
    @pulumi.getter(name="defaultSecurityListId")
    def default_security_list_id(self) -> str:
        return pulumi.get(self, "default_security_list_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="dnsLabel")
    def dns_label(self) -> str:
        return pulumi.get(self, "dns_label")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipv6cidrBlocks")
    def ipv6cidr_blocks(self) -> Sequence[str]:
        return pulumi.get(self, "ipv6cidr_blocks")

    @property
    @pulumi.getter(name="ipv6privateCidrBlocks")
    def ipv6private_cidr_blocks(self) -> Sequence[str]:
        return pulumi.get(self, "ipv6private_cidr_blocks")

    @property
    @pulumi.getter(name="isIpv6enabled")
    def is_ipv6enabled(self) -> bool:
        return pulumi.get(self, "is_ipv6enabled")

    @property
    @pulumi.getter(name="isOracleGuaAllocationEnabled")
    def is_oracle_gua_allocation_enabled(self) -> bool:
        return pulumi.get(self, "is_oracle_gua_allocation_enabled")

    @property
    @pulumi.getter
    def state(self) -> str:
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnDomainName")
    def vcn_domain_name(self) -> str:
        return pulumi.get(self, "vcn_domain_name")


@pulumi.output_type
class GetVirtualNetworksVirtualNetworkByoipv6cidrDetailResult(dict):
    def __init__(__self__, *,
                 byoipv6range_id: str,
                 ipv6cidr_block: str):
        pulumi.set(__self__, "byoipv6range_id", byoipv6range_id)
        pulumi.set(__self__, "ipv6cidr_block", ipv6cidr_block)

    @property
    @pulumi.getter(name="byoipv6rangeId")
    def byoipv6range_id(self) -> str:
        return pulumi.get(self, "byoipv6range_id")

    @property
    @pulumi.getter(name="ipv6cidrBlock")
    def ipv6cidr_block(self) -> str:
        return pulumi.get(self, "ipv6cidr_block")


@pulumi.output_type
class GetVlansFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVlansVlanResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 cidr_block: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 nsg_ids: Sequence[str],
                 route_table_id: str,
                 state: str,
                 time_created: str,
                 vcn_id: str,
                 vlan_tag: int):
        """
        :param str availability_domain: The VLAN's availability domain. This attribute will be null if this is a regional VLAN rather than an AD-specific VLAN.  Example: `Uocm:PHX-AD-1`
        :param str cidr_block: The range of IPv4 addresses that will be used for layer 3 communication with hosts outside the VLAN.  Example: `192.168.1.0/24`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The VLAN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param Sequence[str] nsg_ids: A list of the OCIDs of the network security groups (NSGs) to use with this VLAN. All VNICs in the VLAN belong to these NSGs. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        :param str route_table_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table that the VLAN uses.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the VLAN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        :param int vlan_tag: The IEEE 802.1Q VLAN tag of this VLAN.  Example: `100`
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "cidr_block", cidr_block)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "route_table_id", route_table_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vcn_id", vcn_id)
        pulumi.set(__self__, "vlan_tag", vlan_tag)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The VLAN's availability domain. This attribute will be null if this is a regional VLAN rather than an AD-specific VLAN.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="cidrBlock")
    def cidr_block(self) -> str:
        """
        The range of IPv4 addresses that will be used for layer 3 communication with hosts outside the VLAN.  Example: `192.168.1.0/24`
        """
        return pulumi.get(self, "cidr_block")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The VLAN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        """
        A list of the OCIDs of the network security groups (NSGs) to use with this VLAN. All VNICs in the VLAN belong to these NSGs. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/).
        """
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the route table that the VLAN uses.
        """
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the VLAN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")

    @property
    @pulumi.getter(name="vlanTag")
    def vlan_tag(self) -> int:
        """
        The IEEE 802.1Q VLAN tag of this VLAN.  Example: `100`
        """
        return pulumi.get(self, "vlan_tag")


@pulumi.output_type
class GetVnicAttachmentsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVnicAttachmentsVnicAttachmentResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 create_vnic_details: Sequence['outputs.GetVnicAttachmentsVnicAttachmentCreateVnicDetailResult'],
                 display_name: str,
                 id: str,
                 instance_id: str,
                 nic_index: int,
                 state: str,
                 subnet_id: str,
                 time_created: str,
                 vlan_id: str,
                 vlan_tag: int,
                 vnic_id: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str id: The OCID of the VNIC attachment.
        :param str instance_id: The OCID of the instance.
        :param int nic_index: Which physical network interface card (NIC) the VNIC uses. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        :param str state: The current state of the VNIC attachment.
        :param str subnet_id: The OCID of the subnet to create the VNIC in.
        :param str time_created: The date and time the VNIC attachment was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str vlan_id: The OCID of the VLAN to create the VNIC in. Creating the VNIC in a VLAN (instead of a subnet) is possible only if you are an Oracle Cloud VMware Solution customer. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        :param int vlan_tag: The Oracle-assigned VLAN tag of the attached VNIC. Available after the attachment process is complete.
        :param str vnic_id: The OCID of the VNIC.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "create_vnic_details", create_vnic_details)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "nic_index", nic_index)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "vlan_id", vlan_id)
        pulumi.set(__self__, "vlan_tag", vlan_tag)
        pulumi.set(__self__, "vnic_id", vnic_id)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="createVnicDetails")
    def create_vnic_details(self) -> Sequence['outputs.GetVnicAttachmentsVnicAttachmentCreateVnicDetailResult']:
        return pulumi.get(self, "create_vnic_details")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the VNIC attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="nicIndex")
    def nic_index(self) -> int:
        """
        Which physical network interface card (NIC) the VNIC uses. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm).
        """
        return pulumi.get(self, "nic_index")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the VNIC attachment.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the VNIC attachment was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        The OCID of the VLAN to create the VNIC in. Creating the VNIC in a VLAN (instead of a subnet) is possible only if you are an Oracle Cloud VMware Solution customer. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")

    @property
    @pulumi.getter(name="vlanTag")
    def vlan_tag(self) -> int:
        """
        The Oracle-assigned VLAN tag of the attached VNIC. Available after the attachment process is complete.
        """
        return pulumi.get(self, "vlan_tag")

    @property
    @pulumi.getter(name="vnicId")
    def vnic_id(self) -> str:
        """
        The OCID of the VNIC.
        """
        return pulumi.get(self, "vnic_id")


@pulumi.output_type
class GetVnicAttachmentsVnicAttachmentCreateVnicDetailResult(dict):
    def __init__(__self__, *,
                 assign_private_dns_record: bool,
                 assign_public_ip: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 hostname_label: str,
                 nsg_ids: Sequence[str],
                 private_ip: str,
                 skip_source_dest_check: bool,
                 subnet_id: str,
                 vlan_id: str):
        """
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str subnet_id: The OCID of the subnet to create the VNIC in.
        :param str vlan_id: The OCID of the VLAN to create the VNIC in. Creating the VNIC in a VLAN (instead of a subnet) is possible only if you are an Oracle Cloud VMware Solution customer. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        pulumi.set(__self__, "assign_private_dns_record", assign_private_dns_record)
        pulumi.set(__self__, "assign_public_ip", assign_public_ip)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "hostname_label", hostname_label)
        pulumi.set(__self__, "nsg_ids", nsg_ids)
        pulumi.set(__self__, "private_ip", private_ip)
        pulumi.set(__self__, "skip_source_dest_check", skip_source_dest_check)
        pulumi.set(__self__, "subnet_id", subnet_id)
        pulumi.set(__self__, "vlan_id", vlan_id)

    @property
    @pulumi.getter(name="assignPrivateDnsRecord")
    def assign_private_dns_record(self) -> bool:
        return pulumi.get(self, "assign_private_dns_record")

    @property
    @pulumi.getter(name="assignPublicIp")
    def assign_public_ip(self) -> str:
        return pulumi.get(self, "assign_public_ip")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter(name="hostnameLabel")
    def hostname_label(self) -> str:
        return pulumi.get(self, "hostname_label")

    @property
    @pulumi.getter(name="nsgIds")
    def nsg_ids(self) -> Sequence[str]:
        return pulumi.get(self, "nsg_ids")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> str:
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter(name="skipSourceDestCheck")
    def skip_source_dest_check(self) -> bool:
        return pulumi.get(self, "skip_source_dest_check")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> str:
        """
        The OCID of the subnet to create the VNIC in.
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter(name="vlanId")
    def vlan_id(self) -> str:
        """
        The OCID of the VLAN to create the VNIC in. Creating the VNIC in a VLAN (instead of a subnet) is possible only if you are an Oracle Cloud VMware Solution customer. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan).
        """
        return pulumi.get(self, "vlan_id")


@pulumi.output_type
class GetVolumeAttachmentsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeAttachmentsVolumeAttachmentResult(dict):
    def __init__(__self__, *,
                 attachment_type: str,
                 availability_domain: str,
                 chap_secret: str,
                 chap_username: str,
                 compartment_id: str,
                 device: str,
                 display_name: str,
                 encryption_in_transit_type: str,
                 id: str,
                 instance_id: str,
                 ipv4: str,
                 iqn: str,
                 is_agent_auto_iscsi_login_enabled: bool,
                 is_multipath: bool,
                 is_pv_encryption_in_transit_enabled: bool,
                 is_read_only: bool,
                 is_shareable: bool,
                 iscsi_login_state: str,
                 multipath_devices: Sequence['outputs.GetVolumeAttachmentsVolumeAttachmentMultipathDeviceResult'],
                 port: int,
                 state: str,
                 time_created: str,
                 use_chap: bool,
                 volume_id: str):
        """
        :param str attachment_type: The type of volume attachment.
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str chap_secret: The Challenge-Handshake-Authentication-Protocol (CHAP) secret valid for the associated CHAP user name. (Also called the "CHAP password".)
        :param str chap_username: The volume's system-generated Challenge-Handshake-Authentication-Protocol (CHAP) user name. See [RFC 1994](https://tools.ietf.org/html/rfc1994) for more on CHAP.  Example: `ocid1.volume.oc1.phx.<unique_ID>`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param str device: The device name.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param str encryption_in_transit_type: Refer the top-level definition of encryptionInTransitType. The default value is NONE.
        :param str id: The OCID of the volume attachment.
        :param str instance_id: The OCID of the instance.
        :param str ipv4: The volume's iSCSI IP address.  Example: `169.254.2.2`
        :param str iqn: The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        :param bool is_agent_auto_iscsi_login_enabled: Whether Oracle Cloud Agent is enabled perform the iSCSI login and logout commands after the volume attach or detach operations for non multipath-enabled iSCSI attachments.
        :param bool is_multipath: Whether the Iscsi or Paravirtualized attachment is multipath or not, it is not applicable to NVMe attachment.
        :param bool is_pv_encryption_in_transit_enabled: Whether in-transit encryption for the data volume's paravirtualized attachment is enabled or not.
        :param bool is_read_only: Whether the attachment was created in read-only mode.
        :param str iscsi_login_state: The iscsi login state of the volume attachment. For a Iscsi volume attachment, all iscsi sessions need to be all logged-in or logged-out to be in logged-in or logged-out state.
        :param Sequence['GetVolumeAttachmentsVolumeAttachmentMultipathDeviceArgs'] multipath_devices: A list of secondary multipath devices
        :param int port: The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        :param str state: The current state of the volume attachment.
        :param str time_created: The date and time the volume was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        :param str volume_id: The OCID of the volume.
        """
        pulumi.set(__self__, "attachment_type", attachment_type)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "chap_secret", chap_secret)
        pulumi.set(__self__, "chap_username", chap_username)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "device", device)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "encryption_in_transit_type", encryption_in_transit_type)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "iqn", iqn)
        pulumi.set(__self__, "is_agent_auto_iscsi_login_enabled", is_agent_auto_iscsi_login_enabled)
        pulumi.set(__self__, "is_multipath", is_multipath)
        pulumi.set(__self__, "is_pv_encryption_in_transit_enabled", is_pv_encryption_in_transit_enabled)
        pulumi.set(__self__, "is_read_only", is_read_only)
        pulumi.set(__self__, "is_shareable", is_shareable)
        pulumi.set(__self__, "iscsi_login_state", iscsi_login_state)
        pulumi.set(__self__, "multipath_devices", multipath_devices)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "use_chap", use_chap)
        pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="attachmentType")
    def attachment_type(self) -> str:
        """
        The type of volume attachment.
        """
        return pulumi.get(self, "attachment_type")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="chapSecret")
    def chap_secret(self) -> str:
        """
        The Challenge-Handshake-Authentication-Protocol (CHAP) secret valid for the associated CHAP user name. (Also called the "CHAP password".)
        """
        return pulumi.get(self, "chap_secret")

    @property
    @pulumi.getter(name="chapUsername")
    def chap_username(self) -> str:
        """
        The volume's system-generated Challenge-Handshake-Authentication-Protocol (CHAP) user name. See [RFC 1994](https://tools.ietf.org/html/rfc1994) for more on CHAP.  Example: `ocid1.volume.oc1.phx.<unique_ID>`
        """
        return pulumi.get(self, "chap_username")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter
    def device(self) -> str:
        """
        The device name.
        """
        return pulumi.get(self, "device")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="encryptionInTransitType")
    def encryption_in_transit_type(self) -> str:
        """
        Refer the top-level definition of encryptionInTransitType. The default value is NONE.
        """
        return pulumi.get(self, "encryption_in_transit_type")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume attachment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        """
        The OCID of the instance.
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The volume's iSCSI IP address.  Example: `169.254.2.2`
        """
        return pulumi.get(self, "ipv4")

    @property
    @pulumi.getter
    def iqn(self) -> str:
        """
        The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        """
        return pulumi.get(self, "iqn")

    @property
    @pulumi.getter(name="isAgentAutoIscsiLoginEnabled")
    def is_agent_auto_iscsi_login_enabled(self) -> bool:
        """
        Whether Oracle Cloud Agent is enabled perform the iSCSI login and logout commands after the volume attach or detach operations for non multipath-enabled iSCSI attachments.
        """
        return pulumi.get(self, "is_agent_auto_iscsi_login_enabled")

    @property
    @pulumi.getter(name="isMultipath")
    def is_multipath(self) -> bool:
        """
        Whether the Iscsi or Paravirtualized attachment is multipath or not, it is not applicable to NVMe attachment.
        """
        return pulumi.get(self, "is_multipath")

    @property
    @pulumi.getter(name="isPvEncryptionInTransitEnabled")
    def is_pv_encryption_in_transit_enabled(self) -> bool:
        """
        Whether in-transit encryption for the data volume's paravirtualized attachment is enabled or not.
        """
        return pulumi.get(self, "is_pv_encryption_in_transit_enabled")

    @property
    @pulumi.getter(name="isReadOnly")
    def is_read_only(self) -> bool:
        """
        Whether the attachment was created in read-only mode.
        """
        return pulumi.get(self, "is_read_only")

    @property
    @pulumi.getter(name="isShareable")
    def is_shareable(self) -> bool:
        return pulumi.get(self, "is_shareable")

    @property
    @pulumi.getter(name="iscsiLoginState")
    def iscsi_login_state(self) -> str:
        """
        The iscsi login state of the volume attachment. For a Iscsi volume attachment, all iscsi sessions need to be all logged-in or logged-out to be in logged-in or logged-out state.
        """
        return pulumi.get(self, "iscsi_login_state")

    @property
    @pulumi.getter(name="multipathDevices")
    def multipath_devices(self) -> Sequence['outputs.GetVolumeAttachmentsVolumeAttachmentMultipathDeviceResult']:
        """
        A list of secondary multipath devices
        """
        return pulumi.get(self, "multipath_devices")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of the volume attachment.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2016-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="useChap")
    def use_chap(self) -> bool:
        return pulumi.get(self, "use_chap")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> str:
        """
        The OCID of the volume.
        """
        return pulumi.get(self, "volume_id")


@pulumi.output_type
class GetVolumeAttachmentsVolumeAttachmentMultipathDeviceResult(dict):
    def __init__(__self__, *,
                 ipv4: str,
                 iqn: str,
                 port: int):
        """
        :param str ipv4: The volume's iSCSI IP address.  Example: `169.254.2.2`
        :param str iqn: The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        :param int port: The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        """
        pulumi.set(__self__, "ipv4", ipv4)
        pulumi.set(__self__, "iqn", iqn)
        pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def ipv4(self) -> str:
        """
        The volume's iSCSI IP address.  Example: `169.254.2.2`
        """
        return pulumi.get(self, "ipv4")

    @property
    @pulumi.getter
    def iqn(self) -> str:
        """
        The target volume's iSCSI Qualified Name in the format defined by [RFC 3720](https://tools.ietf.org/html/rfc3720#page-32).  Example: `iqn.2015-12.com.oracleiaas:40b7ee03-883f-46c6-a951-63d2841d2195`
        """
        return pulumi.get(self, "iqn")

    @property
    @pulumi.getter
    def port(self) -> int:
        """
        The volume's iSCSI port, usually port 860 or 3260.  Example: `3260`
        """
        return pulumi.get(self, "port")


@pulumi.output_type
class GetVolumeAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetVolumeBackupPoliciesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeBackupPoliciesVolumeBackupPolicyResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 destination_region: str,
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 schedules: Sequence['outputs.GetVolumeBackupPoliciesVolumeBackupPolicyScheduleResult'],
                 time_created: str):
        """
        :param str compartment_id: The OCID of the compartment. If no compartment is specified, the Oracle defined backup policies are listed.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str destination_region: The paired destination region for copying scheduled backups to. Example `us-ashburn-1`. See [Region Pairs](https://docs.cloud.oracle.com/iaas/Content/Block/Tasks/schedulingvolumebackups.htm#RegionPairs) for details about paired regions.
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the volume backup policy.
        :param Sequence['GetVolumeBackupPoliciesVolumeBackupPolicyScheduleArgs'] schedules: The collection of schedules that this policy will apply.
        :param str time_created: The date and time the volume backup policy was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "destination_region", destination_region)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "schedules", schedules)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The OCID of the compartment. If no compartment is specified, the Oracle defined backup policies are listed.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="destinationRegion")
    def destination_region(self) -> str:
        """
        The paired destination region for copying scheduled backups to. Example `us-ashburn-1`. See [Region Pairs](https://docs.cloud.oracle.com/iaas/Content/Block/Tasks/schedulingvolumebackups.htm#RegionPairs) for details about paired regions.
        """
        return pulumi.get(self, "destination_region")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup policy.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def schedules(self) -> Sequence['outputs.GetVolumeBackupPoliciesVolumeBackupPolicyScheduleResult']:
        """
        The collection of schedules that this policy will apply.
        """
        return pulumi.get(self, "schedules")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume backup policy was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetVolumeBackupPoliciesVolumeBackupPolicyScheduleResult(dict):
    def __init__(__self__, *,
                 backup_type: str,
                 day_of_month: int,
                 day_of_week: str,
                 hour_of_day: int,
                 month: str,
                 offset_seconds: int,
                 offset_type: str,
                 period: str,
                 retention_seconds: int,
                 time_zone: str):
        """
        :param str backup_type: The type of volume backup to create.
        :param int day_of_month: The day of the month to schedule the volume backup.
        :param str day_of_week: The day of the week to schedule the volume backup.
        :param int hour_of_day: The hour of the day to schedule the volume backup.
        :param str month: The month of the year to schedule the volume backup.
        :param int offset_seconds: The number of seconds that the volume backup start time should be shifted from the default interval boundaries specified by the period. The volume backup start time is the frequency start time plus the offset.
        :param str offset_type: Indicates how the offset is defined. If value is `STRUCTURED`, then `hourOfDay`, `dayOfWeek`, `dayOfMonth`, and `month` fields are used and `offsetSeconds` will be ignored in requests and users should ignore its value from the responses.
        :param str period: The volume backup frequency.
        :param int retention_seconds: How long, in seconds, to keep the volume backups created by this schedule.
        :param str time_zone: Specifies what time zone is the schedule in
        """
        pulumi.set(__self__, "backup_type", backup_type)
        pulumi.set(__self__, "day_of_month", day_of_month)
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "hour_of_day", hour_of_day)
        pulumi.set(__self__, "month", month)
        pulumi.set(__self__, "offset_seconds", offset_seconds)
        pulumi.set(__self__, "offset_type", offset_type)
        pulumi.set(__self__, "period", period)
        pulumi.set(__self__, "retention_seconds", retention_seconds)
        pulumi.set(__self__, "time_zone", time_zone)

    @property
    @pulumi.getter(name="backupType")
    def backup_type(self) -> str:
        """
        The type of volume backup to create.
        """
        return pulumi.get(self, "backup_type")

    @property
    @pulumi.getter(name="dayOfMonth")
    def day_of_month(self) -> int:
        """
        The day of the month to schedule the volume backup.
        """
        return pulumi.get(self, "day_of_month")

    @property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> str:
        """
        The day of the week to schedule the volume backup.
        """
        return pulumi.get(self, "day_of_week")

    @property
    @pulumi.getter(name="hourOfDay")
    def hour_of_day(self) -> int:
        """
        The hour of the day to schedule the volume backup.
        """
        return pulumi.get(self, "hour_of_day")

    @property
    @pulumi.getter
    def month(self) -> str:
        """
        The month of the year to schedule the volume backup.
        """
        return pulumi.get(self, "month")

    @property
    @pulumi.getter(name="offsetSeconds")
    def offset_seconds(self) -> int:
        """
        The number of seconds that the volume backup start time should be shifted from the default interval boundaries specified by the period. The volume backup start time is the frequency start time plus the offset.
        """
        return pulumi.get(self, "offset_seconds")

    @property
    @pulumi.getter(name="offsetType")
    def offset_type(self) -> str:
        """
        Indicates how the offset is defined. If value is `STRUCTURED`, then `hourOfDay`, `dayOfWeek`, `dayOfMonth`, and `month` fields are used and `offsetSeconds` will be ignored in requests and users should ignore its value from the responses.
        """
        return pulumi.get(self, "offset_type")

    @property
    @pulumi.getter
    def period(self) -> str:
        """
        The volume backup frequency.
        """
        return pulumi.get(self, "period")

    @property
    @pulumi.getter(name="retentionSeconds")
    def retention_seconds(self) -> int:
        """
        How long, in seconds, to keep the volume backups created by this schedule.
        """
        return pulumi.get(self, "retention_seconds")

    @property
    @pulumi.getter(name="timeZone")
    def time_zone(self) -> str:
        """
        Specifies what time zone is the schedule in
        """
        return pulumi.get(self, "time_zone")


@pulumi.output_type
class GetVolumeBackupPolicyAssignmentsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeBackupPolicyAssignmentsVolumeBackupPolicyAssignmentResult(dict):
    def __init__(__self__, *,
                 asset_id: str,
                 id: str,
                 policy_id: str,
                 time_created: str):
        """
        :param str asset_id: The OCID of an asset (e.g. a volume).
        :param str id: The OCID of the volume backup policy assignment.
        :param str policy_id: The OCID of the volume backup policy that has been assigned to the volume.
        :param str time_created: The date and time the volume backup policy was assigned to the volume. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        pulumi.set(__self__, "asset_id", asset_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "policy_id", policy_id)
        pulumi.set(__self__, "time_created", time_created)

    @property
    @pulumi.getter(name="assetId")
    def asset_id(self) -> str:
        """
        The OCID of an asset (e.g. a volume).
        """
        return pulumi.get(self, "asset_id")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup policy assignment.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="policyId")
    def policy_id(self) -> str:
        """
        The OCID of the volume backup policy that has been assigned to the volume.
        """
        return pulumi.get(self, "policy_id")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume backup policy was assigned to the volume. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")


@pulumi.output_type
class GetVolumeBackupsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeBackupsVolumeBackupResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 expiration_time: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 kms_key_id: str,
                 size_in_gbs: str,
                 size_in_mbs: str,
                 source_details: Sequence['outputs.GetVolumeBackupsVolumeBackupSourceDetailResult'],
                 source_type: str,
                 source_volume_backup_id: str,
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 time_request_received: str,
                 type: str,
                 unique_size_in_gbs: str,
                 unique_size_in_mbs: str,
                 volume_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str expiration_time: The date and time the volume backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for backups that were created automatically by a scheduled-backup policy. For manually created backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the volume backup.
        :param str kms_key_id: The OCID of the Vault service key which is the master encryption key for the volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        :param str size_in_gbs: The size of the volume, in GBs.
        :param str size_in_mbs: The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`.
        :param str source_type: Specifies whether the backup was created manually, or via scheduled backup policy.
        :param str source_volume_backup_id: A filter to return only resources that originated from the given source volume backup.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param Mapping[str, Any] system_tags: System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str time_created: The date and time the volume backup was created. This is the time the actual point-in-time image of the volume data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_request_received: The date and time the request to create the volume backup was received. Format defined by [RFC3339]https://tools.ietf.org/html/rfc3339.
        :param str type: The type of a volume backup. Supported values are 'FULL' or 'INCREMENTAL'.
        :param str unique_size_in_gbs: The size used by the backup, in GBs. It is typically smaller than sizeInGBs, depending on the space consumed on the volume and whether the backup is full or incremental.
        :param str unique_size_in_mbs: The size used by the backup, in MBs. It is typically smaller than sizeInMBs, depending on the space consumed on the volume and whether the backup is full or incremental. This field is deprecated. Please use uniqueSizeInGBs.
        :param str volume_id: The OCID of the volume.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "expiration_time", expiration_time)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "source_volume_backup_id", source_volume_backup_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_request_received", time_request_received)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "unique_size_in_gbs", unique_size_in_gbs)
        pulumi.set(__self__, "unique_size_in_mbs", unique_size_in_mbs)
        pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> str:
        """
        The date and time the volume backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for backups that were created automatically by a scheduled-backup policy. For manually created backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        """
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key which is the master encryption key for the volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the volume, in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`.
        """
        return pulumi.get(self, "size_in_mbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetVolumeBackupsVolumeBackupSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        Specifies whether the backup was created manually, or via scheduled backup policy.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter(name="sourceVolumeBackupId")
    def source_volume_backup_id(self) -> str:
        """
        A filter to return only resources that originated from the given source volume backup.
        """
        return pulumi.get(self, "source_volume_backup_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume backup was created. This is the time the actual point-in-time image of the volume data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeRequestReceived")
    def time_request_received(self) -> str:
        """
        The date and time the request to create the volume backup was received. Format defined by [RFC3339]https://tools.ietf.org/html/rfc3339.
        """
        return pulumi.get(self, "time_request_received")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of a volume backup. Supported values are 'FULL' or 'INCREMENTAL'.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="uniqueSizeInGbs")
    def unique_size_in_gbs(self) -> str:
        """
        The size used by the backup, in GBs. It is typically smaller than sizeInGBs, depending on the space consumed on the volume and whether the backup is full or incremental.
        """
        return pulumi.get(self, "unique_size_in_gbs")

    @property
    @pulumi.getter(name="uniqueSizeInMbs")
    def unique_size_in_mbs(self) -> str:
        """
        The size used by the backup, in MBs. It is typically smaller than sizeInMBs, depending on the space consumed on the volume and whether the backup is full or incremental. This field is deprecated. Please use uniqueSizeInGBs.
        """
        return pulumi.get(self, "unique_size_in_mbs")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> str:
        """
        The OCID of the volume.
        """
        return pulumi.get(self, "volume_id")


@pulumi.output_type
class GetVolumeBackupsVolumeBackupSourceDetailResult(dict):
    def __init__(__self__, *,
                 kms_key_id: str,
                 region: str,
                 volume_backup_id: str):
        """
        :param str kms_key_id: The OCID of the Vault service key which is the master encryption key for the volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "volume_backup_id", volume_backup_id)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key which is the master encryption key for the volume backup. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm).
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter
    def region(self) -> str:
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="volumeBackupId")
    def volume_backup_id(self) -> str:
        return pulumi.get(self, "volume_backup_id")


@pulumi.output_type
class GetVolumeBlockVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 block_volume_replica_id: str,
                 display_name: str):
        """
        :param str availability_domain: The availability domain of the block volume replica.  Example: `Uocm:PHX-AD-1`
        :param str block_volume_replica_id: The block volume replica's Oracle ID (OCID).
        :param str display_name: A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "block_volume_replica_id", block_volume_replica_id)
        pulumi.set(__self__, "display_name", display_name)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The availability domain of the block volume replica.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="blockVolumeReplicaId")
    def block_volume_replica_id(self) -> str:
        """
        The block volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "block_volume_replica_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
        """
        return pulumi.get(self, "display_name")


@pulumi.output_type
class GetVolumeGroupBackupsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeGroupBackupsVolumeGroupBackupResult(dict):
    def __init__(__self__, *,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 expiration_time: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 size_in_gbs: str,
                 size_in_mbs: str,
                 source_details: Sequence['outputs.GetVolumeGroupBackupsVolumeGroupBackupSourceDetailResult'],
                 source_type: str,
                 source_volume_group_backup_id: str,
                 state: str,
                 time_created: str,
                 time_request_received: str,
                 type: str,
                 unique_size_in_gbs: str,
                 unique_size_in_mbs: str,
                 volume_backup_ids: Sequence[str],
                 volume_group_id: str):
        """
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str expiration_time: The date and time the volume group backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for volume group backups that were created automatically by a scheduled-backup policy. For manually created volume group backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the volume group backup.
        :param str size_in_gbs: The aggregate size of the volume group backup, in GBs.
        :param str size_in_mbs: The aggregate size of the volume group backup, in MBs.
        :param str source_type: Specifies whether the volume group backup was created manually, or via scheduled backup policy.
        :param str source_volume_group_backup_id: The OCID of the source volume group backup.
        :param str state: The current state of a volume group backup.
        :param str time_created: The date and time the volume group backup was created. This is the time the actual point-in-time image of the volume group data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_request_received: The date and time the request to create the volume group backup was received. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str type: The type of backup.
        :param str unique_size_in_gbs: The aggregate size used by the volume group backup, in GBs.  It is typically smaller than `size_in_gbs`, depending on the space consumed on the volume group and whether the volume backup is full or incremental.
        :param str unique_size_in_mbs: The aggregate size used by the volume group backup, in MBs.  It is typically smaller than `size_in_mbs`, depending on the space consumed on the volume group and whether the volume backup is full or incremental.
        :param Sequence[str] volume_backup_ids: OCIDs for the volume backups in this volume group backup.
        :param str volume_group_id: The OCID of the volume group.
        """
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "expiration_time", expiration_time)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "source_volume_group_backup_id", source_volume_group_backup_id)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_request_received", time_request_received)
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "unique_size_in_gbs", unique_size_in_gbs)
        pulumi.set(__self__, "unique_size_in_mbs", unique_size_in_mbs)
        pulumi.set(__self__, "volume_backup_ids", volume_backup_ids)
        pulumi.set(__self__, "volume_group_id", volume_group_id)

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> str:
        """
        The date and time the volume group backup will expire and be automatically deleted. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). This parameter will always be present for volume group backups that were created automatically by a scheduled-backup policy. For manually created volume group backups, it will be absent, signifying that there is no expiration time and the backup will last forever until manually deleted.
        """
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the volume group backup.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The aggregate size of the volume group backup, in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The aggregate size of the volume group backup, in MBs.
        """
        return pulumi.get(self, "size_in_mbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetVolumeGroupBackupsVolumeGroupBackupSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        Specifies whether the volume group backup was created manually, or via scheduled backup policy.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter(name="sourceVolumeGroupBackupId")
    def source_volume_group_backup_id(self) -> str:
        """
        The OCID of the source volume group backup.
        """
        return pulumi.get(self, "source_volume_group_backup_id")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The current state of a volume group backup.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume group backup was created. This is the time the actual point-in-time image of the volume group data was taken. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeRequestReceived")
    def time_request_received(self) -> str:
        """
        The date and time the request to create the volume group backup was received. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_request_received")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of backup.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="uniqueSizeInGbs")
    def unique_size_in_gbs(self) -> str:
        """
        The aggregate size used by the volume group backup, in GBs.  It is typically smaller than `size_in_gbs`, depending on the space consumed on the volume group and whether the volume backup is full or incremental.
        """
        return pulumi.get(self, "unique_size_in_gbs")

    @property
    @pulumi.getter(name="uniqueSizeInMbs")
    def unique_size_in_mbs(self) -> str:
        """
        The aggregate size used by the volume group backup, in MBs.  It is typically smaller than `size_in_mbs`, depending on the space consumed on the volume group and whether the volume backup is full or incremental.
        """
        return pulumi.get(self, "unique_size_in_mbs")

    @property
    @pulumi.getter(name="volumeBackupIds")
    def volume_backup_ids(self) -> Sequence[str]:
        """
        OCIDs for the volume backups in this volume group backup.
        """
        return pulumi.get(self, "volume_backup_ids")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> str:
        """
        The OCID of the volume group.
        """
        return pulumi.get(self, "volume_group_id")


@pulumi.output_type
class GetVolumeGroupBackupsVolumeGroupBackupSourceDetailResult(dict):
    def __init__(__self__, *,
                 kms_key_id: str,
                 region: str,
                 volume_group_backup_id: str):
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "volume_group_backup_id", volume_group_backup_id)

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter
    def region(self) -> str:
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="volumeGroupBackupId")
    def volume_group_backup_id(self) -> str:
        return pulumi.get(self, "volume_group_backup_id")


@pulumi.output_type
class GetVolumeGroupReplicaMemberReplicaResult(dict):
    def __init__(__self__, *,
                 membership_state: str,
                 volume_replica_id: str):
        """
        :param str membership_state: Membership state of the volume replica in relation to the volume group replica.
        :param str volume_replica_id: The volume replica ID.
        """
        pulumi.set(__self__, "membership_state", membership_state)
        pulumi.set(__self__, "volume_replica_id", volume_replica_id)

    @property
    @pulumi.getter(name="membershipState")
    def membership_state(self) -> str:
        """
        Membership state of the volume replica in relation to the volume group replica.
        """
        return pulumi.get(self, "membership_state")

    @property
    @pulumi.getter(name="volumeReplicaId")
    def volume_replica_id(self) -> str:
        """
        The volume replica ID.
        """
        return pulumi.get(self, "volume_replica_id")


@pulumi.output_type
class GetVolumeGroupReplicasFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeGroupReplicasVolumeGroupReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 member_replicas: Sequence['outputs.GetVolumeGroupReplicasVolumeGroupReplicaMemberReplicaResult'],
                 size_in_gbs: str,
                 state: str,
                 time_created: str,
                 time_last_synced: str,
                 volume_group_id: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID for the volume group replica.
        :param Sequence['GetVolumeGroupReplicasVolumeGroupReplicaMemberReplicaArgs'] member_replicas: Volume replicas within this volume group replica.
        :param str size_in_gbs: The aggregate size of the volume group replica in GBs.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the volume group replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str time_last_synced: The date and time the volume group replica was last synced from the source volume group. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str volume_group_id: The OCID of the source volume group.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "member_replicas", member_replicas)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "time_last_synced", time_last_synced)
        pulumi.set(__self__, "volume_group_id", volume_group_id)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID for the volume group replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="memberReplicas")
    def member_replicas(self) -> Sequence['outputs.GetVolumeGroupReplicasVolumeGroupReplicaMemberReplicaResult']:
        """
        Volume replicas within this volume group replica.
        """
        return pulumi.get(self, "member_replicas")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The aggregate size of the volume group replica in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume group replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="timeLastSynced")
    def time_last_synced(self) -> str:
        """
        The date and time the volume group replica was last synced from the source volume group. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_last_synced")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> str:
        """
        The OCID of the source volume group.
        """
        return pulumi.get(self, "volume_group_id")


@pulumi.output_type
class GetVolumeGroupReplicasVolumeGroupReplicaMemberReplicaResult(dict):
    def __init__(__self__, *,
                 membership_state: str,
                 volume_replica_id: str):
        """
        :param str membership_state: Membership state of the volume replica in relation to the volume group replica.
        :param str volume_replica_id: The volume replica ID.
        """
        pulumi.set(__self__, "membership_state", membership_state)
        pulumi.set(__self__, "volume_replica_id", volume_replica_id)

    @property
    @pulumi.getter(name="membershipState")
    def membership_state(self) -> str:
        """
        Membership state of the volume replica in relation to the volume group replica.
        """
        return pulumi.get(self, "membership_state")

    @property
    @pulumi.getter(name="volumeReplicaId")
    def volume_replica_id(self) -> str:
        """
        The volume replica ID.
        """
        return pulumi.get(self, "volume_replica_id")


@pulumi.output_type
class GetVolumeGroupsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumeGroupsVolumeGroupResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 backup_policy_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_hydrated: bool,
                 preserve_volume_replica: bool,
                 size_in_gbs: str,
                 size_in_mbs: str,
                 source_details: Sequence['outputs.GetVolumeGroupsVolumeGroupSourceDetailResult'],
                 state: str,
                 time_created: str,
                 volume_group_replicas: Sequence['outputs.GetVolumeGroupsVolumeGroupVolumeGroupReplicaResult'],
                 volume_group_replicas_deletion: bool,
                 volume_ids: Sequence[str]):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID for the volume group.
        :param bool is_hydrated: Specifies whether the newly created cloned volume group's data has finished copying from the source volume group or backup.
        :param str size_in_gbs: The aggregate size of the volume group in GBs.
        :param str size_in_mbs: The aggregate size of the volume group in MBs.
        :param Sequence['GetVolumeGroupsVolumeGroupSourceDetailArgs'] source_details: Specifies the source for a volume group.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param str time_created: The date and time the volume group was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param Sequence['GetVolumeGroupsVolumeGroupVolumeGroupReplicaArgs'] volume_group_replicas: The list of volume group replicas of this volume group.
        :param Sequence[str] volume_ids: OCIDs for the volumes in this volume group.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_hydrated", is_hydrated)
        pulumi.set(__self__, "preserve_volume_replica", preserve_volume_replica)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "volume_group_replicas", volume_group_replicas)
        pulumi.set(__self__, "volume_group_replicas_deletion", volume_group_replicas_deletion)
        pulumi.set(__self__, "volume_ids", volume_ids)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="backupPolicyId")
    def backup_policy_id(self) -> str:
        return pulumi.get(self, "backup_policy_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID for the volume group.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isHydrated")
    def is_hydrated(self) -> bool:
        """
        Specifies whether the newly created cloned volume group's data has finished copying from the source volume group or backup.
        """
        return pulumi.get(self, "is_hydrated")

    @property
    @pulumi.getter(name="preserveVolumeReplica")
    def preserve_volume_replica(self) -> bool:
        return pulumi.get(self, "preserve_volume_replica")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The aggregate size of the volume group in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The aggregate size of the volume group in MBs.
        """
        return pulumi.get(self, "size_in_mbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetVolumeGroupsVolumeGroupSourceDetailResult']:
        """
        Specifies the source for a volume group.
        """
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume group was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="volumeGroupReplicas")
    def volume_group_replicas(self) -> Sequence['outputs.GetVolumeGroupsVolumeGroupVolumeGroupReplicaResult']:
        """
        The list of volume group replicas of this volume group.
        """
        return pulumi.get(self, "volume_group_replicas")

    @property
    @pulumi.getter(name="volumeGroupReplicasDeletion")
    def volume_group_replicas_deletion(self) -> bool:
        return pulumi.get(self, "volume_group_replicas_deletion")

    @property
    @pulumi.getter(name="volumeIds")
    def volume_ids(self) -> Sequence[str]:
        """
        OCIDs for the volumes in this volume group.
        """
        return pulumi.get(self, "volume_ids")


@pulumi.output_type
class GetVolumeGroupsVolumeGroupSourceDetailResult(dict):
    def __init__(__self__, *,
                 type: str,
                 volume_group_backup_id: str,
                 volume_group_id: str,
                 volume_group_replica_id: str,
                 volume_ids: Sequence[str]):
        """
        :param str type: The type can be one of these values: `volumeGroupBackupId`, `volumeGroupId`, `volumeIds`
        :param str volume_group_backup_id: The OCID of the volume group backup to restore from, if the type is `volumeGroupBackup`
        :param str volume_group_id: The OCID of the volume group to clone from, if the type is `volumeGroup`
        :param str volume_group_replica_id: The volume group replica's Oracle ID (OCID).
        :param Sequence[str] volume_ids: OCIDs for the volumes in this volume group.
        """
        pulumi.set(__self__, "type", type)
        pulumi.set(__self__, "volume_group_backup_id", volume_group_backup_id)
        pulumi.set(__self__, "volume_group_id", volume_group_id)
        pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)
        pulumi.set(__self__, "volume_ids", volume_ids)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `volumeGroupBackupId`, `volumeGroupId`, `volumeIds`
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="volumeGroupBackupId")
    def volume_group_backup_id(self) -> str:
        """
        The OCID of the volume group backup to restore from, if the type is `volumeGroupBackup`
        """
        return pulumi.get(self, "volume_group_backup_id")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> str:
        """
        The OCID of the volume group to clone from, if the type is `volumeGroup`
        """
        return pulumi.get(self, "volume_group_id")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> str:
        """
        The volume group replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "volume_group_replica_id")

    @property
    @pulumi.getter(name="volumeIds")
    def volume_ids(self) -> Sequence[str]:
        """
        OCIDs for the volumes in this volume group.
        """
        return pulumi.get(self, "volume_ids")


@pulumi.output_type
class GetVolumeGroupsVolumeGroupVolumeGroupReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 display_name: str,
                 volume_group_replica_id: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str volume_group_replica_id: The volume group replica's Oracle ID (OCID).
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "volume_group_replica_id", volume_group_replica_id)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="volumeGroupReplicaId")
    def volume_group_replica_id(self) -> str:
        """
        The volume group replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "volume_group_replica_id")


@pulumi.output_type
class GetVolumeSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the block volume replica.
        :param str type: The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the block volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetVolumesFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVolumesVolumeResult(dict):
    def __init__(__self__, *,
                 auto_tuned_vpus_per_gb: str,
                 autotune_policies: Sequence['outputs.GetVolumesVolumeAutotunePolicyResult'],
                 availability_domain: str,
                 backup_policy_id: str,
                 block_volume_replicas: Sequence['outputs.GetVolumesVolumeBlockVolumeReplicaResult'],
                 block_volume_replicas_deletion: bool,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_auto_tune_enabled: bool,
                 is_hydrated: bool,
                 kms_key_id: str,
                 size_in_gbs: str,
                 size_in_mbs: str,
                 source_details: Sequence['outputs.GetVolumesVolumeSourceDetailResult'],
                 state: str,
                 system_tags: Mapping[str, Any],
                 time_created: str,
                 volume_backup_id: str,
                 volume_group_id: str,
                 vpus_per_gb: str):
        """
        :param str auto_tuned_vpus_per_gb: The number of Volume Performance Units per GB that this volume is effectively tuned to.
        :param Sequence['GetVolumesVolumeAutotunePolicyArgs'] autotune_policies: The list of autotune policies enabled for this volume.
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param Sequence['GetVolumesVolumeBlockVolumeReplicaArgs'] block_volume_replicas: The list of block volume replicas of this volume.
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The OCID of the block volume replica.
        :param bool is_auto_tune_enabled: Specifies whether the auto-tune performance is enabled for this volume. This field is deprecated. Use the `DetachedVolumeAutotunePolicy` instead to enable the volume for detached autotune.
        :param bool is_hydrated: Specifies whether the cloned volume's data has finished copying from the source volume or backup.
        :param str kms_key_id: The OCID of the Vault service key which is the master encryption key for the volume.
        :param str size_in_gbs: The size of the volume in GBs.
        :param str size_in_mbs: The size of the volume in MBs. This field is deprecated. Use `size_in_gbs` instead.
        :param str state: A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        :param Mapping[str, Any] system_tags: System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        :param str time_created: The date and time the volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        :param str volume_group_id: The OCID of the volume group.
        :param str vpus_per_gb: The number of volume performance units (VPUs) that will be applied to this volume per GB, representing 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.
        """
        pulumi.set(__self__, "auto_tuned_vpus_per_gb", auto_tuned_vpus_per_gb)
        pulumi.set(__self__, "autotune_policies", autotune_policies)
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "backup_policy_id", backup_policy_id)
        pulumi.set(__self__, "block_volume_replicas", block_volume_replicas)
        pulumi.set(__self__, "block_volume_replicas_deletion", block_volume_replicas_deletion)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_auto_tune_enabled", is_auto_tune_enabled)
        pulumi.set(__self__, "is_hydrated", is_hydrated)
        pulumi.set(__self__, "kms_key_id", kms_key_id)
        pulumi.set(__self__, "size_in_gbs", size_in_gbs)
        pulumi.set(__self__, "size_in_mbs", size_in_mbs)
        pulumi.set(__self__, "source_details", source_details)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "system_tags", system_tags)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "volume_backup_id", volume_backup_id)
        pulumi.set(__self__, "volume_group_id", volume_group_id)
        pulumi.set(__self__, "vpus_per_gb", vpus_per_gb)

    @property
    @pulumi.getter(name="autoTunedVpusPerGb")
    def auto_tuned_vpus_per_gb(self) -> str:
        """
        The number of Volume Performance Units per GB that this volume is effectively tuned to.
        """
        return pulumi.get(self, "auto_tuned_vpus_per_gb")

    @property
    @pulumi.getter(name="autotunePolicies")
    def autotune_policies(self) -> Sequence['outputs.GetVolumesVolumeAutotunePolicyResult']:
        """
        The list of autotune policies enabled for this volume.
        """
        return pulumi.get(self, "autotune_policies")

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="backupPolicyId")
    def backup_policy_id(self) -> str:
        return pulumi.get(self, "backup_policy_id")

    @property
    @pulumi.getter(name="blockVolumeReplicas")
    def block_volume_replicas(self) -> Sequence['outputs.GetVolumesVolumeBlockVolumeReplicaResult']:
        """
        The list of block volume replicas of this volume.
        """
        return pulumi.get(self, "block_volume_replicas")

    @property
    @pulumi.getter(name="blockVolumeReplicasDeletion")
    def block_volume_replicas_deletion(self) -> bool:
        return pulumi.get(self, "block_volume_replicas_deletion")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the block volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isAutoTuneEnabled")
    def is_auto_tune_enabled(self) -> bool:
        """
        Specifies whether the auto-tune performance is enabled for this volume. This field is deprecated. Use the `DetachedVolumeAutotunePolicy` instead to enable the volume for detached autotune.
        """
        return pulumi.get(self, "is_auto_tune_enabled")

    @property
    @pulumi.getter(name="isHydrated")
    def is_hydrated(self) -> bool:
        """
        Specifies whether the cloned volume's data has finished copying from the source volume or backup.
        """
        return pulumi.get(self, "is_hydrated")

    @property
    @pulumi.getter(name="kmsKeyId")
    def kms_key_id(self) -> str:
        """
        The OCID of the Vault service key which is the master encryption key for the volume.
        """
        return pulumi.get(self, "kms_key_id")

    @property
    @pulumi.getter(name="sizeInGbs")
    def size_in_gbs(self) -> str:
        """
        The size of the volume in GBs.
        """
        return pulumi.get(self, "size_in_gbs")

    @property
    @pulumi.getter(name="sizeInMbs")
    def size_in_mbs(self) -> str:
        """
        The size of the volume in MBs. This field is deprecated. Use `size_in_gbs` instead.
        """
        return pulumi.get(self, "size_in_mbs")

    @property
    @pulumi.getter(name="sourceDetails")
    def source_details(self) -> Sequence['outputs.GetVolumesVolumeSourceDetailResult']:
        return pulumi.get(self, "source_details")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to only return resources that match the given lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="systemTags")
    def system_tags(self) -> Mapping[str, Any]:
        """
        System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}`
        """
        return pulumi.get(self, "system_tags")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="volumeBackupId")
    def volume_backup_id(self) -> str:
        return pulumi.get(self, "volume_backup_id")

    @property
    @pulumi.getter(name="volumeGroupId")
    def volume_group_id(self) -> str:
        """
        The OCID of the volume group.
        """
        return pulumi.get(self, "volume_group_id")

    @property
    @pulumi.getter(name="vpusPerGb")
    def vpus_per_gb(self) -> str:
        """
        The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information.
        """
        return pulumi.get(self, "vpus_per_gb")


@pulumi.output_type
class GetVolumesVolumeAutotunePolicyResult(dict):
    def __init__(__self__, *,
                 autotune_type: str,
                 max_vpus_per_gb: str):
        """
        :param str autotune_type: This specifies the type of autotunes supported by OCI.
        :param str max_vpus_per_gb: This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        pulumi.set(__self__, "autotune_type", autotune_type)
        pulumi.set(__self__, "max_vpus_per_gb", max_vpus_per_gb)

    @property
    @pulumi.getter(name="autotuneType")
    def autotune_type(self) -> str:
        """
        This specifies the type of autotunes supported by OCI.
        """
        return pulumi.get(self, "autotune_type")

    @property
    @pulumi.getter(name="maxVpusPerGb")
    def max_vpus_per_gb(self) -> str:
        """
        This will be the maximum VPUs/GB performance level that the volume will be auto-tuned temporarily based on performance monitoring.
        """
        return pulumi.get(self, "max_vpus_per_gb")


@pulumi.output_type
class GetVolumesVolumeBlockVolumeReplicaResult(dict):
    def __init__(__self__, *,
                 availability_domain: str,
                 block_volume_replica_id: str,
                 display_name: str):
        """
        :param str availability_domain: The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        :param str block_volume_replica_id: The block volume replica's Oracle ID (OCID).
        :param str display_name: A filter to return only resources that match the given display name exactly.
        """
        pulumi.set(__self__, "availability_domain", availability_domain)
        pulumi.set(__self__, "block_volume_replica_id", block_volume_replica_id)
        pulumi.set(__self__, "display_name", display_name)

    @property
    @pulumi.getter(name="availabilityDomain")
    def availability_domain(self) -> str:
        """
        The name of the availability domain.  Example: `Uocm:PHX-AD-1`
        """
        return pulumi.get(self, "availability_domain")

    @property
    @pulumi.getter(name="blockVolumeReplicaId")
    def block_volume_replica_id(self) -> str:
        """
        The block volume replica's Oracle ID (OCID).
        """
        return pulumi.get(self, "block_volume_replica_id")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")


@pulumi.output_type
class GetVolumesVolumeSourceDetailResult(dict):
    def __init__(__self__, *,
                 id: str,
                 type: str):
        """
        :param str id: The OCID of the block volume replica.
        :param str type: The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The OCID of the block volume replica.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class GetVtapsFilterResult(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 regex: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if regex is not None:
            pulumi.set(__self__, "regex", regex)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def regex(self) -> Optional[bool]:
        return pulumi.get(self, "regex")


@pulumi.output_type
class GetVtapsVtapResult(dict):
    def __init__(__self__, *,
                 capture_filter_id: str,
                 compartment_id: str,
                 defined_tags: Mapping[str, Any],
                 display_name: str,
                 encapsulation_protocol: str,
                 freeform_tags: Mapping[str, Any],
                 id: str,
                 is_vtap_enabled: bool,
                 lifecycle_state_details: str,
                 max_packet_size: int,
                 source_id: str,
                 source_private_endpoint_ip: str,
                 source_private_endpoint_subnet_id: str,
                 source_type: str,
                 state: str,
                 target_id: str,
                 target_ip: str,
                 target_type: str,
                 time_created: str,
                 traffic_mode: str,
                 vcn_id: str,
                 vxlan_network_identifier: str):
        """
        :param str capture_filter_id: The capture filter's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param str compartment_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        :param Mapping[str, Any] defined_tags: Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        :param str display_name: A filter to return only resources that match the given display name exactly.
        :param str encapsulation_protocol: Defines an encapsulation header type for the VTAP's mirrored traffic.
        :param Mapping[str, Any] freeform_tags: Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        :param str id: The VTAP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        :param bool is_vtap_enabled: Indicates whether to list all VTAPs or only running VTAPs.
               * When `FALSE`, lists ALL running and stopped VTAPs.
               * When `TRUE`, lists only running VTAPs (VTAPs where isVtapEnabled = `TRUE`).
        :param str lifecycle_state_details: The VTAP's current running state.
        :param int max_packet_size: The maximum size of the packets to be included in the filter.
        :param str source_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the source point where packets are captured.
        :param str source_private_endpoint_ip: The IP Address of the source private endpoint.
        :param str source_private_endpoint_subnet_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet that source private endpoint belongs to.
        :param str source_type: The source type for the VTAP.
        :param str state: A filter to return only resources that match the given VTAP administrative lifecycle state. The state value is case-insensitive.
        :param str target_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VTAP target.
        :param str target_ip: The IP address of the VTAP target.
        :param str target_type: The target type for the VTAP.
        :param str time_created: The date and time the VTAP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2020-08-25T21:10:29.600Z`
        :param str traffic_mode: Used to control the priority of traffic. It is an optional field. If it not passed, the value is DEFAULT
        :param str vcn_id: The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        :param str vxlan_network_identifier: The virtual extensible LAN (VXLAN) network identifier (or VXLAN segment ID) that uniquely identifies the VXLAN.
        """
        pulumi.set(__self__, "capture_filter_id", capture_filter_id)
        pulumi.set(__self__, "compartment_id", compartment_id)
        pulumi.set(__self__, "defined_tags", defined_tags)
        pulumi.set(__self__, "display_name", display_name)
        pulumi.set(__self__, "encapsulation_protocol", encapsulation_protocol)
        pulumi.set(__self__, "freeform_tags", freeform_tags)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "is_vtap_enabled", is_vtap_enabled)
        pulumi.set(__self__, "lifecycle_state_details", lifecycle_state_details)
        pulumi.set(__self__, "max_packet_size", max_packet_size)
        pulumi.set(__self__, "source_id", source_id)
        pulumi.set(__self__, "source_private_endpoint_ip", source_private_endpoint_ip)
        pulumi.set(__self__, "source_private_endpoint_subnet_id", source_private_endpoint_subnet_id)
        pulumi.set(__self__, "source_type", source_type)
        pulumi.set(__self__, "state", state)
        pulumi.set(__self__, "target_id", target_id)
        pulumi.set(__self__, "target_ip", target_ip)
        pulumi.set(__self__, "target_type", target_type)
        pulumi.set(__self__, "time_created", time_created)
        pulumi.set(__self__, "traffic_mode", traffic_mode)
        pulumi.set(__self__, "vcn_id", vcn_id)
        pulumi.set(__self__, "vxlan_network_identifier", vxlan_network_identifier)

    @property
    @pulumi.getter(name="captureFilterId")
    def capture_filter_id(self) -> str:
        """
        The capture filter's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "capture_filter_id")

    @property
    @pulumi.getter(name="compartmentId")
    def compartment_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment.
        """
        return pulumi.get(self, "compartment_id")

    @property
    @pulumi.getter(name="definedTags")
    def defined_tags(self) -> Mapping[str, Any]:
        """
        Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Operations.CostCenter": "42"}`
        """
        return pulumi.get(self, "defined_tags")

    @property
    @pulumi.getter(name="displayName")
    def display_name(self) -> str:
        """
        A filter to return only resources that match the given display name exactly.
        """
        return pulumi.get(self, "display_name")

    @property
    @pulumi.getter(name="encapsulationProtocol")
    def encapsulation_protocol(self) -> str:
        """
        Defines an encapsulation header type for the VTAP's mirrored traffic.
        """
        return pulumi.get(self, "encapsulation_protocol")

    @property
    @pulumi.getter(name="freeformTags")
    def freeform_tags(self) -> Mapping[str, Any]:
        """
        Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).  Example: `{"Department": "Finance"}`
        """
        return pulumi.get(self, "freeform_tags")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The VTAP's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)).
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="isVtapEnabled")
    def is_vtap_enabled(self) -> bool:
        """
        Indicates whether to list all VTAPs or only running VTAPs.
        * When `FALSE`, lists ALL running and stopped VTAPs.
        * When `TRUE`, lists only running VTAPs (VTAPs where isVtapEnabled = `TRUE`).
        """
        return pulumi.get(self, "is_vtap_enabled")

    @property
    @pulumi.getter(name="lifecycleStateDetails")
    def lifecycle_state_details(self) -> str:
        """
        The VTAP's current running state.
        """
        return pulumi.get(self, "lifecycle_state_details")

    @property
    @pulumi.getter(name="maxPacketSize")
    def max_packet_size(self) -> int:
        """
        The maximum size of the packets to be included in the filter.
        """
        return pulumi.get(self, "max_packet_size")

    @property
    @pulumi.getter(name="sourceId")
    def source_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the source point where packets are captured.
        """
        return pulumi.get(self, "source_id")

    @property
    @pulumi.getter(name="sourcePrivateEndpointIp")
    def source_private_endpoint_ip(self) -> str:
        """
        The IP Address of the source private endpoint.
        """
        return pulumi.get(self, "source_private_endpoint_ip")

    @property
    @pulumi.getter(name="sourcePrivateEndpointSubnetId")
    def source_private_endpoint_subnet_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet that source private endpoint belongs to.
        """
        return pulumi.get(self, "source_private_endpoint_subnet_id")

    @property
    @pulumi.getter(name="sourceType")
    def source_type(self) -> str:
        """
        The source type for the VTAP.
        """
        return pulumi.get(self, "source_type")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        A filter to return only resources that match the given VTAP administrative lifecycle state. The state value is case-insensitive.
        """
        return pulumi.get(self, "state")

    @property
    @pulumi.getter(name="targetId")
    def target_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VTAP target.
        """
        return pulumi.get(self, "target_id")

    @property
    @pulumi.getter(name="targetIp")
    def target_ip(self) -> str:
        """
        The IP address of the VTAP target.
        """
        return pulumi.get(self, "target_ip")

    @property
    @pulumi.getter(name="targetType")
    def target_type(self) -> str:
        """
        The target type for the VTAP.
        """
        return pulumi.get(self, "target_type")

    @property
    @pulumi.getter(name="timeCreated")
    def time_created(self) -> str:
        """
        The date and time the VTAP was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339).  Example: `2020-08-25T21:10:29.600Z`
        """
        return pulumi.get(self, "time_created")

    @property
    @pulumi.getter(name="trafficMode")
    def traffic_mode(self) -> str:
        """
        Used to control the priority of traffic. It is an optional field. If it not passed, the value is DEFAULT
        """
        return pulumi.get(self, "traffic_mode")

    @property
    @pulumi.getter(name="vcnId")
    def vcn_id(self) -> str:
        """
        The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the VCN.
        """
        return pulumi.get(self, "vcn_id")

    @property
    @pulumi.getter(name="vxlanNetworkIdentifier")
    def vxlan_network_identifier(self) -> str:
        """
        The virtual extensible LAN (VXLAN) network identifier (or VXLAN segment ID) that uniquely identifies the VXLAN.
        """
        return pulumi.get(self, "vxlan_network_identifier")


