Skip to content

Commit 322c70e

Browse files
Gavin FoleyMaxrovr
authored andcommitted
Added - Compute support for ZPR
1 parent 818fdf9 commit 322c70e

File tree

11 files changed

+50
-21
lines changed

11 files changed

+50
-21
lines changed

examples/compute/instance/instance.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ resource "oci_core_instance" "test_instance" {
153153
"freeformkey${count.index}" = "freeformvalue${count.index}"
154154
}
155155

156+
security_attributes = {
157+
"oracle-zpr.sensitivity.value" = "low"
158+
"oracle-zpr.sensitivity.mode" = "enforce"
159+
}
160+
156161
preemptible_instance_config {
157162
preemption_action {
158163
type = "TERMINATE"

examples/compute/vnic/vnic.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ resource "oci_core_instance" "test_instance" {
9494
create_vnic_details {
9595
subnet_id = oci_core_subnet.test_subnet.id
9696
hostname_label = "testinstance"
97+
98+
security_attributes = {
99+
"oracle-zpr.sensitivity.value" = "low"
100+
"oracle-zpr.sensitivity.mode" = "enforce"
101+
}
97102
}
98103

99104
metadata = {

internal/integrationtest/core_instance_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ var (
9393
"is_pv_encryption_in_transit_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`},
9494
"launch_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchOptionsRepresentation},
9595
"metadata": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"user_data": "abcd"}, Update: map[string]string{"user_data": "abcd", "volatile_data": "stringE"}},
96+
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"test-namespace-20240722.test-attribute-20240822.value": "blue", "test-namespace-20240722.test-attribute-20240822.mode": "enforce"}},
9697
"shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation},
9798
"source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceSourceDetailsRepresentation},
9899
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
@@ -128,6 +129,7 @@ var (
128129
"launch_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchOptionsRepresentation},
129130
"launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithExistingVolumeAttachmentsIscsiRepresentation},
130131
"metadata": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"user_data": "abcd"}, Update: map[string]string{"user_data": "abcd", "volatile_data": "stringE"}},
132+
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"test-namespace-20240722.test-attribute-20240822.value": "blue", "test-namespace-20240722.test-attribute-20240822.mode": "enforce"}},
131133
"shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation},
132134
"source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceSourceDetailsRepresentation},
133135
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
@@ -163,6 +165,7 @@ var (
163165
"launch_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchOptionsRepresentation},
164166
"launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithCreateVolumeAttachmentsIscsiRepresentation},
165167
"metadata": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"user_data": "abcd"}, Update: map[string]string{"user_data": "abcd", "volatile_data": "stringE"}},
168+
"security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"test-namespace-20240722.test-attribute-20240822.value": "blue", "test-namespace-20240722.test-attribute-20240822.mode": "enforce"}},
166169
"shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation},
167170
"source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceSourceDetailsRepresentation},
168171
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
@@ -1006,7 +1009,9 @@ func TestCoreInstanceResource_basic(t *testing.T) {
10061009
resource.TestCheckResourceAttrSet(resourceName, "launch_volume_attachments.0.volume_id"),
10071010
resource.TestCheckResourceAttr(resourceName, "metadata.%", "1"),
10081011
resource.TestCheckResourceAttrSet(resourceName, "region"),
1009-
resource.TestCheckResourceAttr(resourceName, "security_attributes.%", "1"),
1012+
resource.TestCheckResourceAttr(resourceName, "security_attributes.%", "2"),
1013+
resource.TestCheckResourceAttr(resourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.value", "blue"),
1014+
resource.TestCheckResourceAttr(resourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.mode", "enforce"),
10101015
resource.TestCheckResourceAttr(resourceName, "shape", "VM.Standard2.1"),
10111016
resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"),
10121017
resource.TestCheckResourceAttr(resourceName, "shape_config.0.ocpus", "1"),
@@ -1126,7 +1131,9 @@ func TestCoreInstanceResource_basic(t *testing.T) {
11261131
resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.vpus_per_gb", "50"),
11271132
resource.TestCheckResourceAttr(resourceName, "metadata.%", "1"),
11281133
resource.TestCheckResourceAttrSet(resourceName, "region"),
1129-
resource.TestCheckResourceAttr(resourceName, "security_attributes.%", "1"),
1134+
resource.TestCheckResourceAttr(resourceName, "security_attributes.%", "2"),
1135+
resource.TestCheckResourceAttr(resourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.value", "blue"),
1136+
resource.TestCheckResourceAttr(resourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.mode", "enforce"),
11301137
resource.TestCheckResourceAttr(resourceName, "shape", "VM.Standard2.1"),
11311138
resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"),
11321139
resource.TestCheckResourceAttr(resourceName, "shape_config.0.ocpus", "1"),
@@ -1565,7 +1572,9 @@ func TestCoreInstanceResource_basic(t *testing.T) {
15651572
resource.TestCheckResourceAttr(datasourceName, "instances.0.launch_options.0.remote_data_volume_type", "PARAVIRTUALIZED"),
15661573
resource.TestCheckResourceAttr(datasourceName, "instances.0.metadata.%", "2"),
15671574
resource.TestCheckResourceAttrSet(datasourceName, "instances.0.region"),
1568-
resource.TestCheckResourceAttr(datasourceName, "instances.0.security_attributes.%", "1"),
1575+
resource.TestCheckResourceAttr(datasourceName, "instances.0.security_attributes.%", "2"),
1576+
resource.TestCheckResourceAttr(resourceName, "instances.0.security_attributes.test-namespace-20240722.test-attribute-20240822.value", "blue"),
1577+
resource.TestCheckResourceAttr(resourceName, "instances.0.security_attributes.test-namespace-20240722.test-attribute-20240822.mode", "enforce"),
15691578
resource.TestCheckResourceAttrSet(datasourceName, "instances.0.security_attributes_state"),
15701579
resource.TestCheckResourceAttr(datasourceName, "instances.0.shape", "VM.Standard2.1"),
15711580
resource.TestCheckResourceAttr(datasourceName, "instances.0.shape_config.#", "1"),
@@ -1626,7 +1635,9 @@ func TestCoreInstanceResource_basic(t *testing.T) {
16261635
resource.TestCheckResourceAttr(singularDatasourceName, "launch_options.0.remote_data_volume_type", "PARAVIRTUALIZED"),
16271636
resource.TestCheckResourceAttr(singularDatasourceName, "metadata.%", "2"),
16281637
resource.TestCheckResourceAttrSet(singularDatasourceName, "region"),
1629-
resource.TestCheckResourceAttr(singularDatasourceName, "security_attributes.%", "1"),
1638+
resource.TestCheckResourceAttr(singularDatasourceName, "security_attributes.%", "2"),
1639+
resource.TestCheckResourceAttr(singularDatasourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.value", "blue"),
1640+
resource.TestCheckResourceAttr(singularDatasourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.mode", "enforce"),
16301641
resource.TestCheckResourceAttrSet(singularDatasourceName, "security_attributes_state"),
16311642
resource.TestCheckResourceAttr(singularDatasourceName, "shape", "VM.Standard2.1"),
16321643
resource.TestCheckResourceAttr(singularDatasourceName, "shape_config.#", "1"),

internal/integrationtest/core_vnic_attachment_resource_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ func (s *ResourceCoreVnicAttachmentTestSuite) TestAccResourceCoreVnicAttachment_
155155
resource.TestCheckResourceAttr(s.ResourceName, "create_vnic_details.0.nsg_ids.#", "2"),
156156
resource.TestCheckResourceAttrSet(s.VnicResourceName, "private_ip_address"),
157157
resource.TestCheckResourceAttr(s.VnicResourceName, "security_attributes.%", "2"),
158+
resource.TestCheckResourceAttr(s.VnicResourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.value", "blue"),
159+
resource.TestCheckResourceAttr(s.VnicResourceName, "security_attributes.test-namespace-20240722.test-attribute-20240822.mode", "enforce"),
158160
// @SDK 1/2018: Since we don't assign a public IP to this vnic, we will get a response from server
159161
// without a public_ip_address. Old SDK would have set it to empty, but new SDK will set it to nil.
160162
// Commenting out until we have a better way of handling this.
@@ -164,7 +166,7 @@ func (s *ResourceCoreVnicAttachmentTestSuite) TestAccResourceCoreVnicAttachment_
164166
func(ts *terraform.State) (err error) {
165167
newId, err := acctest.FromInstanceState(ts, s.ResourceName, "id")
166168
if newId != vaId {
167-
return fmt.Errorf("Expected same ocid, got different.")
169+
return fmt.Errorf("Expected same ocid (%s), got different (%s).", vaId, newId)
168170
}
169171
return err
170172
},

internal/service/core/core_instance_data_source.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ func (s *CoreInstanceDataSourceCrud) SetData() error {
179179
s.D.Set("region", *s.Res.Region)
180180
}
181181

182-
s.D.Set("security_attributes", s.Res.SecurityAttributes)
182+
if s.Res.SecurityAttributes != nil {
183+
s.D.Set("security_attributes", tfresource.SecurityAttributesToMap(s.Res.SecurityAttributes))
184+
}
183185

184186
s.D.Set("security_attributes_state", s.Res.SecurityAttributesState)
185187

internal/service/core/core_instance_resource.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,7 +1315,7 @@ func (s *CoreInstanceResourceCrud) Create() error {
13151315
}
13161316

13171317
if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok {
1318-
request.SecurityAttributes = securityAttributes.(map[string]map[string]interface{})
1318+
request.SecurityAttributes = tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
13191319
}
13201320

13211321
if shape, ok := s.D.GetOkExists("shape"); ok {
@@ -1514,7 +1514,7 @@ func (s *CoreInstanceResourceCrud) Update() error {
15141514
}
15151515

15161516
if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok {
1517-
request.SecurityAttributes = securityAttributes.(map[string]map[string]interface{})
1517+
request.SecurityAttributes = tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
15181518
}
15191519

15201520
s.Res = &response.Instance
@@ -1717,7 +1717,9 @@ func (s *CoreInstanceResourceCrud) SetData() error {
17171717
s.D.Set("region", *s.Res.Region)
17181718
}
17191719

1720-
s.D.Set("security_attributes", s.Res.SecurityAttributes)
1720+
if s.Res.SecurityAttributes != nil {
1721+
s.D.Set("security_attributes", tfresource.SecurityAttributesToMap(s.Res.SecurityAttributes))
1722+
}
17211723

17221724
s.D.Set("security_attributes_state", s.Res.SecurityAttributesState)
17231725

@@ -1890,7 +1892,7 @@ func (s *CoreInstanceResourceCrud) mapToCreateVnicDetailsInstance(fieldKeyFormat
18901892
}
18911893

18921894
if securityAttributes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_attributes")); ok {
1893-
result.SecurityAttributes = securityAttributes.(map[string]map[string]interface{})
1895+
result.SecurityAttributes = tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
18941896
}
18951897

18961898
if skipSourceDestCheck, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "skip_source_dest_check")); ok {
@@ -1968,7 +1970,9 @@ func CreateVnicDetailsToMap(obj *oci_core.Vnic, createVnicDetails map[string]int
19681970
result["private_ip"] = string(*obj.PrivateIp)
19691971
}
19701972

1971-
result["security_attributes"] = obj.SecurityAttributes
1973+
if obj.SecurityAttributes != nil {
1974+
result["security_attributes"] = tfresource.SecurityAttributesToMap(obj.SecurityAttributes)
1975+
}
19721976

19731977
if obj.SkipSourceDestCheck != nil {
19741978
result["skip_source_dest_check"] = bool(*obj.SkipSourceDestCheck)

internal/service/core/core_instances_data_source.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ func (s *CoreInstancesDataSourceCrud) SetData() error {
242242
instance["region"] = *r.Region
243243
}
244244

245-
instance["security_attributes"] = r.SecurityAttributes
245+
if r.SecurityAttributes != nil {
246+
instance["security_attributes"] = tfresource.SecurityAttributesToMap(r.SecurityAttributes)
247+
}
246248

247249
instance["security_attributes_state"] = r.SecurityAttributesState
248250

internal/service/core/core_vnic_attachment_resource.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -542,9 +542,8 @@ func (s *CoreVnicAttachmentResourceCrud) mapToCreateVnicDetails(fieldKeyFormat s
542542
result.PrivateIp = &tmp
543543
}
544544

545-
if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok {
546-
convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
547-
result.SecurityAttributes = convertedAttributes
545+
if securityAttributes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_attributes")); ok {
546+
result.SecurityAttributes = tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
548547
}
549548

550549
if skipSourceDestCheck, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "skip_source_dest_check")); ok {
@@ -608,9 +607,8 @@ func (s *CoreVnicAttachmentResourceCrud) mapToUpdateVnicDetails(fieldKeyFormat s
608607
result.SkipSourceDestCheck = &tmp
609608
}
610609

611-
if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok {
612-
convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
613-
result.SecurityAttributes = convertedAttributes
610+
if securityAttributes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_attributes")); ok {
611+
result.SecurityAttributes = tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{}))
614612
}
615613

616614
return result, nil

website/docs/d/core_instance.html.markdown

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ The following attributes are exported:
179179
For the us-phoenix-1 and us-ashburn-1 regions, `phx` and `iad` are returned, respectively. For all other regions, the full region name is returned.
180180

181181
Examples: `phx`, `eu-frankfurt-1`
182-
* `security_attributes` - Security Attributes for this resource. This is unique to ZPR, and helps identify which resources are allowed to be accessed by what permission controls. Example: `{"Oracle-DataSecurity-ZPR": {"MaxEgressCount": {"value":"42","mode":"audit"}}}`
182+
* `security_attributes` - Security Attributes for this resource. This is unique to ZPR, and helps identify which resources are allowed to be accessed by what permission controls. Example: `{"Oracle-DataSecurity-ZPR.MaxEgressCount.value": "42", "Oracle-DataSecurity-ZPR.MaxEgressCount.mode": "audit"}`
183183
* `security_attributes_state` - The lifecycle state of the `securityAttributes`
184184
* `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).
185185
* `shape_config` - The shape configuration for an instance. The shape configuration determines the resources allocated to an instance.

website/docs/d/core_instances.html.markdown

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ The following attributes are exported:
194194
For the us-phoenix-1 and us-ashburn-1 regions, `phx` and `iad` are returned, respectively. For all other regions, the full region name is returned.
195195

196196
Examples: `phx`, `eu-frankfurt-1`
197-
* `security_attributes` - Security Attributes for this resource. This is unique to ZPR, and helps identify which resources are allowed to be accessed by what permission controls. Example: `{"Oracle-DataSecurity-ZPR": {"MaxEgressCount": {"value":"42","mode":"audit"}}}`
197+
* `security_attributes` - Security Attributes for this resource. This is unique to ZPR, and helps identify which resources are allowed to be accessed by what permission controls. Example: `{"Oracle-DataSecurity-ZPR.MaxEgressCount.value": "42", "Oracle-DataSecurity-ZPR.MaxEgressCount.mode": "audit"}`
198198
* `security_attributes_state` - The lifecycle state of the `securityAttributes`
199199
* `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).
200200
* `shape_config` - The shape configuration for an instance. The shape configuration determines the resources allocated to an instance.

0 commit comments

Comments
 (0)