Skip to content

Commit f974545

Browse files
Terraform Team Automationsagarp337
authored andcommitted
Added - Support for Remove internal-only additionalCapabilities parameter from Container Instances Public SDK/CLI and Terraform
1 parent 39b552f commit f974545

7 files changed

+233
-250
lines changed

examples/container_instances/main.tf

Lines changed: 41 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ resource "oci_core_network_security_group" "test_network_security_group" {
2626
vcn_id = oci_core_vcn.test_vcn.id
2727
lifecycle {
2828
ignore_changes = [
29-
"defined_tags"]
29+
"defined_tags"]
3030
}
3131
}
3232

@@ -36,31 +36,31 @@ resource "oci_core_vcn" "test_vcn" {
3636
dns_label = "testvcn"
3737
lifecycle {
3838
ignore_changes = [
39-
"defined_tags"]
39+
"defined_tags"]
4040
}
4141
}
4242

4343
resource "oci_core_subnet" "test_subnet" {
44-
cidr_block = "10.0.0.0/24"
45-
compartment_id = var.compartment_ocid
46-
dns_label = "testsubnet"
47-
route_table_id = oci_core_route_table.test_route_table.id
44+
cidr_block = "10.0.0.0/24"
45+
compartment_id = var.compartment_ocid
46+
dns_label = "testsubnet"
47+
route_table_id = oci_core_route_table.test_route_table.id
4848
security_list_ids = [
49-
"${oci_core_security_list.test_sec_list.id}"]
50-
vcn_id = oci_core_vcn.test_vcn.id
49+
"${oci_core_security_list.test_sec_list.id}"]
50+
vcn_id = oci_core_vcn.test_vcn.id
5151
lifecycle {
5252
ignore_changes = [
53-
"defined_tags"]
53+
"defined_tags"]
5454
}
5555
}
5656

