Skip to content

Commit 4d8ba67

Browse files
amitvasudevan7ganbaras
authored andcommitted
Added - Support for Windows BYOL for VMs
1 parent ad8887c commit 4d8ba67

14 files changed

+694
-11
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
variable "windows_instance_shape" {
5+
default = "VM.Standard2.1"
6+
}
7+
8+
resource "oci_core_vcn" "test_vcn" {
9+
cidr_block = "10.1.0.0/16"
10+
compartment_id = var.compartment_ocid
11+
display_name = "TestVcn"
12+
dns_label = "testvcn"
13+
}
14+
15+
resource "oci_core_internet_gateway" "test_internet_gateway" {
16+
compartment_id = var.compartment_ocid
17+
display_name = "TestInternetGateway"
18+
vcn_id = oci_core_vcn.test_vcn.id
19+
}
20+
21+
resource "oci_core_default_route_table" "default_route_table" {
22+
manage_default_resource_id = oci_core_vcn.test_vcn.default_route_table_id
23+
display_name = "DefaultRouteTable"
24+
25+
route_rules {
26+
destination = "0.0.0.0/0"
27+
destination_type = "CIDR_BLOCK"
28+
network_entity_id = oci_core_internet_gateway.test_internet_gateway.id
29+
}
30+
}
31+
32+
resource "oci_core_subnet" "test_subnet" {
33+
availability_domain = data.oci_identity_availability_domain.ad.name
34+
cidr_block = "10.1.20.0/24"
35+
display_name = "TestSubnet"
36+
dns_label = "testsubnet"
37+
security_list_ids = [oci_core_vcn.test_vcn.default_security_list_id]
38+
compartment_id = var.compartment_ocid
39+
vcn_id = oci_core_vcn.test_vcn.id
40+
route_table_id = oci_core_vcn.test_vcn.default_route_table_id
41+
dhcp_options_id = oci_core_vcn.test_vcn.default_dhcp_options_id
42+
}
43+
44+
data "oci_identity_availability_domain" "ad" {
45+
compartment_id = var.tenancy_ocid
46+
ad_number = 1
47+
}
48+
49+
resource "oci_core_instance" "test_instance_with_license_config" {
50+
count = 1
51+
availability_domain = data.oci_identity_availability_domain.ad.name
52+
compartment_id = var.compartment_ocid
53+
display_name = "TestInstance${count.index}"
54+
shape = var.windows_instance_shape
55+
56+
create_vnic_details {
57+
subnet_id = oci_core_subnet.test_subnet.id
58+
display_name = "Primaryvnic"
59+
}
60+
61+
licensing_configs {
62+
type = "WINDOWS"
63+
license_type = "OCI_PROVIDED"
64+
}
65+
66+
source_details {
67+
source_type = "image"
68+
source_id = data.oci_core_images.supported_windows_shape_images.images[0]["id"]
69+
}
70+
71+
timeouts {
72+
create = "60m"
73+
}
74+
}
75+
76+
output "supported_windows_shape_images" {
77+
value = data.oci_core_images.supported_windows_shape_images.images[0]["id"]
78+
}
79+
80+
# Gets a list of all images that support a given Instance shape
81+
data "oci_core_images" "supported_windows_shape_images" {
82+
compartment_id = var.tenancy_ocid
83+
shape = var.windows_instance_shape
84+
operating_system = "Windows"
85+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
variable "windows_instance_shape" {
2+
default = "VM.Standard2.1"
3+
}
4+
5+
resource "oci_core_instance_configuration" "test_instance_configuration" {
6+
compartment_id = var.compartment_ocid
7+
display_name = "TestInstanceConfiguration"
8+
9+
instance_details {
10+
instance_type = "compute"
11+
12+
/*
13+
Attach multiple block volumes
14+
*/
15+
block_volumes {
16+
create_details {
17+
compartment_id = var.compartment_ocid
18+
display_name = "TestCreateVolumeDetails-1"
19+
availability_domain = data.oci_identity_availability_domain.ad.name
20+
size_in_gbs = 50
21+
vpus_per_gb = 20 // min vpus
22+
is_auto_tune_enabled = false
23+
block_volume_replicas {
24+
display_name = "TestCreateVolumeDetails-1"
25+
availability_domain = data.oci_identity_availability_domain.ad.name
26+
}
27+
}
28+
29+
attach_details {
30+
type = "paravirtualized"
31+
display_name = "TestAttachVolumeDetails-1"
32+
is_read_only = true
33+
is_shareable = true
34+
}
35+
}
36+
37+
block_volumes {
38+
create_details {
39+
compartment_id = var.compartment_ocid
40+
display_name = "TestCreateVolumeDetails-2"
41+
availability_domain = data.oci_identity_availability_domain.ad.name
42+
size_in_gbs = 50
43+
vpus_per_gb = 20 // min vpus
44+
}
45+
46+
attach_details {
47+
type = "paravirtualized"
48+
display_name = "TestAttachVolumeDetails-2"
49+
is_read_only = true
50+
is_shareable = true
51+
}
52+
}
53+
54+
launch_details {
55+
compartment_id = var.compartment_ocid
56+
ipxe_script = "ipxeScript"
57+
shape = var.windows_instance_shape
58+
display_name = "TestInstanceConfigurationLaunchDetails"
59+
is_pv_encryption_in_transit_enabled = false
60+
preferred_maintenance_action = "LIVE_MIGRATE"
61+
launch_mode = "NATIVE"
62+
63+
agent_config {
64+
is_management_disabled = false
65+
is_monitoring_disabled = false
66+
}
67+
68+
availability_config {
69+
recovery_action = "RESTORE_INSTANCE"
70+
is_live_migration_preferred = false
71+
}
72+
73+
launch_options {
74+
network_type = "PARAVIRTUALIZED"
75+
}
76+
77+
instance_options {
78+
are_legacy_imds_endpoints_disabled = false
79+
}
80+
81+
create_vnic_details {
82+
assign_private_dns_record = true
83+
assign_public_ip = true
84+
display_name = "TestInstanceConfigurationVNIC"
85+
skip_source_dest_check = false
86+
}
87+
88+
licensing_configs {
89+
type = "WINDOWS"
90+
license_type = "OCI_PROVIDED"
91+
}
92+
93+
extended_metadata = {
94+
some_string = "stringA"
95+
nested_object = "{\"some_string\": \"stringB\", \"object\": {\"some_string\": \"stringC\"}}"
96+
}
97+
98+
source_details {
99+
source_type = "image"
100+
image_id = data.oci_core_images.supported_windows_shape_images.images[0]["id"]
101+
}
102+
}
103+
}
104+
}
105+
106+
output "supported_windows_shape_images" {
107+
value = data.oci_core_images.supported_windows_shape_images.images[0]["id"]
108+
}
109+
110+
# Gets a list of all images that support a given Instance shape
111+
data "oci_core_images" "supported_windows_shape_images" {
112+
compartment_id = var.tenancy_ocid
113+
shape = var.windows_instance_shape
114+
operating_system = "Windows"
115+
}

internal/integrationtest/core_instance_configuration_test.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,9 @@ var (
8787
"source": acctest.Representation{RepType: acctest.Optional, Create: `INSTANCE`},
8888
}
8989
CoreInstanceConfigurationInstanceDetailsLaunchRepresentation = map[string]interface{}{
90-
"instance_type": acctest.Representation{RepType: acctest.Required, Create: `compute`},
91-
"launch_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceConfigurationInstanceDetailsLaunchDetailsRepresentation},
90+
"instance_type": acctest.Representation{RepType: acctest.Required, Create: `compute`},
91+
"launch_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceConfigurationInstanceDetailsLaunchDetailsRepresentation},
92+
"secondary_vnics": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstanceConfigurationInstanceDetailsSecondaryVnicsRepresentation},
9293
}
9394

