Skip to content

Commit 309bbc5

Browse files
Nilesh Parmarsrinioci
authored andcommitted
Added - Support for OS Patching in Batch API Design
1 parent ce4eedd commit 309bbc5

9 files changed

+459
-46
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
"github.com/oracle/terraform-provider-oci/httpreplay"
12+
"github.com/oracle/terraform-provider-oci/internal/acctest"
13+
14+
"github.com/oracle/terraform-provider-oci/internal/utils"
15+
)
16+
17+
// issue-routing-tag: bds/default
18+
func TestBdsBdsInstanceOSPatchActionResource(t *testing.T) {
19+
//t.Skip("Run manual with an older cluster with patch available")
20+
httpreplay.SetScenario("TestBdsBdsInstanceOSPatchActionResource")
21+
defer httpreplay.SaveScenario()
22+
23+
config := acctest.ProviderTestConfig()
24+
25+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
26+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
27+
28+
subnetId := utils.GetEnvSettingWithBlankDefault("subnet_ocid")
29+
subnetIdVariableStr := fmt.Sprintf("variable \"subnet_id\" { default = \"%s\" }\n", subnetId)
30+
31+
// Pass cluster ocid as variable to directly apply OS patch to existing cluster
32+
//bdsinstanceId := utils.GetEnvSettingWithBlankDefault("bdsinstance_ocid")
33+
//bdsinstanceIdVariableStr := fmt.Sprintf("variable \"bdsinstance_id\" { default = \"%s\" }\n", bdsinstanceId)
34+
35+
// Passing patching configs strategy & parameters in this representation
36+
BdsBdsInstanceOSPatchConfigRepresentation := map[string]interface{}{
37+
"patching_config_strategy": acctest.Representation{RepType: acctest.Required, Create: "PATCHING_BASED"},
38+
"batch_size": acctest.Representation{RepType: acctest.Required, Create: "3"},
39+
"wait_time_between_batch_in_seconds": acctest.Representation{RepType: acctest.Required, Create: "60"},
40+
"tolerance_threshold_per_batch": acctest.Representation{RepType: acctest.Required, Create: "0"},
41+
}
42+
43+
// Passing timeout representation since OS patching may take more time then default values
44+
PatchTimeoutsRepresentation := map[string]interface{}{
45+
"create": acctest.Representation{RepType: acctest.Required, Create: `4h`},
46+
"update": acctest.Representation{RepType: acctest.Required, Create: `4h`},
47+
"delete": acctest.Representation{RepType: acctest.Required, Create: `4h`},
48+
}
49+
50+
// To use default patching strategy (nodes will be patched and rebooted AD/FD by AD/FD), comment patching_configs & above config representation
51+
var (
52+
BdsBdsInstanceOSPatchActionRepresentation = map[string]interface{}{
53+
"bds_instance_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_bds_bds_instance.test_bds_instance.id}`},
54+
"cluster_admin_password": acctest.Representation{RepType: acctest.Required, Create: `T3JhY2xlVGVhbVVTQSExMjM=`},
55+
"os_patch_version": acctest.Representation{RepType: acctest.Required, Create: "ol7.9-x86_64-1.28.0.619-0.0"},
56+
"patching_configs": acctest.RepresentationGroup{RepType: acctest.Required, Group: BdsBdsInstanceOSPatchConfigRepresentation},
57+
"timeouts": acctest.RepresentationGroup{RepType: acctest.Required, Group: PatchTimeoutsRepresentation},
58+
}
59+
60+
BdsBdsInstanceOSPatchActionResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance", "test_bds_instance", acctest.Required, acctest.Create, bdsInstanceOdhRepresentation) +
61+
acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) +
62+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation)
63+
)
64+
65+
resourceName := "oci_bds_bds_instance_os_patch_action.test_bds_instance_os_patch_action"
66+
67+
// Save TF content to Create resource with only required properties. This has to be exactly the same as the config part in the create step in the test.
68+
acctest.SaveConfigContent(config+compartmentIdVariableStr+subnetIdVariableStr+BdsBdsInstanceOSPatchActionResourceDependencies+
69+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_os_patch_action", "test_bds_instance_os_patch_action", acctest.Required, acctest.Create, BdsBdsInstanceOSPatchActionRepresentation), "bds", "bdsInstanceOSPatchAction", t)
70+
71+
acctest.ResourceTest(t, nil, []resource.TestStep{
72+
// verify Create
73+
{
74+
Config: config + compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceOSPatchActionResourceDependencies +
75+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_os_patch_action", "test_bds_instance_os_patch_action", acctest.Required, acctest.Create, BdsBdsInstanceOSPatchActionRepresentation),
76+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
77+
resource.TestCheckResourceAttrSet(resourceName, "bds_instance_id"),
78+
resource.TestCheckResourceAttr(resourceName, "cluster_admin_password", "T3JhY2xlVGVhbVVTQSExMjM="),
79+
resource.TestCheckResourceAttrSet(resourceName, "state"),
80+
),
81+
},
82+
})
83+
84+
}