5757
resource "oci_core_security_list" "test_sec_list" {
5858
compartment_id = var.compartment_ocid
5959
vcn_id = oci_core_vcn.test_vcn.id
6060
egress_security_rules {
61-
destination = "0.0.0.0/0"
62-
protocol = "all"
63-
stateless = "false"
61+
destination = "0.0.0.0/0"
62+
protocol = "all"
63+
stateless = "false"
6464
}
6565

6666
ingress_security_rules {
@@ -118,55 +118,43 @@ data "oci_identity_availability_domains" "test_availability_domains" {
118118
compartment_id = var.tenancy_ocid
119119
}
120120

121-
resource "oci_identity_tag_namespace" "tag-namespace1" {
122-
#Required
123-
compartment_id = var.tenancy_ocid
124-
description = "example tag namespace"
125-
name = var.defined_tag_namespace_name != "" ? var.defined_tag_namespace_name : "example-tag-namespace-all"
121+
resource "time_sleep" "wait_90_seconds" {
122+
depends_on = [oci_core_subnet.test_subnet, oci_core_internet_gateway.test_ig]
126123

127-
is_retired = false
128-
}
129-
130-
resource "oci_identity_tag" "tag1" {
131-
#Required
132-
description = "example tag"
133-
name = "example-tag"
134-
tag_namespace_id = oci_identity_tag_namespace.tag-namespace1.id
135-
136-
is_retired = false
124+
create_duration = "90s"
137125
}
138126

139127
resource "oci_container_instances_container_instance" "test_container_instance" {
128+
depends_on = [time_sleep.wait_90_seconds]
129+
140130
#Required
141-
availability_domain = data.oci_identity_availability_domains.test_availability_domains.availability_domains.2.name
142-
compartment_id = var.compartment_ocid
131+
availability_domain = data.oci_identity_availability_domains.test_availability_domains.availability_domains.2.name
132+
compartment_id = var.compartment_ocid
143133
containers {
144134
#Required
145-
image_url = "busybox"
135+
image_url = "busybox"
146136

147137
#Optional
148-
additional_capabilities = [
149-
"CAP_NET_ADMIN"]
150138
arguments = [
151139
"-c",
152-
"sleep 24h"]
140+
"sleep 24h"]
153141
command = [
154-
"/bin/sh"]
142+
"/bin/sh"]
155143
display_name = "displayName"
156144
environment_variables = {
157145
"environment" = "variable"
158146
}
159147
health_checks {
160148
#Required
161-
health_check_type = "HTTP"
149+
health_check_type = "HTTP"
162150

163151
#Optional
164-
failure_action = "KILL"
165-
failure_threshold = "10"
152+
failure_action = "KILL"
153+
failure_threshold = "10"
166154
headers {
167155

168156
#Optional
169-
name = "name"
157+
name = "name"
170158
value = "value"
171159
}
172160
initial_delay_in_seconds = "10"
@@ -186,8 +174,8 @@ resource "oci_container_instances_container_instance" "test_container_instance"
186174
}
187175
volume_mounts {
188176
#Required
189-
mount_path = "/mnt"
190-
volume_name = "volumeName"
177+
mount_path = "/mnt"
178+
volume_name = "volumeName"
191179

192180
#Optional
193181
is_read_only = "false"
@@ -206,44 +194,43 @@ resource "oci_container_instances_container_instance" "test_container_instance"
206194
subnet_id = oci_core_subnet.test_subnet.id
207195

208196
#Optional
209-
defined_tags = map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")
197+
defined_tags = map("tf_test_namespace.test_tag", "value")
210198
display_name = "displayName"
211199
freeform_tags = {
212200
"freeformTag" = "freeformTags"
213201
}
214-
hostname_label = "hostnamelabel"
215-
is_public_ip_assigned = "true"
216-
nsg_ids = []
217-
private_ip = "10.0.0.7"
202+
hostname_label = "hostnamelabel"
203+
is_public_ip_assigned = "true"
204+
nsg_ids = []
205+
private_ip = "10.0.0.7"
218206
skip_source_dest_check = "false"
219207
}
220208

221209
#Optional
222210
container_restart_policy = "ALWAYS"
223-
defined_tags = map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")
224-
display_name = "displayName"
211+
defined_tags = map("tf_test_namespace.test_tag", "value")
212+
display_name = "displayName"
225213
dns_config {
226214

227215
#Optional
228216
nameservers = [
229-
"8.8.8.8"]
217+
"8.8.8.8"]
230218
options = [
231-
"options"]
219+
"options"]
232220
searches = [
233-
"search domain"]
221+
"search domain"]
234222
}
235223
freeform_tags = {
236224
"bar-key" = "foo-value"
237225
}
238226
graceful_shutdown_timeout_in_seconds = "10"
239227
lifecycle {
240-
ignore_changes = [
241-
"defined_tags"]
228+
ignore_changes = ["defined_tags", "vnics[0].defined_tags"]
242229
}
243-
state = "ACTIVE"
230+
state = "ACTIVE"
244231
volumes {
245232
#Required
246-
name = "volumeName"
233+
name = "volumeName"
247234
volume_type = "EMPTYDIR"
248235

249236
#Optional

internal/integrationtest/container_instances_container_instance_test.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package integrationtest
66
import (
77
"context"
88
"fmt"
9+
"log"
910
"strconv"
1011
"testing"
1112
"time"
@@ -56,7 +57,7 @@ var (
5657
"shape_config": acctest.RepresentationGroup{RepType: acctest.Required, Group: ContainerInstancesContainerInstanceShapeConfigRepresentation},
5758
"vnics": acctest.RepresentationGroup{RepType: acctest.Required, Group: ContainerInstancesContainerInstanceVnicsRepresentation},
5859
"container_restart_policy": acctest.Representation{RepType: acctest.Optional, Create: `ALWAYS`},
59-
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, Update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
60+
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("tf_test_namespace.test_tag", "value")}`, Update: `${map("tf_test_namespace.test_tag", "updatedValue")}`},
6061
"display_name": acctest.Representation{RepType: acctest.Required, Create: `displayName`, Update: `displayName2`},
6162
"dns_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerInstancesContainerInstanceDnsConfigRepresentation},
6263
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"freeformTags": "freeformTags"}, Update: map[string]string{"freeformTags2": "freeformTags2"}},
@@ -67,7 +68,6 @@ var (
6768
}
6869
ContainerInstancesContainerInstanceContainersRepresentation = map[string]interface{}{
6970
"image_url": acctest.Representation{RepType: acctest.Required, Create: `busybox`},
70-
"additional_capabilities": acctest.Representation{RepType: acctest.Optional, Create: []string{`CAP_NET_ADMIN`}},
7171
"arguments": acctest.Representation{RepType: acctest.Optional, Create: []string{`-c`, `sleep 24h`}},
7272
"command": acctest.Representation{RepType: acctest.Optional, Create: []string{`/bin/sh`}},
7373
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
@@ -80,7 +80,6 @@ var (
8080
}
8181
ContainerInstancesContainerInstanceContainersSecondRepresentation = map[string]interface{}{
8282
"image_url": acctest.Representation{RepType: acctest.Required, Create: `busybox`},
83-
"additional_capabilities": acctest.Representation{RepType: acctest.Optional, Create: []string{`CAP_NET_ADMIN`}},
8483
"arguments": acctest.Representation{RepType: acctest.Optional, Create: []string{`-c`, `sleep 24h`}},
8584
"command": acctest.Representation{RepType: acctest.Optional, Create: []string{`/bin/sh`}},
8685
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `secondDisplayName`, Update: `secondDisplayName2`},
@@ -97,7 +96,7 @@ var (
9796
}
9897
ContainerInstancesContainerInstanceVnicsRepresentation = map[string]interface{}{
9998
"subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet.id}`},
100-
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, Update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
99+
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("tf_test_namespace.test_tag", "value")}`, Update: `${map("tf_test_namespace.test_tag", "updatedValue")}`},
101100
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
102101
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"freeformTags": "freeformTags"}, Update: map[string]string{"freeformTags2": "freeformTags2"}},
103102
"hostname_label": acctest.Representation{RepType: acctest.Optional, Create: `hostnamelabel`, Update: `hostnamelabel2`},
@@ -143,7 +142,7 @@ var (
143142

144143
//check how this works for multiple containers
145144
ignoreChangesCIDefinedTagsRepresentation = map[string]interface{}{
146-
"ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`}},
145+
"ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`, `vnics[0].defined_tags`}},
147146
}
148147

