// This is an automatically generated code sample. 
// To make this code sample work in your Oracle Cloud tenancy, 
// please replace the values for any parameters whose current values do not fit
// your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and 
// boolean, number, and enum parameters with values not fitting your use case).

import * as core from "oci-core";
import common = require("oci-common");

// Create a default authentication provider that uses the DEFAULT
// profile in the configuration file.
// Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file.

const provider: common.ConfigFileAuthenticationDetailsProvider = new common.ConfigFileAuthenticationDetailsProvider();

(async () => {
    try {
     // Create a service client
     const client = new core.ComputeManagementClient({ authenticationDetailsProvider: provider });

     // Create a request and dependent object(s).
	const  instanceConfigurationInstanceDetails = {
		instanceType: "instance_options",		options: [{
				instanceType: "compute",				blockVolumes: [{
						attachDetails: {
							type: "iscsi",							useChap: true,
							displayName: "EXAMPLE-displayName-Value",
							isReadOnly: true,
							device: "EXAMPLE-device-Value",
							isShareable: true

							}
,
						createDetails: {
							availabilityDomain: "EXAMPLE-availabilityDomain-Value",
							backupPolicyId: "ocid1.test.oc1..<unique_ID>EXAMPLE-backupPolicyId-Value",
							compartmentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value",
							isAutoTuneEnabled: false,
							blockVolumeReplicas: [{
									displayName: "EXAMPLE-displayName-Value",
									availabilityDomain: "EXAMPLE-availabilityDomain-Value",

									}
									],
							definedTags: {
								EXAMPLE_KEY_fTHzT :{
									EXAMPLE_KEY_UAbFd :"EXAMPLE--Value"
									}
								},
							displayName: "EXAMPLE-displayName-Value",
							freeformTags: {
								EXAMPLE_KEY_vyNlK :"EXAMPLE_VALUE_nlhXEqyf6dgXFSrvmYqd"
								},
							kmsKeyId: "ocid1.test.oc1..<unique_ID>EXAMPLE-kmsKeyId-Value",
							vpusPerGB: 829,
							clusterPlacementGroupId: "ocid1.test.oc1..<unique_ID>EXAMPLE-clusterPlacementGroupId-Value",
							sizeInGBs: 104,
							sourceDetails: {
								type: "volume",								id: "ocid1.test.oc1..<unique_ID>EXAMPLE-id-Value"

								}
,
							autotunePolicies: [{
									autotuneType: "DETACHED_VOLUME",
									}
									],

							}
,
						volumeId: "ocid1.test.oc1..<unique_ID>EXAMPLE-volumeId-Value",

						}
						],
				launchDetails: {
					availabilityDomain: "EXAMPLE-availabilityDomain-Value",
					capacityReservationId: "ocid1.test.oc1..<unique_ID>EXAMPLE-capacityReservationId-Value",
					compartmentId: "ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value",
					clusterPlacementGroupId: "ocid1.test.oc1..<unique_ID>EXAMPLE-clusterPlacementGroupId-Value",
					createVnicDetails: {
						assignIpv6Ip: true,
						assignPublicIp: true,
						assignPrivateDnsRecord: true,
						definedTags: {
							EXAMPLE_KEY_ydjSs :{
								EXAMPLE_KEY_HKPmv :"EXAMPLE--Value"
								}
							},
						displayName: "EXAMPLE-displayName-Value",
						freeformTags: {
							EXAMPLE_KEY_0QAqO :"EXAMPLE_VALUE_K7bYda4gv4x3hyM7OH3n"
							},
						ipv6AddressIpv6SubnetCidrPairDetails: [{
								ipv6SubnetCidr: "EXAMPLE-ipv6SubnetCidr-Value",
								ipv6Address: "EXAMPLE-ipv6Address-Value",

								}
								],
						hostnameLabel: "EXAMPLE-hostnameLabel-Value",
						nsgIds: ["EXAMPLE--Value"								],
						privateIp: "EXAMPLE-privateIp-Value",
						skipSourceDestCheck: false,
						subnetId: "ocid1.test.oc1..<unique_ID>EXAMPLE-subnetId-Value",

						}
,
					definedTags: {
						EXAMPLE_KEY_LaIos :{
							EXAMPLE_KEY_vpmiX :"EXAMPLE--Value"
							}
						},
					displayName: "EXAMPLE-displayName-Value",
					extendedMetadata: {
						EXAMPLE_KEY_zVoxX :"EXAMPLE--Value"
						},
					freeformTags: {
						EXAMPLE_KEY_Vlm93 :"EXAMPLE_VALUE_GHeX1b8zfgplw7joF1HV"
						},
					ipxeScript: "EXAMPLE-ipxeScript-Value",
					metadata: {
						EXAMPLE_KEY_lq7f5 :"EXAMPLE_VALUE_rb74gEKwRx8yNbMi9ggd"
						},
					shape: "EXAMPLE-shape-Value",
					shapeConfig: {
						ocpus: 9662.25,
						vcpus: 906,
						memoryInGBs: 5982.0015,
						baselineOcpuUtilization: core.models.InstanceConfigurationLaunchInstanceShapeConfigDetails.BaselineOcpuUtilization.Baseline18,
						nvmes: 1,

						}
,
					platformConfig: {
						type: "INTEL_ICELAKE_BM",						numaNodesPerSocket: core.models.InstanceConfigurationIntelIcelakeBmLaunchInstancePlatformConfig.NumaNodesPerSocket.Nps2,
						isSymmetricMultiThreadingEnabled: true,
						isInputOutputMemoryManagementUnitEnabled: true,
						percentageOfCoresEnabled: 70,
						configMap: {
							EXAMPLE_KEY_Br3sY :"EXAMPLE_VALUE_73WjtXSjw41ZTb4euho4"
							},
						isSecureBootEnabled: false,
						isTrustedPlatformModuleEnabled: true,
						isMeasuredBootEnabled: false,
						isMemoryEncryptionEnabled: false

						}
,
					sourceDetails: {
						sourceType: "bootVolume",						bootVolumeId: "ocid1.test.oc1..<unique_ID>EXAMPLE-bootVolumeId-Value"

						}
,
					faultDomain: "EXAMPLE-faultDomain-Value",
					dedicatedVmHostId: "ocid1.test.oc1..<unique_ID>EXAMPLE-dedicatedVmHostId-Value",
					launchMode: core.models.InstanceConfigurationLaunchInstanceDetails.LaunchMode.Paravirtualized,
					launchOptions: {
						bootVolumeType: core.models.InstanceConfigurationLaunchOptions.BootVolumeType.Scsi,
						firmware: core.models.InstanceConfigurationLaunchOptions.Firmware.Uefi64,
						networkType: core.models.InstanceConfigurationLaunchOptions.NetworkType.Vfio,
						remoteDataVolumeType: core.models.InstanceConfigurationLaunchOptions.RemoteDataVolumeType.Iscsi,
						isPvEncryptionInTransitEnabled: true,
						isConsistentVolumeNamingEnabled: false,

						}
,
					agentConfig: {
						isMonitoringDisabled: true,
						isManagementDisabled: false,
						areAllPluginsDisabled: false,
						pluginsConfig: [{
								name: "EXAMPLE-name-Value",
								desiredState: core.models.InstanceAgentPluginConfigDetails.DesiredState.Enabled,

								}
								],

						}
,
					isPvEncryptionInTransitEnabled: true,
					preferredMaintenanceAction: core.models.InstanceConfigurationLaunchInstanceDetails.PreferredMaintenanceAction.Reboot,
					instanceOptions: {
						areLegacyImdsEndpointsDisabled: true,

						}
,
					availabilityConfig: {
						isLiveMigrationPreferred: false,
						recoveryAction: core.models.InstanceConfigurationAvailabilityConfig.RecoveryAction.StopInstance,

						}
,
					preemptibleInstanceConfig: {
						preemptionAction: {
							type: "TERMINATE",							preserveBootVolume: false

							}
,

						}
,

					}
,
				secondaryVnics: [{
						createVnicDetails: {
							assignIpv6Ip: true,
							assignPublicIp: true,
							assignPrivateDnsRecord: true,
							definedTags: {
								EXAMPLE_KEY_VwDRd :{
									EXAMPLE_KEY_qNeB6 :"EXAMPLE--Value"
									}
								},
							displayName: "EXAMPLE-displayName-Value",
							freeformTags: {
								EXAMPLE_KEY_U7Dpy :"EXAMPLE_VALUE_4d1Qbq8Ufha3y2GmKtxT"
								},
							ipv6AddressIpv6SubnetCidrPairDetails: [{
									ipv6SubnetCidr: "EXAMPLE-ipv6SubnetCidr-Value",
									ipv6Address: "EXAMPLE-ipv6Address-Value",

									}
									],
							hostnameLabel: "EXAMPLE-hostnameLabel-Value",
							nsgIds: ["EXAMPLE--Value"									],
							privateIp: "EXAMPLE-privateIp-Value",
							skipSourceDestCheck: false,
							subnetId: "ocid1.test.oc1..<unique_ID>EXAMPLE-subnetId-Value",

							}
,
						displayName: "EXAMPLE-displayName-Value",
						nicIndex: 24,

						}
						]

				}
				]

		}

	const launchInstanceConfigurationRequest: core.requests.LaunchInstanceConfigurationRequest = { 
	instanceConfigurationId: "ocid1.test.oc1..<unique_ID>EXAMPLE-instanceConfigurationId-Value",
	instanceConfiguration: instanceConfigurationInstanceDetails,
	opcRetryToken: "EXAMPLE-opcRetryToken-Value",

		}; 


     // Send request to the Client.
     const launchInstanceConfigurationResponse = await client.launchInstanceConfiguration(launchInstanceConfigurationRequest);
     }
     catch (error) {
         console.log("launchInstanceConfiguration Failed with error  " + error);
     }
})();