internal/integrationtest/bds_bds_instance_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,10 @@ func TestBdsBdsInstanceResource_basic(t *testing.T) {
345345
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.image_id"),
346346
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.instance_id"),
347347
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.ip_address"),
348+
348349
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.node_type"),
349350
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.shape"),
351+
350352
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.state"),
351353
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.time_created"),
352354
resource.TestCheckResourceAttrSet(singularDatasourceName, "number_of_nodes"),

internal/integrationtest/bds_odh_instance_resource_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ var (
6565
"kerberos_realm_name": acctest.Representation{RepType: acctest.Optional, Create: `BDSCLOUDSERVICE.ORACLE.COM`},
6666
"master_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodeFlexShapeRepresentation},
6767
"util_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodeFlexShapeRepresentation},
68-
"worker_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodeDenseShapeRepresentation},
68+
"worker_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodesOdhWorkerRepresentation},
6969
"bootstrap_script_url": acctest.Representation{RepType: acctest.Optional, Create: `${var.bootstrap_script_url}`, Update: `${var.bootstrap_script_urlU}`},
7070
"compute_only_worker_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodeFlexShapeRepresentation},
7171
"edge_node": acctest.RepresentationGroup{RepType: acctest.Required, Group: bdsInstanceNodeFlexShapeRepresentation},
@@ -76,9 +76,9 @@ var (
7676

7777
//Uncomment this when running in home region (PHX)
7878
// "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")}`},
79-
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"bar-key": "value"}, Update: map[string]string{"Department": "Accounting"}},
79+
//"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"bar-key": "value"}, Update: map[string]string{"Department": "Accounting"}},
8080
"network_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: bdsInstanceOdhNetworkConfigRepresentation},
81-
//"os_patch_version": acctest.Representation{RepType: acctest.Optional, Update: `ol7.9-x86_64-1.24.0.100-0.0`}, // Test when patch is available
81+
//"os_patch_version": acctest.Representation{RepType: acctest.Optional, Update: `ol7.9-x86_64-1.28.0.619-0.0`}, // Test when patch is available
8282
}
8383

8484
bdsInstanceOdhWithFlexComputeAndRegularMasterUtilRepresentation = acctest.RepresentationCopyWithNewProperties(bdsInstanceOdhRepresentation,
@@ -164,7 +164,7 @@ var (
164164
}
165165
bdsInstanceOdhNetworkConfigRepresentation = map[string]interface{}{
166166
"cidr_block": acctest.Representation{RepType: acctest.Optional, Create: `111.112.0.0/16`},
167-
"is_nat_gateway_required": acctest.Representation{RepType: acctest.Optional, Create: `true`},
167+
"is_nat_gateway_required": acctest.Representation{RepType: acctest.Required, Create: `true`},
168168
}
169169
bdsInstanceKafkaBrokerNodeFlexShapeRepresentation = map[string]interface{}{
170170
"shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard.E4.Flex`},
@@ -683,6 +683,17 @@ func TestResourceBdsOdhInstance(t *testing.T) {
683683
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.image_id"),
684684
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.instance_id"),
685685
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.ip_address"),
686+
687+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.is_reboot_required"),
688+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.local_disks_total_size_in_gbs"),
689+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.memory_in_gbs"),
690+
resource.TestCheckResourceAttr(singularDatasourceName, "nodes.0.node_type", "MASTER"),
691+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.nvmes"),
692+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.ocpus"),
693+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.os_version"),
694+
resource.TestCheckResourceAttr(singularDatasourceName, "nodes.0.shape", "VM.Standard.E4.Flex"),
695+
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.ssh_fingerprint"),
696+
686697
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.node_type"),
687698
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.shape"),
688699
resource.TestCheckResourceAttrSet(singularDatasourceName, "nodes.0.state"),

0 commit comments

Comments
 (0)