Skip to content

Commit d777999

Browse files
Marcel CasadoMaxrovr
authored andcommitted
Added - Support for Desktop as a Service: Private Access
1 parent 47302b6 commit d777999

14 files changed

+371
-12
lines changed

examples/desktops/desktop_pool/main.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" {
6363
# nsg_ids = var.desktop_pool_nsg_ids
6464
# time_start_scheduled = var.desktop_pool_time_start_scheduled
6565
# time_stop_scheduled = var.desktop_pool_time_stop_scheduled
66+
# private_access_details {
67+
# #Required
68+
# subnet_id = var.desktop_pool_private_access_details_subnet_id
69+
#
70+
# #Optional
71+
# nsg_ids = var.desktop_pool_private_access_details_nsg_ids
72+
# private_ip = var.desktop_pool_private_access_details_private_ip
73+
# }
6674
}
6775

6876
data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# OCI config profile
2+
config_file_profile="terraform-federation-test"
3+
4+
# region (us-phoenix-1, ca-toronto-1, etc)
5+
region="us-phoenix-1"
6+
7+
# Secure Desktops Example Configuration
8+
9+
compartment_id = "<compartment_ocid>"
10+
11+
desktop_pool_vcn_id = "<vcn_ocid>"
12+
desktop_pool_subnet_id = "<subnet_ocid>"
13+
desktop_pool_image_id = "<image_ocid>"
14+
desktop_pool_image_name = "<image_name>"
15+
desktop_pool_backup_policy_id = "<volume_backup_policy_ocid>"
16+
desktop_pool_contact_details = "test%40example.com"
17+
desktop_pool_private_access_details_subnet_id = "<private_access_subnet_ocid>"
18+
desktop_pool_private_access_details_nsg_ids = "[<private_access_nsg_ids>]"
19+
desktop_pool_private_access_details_private_ip = "<private_access_private_ip>"
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
5+
resource "oci_desktops_desktop_pool" "test_desktop_pool" {
6+
#Required
7+
compartment_id = var.compartment_id
8+
display_name = var.desktop_pool_display_name
9+
contact_details = var.desktop_pool_contact_details
10+
11+
are_privileged_users = var.desktop_pool_are_privileged_users
12+
availability_domain = data.oci_identity_availability_domain.ad.name
13+
14+
network_configuration {
15+
#Required
16+
subnet_id = var.desktop_pool_subnet_id
17+
vcn_id = var.desktop_pool_vcn_id
18+
}
19+
20+
device_policy {
21+
#Required
22+
audio_mode = var.desktop_pool_device_policy_audio_mode
23+
cdm_mode = var.desktop_pool_device_policy_cdm_mode
24+
clipboard_mode = var.desktop_pool_device_policy_clipboard_mode
25+
is_display_enabled = var.desktop_pool_device_policy_is_display_enabled
26+
is_keyboard_enabled = var.desktop_pool_device_policy_is_keyboard_enabled
27+
is_pointer_enabled = var.desktop_pool_device_policy_is_pointer_enabled
28+
is_printing_enabled = var.desktop_pool_device_policy_is_printing_enabled
29+
}
30+
31+
image {
32+
#Required
33+
image_id = var.desktop_pool_image_id
34+
image_name = var.desktop_pool_image_name
35+
}
36+
37+
availability_policy {
38+
#Required
39+
start_schedule {
40+
#Required
41+
cron_expression = var.desktop_pool_start_schedule_cron_expr
42+
timezone = var.desktop_pool_start_schedule_timezone
43+
}
44+
stop_schedule {
45+
#Required
46+
cron_expression = var.desktop_pool_stop_schedule_cron_expr
47+
timezone = var.desktop_pool_stop_schedule_timezone
48+
}
49+
}
50+
51+
is_storage_enabled = var.desktop_pool_is_storage_enabled
52+
storage_backup_policy_id = var.desktop_pool_backup_policy_id
53+
storage_size_in_gbs = var.desktop_pool_storage_size_in_gbs
54+
55+
shape_name = var.desktop_pool_shape_name
56+
standby_size = var.desktop_pool_standby_size
57+
maximum_size = var.desktop_pool_maximum_size
58+
59+
#Optional
60+
# defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.desktop_pool_defined_tags_value)
61+
# description = var.desktop_pool_description
62+
# freeform_tags = var.desktop_pool_freeform_tags
63+
# nsg_ids = var.desktop_pool_nsg_ids
64+
# time_start_scheduled = var.desktop_pool_time_start_scheduled
65+
# time_stop_scheduled = var.desktop_pool_time_stop_scheduled
66+
private_access_details {
67+
#Required
68+
subnet_id = var.desktop_pool_private_access_details_subnet_id
69+
70+
#Optional
71+
nsg_ids = var.desktop_pool_private_access_details_nsg_ids
72+
private_ip = var.desktop_pool_private_access_details_private_ip
73+
}
74+
}
75+
76+
data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" {
77+
#Required
78+
compartment_id = var.compartment_id
79+
80+
#Optional
81+
# availability_domain = data.oci_identity_availability_domain.ad.name
82+
# display_name = var.desktop_pool_display_name
83+
# id = var.desktop_pool_id
84+
# state = var.desktop_pool_state
85+
}
86+
87+
data "oci_desktops_desktop_pool" "test_desktop_pool_datasource" {
88+
#Required
89+
desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id
90+
}
91+
92+
data "oci_desktops_desktop_pool_desktops" "test_desktop_pool_desktops_datasource" {
93+
availability_domain = data.oci_identity_availability_domain.ad.name
94+
compartment_id = var.compartment_id
95+
desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id
96+
}
97+
98+
data "oci_desktops_desktop_pool_volumes" "test_desktop_pool_volumes_datasource" {
99+
availability_domain = data.oci_identity_availability_domain.ad.name
100+
compartment_id = var.compartment_id
101+
desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id
102+
#Optional
103+
# display_name = var.desktop_pool_display_name
104+
# state = var.desktop_pool_state
105+
}
106+
107+
data "oci_identity_availability_domain" "ad" {
108+
compartment_id = var.tenancy_ocid
109+
ad_number = 1
110+
}
111+
112+
data "oci_desktops_desktops" "test_desktops_datasource" {
113+
availability_domain = data.oci_identity_availability_domain.ad.name
114+
compartment_id = var.compartment_id
115+
desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id
116+
state = "ACTIVE"
117+
}
118+
119+
data "oci_desktops_desktop" "test_desktop_datasource" {
120+
desktop_id = data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.0.desktop_id
121+
}
122+
123+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../outputs.tf
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../provider.tf
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../variables.tf