149148
CISubnetRepresentation = map[string]interface{}{
@@ -243,8 +242,7 @@ var (
243242
acctest.GenerateResourceFromRepresentationMap("oci_core_security_list", "test_sec_list", acctest.Required, acctest.Create, CISecurityListRepresentation) +
244243
acctest.GenerateResourceFromRepresentationMap("oci_core_internet_gateway", "test_ig", acctest.Required, acctest.Create, CIInternetGatewayRepresentation) +
245244
acctest.GenerateResourceFromRepresentationMap("oci_core_route_table", "test_route_table", acctest.Required, acctest.Create, CIRouteTableRepresentation) +
246-
AvailabilityDomainConfig +
247-
DefinedTagsDependencies
245+
AvailabilityDomainConfig
248246
)
249247

250248
// issue-routing-tag: container_instances/default
@@ -270,6 +268,12 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
270268
acctest.GenerateResourceFromRepresentationMap("oci_container_instances_container_instance", "test_container_instance", acctest.Optional, acctest.Create, ContainerInstancesContainerInstanceRepresentation), "containerinstances", "containerInstance", t)
271269

272270
acctest.ResourceTest(t, testAccCheckContainerInstancesContainerInstanceDestroy, []resource.TestStep{
271+
// Create dependencies and wait
272+
{
273+
Config: config + compartmentIdVariableStr + ContainerInstancesContainerInstanceResourceDependencies,
274+
Check: delayAndReturnNil(),
275+
},
276+
273277
// verify default create and check power on
274278
{
275279
Config: config + compartmentIdVariableStr + ContainerInstancesContainerInstanceResourceDependencies +
@@ -388,7 +392,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
388392
resource.TestCheckResourceAttrSet(resourceName, "container_count"),
389393
resource.TestCheckResourceAttr(resourceName, "container_restart_policy", "ALWAYS"),
390394
resource.TestCheckResourceAttr(resourceName, "containers.#", "1"),
391-
resource.TestCheckResourceAttr(resourceName, "containers.0.additional_capabilities.#", "1"),
392395
resource.TestCheckResourceAttr(resourceName, "containers.0.arguments.#", "2"),
393396
resource.TestCheckResourceAttr(resourceName, "containers.0.command.#", "1"),
394397
resource.TestCheckResourceAttrSet(resourceName, "containers.0.container_id"),
@@ -460,7 +463,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
460463
resource.TestCheckResourceAttrSet(resourceName, "container_count"),
461464
resource.TestCheckResourceAttr(resourceName, "container_restart_policy", "ALWAYS"),
462465
resource.TestCheckResourceAttr(resourceName, "containers.#", "1"),
463-
resource.TestCheckResourceAttr(resourceName, "containers.0.additional_capabilities.#", "1"),
464466
resource.TestCheckResourceAttr(resourceName, "containers.0.arguments.#", "2"),
465467
resource.TestCheckResourceAttr(resourceName, "containers.0.command.#", "1"),
466468
resource.TestCheckResourceAttrSet(resourceName, "containers.0.container_id"),
@@ -527,7 +529,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
527529
resource.TestCheckResourceAttrSet(resourceName, "container_count"),
528530
resource.TestCheckResourceAttr(resourceName, "container_restart_policy", "ALWAYS"),
529531
resource.TestCheckResourceAttr(resourceName, "containers.#", "1"),
530-
resource.TestCheckResourceAttr(resourceName, "containers.0.additional_capabilities.#", "1"),
531532
resource.TestCheckResourceAttr(resourceName, "containers.0.arguments.#", "2"),
532533
resource.TestCheckResourceAttr(resourceName, "containers.0.command.#", "1"),
533534
resource.TestCheckResourceAttrSet(resourceName, "containers.0.container_id"),
@@ -665,7 +666,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
665666
resource.TestCheckResourceAttrSet(resourceName, "container_count"),
666667
resource.TestCheckResourceAttr(resourceName, "container_count", "2"),
667668
resource.TestCheckResourceAttr(resourceName, "containers.#", "2"),
668-
resource.TestCheckResourceAttr(resourceName, "containers.0.additional_capabilities.#", "1"),
669669
resource.TestCheckResourceAttr(resourceName, "containers.0.arguments.#", "2"),
670670
resource.TestCheckResourceAttr(resourceName, "containers.0.command.#", "1"),
671671
resource.TestCheckResourceAttrSet(resourceName, "containers.0.container_id"),
@@ -683,7 +683,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
683683
resource.TestCheckResourceAttr(resourceName, "containers.0.volume_mounts.0.sub_path", "/subPath"),
684684
resource.TestCheckResourceAttrSet(resourceName, "containers.0.volume_mounts.0.volume_name"),
685685
resource.TestCheckResourceAttr(resourceName, "containers.0.working_directory", "/mnt"),
686-
resource.TestCheckResourceAttr(resourceName, "containers.1.additional_capabilities.#", "1"),
687686
resource.TestCheckResourceAttr(resourceName, "containers.1.arguments.#", "2"),
688687
resource.TestCheckResourceAttr(resourceName, "containers.1.command.#", "1"),
689688
resource.TestCheckResourceAttrSet(resourceName, "containers.1.container_id"),
@@ -727,7 +726,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
727726
resource.TestCheckResourceAttrSet(resourceName, "container_count"),
728727
resource.TestCheckResourceAttr(resourceName, "container_count", "2"),
729728
resource.TestCheckResourceAttr(resourceName, "containers.#", "2"),
730-
resource.TestCheckResourceAttr(resourceName, "containers.0.additional_capabilities.#", "1"),
731729
resource.TestCheckResourceAttr(resourceName, "containers.0.arguments.#", "2"),
732730
resource.TestCheckResourceAttr(resourceName, "containers.0.command.#", "1"),
733731
resource.TestCheckResourceAttrSet(resourceName, "containers.0.container_id"),
@@ -745,7 +743,6 @@ func TestContainerInstancesContainerInstanceResource_basic(t *testing.T) {
745743
resource.TestCheckResourceAttr(resourceName, "containers.0.volume_mounts.0.sub_path", "/subPath"),
746744
resource.TestCheckResourceAttrSet(resourceName, "containers.0.volume_mounts.0.volume_name"),
747745
resource.TestCheckResourceAttr(resourceName, "containers.0.working_directory", "/mnt"),
748-
resource.TestCheckResourceAttr(resourceName, "containers.1.additional_capabilities.#", "1"),
749746
resource.TestCheckResourceAttr(resourceName, "containers.1.arguments.#", "2"),
750747
resource.TestCheckResourceAttr(resourceName, "containers.1.command.#", "1"),
751748
resource.TestCheckResourceAttrSet(resourceName, "containers.1.container_id"),
@@ -900,3 +897,12 @@ func ContainerInstancesContainerInstanceSweepResponseFetchOperation(client *tf_c
900897
})
901898
return err
902899
}
900+
901+
func delayAndReturnNil() resource.TestCheckFunc {
902+
return func(s *terraform.State) error {
903+
log.Println("Beginning wait ...")
904+
time.Sleep(90 * time.Second)
905+
log.Println("Ending wait ...")
906+
return nil
907+
}
908+
}

internal/service/container_instances/container_instances_container_instance_resource.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,6 @@ func ContainerInstancesContainerInstanceResource() *schema.Resource {
6060
},
6161

6262
// Optional
63-
"additional_capabilities": {
64-
Type: schema.TypeList,
65-
Optional: true,
66-
Computed: true,
67-
ForceNew: true,
68-
Elem: &schema.Schema{
69-
Type: schema.TypeString,
70-
},
71-
},
7263
"arguments": {
7364
Type: schema.TypeList,
7465
Optional: true,
@@ -1650,19 +1641,6 @@ func ContainerInstanceSummaryToMap(obj oci_container_instances.ContainerInstance
16501641
func (s *ContainerInstancesContainerInstanceResourceCrud) mapToCreateContainerDetails(fieldKeyFormat string) (oci_container_instances.CreateContainerDetails, error) {
16511642
result := oci_container_instances.CreateContainerDetails{}
16521643

1653-
if additionalCapabilities, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "additional_capabilities")); ok {
1654-
interfaces := additionalCapabilities.([]interface{})
1655-
tmp := make([]oci_container_instances.ContainerCapabilityEnum, len(interfaces))
1656-
for i := range interfaces {
1657-
if interfaces[i] != nil {
1658-
tmp[i], _ = oci_container_instances.GetMappingContainerCapabilityEnum(interfaces[i].(string))
1659-
}
1660-
}
1661-
if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "additional_capabilities")) {
1662-
result.AdditionalCapabilities = tmp
1663-
}
1664-
}
1665-
16661644
if arguments, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "arguments")); ok {
16671645
interfaces := arguments.([]interface{})
16681646
tmp := make([]string, len(interfaces))
@@ -2674,10 +2652,6 @@ func ContainerToMap(obj oci_container_instances.Container) map[string]interface{
26742652
result["time_updated"] = obj.TimeUpdated.String()
26752653
}
26762654

2677-
if obj.AdditionalCapabilities != nil {
2678-
result["additional_capabilities"] = obj.AdditionalCapabilities
2679-
}
2680-
26812655
if obj.Arguments != nil {
26822656
result["arguments"] = obj.Arguments
26832657
}

0 commit comments

Comments
 (0)