9495
CoreInstanceConfigurationInstanceDetailsLaunchRepresentationWithFilterDetails = map[string]interface{}{
@@ -177,6 +178,7 @@ var (
177178
"preferred_maintenance_action": acctest.Representation{RepType: acctest.Optional, Create: `LIVE_MIGRATE`},
178179
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]any{"Oracle-DataSecurity-ZPR": map[string]any{"MaxEgressCount": map[string]string{"value": "42", "mode": "audit"}}}},
179180
"shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation},
181+
"licensing_configs": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceConfigurationInstanceDetailsOptionsLaunchDetailsLicensingConfigsRepresentation},
180182
}
181183
CoreInstanceConfigurationInstanceDetailsLaunchDetailsRepresentationImageFilters = map[string]interface{}{
182184
"availability_domain": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`},
@@ -282,6 +284,10 @@ var (
282284
"skip_source_dest_check": acctest.Representation{RepType: acctest.Optional, Create: `false`},
283285
"subnet_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_subnet.test_subnet.id}`},
284286
}
287+
CoreInstanceConfigurationInstanceDetailsOptionsLaunchDetailsLicensingConfigsRepresentation = map[string]interface{}{
288+
"type": acctest.Representation{RepType: acctest.Required, Create: `WINDOWS`},
289+
"license_type": acctest.Representation{RepType: acctest.Optional, Create: `OCI_PROVIDED`},
290+
}
285291
CoreInstanceConfigurationInstanceDetailsLaunchDetailsSourceDetailsRepresentation = map[string]interface{}{
286292
"source_type": acctest.Representation{RepType: acctest.Required, Create: `image`},
287293
"image_id": acctest.Representation{RepType: acctest.Required, Create: `${var.InstanceImageOCID[var.region]}`},
@@ -451,6 +457,7 @@ func TestCoreInstanceConfigurationResource_basic(t *testing.T) {
451457
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.nsg_ids.#", "1"),
452458
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.private_ip", "privateIp"),
453459
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.skip_source_dest_check", "false"),
460+
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.licensing_configs.#", "0"),
454461
resource.TestCheckResourceAttrSet(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.subnet_id"),
455462
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.display_name", "backend-servers"),
456463
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.source_details.0.instance_source_image_filter_details.#", "1"),
@@ -638,6 +645,9 @@ func TestCoreInstanceConfigurationResource_basic(t *testing.T) {
638645
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.private_ip", "privateIp"),
639646
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.skip_source_dest_check", "false"),
640647
resource.TestCheckResourceAttrSet(resourceName, "instance_details.0.launch_details.0.create_vnic_details.0.subnet_id"),
648+
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.licensing_configs.#", "1"),
649+
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.licensing_configs.0.license_type", "OCI_PROVIDED"),
650+
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.licensing_configs.0.type", "WINDOWS"),
641651
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.display_name", "backend-servers"),
642652
resource.TestCheckResourceAttr(resourceName, "instance_details.0.launch_details.0.extended_metadata.%", "1"),
643653
//resource.TestCheckResourceAttrSet(resourceName, "instance_details.0.launch_details.0.fault_domain"),
@@ -914,13 +924,15 @@ func TestCoreInstanceConfigurationResource_basic(t *testing.T) {
914924
{
915925
Config: config +
916926
vaultIdVariableStr + kmsKeyIdVariableStr + acctest.GenerateDataSourceFromRepresentationMap("oci_core_instance_configuration", "test_instance_configuration", acctest.Required, acctest.Create, CoreCoreInstanceConfigurationSingularDataSourceRepresentation) +
917-
compartmentIdVariableStr + CoreInstanceConfigurationResourceConfig,
927+
compartmentIdVariableStr + CoreInstanceConfigurationResourceDependenciesWithoutKms +
928+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance_configuration", "test_instance_configuration", acctest.Optional, acctest.Create,
929+
acctest.GetUpdatedRepresentationCopy("instance_details", acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceConfigurationInstanceDetailsLaunchRepresentation}, CoreInstanceConfigurationRepresentation)),
918930
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
919931
resource.TestCheckResourceAttrSet(singularDatasourceName, "instance_configuration_id"),
920932

921933
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
922934
resource.TestCheckResourceAttr(singularDatasourceName, "deferred_fields.#", "0"),
923-
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
935+
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "backend-servers"),
924936
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
925937
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
926938
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.#", "1"),
@@ -936,6 +948,9 @@ func TestCoreInstanceConfigurationResource_basic(t *testing.T) {
936948
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.secondary_vnics.0.create_vnic_details.0.skip_source_dest_check", "false"),
937949
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.secondary_vnics.0.display_name", "backend-servers"),
938950
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.secondary_vnics.0.nic_index", "0"),
951+
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.launch_details.0.licensing_configs.#", "1"),
952+
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.launch_details.0.licensing_configs.0.license_type", "OCI_PROVIDED"),
953+
resource.TestCheckResourceAttr(singularDatasourceName, "instance_details.0.launch_details.0.licensing_configs.0.type", "WINDOWS"),
939954
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
940955
),
941956
},

0 commit comments

Comments
 (0)