Skip to content

Commit e4cf917

Browse files
Terraform Team Automationvarakali
authored andcommitted
Added - Support for Instance maintenance events api
1 parent e89ba55 commit e4cf917

12 files changed

+1279
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
2+
# Need to have this block even though it's empty; for import testing
3+
provider "oci" {
4+
}
5+
6+
variable "tenancy_ocid" {
7+
}
8+
9+
variable "compartment_id" {
10+
}
11+
12+
variable "instance_id" {
13+
}
14+
15+
variable "instance_maintenance_event_id" {
16+
}
17+
18+
variable "ssh_public_key" {
19+
}
20+
21+
variable "region" {
22+
default = "us-ashburn-1"
23+
}
24+
25+
26+
data "oci_core_instance_maintenance_events" "test_instance_maintenance_event" {
27+
compartment_id = var.compartment_id
28+
filter {
29+
name = "id"
30+
values = [oci_core_instance_maintenance_event.test_instance_maintenance_event.id]
31+
}
32+
instance_action = "REBOOT_MIGRATION"
33+
instance_id = var.instance_id
34+
state = "SCHEDULED"
35+
}
36+
37+
// Gets a list of all Oracle Linux 7.5 images that support a given Instance shape
38+
data "oci_core_images" "supported_shape_images" {
39+
compartment_id = var.tenancy_ocid
40+
shape = "VM.Standard2.1"
41+
operating_system = "Oracle Linux"
42+
}
43+
44+
45+
resource "oci_core_instance_maintenance_event" "test_instance_maintenance_event" {
46+
can_delete_local_storage = "true"
47+
display_name = "displayName2"
48+
freeform_tags = {
49+
"Department" = "Accounting"
50+
}
51+
instance_maintenance_event_id = var.instance_maintenance_event_id
52+
time_window_start = "2025-01-12T15:04:05Z"
53+
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
// Copyright (c) 2017, 2023, 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+
var (
18+
CoreInstanceMaintenanceEventSingularDataSourceRepresentation = map[string]interface{}{
19+
"instance_maintenance_event_id": acctest.Representation{RepType: acctest.Required, Create: `${var.instance_maintenance_event_id}`},
20+
}
21+
22+
CoreInstanceMaintenanceEventDataSourceRepresentation = map[string]interface{}{
23+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
24+
"instance_action": acctest.Representation{RepType: acctest.Optional, Create: `REBOOT_MIGRATION`},
25+
"instance_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.instance_id}`},
26+
"state": acctest.Representation{RepType: acctest.Optional, Create: `SCHEDULED`},
27+
"filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreInstanceMaintenanceEventDataSourceFilterRepresentation}}
28+
CoreInstanceMaintenanceEventDataSourceFilterRepresentation = map[string]interface{}{
29+
"name": acctest.Representation{RepType: acctest.Required, Create: `id`},
30+
"values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_instance_maintenance_event.test_instance_maintenance_event.id}`}},
31+
}
32+
33+
CoreInstanceMaintenanceEventRepresentation = map[string]interface{}{
34+
"instance_maintenance_event_id": acctest.Representation{RepType: acctest.Required, Create: `${var.instance_maintenance_event_id}`},
35+
"can_delete_local_storage": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`},
36+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
37+
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
38+
"time_window_start": acctest.Representation{RepType: acctest.Optional, Create: `2006-01-02T15:04:05Z`, Update: `2025-01-12T15:04:05Z`},
39+
}
40+
41+
CoreInstanceMaintenanceEventResourceDependencies = utils.OciImageIdsVariable
42+
// acctest.GenerateResourceFromRepresentationMap("oci_core_instance_maintenance_event", "test_instance_maintenance_event", acctest.Required, acctest.Create, CoreInstanceMaintenanceEventRepresentation) +
43+
// acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{
44+
// "dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
45+
// })) +
46+
// acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{
47+
// "dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
48+
// })) +
49+
// acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Create, CoreInstanceRepresentation) +
50+
// AvailabilityDomainConfig +
51+
// DefinedTagsDependencies
52+
)
53+
54+
// issue-routing-tag: core/default
55+
func TestCoreInstanceMaintenanceEventResource_basic(t *testing.T) {
56+
httpreplay.SetScenario("TestCoreInstanceMaintenanceEventResource_basic")
57+
defer httpreplay.SaveScenario()
58+
59+
config := acctest.ProviderTestConfig()
60+
61+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
62+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
63+
64+
instanceId := utils.GetEnvSettingWithBlankDefault("instance_id")
65+
instanceIdVariableStr := fmt.Sprintf("variable \"instance_id\" { default = \"%s\" }\n", instanceId)
66+
67+
instanceMaintenanceEventId := utils.GetEnvSettingWithBlankDefault("instance_maintenance_event_id")
68+
instanceMaintenanceEventIdVariableStr := fmt.Sprintf("variable \"instance_maintenance_event_id\" { default = \"%s\" }\n", instanceMaintenanceEventId)
69+
70+
resourceName := "oci_core_instance_maintenance_event.test_instance_maintenance_event"
71+
acctest.SaveConfigContent(config+compartmentIdVariableStr+instanceIdVariableStr+instanceMaintenanceEventIdVariableStr+CoreInstanceMaintenanceEventResourceDependencies, "core", "instanceMaintenanceEvent", t)
72+
73+
acctest.ResourceTest(t, nil, []resource.TestStep{
74+
75+
// verify updates to updatable parameters
76+
{
77+
Config: config + compartmentIdVariableStr + instanceIdVariableStr + instanceMaintenanceEventIdVariableStr +
78+
CoreInstanceMaintenanceEventResourceDependencies +
79+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance_maintenance_event", "test_instance_maintenance_event", acctest.Optional, acctest.Update, CoreInstanceMaintenanceEventRepresentation),
80+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
81+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
82+
resource.TestCheckResourceAttrSet(resourceName, "instance_maintenance_event_id"),
83+
resource.TestCheckResourceAttr(resourceName, "time_window_start", `2025-01-12T15:04:05Z`),
84+
),
85+
},
86+
// verify datasource
87+
{
88+
Config: config +
89+
acctest.GenerateDataSourceFromRepresentationMap("oci_core_instance_maintenance_events", "test_instance_maintenance_event", acctest.Optional, acctest.Update, CoreInstanceMaintenanceEventDataSourceRepresentation) +
90+
compartmentIdVariableStr + instanceIdVariableStr + instanceMaintenanceEventIdVariableStr + CoreInstanceMaintenanceEventResourceDependencies +
91+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance_maintenance_event", "test_instance_maintenance_event", acctest.Optional, acctest.Update, CoreInstanceMaintenanceEventRepresentation),
92+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
93+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
94+
resource.TestCheckResourceAttr(resourceName, "instance_action", "REBOOT_MIGRATION"),
95+
resource.TestCheckResourceAttr(resourceName, "instance_id", instanceId),
96+
resource.TestCheckResourceAttrSet(resourceName, "state"),
97+
),
98+
},
99+
// verify singular datasource
100+
{
101+
Config: config +
102+
acctest.GenerateResourceFromRepresentationMap("oci_core_instance_maintenance_event", "test_instance_maintenance_event", acctest.Required, acctest.Create, CoreInstanceMaintenanceEventRepresentation) +
103+
compartmentIdVariableStr + instanceIdVariableStr + instanceMaintenanceEventIdVariableStr,
104+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
105+
resource.TestCheckResourceAttrSet(resourceName, "instance_maintenance_event_id"),
106+
resource.TestCheckResourceAttr(resourceName, "can_delete_local_storage", "true"),
107+
resource.TestCheckResourceAttrSet(resourceName, "can_reschedule"),
108+
resource.TestCheckResourceAttrSet(resourceName, "compartment_id"),
109+
resource.TestCheckResourceAttrSet(resourceName, "created_by"),
110+
resource.TestCheckResourceAttrSet(resourceName, "description"),
111+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
112+
resource.TestCheckResourceAttrSet(resourceName, "estimated_duration"),
113+
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
114+
resource.TestCheckResourceAttrSet(resourceName, "id"),
115+
resource.TestCheckResourceAttrSet(resourceName, "instance_action"),
116+
resource.TestCheckResourceAttrSet(resourceName, "maintenance_category"),
117+
resource.TestCheckResourceAttrSet(resourceName, "maintenance_reason"),
118+
resource.TestCheckResourceAttrSet(resourceName, "start_window_duration"),
119+
resource.TestCheckResourceAttrSet(resourceName, "state"),
120+
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
121+
resource.TestCheckResourceAttrSet(resourceName, "time_finished"),
122+
resource.TestCheckResourceAttrSet(resourceName, "time_hard_due_date"),
123+
resource.TestCheckResourceAttrSet(resourceName, "time_window_start"),
124+
),
125+
},
126+
// verify resource import
127+
// {
128+
// Config: config + acctest.GenerateResourceFromRepresentationMap("oci_core_instance_maintenance_event", "test_instance_maintenance_event", acctest.Required, acctest.Create, CoreInstanceMaintenanceEventRepresentation) +
129+
// compartmentIdVariableStr + instanceIdVariableStr,
130+
// ImportState: true,
131+
// ImportStateVerify: true,
132+
// ImportStateVerifyIgnore: []string{
133+
// "alternative_resolution_action",
134+
// },
135+
// ResourceName: resourceName,
136+
//},
137+
})
138+
}

internal/service/core/core_export.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,17 @@ var exportCoreComputeCapacityTopologyHints = &tf_export.TerraformResourceHints{
930930
},
931931
}
932932

933+
var exportCoreInstanceMaintenanceEventHints = &tf_export.TerraformResourceHints{
934+
ResourceClass: "oci_core_instance_maintenance_event",
935+
DatasourceClass: "oci_core_instance_maintenance_events",
936+
DatasourceItemsAttr: "instance_maintenance_events",
937+
ResourceAbbreviation: "instance_maintenance_event",
938+
RequireResourceRefresh: true,
939+
DiscoverableLifecycleStates: []string{
940+
string(oci_core.InstanceMaintenanceEventLifecycleStateSucceeded),
941+
},
942+
}
943+
933944
var coreResourceGraph = tf_export.TerraformResourceGraph{
934945
"oci_identity_compartment": {
935946
{TerraformResourceHints: exportCoreBootVolumeBackupHints},
@@ -979,6 +990,7 @@ var coreResourceGraph = tf_export.TerraformResourceGraph{
979990
{TerraformResourceHints: exportCoreCaptureFilterHints},
980991
{TerraformResourceHints: exportCoreVtapHints},
981992
{TerraformResourceHints: exportCoreComputeClusterHints},
993+
{TerraformResourceHints: exportCoreInstanceMaintenanceEventHints},
982994
{TerraformResourceHints: exportCoreComputeCapacityTopologyHints},
983995
},
984996
"oci_core_boot_volume": {
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package core
5+
6+
import (
7+
"context"
8+
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
oci_core "github.com/oracle/oci-go-sdk/v65/core"
12+
13+
"github.com/oracle/terraform-provider-oci/internal/client"
14+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
15+
)
16+
17+
func CoreInstanceMaintenanceEventDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["instance_maintenance_event_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return tfresource.GetSingularDataSourceItemSchema(CoreInstanceMaintenanceEventResource(), fieldMap, readSingularCoreInstanceMaintenanceEvent)
24+
}
25+
26+
func readSingularCoreInstanceMaintenanceEvent(d *schema.ResourceData, m interface{}) error {
27+
sync := &CoreInstanceMaintenanceEventDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*client.OracleClients).ComputeClient()
30+
31+
return tfresource.ReadResource(sync)
32+
}
33+
34+
type CoreInstanceMaintenanceEventDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_core.ComputeClient
37+
Res *oci_core.GetInstanceMaintenanceEventResponse
38+
}
39+
40+
func (s *CoreInstanceMaintenanceEventDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *CoreInstanceMaintenanceEventDataSourceCrud) Get() error {
45+
request := oci_core.GetInstanceMaintenanceEventRequest{}
46+
47+
if instanceMaintenanceEventId, ok := s.D.GetOkExists("instance_maintenance_event_id"); ok {
48+
tmp := instanceMaintenanceEventId.(string)
49+
request.InstanceMaintenanceEventId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "core")
53+
54+
response, err := s.Client.GetInstanceMaintenanceEvent(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *CoreInstanceMaintenanceEventDataSourceCrud) SetData() error {
64+
if s.Res == nil {
65+
return nil
66+
}
67+
68+
s.D.SetId(*s.Res.Id)
69+
70+
s.D.Set("additional_details", s.Res.AdditionalDetails)
71+
s.D.Set("additional_details", s.Res.AdditionalDetails)
72+
73+
s.D.Set("alternative_resolution_actions", s.Res.AlternativeResolutionActions)
74+
s.D.Set("alternative_resolution_actions", s.Res.AlternativeResolutionActions)
75+
76+
if s.Res.CanDeleteLocalStorage != nil {
77+
s.D.Set("can_delete_local_storage", *s.Res.CanDeleteLocalStorage)
78+
}
79+
80+
if s.Res.CanReschedule != nil {
81+
s.D.Set("can_reschedule", *s.Res.CanReschedule)
82+
}
83+
84+
if s.Res.CompartmentId != nil {
85+
s.D.Set("compartment_id", *s.Res.CompartmentId)
86+
}
87+
88+
if s.Res.CorrelationToken != nil {
89+
s.D.Set("correlation_token", *s.Res.CorrelationToken)
90+
}
91+
92+
s.D.Set("created_by", s.Res.CreatedBy)
93+
94+
if s.Res.DefinedTags != nil {
95+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
96+
}
97+
98+
if s.Res.Description != nil {
99+
s.D.Set("description", *s.Res.Description)
100+
}
101+
102+
if s.Res.DisplayName != nil {
103+
s.D.Set("display_name", *s.Res.DisplayName)
104+
}
105+
106+
if s.Res.EstimatedDuration != nil {
107+
s.D.Set("estimated_duration", *s.Res.EstimatedDuration)
108+
}
109+
110+
s.D.Set("freeform_tags", s.Res.FreeformTags)
111+
s.D.Set("freeform_tags", s.Res.FreeformTags)
112+
113+
s.D.Set("instance_action", s.Res.InstanceAction)
114+
115+
if s.Res.InstanceId != nil {
116+
s.D.Set("instance_id", *s.Res.InstanceId)
117+
}
118+
119+
s.D.Set("maintenance_category", s.Res.MaintenanceCategory)
120+
121+
s.D.Set("maintenance_reason", s.Res.MaintenanceReason)
122+
123+
if s.Res.StartWindowDuration != nil {
124+
s.D.Set("start_window_duration", *s.Res.StartWindowDuration)
125+
}
126+
127+
s.D.Set("state", s.Res.LifecycleState)
128+
129+
if s.Res.TimeCreated != nil {
130+
s.D.Set("time_created", s.Res.TimeCreated.String())
131+
}
132+
133+
if s.Res.TimeFinished != nil {
134+
s.D.Set("time_finished", s.Res.TimeFinished.String())
135+
}
136+
137+
if s.Res.TimeHardDueDate != nil {
138+
s.D.Set("time_hard_due_date", s.Res.TimeHardDueDate.String())
139+
}
140+
141+
if s.Res.TimeStarted != nil {
142+
s.D.Set("time_started", s.Res.TimeStarted.String())
143+
}
144+
145+
if s.Res.TimeWindowStart != nil {
146+
s.D.Set("time_window_start", s.Res.TimeWindowStart.Format(time.RFC3339Nano))
147+
s.D.Set("time_window_start", s.Res.TimeWindowStart.String())
148+
}
149+
150+
return nil
151+
}

0 commit comments

Comments
 (0)