examples/desktops/desktop_pool/variables.tf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,21 @@ variable "desktop_pool_stop_schedule_timezone" {
144144
default = "MST"
145145
}
146146

147+
variable "desktop_pool_private_access_details_subnet_id" {
148+
}
149+
150+
variable "desktop_pool_private_access_details_nsg_ids" {
151+
type = list(string)
152+
default = []
153+
}
154+
155+
variable "desktop_pool_private_access_details_private_ip" {
156+
description = ""
157+
}
158+
147159
variable "desktop_pool_state" {
148160
description = ""
149161
default = "ACTIVE"
150162
}
151163

164+

internal/integrationtest/desktops_desktop_pool_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ var (
6666
"description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`},
6767
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
6868
"nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}},
69+
"private_access_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolPrivateAccessDetailsRepresentation},
6970
}
7071
DesktopsDesktopPoolAvailabilityPolicyRepresentation = map[string]interface{}{
7172
"start_schedule": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation},
@@ -88,6 +89,11 @@ var (
8889
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_subnet_id}`},
8990
"vcn_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_vcn_id}`},
9091
}
92+
DesktopsDesktopPoolPrivateAccessDetailsRepresentation = map[string]interface{}{
93+
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_private_access_subnet_id}`},
94+
"nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_private_access_nsg_id}`}},
95+
"private_ip": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_private_access_private_ip}`},
96+
}
9197
DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation = map[string]interface{}{
9298
"cron_expression": acctest.Representation{RepType: acctest.Required, Create: `${var.test_start_schedule_cron_expr_create}`, Update: `${var.test_start_schedule_cron_expr_update}`},
9399
"timezone": acctest.Representation{RepType: acctest.Required, Create: `${var.test_start_schedule_timezone_create}`, Update: `${var.test_start_schedule_timezone_update}`},
@@ -142,6 +148,15 @@ var (
142148
test_nsg_id = utils.GetEnvSettingWithBlankDefault("test_nsg_id")
143149
nsgIdVariableStr = fmt.Sprintf("variable \"test_nsg_id\" { default = \"%s\" }\n", test_nsg_id)
144150

151+
test_private_access_subnet_id = utils.GetEnvSettingWithBlankDefault("test_private_access_subnet_id")
152+
privateAccessSubnetIdVariableStr = fmt.Sprintf("variable \"test_private_access_subnet_id\" { default = \"%s\" }\n", test_private_access_subnet_id)
153+
154+
test_private_access_nsg_id = utils.GetEnvSettingWithBlankDefault("test_private_access_nsg_id")
155+
privateAccessNsgIdVariableStr = fmt.Sprintf("variable \"test_private_access_nsg_id\" { default = \"%s\" }\n", test_private_access_nsg_id)
156+
157+
test_private_access_private_ip = utils.GetEnvSettingWithBlankDefault("test_private_access_private_ip")
158+
privateAccessPrivateIpVariableStr = fmt.Sprintf("variable \"test_private_access_private_ip\" { default = \"%s\" }\n", test_private_access_private_ip)
159+
145160
DesktopsDesktopPoolResourceDependencies = vcnIdVariableStr +
146161
subnetIdVariableStr +
147162
shapeNameVariableStr +
@@ -157,6 +172,9 @@ var (
157172
stopScheduleTimezoneCreateVariableStr +
158173
stopScheduleTimezoneUpdateVariableStr +
159174
nsgIdVariableStr +
175+
privateAccessSubnetIdVariableStr +
176+
privateAccessNsgIdVariableStr +
177+
privateAccessPrivateIpVariableStr +
160178
AvailabilityDomainConfig
161179
)
162180

@@ -268,6 +286,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) {
268286
resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"),
269287
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"),
270288
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"),
289+
resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"),
290+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"),
291+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"),
292+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"),
271293
resource.TestCheckResourceAttrSet(resourceName, "shape_name"),
272294
resource.TestCheckResourceAttr(resourceName, "standby_size", "2"),
273295
resource.TestCheckResourceAttrSet(resourceName, "state"),
@@ -326,6 +348,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) {
326348
resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"),
327349
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"),
328350
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"),
351+
resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"),
352+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"),
353+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"),
354+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"),
329355
resource.TestCheckResourceAttrSet(resourceName, "shape_name"),
330356
resource.TestCheckResourceAttr(resourceName, "standby_size", "2"),
331357
resource.TestCheckResourceAttrSet(resourceName, "state"),
@@ -379,6 +405,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) {
379405
resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"),
380406
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"),
381407
resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"),
408+
resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"),
409+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"),
410+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"),
411+
resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"),
382412
resource.TestCheckResourceAttrSet(resourceName, "shape_name"),
383413
resource.TestCheckResourceAttr(resourceName, "standby_size", "3"),
384414
resource.TestCheckResourceAttrSet(resourceName, "state"),
@@ -455,6 +485,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) {
455485
resource.TestCheckResourceAttr(singularDatasourceName, "is_storage_enabled", "true"),
456486
resource.TestCheckResourceAttr(singularDatasourceName, "maximum_size", "11"),
457487
resource.TestCheckResourceAttr(singularDatasourceName, "network_configuration.#", "1"),
488+
resource.TestCheckResourceAttr(singularDatasourceName, "private_access_details.#", "1"),
489+
resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.endpoint_fqdn"),
490+
resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.private_ip"),
491+
resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.vcn_id"),
458492
resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_name"),
459493
resource.TestCheckResourceAttr(singularDatasourceName, "standby_size", "3"),
460494
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),

internal/service/desktops/desktops_desktop_pool_data_source.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ func (s *DesktopsDesktopPoolDataSourceCrud) SetData() error {
131131

132132
s.D.Set("nsg_ids", s.Res.NsgIds)
133133

134+
if s.Res.PrivateAccessDetails != nil {
135+
s.D.Set("private_access_details", []interface{}{DesktopPoolPrivateAccessDetailsToMap(s.Res.PrivateAccessDetails, true)})
136+
} else {
137+
s.D.Set("private_access_details", nil)
138+
}
139+
134140
if s.Res.ShapeName != nil {
135141
s.D.Set("shape_name", *s.Res.ShapeName)
136142
}

0 commit comments

Comments
 (0)