From b0f6a1ea561675caa3343b55ff526163e585beaf Mon Sep 17 00:00:00 2001 From: Marcel Casado Date: Mon, 9 Sep 2024 21:55:47 -0600 Subject: [PATCH 01/31] Added - Support for Desktop as a Service: Private Access --- examples/desktops/desktop_pool/main.tf | 8 ++ ...ops-private-access-phx.auto.tfvars.example | 19 +++ .../desktop_pool/private_access/main.tf | 123 ++++++++++++++++++ .../desktop_pool/private_access/outputs.tf | 1 + .../desktop_pool/private_access/provider.tf | 1 + .../desktop_pool/private_access/variables.tf | 1 + ...> secure-desktops-phx.auto.tfvars.example} | 0 examples/desktops/desktop_pool/variables.tf | 13 ++ .../desktops_desktop_pool_test.go | 34 +++++ .../desktops_desktop_pool_data_source.go | 6 + .../desktops_desktop_pool_resource.go | 123 ++++++++++++++++++ .../d/desktops_desktop_pool.html.markdown | 12 +- .../d/desktops_desktop_pools.html.markdown | 12 +- .../r/desktops_desktop_pool.html.markdown | 30 ++++- 14 files changed, 371 insertions(+), 12 deletions(-) create mode 100644 examples/desktops/desktop_pool/private_access/desktops-private-access-phx.auto.tfvars.example create mode 100644 examples/desktops/desktop_pool/private_access/main.tf create mode 120000 examples/desktops/desktop_pool/private_access/outputs.tf create mode 120000 examples/desktops/desktop_pool/private_access/provider.tf create mode 120000 examples/desktops/desktop_pool/private_access/variables.tf rename examples/desktops/desktop_pool/{osdstack-phx.auto.tfvars.example => secure-desktops-phx.auto.tfvars.example} (100%) diff --git a/examples/desktops/desktop_pool/main.tf b/examples/desktops/desktop_pool/main.tf index ef4902b409d..ef24903c4c2 100644 --- a/examples/desktops/desktop_pool/main.tf +++ b/examples/desktops/desktop_pool/main.tf @@ -63,6 +63,14 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { # nsg_ids = var.desktop_pool_nsg_ids # time_start_scheduled = var.desktop_pool_time_start_scheduled # time_stop_scheduled = var.desktop_pool_time_stop_scheduled + # private_access_details { + # #Required + # subnet_id = var.desktop_pool_private_access_details_subnet_id + # + # #Optional + # nsg_ids = var.desktop_pool_private_access_details_nsg_ids + # private_ip = var.desktop_pool_private_access_details_private_ip + # } } data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" { diff --git a/examples/desktops/desktop_pool/private_access/desktops-private-access-phx.auto.tfvars.example b/examples/desktops/desktop_pool/private_access/desktops-private-access-phx.auto.tfvars.example new file mode 100644 index 00000000000..e978dae62b4 --- /dev/null +++ b/examples/desktops/desktop_pool/private_access/desktops-private-access-phx.auto.tfvars.example @@ -0,0 +1,19 @@ +# OCI config profile +config_file_profile="terraform-federation-test" + +# region (us-phoenix-1, ca-toronto-1, etc) +region="us-phoenix-1" + +# Secure Desktops Example Configuration + +compartment_id = "" + +desktop_pool_vcn_id = "" +desktop_pool_subnet_id = "" +desktop_pool_image_id = "" +desktop_pool_image_name = "" +desktop_pool_backup_policy_id = "" +desktop_pool_contact_details = "test%40example.com" +desktop_pool_private_access_details_subnet_id = "" +desktop_pool_private_access_details_nsg_ids = "[]" +desktop_pool_private_access_details_private_ip = "" diff --git a/examples/desktops/desktop_pool/private_access/main.tf b/examples/desktops/desktop_pool/private_access/main.tf new file mode 100644 index 00000000000..3bc7ada77d2 --- /dev/null +++ b/examples/desktops/desktop_pool/private_access/main.tf @@ -0,0 +1,123 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + + +resource "oci_desktops_desktop_pool" "test_desktop_pool" { + #Required + compartment_id = var.compartment_id + display_name = var.desktop_pool_display_name + contact_details = var.desktop_pool_contact_details + + are_privileged_users = var.desktop_pool_are_privileged_users + availability_domain = data.oci_identity_availability_domain.ad.name + + network_configuration { + #Required + subnet_id = var.desktop_pool_subnet_id + vcn_id = var.desktop_pool_vcn_id + } + + device_policy { + #Required + audio_mode = var.desktop_pool_device_policy_audio_mode + cdm_mode = var.desktop_pool_device_policy_cdm_mode + clipboard_mode = var.desktop_pool_device_policy_clipboard_mode + is_display_enabled = var.desktop_pool_device_policy_is_display_enabled + is_keyboard_enabled = var.desktop_pool_device_policy_is_keyboard_enabled + is_pointer_enabled = var.desktop_pool_device_policy_is_pointer_enabled + is_printing_enabled = var.desktop_pool_device_policy_is_printing_enabled + } + + image { + #Required + image_id = var.desktop_pool_image_id + image_name = var.desktop_pool_image_name + } + + availability_policy { + #Required + start_schedule { + #Required + cron_expression = var.desktop_pool_start_schedule_cron_expr + timezone = var.desktop_pool_start_schedule_timezone + } + stop_schedule { + #Required + cron_expression = var.desktop_pool_stop_schedule_cron_expr + timezone = var.desktop_pool_stop_schedule_timezone + } + } + + is_storage_enabled = var.desktop_pool_is_storage_enabled + storage_backup_policy_id = var.desktop_pool_backup_policy_id + storage_size_in_gbs = var.desktop_pool_storage_size_in_gbs + + shape_name = var.desktop_pool_shape_name + standby_size = var.desktop_pool_standby_size + maximum_size = var.desktop_pool_maximum_size + + #Optional + # defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.desktop_pool_defined_tags_value) + # description = var.desktop_pool_description + # freeform_tags = var.desktop_pool_freeform_tags + # nsg_ids = var.desktop_pool_nsg_ids + # time_start_scheduled = var.desktop_pool_time_start_scheduled + # time_stop_scheduled = var.desktop_pool_time_stop_scheduled + private_access_details { + #Required + subnet_id = var.desktop_pool_private_access_details_subnet_id + + #Optional + nsg_ids = var.desktop_pool_private_access_details_nsg_ids + private_ip = var.desktop_pool_private_access_details_private_ip + } +} + +data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" { + #Required + compartment_id = var.compartment_id + + #Optional + # availability_domain = data.oci_identity_availability_domain.ad.name + # display_name = var.desktop_pool_display_name + # id = var.desktop_pool_id + # state = var.desktop_pool_state +} + +data "oci_desktops_desktop_pool" "test_desktop_pool_datasource" { + #Required + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_desktops" "test_desktop_pool_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_volumes" "test_desktop_pool_volumes_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + #Optional + # display_name = var.desktop_pool_display_name + # state = var.desktop_pool_state +} + +data "oci_identity_availability_domain" "ad" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +data "oci_desktops_desktops" "test_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + state = "ACTIVE" +} + +data "oci_desktops_desktop" "test_desktop_datasource" { + desktop_id = data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.0.desktop_id +} + + diff --git a/examples/desktops/desktop_pool/private_access/outputs.tf b/examples/desktops/desktop_pool/private_access/outputs.tf new file mode 120000 index 00000000000..1a861df4d7c --- /dev/null +++ b/examples/desktops/desktop_pool/private_access/outputs.tf @@ -0,0 +1 @@ +../outputs.tf \ No newline at end of file diff --git a/examples/desktops/desktop_pool/private_access/provider.tf b/examples/desktops/desktop_pool/private_access/provider.tf new file mode 120000 index 00000000000..ab16dd30ec7 --- /dev/null +++ b/examples/desktops/desktop_pool/private_access/provider.tf @@ -0,0 +1 @@ +../provider.tf \ No newline at end of file diff --git a/examples/desktops/desktop_pool/private_access/variables.tf b/examples/desktops/desktop_pool/private_access/variables.tf new file mode 120000 index 00000000000..3a65dccd237 --- /dev/null +++ b/examples/desktops/desktop_pool/private_access/variables.tf @@ -0,0 +1 @@ +../variables.tf \ No newline at end of file diff --git a/examples/desktops/desktop_pool/osdstack-phx.auto.tfvars.example b/examples/desktops/desktop_pool/secure-desktops-phx.auto.tfvars.example similarity index 100% rename from examples/desktops/desktop_pool/osdstack-phx.auto.tfvars.example rename to examples/desktops/desktop_pool/secure-desktops-phx.auto.tfvars.example diff --git a/examples/desktops/desktop_pool/variables.tf b/examples/desktops/desktop_pool/variables.tf index 35d92a58636..af65491f549 100644 --- a/examples/desktops/desktop_pool/variables.tf +++ b/examples/desktops/desktop_pool/variables.tf @@ -144,8 +144,21 @@ variable "desktop_pool_stop_schedule_timezone" { default = "MST" } +variable "desktop_pool_private_access_details_subnet_id" { +} + +variable "desktop_pool_private_access_details_nsg_ids" { + type = list(string) + default = [] +} + +variable "desktop_pool_private_access_details_private_ip" { + description = "" +} + variable "desktop_pool_state" { description = "" default = "ACTIVE" } + diff --git a/internal/integrationtest/desktops_desktop_pool_test.go b/internal/integrationtest/desktops_desktop_pool_test.go index ae56a856b8e..7232080113f 100644 --- a/internal/integrationtest/desktops_desktop_pool_test.go +++ b/internal/integrationtest/desktops_desktop_pool_test.go @@ -66,6 +66,7 @@ var ( "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}}, + "private_access_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolPrivateAccessDetailsRepresentation}, } DesktopsDesktopPoolAvailabilityPolicyRepresentation = map[string]interface{}{ "start_schedule": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation}, @@ -88,6 +89,11 @@ var ( "subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_subnet_id}`}, "vcn_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_vcn_id}`}, } + DesktopsDesktopPoolPrivateAccessDetailsRepresentation = map[string]interface{}{ + "subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_private_access_subnet_id}`}, + "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_private_access_nsg_id}`}}, + "private_ip": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_private_access_private_ip}`}, + } DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation = map[string]interface{}{ "cron_expression": acctest.Representation{RepType: acctest.Required, Create: `${var.test_start_schedule_cron_expr_create}`, Update: `${var.test_start_schedule_cron_expr_update}`}, "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 ( test_nsg_id = utils.GetEnvSettingWithBlankDefault("test_nsg_id") nsgIdVariableStr = fmt.Sprintf("variable \"test_nsg_id\" { default = \"%s\" }\n", test_nsg_id) + test_private_access_subnet_id = utils.GetEnvSettingWithBlankDefault("test_private_access_subnet_id") + privateAccessSubnetIdVariableStr = fmt.Sprintf("variable \"test_private_access_subnet_id\" { default = \"%s\" }\n", test_private_access_subnet_id) + + test_private_access_nsg_id = utils.GetEnvSettingWithBlankDefault("test_private_access_nsg_id") + privateAccessNsgIdVariableStr = fmt.Sprintf("variable \"test_private_access_nsg_id\" { default = \"%s\" }\n", test_private_access_nsg_id) + + test_private_access_private_ip = utils.GetEnvSettingWithBlankDefault("test_private_access_private_ip") + privateAccessPrivateIpVariableStr = fmt.Sprintf("variable \"test_private_access_private_ip\" { default = \"%s\" }\n", test_private_access_private_ip) + DesktopsDesktopPoolResourceDependencies = vcnIdVariableStr + subnetIdVariableStr + shapeNameVariableStr + @@ -157,6 +172,9 @@ var ( stopScheduleTimezoneCreateVariableStr + stopScheduleTimezoneUpdateVariableStr + nsgIdVariableStr + + privateAccessSubnetIdVariableStr + + privateAccessNsgIdVariableStr + + privateAccessPrivateIpVariableStr + AvailabilityDomainConfig ) @@ -268,6 +286,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"), resource.TestCheckResourceAttrSet(resourceName, "shape_name"), resource.TestCheckResourceAttr(resourceName, "standby_size", "2"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -326,6 +348,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"), resource.TestCheckResourceAttrSet(resourceName, "shape_name"), resource.TestCheckResourceAttr(resourceName, "standby_size", "2"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -379,6 +405,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"), resource.TestCheckResourceAttrSet(resourceName, "shape_name"), resource.TestCheckResourceAttr(resourceName, "standby_size", "3"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -455,6 +485,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "is_storage_enabled", "true"), resource.TestCheckResourceAttr(singularDatasourceName, "maximum_size", "11"), resource.TestCheckResourceAttr(singularDatasourceName, "network_configuration.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "private_access_details.#", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.endpoint_fqdn"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.private_ip"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.vcn_id"), resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_name"), resource.TestCheckResourceAttr(singularDatasourceName, "standby_size", "3"), resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), diff --git a/internal/service/desktops/desktops_desktop_pool_data_source.go b/internal/service/desktops/desktops_desktop_pool_data_source.go index a8b26158e76..c40ca20697e 100644 --- a/internal/service/desktops/desktops_desktop_pool_data_source.go +++ b/internal/service/desktops/desktops_desktop_pool_data_source.go @@ -131,6 +131,12 @@ func (s *DesktopsDesktopPoolDataSourceCrud) SetData() error { s.D.Set("nsg_ids", s.Res.NsgIds) + if s.Res.PrivateAccessDetails != nil { + s.D.Set("private_access_details", []interface{}{DesktopPoolPrivateAccessDetailsToMap(s.Res.PrivateAccessDetails, true)}) + } else { + s.D.Set("private_access_details", nil) + } + if s.Res.ShapeName != nil { s.D.Set("shape_name", *s.Res.ShapeName) } diff --git a/internal/service/desktops/desktops_desktop_pool_resource.go b/internal/service/desktops/desktops_desktop_pool_resource.go index 3aed2c4c00b..fc15c704e7b 100644 --- a/internal/service/desktops/desktops_desktop_pool_resource.go +++ b/internal/service/desktops/desktops_desktop_pool_resource.go @@ -268,6 +268,50 @@ func DesktopsDesktopPoolResource() *schema.Resource { Type: schema.TypeString, }, }, + "private_access_details": { + Type: schema.TypeList, + Optional: true, + Computed: true, + ForceNew: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "subnet_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + // Optional + "nsg_ids": { + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + Set: tfresource.LiteralTypeHashCodeForSets, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "private_ip": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + + // Computed + "endpoint_fqdn": { + Type: schema.TypeString, + Computed: true, + }, + "vcn_id": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, "time_start_scheduled": { Type: schema.TypeString, Optional: true, @@ -477,6 +521,17 @@ func (s *DesktopsDesktopPoolResourceCrud) Create() error { } } + if privateAccessDetails, ok := s.D.GetOkExists("private_access_details"); ok { + if tmpList := privateAccessDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "private_access_details", 0) + tmp, err := s.mapToCreateDesktopPoolPrivateAccessDetails(fieldKeyFormat) + if err != nil { + return err + } + request.PrivateAccessDetails = &tmp + } + } + if shapeName, ok := s.D.GetOkExists("shape_name"); ok { tmp := shapeName.(string) request.ShapeName = &tmp @@ -869,6 +924,12 @@ func (s *DesktopsDesktopPoolResourceCrud) SetData() error { } s.D.Set("nsg_ids", schema.NewSet(tfresource.LiteralTypeHashCodeForSets, nsgIds)) + if s.Res.PrivateAccessDetails != nil { + s.D.Set("private_access_details", []interface{}{DesktopPoolPrivateAccessDetailsToMap(s.Res.PrivateAccessDetails, false)}) + } else { + s.D.Set("private_access_details", nil) + } + if s.Res.ShapeName != nil { s.D.Set("shape_name", *s.Res.ShapeName) } @@ -902,6 +963,68 @@ func (s *DesktopsDesktopPoolResourceCrud) SetData() error { return nil } +func (s *DesktopsDesktopPoolResourceCrud) mapToCreateDesktopPoolPrivateAccessDetails(fieldKeyFormat string) (oci_desktops.CreateDesktopPoolPrivateAccessDetails, error) { + result := oci_desktops.CreateDesktopPoolPrivateAccessDetails{} + + if nsgIds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "nsg_ids")); ok { + set := nsgIds.(*schema.Set) + interfaces := set.List() + tmp := make([]string, len(interfaces)) + for i := range interfaces { + if interfaces[i] != nil { + tmp[i] = interfaces[i].(string) + } + } + if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "nsg_ids")) { + result.NsgIds = tmp + } + } + + if privateIp, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "private_ip")); ok { + tmp := privateIp.(string) + result.PrivateIp = &tmp + } + + if subnetId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "subnet_id")); ok { + tmp := subnetId.(string) + result.SubnetId = &tmp + } + + return result, nil +} + +func DesktopPoolPrivateAccessDetailsToMap(obj *oci_desktops.DesktopPoolPrivateAccessDetails, datasource bool) map[string]interface{} { + result := map[string]interface{}{} + + if obj.EndpointFqdn != nil { + result["endpoint_fqdn"] = string(*obj.EndpointFqdn) + } + + nsgIds := []interface{}{} + for _, item := range obj.NsgIds { + nsgIds = append(nsgIds, item) + } + if datasource { + result["nsg_ids"] = nsgIds + } else { + result["nsg_ids"] = schema.NewSet(tfresource.LiteralTypeHashCodeForSets, nsgIds) + } + + if obj.PrivateIp != nil { + result["private_ip"] = string(*obj.PrivateIp) + } + + if obj.SubnetId != nil { + result["subnet_id"] = string(*obj.SubnetId) + } + + if obj.VcnId != nil { + result["vcn_id"] = string(*obj.VcnId) + } + + return result +} + func (s *DesktopsDesktopPoolResourceCrud) mapToDesktopAvailabilityPolicy(fieldKeyFormat string) (oci_desktops.DesktopAvailabilityPolicy, error) { result := oci_desktops.DesktopAvailabilityPolicy{} diff --git a/website/docs/d/desktops_desktop_pool.html.markdown b/website/docs/d/desktops_desktop_pool.html.markdown index 06297553a76..d06f3357222 100644 --- a/website/docs/d/desktops_desktop_pool.html.markdown +++ b/website/docs/d/desktops_desktop_pool.html.markdown @@ -64,9 +64,15 @@ The following attributes are exported: * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. - * `subnet_id` - The OCID of the subnet to use for the desktop pool. - * `vcn_id` - The OCID of the VCN used by the desktop pool. -* `nsg_ids` - A list of network security groups for the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. +* `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. + * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). + * `nsg_ids` - A list of network security groups for the private access. + * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. diff --git a/website/docs/d/desktops_desktop_pools.html.markdown b/website/docs/d/desktops_desktop_pools.html.markdown index ce39fba2f74..e02499cab1d 100644 --- a/website/docs/d/desktops_desktop_pools.html.markdown +++ b/website/docs/d/desktops_desktop_pools.html.markdown @@ -80,9 +80,15 @@ The following attributes are exported: * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. - * `subnet_id` - The OCID of the subnet to use for the desktop pool. - * `vcn_id` - The OCID of the VCN used by the desktop pool. -* `nsg_ids` - A list of network security groups for the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. +* `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. + * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). + * `nsg_ids` - A list of network security groups for the private access. + * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. diff --git a/website/docs/r/desktops_desktop_pool.html.markdown b/website/docs/r/desktops_desktop_pool.html.markdown index cd43af03a02..8df0b543a0c 100644 --- a/website/docs/r/desktops_desktop_pool.html.markdown +++ b/website/docs/r/desktops_desktop_pool.html.markdown @@ -67,6 +67,14 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { description = var.desktop_pool_description freeform_tags = {"Department"= "Finance"} nsg_ids = var.desktop_pool_nsg_ids + private_access_details { + #Required + subnet_id = oci_core_subnet.test_subnet.id + + #Optional + nsg_ids = var.desktop_pool_private_access_details_nsg_ids + private_ip = var.desktop_pool_private_access_details_private_ip + } time_start_scheduled = var.desktop_pool_time_start_scheduled time_stop_scheduled = var.desktop_pool_time_stop_scheduled } @@ -105,9 +113,13 @@ The following arguments are supported: * `is_storage_enabled` - (Required) Indicates whether storage is enabled for the desktop pool. * `maximum_size` - (Required) (Updatable) The maximum number of desktops permitted in the desktop pool. * `network_configuration` - (Required) Provides information about the network configuration of the desktop pool. - * `subnet_id` - (Required) The OCID of the subnet to use for the desktop pool. - * `vcn_id` - (Required) The OCID of the VCN used by the desktop pool. -* `nsg_ids` - (Optional) A list of network security groups for the desktop pool. + * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - (Optional) A list of network security groups for the private access. +* `private_access_details` - (Optional) The details of the desktop's private access network connectivity to be set up for the desktop pool. + * `nsg_ids` - (Optional) A list of network security groups for the private access. + * `private_ip` - (Optional) The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. + * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. * `shape_name` - (Required) The shape of the desktop pool. * `standby_size` - (Required) (Updatable) The maximum number of standby desktops available in the desktop pool. * `storage_backup_policy_id` - (Required) The backup policy OCID of the storage. @@ -154,9 +166,15 @@ The following attributes are exported: * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. - * `subnet_id` - The OCID of the subnet to use for the desktop pool. - * `vcn_id` - The OCID of the VCN used by the desktop pool. -* `nsg_ids` - A list of network security groups for the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. +* `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. + * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). + * `nsg_ids` - A list of network security groups for the private access. + * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. From 00e95dcf62b745c0a136e1b7df4a62fffb126bfc Mon Sep 17 00:00:00 2001 From: Karthick Gandhi Date: Mon, 15 Apr 2024 16:49:07 +0530 Subject: [PATCH 02/31] Added - To Support for Depracate old apps admin user creation with password --- .../FusionEnvironment/fusion_environment.tf | 3 +- .../fusion_environment_admin_user.tf | 7 ++- ...apps_fusion_environment_admin_user_test.go | 60 +++++++++++++------ .../fusion_apps_fusion_environment_test.go | 12 ++-- ..._fusion_environment_admin_user_resource.go | 13 ++-- ...fusion_apps_fusion_environment_resource.go | 13 ++-- ...sion_apps_fusion_environment.html.markdown | 6 +- ...usion_environment_admin_user.html.markdown | 6 +- 8 files changed, 75 insertions(+), 45 deletions(-) diff --git a/examples/fusionapps/FusionEnvironment/fusion_environment.tf b/examples/fusionapps/FusionEnvironment/fusion_environment.tf index f3c4bd7c362..3dd7245d646 100644 --- a/examples/fusionapps/FusionEnvironment/fusion_environment.tf +++ b/examples/fusionapps/FusionEnvironment/fusion_environment.tf @@ -96,8 +96,9 @@ resource "oci_fusion_apps_fusion_environment" "test_fusion_environment" { email_address = var.fusion_environment_create_fusion_environment_admin_user_details_email_address first_name = var.fusion_environment_create_fusion_environment_admin_user_details_first_name last_name = var.fusion_environment_create_fusion_environment_admin_user_details_last_name - password = var.fusion_environment_create_fusion_environment_admin_user_details_password username = var.fusion_environment_create_fusion_environment_admin_user_details_username + #Optional + password = var.fusion_environment_create_fusion_environment_admin_user_details_password } display_name = var.fusion_environment_display_name fusion_environment_family_id = oci_fusion_apps_fusion_environment_family.test_fusion_environment_family.id diff --git a/examples/fusionapps/FusionEnvironmentAdminUser/fusion_environment_admin_user.tf b/examples/fusionapps/FusionEnvironmentAdminUser/fusion_environment_admin_user.tf index abe305b490e..4ad3947181d 100644 --- a/examples/fusionapps/FusionEnvironmentAdminUser/fusion_environment_admin_user.tf +++ b/examples/fusionapps/FusionEnvironmentAdminUser/fusion_environment_admin_user.tf @@ -8,7 +8,7 @@ variable "private_key_path" {} variable "region" {} variable "fusion_environment_admin_user_email_address" { - default = "JohnSmith@example.com" + default = "JohnSmithnew@example.com" } variable "fusion_environment_admin_user_first_name" { @@ -40,9 +40,10 @@ resource "oci_fusion_apps_fusion_environment_admin_user" "test_fusion_environmen email_address = var.fusion_environment_admin_user_email_address first_name = var.fusion_environment_admin_user_first_name fusion_environment_id = oci_fusion_apps_fusion_environment.test_fusion_environment.id - last_name = var.fusion_environment_admin_user_last_name - password = var.fusion_environment_admin_user_password + last_name = var.fusion_environment_admin_user_last_name username = var.fusion_environment_admin_user_username + #Optional + password = var.fusion_environment_admin_user_password } data "oci_fusion_apps_fusion_environment_admin_users" "test_fusion_environment_admin_users" { diff --git a/internal/integrationtest/fusion_apps_fusion_environment_admin_user_test.go b/internal/integrationtest/fusion_apps_fusion_environment_admin_user_test.go index 1ec21002557..ebd374e85a6 100644 --- a/internal/integrationtest/fusion_apps_fusion_environment_admin_user_test.go +++ b/internal/integrationtest/fusion_apps_fusion_environment_admin_user_test.go @@ -6,6 +6,7 @@ package integrationtest import ( "context" "fmt" + "strconv" "testing" @@ -28,11 +29,11 @@ var ( acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Optional, acctest.Update, FusionAppsFusionEnvironmentAdminUserRepresentation) FusionAppsFusionAppsFusionEnvironmentAdminUserSingularDataSourceRepresentation = map[string]interface{}{ - "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_fusion_apps_fusion_environment.test_fusion_environment.id}`}, + "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.environment_id}`}, } FusionAppsFusionAppsFusionEnvironmentAdminUserDataSourceRepresentation = map[string]interface{}{ - "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_fusion_apps_fusion_environment.test_fusion_environment.id}`}, + "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.environment_id}`}, "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: FusionAppsFusionEnvironmentAdminUserDataSourceFilterRepresentation}} FusionAppsFusionEnvironmentAdminUserDataSourceFilterRepresentation = map[string]interface{}{ "name": acctest.Representation{RepType: acctest.Required, Create: `id`}, @@ -40,16 +41,17 @@ var ( } FusionAppsFusionEnvironmentAdminUserRepresentation = map[string]interface{}{ - "email_address": acctest.Representation{RepType: acctest.Required, Create: `JohnSmith@example.com`}, - "first_name": acctest.Representation{RepType: acctest.Required, Create: `firstName`}, - "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_fusion_apps_fusion_environment.test_fusion_environment.id}`}, - "last_name": acctest.Representation{RepType: acctest.Required, Create: `lastName`}, - "password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`}, + "email_address": acctest.Representation{RepType: acctest.Required, Create: `JohnSmithnew@example.com`}, + "first_name": acctest.Representation{RepType: acctest.Required, Create: `firstNamenew`}, + "fusion_environment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.environment_id}`}, + "last_name": acctest.Representation{RepType: acctest.Required, Create: `lastNamenew`}, + "password": acctest.Representation{RepType: acctest.Optional, Create: `BEstrO0ng_#11`}, "username": acctest.Representation{RepType: acctest.Required, Create: `terraformTest`}, } - FusionAppsFusionEnvironmentAdminUserResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_family", "test_fusion_environment_family", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentFamilyRepresentation) + - acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment", "test_fusion_environment", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentRepresentation) + //FusionAppsFusionEnvironmentAdminUserResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_family", "test_fusion_environment_family", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentFamilyRepresentation) + + // acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment", "test_fusion_environment", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentRepresentation) + FusionAppsFusionEnvironmentAdminUserResourceDependencies = "" ) // issue-routing-tag: fusion_apps/default @@ -62,25 +64,46 @@ func TestFusionAppsFusionEnvironmentAdminUserResource_basic(t *testing.T) { compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + fusionEnvironmentId := utils.GetEnvSettingWithBlankDefault("environment_ocid") + fusionEnvIdVariableStr := fmt.Sprintf("variable \"environment_id\" { default = \"%s\" }\n", fusionEnvironmentId) + resourceName := "oci_fusion_apps_fusion_environment_admin_user.test_fusion_environment_admin_user" datasourceName := "data.oci_fusion_apps_fusion_environment_admin_users.test_fusion_environment_admin_users" singularDatasourceName := "data.oci_fusion_apps_fusion_environment_admin_user.test_fusion_environment_admin_user" var resId string - // 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. - acctest.SaveConfigContent(config+compartmentIdVariableStr+FusionAppsFusionEnvironmentAdminUserResourceDependencies+ - acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentAdminUserRepresentation), "fusionapps", "fusionEnvironmentAdminUser", t) + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+fusionEnvIdVariableStr+FusionAppsFusionEnvironmentAdminUserResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Optional, acctest.Create, FusionAppsFusionEnvironmentAdminUserRepresentation), "fusionapps", "fusionEnvironmentAdminUser", t) acctest.ResourceTest(t, testAccCheckFusionAppsFusionEnvironmentAdminUserDestroy, []resource.TestStep{ // verify Create { - Config: config + compartmentIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies + + Config: config + compartmentIdVariableStr + fusionEnvIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Required, acctest.Create, FusionAppsFusionEnvironmentAdminUserRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( - resource.TestCheckResourceAttr(resourceName, "email_address", "JohnSmith@example.com"), - resource.TestCheckResourceAttr(resourceName, "first_name", "firstName"), + resource.TestCheckResourceAttr(resourceName, "email_address", "JohnSmithnew@example.com"), + resource.TestCheckResourceAttr(resourceName, "first_name", "firstNamenew"), + resource.TestCheckResourceAttrSet(resourceName, "fusion_environment_id"), + resource.TestCheckResourceAttr(resourceName, "last_name", "lastNamenew"), + resource.TestCheckResourceAttr(resourceName, "username", "terraformTest"), + ), + }, + + // delete before next Create + { + Config: config + compartmentIdVariableStr + fusionEnvIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies, + }, + // verify Create with optionals + { + Config: config + compartmentIdVariableStr + fusionEnvIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Optional, acctest.Create, FusionAppsFusionEnvironmentAdminUserRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "email_address", "JohnSmithnew@example.com"), + resource.TestCheckResourceAttr(resourceName, "first_name", "firstNamenew"), resource.TestCheckResourceAttrSet(resourceName, "fusion_environment_id"), - resource.TestCheckResourceAttr(resourceName, "last_name", "lastName"), + resource.TestCheckResourceAttr(resourceName, "items.#", "2"), + resource.TestCheckResourceAttr(resourceName, "last_name", "lastNamenew"), resource.TestCheckResourceAttr(resourceName, "password", "BEstrO0ng_#11"), resource.TestCheckResourceAttr(resourceName, "username", "terraformTest"), @@ -100,7 +123,7 @@ func TestFusionAppsFusionEnvironmentAdminUserResource_basic(t *testing.T) { { Config: config + acctest.GenerateDataSourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_users", "test_fusion_environment_admin_users", acctest.Optional, acctest.Update, FusionAppsFusionAppsFusionEnvironmentAdminUserDataSourceRepresentation) + - compartmentIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies + + compartmentIdVariableStr + fusionEnvIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Optional, acctest.Update, FusionAppsFusionEnvironmentAdminUserRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(datasourceName, "fusion_environment_id"), @@ -113,10 +136,9 @@ func TestFusionAppsFusionEnvironmentAdminUserResource_basic(t *testing.T) { { Config: config + acctest.GenerateDataSourceFromRepresentationMap("oci_fusion_apps_fusion_environment_admin_user", "test_fusion_environment_admin_user", acctest.Required, acctest.Create, FusionAppsFusionAppsFusionEnvironmentAdminUserSingularDataSourceRepresentation) + - compartmentIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceConfig, + compartmentIdVariableStr + fusionEnvIdVariableStr + FusionAppsFusionEnvironmentAdminUserResourceConfig, Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(singularDatasourceName, "fusion_environment_id"), - resource.TestCheckResourceAttr(singularDatasourceName, "items.#", "2"), ), }, diff --git a/internal/integrationtest/fusion_apps_fusion_environment_test.go b/internal/integrationtest/fusion_apps_fusion_environment_test.go index 8f01a741492..3fe02fb5d08 100644 --- a/internal/integrationtest/fusion_apps_fusion_environment_test.go +++ b/internal/integrationtest/fusion_apps_fusion_environment_test.go @@ -106,8 +106,8 @@ var ( "email_address": acctest.Representation{RepType: acctest.Required, Create: `JohnSmith@example.com`}, "first_name": acctest.Representation{RepType: acctest.Required, Create: `firstName`}, "last_name": acctest.Representation{RepType: acctest.Required, Create: `lastName`}, - "password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`}, - "username": acctest.Representation{RepType: acctest.Required, Create: `username_test`}, + "username": acctest.Representation{RepType: acctest.Required, Create: `terraformTestCreate`}, + "password": acctest.Representation{RepType: acctest.Optional, Create: `BEstrO0ng_#11`}, } FusionAppsFusionEnvironmentMaintenancePolicyRepresentation = map[string]interface{}{ "environment_maintenance_override": acctest.Representation{RepType: acctest.Optional, Create: `PROD`, Update: `NON_PROD`}, @@ -194,7 +194,7 @@ func TestFusionAppsFusionEnvironmentResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.first_name", "firstName"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.last_name", "lastName"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.password", "BEstrO0ng_#11"), - resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "username_test"), + resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "terraformTestCreate"), resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"), resource.TestCheckResourceAttr(resourceName, "dns_prefix", "dnsPrefix"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -240,7 +240,7 @@ func TestFusionAppsFusionEnvironmentResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.first_name", "firstName"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.last_name", "lastName"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.password", "BEstrO0ng_#11"), - resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "username_test"), + resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "terraformTestCreate"), resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"), resource.TestCheckResourceAttr(resourceName, "dns_prefix", "dnsPrefix"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -280,8 +280,8 @@ func TestFusionAppsFusionEnvironmentResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.email_address", "JohnSmith@example.com"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.first_name", "firstName"), resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.last_name", "lastName"), - resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.password", "BEstrO0ng_#11"), - resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "username_test"), + //resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.password", "BEstrO0ng_#11"), + resource.TestCheckResourceAttr(resourceName, "create_fusion_environment_admin_user_details.0.username", "terraformTestCreate"), resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"), resource.TestCheckResourceAttr(resourceName, "dns_prefix", "dnsPrefix"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), diff --git a/internal/service/fusion_apps/fusion_apps_fusion_environment_admin_user_resource.go b/internal/service/fusion_apps/fusion_apps_fusion_environment_admin_user_resource.go index bb4812bace3..9bb40d98649 100644 --- a/internal/service/fusion_apps/fusion_apps_fusion_environment_admin_user_resource.go +++ b/internal/service/fusion_apps/fusion_apps_fusion_environment_admin_user_resource.go @@ -53,12 +53,6 @@ func FusionAppsFusionEnvironmentAdminUserResource() *schema.Resource { Required: true, ForceNew: true, }, - "password": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Sensitive: true, - }, "username": { Type: schema.TypeString, Required: true, @@ -66,6 +60,13 @@ func FusionAppsFusionEnvironmentAdminUserResource() *schema.Resource { }, // Optional + "password": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + Sensitive: true, + }, // Computed "items": { diff --git a/internal/service/fusion_apps/fusion_apps_fusion_environment_resource.go b/internal/service/fusion_apps/fusion_apps_fusion_environment_resource.go index 06600234d7b..476180bd8ae 100644 --- a/internal/service/fusion_apps/fusion_apps_fusion_environment_resource.go +++ b/internal/service/fusion_apps/fusion_apps_fusion_environment_resource.go @@ -65,12 +65,6 @@ func FusionAppsFusionEnvironmentResource() *schema.Resource { Required: true, ForceNew: true, }, - "password": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Sensitive: true, - }, "username": { Type: schema.TypeString, Required: true, @@ -78,6 +72,13 @@ func FusionAppsFusionEnvironmentResource() *schema.Resource { }, // Optional + "password": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + Sensitive: true, + }, // Computed }, diff --git a/website/docs/r/fusion_apps_fusion_environment.html.markdown b/website/docs/r/fusion_apps_fusion_environment.html.markdown index 5124b74c967..2cfb6ce84ae 100644 --- a/website/docs/r/fusion_apps_fusion_environment.html.markdown +++ b/website/docs/r/fusion_apps_fusion_environment.html.markdown @@ -24,8 +24,10 @@ resource "oci_fusion_apps_fusion_environment" "test_fusion_environment" { email_address = var.fusion_environment_create_fusion_environment_admin_user_details_email_address first_name = var.fusion_environment_create_fusion_environment_admin_user_details_first_name last_name = var.fusion_environment_create_fusion_environment_admin_user_details_last_name - password = var.fusion_environment_create_fusion_environment_admin_user_details_password username = var.fusion_environment_create_fusion_environment_admin_user_details_username + + #Optional + password = var.fusion_environment_create_fusion_environment_admin_user_details_password } display_name = var.fusion_environment_display_name fusion_environment_family_id = oci_fusion_apps_fusion_environment_family.test_fusion_environment_family.id @@ -68,7 +70,7 @@ The following arguments are supported: * `email_address` - (Required) The email address for the administrator. * `first_name` - (Required) The administrator's first name. * `last_name` - (Required) The administrator's last name. - * `password` - (Required) The password for the administrator. + * `password` - (Optional) The password for the administrator. * `username` - (Required) The username for the administrator. * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `display_name` - (Required) (Updatable) FusionEnvironment Identifier can be renamed. diff --git a/website/docs/r/fusion_apps_fusion_environment_admin_user.html.markdown b/website/docs/r/fusion_apps_fusion_environment_admin_user.html.markdown index faf201eceed..82711e1c6de 100644 --- a/website/docs/r/fusion_apps_fusion_environment_admin_user.html.markdown +++ b/website/docs/r/fusion_apps_fusion_environment_admin_user.html.markdown @@ -21,8 +21,10 @@ resource "oci_fusion_apps_fusion_environment_admin_user" "test_fusion_environmen first_name = var.fusion_environment_admin_user_first_name fusion_environment_id = oci_fusion_apps_fusion_environment.test_fusion_environment.id last_name = var.fusion_environment_admin_user_last_name - password = var.fusion_environment_admin_user_password username = var.fusion_environment_admin_user_username + + #Optional + password = var.fusion_environment_admin_user_password } ``` @@ -34,7 +36,7 @@ The following arguments are supported: * `first_name` - (Required) The administrator's first name. * `fusion_environment_id` - (Required) unique FusionEnvironment identifier * `last_name` - (Required) The administrator's last name. -* `password` - (Required) The password for the administrator. +* `password` - (Optional) The password for the administrator. * `username` - (Required) The username for the administrator. From c627d8cb4c246648cbd9feb93edf2a2cf0b57204 Mon Sep 17 00:00:00 2001 From: Carlos Rivera Date: Wed, 28 Aug 2024 19:30:34 +0000 Subject: [PATCH 03/31] Added - Support for Stack Monitoring Maintenance Windows --- .../maintenance_windows/maintenance_window.tf | 52 ++ ...intenance_window_retry_failed_operation.tf | 24 + .../maintenance_window_stop.tf | 24 + ...tack_monitoring_maintenance_window_test.go | 358 +++++++ ...nce_windows_retry_failed_operation_test.go | 70 ++ ...onitoring_maintenance_windows_stop_test.go | 70 ++ .../stack_monitoring/register_datasource.go | 2 + .../stack_monitoring/register_resource.go | 3 + .../stack_monitoring_export.go | 24 + ...nitoring_maintenance_window_data_source.go | 116 +++ ..._monitoring_maintenance_window_resource.go | 882 ++++++++++++++++++ ...itoring_maintenance_windows_data_source.go | 143 +++ ...windows_retry_failed_operation_resource.go | 226 +++++ ...oring_maintenance_windows_stop_resource.go | 209 +++++ ...onitoring_maintenance_window.html.markdown | 58 ++ ...nitoring_maintenance_windows.html.markdown | 71 ++ .../guides/resource_discovery.html.markdown | 3 + ...onitoring_maintenance_window.html.markdown | 110 +++ ...ndows_retry_failed_operation.html.markdown | 55 ++ ...ing_maintenance_windows_stop.html.markdown | 55 ++ 20 files changed, 2555 insertions(+) create mode 100644 examples/stack_monitoring/maintenance_windows/maintenance_window.tf create mode 100644 examples/stack_monitoring/maintenance_windows_retry_failed_operation/maintenance_window_retry_failed_operation.tf create mode 100644 examples/stack_monitoring/maintenance_windows_stop/maintenance_window_stop.tf create mode 100644 internal/integrationtest/stack_monitoring_maintenance_window_test.go create mode 100644 internal/integrationtest/stack_monitoring_maintenance_windows_retry_failed_operation_test.go create mode 100644 internal/integrationtest/stack_monitoring_maintenance_windows_stop_test.go create mode 100644 internal/service/stack_monitoring/stack_monitoring_maintenance_window_data_source.go create mode 100644 internal/service/stack_monitoring/stack_monitoring_maintenance_window_resource.go create mode 100644 internal/service/stack_monitoring/stack_monitoring_maintenance_windows_data_source.go create mode 100644 internal/service/stack_monitoring/stack_monitoring_maintenance_windows_retry_failed_operation_resource.go create mode 100644 internal/service/stack_monitoring/stack_monitoring_maintenance_windows_stop_resource.go create mode 100644 website/docs/d/stack_monitoring_maintenance_window.html.markdown create mode 100644 website/docs/d/stack_monitoring_maintenance_windows.html.markdown create mode 100644 website/docs/r/stack_monitoring_maintenance_window.html.markdown create mode 100644 website/docs/r/stack_monitoring_maintenance_windows_retry_failed_operation.html.markdown create mode 100644 website/docs/r/stack_monitoring_maintenance_windows_stop.html.markdown diff --git a/examples/stack_monitoring/maintenance_windows/maintenance_window.tf b/examples/stack_monitoring/maintenance_windows/maintenance_window.tf new file mode 100644 index 00000000000..4670c02f7bf --- /dev/null +++ b/examples/stack_monitoring/maintenance_windows/maintenance_window.tf @@ -0,0 +1,52 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "compartment_ocid" {} +variable "resource_id_for_maintwin" {} + +variable "maintenance_window_name" { + default = "TestMaintenanceWindows" +} + +variable "maintenance_window_schedule_schedule_type" { + default = "ONE_TIME" +} + +variable "maintenance_window_schedule_time_maintenance_window_start" { + default = "2024-10-25T16:00:01.001Z" +} + +variable "maintenance_window_schedule_time_maintenance_window_end" { + default = "2024-10-26T16:00:01.001Z" +} + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region +} + +resource "oci_stack_monitoring_maintenance_window" "test_maintenance_window_example" { + #Required + compartment_id = var.compartment_ocid + name = var.maintenance_window_name + + resources { + resource_id = var.resource_id_for_maintwin + are_members_included = true + } + + schedule { + schedule_type = var.maintenance_window_schedule_schedule_type + time_maintenance_window_start = var.maintenance_window_schedule_time_maintenance_window_start + time_maintenance_window_end = var.maintenance_window_schedule_time_maintenance_window_end + } + +} diff --git a/examples/stack_monitoring/maintenance_windows_retry_failed_operation/maintenance_window_retry_failed_operation.tf b/examples/stack_monitoring/maintenance_windows_retry_failed_operation/maintenance_window_retry_failed_operation.tf new file mode 100644 index 00000000000..3ca24817674 --- /dev/null +++ b/examples/stack_monitoring/maintenance_windows_retry_failed_operation/maintenance_window_retry_failed_operation.tf @@ -0,0 +1,24 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "maintenance_window_id" {} + + + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region +} + +resource "oci_stack_monitoring_maintenance_windows_retry_failed_operation" "test_maintenance_windows_retry_failed_operation" { + #Required + maintenance_window_id = var.maintenance_window_id +} \ No newline at end of file diff --git a/examples/stack_monitoring/maintenance_windows_stop/maintenance_window_stop.tf b/examples/stack_monitoring/maintenance_windows_stop/maintenance_window_stop.tf new file mode 100644 index 00000000000..0114507b068 --- /dev/null +++ b/examples/stack_monitoring/maintenance_windows_stop/maintenance_window_stop.tf @@ -0,0 +1,24 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "maintenance_window_id" {} + + + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region +} + +resource "oci_stack_monitoring_maintenance_windows_stop" "test_maintenance_windows_stop" { + #Required + maintenance_window_id = var.maintenance_window_id +} \ No newline at end of file diff --git a/internal/integrationtest/stack_monitoring_maintenance_window_test.go b/internal/integrationtest/stack_monitoring_maintenance_window_test.go new file mode 100644 index 00000000000..1a7e3082e33 --- /dev/null +++ b/internal/integrationtest/stack_monitoring_maintenance_window_test.go @@ -0,0 +1,358 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "context" + "fmt" + "strconv" + "testing" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/oracle/oci-go-sdk/v65/common" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + tf_client "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + "github.com/oracle/terraform-provider-oci/internal/tfresource" + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + StackMonitoringMaintenanceWindowRequiredOnlyResource = StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowRepresentation) + + StackMonitoringMaintenanceWindowResourceConfig = StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Optional, acctest.Update, StackMonitoringMaintenanceWindowRepresentation) + + StackMonitoringMaintenanceWindowSingularDataSourceRepresentation = map[string]interface{}{ + "maintenance_window_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_stack_monitoring_maintenance_window.test_maintenance_window.id}`}, + } + + StackMonitoringMaintenanceWindowDataSourceRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "name": acctest.Representation{RepType: acctest.Optional, Create: `TFMaintenanceWindowsTest`}, + "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: StackMonitoringMaintenanceWindowDataSourceFilterRepresentation}} + StackMonitoringMaintenanceWindowDataSourceFilterRepresentation = map[string]interface{}{ + "name": acctest.Representation{RepType: acctest.Required, Create: `id`}, + "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_stack_monitoring_maintenance_window.test_maintenance_window.id}`}}, + } + + StackMonitoringMaintenanceWindowRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "name": acctest.Representation{RepType: acctest.Required, Create: `TFMaintenanceWindowsTest`}, + "resources": acctest.RepresentationGroup{RepType: acctest.Required, Group: StackMonitoringMaintenanceWindowResourcesRepresentation}, + "schedule": acctest.RepresentationGroup{RepType: acctest.Required, Group: StackMonitoringMaintenanceWindowScheduleRepresentation}, + "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, + } + + StackMonitoringMaintenanceWindowResourcesRepresentation = map[string]interface{}{ + "resource_id": acctest.Representation{RepType: acctest.Required, Create: `${var.resource_id}`}, + "are_members_included": acctest.Representation{RepType: acctest.Optional, Create: `true`, Update: `true`}, + } + + StackMonitoringMaintenanceWindowScheduleRepresentation = map[string]interface{}{ + "schedule_type": acctest.Representation{RepType: acctest.Required, Create: `ONE_TIME`, Update: `RECURRENT`}, + "time_maintenance_window_start": acctest.Representation{RepType: acctest.Required, Create: `${var.start_date}`, Update: `2024-10-17T10:47:01.001Z`}, + "time_maintenance_window_end": acctest.Representation{RepType: acctest.Required, Create: `${var.end_date}`, Update: `2024-10-28T10:47:01.001Z`}, + "maintenance_window_duration": acctest.Representation{RepType: acctest.Optional, Create: ``, Update: `PT1H`}, + "maintenance_window_recurrences": acctest.Representation{RepType: acctest.Optional, Create: ``, Update: `FREQ=DAILY;BYHOUR=10`}, + } + + StackMonitoringMaintenanceWindowResourceDependencies = "" +) + +// issue-routing-tag: stack_monitoring/default +func TestStackMonitoringMaintenanceWindowResource_basic(t *testing.T) { + httpreplay.SetScenario("TestStackMonitoringMaintenanceWindowResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + resourceId := utils.GetEnvSettingWithBlankDefault("resource_id_for_maintwin") + resourceIdVariableStr := fmt.Sprintf("variable \"resource_id\" { default = \"%s\" }\n", resourceId) + + defaultSartTime := time.Now().Add(time.Hour * 24 * 2) + maintWinStartDate := utils.GetEnvSettingWithDefault("start_date_for_maintwin", defaultSartTime.Format(time.RFC3339Nano)) + maintWinStartDateVariableStr := fmt.Sprintf("variable \"start_date\" { default = \"%s\" }\n", maintWinStartDate) + + defaultEndTime := defaultSartTime.Add(time.Hour * 24) + maintWinEndDate := utils.GetEnvSettingWithDefault("end_date_for_maintwin", defaultEndTime.Format(time.RFC3339Nano)) + maintWinEndDateVariableStr := fmt.Sprintf("variable \"end_date\" { default = \"%s\" }\n", maintWinEndDate) + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_stack_monitoring_maintenance_window.test_maintenance_window" + datasourceName := "data.oci_stack_monitoring_maintenance_windows.test_maintenance_windows" + singularDatasourceName := "data.oci_stack_monitoring_maintenance_window.test_maintenance_window" + + var resId, resId2 string + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+StackMonitoringMaintenanceWindowResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Optional, acctest.Create, StackMonitoringMaintenanceWindowRepresentation), "stackmonitoring", "maintenanceWindow", t) + + acctest.ResourceTest(t, testAccCheckStackMonitoringMaintenanceWindowDestroy, []resource.TestStep{ + // verify Create + // one time schedule + { + Config: config + compartmentIdVariableStr + resourceIdVariableStr + maintWinStartDateVariableStr + maintWinEndDateVariableStr + StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "name", "TFMaintenanceWindowsTest"), + resource.TestCheckResourceAttr(resourceName, "resources.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "resources.0.resource_id"), + resource.TestCheckResourceAttr(resourceName, "schedule.#", "1"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.schedule_type", "ONE_TIME"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + return err + }, + ), + }, + + // delete before next Create + { + Config: config + compartmentIdVariableStr + StackMonitoringMaintenanceWindowResourceDependencies, + }, + + // verify Create with optionals + { + Config: config + compartmentIdVariableStr + resourceIdVariableStr + maintWinStartDateVariableStr + + maintWinEndDateVariableStr + StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Optional, acctest.Create, StackMonitoringMaintenanceWindowRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "description", "description"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "name", "TFMaintenanceWindowsTest"), + resource.TestCheckResourceAttr(resourceName, "resources.#", "1"), + resource.TestCheckResourceAttr(resourceName, "resources.0.are_members_included", "true"), + resource.TestCheckResourceAttrSet(resourceName, "resources.0.resource_id"), + resource.TestCheckResourceAttr(resourceName, "schedule.#", "1"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.schedule_type", "ONE_TIME"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.time_maintenance_window_start", maintWinStartDate), + resource.TestCheckResourceAttr(resourceName, "schedule.0.time_maintenance_window_end", maintWinEndDate), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + + // verify updates to updatable parameters + { + Config: config + compartmentIdVariableStr + resourceIdVariableStr + maintWinStartDateVariableStr + + maintWinEndDateVariableStr + StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Optional, acctest.Update, StackMonitoringMaintenanceWindowRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "description", "description2"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "name", "TFMaintenanceWindowsTest"), + resource.TestCheckResourceAttr(resourceName, "resources.#", "1"), + resource.TestCheckResourceAttr(resourceName, "resources.0.are_members_included", "true"), + resource.TestCheckResourceAttrSet(resourceName, "resources.0.resource_id"), + resource.TestCheckResourceAttr(resourceName, "schedule.#", "1"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.schedule_type", "RECURRENT"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.time_maintenance_window_start", "2024-10-17T10:47:01.001Z"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.time_maintenance_window_end", "2024-10-28T10:47:01.001Z"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.maintenance_window_duration", "PT1H"), + resource.TestCheckResourceAttr(resourceName, "schedule.0.maintenance_window_recurrences", "FREQ=DAILY;BYHOUR=10"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("Resource recreated when it was supposed to be updated.") + } + return err + }, + ), + }, + // verify datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_stack_monitoring_maintenance_windows", "test_maintenance_windows", acctest.Optional, acctest.Update, StackMonitoringMaintenanceWindowDataSourceRepresentation) + + compartmentIdVariableStr + resourceIdVariableStr + maintWinStartDateVariableStr + + maintWinEndDateVariableStr + StackMonitoringMaintenanceWindowResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Optional, acctest.Update, StackMonitoringMaintenanceWindowRepresentation), + + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(datasourceName, "name", "TFMaintenanceWindowsTest"), + + resource.TestCheckResourceAttr(datasourceName, "maintenance_window_collection.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "maintenance_window_collection.0.items.#", "1"), + ), + }, + // verify singular datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_stack_monitoring_maintenance_window", "test_maintenance_window", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowSingularDataSourceRepresentation) + + compartmentIdVariableStr + resourceIdVariableStr + maintWinStartDateVariableStr + maintWinEndDateVariableStr + + StackMonitoringMaintenanceWindowResourceConfig, + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(singularDatasourceName, "maintenance_window_id"), + + resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(singularDatasourceName, "description", "description2"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), + resource.TestCheckResourceAttr(singularDatasourceName, "name", "TFMaintenanceWindowsTest"), + resource.TestCheckResourceAttr(singularDatasourceName, "resources.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "resources.0.are_members_included", "true"), + resource.TestCheckResourceAttr(singularDatasourceName, "resources_details.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "schedule.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "schedule.0.schedule_type", "RECURRENT"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "schedule.0.time_maintenance_window_end"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "schedule.0.time_maintenance_window_start"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "schedule.0.maintenance_window_duration"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "schedule.0.maintenance_window_recurrences"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_updated"), + ), + }, + // verify resource import + { + Config: config + StackMonitoringMaintenanceWindowRequiredOnlyResource, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{}, + ResourceName: resourceName, + }, + }) +} + +func testAccCheckStackMonitoringMaintenanceWindowDestroy(s *terraform.State) error { + noResourceFound := true + client := acctest.TestAccProvider.Meta().(*tf_client.OracleClients).StackMonitoringClient() + for _, rs := range s.RootModule().Resources { + if rs.Type == "oci_stack_monitoring_maintenance_window" { + noResourceFound = false + request := oci_stack_monitoring.GetMaintenanceWindowRequest{} + + tmp := rs.Primary.ID + request.MaintenanceWindowId = &tmp + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "stack_monitoring") + + response, err := client.GetMaintenanceWindow(context.Background(), request) + + if err == nil { + deletedLifecycleStates := map[string]bool{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateDeleted): true, + } + if _, ok := deletedLifecycleStates[string(response.LifecycleState)]; !ok { + //resource lifecycle state is not in expected deleted lifecycle states. + return fmt.Errorf("resource lifecycle state: %s is not in expected deleted lifecycle states", response.LifecycleState) + } + //resource lifecycle state is in expected deleted lifecycle states. continue with next one. + continue + } + + //Verify that exception is for '404 not found'. + if failure, isServiceError := common.IsServiceError(err); !isServiceError || failure.GetHTTPStatusCode() != 404 { + return err + } + } + } + if noResourceFound { + return fmt.Errorf("at least one resource was expected from the state file, but could not be found") + } + + return nil +} + +func init() { + if acctest.DependencyGraph == nil { + acctest.InitDependencyGraph() + } + if !acctest.InSweeperExcludeList("StackMonitoringMaintenanceWindow") { + resource.AddTestSweepers("StackMonitoringMaintenanceWindow", &resource.Sweeper{ + Name: "StackMonitoringMaintenanceWindow", + Dependencies: acctest.DependencyGraph["maintenanceWindow"], + F: sweepStackMonitoringMaintenanceWindowResource, + }) + } +} + +func sweepStackMonitoringMaintenanceWindowResource(compartment string) error { + stackMonitoringClient := acctest.GetTestClients(&schema.ResourceData{}).StackMonitoringClient() + maintenanceWindowIds, err := getStackMonitoringMaintenanceWindowIds(compartment) + if err != nil { + return err + } + for _, maintenanceWindowId := range maintenanceWindowIds { + if ok := acctest.SweeperDefaultResourceId[maintenanceWindowId]; !ok { + deleteMaintenanceWindowRequest := oci_stack_monitoring.DeleteMaintenanceWindowRequest{} + + deleteMaintenanceWindowRequest.MaintenanceWindowId = &maintenanceWindowId + + deleteMaintenanceWindowRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "stack_monitoring") + _, error := stackMonitoringClient.DeleteMaintenanceWindow(context.Background(), deleteMaintenanceWindowRequest) + if error != nil { + fmt.Printf("Error deleting MaintenanceWindow %s %s, It is possible that the resource is already deleted. Please verify manually \n", maintenanceWindowId, error) + continue + } + acctest.WaitTillCondition(acctest.TestAccProvider, &maintenanceWindowId, StackMonitoringMaintenanceWindowSweepWaitCondition, time.Duration(3*time.Minute), + StackMonitoringMaintenanceWindowSweepResponseFetchOperation, "stack_monitoring", true) + } + } + return nil +} + +func getStackMonitoringMaintenanceWindowIds(compartment string) ([]string, error) { + ids := acctest.GetResourceIdsToSweep(compartment, "MaintenanceWindowId") + if ids != nil { + return ids, nil + } + var resourceIds []string + compartmentId := compartment + stackMonitoringClient := acctest.GetTestClients(&schema.ResourceData{}).StackMonitoringClient() + + listMaintenanceWindowsRequest := oci_stack_monitoring.ListMaintenanceWindowsRequest{} + listMaintenanceWindowsRequest.CompartmentId = &compartmentId + listMaintenanceWindowsResponse, err := stackMonitoringClient.ListMaintenanceWindows(context.Background(), listMaintenanceWindowsRequest) + + if err != nil { + return resourceIds, fmt.Errorf("Error getting MaintenanceWindow list for compartment id : %s , %s \n", compartmentId, err) + } + for _, maintenanceWindow := range listMaintenanceWindowsResponse.Items { + id := *maintenanceWindow.Id + resourceIds = append(resourceIds, id) + acctest.AddResourceIdToSweeperResourceIdMap(compartmentId, "MaintenanceWindowId", id) + } + return resourceIds, nil +} + +func StackMonitoringMaintenanceWindowSweepWaitCondition(response common.OCIOperationResponse) bool { + // Only stop if the resource is available beyond 3 mins. As there could be an issue for the sweeper to delete the resource and manual intervention required. + if maintenanceWindowResponse, ok := response.Response.(oci_stack_monitoring.GetMaintenanceWindowResponse); ok { + return maintenanceWindowResponse.LifecycleState != oci_stack_monitoring.MaintenanceWindowLifecycleStateDeleted + } + return false +} + +func StackMonitoringMaintenanceWindowSweepResponseFetchOperation(client *tf_client.OracleClients, resourceId *string, retryPolicy *common.RetryPolicy) error { + _, err := client.StackMonitoringClient().GetMaintenanceWindow(context.Background(), oci_stack_monitoring.GetMaintenanceWindowRequest{ + MaintenanceWindowId: resourceId, + RequestMetadata: common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + return err +} diff --git a/internal/integrationtest/stack_monitoring_maintenance_windows_retry_failed_operation_test.go b/internal/integrationtest/stack_monitoring_maintenance_windows_retry_failed_operation_test.go new file mode 100644 index 00000000000..14d8a9bfceb --- /dev/null +++ b/internal/integrationtest/stack_monitoring_maintenance_windows_retry_failed_operation_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "strconv" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + StackMonitoringMaintenanceWindowsRetryFailedOperationRepresentation = map[string]interface{}{ + "maintenance_window_id": acctest.Representation{RepType: acctest.Required, Create: `${var.mw_id_to_retry}`}, + } + + StackMonitoringMaintenanceWindowsRetryFailedOperationResourceDependencies = "" +) + +// issue-routing-tag: stack_monitoring/default +func TestStackMonitoringMaintenanceWindowsRetryFailedOperationResource_basic(t *testing.T) { + httpreplay.SetScenario("TestStackMonitoringMaintenanceWindowsRetryFailedOperationResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + mwIdToRetry := utils.GetEnvSettingWithBlankDefault("mw_id_retry") + mwIdToRetryVariableStr := fmt.Sprintf("variable \"mw_id_to_retry\" { default = \"%s\" }\n", mwIdToRetry) + + resourceName := "oci_stack_monitoring_maintenance_windows_retry_failed_operation.test_maintenance_windows_retry_failed_operation" + + var resId string + // 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. + acctest.SaveConfigContent(config+compartmentIdVariableStr+StackMonitoringMaintenanceWindowsRetryFailedOperationResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_windows_retry_failed_operation", "test_maintenance_windows_retry_failed_operation", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowsRetryFailedOperationRepresentation), "stackmonitoring", "maintenanceWindowsRetryFailedOperation", t) + + acctest.ResourceTest(t, nil, []resource.TestStep{ + // verify Create + { + Config: config + compartmentIdVariableStr + mwIdToRetryVariableStr + StackMonitoringMaintenanceWindowsRetryFailedOperationResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_windows_retry_failed_operation", "test_maintenance_windows_retry_failed_operation", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowsRetryFailedOperationRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "maintenance_window_id"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + }) +} diff --git a/internal/integrationtest/stack_monitoring_maintenance_windows_stop_test.go b/internal/integrationtest/stack_monitoring_maintenance_windows_stop_test.go new file mode 100644 index 00000000000..7bf350adf94 --- /dev/null +++ b/internal/integrationtest/stack_monitoring_maintenance_windows_stop_test.go @@ -0,0 +1,70 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "strconv" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + StackMonitoringMaintenanceWindowsStopRepresentation = map[string]interface{}{ + "maintenance_window_id": acctest.Representation{RepType: acctest.Required, Create: `${var.mw_id_to_stop}`}, + } + + StackMonitoringMaintenanceWindowsStopResourceDependencies = "" +) + +// issue-routing-tag: stack_monitoring/default +func TestStackMonitoringMaintenanceWindowsStopResource_basic(t *testing.T) { + httpreplay.SetScenario("TestStackMonitoringMaintenanceWindowsStopResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + mwIdToStop := utils.GetEnvSettingWithBlankDefault("mw_id_stop") + mwIdToStopVariableStr := fmt.Sprintf("variable \"mw_id_to_stop\" { default = \"%s\" }\n", mwIdToStop) + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_stack_monitoring_maintenance_windows_stop.test_maintenance_windows_stop" + + var resId string + // 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. + acctest.SaveConfigContent(config+compartmentIdVariableStr+StackMonitoringMaintenanceWindowsStopResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_windows_stop", "test_maintenance_windows_stop", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowsStopRepresentation), "stackmonitoring", "maintenanceWindowsStop", t) + + acctest.ResourceTest(t, nil, []resource.TestStep{ + // verify Create + { + Config: config + compartmentIdVariableStr + mwIdToStopVariableStr + StackMonitoringMaintenanceWindowsStopResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_stack_monitoring_maintenance_windows_stop", "test_maintenance_windows_stop", acctest.Required, acctest.Create, StackMonitoringMaintenanceWindowsStopRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "maintenance_window_id"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + }) +} diff --git a/internal/service/stack_monitoring/register_datasource.go b/internal/service/stack_monitoring/register_datasource.go index 7751a73a735..31b9cf01d00 100644 --- a/internal/service/stack_monitoring/register_datasource.go +++ b/internal/service/stack_monitoring/register_datasource.go @@ -14,6 +14,8 @@ func RegisterDatasource() { tfresource.RegisterDatasource("oci_stack_monitoring_discovery_job", StackMonitoringDiscoveryJobDataSource()) tfresource.RegisterDatasource("oci_stack_monitoring_discovery_job_logs", StackMonitoringDiscoveryJobLogsDataSource()) tfresource.RegisterDatasource("oci_stack_monitoring_discovery_jobs", StackMonitoringDiscoveryJobsDataSource()) + tfresource.RegisterDatasource("oci_stack_monitoring_maintenance_window", StackMonitoringMaintenanceWindowDataSource()) + tfresource.RegisterDatasource("oci_stack_monitoring_maintenance_windows", StackMonitoringMaintenanceWindowsDataSource()) tfresource.RegisterDatasource("oci_stack_monitoring_metric_extension", StackMonitoringMetricExtensionDataSource()) tfresource.RegisterDatasource("oci_stack_monitoring_metric_extensions", StackMonitoringMetricExtensionsDataSource()) tfresource.RegisterDatasource("oci_stack_monitoring_monitored_resource", StackMonitoringMonitoredResourceDataSource()) diff --git a/internal/service/stack_monitoring/register_resource.go b/internal/service/stack_monitoring/register_resource.go index 86c4a642a9d..34fe65725e7 100644 --- a/internal/service/stack_monitoring/register_resource.go +++ b/internal/service/stack_monitoring/register_resource.go @@ -9,6 +9,9 @@ func RegisterResource() { tfresource.RegisterResource("oci_stack_monitoring_baselineable_metric", StackMonitoringBaselineableMetricResource()) tfresource.RegisterResource("oci_stack_monitoring_config", StackMonitoringConfigResource()) tfresource.RegisterResource("oci_stack_monitoring_discovery_job", StackMonitoringDiscoveryJobResource()) + tfresource.RegisterResource("oci_stack_monitoring_maintenance_window", StackMonitoringMaintenanceWindowResource()) + tfresource.RegisterResource("oci_stack_monitoring_maintenance_windows_retry_failed_operation", StackMonitoringMaintenanceWindowsRetryFailedOperationResource()) + tfresource.RegisterResource("oci_stack_monitoring_maintenance_windows_stop", StackMonitoringMaintenanceWindowsStopResource()) tfresource.RegisterResource("oci_stack_monitoring_metric_extension", StackMonitoringMetricExtensionResource()) tfresource.RegisterResource("oci_stack_monitoring_metric_extension_metric_extension_on_given_resources_management", StackMonitoringMetricExtensionMetricExtensionOnGivenResourcesManagementResource()) tfresource.RegisterResource("oci_stack_monitoring_metric_extensions_test_management", StackMonitoringMetricExtensionsTestManagementResource()) diff --git a/internal/service/stack_monitoring/stack_monitoring_export.go b/internal/service/stack_monitoring/stack_monitoring_export.go index d57e9013912..097cc45ca29 100644 --- a/internal/service/stack_monitoring/stack_monitoring_export.go +++ b/internal/service/stack_monitoring/stack_monitoring_export.go @@ -130,6 +130,29 @@ var exportStackMonitoringProcessSetHints = &tf_export.TerraformResourceHints{ }, } +var exportStackMonitoringMaintenanceWindowHints = &tf_export.TerraformResourceHints{ + ResourceClass: "oci_stack_monitoring_maintenance_window", + DatasourceClass: "oci_stack_monitoring_maintenance_windows", + DatasourceItemsAttr: "maintenance_window_collection", + IsDatasourceCollection: true, + ResourceAbbreviation: "maintenance_window", + RequireResourceRefresh: true, + DiscoverableLifecycleStates: []string{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateActive), + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateNeedsAttention), + }, +} + +var exportStackMonitoringMaintenanceWindowsRetryFailedOperationHints = &tf_export.TerraformResourceHints{ + ResourceClass: "oci_stack_monitoring_maintenance_windows_retry_failed_operation", + ResourceAbbreviation: "maintenance_windows_retry_failed_operation", +} + +var exportStackMonitoringMaintenanceWindowsStopHints = &tf_export.TerraformResourceHints{ + ResourceClass: "oci_stack_monitoring_maintenance_windows_stop", + ResourceAbbreviation: "maintenance_windows_stop", +} + var stackMonitoringResourceGraph = tf_export.TerraformResourceGraph{ "oci_identity_compartment": { {TerraformResourceHints: exportStackMonitoringDiscoveryJobHints}, @@ -137,6 +160,7 @@ var stackMonitoringResourceGraph = tf_export.TerraformResourceGraph{ {TerraformResourceHints: exportStackMonitoringMetricExtensionHints}, {TerraformResourceHints: exportStackMonitoringBaselineableMetricHints}, {TerraformResourceHints: exportStackMonitoringProcessSetHints}, + {TerraformResourceHints: exportStackMonitoringMaintenanceWindowHints}, }, "oci_stack_monitoring_monitored_resource": { { diff --git a/internal/service/stack_monitoring/stack_monitoring_maintenance_window_data_source.go b/internal/service/stack_monitoring/stack_monitoring_maintenance_window_data_source.go new file mode 100644 index 00000000000..c0d46808a2f --- /dev/null +++ b/internal/service/stack_monitoring/stack_monitoring_maintenance_window_data_source.go @@ -0,0 +1,116 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package stack_monitoring + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func StackMonitoringMaintenanceWindowDataSource() *schema.Resource { + fieldMap := make(map[string]*schema.Schema) + fieldMap["maintenance_window_id"] = &schema.Schema{ + Type: schema.TypeString, + Required: true, + } + return tfresource.GetSingularDataSourceItemSchema(StackMonitoringMaintenanceWindowResource(), fieldMap, readSingularStackMonitoringMaintenanceWindow) +} + +func readSingularStackMonitoringMaintenanceWindow(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowDataSourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.ReadResource(sync) +} + +type StackMonitoringMaintenanceWindowDataSourceCrud struct { + D *schema.ResourceData + Client *oci_stack_monitoring.StackMonitoringClient + Res *oci_stack_monitoring.GetMaintenanceWindowResponse +} + +func (s *StackMonitoringMaintenanceWindowDataSourceCrud) VoidState() { + s.D.SetId("") +} + +func (s *StackMonitoringMaintenanceWindowDataSourceCrud) Get() error { + request := oci_stack_monitoring.GetMaintenanceWindowRequest{} + + if maintenanceWindowId, ok := s.D.GetOkExists("maintenance_window_id"); ok { + tmp := maintenanceWindowId.(string) + request.MaintenanceWindowId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "stack_monitoring") + + response, err := s.Client.GetMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + s.Res = &response + return nil +} + +func (s *StackMonitoringMaintenanceWindowDataSourceCrud) SetData() error { + if s.Res == nil { + return nil + } + + s.D.SetId(*s.Res.Id) + + if s.Res.CompartmentId != nil { + s.D.Set("compartment_id", *s.Res.CompartmentId) + } + + if s.Res.Description != nil { + s.D.Set("description", *s.Res.Description) + } + + s.D.Set("lifecycle_details", s.Res.LifecycleDetails) + + if s.Res.Name != nil { + s.D.Set("name", *s.Res.Name) + } + + resources := []interface{}{} + for _, item := range s.Res.Resources { + resources = append(resources, CreateMaintenanceWindowResourceDetailsToMap(item)) + } + s.D.Set("resources", resources) + + resourcesDetails := []interface{}{} + for _, item := range s.Res.ResourcesDetails { + resourcesDetails = append(resourcesDetails, MonitoredResourceDetailsToMap(item)) + } + s.D.Set("resources_details", resourcesDetails) + + if s.Res.Schedule != nil { + scheduleArray := []interface{}{} + if scheduleMap := MaintenanceWindowScheduleToMap(&s.Res.Schedule); scheduleMap != nil { + scheduleArray = append(scheduleArray, scheduleMap) + } + s.D.Set("schedule", scheduleArray) + } else { + s.D.Set("schedule", nil) + } + + s.D.Set("state", s.Res.LifecycleState) + + if s.Res.TimeCreated != nil { + s.D.Set("time_created", s.Res.TimeCreated.String()) + } + + if s.Res.TimeUpdated != nil { + s.D.Set("time_updated", s.Res.TimeUpdated.String()) + } + + return nil +} diff --git a/internal/service/stack_monitoring/stack_monitoring_maintenance_window_resource.go b/internal/service/stack_monitoring/stack_monitoring_maintenance_window_resource.go new file mode 100644 index 00000000000..fb70a4d48c6 --- /dev/null +++ b/internal/service/stack_monitoring/stack_monitoring_maintenance_window_resource.go @@ -0,0 +1,882 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package stack_monitoring + +import ( + "context" + "fmt" + "log" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + + oci_common "github.com/oracle/oci-go-sdk/v65/common" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func StackMonitoringMaintenanceWindowResource() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Timeouts: tfresource.DefaultTimeout, + Create: createStackMonitoringMaintenanceWindow, + Read: readStackMonitoringMaintenanceWindow, + Update: updateStackMonitoringMaintenanceWindow, + Delete: deleteStackMonitoringMaintenanceWindow, + Schema: map[string]*schema.Schema{ + // Required + "compartment_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "resources": { + Type: schema.TypeList, + Required: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "resource_id": { + Type: schema.TypeString, + Required: true, + }, + + // Optional + "are_members_included": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + ForceNew: true, + }, + + // Computed + }, + }, + }, + "schedule": { + Type: schema.TypeList, + Required: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "schedule_type": { + Type: schema.TypeString, + Required: true, + DiffSuppressFunc: tfresource.EqualIgnoreCaseSuppressDiff, + ValidateFunc: validation.StringInSlice([]string{ + "ONE_TIME", + "RECURRENT", + }, true), + }, + + // Optional + "maintenance_window_duration": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "maintenance_window_recurrences": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "time_maintenance_window_end": { + Type: schema.TypeString, + Optional: true, + Computed: true, + DiffSuppressFunc: tfresource.TimeDiffSuppressFunction, + }, + "time_maintenance_window_start": { + Type: schema.TypeString, + Optional: true, + Computed: true, + DiffSuppressFunc: tfresource.TimeDiffSuppressFunction, + }, + + // Computed + }, + }, + }, + + // Optional + "description": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + "lifecycle_details": { + Type: schema.TypeString, + Computed: true, + }, + "resources_details": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "name": { + Type: schema.TypeString, + Computed: true, + }, + "number_of_members": { + Type: schema.TypeInt, + Computed: true, + }, + "resource_id": { + Type: schema.TypeString, + Computed: true, + }, + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "state": { + Type: schema.TypeString, + Computed: true, + }, + "time_created": { + Type: schema.TypeString, + Computed: true, + }, + "time_updated": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func StackMonitoringMaintenanceWindowSummaryResponse() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Timeouts: tfresource.DefaultTimeout, + Create: createStackMonitoringMaintenanceWindow, + Read: readStackMonitoringMaintenanceWindow, + Update: updateStackMonitoringMaintenanceWindow, + Delete: deleteStackMonitoringMaintenanceWindow, + Schema: map[string]*schema.Schema{ + // Required + "id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "compartment_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "number_of_resources": { + Type: schema.TypeInt, + Required: true, + ForceNew: true, + }, + "lifecycle_state": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "lifecycle_details": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "operation_type": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "operation_status": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "schedule": { + Type: schema.TypeList, + Required: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "schedule_type": { + Type: schema.TypeString, + Required: true, + DiffSuppressFunc: tfresource.EqualIgnoreCaseSuppressDiff, + ValidateFunc: validation.StringInSlice([]string{ + "ONE_TIME", + "RECURRENT", + }, true), + }, + + // Optional + "maintenance_window_duration": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "maintenance_window_recurrences": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "time_maintenance_window_end": { + Type: schema.TypeString, + Optional: true, + Computed: true, + DiffSuppressFunc: tfresource.TimeDiffSuppressFunction, + }, + "time_maintenance_window_start": { + Type: schema.TypeString, + Optional: true, + Computed: true, + DiffSuppressFunc: tfresource.TimeDiffSuppressFunction, + }, + + // Computed + }, + }, + }, + // remove + "state": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "freeform_tags": { + Type: schema.TypeMap, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + ForceNew: true, + }, + "defined_tags": { + Type: schema.TypeMap, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + ForceNew: true, + }, + "system_tags": { + Type: schema.TypeMap, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + ForceNew: true, + }, + + // Optional + + // Computed + }, + } +} + +func createStackMonitoringMaintenanceWindow(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.CreateResource(d, sync) +} + +func readStackMonitoringMaintenanceWindow(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.ReadResource(sync) +} + +func updateStackMonitoringMaintenanceWindow(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.UpdateResource(d, sync) +} + +func deleteStackMonitoringMaintenanceWindow(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + sync.DisableNotFoundRetries = true + + return tfresource.DeleteResource(d, sync) +} + +type StackMonitoringMaintenanceWindowResourceCrud struct { + tfresource.BaseCrud + Client *oci_stack_monitoring.StackMonitoringClient + Res *oci_stack_monitoring.MaintenanceWindow + DisableNotFoundRetries bool +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) ID() string { + return *s.Res.Id +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) CreatedPending() []string { + return []string{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateCreating), + } +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) CreatedTarget() []string { + return []string{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateActive), + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateNeedsAttention), + } +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) DeletedPending() []string { + return []string{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateDeleting), + } +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) DeletedTarget() []string { + return []string{ + string(oci_stack_monitoring.MaintenanceWindowLifecycleStateDeleted), + } +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) Create() error { + request := oci_stack_monitoring.CreateMaintenanceWindowRequest{} + + if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok { + tmp := compartmentId.(string) + request.CompartmentId = &tmp + } + + if description, ok := s.D.GetOkExists("description"); ok { + tmp := description.(string) + request.Description = &tmp + } + + if name, ok := s.D.GetOkExists("name"); ok { + tmp := name.(string) + request.Name = &tmp + } + + if resources, ok := s.D.GetOkExists("resources"); ok { + interfaces := resources.([]interface{}) + tmp := make([]oci_stack_monitoring.CreateMaintenanceWindowResourceDetails, len(interfaces)) + for i := range interfaces { + stateDataIndex := i + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "resources", stateDataIndex) + converted, err := s.mapToCreateMaintenanceWindowResourceDetails(fieldKeyFormat) + if err != nil { + return err + } + tmp[i] = converted + } + if len(tmp) != 0 || s.D.HasChange("resources") { + request.Resources = tmp + } + } + + if schedule, ok := s.D.GetOkExists("schedule"); ok { + if tmpList := schedule.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "schedule", 0) + tmp, err := s.mapToMaintenanceWindowSchedule(fieldKeyFormat) + if err != nil { + return err + } + request.Schedule = tmp + } + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.CreateMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + var identifier *string + identifier = response.Id + if identifier != nil { + s.D.SetId(*identifier) + } + return s.getMaintenanceWindowFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring"), oci_stack_monitoring.ActionTypeCreated, s.D.Timeout(schema.TimeoutCreate)) +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) getMaintenanceWindowFromWorkRequest(workId *string, retryPolicy *oci_common.RetryPolicy, + actionTypeEnum oci_stack_monitoring.ActionTypeEnum, timeout time.Duration) error { + + // Wait until it finishes + maintenanceWindowId, err := maintenanceWindowWaitForWorkRequest(workId, "maintenancewindow", + actionTypeEnum, timeout, s.DisableNotFoundRetries, s.Client) + + if err != nil { + return err + } + s.D.SetId(*maintenanceWindowId) + + return s.Get() +} + +func maintenanceWindowWorkRequestShouldRetryFunc(timeout time.Duration) func(response oci_common.OCIOperationResponse) bool { + startTime := time.Now() + stopTime := startTime.Add(timeout) + return func(response oci_common.OCIOperationResponse) bool { + + // Stop after timeout has elapsed + if time.Now().After(stopTime) { + return false + } + + // Make sure we stop on default rules + if tfresource.ShouldRetry(response, false, "stack_monitoring", startTime) { + return true + } + + // Only stop if the time Finished is set + if workRequestResponse, ok := response.Response.(oci_stack_monitoring.GetWorkRequestResponse); ok { + return workRequestResponse.TimeFinished == nil + } + return false + } +} + +func maintenanceWindowWaitForWorkRequest(wId *string, entityType string, action oci_stack_monitoring.ActionTypeEnum, + timeout time.Duration, disableFoundRetries bool, client *oci_stack_monitoring.StackMonitoringClient) (*string, error) { + retryPolicy := tfresource.GetRetryPolicy(disableFoundRetries, "stack_monitoring") + retryPolicy.ShouldRetryOperation = maintenanceWindowWorkRequestShouldRetryFunc(timeout) + + response := oci_stack_monitoring.GetWorkRequestResponse{} + stateConf := &resource.StateChangeConf{ + Pending: []string{ + string(oci_stack_monitoring.OperationStatusInProgress), + string(oci_stack_monitoring.OperationStatusAccepted), + string(oci_stack_monitoring.OperationStatusCanceling), + }, + Target: []string{ + string(oci_stack_monitoring.OperationStatusSucceeded), + string(oci_stack_monitoring.OperationStatusFailed), + string(oci_stack_monitoring.OperationStatusCanceled), + }, + Refresh: func() (interface{}, string, error) { + var err error + response, err = client.GetWorkRequest(context.Background(), + oci_stack_monitoring.GetWorkRequestRequest{ + WorkRequestId: wId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + wr := &response.WorkRequest + return wr, string(wr.Status), err + }, + Timeout: timeout, + } + if _, e := stateConf.WaitForState(); e != nil { + return nil, e + } + + var identifier *string + // The work request response contains an array of objects that finished the operation + for _, res := range response.Resources { + if strings.Contains(strings.ToLower(*res.EntityType), entityType) { + if res.ActionType == action { + identifier = res.Identifier + break + } + } + } + + // The workrequest may have failed, check for errors if identifier is not found or work failed or got cancelled + if identifier == nil || response.Status == oci_stack_monitoring.OperationStatusFailed || response.Status == oci_stack_monitoring.OperationStatusCanceled { + return nil, getErrorFromStackMonitoringMaintenanceWindowWorkRequest(client, wId, retryPolicy, entityType, action) + } + + return identifier, nil +} + +func getErrorFromStackMonitoringMaintenanceWindowWorkRequest(client *oci_stack_monitoring.StackMonitoringClient, workId *string, retryPolicy *oci_common.RetryPolicy, entityType string, action oci_stack_monitoring.ActionTypeEnum) error { + response, err := client.ListWorkRequestErrors(context.Background(), + oci_stack_monitoring.ListWorkRequestErrorsRequest{ + WorkRequestId: workId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + if err != nil { + return err + } + + allErrs := make([]string, 0) + for _, wrkErr := range response.Items { + allErrs = append(allErrs, *wrkErr.Message) + } + errorMessage := strings.Join(allErrs, "\n") + + workRequestErr := fmt.Errorf("work request did not succeed, workId: %s, entity: %s, action: %s. Message: %s", *workId, entityType, action, errorMessage) + + return workRequestErr +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) Get() error { + request := oci_stack_monitoring.GetMaintenanceWindowRequest{} + + tmp := s.D.Id() + request.MaintenanceWindowId = &tmp + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.GetMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + s.Res = &response.MaintenanceWindow + return nil +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) Update() error { + request := oci_stack_monitoring.UpdateMaintenanceWindowRequest{} + + if description, ok := s.D.GetOkExists("description"); ok { + tmp := description.(string) + request.Description = &tmp + } + + tmp := s.D.Id() + request.MaintenanceWindowId = &tmp + + if resources, ok := s.D.GetOkExists("resources"); ok { + interfaces := resources.([]interface{}) + tmp := make([]oci_stack_monitoring.CreateMaintenanceWindowResourceDetails, len(interfaces)) + for i := range interfaces { + stateDataIndex := i + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "resources", stateDataIndex) + converted, err := s.mapToCreateMaintenanceWindowResourceDetails(fieldKeyFormat) + if err != nil { + return err + } + tmp[i] = converted + } + if len(tmp) != 0 || s.D.HasChange("resources") { + request.Resources = tmp + } + } + + if schedule, ok := s.D.GetOkExists("schedule"); ok { + if tmpList := schedule.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "schedule", 0) + tmp, err := s.mapToMaintenanceWindowSchedule(fieldKeyFormat) + if err != nil { + return err + } + request.Schedule = tmp + } + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.UpdateMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + return s.getMaintenanceWindowFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring"), oci_stack_monitoring.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate)) +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) Delete() error { + request := oci_stack_monitoring.DeleteMaintenanceWindowRequest{} + + tmp := s.D.Id() + request.MaintenanceWindowId = &tmp + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.DeleteMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + // Wait until it finishes + _, delWorkRequestErr := maintenanceWindowWaitForWorkRequest(workId, "maintenancewindow", + oci_stack_monitoring.ActionTypeDeleted, s.D.Timeout(schema.TimeoutDelete), s.DisableNotFoundRetries, s.Client) + return delWorkRequestErr +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) SetData() error { + if s.Res.CompartmentId != nil { + s.D.Set("compartment_id", *s.Res.CompartmentId) + } + + if s.Res.Description != nil { + s.D.Set("description", *s.Res.Description) + } + + s.D.Set("lifecycle_details", s.Res.LifecycleDetails) + + if s.Res.Name != nil { + s.D.Set("name", *s.Res.Name) + } + + resources := []interface{}{} + for _, item := range s.Res.Resources { + resources = append(resources, CreateMaintenanceWindowResourceDetailsToMap(item)) + } + s.D.Set("resources", resources) + + resourcesDetails := []interface{}{} + for _, item := range s.Res.ResourcesDetails { + resourcesDetails = append(resourcesDetails, MonitoredResourceDetailsToMap(item)) + } + s.D.Set("resources_details", resourcesDetails) + + if s.Res.Schedule != nil { + scheduleArray := []interface{}{} + if scheduleMap := MaintenanceWindowScheduleToMap(&s.Res.Schedule); scheduleMap != nil { + scheduleArray = append(scheduleArray, scheduleMap) + } + s.D.Set("schedule", scheduleArray) + } else { + s.D.Set("schedule", nil) + } + + s.D.Set("state", s.Res.LifecycleState) + + if s.Res.TimeCreated != nil { + s.D.Set("time_created", s.Res.TimeCreated.String()) + } + + if s.Res.TimeUpdated != nil { + s.D.Set("time_updated", s.Res.TimeUpdated.String()) + } + + return nil +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) mapToCreateMaintenanceWindowResourceDetails(fieldKeyFormat string) (oci_stack_monitoring.CreateMaintenanceWindowResourceDetails, error) { + result := oci_stack_monitoring.CreateMaintenanceWindowResourceDetails{} + + if areMembersIncluded, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "are_members_included")); ok { + tmp := areMembersIncluded.(bool) + result.AreMembersIncluded = &tmp + } + + if resourceId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "resource_id")); ok { + tmp := resourceId.(string) + result.ResourceId = &tmp + } + + return result, nil +} + +func CreateMaintenanceWindowResourceDetailsToMap(obj oci_stack_monitoring.CreateMaintenanceWindowResourceDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.AreMembersIncluded != nil { + result["are_members_included"] = bool(*obj.AreMembersIncluded) + } + + if obj.ResourceId != nil { + result["resource_id"] = string(*obj.ResourceId) + } + + return result +} + +func (s *StackMonitoringMaintenanceWindowResourceCrud) mapToMaintenanceWindowSchedule(fieldKeyFormat string) (oci_stack_monitoring.MaintenanceWindowSchedule, error) { + var baseObject oci_stack_monitoring.MaintenanceWindowSchedule + //discriminator + scheduleTypeRaw, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "schedule_type")) + var scheduleType string + if ok { + scheduleType = scheduleTypeRaw.(string) + } else { + scheduleType = "" // default value + } + switch strings.ToLower(scheduleType) { + case strings.ToLower("ONE_TIME"): + details := oci_stack_monitoring.OneTimeMaintenanceWindowSchedule{} + if timeMaintenanceWindowEnd, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "time_maintenance_window_end")); ok { + tmp, err := time.Parse(time.RFC3339, timeMaintenanceWindowEnd.(string)) + if err != nil { + return details, err + } + details.TimeMaintenanceWindowEnd = &oci_common.SDKTime{Time: tmp} + } + if timeMaintenanceWindowStart, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "time_maintenance_window_start")); ok { + tmp, err := time.Parse(time.RFC3339, timeMaintenanceWindowStart.(string)) + if err != nil { + return details, err + } + details.TimeMaintenanceWindowStart = &oci_common.SDKTime{Time: tmp} + } + baseObject = details + case strings.ToLower("RECURRENT"): + details := oci_stack_monitoring.RecurrentMaintenanceWindowSchedule{} + if maintenanceWindowDuration, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "maintenance_window_duration")); ok { + tmp := maintenanceWindowDuration.(string) + details.MaintenanceWindowDuration = &tmp + } + if maintenanceWindowRecurrences, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "maintenance_window_recurrences")); ok { + tmp := maintenanceWindowRecurrences.(string) + details.MaintenanceWindowRecurrences = &tmp + } + if timeMaintenanceWindowEnd, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "time_maintenance_window_end")); ok { + tmp, err := time.Parse(time.RFC3339, timeMaintenanceWindowEnd.(string)) + if err != nil { + return details, err + } + details.TimeMaintenanceWindowEnd = &oci_common.SDKTime{Time: tmp} + } + if timeMaintenanceWindowStart, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "time_maintenance_window_start")); ok { + tmp, err := time.Parse(time.RFC3339, timeMaintenanceWindowStart.(string)) + if err != nil { + return details, err + } + details.TimeMaintenanceWindowStart = &oci_common.SDKTime{Time: tmp} + } + baseObject = details + default: + return nil, fmt.Errorf("unknown schedule_type '%v' was specified", scheduleType) + } + return baseObject, nil +} + +func MaintenanceWindowScheduleToMap(obj *oci_stack_monitoring.MaintenanceWindowSchedule) map[string]interface{} { + result := map[string]interface{}{} + switch v := (*obj).(type) { + case oci_stack_monitoring.OneTimeMaintenanceWindowSchedule: + result["schedule_type"] = "ONE_TIME" + + if v.TimeMaintenanceWindowEnd != nil { + result["time_maintenance_window_end"] = v.TimeMaintenanceWindowEnd.Format(time.RFC3339Nano) + } + + if v.TimeMaintenanceWindowStart != nil { + result["time_maintenance_window_start"] = v.TimeMaintenanceWindowStart.Format(time.RFC3339Nano) + } + case oci_stack_monitoring.RecurrentMaintenanceWindowSchedule: + result["schedule_type"] = "RECURRENT" + + if v.MaintenanceWindowDuration != nil { + result["maintenance_window_duration"] = string(*v.MaintenanceWindowDuration) + } + + if v.MaintenanceWindowRecurrences != nil { + result["maintenance_window_recurrences"] = string(*v.MaintenanceWindowRecurrences) + } + + if v.TimeMaintenanceWindowEnd != nil { + result["time_maintenance_window_end"] = v.TimeMaintenanceWindowEnd.Format(time.RFC3339Nano) + } + + if v.TimeMaintenanceWindowStart != nil { + result["time_maintenance_window_start"] = v.TimeMaintenanceWindowStart.Format(time.RFC3339Nano) + } + default: + log.Printf("[WARN] Received 'schedule_type' of unknown type %v", *obj) + return nil + } + + return result +} + +func MaintenanceWindowSummaryToMap(obj oci_stack_monitoring.MaintenanceWindowSummary) map[string]interface{} { + result := map[string]interface{}{} + + if obj.CompartmentId != nil { + result["compartment_id"] = string(*obj.CompartmentId) + } + + if obj.DefinedTags != nil { + result["defined_tags"] = tfresource.DefinedTagsToMap(obj.DefinedTags) + } + + result["freeform_tags"] = obj.FreeformTags + + if obj.Id != nil { + result["id"] = string(*obj.Id) + } + + result["lifecycle_details"] = string(obj.LifecycleDetails) + + if obj.Name != nil { + result["name"] = string(*obj.Name) + } + + if obj.NumberOfResources != nil { + result["number_of_resources"] = int(*obj.NumberOfResources) + } + + result["operation_status"] = string(obj.OperationStatus) + + result["operation_type"] = string(obj.OperationType) + + if obj.Schedule != nil { + scheduleArray := []interface{}{} + if scheduleMap := MaintenanceWindowScheduleToMap(&obj.Schedule); scheduleMap != nil { + scheduleArray = append(scheduleArray, scheduleMap) + } + result["schedule"] = scheduleArray + } + + result["state"] = string(obj.LifecycleState) + + if obj.SystemTags != nil { + result["system_tags"] = tfresource.SystemTagsToMap(obj.SystemTags) + } + + return result +} + +func MonitoredResourceDetailsToMap(obj oci_stack_monitoring.MonitoredResourceDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.Name != nil { + result["name"] = string(*obj.Name) + } + + if obj.NumberOfMembers != nil { + result["number_of_members"] = int(*obj.NumberOfMembers) + } + + if obj.ResourceId != nil { + result["resource_id"] = string(*obj.ResourceId) + } + + if obj.Type != nil { + result["type"] = string(*obj.Type) + } + + return result +} diff --git a/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_data_source.go b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_data_source.go new file mode 100644 index 00000000000..aaf3b75ae1b --- /dev/null +++ b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_data_source.go @@ -0,0 +1,143 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package stack_monitoring + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func StackMonitoringMaintenanceWindowsDataSource() *schema.Resource { + return &schema.Resource{ + Read: readStackMonitoringMaintenanceWindows, + Schema: map[string]*schema.Schema{ + "filter": tfresource.DataSourceFiltersSchema(), + "compartment_id": { + Type: schema.TypeString, + Required: true, + }, + "lifecycle_details": { + Type: schema.TypeString, + Optional: true, + }, + "name": { + Type: schema.TypeString, + Optional: true, + }, + "status": { + Type: schema.TypeString, + Optional: true, + }, + "maintenance_window_collection": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + + "items": { + Type: schema.TypeList, + Computed: true, + Elem: tfresource.GetDataSourceItemSchema(StackMonitoringMaintenanceWindowSummaryResponse()), + }, + }, + }, + }, + }, + } +} + +func readStackMonitoringMaintenanceWindows(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowsDataSourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.ReadResource(sync) +} + +type StackMonitoringMaintenanceWindowsDataSourceCrud struct { + D *schema.ResourceData + Client *oci_stack_monitoring.StackMonitoringClient + Res *oci_stack_monitoring.ListMaintenanceWindowsResponse +} + +func (s *StackMonitoringMaintenanceWindowsDataSourceCrud) VoidState() { + s.D.SetId("") +} + +func (s *StackMonitoringMaintenanceWindowsDataSourceCrud) Get() error { + request := oci_stack_monitoring.ListMaintenanceWindowsRequest{} + + if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok { + tmp := compartmentId.(string) + request.CompartmentId = &tmp + } + + if lifecycleDetails, ok := s.D.GetOkExists("lifecycle_details"); ok { + request.LifecycleDetails = oci_stack_monitoring.ListMaintenanceWindowsLifecycleDetailsEnum(lifecycleDetails.(string)) + } + + if name, ok := s.D.GetOkExists("name"); ok { + tmp := name.(string) + request.Name = &tmp + } + + if status, ok := s.D.GetOkExists("status"); ok { + request.Status = oci_stack_monitoring.ListMaintenanceWindowsStatusEnum(status.(string)) + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "stack_monitoring") + + response, err := s.Client.ListMaintenanceWindows(context.Background(), request) + if err != nil { + return err + } + + s.Res = &response + request.Page = s.Res.OpcNextPage + + for request.Page != nil { + listResponse, err := s.Client.ListMaintenanceWindows(context.Background(), request) + if err != nil { + return err + } + + s.Res.Items = append(s.Res.Items, listResponse.Items...) + request.Page = listResponse.OpcNextPage + } + + return nil +} + +func (s *StackMonitoringMaintenanceWindowsDataSourceCrud) SetData() error { + if s.Res == nil { + return nil + } + + s.D.SetId(tfresource.GenerateDataSourceHashID("StackMonitoringMaintenanceWindowsDataSource-", StackMonitoringMaintenanceWindowsDataSource(), s.D)) + resources := []map[string]interface{}{} + maintenanceWindow := map[string]interface{}{} + + items := []interface{}{} + for _, item := range s.Res.Items { + items = append(items, MaintenanceWindowSummaryToMap(item)) + } + maintenanceWindow["items"] = items + + if f, fOk := s.D.GetOkExists("filter"); fOk { + items = tfresource.ApplyFiltersInCollection(f.(*schema.Set), items, StackMonitoringMaintenanceWindowsDataSource().Schema["maintenance_window_collection"].Elem.(*schema.Resource).Schema) + maintenanceWindow["items"] = items + } + + resources = append(resources, maintenanceWindow) + if err := s.D.Set("maintenance_window_collection", resources); err != nil { + return err + } + + return nil +} diff --git a/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_retry_failed_operation_resource.go b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_retry_failed_operation_resource.go new file mode 100644 index 00000000000..231c4359839 --- /dev/null +++ b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_retry_failed_operation_resource.go @@ -0,0 +1,226 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package stack_monitoring + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + oci_common "github.com/oracle/oci-go-sdk/v65/common" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func StackMonitoringMaintenanceWindowsRetryFailedOperationResource() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Timeouts: tfresource.DefaultTimeout, + Create: createStackMonitoringMaintenanceWindowsRetryFailedOperation, + Read: readStackMonitoringMaintenanceWindowsRetryFailedOperation, + Delete: deleteStackMonitoringMaintenanceWindowsRetryFailedOperation, + Schema: map[string]*schema.Schema{ + // Required + "maintenance_window_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + // Optional + + // Computed + }, + } +} + +func createStackMonitoringMaintenanceWindowsRetryFailedOperation(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.CreateResource(d, sync) +} + +func readStackMonitoringMaintenanceWindowsRetryFailedOperation(d *schema.ResourceData, m interface{}) error { + return nil +} + +func deleteStackMonitoringMaintenanceWindowsRetryFailedOperation(d *schema.ResourceData, m interface{}) error { + return nil +} + +type StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud struct { + tfresource.BaseCrud + Client *oci_stack_monitoring.StackMonitoringClient + Res *oci_stack_monitoring.RetryFailedMaintenanceWindowOperationResponse + DisableNotFoundRetries bool +} + +func (s *StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud) ID() string { + return tfresource.GenerateDataSourceHashID("StackMonitoringMaintenanceWindowsRetryFailedOperationResource-", StackMonitoringMaintenanceWindowsRetryFailedOperationResource(), s.D) +} + +func (s *StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud) Create() error { + request := oci_stack_monitoring.RetryFailedMaintenanceWindowOperationRequest{} + + if maintenanceWindowId, ok := s.D.GetOkExists("maintenance_window_id"); ok { + tmp := maintenanceWindowId.(string) + request.MaintenanceWindowId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.RetryFailedMaintenanceWindowOperation(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + + expectedActionTypes := []oci_stack_monitoring.ActionTypeEnum{ + oci_stack_monitoring.ActionTypeCreated, + oci_stack_monitoring.ActionTypeDeleted, + oci_stack_monitoring.ActionTypeUpdated, + oci_stack_monitoring.ActionTypeFailed, + } + + return s.getMaintenanceWindowsRetryFailedOperationFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring"), expectedActionTypes, s.D.Timeout(schema.TimeoutCreate)) +} + +func (s *StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud) getMaintenanceWindowsRetryFailedOperationFromWorkRequest(workId *string, retryPolicy *oci_common.RetryPolicy, + actionTypeEnum []oci_stack_monitoring.ActionTypeEnum, timeout time.Duration) error { + + // Wait until it finishes + maintenanceWindowsRetryFailedOperationId, err := maintenanceWindowsRetryFailedOperationWaitForWorkRequest(workId, "maintenancewindow", + actionTypeEnum, timeout, s.DisableNotFoundRetries, s.Client) + + if err != nil { + return err + } + s.D.SetId(*maintenanceWindowsRetryFailedOperationId) + + return nil +} + +func maintenanceWindowsRetryFailedOperationWorkRequestShouldRetryFunc(timeout time.Duration) func(response oci_common.OCIOperationResponse) bool { + startTime := time.Now() + stopTime := startTime.Add(timeout) + return func(response oci_common.OCIOperationResponse) bool { + + // Stop after timeout has elapsed + if time.Now().After(stopTime) { + return false + } + + // Make sure we stop on default rules + if tfresource.ShouldRetry(response, false, "stack_monitoring", startTime) { + return true + } + + // Only stop if the time Finished is set + if workRequestResponse, ok := response.Response.(oci_stack_monitoring.GetWorkRequestResponse); ok { + return workRequestResponse.TimeFinished == nil + } + return false + } +} + +func maintenanceWindowsRetryFailedOperationWaitForWorkRequest(wId *string, entityType string, actions []oci_stack_monitoring.ActionTypeEnum, + timeout time.Duration, disableFoundRetries bool, client *oci_stack_monitoring.StackMonitoringClient) (*string, error) { + retryPolicy := tfresource.GetRetryPolicy(disableFoundRetries, "stack_monitoring") + retryPolicy.ShouldRetryOperation = maintenanceWindowsRetryFailedOperationWorkRequestShouldRetryFunc(timeout) + + response := oci_stack_monitoring.GetWorkRequestResponse{} + stateConf := &resource.StateChangeConf{ + Pending: []string{ + string(oci_stack_monitoring.OperationStatusInProgress), + string(oci_stack_monitoring.OperationStatusAccepted), + string(oci_stack_monitoring.OperationStatusCanceling), + }, + Target: []string{ + string(oci_stack_monitoring.OperationStatusSucceeded), + string(oci_stack_monitoring.OperationStatusFailed), + string(oci_stack_monitoring.OperationStatusCanceled), + }, + Refresh: func() (interface{}, string, error) { + var err error + response, err = client.GetWorkRequest(context.Background(), + oci_stack_monitoring.GetWorkRequestRequest{ + WorkRequestId: wId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + wr := &response.WorkRequest + return wr, string(wr.Status), err + }, + Timeout: timeout, + } + if _, e := stateConf.WaitForState(); e != nil { + return nil, e + } + + var identifier *string + // The work request response contains an array of objects that finished the operation + for _, res := range response.Resources { + if strings.Contains(strings.ToLower(*res.EntityType), entityType) { + for _, action := range actions { + if res.ActionType == action { + identifier = res.Identifier + break + } + } + } + } + + // The workrequest may have failed, check for errors if identifier is not found or got cancelled + if identifier == nil || response.Status == oci_stack_monitoring.OperationStatusCanceled { + return nil, getErrorFromStackMonitoringMaintenanceWindowsRetryFailedOperationWorkRequest(client, wId, retryPolicy, entityType, actions) + } + + return identifier, nil +} + +func getErrorFromStackMonitoringMaintenanceWindowsRetryFailedOperationWorkRequest(client *oci_stack_monitoring.StackMonitoringClient, workId *string, retryPolicy *oci_common.RetryPolicy, entityType string, actions []oci_stack_monitoring.ActionTypeEnum) error { + response, err := client.ListWorkRequestErrors(context.Background(), + oci_stack_monitoring.ListWorkRequestErrorsRequest{ + WorkRequestId: workId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + if err != nil { + return err + } + + allErrs := make([]string, 0) + for _, wrkErr := range response.Items { + allErrs = append(allErrs, *wrkErr.Message) + } + errorMessage := strings.Join(allErrs, "\n") + + var actionsStrings []string + + for _, action := range actions { + actionsStrings = append(actionsStrings, string(action)) + } + + actionsString := strings.Join(actionsStrings, "|") + workRequestErr := fmt.Errorf("work request did not succeed, workId: %s, entity: %s, action: %s. Message: %s", *workId, entityType, actionsString, errorMessage) + + return workRequestErr +} + +func (s *StackMonitoringMaintenanceWindowsRetryFailedOperationResourceCrud) SetData() error { + return nil +} diff --git a/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_stop_resource.go b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_stop_resource.go new file mode 100644 index 00000000000..bbc14dd5ee0 --- /dev/null +++ b/internal/service/stack_monitoring/stack_monitoring_maintenance_windows_stop_resource.go @@ -0,0 +1,209 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package stack_monitoring + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + oci_common "github.com/oracle/oci-go-sdk/v65/common" + oci_stack_monitoring "github.com/oracle/oci-go-sdk/v65/stackmonitoring" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func StackMonitoringMaintenanceWindowsStopResource() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Timeouts: tfresource.DefaultTimeout, + Create: createStackMonitoringMaintenanceWindowsStop, + Read: readStackMonitoringMaintenanceWindowsStop, + Delete: deleteStackMonitoringMaintenanceWindowsStop, + Schema: map[string]*schema.Schema{ + // Required + "maintenance_window_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + // Optional + + // Computed + }, + } +} + +func createStackMonitoringMaintenanceWindowsStop(d *schema.ResourceData, m interface{}) error { + sync := &StackMonitoringMaintenanceWindowsStopResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).StackMonitoringClient() + + return tfresource.CreateResource(d, sync) +} + +func readStackMonitoringMaintenanceWindowsStop(d *schema.ResourceData, m interface{}) error { + return nil +} + +func deleteStackMonitoringMaintenanceWindowsStop(d *schema.ResourceData, m interface{}) error { + return nil +} + +type StackMonitoringMaintenanceWindowsStopResourceCrud struct { + tfresource.BaseCrud + Client *oci_stack_monitoring.StackMonitoringClient + Res *oci_stack_monitoring.StopMaintenanceWindowResponse + DisableNotFoundRetries bool +} + +func (s *StackMonitoringMaintenanceWindowsStopResourceCrud) ID() string { + return tfresource.GenerateDataSourceHashID("StackMonitoringMaintenanceWindowsRetryStopResource-", StackMonitoringMaintenanceWindowsStopResource(), s.D) +} + +func (s *StackMonitoringMaintenanceWindowsStopResourceCrud) Create() error { + request := oci_stack_monitoring.StopMaintenanceWindowRequest{} + + if maintenanceWindowId, ok := s.D.GetOkExists("maintenance_window_id"); ok { + tmp := maintenanceWindowId.(string) + request.MaintenanceWindowId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring") + + response, err := s.Client.StopMaintenanceWindow(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + return s.getMaintenanceWindowsStopFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "stack_monitoring"), oci_stack_monitoring.ActionTypeDeleted, s.D.Timeout(schema.TimeoutCreate)) +} + +func (s *StackMonitoringMaintenanceWindowsStopResourceCrud) getMaintenanceWindowsStopFromWorkRequest(workId *string, retryPolicy *oci_common.RetryPolicy, + actionTypeEnum oci_stack_monitoring.ActionTypeEnum, timeout time.Duration) error { + + // Wait until it finishes + maintenanceWindowsStopId, err := maintenanceWindowsStopWaitForWorkRequest(workId, "maintenancewindow", + actionTypeEnum, timeout, s.DisableNotFoundRetries, s.Client) + + if err != nil { + return err + } + s.D.SetId(*maintenanceWindowsStopId) + + return nil +} + +func maintenanceWindowsStopWorkRequestShouldRetryFunc(timeout time.Duration) func(response oci_common.OCIOperationResponse) bool { + startTime := time.Now() + stopTime := startTime.Add(timeout) + return func(response oci_common.OCIOperationResponse) bool { + + // Stop after timeout has elapsed + if time.Now().After(stopTime) { + return false + } + + // Make sure we stop on default rules + if tfresource.ShouldRetry(response, false, "stack_monitoring", startTime) { + return true + } + + // Only stop if the time Finished is set + if workRequestResponse, ok := response.Response.(oci_stack_monitoring.GetWorkRequestResponse); ok { + return workRequestResponse.TimeFinished == nil + } + return false + } +} + +func maintenanceWindowsStopWaitForWorkRequest(wId *string, entityType string, action oci_stack_monitoring.ActionTypeEnum, + timeout time.Duration, disableFoundRetries bool, client *oci_stack_monitoring.StackMonitoringClient) (*string, error) { + retryPolicy := tfresource.GetRetryPolicy(disableFoundRetries, "stack_monitoring") + retryPolicy.ShouldRetryOperation = maintenanceWindowsStopWorkRequestShouldRetryFunc(timeout) + + response := oci_stack_monitoring.GetWorkRequestResponse{} + stateConf := &resource.StateChangeConf{ + Pending: []string{ + string(oci_stack_monitoring.OperationStatusInProgress), + string(oci_stack_monitoring.OperationStatusAccepted), + string(oci_stack_monitoring.OperationStatusCanceling), + }, + Target: []string{ + string(oci_stack_monitoring.OperationStatusSucceeded), + string(oci_stack_monitoring.OperationStatusFailed), + string(oci_stack_monitoring.OperationStatusCanceled), + }, + Refresh: func() (interface{}, string, error) { + var err error + response, err = client.GetWorkRequest(context.Background(), + oci_stack_monitoring.GetWorkRequestRequest{ + WorkRequestId: wId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + wr := &response.WorkRequest + return wr, string(wr.Status), err + }, + Timeout: timeout, + } + if _, e := stateConf.WaitForState(); e != nil { + return nil, e + } + + var identifier *string + // The work request response contains an array of objects that finished the operation + for _, res := range response.Resources { + if strings.Contains(strings.ToLower(*res.EntityType), entityType) { + if res.ActionType == action { + identifier = res.Identifier + break + } + } + } + + // The workrequest may have failed, check for errors if identifier is not found or work failed or got cancelled + if identifier == nil || response.Status == oci_stack_monitoring.OperationStatusFailed || response.Status == oci_stack_monitoring.OperationStatusCanceled { + return nil, getErrorFromStackMonitoringMaintenanceWindowsStopWorkRequest(client, wId, retryPolicy, entityType, action) + } + + return identifier, nil +} + +func getErrorFromStackMonitoringMaintenanceWindowsStopWorkRequest(client *oci_stack_monitoring.StackMonitoringClient, workId *string, retryPolicy *oci_common.RetryPolicy, entityType string, action oci_stack_monitoring.ActionTypeEnum) error { + response, err := client.ListWorkRequestErrors(context.Background(), + oci_stack_monitoring.ListWorkRequestErrorsRequest{ + WorkRequestId: workId, + RequestMetadata: oci_common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + if err != nil { + return err + } + + allErrs := make([]string, 0) + for _, wrkErr := range response.Items { + allErrs = append(allErrs, *wrkErr.Message) + } + errorMessage := strings.Join(allErrs, "\n") + + workRequestErr := fmt.Errorf("work request did not succeed, workId: %s, entity: %s, action: %s. Message: %s", *workId, entityType, action, errorMessage) + + return workRequestErr +} + +func (s *StackMonitoringMaintenanceWindowsStopResourceCrud) SetData() error { + return nil +} diff --git a/website/docs/d/stack_monitoring_maintenance_window.html.markdown b/website/docs/d/stack_monitoring_maintenance_window.html.markdown new file mode 100644 index 00000000000..9a911eb7d51 --- /dev/null +++ b/website/docs/d/stack_monitoring_maintenance_window.html.markdown @@ -0,0 +1,58 @@ +--- +subcategory: "Stack Monitoring" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_stack_monitoring_maintenance_window" +sidebar_current: "docs-oci-datasource-stack_monitoring-maintenance_window" +description: |- + Provides details about a specific Maintenance Window in Oracle Cloud Infrastructure Stack Monitoring service +--- + +# Data Source: oci_stack_monitoring_maintenance_window +This data source provides details about a specific Maintenance Window resource in Oracle Cloud Infrastructure Stack Monitoring service. + +Get maintenance window for the given identifier [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). + + +## Example Usage + +```hcl +data "oci_stack_monitoring_maintenance_window" "test_maintenance_window" { + #Required + maintenance_window_id = oci_stack_monitoring_maintenance_window.test_maintenance_window.id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `maintenance_window_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. + + +## Attributes Reference + +The following attributes are exported: + +* `compartment_id` - Compartment Identifier [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). +* `description` - Maintenance Window description. +* `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. +* `lifecycle_details` - Lifecycle Details of the Maintenance Window. +* `name` - Maintenance Window name. +* `resources` - List of resource Ids which are part of the Maintenance Window + * `are_members_included` - Flag to indicate if the members of the resource has to be include in the Maintenance Window. + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. +* `resources_details` - List of resource details that are part of the Maintenance Window. + * `name` - Name of the monitored resource + * `number_of_members` - Number of members of the resource + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. + * `type` - Type of the monitored resource +* `schedule` - Schedule information of the Maintenance Window + * `maintenance_window_duration` - Duration time of each recurrence of each Maintenance Window. It must be specified as a string in ISO 8601 extended format. + * `maintenance_window_recurrences` - A RFC5545 formatted recurrence string which represents the Maintenance Window Recurrence. Please refer this for details:https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 FREQ: Frequency of the Maintenance Window. The supported values are: DAILY and WEEKLY. BYDAY: Comma separated days for Weekly Maintenance Window. BYHOUR: Specifies the start hour of each recurrence after `timeMaintenanceWindowStart` value. BYMINUTE: Specifies the start minute of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 BYSECOND: Specifies the start second of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 Other Rules are not supported. + * `schedule_type` - Property to identify the type of the Maintenance Window. + * `time_maintenance_window_end` - Start time of Maintenance window. A RFC3339 formatted datetime string + * `time_maintenance_window_start` - Start time of Maintenance window. A RFC3339 formatted datetime string +* `state` - Lifecycle state of the monitored resource. +* `time_created` - The time the the maintenance window was created. An RFC3339 formatted datetime string +* `time_updated` - The time the the mainteance window was updated. An RFC3339 formatted datetime string + diff --git a/website/docs/d/stack_monitoring_maintenance_windows.html.markdown b/website/docs/d/stack_monitoring_maintenance_windows.html.markdown new file mode 100644 index 00000000000..56210535ce9 --- /dev/null +++ b/website/docs/d/stack_monitoring_maintenance_windows.html.markdown @@ -0,0 +1,71 @@ +--- +subcategory: "Stack Monitoring" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_stack_monitoring_maintenance_windows" +sidebar_current: "docs-oci-datasource-stack_monitoring-maintenance_windows" +description: |- + Provides the list of Maintenance Windows in Oracle Cloud Infrastructure Stack Monitoring service +--- + +# Data Source: oci_stack_monitoring_maintenance_windows +This data source provides the list of Maintenance Windows in Oracle Cloud Infrastructure Stack Monitoring service. + +Returns a list of maintenance windows. + +## Example Usage + +```hcl +data "oci_stack_monitoring_maintenance_windows" "test_maintenance_windows" { + #Required + compartment_id = var.compartment_id + + #Optional + lifecycle_details = var.maintenance_window_lifecycle_details + name = var.maintenance_window_name + status = var.maintenance_window_status +} +``` + +## Argument Reference + +The following arguments are supported: + +* `compartment_id` - (Required) The ID of the compartment in which data is listed. +* `lifecycle_details` - (Optional) A filter to return maintenance windows with matching lifecycleDetails. +* `name` - (Optional) A filter to return maintenance windows that match exact resource name. +* `status` - (Optional) A filter to return only maintenance windows with matching lifecycleState. + + +## Attributes Reference + +The following attributes are exported: + +* `maintenance_window_collection` - The list of maintenance_window_collection. + +### MaintenanceWindow Reference + +The following attributes are exported: + +* `compartment_id` - Compartment Identifier [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). +* `description` - Maintenance Window description. +* `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. +* `lifecycle_details` - Lifecycle Details of the Maintenance Window. +* `name` - Maintenance Window name. +* `resources` - List of resource Ids which are part of the Maintenance Window + * `are_members_included` - Flag to indicate if the members of the resource has to be include in the Maintenance Window. + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. +* `resources_details` - List of resource details that are part of the Maintenance Window. + * `name` - Name of the monitored resource + * `number_of_members` - Number of members of the resource + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. + * `type` - Type of the monitored resource +* `schedule` - Schedule information of the Maintenance Window + * `maintenance_window_duration` - Duration time of each recurrence of each Maintenance Window. It must be specified as a string in ISO 8601 extended format. + * `maintenance_window_recurrences` - A RFC5545 formatted recurrence string which represents the Maintenance Window Recurrence. Please refer this for details:https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 FREQ: Frequency of the Maintenance Window. The supported values are: DAILY and WEEKLY. BYDAY: Comma separated days for Weekly Maintenance Window. BYHOUR: Specifies the start hour of each recurrence after `timeMaintenanceWindowStart` value. BYMINUTE: Specifies the start minute of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 BYSECOND: Specifies the start second of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 Other Rules are not supported. + * `schedule_type` - Property to identify the type of the Maintenance Window. + * `time_maintenance_window_end` - Start time of Maintenance window. A RFC3339 formatted datetime string + * `time_maintenance_window_start` - Start time of Maintenance window. A RFC3339 formatted datetime string +* `state` - Lifecycle state of the monitored resource. +* `time_created` - The time the the maintenance window was created. An RFC3339 formatted datetime string +* `time_updated` - The time the the mainteance window was updated. An RFC3339 formatted datetime string + diff --git a/website/docs/guides/resource_discovery.html.markdown b/website/docs/guides/resource_discovery.html.markdown index 4e3b3bee8b9..5f165562ddd 100644 --- a/website/docs/guides/resource_discovery.html.markdown +++ b/website/docs/guides/resource_discovery.html.markdown @@ -1166,6 +1166,9 @@ stack_monitoring * oci\_stack\_monitoring\_metric\_extension * oci\_stack\_monitoring\_baselineable\_metric * oci\_stack\_monitoring\_process\_set +* oci\_stack\_monitoring\_maintenance\_window +* oci\_stack\_monitoring\_maintenance\_windows\_retry\_failed\_operation +* oci\_stack\_monitoring\_maintenance\_windows\_stop streaming diff --git a/website/docs/r/stack_monitoring_maintenance_window.html.markdown b/website/docs/r/stack_monitoring_maintenance_window.html.markdown new file mode 100644 index 00000000000..eb0ffd48920 --- /dev/null +++ b/website/docs/r/stack_monitoring_maintenance_window.html.markdown @@ -0,0 +1,110 @@ +--- +subcategory: "Stack Monitoring" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_stack_monitoring_maintenance_window" +sidebar_current: "docs-oci-resource-stack_monitoring-maintenance_window" +description: |- + Provides the Maintenance Window resource in Oracle Cloud Infrastructure Stack Monitoring service +--- + +# oci_stack_monitoring_maintenance_window +This resource provides the Maintenance Window resource in Oracle Cloud Infrastructure Stack Monitoring service. + +Creates a new Maintenance Window for the given resources. It will create also the +Alarms Suppression for each alarm that the resource migth trigger. + + +## Example Usage + +```hcl +resource "oci_stack_monitoring_maintenance_window" "test_maintenance_window" { + #Required + compartment_id = var.compartment_id + name = var.maintenance_window_name + resources { + #Required + resource_id = oci_cloud_guard_resource.test_resource.id + + #Optional + are_members_included = var.maintenance_window_resources_are_members_included + } + schedule { + #Required + schedule_type = var.maintenance_window_schedule_schedule_type + + #Optional + maintenance_window_duration = var.maintenance_window_schedule_maintenance_window_duration + maintenance_window_recurrences = var.maintenance_window_schedule_maintenance_window_recurrences + time_maintenance_window_end = var.maintenance_window_schedule_time_maintenance_window_end + time_maintenance_window_start = var.maintenance_window_schedule_time_maintenance_window_start + } + + #Optional + description = var.maintenance_window_description +} +``` + +## Argument Reference + +The following arguments are supported: + +* `compartment_id` - (Required) Compartment Identifier [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). +* `description` - (Optional) (Updatable) Maintenance Window description. +* `name` - (Required) Maintenance Window name. +* `resources` - (Required) (Updatable) List of resource Ids which are part of the Maintenance Window + * `are_members_included` - (Optional) (Updatable) Flag to indicate if the members of the resource has to be include in the Maintenance Window. + * `resource_id` - (Required) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. +* `schedule` - (Required) (Updatable) Schedule information of the Maintenance Window + * `maintenance_window_duration` - (Applicable when schedule_type=RECURRENT) (Updatable) Duration time of each recurrence of each Maintenance Window. It must be specified as a string in ISO 8601 extended format. + * `maintenance_window_recurrences` - (Required when schedule_type=RECURRENT) (Updatable) A RFC5545 formatted recurrence string which represents the Maintenance Window Recurrence. Please refer this for details:https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 FREQ: Frequency of the Maintenance Window. The supported values are: DAILY and WEEKLY. BYDAY: Comma separated days for Weekly Maintenance Window. BYHOUR: Specifies the start hour of each recurrence after `timeMaintenanceWindowStart` value. BYMINUTE: Specifies the start minute of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 BYSECOND: Specifies the start second of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 Other Rules are not supported. + * `schedule_type` - (Required) (Updatable) Property to identify the type of the Maintenance Window. + * `time_maintenance_window_end` - (Optional) (Updatable) Start time of Maintenance window. A RFC3339 formatted datetime string + * `time_maintenance_window_start` - (Optional) (Updatable) Start time of Maintenance window. A RFC3339 formatted datetime string + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + +* `compartment_id` - Compartment Identifier [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). +* `description` - Maintenance Window description. +* `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. +* `lifecycle_details` - Lifecycle Details of the Maintenance Window. +* `name` - Maintenance Window name. +* `resources` - List of resource Ids which are part of the Maintenance Window + * `are_members_included` - Flag to indicate if the members of the resource has to be include in the Maintenance Window. + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. +* `resources_details` - List of resource details that are part of the Maintenance Window. + * `name` - Name of the monitored resource + * `number_of_members` - Number of members of the resource + * `resource_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of monitored resource part of the Maintenance window. + * `type` - Type of the monitored resource +* `schedule` - Schedule information of the Maintenance Window + * `maintenance_window_duration` - Duration time of each recurrence of each Maintenance Window. It must be specified as a string in ISO 8601 extended format. + * `maintenance_window_recurrences` - A RFC5545 formatted recurrence string which represents the Maintenance Window Recurrence. Please refer this for details:https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 FREQ: Frequency of the Maintenance Window. The supported values are: DAILY and WEEKLY. BYDAY: Comma separated days for Weekly Maintenance Window. BYHOUR: Specifies the start hour of each recurrence after `timeMaintenanceWindowStart` value. BYMINUTE: Specifies the start minute of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 BYSECOND: Specifies the start second of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 Other Rules are not supported. + * `schedule_type` - Property to identify the type of the Maintenance Window. + * `time_maintenance_window_end` - Start time of Maintenance window. A RFC3339 formatted datetime string + * `time_maintenance_window_start` - Start time of Maintenance window. A RFC3339 formatted datetime string +* `state` - Lifecycle state of the monitored resource. +* `time_created` - The time the the maintenance window was created. An RFC3339 formatted datetime string +* `time_updated` - The time the the mainteance window was updated. An RFC3339 formatted datetime string + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Maintenance Window + * `update` - (Defaults to 20 minutes), when updating the Maintenance Window + * `delete` - (Defaults to 20 minutes), when destroying the Maintenance Window + + +## Import + +MaintenanceWindows can be imported using the `id`, e.g. + +``` +$ terraform import oci_stack_monitoring_maintenance_window.test_maintenance_window "id" +``` + diff --git a/website/docs/r/stack_monitoring_maintenance_windows_retry_failed_operation.html.markdown b/website/docs/r/stack_monitoring_maintenance_windows_retry_failed_operation.html.markdown new file mode 100644 index 00000000000..549816c9562 --- /dev/null +++ b/website/docs/r/stack_monitoring_maintenance_windows_retry_failed_operation.html.markdown @@ -0,0 +1,55 @@ +--- +subcategory: "Stack Monitoring" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_stack_monitoring_maintenance_windows_retry_failed_operation" +sidebar_current: "docs-oci-resource-stack_monitoring-maintenance_windows_retry_failed_operation" +description: |- + Provides the Maintenance Windows Retry Failed Operation resource in Oracle Cloud Infrastructure Stack Monitoring service +--- + +# oci_stack_monitoring_maintenance_windows_retry_failed_operation +This resource provides the Maintenance Windows Retry Failed Operation resource in Oracle Cloud Infrastructure Stack Monitoring service. + +Retry the last failed operation. The operation failed will be the most recent one. It won't apply for previous failed operations. + + +## Example Usage + +```hcl +resource "oci_stack_monitoring_maintenance_windows_retry_failed_operation" "test_maintenance_windows_retry_failed_operation" { + #Required + maintenance_window_id = oci_stack_monitoring_maintenance_window.test_maintenance_window.id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `maintenance_window_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Maintenance Windows Retry Failed Operation + * `update` - (Defaults to 20 minutes), when updating the Maintenance Windows Retry Failed Operation + * `delete` - (Defaults to 20 minutes), when destroying the Maintenance Windows Retry Failed Operation + + +## Import + +MaintenanceWindowsRetryFailedOperation can be imported using the `id`, e.g. + +``` +$ terraform import oci_stack_monitoring_maintenance_windows_retry_failed_operation.test_maintenance_windows_retry_failed_operation "id" +``` + diff --git a/website/docs/r/stack_monitoring_maintenance_windows_stop.html.markdown b/website/docs/r/stack_monitoring_maintenance_windows_stop.html.markdown new file mode 100644 index 00000000000..38849b7d9dd --- /dev/null +++ b/website/docs/r/stack_monitoring_maintenance_windows_stop.html.markdown @@ -0,0 +1,55 @@ +--- +subcategory: "Stack Monitoring" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_stack_monitoring_maintenance_windows_stop" +sidebar_current: "docs-oci-resource-stack_monitoring-maintenance_windows_stop" +description: |- + Provides the Maintenance Windows Stop resource in Oracle Cloud Infrastructure Stack Monitoring service +--- + +# oci_stack_monitoring_maintenance_windows_stop +This resource provides the Maintenance Windows Stop resource in Oracle Cloud Infrastructure Stack Monitoring service. + +Stop a maintenance window before the end time is reached. + + +## Example Usage + +```hcl +resource "oci_stack_monitoring_maintenance_windows_stop" "test_maintenance_windows_stop" { + #Required + maintenance_window_id = oci_stack_monitoring_maintenance_window.test_maintenance_window.id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `maintenance_window_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of maintenance window. + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Maintenance Windows Stop + * `update` - (Defaults to 20 minutes), when updating the Maintenance Windows Stop + * `delete` - (Defaults to 20 minutes), when destroying the Maintenance Windows Stop + + +## Import + +MaintenanceWindowsStop can be imported using the `id`, e.g. + +``` +$ terraform import oci_stack_monitoring_maintenance_windows_stop.test_maintenance_windows_stop "id" +``` + From 5ba28e2025a915789b13ffec5575408f560191b1 Mon Sep 17 00:00:00 2001 From: Raghav Ravishankar <> Date: Tue, 6 Aug 2024 11:32:20 -0700 Subject: [PATCH 04/31] Added - Support for PV Support for Launch w/Multiple Attachments Support for VMs --- .../instance/vm_multi_attach_instance.tf | 28 +++- .../integrationtest/core_instance_test.go | 146 +++++++++++++++--- .../service/core/core_instance_resource.go | 49 ++++++ website/docs/r/core_instance.html.markdown | 10 +- 4 files changed, 202 insertions(+), 31 deletions(-) diff --git a/examples/compute/instance/vm_multi_attach_instance.tf b/examples/compute/instance/vm_multi_attach_instance.tf index 7d9a8da8f49..72178a918df 100644 --- a/examples/compute/instance/vm_multi_attach_instance.tf +++ b/examples/compute/instance/vm_multi_attach_instance.tf @@ -5,10 +5,17 @@ variable "vm_multi_attach_instance_shape" { default = "VM.Standard2.1" } -resource "oci_core_volume" "test_block_volume_multi_attach" { +resource "oci_core_volume" "test_block_volume_multi_attach_iscsi" { availability_domain = data.oci_identity_availability_domain.ad.name compartment_id = var.compartment_ocid - display_name = "test_attach_existing_volume_on_instance_launch_1" + display_name = "test_attach_existing_volume_on_instance_launch_iscsi" + size_in_gbs = var.db_size +} + +resource "oci_core_volume" "test_block_volume_multi_attach_pv" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "test_attach_existing_volume_on_instance_launch_pv" size_in_gbs = var.db_size } @@ -35,7 +42,7 @@ resource "oci_core_instance" "test_vm_multi_attach_instance_launch" { kms_key_id = var.kms_key_ocid } - // Create and attach a volume + // Create and attach a volume - iscsi launch_volume_attachments { type = "iscsi" display_name = "test_create_and_attach_volume_on_launch_1" @@ -47,9 +54,9 @@ resource "oci_core_instance" "test_vm_multi_attach_instance_launch" { } } - // Create and attach a volume + // Create and attach a volume - pv launch_volume_attachments { - type = "iscsi" + type = "paravirtualized" display_name = "test_create_and_attach_volume_on_launch_2" launch_create_volume_details { volume_creation_type = "ATTRIBUTES" @@ -59,11 +66,18 @@ resource "oci_core_instance" "test_vm_multi_attach_instance_launch" { } } - // Attach an existing volume + // Attach an existing volume - iscsi launch_volume_attachments { type = "iscsi" display_name = "test_attach_existing_volume_on_launch" - volume_id = oci_core_volume.test_block_volume_multi_attach.id + volume_id = oci_core_volume.test_block_volume_multi_attach_iscsi.id + } + + // Attach an existing volume - pv + launch_volume_attachments { + type = "paravirtualized" + display_name = "test_attach_existing_volume_on_launch" + volume_id = oci_core_volume.test_block_volume_multi_attach_pv.id } # Apply the following flag only if you wish to preserve the attached boot volume upon destroying this instance diff --git a/internal/integrationtest/core_instance_test.go b/internal/integrationtest/core_instance_test.go index 2b60ece3a0d..41c8f171242 100644 --- a/internal/integrationtest/core_instance_test.go +++ b/internal/integrationtest/core_instance_test.go @@ -71,7 +71,7 @@ var ( "shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.1`}, "update_operation_constraint": acctest.Representation{RepType: acctest.Optional, Create: `ALLOW_DOWNTIME`, Update: `ALLOW_DOWNTIME`}, "agent_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAgentConfigRepresentation}, - "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAvailabilityConfigRepresentation}, + "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceBasicAvailabilityConfigRepresentation}, "create_vnic_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceCreateVnicDetailsRepresentation}, "dedicated_vm_host_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_dedicated_vm_host.test_dedicated_vm_host.id}`}, "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")}`}, @@ -105,7 +105,7 @@ var ( "shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.1`}, "update_operation_constraint": acctest.Representation{RepType: acctest.Optional, Create: `ALLOW_DOWNTIME`, Update: `ALLOW_DOWNTIME`}, "agent_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAgentConfigRepresentation}, - "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAvailabilityConfigRepresentation}, + "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceBasicAvailabilityConfigRepresentation}, "create_vnic_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceCreateVnicDetailsRepresentation}, "dedicated_vm_host_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_dedicated_vm_host.test_dedicated_vm_host.id}`}, "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")}`}, @@ -126,7 +126,7 @@ var ( "ipxe_script": acctest.Representation{RepType: acctest.Optional, Create: `ipxeScript`}, "is_pv_encryption_in_transit_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, "launch_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchOptionsRepresentation}, - "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithExistingVolumeAttachmentsRepresentation}, + "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithExistingVolumeAttachmentsIscsiRepresentation}, "metadata": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"user_data": "abcd"}, Update: map[string]string{"user_data": "abcd", "volatile_data": "stringE"}}, "shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation}, "source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceSourceDetailsRepresentation}, @@ -140,7 +140,7 @@ var ( "shape": acctest.Representation{RepType: acctest.Required, Create: `VM.Standard2.1`}, "update_operation_constraint": acctest.Representation{RepType: acctest.Optional, Create: `ALLOW_DOWNTIME`, Update: `ALLOW_DOWNTIME`}, "agent_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAgentConfigRepresentation}, - "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAvailabilityConfigRepresentation}, + "availability_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceBasicAvailabilityConfigRepresentation}, "create_vnic_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceCreateVnicDetailsRepresentation}, "dedicated_vm_host_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_dedicated_vm_host.test_dedicated_vm_host.id}`}, "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")}`}, @@ -161,7 +161,7 @@ var ( "ipxe_script": acctest.Representation{RepType: acctest.Optional, Create: `ipxeScript`}, "is_pv_encryption_in_transit_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, "launch_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchOptionsRepresentation}, - "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithCreateVolumeAttachmentsRepresentation}, + "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithCreateVolumeAttachmentsIscsiRepresentation}, "metadata": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"user_data": "abcd"}, Update: map[string]string{"user_data": "abcd", "volatile_data": "stringE"}}, "shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceShapeConfigRepresentation}, "source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceSourceDetailsRepresentation}, @@ -210,6 +210,10 @@ var ( "is_monitoring_disabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, "plugins_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceAgentConfigPluginsConfigRepresentation}, } + CoreInstanceBasicAvailabilityConfigRepresentation = map[string]interface{}{ + "is_live_migration_preferred": acctest.Representation{RepType: acctest.Optional, Create: `false`}, + "recovery_action": acctest.Representation{RepType: acctest.Optional, Create: `RESTORE_INSTANCE`}, + } CoreInstanceAvailabilityConfigRepresentation = map[string]interface{}{ "is_live_migration_preferred": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, "recovery_action": acctest.Representation{RepType: acctest.Optional, Create: `RESTORE_INSTANCE`, Update: `STOP_INSTANCE`}, @@ -260,9 +264,8 @@ var ( "network_type": acctest.Representation{RepType: acctest.Optional, Create: `PARAVIRTUALIZED`}, "remote_data_volume_type": acctest.Representation{RepType: acctest.Optional, Create: `PARAVIRTUALIZED`}, } - CoreInstanceLaunchWithExistingVolumeAttachmentsRepresentation = map[string]interface{}{ + CoreInstanceLaunchWithExistingVolumeAttachmentsIscsiRepresentation = map[string]interface{}{ "type": acctest.Representation{RepType: acctest.Required, Create: `iscsi`}, - "device": acctest.Representation{RepType: acctest.Optional, Create: `device`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, "encryption_in_transit_type": acctest.Representation{RepType: acctest.Optional, Create: `NONE`}, "is_agent_auto_iscsi_login_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, @@ -271,9 +274,18 @@ var ( "use_chap": acctest.Representation{RepType: acctest.Optional, Create: `false`}, "volume_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_volume.test_volume.id}`}, } - CoreInstanceLaunchWithCreateVolumeAttachmentsRepresentation = map[string]interface{}{ + CoreInstanceLaunchWithCreateVolumeAttachmentsPvRepresentation = map[string]interface{}{ + "type": acctest.Representation{RepType: acctest.Required, Create: `paravirtualized`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, + "launch_create_volume_details": acctest.RepresentationGroup{RepType: acctest.Optional, + Group: CoreInstanceLaunchVolumeAttachmentsLaunchCreateVolumeDetailsRepresentation}, + "use_chap": acctest.Representation{RepType: acctest.Optional, Create: `true`}, + "is_read_only": acctest.Representation{RepType: acctest.Optional, Create: `true`}, + "is_shareable": acctest.Representation{RepType: acctest.Optional, Create: `true`}, + "is_pv_encryption_in_transit_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, + } + CoreInstanceLaunchWithCreateVolumeAttachmentsIscsiRepresentation = map[string]interface{}{ "type": acctest.Representation{RepType: acctest.Required, Create: `iscsi`}, - "device": acctest.Representation{RepType: acctest.Optional, Create: `device`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, "encryption_in_transit_type": acctest.Representation{RepType: acctest.Optional, Create: `NONE`}, "is_agent_auto_iscsi_login_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, @@ -865,6 +877,7 @@ func TestCoreInstanceResource_basic(t *testing.T) { config := ` provider oci { + alias = "basic-instance-launch-update" test_time_maintenance_reboot_due = "2030-01-01 00:00:00" } ` + acctest.CommonTestVariables() @@ -983,7 +996,6 @@ func TestCoreInstanceResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "launch_options.0.network_type", "PARAVIRTUALIZED"), resource.TestCheckResourceAttr(resourceName, "launch_options.0.remote_data_volume_type", "PARAVIRTUALIZED"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.#", "1"), - resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.device", "device"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.display_name", "displayName"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.encryption_in_transit_type", "NONE"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.is_agent_auto_iscsi_login_enabled", "false"), @@ -1029,7 +1041,7 @@ func TestCoreInstanceResource_basic(t *testing.T) { acctest.RepresentationCopyWithNewProperties(CoreInstanceAttachExistingVolumesOnLaunchRepresentation, map[string]interface{}{ "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, - Group: CoreInstanceLaunchWithExistingVolumeAttachmentsRepresentation}, + Group: CoreInstanceLaunchWithExistingVolumeAttachmentsIscsiRepresentation}, })), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.display_name", "displayName"), @@ -1049,7 +1061,7 @@ func TestCoreInstanceResource_basic(t *testing.T) { Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies, }, - // verify Create with optionals - Create and attach volumes on instance launch + // verify Create with optionals - Create and attach volumes on instance launch (Iscsi) { Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", @@ -1099,7 +1111,6 @@ func TestCoreInstanceResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "launch_options.0.remote_data_volume_type", "PARAVIRTUALIZED"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.#", "1"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.type", "iscsi"), - resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.device", "device"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.display_name", "displayName"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.encryption_in_transit_type", "NONE"), resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.is_agent_auto_iscsi_login_enabled", "false"), @@ -1151,7 +1162,7 @@ func TestCoreInstanceResource_basic(t *testing.T) { acctest.RepresentationCopyWithNewProperties(CoreInstanceCreateAndAttachVolumesOnLaunchRepresentation, map[string]interface{}{ "launch_volume_attachments": acctest.RepresentationGroup{RepType: acctest.Optional, - Group: CoreInstanceLaunchWithCreateVolumeAttachmentsRepresentation}, + Group: CoreInstanceLaunchWithCreateVolumeAttachmentsIscsiRepresentation}, })), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.display_name", "displayName"), @@ -1171,6 +1182,101 @@ func TestCoreInstanceResource_basic(t *testing.T) { Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies, }, + // verify Create with optionals - Create and attach volumes on instance launch (PV) + { + Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", + acctest.Optional, acctest.Create, acctest.GetUpdatedRepresentationCopy("launch_volume_attachments", + acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreInstanceLaunchWithCreateVolumeAttachmentsPvRepresentation}, + CoreInstanceCreateAndAttachVolumesOnLaunchRepresentation)), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "agent_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.are_all_plugins_disabled", "false"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.is_management_disabled", "false"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.is_monitoring_disabled", "false"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.plugins_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.plugins_config.0.desired_state", "ENABLED"), + resource.TestCheckResourceAttr(resourceName, "agent_config.0.plugins_config.0.name", "Compute Instance Monitoring"), + resource.TestCheckResourceAttr(resourceName, "availability_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "availability_config.0.is_live_migration_preferred", "false"), + resource.TestCheckResourceAttr(resourceName, "availability_config.0.recovery_action", "RESTORE_INSTANCE"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.assign_ipv6ip", "false"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.assign_public_ip", "true"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.display_name", "displayName"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.freeform_tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.hostname_label", "hostnamelabel"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.nsg_ids.#", "1"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.private_ip", "10.0.0.5"), + resource.TestCheckResourceAttr(resourceName, "create_vnic_details.0.skip_source_dest_check", "false"), + resource.TestCheckResourceAttrSet(resourceName, "create_vnic_details.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "dedicated_vm_host_id"), + resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"), + resource.TestCheckResourceAttr(resourceName, "extended_metadata.%", "2"), + resource.TestCheckResourceAttr(resourceName, "fault_domain", "FAULT-DOMAIN-3"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "hostname_label", "hostnamelabel"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "instance_options.#", "1"), + resource.TestCheckResourceAttr(resourceName, "instance_options.0.are_legacy_imds_endpoints_disabled", "false"), + resource.TestCheckResourceAttrSet(resourceName, "image"), + resource.TestCheckResourceAttr(resourceName, "ipxe_script", "ipxeScript"), + resource.TestCheckResourceAttr(resourceName, "is_pv_encryption_in_transit_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "launch_options.#", "1"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.boot_volume_type", "ISCSI"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.firmware", "UEFI_64"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.is_consistent_volume_naming_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.is_pv_encryption_in_transit_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.network_type", "PARAVIRTUALIZED"), + resource.TestCheckResourceAttr(resourceName, "launch_options.0.remote_data_volume_type", "PARAVIRTUALIZED"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.#", "1"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.type", "paravirtualized"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.display_name", "displayName"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.is_read_only", "true"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.is_shareable", "true"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.use_chap", "true"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.volume_creation_type", "ATTRIBUTES"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.display_name", "displayName"), + resource.TestCheckResourceAttrSet(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.size_in_gbs", "50"), + resource.TestCheckResourceAttr(resourceName, "launch_volume_attachments.0.launch_create_volume_details.0.vpus_per_gb", "50"), + resource.TestCheckResourceAttr(resourceName, "metadata.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "region"), + resource.TestCheckResourceAttr(resourceName, "shape", "VM.Standard2.1"), + resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "shape_config.0.ocpus", "1"), + resource.TestCheckResourceAttr(resourceName, "shape_config.0.vcpus", "2"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.boot_volume_vpus_per_gb", "10"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.source_id"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.source_type", "image"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.boot_volume_size_in_gbs", "60"), + resource.TestCheckResourceAttr(resourceName, "state", "STOPPED"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttr(resourceName, "preserve_data_volumes_created_at_launch", "false"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + + // delete before next Create + { + Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies, + }, + // verify Create with is_pv_encryption_in_transit_enabled = true { Config: config + compartmentIdVariableStr + managementEndpointStr + CoreInstanceResourceDependencies + InstanceWithPVEncryptionInTransitEnabled, @@ -1355,8 +1461,8 @@ func TestCoreInstanceResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "agent_config.0.plugins_config.0.desired_state", "ENABLED"), resource.TestCheckResourceAttr(resourceName, "agent_config.0.plugins_config.0.name", "Compute Instance Monitoring"), resource.TestCheckResourceAttr(resourceName, "availability_config.#", "1"), - resource.TestCheckResourceAttr(resourceName, "availability_config.0.is_live_migration_preferred", "true"), - resource.TestCheckResourceAttr(resourceName, "availability_config.0.recovery_action", "STOP_INSTANCE"), + resource.TestCheckResourceAttr(resourceName, "availability_config.0.is_live_migration_preferred", "false"), + resource.TestCheckResourceAttr(resourceName, "availability_config.0.recovery_action", "RESTORE_INSTANCE"), resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "create_vnic_details.#", "1"), @@ -1434,8 +1540,8 @@ func TestCoreInstanceResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "instances.0.agent_config.0.plugins_config.0.desired_state", "ENABLED"), resource.TestCheckResourceAttr(datasourceName, "instances.0.agent_config.0.plugins_config.0.name", "Compute Instance Monitoring"), resource.TestCheckResourceAttr(datasourceName, "instances.0.availability_config.#", "1"), - resource.TestCheckResourceAttr(datasourceName, "instances.0.availability_config.0.is_live_migration_preferred", "true"), - resource.TestCheckResourceAttr(datasourceName, "instances.0.availability_config.0.recovery_action", "STOP_INSTANCE"), + resource.TestCheckResourceAttr(datasourceName, "instances.0.availability_config.0.is_live_migration_preferred", "false"), + resource.TestCheckResourceAttr(datasourceName, "instances.0.availability_config.0.recovery_action", "RESTORE_INSTANCE"), resource.TestCheckResourceAttrSet(datasourceName, "instances.0.availability_domain"), resource.TestCheckResourceAttr(datasourceName, "instances.0.compartment_id", compartmentId), resource.TestCheckResourceAttrSet(datasourceName, "instances.0.dedicated_vm_host_id"), @@ -1497,8 +1603,8 @@ func TestCoreInstanceResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "agent_config.0.plugins_config.0.desired_state", "ENABLED"), resource.TestCheckResourceAttr(singularDatasourceName, "agent_config.0.plugins_config.0.name", "Compute Instance Monitoring"), resource.TestCheckResourceAttr(singularDatasourceName, "availability_config.#", "1"), - resource.TestCheckResourceAttr(singularDatasourceName, "availability_config.0.is_live_migration_preferred", "true"), - resource.TestCheckResourceAttr(singularDatasourceName, "availability_config.0.recovery_action", "STOP_INSTANCE"), + resource.TestCheckResourceAttr(singularDatasourceName, "availability_config.0.is_live_migration_preferred", "false"), + resource.TestCheckResourceAttr(singularDatasourceName, "availability_config.0.recovery_action", "RESTORE_INSTANCE"), resource.TestCheckResourceAttrSet(singularDatasourceName, "availability_domain"), resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"), diff --git a/internal/service/core/core_instance_resource.go b/internal/service/core/core_instance_resource.go index 6d279af61eb..2a2433a1f0d 100644 --- a/internal/service/core/core_instance_resource.go +++ b/internal/service/core/core_instance_resource.go @@ -439,6 +439,7 @@ func CoreInstanceResource() *schema.Resource { DiffSuppressFunc: tfresource.EqualIgnoreCaseSuppressDiff, ValidateFunc: validation.StringInSlice([]string{ "iscsi", + "paravirtualized", }, true), }, @@ -463,6 +464,11 @@ func CoreInstanceResource() *schema.Resource { Optional: true, Computed: true, }, + "is_pv_encryption_in_transit_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, "is_read_only": { Type: schema.TypeBool, Optional: true, @@ -2438,6 +2444,43 @@ func (s *CoreInstanceResourceCrud) mapToLaunchAttachVolumeDetails(fieldKeyFormat details.VolumeId = &tmp } baseObject = details + case strings.ToLower("paravirtualized"): + details := oci_core.LaunchAttachParavirtualizedVolumeDetails{} + if isPvEncryptionInTransitEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_pv_encryption_in_transit_enabled")); ok { + tmp := isPvEncryptionInTransitEnabled.(bool) + details.IsPvEncryptionInTransitEnabled = &tmp + } + if device, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "device")); ok { + tmp := device.(string) + details.Device = &tmp + } + if displayName, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "display_name")); ok { + tmp := displayName.(string) + details.DisplayName = &tmp + } + if isReadOnly, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_read_only")); ok { + tmp := isReadOnly.(bool) + details.IsReadOnly = &tmp + } + if isShareable, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_shareable")); ok { + tmp := isShareable.(bool) + details.IsShareable = &tmp + } + if launchCreateVolumeDetails, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "launch_create_volume_details")); ok { + if tmpList := launchCreateVolumeDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "launch_create_volume_details"), 0) + tmp, err := s.mapToLaunchCreateVolumeDetails(fieldKeyFormatNextLevel) + if err != nil { + return details, fmt.Errorf("unable to convert launch_create_volume_details, encountered error: %v", err) + } + details.LaunchCreateVolumeDetails = tmp + } + } + if volumeId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "volume_id")); ok { + tmp := volumeId.(string) + details.VolumeId = &tmp + } + baseObject = details default: return nil, fmt.Errorf("unknown type '%v' was specified", type_) } @@ -2459,6 +2502,12 @@ func LaunchAttachVolumeDetailsToMap(obj oci_core.LaunchAttachVolumeDetails) map[ if v.UseChap != nil { result["use_chap"] = bool(*v.UseChap) } + case oci_core.LaunchAttachParavirtualizedVolumeDetails: + result["type"] = "paravirtualized" + + if v.IsPvEncryptionInTransitEnabled != nil { + result["is_pv_encryption_in_transit_enabled"] = bool(*v.IsPvEncryptionInTransitEnabled) + } default: log.Printf("[WARN] Received 'type' of unknown type %v", obj) return nil diff --git a/website/docs/r/core_instance.html.markdown b/website/docs/r/core_instance.html.markdown index d35aaacb359..ac7b42b0b74 100644 --- a/website/docs/r/core_instance.html.markdown +++ b/website/docs/r/core_instance.html.markdown @@ -146,6 +146,7 @@ resource "oci_core_instance" "test_instance" { display_name = var.instance_launch_volume_attachments_display_name encryption_in_transit_type = var.instance_launch_volume_attachments_encryption_in_transit_type is_agent_auto_iscsi_login_enabled = var.instance_launch_volume_attachments_is_agent_auto_iscsi_login_enabled + is_pv_encryption_in_transit_enabled = var.instance_launch_volume_attachments_is_pv_encryption_in_transit_enabled is_read_only = var.instance_launch_volume_attachments_is_read_only is_shareable = var.instance_launch_volume_attachments_is_shareable launch_create_volume_details { @@ -378,8 +379,9 @@ The following arguments are supported: * `device` - (Optional) The device name. To retrieve a list of devices for a given instance, see [ListInstanceDevices](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Device/ListInstanceDevices). * `display_name` - (Optional) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. - * `encryption_in_transit_type` - (Optional) Refer the top-level definition of encryptionInTransitType. The default value is NONE. - * `is_agent_auto_iscsi_login_enabled` - (Optional) Whether to enable Oracle Cloud Agent to perform the iSCSI login and logout commands after the volume attach or detach operations for non multipath-enabled iSCSI attachments. + * `encryption_in_transit_type` - (Applicable when type=iscsi) Refer the top-level definition of encryptionInTransitType. The default value is NONE. + * `is_agent_auto_iscsi_login_enabled` - (Applicable when type=iscsi) Whether to enable Oracle Cloud Agent to perform the iSCSI login and logout commands after the volume attach or detach operations for non multipath-enabled iSCSI attachments. + * `is_pv_encryption_in_transit_enabled` - (Applicable when type=paravirtualized) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. The default value is false. * `is_read_only` - (Optional) Whether the attachment was created in read-only mode. * `is_shareable` - (Optional) Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified. * `launch_create_volume_details` - (Optional) Define a volume that will be created and attached or attached to an instance on creation. @@ -396,7 +398,7 @@ The following arguments are supported: * `20`: Represents Higher Performance option. * `30`-`120`: Represents the Ultra High Performance option. * `type` - (Required) The type of volume. Currently, the only supported value is "iscsi". - * `use_chap` - (Optional) Whether to use CHAP authentication for the volume attachment. Defaults to false. + * `use_chap` - (Applicable when type=iscsi) Whether to use CHAP authentication for the volume attachment. Defaults to false. * `volume_id` - (Optional) The OCID of the volume. If CreateVolumeDetails is specified, this field must be omitted from the request. * `metadata` - (Optional) (Updatable) Custom metadata key/value pairs that you provide, such as the SSH public key required to connect to the instance. @@ -497,7 +499,7 @@ The following arguments are supported: * `operating_system` - (Applicable when source_type=image) The image's operating system. Example: `Oracle Linux` * `operating_system_version` - (Applicable when source_type=image) The image's operating system version. Example: `7.2` * `kms_key_id` - (Applicable when source_type=image) (Updatable) The OCID of the Vault service key to assign as the master encryption key for the boot volume. - * `source_id` - (Required) (Updatable) The OCID of the boot volume used to boot the instance. + * `source_id` - (Required) (Updatable) The OCID of the boot volume used to boot the instance. Updates are supported only for linux Images. The user will need to manually destroy and re-create the resource for other image types. * `source_type` - (Required) (Updatable) The source type for the instance. Use `image` when specifying the image OCID. Use `bootVolume` when specifying the boot volume OCID. * `is_preserve_boot_volume_enabled` - (Optional) (Updatable) Whether to preserve the boot volume that was previously attached to the instance after a successful replacement of that boot volume. * `subnet_id` - (Optional) Deprecated. Instead use `subnetId` in [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/). At least one of them is required; if you provide both, the values must match. From 5de55eb6136e3efdea9ee41bc2d2da2ff5f0f2e8 Mon Sep 17 00:00:00 2001 From: Terraform Team Automation Date: Thu, 29 Aug 2024 17:44:01 +0000 Subject: [PATCH 05/31] Added - 9/24- Support for ZPR v1 --- examples/networking/vcn/vcn.tf | 3 ++ internal/integrationtest/core_vcn_test.go | 50 ++++++++++------- .../core_vnic_attachment_resource_test.go | 2 + internal/service/core/core_vcn_data_source.go | 4 ++ internal/service/core/core_vcn_resource.go | 18 +++++++ .../service/core/core_vcns_data_source.go | 4 ++ .../core/core_vnic_attachment_resource.go | 14 +++-- .../service/core/core_vnic_data_source.go | 9 ++++ internal/tfresource/crud_helpers.go | 54 +++++++++++++++++++ website/docs/d/core_vcn.html.markdown | 1 + website/docs/d/core_vcns.html.markdown | 1 + website/docs/d/core_vnic.html.markdown | 1 + .../core_instance_configuration.html.markdown | 23 ++++++-- website/docs/r/core_vcn.html.markdown | 4 +- .../docs/r/core_vnic_attachment.html.markdown | 4 +- 15 files changed, 164 insertions(+), 28 deletions(-) diff --git a/examples/networking/vcn/vcn.tf b/examples/networking/vcn/vcn.tf index 6596c2bee24..335709bcdb1 100644 --- a/examples/networking/vcn/vcn.tf +++ b/examples/networking/vcn/vcn.tf @@ -26,6 +26,8 @@ provider "oci" { fingerprint = var.fingerprint private_key_path = var.private_key_path region = var.region + auth = "SecurityToken" + config_file_profile = "terraform-federation-test" ignore_defined_tags = ["testexamples-tag-namespace.tf-example-tag"] } @@ -34,6 +36,7 @@ resource "oci_core_vcn" "vcn" { dns_label = "vcn" compartment_id = var.compartment_ocid display_name = "vcn" + security_attributes = {"sample-namespace.value": "examplevalue", "sample-namespace.mode": "examplemode"} } output "vcn_id" { diff --git a/internal/integrationtest/core_vcn_test.go b/internal/integrationtest/core_vcn_test.go index 0f28d1b62f4..76a1e036797 100644 --- a/internal/integrationtest/core_vcn_test.go +++ b/internal/integrationtest/core_vcn_test.go @@ -45,13 +45,14 @@ var ( } CoreVcnRepresentation = map[string]interface{}{ - "cidr_block": acctest.Representation{RepType: acctest.Required, Create: `10.0.0.0/16`}, - "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "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")}`}, - "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`}, - "dns_label": acctest.Representation{RepType: acctest.Optional, Create: `dnslabel`}, - "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, - "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsChangesRep}, + "cidr_block": acctest.Representation{RepType: acctest.Required, Create: `10.0.0.0/16`}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "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")}`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`}, + "dns_label": acctest.Representation{RepType: acctest.Optional, Create: `dnslabel`}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreDefinedTagsChangesRep}, + "security_attributes": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value": "somevalue", "vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode": "enforce"}, Update: map[string]string{"vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value": "updatedValue", "vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode": "enforce"}}, } CoreVcnRequiredOnlyResourceDependencies = `` @@ -106,8 +107,8 @@ func TestCoreVcnResource_basic(t *testing.T) { Config: config + compartmentIdVariableStr + VcnResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Create, acctest.RepresentationCopyWithNewProperties(acctest.RepresentationCopyWithRemovedProperties(CoreVcnRepresentation, []string{"cidr_blocks"}), map[string]interface{}{ - "is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}, - })), + "is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}, + "is_oracle_gua_allocation_enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}})), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "cidr_block", "10.0.0.0/16"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), @@ -115,6 +116,9 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "dns_label", "dnslabel"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value", "somevalue"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode", "enforce"), + resource.TestCheckResourceAttr(resourceName, "is_oracle_gua_allocation_enabled", "true"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -132,7 +136,7 @@ func TestCoreVcnResource_basic(t *testing.T) { { Config: config + compartmentIdVariableStr + VcnResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{ - "ipv6private_cidr_blocks": acctest.Representation{RepType: acctest.Required, Create: []string{`2000:1000::/52`}}, + "ipv6private_cidr_blocks": acctest.Representation{RepType: acctest.Required, Update: []string{`2000:1000::/52`}}, })), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "cidr_block", "10.0.0.0/16"), @@ -141,6 +145,10 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "dns_label", "dnslabel"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value", "updatedValue"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode", "enforce"), + resource.TestCheckResourceAttr(resourceName, "is_oracle_gua_allocation_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "ipv6private_cidr_blocks.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -170,6 +178,8 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "dns_label", "dnslabel"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(resourceName, "is_oracle_gua_allocation_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.%", "2"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -186,9 +196,7 @@ func TestCoreVcnResource_basic(t *testing.T) { // verify updates to updatable parameters { Config: config + compartmentIdVariableStr + VcnResourceDependencies + - acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{ - "is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Update: `true`}, - })), + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, CoreVcnRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "cidr_block", "10.0.0.0/16"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), @@ -196,6 +204,10 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "dns_label", "dnslabel"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value", "updatedValue"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode", "enforce"), + resource.TestCheckResourceAttr(resourceName, "is_oracle_gua_allocation_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "is_ipv6enabled", "true"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -213,9 +225,7 @@ func TestCoreVcnResource_basic(t *testing.T) { Config: config + acctest.GenerateDataSourceFromRepresentationMap("oci_core_vcns", "test_vcns", acctest.Optional, acctest.Update, CoreCoreVcnDataSourceRepresentation) + compartmentIdVariableStr + VcnResourceDependencies + - acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{ - "is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Update: `true`}, - })), + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, CoreVcnRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(datasourceName, "display_name", "displayName2"), @@ -231,6 +241,7 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "virtual_networks.0.dns_label", "dnslabel"), resource.TestCheckResourceAttr(datasourceName, "virtual_networks.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(datasourceName, "virtual_networks.0.ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "virtual_networks.0.security_attributes.%", "2"), resource.TestCheckResourceAttrSet(datasourceName, "virtual_networks.0.id"), resource.TestCheckResourceAttrSet(datasourceName, "virtual_networks.0.state"), resource.TestCheckResourceAttrSet(datasourceName, "virtual_networks.0.time_created"), @@ -242,9 +253,7 @@ func TestCoreVcnResource_basic(t *testing.T) { Config: config + acctest.GenerateDataSourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreCoreVcnSingularDataSourceRepresentation) + compartmentIdVariableStr + VcnResourceDependencies + - acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{ - "is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}, - })), + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Update, CoreVcnRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(singularDatasourceName, "vcn_id"), @@ -257,6 +266,8 @@ func TestCoreVcnResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "dns_label", "dnslabel"), resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttr(singularDatasourceName, "ipv6cidr_blocks.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.value", "updatedValue"), + resource.TestCheckResourceAttr(resourceName, "security_attributes.vcncp-canary-test-security-attribute-namespace-56.vcncp-canary-test-security-attribute-57.mode", "enforce"), resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), @@ -270,6 +281,7 @@ func TestCoreVcnResource_basic(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{ "is_ipv6enabled", + "is_oracle_gua_allocation_enabled", }, ResourceName: resourceName, }, diff --git a/internal/integrationtest/core_vnic_attachment_resource_test.go b/internal/integrationtest/core_vnic_attachment_resource_test.go index 580e7b20a8e..3094b31d006 100644 --- a/internal/integrationtest/core_vnic_attachment_resource_test.go +++ b/internal/integrationtest/core_vnic_attachment_resource_test.go @@ -130,6 +130,7 @@ func (s *ResourceCoreVnicAttachmentTestSuite) TestAccResourceCoreVnicAttachment_ defined_tags = "${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}" freeform_tags = { "Department" = "Finance" } nsg_ids = ["${oci_core_network_security_group.test_network_security_group1.id}", "${oci_core_network_security_group.test_network_security_group2.id}"] + security_attributes = {"security-attribute-test-1.security-attribute.value" = "somevalue", "security-attribute-test-1.security-attribute.mode" = "enforce"} } } data "oci_core_vnic" "v" { @@ -153,6 +154,7 @@ func (s *ResourceCoreVnicAttachmentTestSuite) TestAccResourceCoreVnicAttachment_ resource.TestCheckResourceAttr(s.ResourceName, "create_vnic_details.0.display_name", "-tf-vnic-2"), resource.TestCheckResourceAttr(s.ResourceName, "create_vnic_details.0.nsg_ids.#", "2"), resource.TestCheckResourceAttrSet(s.VnicResourceName, "private_ip_address"), + resource.TestCheckResourceAttr(s.VnicResourceName, "security_attributes.%", "2"), // @SDK 1/2018: Since we don't assign a public IP to this vnic, we will get a response from server // without a public_ip_address. Old SDK would have set it to empty, but new SDK will set it to nil. // Commenting out until we have a better way of handling this. diff --git a/internal/service/core/core_vcn_data_source.go b/internal/service/core/core_vcn_data_source.go index b7c431471de..46892323701 100644 --- a/internal/service/core/core_vcn_data_source.go +++ b/internal/service/core/core_vcn_data_source.go @@ -110,6 +110,10 @@ func (s *CoreVcnDataSourceCrud) SetData() error { s.D.Set("ipv6private_cidr_blocks", s.Res.Ipv6PrivateCidrBlocks) + if s.Res.SecurityAttributes != nil { + s.D.Set("security_attributes", tfresource.SecurityAttributesToMap(s.Res.SecurityAttributes)) + } + s.D.Set("state", s.Res.LifecycleState) if s.Res.TimeCreated != nil { diff --git a/internal/service/core/core_vcn_resource.go b/internal/service/core/core_vcn_resource.go index a0a266418f2..2a86bea646c 100644 --- a/internal/service/core/core_vcn_resource.go +++ b/internal/service/core/core_vcn_resource.go @@ -117,6 +117,12 @@ func CoreVcnResource() *schema.Resource { Computed: true, // ForceNew: true, }, + "security_attributes": { + Type: schema.TypeMap, + Optional: true, + Computed: true, + Elem: schema.TypeString, + }, // Computed "byoipv6cidr_blocks": { @@ -317,6 +323,11 @@ func (s *CoreVcnResourceCrud) Create() error { request.IsOracleGuaAllocationEnabled = &tmp } + if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok { + convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{})) + request.SecurityAttributes = convertedAttributes + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "core") response, err := s.Client.CreateVcn(context.Background(), request) @@ -439,6 +450,11 @@ func (s *CoreVcnResourceCrud) Update() error { request.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) } + if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok { + convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{})) + request.SecurityAttributes = convertedAttributes + } + tmp := s.D.Id() request.VcnId = &tmp @@ -579,6 +595,8 @@ func (s *CoreVcnResourceCrud) SetData() error { s.D.Set("ipv6private_cidr_blocks", s.Res.Ipv6PrivateCidrBlocks) + s.D.Set("security_attributes", tfresource.SecurityAttributesToMap(s.Res.SecurityAttributes)) + if s.Res.Ipv6CidrBlocks != nil && len(s.Res.Ipv6CidrBlocks) > 0 { s.D.Set("is_ipv6enabled", true) } else { diff --git a/internal/service/core/core_vcns_data_source.go b/internal/service/core/core_vcns_data_source.go index f3a41f90eaf..fb8f1ff3632 100644 --- a/internal/service/core/core_vcns_data_source.go +++ b/internal/service/core/core_vcns_data_source.go @@ -154,6 +154,10 @@ func (s *CoreVcnsDataSourceCrud) SetData() error { vcn["ipv6private_cidr_blocks"] = r.Ipv6PrivateCidrBlocks + if r.SecurityAttributes != nil { + vcn["security_attributes"] = tfresource.SecurityAttributesToMap(r.SecurityAttributes) + } + vcn["state"] = r.LifecycleState if r.TimeCreated != nil { diff --git a/internal/service/core/core_vnic_attachment_resource.go b/internal/service/core/core_vnic_attachment_resource.go index deb064bc059..0746c33bcb5 100644 --- a/internal/service/core/core_vnic_attachment_resource.go +++ b/internal/service/core/core_vnic_attachment_resource.go @@ -542,8 +542,9 @@ func (s *CoreVnicAttachmentResourceCrud) mapToCreateVnicDetails(fieldKeyFormat s result.PrivateIp = &tmp } - if securityAttributes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_attributes")); ok { - result.SecurityAttributes = securityAttributes.(map[string]map[string]interface{}) + if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok { + convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{})) + result.SecurityAttributes = convertedAttributes } if skipSourceDestCheck, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "skip_source_dest_check")); ok { @@ -607,6 +608,11 @@ func (s *CoreVnicAttachmentResourceCrud) mapToUpdateVnicDetails(fieldKeyFormat s result.SkipSourceDestCheck = &tmp } + if securityAttributes, ok := s.D.GetOkExists("security_attributes"); ok { + convertedAttributes := tfresource.MapToSecurityAttributes(securityAttributes.(map[string]interface{})) + result.SecurityAttributes = convertedAttributes + } + return result, nil } @@ -667,7 +673,9 @@ func VnicDetailsToMap(obj *oci_core.Vnic, createVnicDetails map[string]interface result["private_ip"] = string(*obj.PrivateIp) } - result["security_attributes"] = obj.SecurityAttributes + if obj.SecurityAttributes != nil { + result["security_attributes"] = tfresource.SecurityAttributesToMap(obj.SecurityAttributes) + } if obj.SkipSourceDestCheck != nil { result["skip_source_dest_check"] = bool(*obj.SkipSourceDestCheck) diff --git a/internal/service/core/core_vnic_data_source.go b/internal/service/core/core_vnic_data_source.go index 0d088a1f2eb..06bcc302368 100644 --- a/internal/service/core/core_vnic_data_source.go +++ b/internal/service/core/core_vnic_data_source.go @@ -78,6 +78,11 @@ func CoreVnicDataSource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "security_attributes": { + Type: schema.TypeMap, + Computed: true, + Elem: schema.TypeString, + }, "skip_source_dest_check": { Type: schema.TypeBool, Computed: true, @@ -188,6 +193,10 @@ func (s *CoreVnicDataSourceCrud) SetData() error { s.D.Set("public_ip_address", *s.Res.PublicIp) } + if s.Res.SecurityAttributes != nil { + s.D.Set("security_attributes", tfresource.SecurityAttributesToMap(s.Res.SecurityAttributes)) + } + if s.Res.SkipSourceDestCheck != nil { s.D.Set("skip_source_dest_check", *s.Res.SkipSourceDestCheck) } diff --git a/internal/tfresource/crud_helpers.go b/internal/tfresource/crud_helpers.go index 6a16edcbc77..bf5eab87d2b 100644 --- a/internal/tfresource/crud_helpers.go +++ b/internal/tfresource/crud_helpers.go @@ -1194,6 +1194,60 @@ func ObjectMapToStringMap(rm map[string]interface{}) map[string]string { return result } +// unflatten +func MapToSecurityAttributes(rawMap map[string]interface{}) map[string]map[string]interface{} { + result := make(map[string]map[string]interface{}) + for fullKey, value := range rawMap { + keys := strings.Split(fullKey, ".") + if len(keys) < 2 { + continue + } + outerKey := keys[0] + innerKey := strings.Join(keys[1:], ".") + if result[outerKey] == nil { + result[outerKey] = make(map[string]interface{}) + } + unflattenHelper(result[outerKey], innerKey, value) + } + + return result +} + +func unflattenHelper(currentMap map[string]interface{}, key string, value interface{}) { + keys := strings.Split(key, ".") + for i, k := range keys { + if i == len(keys)-1 { + currentMap[k] = value + } else { + if _, ok := currentMap[k]; !ok { + currentMap[k] = make(map[string]interface{}) + } + currentMap = currentMap[k].(map[string]interface{}) + } + } +} + +// flatten +func SecurityAttributesToMap(rm map[string]map[string]interface{}) map[string]interface{} { + result := make(map[string]interface{}) + for outerKey, innerMap := range rm { + flattenHelper(result, outerKey, innerMap) + } + + return result +} + +func flattenHelper(flat map[string]interface{}, prefix string, nested map[string]interface{}) { + for key, value := range nested { + fullKey := prefix + "." + key + if reflect.TypeOf(value).Kind() == reflect.Map { + flattenHelper(flat, fullKey, value.(map[string]interface{})) + } else { + flat[fullKey] = value + } + } +} + func StringMapToObjectMap(sm map[string]string) map[string]interface{} { var result = make(map[string]interface{}) if len(sm) > 0 { diff --git a/website/docs/d/core_vcn.html.markdown b/website/docs/d/core_vcn.html.markdown index 4b77e83791e..98b2987e063 100644 --- a/website/docs/d/core_vcn.html.markdown +++ b/website/docs/d/core_vcn.html.markdown @@ -52,6 +52,7 @@ The following attributes are exported: * `id` - The VCN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)). * `ipv6cidr_blocks` - For an IPv6-enabled VCN, this is the list of IPv6 prefixes for the VCN's IP address space. The prefixes are provided by Oracle and the sizes are always /56. * `ipv6private_cidr_blocks` - For an IPv6-enabled VCN, this is the list of Private IPv6 prefixes for the VCN's IP address space. +* `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"}` * `state` - The VCN's current state. * `time_created` - The date and time the VCN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z` * `vcn_domain_name` - The VCN's domain name, which consists of the VCN's DNS label, and the `oraclevcn.com` domain. diff --git a/website/docs/d/core_vcns.html.markdown b/website/docs/d/core_vcns.html.markdown index 30a29d19a6d..d009c20289a 100644 --- a/website/docs/d/core_vcns.html.markdown +++ b/website/docs/d/core_vcns.html.markdown @@ -69,6 +69,7 @@ The following attributes are exported: * `id` - The VCN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)). * `ipv6cidr_blocks` - For an IPv6-enabled VCN, this is the list of IPv6 prefixes for the VCN's IP address space. The prefixes are provided by Oracle and the sizes are always /56. * `ipv6private_cidr_blocks` - For an IPv6-enabled VCN, this is the list of Private IPv6 prefixes for the VCN's IP address space. +* `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"}` * `state` - The VCN's current state. * `time_created` - The date and time the VCN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z` * `vcn_domain_name` - The VCN's domain name, which consists of the VCN's DNS label, and the `oraclevcn.com` domain. diff --git a/website/docs/d/core_vnic.html.markdown b/website/docs/d/core_vnic.html.markdown index 4f526e2a458..4c8510096b0 100644 --- a/website/docs/d/core_vnic.html.markdown +++ b/website/docs/d/core_vnic.html.markdown @@ -61,6 +61,7 @@ The following attributes are exported: For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/). * `private_ip_address` - The private IP address of the primary `privateIp` object on the VNIC. The address is within the CIDR of the VNIC's subnet. Example: `10.0.3.3` * `public_ip_address` - The public IP address of the VNIC, if one is assigned. +* `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"}` * `skip_source_dest_check` - Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you would skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip). If the VNIC belongs to a VLAN as part of the Oracle Cloud VMware Solution (instead of belonging to a subnet), the `skipSourceDestCheck` attribute is `true`. This is because the source/destination check is always disabled for VNICs in a VLAN. diff --git a/website/docs/r/core_instance_configuration.html.markdown b/website/docs/r/core_instance_configuration.html.markdown index 9cd6dac5676..6710033dcd7 100644 --- a/website/docs/r/core_instance_configuration.html.markdown +++ b/website/docs/r/core_instance_configuration.html.markdown @@ -466,7 +466,11 @@ The following arguments are supported: * `is_pv_encryption_in_transit_enabled` - (Applicable when type=paravirtualized) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. The default value is false. * `is_read_only` - (Applicable when instance_type=compute) Whether the attachment should be created in read-only mode. * `is_shareable` - (Applicable when instance_type=compute) Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified. +<<<<<<< HEAD * `type` - (Required) The type of volume. The only supported values are "iscsi" and "paravirtualized". +======= + * `type` - (Required) The type of volume. The only supported values are "iscsi" and "paravirtualized" +>>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `use_chap` - (Applicable when type=iscsi) Whether to use CHAP authentication for the volume attachment. Defaults to false. * `create_details` - (Applicable when instance_type=compute) Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/) * `autotune_policies` - (Applicable when instance_type=compute) The list of autotune policies enabled for this volume. @@ -500,9 +504,9 @@ The following arguments are supported: * `volume_id` - (Applicable when instance_type=compute) The OCID of the volume. * `instance_type` - (Required) The type of instance details. Supported instanceType is compute * `launch_details` - (Applicable when instance_type=compute) Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. - See [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/LaunchInstanceDetails) for more information. - * `agent_config` - (Applicable when instance_type=compute) Configuration options for the Oracle Cloud Agent software running on the instance. - * `are_all_plugins_disabled` - (Applicable when instance_type=compute) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins. + See [LaunchInstanceDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/LaunchInstanceDetails) for more information. + * `agent_config` - (Applicable when instance_type=compute) Configuration options for the Oracle Cloud Agent software running on the instance. + * `are_all_plugins_disabled` - (Applicable when instance_type=compute) Whether Oracle Cloud Agent can run all the available plugins. This includes the management and monitoring plugins. To get a list of available plugins, use the [ListInstanceagentAvailablePlugins](https://docs.cloud.oracle.com/iaas/api/#/en/instanceagent/20180530/Plugin/ListInstanceagentAvailablePlugins) operation in the Oracle Cloud Agent API. For more information about the available plugins, see [Managing Plugins with Oracle Cloud Agent](https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/manage-plugins.htm). * `is_management_disabled` - (Applicable when instance_type=compute) Whether Oracle Cloud Agent can run all the available management plugins. Default value is false (management plugins are enabled). @@ -942,7 +946,10 @@ The following arguments are supported: * `hostname_label` - (Applicable when instance_type=instance_options) The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `nsg_ids` - (Applicable when instance_type=instance_options) A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/). * `private_ip` - (Applicable when instance_type=instance_options) A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. +<<<<<<< HEAD * `security_attributes` - (Applicable when instance_type=instance_options) 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"}}}` +======= +>>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `skip_source_dest_check` - (Applicable when instance_type=instance_options) Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `subnet_id` - (Applicable when instance_type=instance_options) The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `display_name` - (Applicable when instance_type=instance_options) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. @@ -957,12 +964,19 @@ The following arguments are supported: * `hostname_label` - (Applicable when instance_type=compute) The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `nsg_ids` - (Applicable when instance_type=compute) A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/). * `private_ip` - (Applicable when instance_type=compute) A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. +<<<<<<< HEAD * `security_attributes` - (Applicable when instance_type=compute) 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"}}}` +======= +>>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `skip_source_dest_check` - (Applicable when instance_type=compute) Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `subnet_id` - (Applicable when instance_type=compute) The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `display_name` - (Applicable when instance_type=compute) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `nic_index` - (Applicable when instance_type=compute) Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm). +<<<<<<< HEAD * `instance_id` - (Required when source=INSTANCE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance to use to create the instance configuration. +======= +* `instance_id` - (Required when source=INSTANCE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance to use to create the instance configuration. +>>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `source` - (Optional) The source of the instance configuration. An instance configuration defines the settings to use when creating Compute instances, including details such as the base image, shape, and metadata. You can also specify the associated resources for the instance, such as block volume attachments and network configuration. When you create an instance configuration using an existing instance as a template, the instance configuration does not include any information from the source instance's boot volume, such as installed applications, binaries, and files on the instance. It also does not include the contents of any block volumes that are attached to the instance. @@ -1415,7 +1429,10 @@ The following attributes are exported: * `preferred_maintenance_action` - The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported. * `LIVE_MIGRATE` - Run maintenance using a live migration. * `REBOOT` - Run maintenance using a reboot. +<<<<<<< HEAD * `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"}}}` +======= +>>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `shape` - The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources 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). diff --git a/website/docs/r/core_vcn.html.markdown b/website/docs/r/core_vcn.html.markdown index 6c7a4319b81..9055dc1989b 100644 --- a/website/docs/r/core_vcn.html.markdown +++ b/website/docs/r/core_vcn.html.markdown @@ -73,6 +73,7 @@ resource "oci_core_vcn" "test_vcn" { ipv6private_cidr_blocks = var.vcn_ipv6private_cidr_blocks is_ipv6enabled = var.vcn_is_ipv6enabled is_oracle_gua_allocation_enabled = var.vcn_is_oracle_gua_allocation_enabled + security_attributes = var.vcn_security_attributes } ``` @@ -107,7 +108,7 @@ The following arguments are supported: **Important:** Do *not* specify a value for `ipv6cidr_block`. Use this parameter instead. * `is_ipv6enabled` - (Optional) Whether IPv6 is enabled for the VCN. Default is `false`. If enabled, Oracle will assign the VCN a IPv6 /56 CIDR block. You may skip having Oracle allocate the VCN a IPv6 /56 CIDR block by setting isOracleGuaAllocationEnabled to `false`. For important details about IPv6 addressing in a VCN, see [IPv6 Addresses](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/ipv6.htm). Example: `true` * `is_oracle_gua_allocation_enabled` - (Optional) Specifies whether to skip Oracle allocated IPv6 GUA. By default, Oracle will allocate one GUA of /56 size for an IPv6 enabled VCN. - +* `security_attributes` - (Optional) (Updatable) 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"}` ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values @@ -136,6 +137,7 @@ The following attributes are exported: * `id` - The VCN's Oracle ID ([OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm)). * `ipv6cidr_blocks` - For an IPv6-enabled VCN, this is the list of IPv6 prefixes for the VCN's IP address space. The prefixes are provided by Oracle and the sizes are always /56. * `ipv6private_cidr_blocks` - For an IPv6-enabled VCN, this is the list of Private IPv6 prefixes for the VCN's IP address space. +* `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"}` * `state` - The VCN's current state. * `time_created` - The date and time the VCN was created, in the format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). Example: `2016-08-25T21:10:29.600Z` * `vcn_domain_name` - The VCN's domain name, which consists of the VCN's DNS label, and the `oraclevcn.com` domain. diff --git a/website/docs/r/core_vnic_attachment.html.markdown b/website/docs/r/core_vnic_attachment.html.markdown index 3759ccf4e3d..85207a27f2a 100644 --- a/website/docs/r/core_vnic_attachment.html.markdown +++ b/website/docs/r/core_vnic_attachment.html.markdown @@ -85,8 +85,8 @@ The following arguments are supported: If you specify a `vlanId`, the `privateIp` cannot be specified. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan). - Example: `10.0.3.3` - * `security_attributes` - (Optional) 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"}}}` + Example: `10.0.3.3` + * `security_attributes` - (Optional) 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"}` * `skip_source_dest_check` - (Optional) (Updatable) Whether the source/destination check is disabled on the VNIC. Defaults to `false`, which means the check is performed. For information about why you would skip the source/destination check, see [Using a Private IP as a Route Target](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingroutetables.htm#privateip). If you specify a `vlanId`, the `skipSourceDestCheck` cannot be specified because the source/destination check is always disabled for VNICs in a VLAN. See [Vlan](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/Vlan). From 1a63c7b7d140dcb1d056d760851ff39bc8c5b61c Mon Sep 17 00:00:00 2001 From: Nishant Kulkarni Date: Mon, 7 Oct 2024 16:27:22 -0700 Subject: [PATCH 06/31] Resolving conflicts --- .../core_instance_configuration.html.markdown | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/website/docs/r/core_instance_configuration.html.markdown b/website/docs/r/core_instance_configuration.html.markdown index 6710033dcd7..f2bf8ab0c58 100644 --- a/website/docs/r/core_instance_configuration.html.markdown +++ b/website/docs/r/core_instance_configuration.html.markdown @@ -465,12 +465,8 @@ The following arguments are supported: * `display_name` - (Applicable when instance_type=compute) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `is_pv_encryption_in_transit_enabled` - (Applicable when type=paravirtualized) Whether to enable in-transit encryption for the data volume's paravirtualized attachment. The default value is false. * `is_read_only` - (Applicable when instance_type=compute) Whether the attachment should be created in read-only mode. - * `is_shareable` - (Applicable when instance_type=compute) Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified. -<<<<<<< HEAD - * `type` - (Required) The type of volume. The only supported values are "iscsi" and "paravirtualized". -======= + * `is_shareable` - (Applicable when instance_type=compute) Whether the attachment should be created in shareable mode. If an attachment is created in shareable mode, then other instances can attach the same volume, provided that they also create their attachments in shareable mode. Only certain volume types can be attached in shareable mode. Defaults to false if not specified. * `type` - (Required) The type of volume. The only supported values are "iscsi" and "paravirtualized" ->>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `use_chap` - (Applicable when type=iscsi) Whether to use CHAP authentication for the volume attachment. Defaults to false. * `create_details` - (Applicable when instance_type=compute) Creates a new block volume. Please see [CreateVolumeDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVolumeDetails/) * `autotune_policies` - (Applicable when instance_type=compute) The list of autotune policies enabled for this volume. @@ -946,10 +942,7 @@ The following arguments are supported: * `hostname_label` - (Applicable when instance_type=instance_options) The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `nsg_ids` - (Applicable when instance_type=instance_options) A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/). * `private_ip` - (Applicable when instance_type=instance_options) A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. -<<<<<<< HEAD - * `security_attributes` - (Applicable when instance_type=instance_options) 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"}}}` -======= ->>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) + * `security_attributes` - (Applicable when instance_type=instance_options) 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"}}}` * `skip_source_dest_check` - (Applicable when instance_type=instance_options) Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `subnet_id` - (Applicable when instance_type=instance_options) The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `display_name` - (Applicable when instance_type=instance_options) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. @@ -964,19 +957,12 @@ The following arguments are supported: * `hostname_label` - (Applicable when instance_type=compute) The hostname for the VNIC's primary private IP. See the `hostnameLabel` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `nsg_ids` - (Applicable when instance_type=compute) A list of the OCIDs of the network security groups (NSGs) to add the VNIC to. For more information about NSGs, see [NetworkSecurityGroup](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/NetworkSecurityGroup/). * `private_ip` - (Applicable when instance_type=compute) A private IP address of your choice to assign to the VNIC. See the `privateIp` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. -<<<<<<< HEAD - * `security_attributes` - (Applicable when instance_type=compute) 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"}}}` -======= ->>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) + * `security_attributes` - (Applicable when instance_type=compute) 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"}}}` * `skip_source_dest_check` - (Applicable when instance_type=compute) Whether the source/destination check is disabled on the VNIC. See the `skipSourceDestCheck` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `subnet_id` - (Applicable when instance_type=compute) The OCID of the subnet to create the VNIC in. See the `subnetId` attribute of [CreateVnicDetails](https://docs.cloud.oracle.com/iaas/api/#/en/iaas/latest/CreateVnicDetails/) for more information. * `display_name` - (Applicable when instance_type=compute) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. - * `nic_index` - (Applicable when instance_type=compute) Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm). -<<<<<<< HEAD -* `instance_id` - (Required when source=INSTANCE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance to use to create the instance configuration. -======= + * `nic_index` - (Applicable when instance_type=compute) Which physical network interface card (NIC) the VNIC will use. Defaults to 0. Certain bare metal instance shapes have two active physical NICs (0 and 1). If you add a secondary VNIC to one of these instances, you can specify which NIC the VNIC will use. For more information, see [Virtual Network Interface Cards (VNICs)](https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingVNICs.htm). * `instance_id` - (Required when source=INSTANCE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the instance to use to create the instance configuration. ->>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) * `source` - (Optional) The source of the instance configuration. An instance configuration defines the settings to use when creating Compute instances, including details such as the base image, shape, and metadata. You can also specify the associated resources for the instance, such as block volume attachments and network configuration. When you create an instance configuration using an existing instance as a template, the instance configuration does not include any information from the source instance's boot volume, such as installed applications, binaries, and files on the instance. It also does not include the contents of any block volumes that are attached to the instance. @@ -1428,11 +1414,8 @@ The following attributes are exported: * `type` - The type of action to run when the instance is interrupted for eviction. * `preferred_maintenance_action` - The preferred maintenance action for an instance. The default is LIVE_MIGRATE, if live migration is supported. * `LIVE_MIGRATE` - Run maintenance using a live migration. - * `REBOOT` - Run maintenance using a reboot. -<<<<<<< HEAD - * `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"}}}` -======= ->>>>>>> d27cc8d600f (Added - Support for BDS - Resource Principal Support in BDS) + * `REBOOT` - Run maintenance using a reboot. + * `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"}}}` * `shape` - The shape of an instance. The shape determines the number of CPUs, amount of memory, and other resources 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). From b34bb0edc52ae98ff547d8da1ae42432c45f7f66 Mon Sep 17 00:00:00 2001 From: Shravan Thatikonda Date: Mon, 10 Jun 2024 18:58:32 +0530 Subject: [PATCH 07/31] Added - Support for Customer Facing Scalable agent upgrade | ExaCC and ExaCS --- .../database/db_systems/db_exacs/resources.tf | 8 + .../exadata_cc/autonomous_virtual_machine.tf | 2 +- .../exadata_cc/autonomous_vm_cluster.tf | 2 +- examples/database/exadata_cc/vm_cluster.tf | 107 ++++++++- ...autonomous_database_software_image_test.go | 36 +-- .../database_autonomous_vm_cluster_test.go | 6 +- .../database_cloud_vm_cluster_test.go | 100 +++++++- .../database_exadata_infrastructure_test.go | 4 +- .../database_vm_cluster_test.go | 113 +++++++-- ...ous_database_software_image_data_source.go | 2 +- ...nomous_database_software_image_resource.go | 2 +- ...us_database_software_images_data_source.go | 2 +- ...se_cloud_autonomous_vm_cluster_resource.go | 1 - .../database_cloud_vm_cluster_data_source.go | 6 + .../database_cloud_vm_cluster_resource.go | 226 ++++++++++++++++++ .../database_cloud_vm_clusters_data_source.go | 6 + internal/service/database/database_export.go | 12 + ...vm_cluster_add_virtual_machine_resource.go | 137 +++++++++++ .../database_vm_cluster_data_source.go | 6 + ...cluster_remove_virtual_machine_resource.go | 119 +++++++++ .../database/database_vm_cluster_resource.go | 226 ++++++++++++++++++ .../database_vm_clusters_data_source.go | 6 + ...atabase_autonomous_databases.html.markdown | 18 +- ..._autonomous_databases_clones.html.markdown | 2 +- ...omous_exadata_infrastructure.html.markdown | 1 + ...mous_exadata_infrastructures.html.markdown | 1 + ...tabase_autonomous_vm_cluster.html.markdown | 1 + ...abase_autonomous_vm_clusters.html.markdown | 1 + ..._cloud_autonomous_vm_cluster.html.markdown | 1 + ...cloud_autonomous_vm_clusters.html.markdown | 1 + ...cloud_exadata_infrastructure.html.markdown | 1 + ...loud_exadata_infrastructures.html.markdown | 1 + .../d/database_cloud_vm_cluster.html.markdown | 9 + .../database_cloud_vm_clusters.html.markdown | 9 + .../docs/d/database_db_systems.html.markdown | 1 + ...abase_exadata_infrastructure.html.markdown | 1 + ...base_exadata_infrastructures.html.markdown | 1 + .../docs/d/database_vm_cluster.html.markdown | 9 + .../docs/d/database_vm_clusters.html.markdown | 9 + .../guides/resource_discovery.html.markdown | 1 + ...utonomous_container_database.html.markdown | 1 + ...database_autonomous_database.html.markdown | 2 +- ...ous_database_saas_admin_user.html.markdown | 6 +- ...omous_exadata_infrastructure.html.markdown | 3 + ...tabase_autonomous_vm_cluster.html.markdown | 3 + ..._cloud_autonomous_vm_cluster.html.markdown | 3 + ...cloud_exadata_infrastructure.html.markdown | 3 + .../r/database_cloud_vm_cluster.html.markdown | 36 +++ .../docs/r/database_db_system.html.markdown | 3 + ...abase_exadata_infrastructure.html.markdown | 3 + .../docs/r/database_vm_cluster.html.markdown | 36 +++ ..._cluster_add_virtual_machine.html.markdown | 9 + ...uster_remove_virtual_machine.html.markdown | 9 + 53 files changed, 1248 insertions(+), 66 deletions(-) diff --git a/examples/database/db_systems/db_exacs/resources.tf b/examples/database/db_systems/db_exacs/resources.tf index 9777d7c48b2..7e436835a4c 100644 --- a/examples/database/db_systems/db_exacs/resources.tf +++ b/examples/database/db_systems/db_exacs/resources.tf @@ -44,6 +44,14 @@ resource "oci_database_cloud_vm_cluster" "test_cloud_vm_cluster" { is_health_monitoring_enabled = "true" is_incident_logs_enabled = "true" } + + cloud_automation_update_details{ + is_early_adoption_enabled = "true" + apply_update_time_preference { + apply_update_preferred_start_time = "02:00" + apply_update_preferred_end_time = "08:00" + } + } } resource "oci_database_db_home" "test_db_home_vm_cluster" { diff --git a/examples/database/exadata_cc/autonomous_virtual_machine.tf b/examples/database/exadata_cc/autonomous_virtual_machine.tf index 34f74127706..d40a052f474 100644 --- a/examples/database/exadata_cc/autonomous_virtual_machine.tf +++ b/examples/database/exadata_cc/autonomous_virtual_machine.tf @@ -5,7 +5,7 @@ variable "autonomous_virtual_machine_state" { data "oci_database_autonomous_virtual_machines" "test_autonomous_virtual_machines" { #Required autonomous_vm_cluster_id = oci_database_autonomous_vm_cluster.test_autonomous_vm_cluster.id - compartment_id = var.compartment_id + compartment_id = var.compartment_ocid #Optional state = var.autonomous_virtual_machine_state diff --git a/examples/database/exadata_cc/autonomous_vm_cluster.tf b/examples/database/exadata_cc/autonomous_vm_cluster.tf index 6f35425849c..c70d2810a48 100644 --- a/examples/database/exadata_cc/autonomous_vm_cluster.tf +++ b/examples/database/exadata_cc/autonomous_vm_cluster.tf @@ -5,7 +5,7 @@ resource "oci_database_autonomous_vm_cluster" "test_autonomous_vm_cluster" { compartment_id = var.compartment_ocid display_name = "autonomousVmCluster" exadata_infrastructure_id = oci_database_exadata_infrastructure.test_exadata_infrastructure.id - vm_cluster_network_id = oci_database_vm_cluster_network.test_vm_cluster_network.id + vm_cluster_network_id = oci_database_vm_cluster_network.test_vm_cluster_network2.id cpu_core_count_per_node = "20" autonomous_data_storage_size_in_tbs = "2.0" memory_per_oracle_compute_unit_in_gbs = "5" diff --git a/examples/database/exadata_cc/vm_cluster.tf b/examples/database/exadata_cc/vm_cluster.tf index 0545d5acd75..7d5773721e3 100644 --- a/examples/database/exadata_cc/vm_cluster.tf +++ b/examples/database/exadata_cc/vm_cluster.tf @@ -88,6 +88,94 @@ resource "oci_database_vm_cluster_network" "test_vm_cluster_network" { } } +resource "oci_database_vm_cluster_network" "test_vm_cluster_network2" { + compartment_id = var.compartment_ocid + display_name = "testVmClusterRecommendedNetwork2" + dns = ["192.178.10.10"] + ntp = ["192.178.10.20"] + + exadata_infrastructure_id = oci_database_exadata_infrastructure.test_exadata_infrastructure.id + + scans { + hostname = "myprefix3-nsubz-scan" + + ips = [ + "192.178.19.7", + "192.178.19.6", + "192.178.19.8", + ] + + port = 1521 + scan_listener_port_tcp = 1521 + scan_listener_port_tcp_ssl = 2484 + } + + vm_networks { + domain_name = "oracle.com" + gateway = "192.179.20.1" + netmask = "255.255.0.0" + network_type = "BACKUP" + + nodes { + hostname = "myprefix4-cghdm1" + ip = "192.179.19.18" + db_server_id = data.oci_database_db_servers.test_db_servers.db_servers.0.id + } + + nodes { + hostname = "myprefix4-cghdm2" + ip = "192.179.19.20" + db_server_id = data.oci_database_db_servers.test_db_servers.db_servers.1.id + } + + vlan_id = "31" + } + + vm_networks { + domain_name = "oracle.com" + gateway = "192.178.20.1" + netmask = "255.255.0.0" + network_type = "CLIENT" + + nodes { + hostname = "myprefix5-r64zc1" + ip = "192.178.19.10" + vip = "192.178.19.11" + vip_hostname = "myprefix5-r64zc1-vip" + db_server_id = data.oci_database_db_servers.test_db_servers.db_servers.0.id + } + + nodes { + hostname = "myprefix5-r64zc2" + ip = "192.178.19.14" + vip = "192.178.19.15" + vip_hostname = "myprefix5-r64zc2-vip" + db_server_id = data.oci_database_db_servers.test_db_servers.db_servers.1.id + } + + vlan_id = "41" + } + + #Optional + defined_tags = { + "${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}" = "updatedvalue" + } + + freeform_tags = { + "Department" = "Accounting" + } + + validate_vm_cluster_network = true + + action = "ADD_DBSERVER_NETWORK" + + lifecycle { + ignore_changes = [ + vm_networks, + ] + } +} + data "oci_database_gi_versions" "gi_version" { compartment_id = var.compartment_ocid shape = "ExadataCC.Quarter3.100" @@ -125,6 +213,14 @@ resource "oci_database_vm_cluster" "test_vm_cluster" { is_incident_logs_enabled = "true" } + cloud_automation_update_details{ + is_early_adoption_enabled = "true" + apply_update_time_preference { + apply_update_preferred_start_time = "02:00" + apply_update_preferred_end_time = "08:00" + } + } + } data "oci_database_db_servers" "test_db_servers" { @@ -172,7 +268,12 @@ data "oci_database_vm_cluster_recommended_network" "test_vm_cluster_recommended_ resource "oci_database_db_home" "test_db_home_vm_cluster" { vm_cluster_id = oci_database_vm_cluster.test_vm_cluster.id + source = "VM_CLUSTER_NEW" + db_version = "12.1.0.2" + display_name = "createdDbHome" +} +resource "oci_database_database" "test_exacc_database"{ database { admin_password = "BEstrO0ng_#11" db_name = "dbVMClus" @@ -195,10 +296,8 @@ resource "oci_database_db_home" "test_db_home_vm_cluster" { } } } - - source = "VM_CLUSTER_NEW" - db_version = "12.1.0.2" - display_name = "createdDbHome" + db_home_id = oci_database_db_home.test_db_home_vm_cluster.id + source = "NONE" } resource "oci_database_backup_destination" "test_backup_destination_nfs" { diff --git a/internal/integrationtest/database_autonomous_database_software_image_test.go b/internal/integrationtest/database_autonomous_database_software_image_test.go index 5261caacea7..7d8912bb73c 100644 --- a/internal/integrationtest/database_autonomous_database_software_image_test.go +++ b/internal/integrationtest/database_autonomous_database_software_image_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. // Licensed under the Mozilla Public License v2.0 package integrationtest @@ -25,6 +25,8 @@ import ( ) var ( + randString = utils.RandomString(10, utils.CharsetWithoutDigits) + randString2 = utils.RandomString(10, utils.CharsetWithoutDigits) ExaccDatabaseAutonomousDatabaseSoftwareImageRequiredOnlyResource = ExaccDatabaseAutonomousDatabaseSoftwareImageResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_software_image", "test_autonomous_database_software_image", acctest.Required, acctest.Create, ExaccDatabaseAutonomousDatabaseSoftwareImageRepresentation) @@ -48,7 +50,7 @@ var ( DatabaseAutonomousDatabaseSoftwareImageDataSourceRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "image_shape_family": acctest.Representation{RepType: acctest.Required, Create: `EXADATA_SHAPE`}, - "display_name": acctest.Representation{RepType: acctest.Optional, Create: `image1`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `image1` + randString}, "state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`}, "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: DatabaseAutonomousDatabaseSoftwareImageDataSourceFilterRepresentation}} @@ -60,7 +62,7 @@ var ( ExaccDatabaseAutonomousDatabaseSoftwareImageDataSourceRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "image_shape_family": acctest.Representation{RepType: acctest.Required, Create: `EXACC_SHAPE`}, - "display_name": acctest.Representation{RepType: acctest.Optional, Create: `image1`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `image1` + randString}, "state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`}, "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: ExaccDatabaseAutonomousDatabaseSoftwareImageDataSourceFilterRepresentation}} @@ -71,7 +73,7 @@ var ( DatabaseAutonomousDatabaseSoftwareImageRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "display_name": acctest.Representation{RepType: acctest.Required, Create: `image1`}, + "display_name": acctest.Representation{RepType: acctest.Required, Create: `image1` + randString}, "image_shape_family": acctest.Representation{RepType: acctest.Required, Create: `EXADATA_SHAPE`}, "source_cdb_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_container_database.test_autonomous_container_database.id}`}, "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")}`}, @@ -80,7 +82,7 @@ var ( ExaccDatabaseAutonomousDatabaseSoftwareImageRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "display_name": acctest.Representation{RepType: acctest.Required, Create: `image1`}, + "display_name": acctest.Representation{RepType: acctest.Required, Create: `image1` + randString}, "image_shape_family": acctest.Representation{RepType: acctest.Required, Create: `EXACC_SHAPE`}, "source_cdb_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_autonomous_container_database.test_autonomous_container_database.id}`}, "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")}`}, @@ -125,7 +127,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_software_image", "test_autonomous_database_software_image", acctest.Required, acctest.Create, ExaccDatabaseAutonomousDatabaseSoftwareImageRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXACC_SHAPE"), resource.TestCheckResourceAttrSet(resourceName, "source_cdb_id"), @@ -147,7 +149,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXACC_SHAPE"), @@ -178,7 +180,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXACC_SHAPE"), @@ -204,7 +206,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXACC_SHAPE"), @@ -230,7 +232,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_software_image", "test_autonomous_database_software_image", acctest.Optional, acctest.Update, ExaccDatabaseAutonomousDatabaseSoftwareImageRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), - resource.TestCheckResourceAttr(datasourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(datasourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(datasourceName, "image_shape_family", "EXACC_SHAPE"), resource.TestCheckResourceAttr(datasourceName, "state", "AVAILABLE"), @@ -249,7 +251,7 @@ func TestDatabaseExaccAutonomousDatabaseSoftwareImageResource_basic(t *testing.T resource.TestCheckResourceAttr(singularDatasourceName, "autonomous_dsi_one_off_patches.#", "0"), resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(singularDatasourceName, "database_version"), - resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), resource.TestCheckResourceAttr(singularDatasourceName, "image_shape_family", "EXACC_SHAPE"), @@ -299,7 +301,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_software_image", "test_autonomous_database_software_image", acctest.Required, acctest.Create, DatabaseAutonomousDatabaseSoftwareImageRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXADATA_SHAPE"), resource.TestCheckResourceAttrSet(resourceName, "source_cdb_id"), @@ -321,7 +323,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXADATA_SHAPE"), @@ -352,7 +354,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXADATA_SHAPE"), @@ -378,7 +380,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(resourceName, "database_version"), - resource.TestCheckResourceAttr(resourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(resourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(resourceName, "id"), resource.TestCheckResourceAttr(resourceName, "image_shape_family", "EXADATA_SHAPE"), @@ -404,7 +406,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_database_software_image", "test_autonomous_database_software_image", acctest.Optional, acctest.Update, DatabaseAutonomousDatabaseSoftwareImageRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), - resource.TestCheckResourceAttr(datasourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(datasourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(datasourceName, "image_shape_family", "EXADATA_SHAPE"), resource.TestCheckResourceAttr(datasourceName, "state", "AVAILABLE"), @@ -423,7 +425,7 @@ func TestDatabaseAutonomousDatabaseSoftwareImageResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "autonomous_dsi_one_off_patches.#", "0"), resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(singularDatasourceName, "database_version"), - resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "image1"), + resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "image1"+randString), resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), resource.TestCheckResourceAttr(singularDatasourceName, "image_shape_family", "EXADATA_SHAPE"), diff --git a/internal/integrationtest/database_autonomous_vm_cluster_test.go b/internal/integrationtest/database_autonomous_vm_cluster_test.go index 5ae8210806e..f68a55101ff 100644 --- a/internal/integrationtest/database_autonomous_vm_cluster_test.go +++ b/internal/integrationtest/database_autonomous_vm_cluster_test.go @@ -168,7 +168,11 @@ func TestDatabaseAutonomousVmClusterResource_basic(t *testing.T) { // verify Create { Config: config + compartmentIdVariableStr + DatabaseAutonomousVmClusterResourceDependencies + - acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_vm_cluster", "test_autonomous_vm_cluster", acctest.Required, acctest.Create, DatabaseAutonomousVmClusterRepresentation), + acctest.GenerateResourceFromRepresentationMap("oci_database_autonomous_vm_cluster", "test_autonomous_vm_cluster", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(DatabaseAutonomousVmClusterRepresentation, map[string]interface{}{ + "compute_model": acctest.Representation{RepType: acctest.Required, Create: `ECPU`}, + "memory_per_oracle_compute_unit_in_gbs": acctest.Representation{RepType: acctest.Required, Create: "4"}, + "cpu_core_count_per_node": acctest.Representation{RepType: acctest.Required, Create: `20`}, + })), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "display_name", "autonomousVmCluster"), diff --git a/internal/integrationtest/database_cloud_vm_cluster_test.go b/internal/integrationtest/database_cloud_vm_cluster_test.go index cd4a082ceb4..99722d1c253 100644 --- a/internal/integrationtest/database_cloud_vm_cluster_test.go +++ b/internal/integrationtest/database_cloud_vm_cluster_test.go @@ -51,6 +51,7 @@ var ( } DatabaseCloudVmClusterRepresentation = map[string]interface{}{ + "depends_on": []string{"time_sleep.wait_180_seconds"}, "file_system_configuration_details": []acctest.RepresentationGroup{ {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation0}, {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation1}, @@ -58,7 +59,9 @@ var ( {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation3}, {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation4}, {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation5}, - {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation6}}, + {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation6}, + {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation7}, + {RepType: acctest.Optional, Group: DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation8}}, "backup_subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.t2.id}`}, "cloud_exadata_infrastructure_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_cloud_exadata_infrastructure.test_cloud_exadata_infrastructure.id}`}, "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, @@ -71,6 +74,7 @@ var ( "domain": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.t.subnet_domain_name}`}, "backup_network_nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_network_security_group.test_network_security_group_backup.id}`}}, "cluster_name": acctest.Representation{RepType: acctest.Optional, Create: `clusterName`}, + "cloud_automation_update_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseCloudVmClusterCloudAutomationUpdateDetailsRepresentation}, "data_collection_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: cloudVmClusterDataCollectionOptionsRepresentation}, "data_storage_percentage": acctest.Representation{RepType: acctest.Optional, Create: `40`}, "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")}`}, @@ -100,6 +104,7 @@ var ( "domain": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_subnet.test_subnet1.subnet_domain_name}`}, "backup_network_nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_network_security_group.test_network_security_group_backup.id}`}}, "cluster_name": acctest.Representation{RepType: acctest.Optional, Create: `clusterName`}, + "cloud_automation_update_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseCloudVmClusterCloudAutomationUpdateDetailsRepresentation}, "data_collection_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: cloudVmClusterDataCollectionOptionsRepresentation}, "data_storage_percentage": acctest.Representation{RepType: acctest.Optional, Create: `40`}, "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")}`}, @@ -113,11 +118,28 @@ var ( "time_zone": acctest.Representation{RepType: acctest.Optional, Create: `US/Pacific`}, "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: cloudVmClusterIgnoreDefinedTagsRepresentation}, } + + DatabaseCloudVmClusterCloudAutomationUpdateDetailsRepresentation = map[string]interface{}{ + "apply_update_time_preference": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseCloudVmClusterCloudAutomationUpdateDetailsApplyUpdateTimePreferenceRepresentation}, + "freeze_period": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseCloudVmClusterCloudAutomationUpdateDetailsFreezePeriodRepresentation}, + "is_early_adoption_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, + "is_freeze_period_enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`, Update: `true`}, + } + cloudVmClusterDataCollectionOptionsRepresentation = map[string]interface{}{ "is_diagnostics_events_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, "is_health_monitoring_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, "is_incident_logs_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, } + DatabaseCloudVmClusterCloudAutomationUpdateDetailsApplyUpdateTimePreferenceRepresentation = map[string]interface{}{ + "apply_update_preferred_end_time": acctest.Representation{RepType: acctest.Optional, Create: `06:00`, Update: `08:00`}, + "apply_update_preferred_start_time": acctest.Representation{RepType: acctest.Optional, Create: `00:00`, Update: `02:00`}, + } + DatabaseCloudVmClusterCloudAutomationUpdateDetailsFreezePeriodRepresentation = map[string]interface{}{ + "freeze_period_end_time": acctest.Representation{RepType: acctest.Optional, Create: `2026-02-15`, Update: `2026-03-15`}, + "freeze_period_start_time": acctest.Representation{RepType: acctest.Optional, Create: `2026-02-13`, Update: `2026-03-13`}, + } + DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation0 = map[string]interface{}{ "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `15`, Update: `20`}, "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `/`, Update: `/`}, @@ -153,6 +175,16 @@ var ( "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `/var/log/audit`}, } + DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation7 = map[string]interface{}{ + "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `9`}, + "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `reserved`}, + } + + DatabaseCloudVmClusterFileSystemConfigurationDetailsRepresentation8 = map[string]interface{}{ + "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `16`}, + "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `swap`}, + } + zoneRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "name": acctest.Representation{RepType: acctest.Required, Create: `sicdbaas.exacs.zonetest`}, @@ -317,7 +349,16 @@ var ( acctest.GenerateResourceFromRepresentationMap("oci_dns_view", "test_view", acctest.Optional, acctest.Create, ViewRepresentation) + acctest.GenerateDataSourceFromRepresentationMap("oci_core_vcn_dns_resolver_association", "test_vcn_dns_resolver_association", acctest.Optional, acctest.Create, CoreCoreVcnDnsResolverAssociationRepresentation) - DatabaseDatabaseCloudVmClusterResourceDependencies = DatabaseCloudVmClusterResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_dns_resolver", "test_resolver", acctest.Optional, acctest.Create, ResolverRepresentation) + DatabaseDatabaseCloudVmClusterResourceDependencies = DatabaseCloudVmClusterResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_dns_resolver", "test_resolver", acctest.Optional, acctest.Create, ResolverRepresentation) + Sleep180 + + Sleep180 = "resource \"time_sleep\" \"wait_180_seconds\" {\n depends_on = [oci_dns_resolver.test_resolver] \n create_duration = \"180s\"\n}" + + ` + terraform { + required_providers { + time = "0.5.0" + } + } + ` CloudVmClusterResourceUpdateDependencies = ad_subnet_security + acctest.GenerateResourceFromRepresentationMap("oci_database_cloud_exadata_infrastructure", "test_cloud_exadata_infrastructure", acctest.Required, acctest.Update, acctest.RepresentationCopyWithNewProperties(acctest.RepresentationCopyWithRemovedProperties(DatabaseCloudExadataInfrastructureRepresentation, []string{"compute_count"}), map[string]interface{}{ @@ -402,6 +443,15 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { }, resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttrSet(resourceName, "backup_subnet_id"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "06:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "00:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-02-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttrSet(resourceName, "cloud_exadata_infrastructure_id"), resource.TestCheckResourceAttr(resourceName, "cluster_name", "clusterName"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), @@ -413,7 +463,7 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "data_storage_percentage", "40"), resource.TestCheckResourceAttr(resourceName, "display_name", "cloudVmCluster"), resource.TestCheckResourceAttrSet(resourceName, "domain"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "15"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -458,6 +508,15 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttrSet(resourceName, "backup_subnet_id"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "06:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "00:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-02-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttrSet(resourceName, "cloud_exadata_infrastructure_id"), resource.TestCheckResourceAttr(resourceName, "cluster_name", "clusterName"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), @@ -469,7 +528,7 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "data_storage_percentage", "40"), resource.TestCheckResourceAttr(resourceName, "display_name", "cloudVmCluster"), resource.TestCheckResourceAttrSet(resourceName, "domain"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "15"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -510,6 +569,15 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttrSet(resourceName, "backup_subnet_id"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-03-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttrSet(resourceName, "cloud_exadata_infrastructure_id"), resource.TestCheckResourceAttr(resourceName, "cluster_name", "clusterName"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), @@ -521,7 +589,7 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "data_storage_percentage", "40"), resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"), resource.TestCheckResourceAttrSet(resourceName, "domain"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "20"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -572,6 +640,15 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.#", "1"), resource.TestCheckResourceAttrSet(datasourceName, "cloud_vm_clusters.0.availability_domain"), resource.TestCheckResourceAttrSet(datasourceName, "cloud_vm_clusters.0.backup_subnet_id"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-03-13"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttrSet(datasourceName, "cloud_vm_clusters.0.cloud_exadata_infrastructure_id"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.cluster_name", "clusterName"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.compartment_id", compartmentId), @@ -583,7 +660,7 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.data_storage_percentage", "40"), resource.TestCheckResourceAttrSet(datasourceName, "cloud_vm_clusters.0.disk_redundancy"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.display_name", "displayName2"), - resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.file_system_configuration_details.0.file_system_size_gb", "20"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.file_system_configuration_details.0.mount_point", "/"), resource.TestCheckResourceAttr(datasourceName, "cloud_vm_clusters.0.domain", "sicdbaas.exacs.zonetest"), @@ -623,6 +700,15 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(singularDatasourceName, "cloud_vm_cluster_id"), resource.TestCheckResourceAttrSet(singularDatasourceName, "availability_domain"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-03-13"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(singularDatasourceName, "cluster_name", "clusterName"), resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(singularDatasourceName, "data_collection_options.#", "1"), @@ -633,7 +719,7 @@ func TestDatabaseCloudVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "data_storage_percentage", "40"), resource.TestCheckResourceAttrSet(singularDatasourceName, "disk_redundancy"), resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"), - resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.0.file_system_size_gb", "20"), resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.0.mount_point", "/"), resource.TestCheckResourceAttr(singularDatasourceName, "domain", "sicdbaas.exacs.zonetest"), diff --git a/internal/integrationtest/database_exadata_infrastructure_test.go b/internal/integrationtest/database_exadata_infrastructure_test.go index cf301dc7cf8..b1fd5282322 100644 --- a/internal/integrationtest/database_exadata_infrastructure_test.go +++ b/internal/integrationtest/database_exadata_infrastructure_test.go @@ -435,7 +435,7 @@ func TestDatabaseExadataInfrastructureResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(datasourceName, "exadata_infrastructures.0.data_storage_size_in_tbs"), resource.TestCheckResourceAttrSet(datasourceName, "exadata_infrastructures.0.db_node_storage_size_in_gbs"), resource.TestCheckResourceAttr(datasourceName, "exadata_infrastructures.0.defined_tags.%", "1"), - resource.TestCheckResourceAttr(datasourceName, "exadata_infrastructures.0.defined_file_system_configurations.#", "7"), + resource.TestCheckResourceAttr(datasourceName, "exadata_infrastructures.0.defined_file_system_configurations.#", "9"), resource.TestCheckResourceAttr(datasourceName, "exadata_infrastructures.0.display_name", "tstExaInfra"), resource.TestCheckResourceAttr(datasourceName, "exadata_infrastructures.0.dns_server.#", "2"), @@ -506,7 +506,7 @@ func TestDatabaseExadataInfrastructureResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(singularDatasourceName, "data_storage_size_in_tbs"), resource.TestCheckResourceAttrSet(singularDatasourceName, "db_node_storage_size_in_gbs"), resource.TestCheckResourceAttr(singularDatasourceName, "defined_tags.%", "1"), - resource.TestCheckResourceAttr(singularDatasourceName, "defined_file_system_configurations.#", "7"), + resource.TestCheckResourceAttr(singularDatasourceName, "defined_file_system_configurations.#", "9"), resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "tstExaInfra"), resource.TestCheckResourceAttr(singularDatasourceName, "dns_server.#", "2"), diff --git a/internal/integrationtest/database_vm_cluster_test.go b/internal/integrationtest/database_vm_cluster_test.go index a526e52bf8d..3a18eeaf750 100644 --- a/internal/integrationtest/database_vm_cluster_test.go +++ b/internal/integrationtest/database_vm_cluster_test.go @@ -48,18 +48,19 @@ var ( } DatabaseVmClusterRepresentation = map[string]interface{}{ - "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "cpu_core_count": acctest.Representation{RepType: acctest.Required, Create: `4`, Update: `6`}, - "display_name": acctest.Representation{RepType: acctest.Required, Create: `vmCluster`}, - "exadata_infrastructure_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_exadata_infrastructure.test_exadata_infrastructure.id}`}, - "gi_version": acctest.Representation{RepType: acctest.Required, Create: `19.0.0.0.0`}, - "ssh_public_keys": acctest.Representation{RepType: acctest.Required, Create: []string{`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOuBJgh6lTmQvQJ4BA3RCJdSmxRtmiXAQEEIP68/G4gF3XuZdKEYTFeputacmRq9yO5ZnNXgO9akdUgePpf8+CfFtveQxmN5xo3HVCDKxu/70lbMgeu7+wJzrMOlzj+a4zNq2j0Ww2VWMsisJ6eV3bJTnO/9VLGCOC8M9noaOlcKcLgIYy4aDM724MxFX2lgn7o6rVADHRxkvLEXPVqYT4syvYw+8OVSnNgE4MJLxaw8/2K0qp19YlQyiriIXfQpci3ThxwLjymYRPj+kjU1xIxv6qbFQzHR7ds0pSWp1U06cIoKPfCazU9hGWW8yIe/vzfTbWrt2DK6pLwBn/G0x3 sample`}}, - "vm_cluster_network_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_vm_cluster_network.test_vm_cluster_network.id}`}, - "data_collection_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseVmClusterDataCollectionOptionsRepresentation}, - "data_storage_size_in_tbs": acctest.Representation{RepType: acctest.Optional, Create: `84`, Update: `86`}, - "db_node_storage_size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `120`, Update: `160`}, - "db_servers": acctest.Representation{RepType: acctest.Required, Create: []string{`${data.oci_database_db_servers.test_db_servers.db_servers.0.id}`, `${data.oci_database_db_servers.test_db_servers.db_servers.1.id}`}}, - "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")}`}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "cpu_core_count": acctest.Representation{RepType: acctest.Required, Create: `4`, Update: `6`}, + "display_name": acctest.Representation{RepType: acctest.Required, Create: `vmCluster`}, + "exadata_infrastructure_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_exadata_infrastructure.test_exadata_infrastructure.id}`}, + "gi_version": acctest.Representation{RepType: acctest.Required, Create: `19.0.0.0.0`}, + "ssh_public_keys": acctest.Representation{RepType: acctest.Required, Create: []string{`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOuBJgh6lTmQvQJ4BA3RCJdSmxRtmiXAQEEIP68/G4gF3XuZdKEYTFeputacmRq9yO5ZnNXgO9akdUgePpf8+CfFtveQxmN5xo3HVCDKxu/70lbMgeu7+wJzrMOlzj+a4zNq2j0Ww2VWMsisJ6eV3bJTnO/9VLGCOC8M9noaOlcKcLgIYy4aDM724MxFX2lgn7o6rVADHRxkvLEXPVqYT4syvYw+8OVSnNgE4MJLxaw8/2K0qp19YlQyiriIXfQpci3ThxwLjymYRPj+kjU1xIxv6qbFQzHR7ds0pSWp1U06cIoKPfCazU9hGWW8yIe/vzfTbWrt2DK6pLwBn/G0x3 sample`}}, + "vm_cluster_network_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_vm_cluster_network.test_vm_cluster_network.id}`}, + "cloud_automation_update_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseVmClusterCloudAutomationUpdateDetailsRepresentation}, + "data_collection_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseVmClusterDataCollectionOptionsRepresentation}, + "data_storage_size_in_tbs": acctest.Representation{RepType: acctest.Optional, Create: `84`, Update: `86`}, + "db_node_storage_size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `120`, Update: `160`}, + "db_servers": acctest.Representation{RepType: acctest.Required, Create: []string{`${data.oci_database_db_servers.test_db_servers.db_servers.0.id}`, `${data.oci_database_db_servers.test_db_servers.db_servers.1.id}`}}, + "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")}`}, "file_system_configuration_details": []acctest.RepresentationGroup{ {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation}, {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation1}, @@ -67,7 +68,10 @@ var ( {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation3}, {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation4}, {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation5}, - {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation6}}, + {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation6}, + {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation7}, + {RepType: acctest.Optional, Group: DatabaseVmClusterFileSystemConfigurationDetailsRepresentation8}}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, "is_local_backup_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, "is_sparse_diskgroup_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`}, @@ -76,6 +80,12 @@ var ( "memory_size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `60`, Update: `90`}, "time_zone": acctest.Representation{RepType: acctest.Optional, Create: `US/Pacific`}, } + DatabaseVmClusterCloudAutomationUpdateDetailsRepresentation = map[string]interface{}{ + "apply_update_time_preference": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseVmClusterCloudAutomationUpdateDetailsApplyUpdateTimePreferenceRepresentation}, + "freeze_period": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DatabaseVmClusterCloudAutomationUpdateDetailsFreezePeriodRepresentation}, + "is_early_adoption_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, + "is_freeze_period_enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`, Update: `true`}, + } vmClusterIgnoreDefinedTagsSystemVersionRepresentation = map[string]interface{}{ "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`}}, @@ -86,6 +96,14 @@ var ( "is_health_monitoring_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, "is_incident_logs_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, } + DatabaseVmClusterCloudAutomationUpdateDetailsApplyUpdateTimePreferenceRepresentation = map[string]interface{}{ + "apply_update_preferred_end_time": acctest.Representation{RepType: acctest.Optional, Create: `06:00`, Update: `08:00`}, + "apply_update_preferred_start_time": acctest.Representation{RepType: acctest.Optional, Create: `00:00`, Update: `02:00`}, + } + DatabaseVmClusterCloudAutomationUpdateDetailsFreezePeriodRepresentation = map[string]interface{}{ + "freeze_period_end_time": acctest.Representation{RepType: acctest.Optional, Create: `2026-02-15`, Update: `2026-03-15`}, + "freeze_period_start_time": acctest.Representation{RepType: acctest.Optional, Create: `2026-02-13`, Update: `2026-02-13`}, + } DatabaseVmClusterFileSystemConfigurationDetailsRepresentation = map[string]interface{}{ "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `250`, Update: `260`}, @@ -122,6 +140,20 @@ var ( "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `/var/log/audit`}, } + DatabaseVmClusterFileSystemConfigurationDetailsRepresentation7 = map[string]interface{}{ + "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `9`}, + "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `reserved`}, + } + + DatabaseVmClusterFileSystemConfigurationDetailsRepresentation8 = map[string]interface{}{ + "file_system_size_gb": acctest.Representation{RepType: acctest.Optional, Create: `16`}, + "mount_point": acctest.Representation{RepType: acctest.Optional, Create: `swap`}, + } + + //DatabaseVmClusterResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_database_exadata_infrastructure", "test_exadata_infrastructure", acctest.Required, acctest.Create, DatabaseExadataInfrastructureRepresentation) + + // acctest.GenerateResourceFromRepresentationMap("oci_database_vm_cluster_network", "test_vm_cluster_network", acctest.Required, acctest.Create, DatabaseVmClusterNetworkRepresentation) + + // DefinedTagsDependencies + DatabaseVmClusterResourceDependencies = VmClusterNetworkValidatedResourceConfig ) @@ -176,6 +208,15 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { Config: config + compartmentIdVariableStr + DatabaseVmClusterResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_database_vm_cluster", "test_vm_cluster", acctest.Optional, acctest.Create, DatabaseVmClusterRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "06:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "00:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-02-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "4"), resource.TestCheckResourceAttr(resourceName, "data_collection_options.#", "1"), @@ -187,7 +228,7 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "db_servers.#", "2"), resource.TestCheckResourceAttr(resourceName, "display_name", "vmCluster"), resource.TestCheckResourceAttrSet(resourceName, "exadata_infrastructure_id"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "250"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/u01"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -220,6 +261,15 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id_for_update}`}, })), Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "06:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "00:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-02-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "4"), resource.TestCheckResourceAttr(resourceName, "data_collection_options.#", "1"), @@ -231,7 +281,7 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "db_servers.#", "2"), resource.TestCheckResourceAttr(resourceName, "display_name", "vmCluster"), resource.TestCheckResourceAttrSet(resourceName, "exadata_infrastructure_id"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "250"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/u01"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -259,6 +309,15 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { Config: config + compartmentIdVariableStr + DatabaseVmClusterResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_database_vm_cluster", "test_vm_cluster", acctest.Optional, acctest.Update, DatabaseVmClusterRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "6"), resource.TestCheckResourceAttr(resourceName, "data_collection_options.#", "1"), @@ -270,7 +329,7 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "db_servers.#", "2"), resource.TestCheckResourceAttr(resourceName, "display_name", "vmCluster"), resource.TestCheckResourceAttrSet(resourceName, "exadata_infrastructure_id"), - resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.file_system_size_gb", "260"), resource.TestCheckResourceAttr(resourceName, "file_system_configuration_details.0.mount_point", "/u01"), resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), @@ -306,6 +365,15 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "vm_clusters.#", "1"), resource.TestCheckResourceAttrSet(datasourceName, "vm_clusters.0.availability_domain"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.compartment_id", compartmentId), resource.TestCheckResourceAttrSet(datasourceName, "vm_clusters.0.cpus_enabled"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.data_collection_options.#", "1"), @@ -317,7 +385,7 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.db_servers.#", "2"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.display_name", "vmCluster"), resource.TestCheckResourceAttrSet(datasourceName, "vm_clusters.0.exadata_infrastructure_id"), - resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.file_system_configuration_details.0.file_system_size_gb", "260"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.file_system_configuration_details.0.mount_point", "/u01"), resource.TestCheckResourceAttr(datasourceName, "vm_clusters.0.freeform_tags.%", "1"), @@ -345,6 +413,15 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(singularDatasourceName, "vm_cluster_id"), resource.TestCheckResourceAttrSet(singularDatasourceName, "availability_domain"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_end_time", "08:00"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.apply_update_time_preference.0.apply_update_preferred_start_time", "02:00"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_end_time", "2026-03-15"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.freeze_period.0.freeze_period_start_time", "2026-02-13"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.is_early_adoption_enabled", "true"), + resource.TestCheckResourceAttr(singularDatasourceName, "cloud_automation_update_details.0.is_freeze_period_enabled", "true"), resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttrSet(singularDatasourceName, "cpus_enabled"), resource.TestCheckResourceAttr(singularDatasourceName, "data_collection_options.#", "1"), @@ -355,7 +432,7 @@ func TestDatabaseVmClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "db_node_storage_size_in_gbs", "160"), resource.TestCheckResourceAttr(singularDatasourceName, "db_servers.#", "2"), resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "vmCluster"), - resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.#", "7"), + resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.#", "9"), resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.0.file_system_size_gb", "260"), resource.TestCheckResourceAttr(singularDatasourceName, "file_system_configuration_details.0.mount_point", "/u01"), resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), diff --git a/internal/service/database/database_autonomous_database_software_image_data_source.go b/internal/service/database/database_autonomous_database_software_image_data_source.go index 259588717f3..5b11fa5064e 100644 --- a/internal/service/database/database_autonomous_database_software_image_data_source.go +++ b/internal/service/database/database_autonomous_database_software_image_data_source.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. // Licensed under the Mozilla Public License v2.0 package database diff --git a/internal/service/database/database_autonomous_database_software_image_resource.go b/internal/service/database/database_autonomous_database_software_image_resource.go index 259938170d0..52e8bc02f3e 100644 --- a/internal/service/database/database_autonomous_database_software_image_resource.go +++ b/internal/service/database/database_autonomous_database_software_image_resource.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. // Licensed under the Mozilla Public License v2.0 package database diff --git a/internal/service/database/database_autonomous_database_software_images_data_source.go b/internal/service/database/database_autonomous_database_software_images_data_source.go index 9a440f7ccb5..91736948270 100644 --- a/internal/service/database/database_autonomous_database_software_images_data_source.go +++ b/internal/service/database/database_autonomous_database_software_images_data_source.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. // Licensed under the Mozilla Public License v2.0 package database diff --git a/internal/service/database/database_cloud_autonomous_vm_cluster_resource.go b/internal/service/database/database_cloud_autonomous_vm_cluster_resource.go index 93a9e9633a3..fb5ea792ce2 100644 --- a/internal/service/database/database_cloud_autonomous_vm_cluster_resource.go +++ b/internal/service/database/database_cloud_autonomous_vm_cluster_resource.go @@ -1274,7 +1274,6 @@ func MaintenanceWindowToMap(obj *oci_database.MaintenanceWindow) map[string]inte result["skip_ru"] = obj.SkipRu - result["weeks_of_month"] = obj.WeeksOfMonth result["weeks_of_month"] = obj.WeeksOfMonth return result diff --git a/internal/service/database/database_cloud_vm_cluster_data_source.go b/internal/service/database/database_cloud_vm_cluster_data_source.go index 150e5ed2e55..b539ae44ba4 100644 --- a/internal/service/database/database_cloud_vm_cluster_data_source.go +++ b/internal/service/database/database_cloud_vm_cluster_data_source.go @@ -77,6 +77,12 @@ func (s *DatabaseCloudVmClusterDataSourceCrud) SetData() error { s.D.Set("backup_subnet_id", *s.Res.BackupSubnetId) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CloudExadataInfrastructureId != nil { s.D.Set("cloud_exadata_infrastructure_id", *s.Res.CloudExadataInfrastructureId) } diff --git a/internal/service/database/database_cloud_vm_cluster_resource.go b/internal/service/database/database_cloud_vm_cluster_resource.go index ebfa2125c08..76107076658 100644 --- a/internal/service/database/database_cloud_vm_cluster_resource.go +++ b/internal/service/database/database_cloud_vm_cluster_resource.go @@ -98,6 +98,84 @@ func DatabaseCloudVmClusterResource() *schema.Resource { Type: schema.TypeString, }, }, + "cloud_automation_update_details": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "apply_update_time_preference": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "apply_update_preferred_end_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "apply_update_preferred_start_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "freeze_period": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "freeze_period_end_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "freeze_period_start_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "is_early_adoption_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + "is_freeze_period_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, "cluster_name": { Type: schema.TypeString, Optional: true, @@ -520,6 +598,17 @@ func (s *DatabaseCloudVmClusterResourceCrud) Create() error { request.BackupSubnetId = &tmp } + if cloudAutomationUpdateDetails, ok := s.D.GetOkExists("cloud_automation_update_details"); ok { + if tmpList := cloudAutomationUpdateDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "cloud_automation_update_details", 0) + tmp, err := s.mapToCloudAutomationUpdateDetails(fieldKeyFormat) + if err != nil { + return err + } + request.CloudAutomationUpdateDetails = &tmp + } + } + if cloudExadataInfrastructureId, ok := s.D.GetOkExists("cloud_exadata_infrastructure_id"); ok { tmp := cloudExadataInfrastructureId.(string) request.CloudExadataInfrastructureId = &tmp @@ -782,6 +871,17 @@ func (s *DatabaseCloudVmClusterResourceCrud) Update() error { } } + if cloudAutomationUpdateDetails, ok := s.D.GetOkExists("cloud_automation_update_details"); ok { + if tmpList := cloudAutomationUpdateDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "cloud_automation_update_details", 0) + tmp, err := s.mapToCloudAutomationUpdateDetails(fieldKeyFormat) + if err != nil { + return err + } + request.CloudAutomationUpdateDetails = &tmp + } + } + tmp := s.D.Id() request.CloudVmClusterId = &tmp @@ -966,6 +1066,12 @@ func (s *DatabaseCloudVmClusterResourceCrud) SetData() error { s.D.Set("backup_subnet_id", *s.Res.BackupSubnetId) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CloudExadataInfrastructureId != nil { s.D.Set("cloud_exadata_infrastructure_id", *s.Res.CloudExadataInfrastructureId) } @@ -1140,6 +1246,126 @@ func (s *DatabaseCloudVmClusterResourceCrud) SetData() error { return nil } +func (s *DatabaseCloudVmClusterResourceCrud) mapToCloudAutomationApplyUpdateTimePreference(fieldKeyFormat string) (oci_database.CloudAutomationApplyUpdateTimePreference, error) { + result := oci_database.CloudAutomationApplyUpdateTimePreference{} + + if applyUpdatePreferredEndTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_preferred_end_time")); ok { + tmp := applyUpdatePreferredEndTime.(string) + result.ApplyUpdatePreferredEndTime = &tmp + } + + if applyUpdatePreferredStartTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_preferred_start_time")); ok { + tmp := applyUpdatePreferredStartTime.(string) + result.ApplyUpdatePreferredStartTime = &tmp + } + + return result, nil +} + +func CloudAutomationApplyUpdateTimePreferenceToMap(obj *oci_database.CloudAutomationApplyUpdateTimePreference) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdatePreferredEndTime != nil { + result["apply_update_preferred_end_time"] = string(*obj.ApplyUpdatePreferredEndTime) + } + + if obj.ApplyUpdatePreferredStartTime != nil { + result["apply_update_preferred_start_time"] = string(*obj.ApplyUpdatePreferredStartTime) + } + + return result +} + +func (s *DatabaseCloudVmClusterResourceCrud) mapToCloudAutomationFreezePeriod(fieldKeyFormat string) (oci_database.CloudAutomationFreezePeriod, error) { + result := oci_database.CloudAutomationFreezePeriod{} + + if freezePeriodEndTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period_end_time")); ok { + tmp := freezePeriodEndTime.(string) + result.FreezePeriodEndTime = &tmp + } + + if freezePeriodStartTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period_start_time")); ok { + tmp := freezePeriodStartTime.(string) + result.FreezePeriodStartTime = &tmp + } + + return result, nil +} + +func CloudAutomationFreezePeriodToMap(obj *oci_database.CloudAutomationFreezePeriod) map[string]interface{} { + result := map[string]interface{}{} + + if obj.FreezePeriodEndTime != nil { + result["freeze_period_end_time"] = string(*obj.FreezePeriodEndTime) + } + + if obj.FreezePeriodStartTime != nil { + result["freeze_period_start_time"] = string(*obj.FreezePeriodStartTime) + } + + return result +} + +func (s *DatabaseCloudVmClusterResourceCrud) mapToCloudAutomationUpdateDetails(fieldKeyFormat string) (oci_database.CloudAutomationUpdateDetails, error) { + result := oci_database.CloudAutomationUpdateDetails{} + + if applyUpdateTimePreference, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_time_preference")); ok { + if tmpList := applyUpdateTimePreference.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "apply_update_time_preference"), 0) + tmp, err := s.mapToCloudAutomationApplyUpdateTimePreference(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert apply_update_time_preference, encountered error: %v", err) + } + result.ApplyUpdateTimePreference = &tmp + } + } + + if freezePeriod, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period")); ok { + if tmpList := freezePeriod.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "freeze_period"), 0) + tmp, err := s.mapToCloudAutomationFreezePeriod(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert freeze_period, encountered error: %v", err) + } + result.FreezePeriod = &tmp + } + } + + if isEarlyAdoptionEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_early_adoption_enabled")); ok { + tmp := isEarlyAdoptionEnabled.(bool) + result.IsEarlyAdoptionEnabled = &tmp + } + + if isFreezePeriodEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_freeze_period_enabled")); ok { + tmp := isFreezePeriodEnabled.(bool) + result.IsFreezePeriodEnabled = &tmp + } + + return result, nil +} + +func CloudAutomationUpdateDetailsToMap(obj *oci_database.CloudAutomationUpdateDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdateTimePreference != nil { + result["apply_update_time_preference"] = []interface{}{CloudAutomationApplyUpdateTimePreferenceToMap(obj.ApplyUpdateTimePreference)} + } + + if obj.FreezePeriod != nil { + result["freeze_period"] = []interface{}{CloudAutomationFreezePeriodToMap(obj.FreezePeriod)} + } + + if obj.IsEarlyAdoptionEnabled != nil { + result["is_early_adoption_enabled"] = bool(*obj.IsEarlyAdoptionEnabled) + } + + if obj.IsFreezePeriodEnabled != nil { + result["is_freeze_period_enabled"] = bool(*obj.IsFreezePeriodEnabled) + } + + return result +} + func (s *DatabaseCloudVmClusterResourceCrud) mapToDataCollectionOptions(fieldKeyFormat string) (oci_database.DataCollectionOptions, error) { result := oci_database.DataCollectionOptions{} diff --git a/internal/service/database/database_cloud_vm_clusters_data_source.go b/internal/service/database/database_cloud_vm_clusters_data_source.go index 8cb3f2a747e..b8ca823b7d2 100644 --- a/internal/service/database/database_cloud_vm_clusters_data_source.go +++ b/internal/service/database/database_cloud_vm_clusters_data_source.go @@ -130,6 +130,12 @@ func (s *DatabaseCloudVmClustersDataSourceCrud) SetData() error { cloudVmCluster["backup_subnet_id"] = *r.BackupSubnetId } + if r.CloudAutomationUpdateDetails != nil { + cloudVmCluster["cloud_automation_update_details"] = []interface{}{CloudAutomationUpdateDetailsToMap(r.CloudAutomationUpdateDetails)} + } else { + cloudVmCluster["cloud_automation_update_details"] = nil + } + if r.CloudExadataInfrastructureId != nil { cloudVmCluster["cloud_exadata_infrastructure_id"] = *r.CloudExadataInfrastructureId } diff --git a/internal/service/database/database_export.go b/internal/service/database/database_export.go index 811a760b54b..b4e616049b2 100644 --- a/internal/service/database/database_export.go +++ b/internal/service/database/database_export.go @@ -507,6 +507,18 @@ var exportDatabaseExadbVmClusterHints = &tf_export.TerraformResourceHints{ }, } +var exportDatabaseAutonomousDatabaseSoftwareImageHints = &tf_export.TerraformResourceHints{ + ResourceClass: "oci_database_autonomous_database_software_image", + DatasourceClass: "oci_database_autonomous_database_software_images", + DatasourceItemsAttr: "autonomous_database_software_image_collection", + IsDatasourceCollection: true, + ResourceAbbreviation: "autonomous_database_software_image", + RequireResourceRefresh: true, + DiscoverableLifecycleStates: []string{ + string(oci_database.AutonomousDatabaseSoftwareImageLifecycleStateAvailable), + }, +} + var databaseResourceGraph = tf_export.TerraformResourceGraph{ "oci_identity_compartment": { {TerraformResourceHints: exportDatabaseAutonomousContainerDatabaseHints}, diff --git a/internal/service/database/database_vm_cluster_add_virtual_machine_resource.go b/internal/service/database/database_vm_cluster_add_virtual_machine_resource.go index cb8ba4ed794..d01cca6671f 100644 --- a/internal/service/database/database_vm_cluster_add_virtual_machine_resource.go +++ b/internal/service/database/database_vm_cluster_add_virtual_machine_resource.go @@ -66,6 +66,69 @@ func DatabaseVmClusterAddVirtualMachineResource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "cloud_automation_update_details": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "apply_update_time_preference": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "apply_update_preferred_end_time": { + Type: schema.TypeString, + Computed: true, + }, + "apply_update_preferred_start_time": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "freeze_period": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "freeze_period_end_time": { + Type: schema.TypeString, + Computed: true, + }, + "freeze_period_start_time": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "is_early_adoption_enabled": { + Type: schema.TypeBool, + Computed: true, + }, + "is_freeze_period_enabled": { + Type: schema.TypeBool, + Computed: true, + }, + }, + }, + }, "compartment_id": { Type: schema.TypeString, Computed: true, @@ -301,6 +364,12 @@ func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) SetData() error { s.D.Set("availability_domain", *s.Res.AvailabilityDomain) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } @@ -396,6 +465,74 @@ func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) SetData() error { return nil } +func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) CloudAutomationApplyUpdateTimePreferenceToMap(obj *oci_database.CloudAutomationApplyUpdateTimePreference) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdatePreferredEndTime != nil { + result["apply_update_preferred_end_time"] = string(*obj.ApplyUpdatePreferredEndTime) + } + + if obj.ApplyUpdatePreferredStartTime != nil { + result["apply_update_preferred_start_time"] = string(*obj.ApplyUpdatePreferredStartTime) + } + + return result +} + +func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) CloudAutomationFreezePeriodToMap(obj *oci_database.CloudAutomationFreezePeriod) map[string]interface{} { + result := map[string]interface{}{} + + if obj.FreezePeriodEndTime != nil { + result["freeze_period_end_time"] = string(*obj.FreezePeriodEndTime) + } + + if obj.FreezePeriodStartTime != nil { + result["freeze_period_start_time"] = string(*obj.FreezePeriodStartTime) + } + + return result +} + +func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) CloudAutomationUpdateDetailsToMap(obj *oci_database.CloudAutomationUpdateDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdateTimePreference != nil { + result["apply_update_time_preference"] = []interface{}{CloudAutomationApplyUpdateTimePreferenceToMap(obj.ApplyUpdateTimePreference)} + } + + if obj.FreezePeriod != nil { + result["freeze_period"] = []interface{}{CloudAutomationFreezePeriodToMap(obj.FreezePeriod)} + } + + if obj.IsEarlyAdoptionEnabled != nil { + result["is_early_adoption_enabled"] = bool(*obj.IsEarlyAdoptionEnabled) + } + + if obj.IsFreezePeriodEnabled != nil { + result["is_freeze_period_enabled"] = bool(*obj.IsFreezePeriodEnabled) + } + + return result +} + +func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) DataCollectionOptionsToMap(obj *oci_database.DataCollectionOptions) map[string]interface{} { + result := map[string]interface{}{} + + if obj.IsDiagnosticsEventsEnabled != nil { + result["is_diagnostics_events_enabled"] = bool(*obj.IsDiagnosticsEventsEnabled) + } + + if obj.IsHealthMonitoringEnabled != nil { + result["is_health_monitoring_enabled"] = bool(*obj.IsHealthMonitoringEnabled) + } + + if obj.IsIncidentLogsEnabled != nil { + result["is_incident_logs_enabled"] = bool(*obj.IsIncidentLogsEnabled) + } + + return result +} + func (s *DatabaseVmClusterAddVirtualMachineResourceCrud) mapToDbServerDetails(fieldKeyFormat string) (oci_database.DbServerDetails, error) { result := oci_database.DbServerDetails{} diff --git a/internal/service/database/database_vm_cluster_data_source.go b/internal/service/database/database_vm_cluster_data_source.go index 65e83f8baa9..6cea6dc7b4a 100644 --- a/internal/service/database/database_vm_cluster_data_source.go +++ b/internal/service/database/database_vm_cluster_data_source.go @@ -70,6 +70,12 @@ func (s *DatabaseVmClusterDataSourceCrud) SetData() error { s.D.Set("availability_domain", *s.Res.AvailabilityDomain) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } diff --git a/internal/service/database/database_vm_cluster_remove_virtual_machine_resource.go b/internal/service/database/database_vm_cluster_remove_virtual_machine_resource.go index e7b65218a5a..2da40d1dbf5 100644 --- a/internal/service/database/database_vm_cluster_remove_virtual_machine_resource.go +++ b/internal/service/database/database_vm_cluster_remove_virtual_machine_resource.go @@ -58,6 +58,69 @@ func DatabaseVmClusterRemoveVirtualMachineResource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "cloud_automation_update_details": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "apply_update_time_preference": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "apply_update_preferred_end_time": { + Type: schema.TypeString, + Computed: true, + }, + "apply_update_preferred_start_time": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "freeze_period": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "freeze_period_end_time": { + Type: schema.TypeString, + Computed: true, + }, + "freeze_period_start_time": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "is_early_adoption_enabled": { + Type: schema.TypeBool, + Computed: true, + }, + "is_freeze_period_enabled": { + Type: schema.TypeBool, + Computed: true, + }, + }, + }, + }, "compartment_id": { Type: schema.TypeString, Computed: true, @@ -293,6 +356,12 @@ func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) SetData() error { s.D.Set("availability_domain", *s.Res.AvailabilityDomain) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } @@ -388,6 +457,56 @@ func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) SetData() error { return nil } +func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) CloudAutomationApplyUpdateTimePreferenceToMap(obj *oci_database.CloudAutomationApplyUpdateTimePreference) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdatePreferredEndTime != nil { + result["apply_update_preferred_end_time"] = string(*obj.ApplyUpdatePreferredEndTime) + } + + if obj.ApplyUpdatePreferredStartTime != nil { + result["apply_update_preferred_start_time"] = string(*obj.ApplyUpdatePreferredStartTime) + } + + return result +} + +func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) CloudAutomationFreezePeriodToMap(obj *oci_database.CloudAutomationFreezePeriod) map[string]interface{} { + result := map[string]interface{}{} + + if obj.FreezePeriodEndTime != nil { + result["freeze_period_end_time"] = string(*obj.FreezePeriodEndTime) + } + + if obj.FreezePeriodStartTime != nil { + result["freeze_period_start_time"] = string(*obj.FreezePeriodStartTime) + } + + return result +} + +func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) CloudAutomationUpdateDetailsToMap(obj *oci_database.CloudAutomationUpdateDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdateTimePreference != nil { + result["apply_update_time_preference"] = []interface{}{CloudAutomationApplyUpdateTimePreferenceToMap(obj.ApplyUpdateTimePreference)} + } + + if obj.FreezePeriod != nil { + result["freeze_period"] = []interface{}{CloudAutomationFreezePeriodToMap(obj.FreezePeriod)} + } + + if obj.IsEarlyAdoptionEnabled != nil { + result["is_early_adoption_enabled"] = bool(*obj.IsEarlyAdoptionEnabled) + } + + if obj.IsFreezePeriodEnabled != nil { + result["is_freeze_period_enabled"] = bool(*obj.IsFreezePeriodEnabled) + } + + return result +} + func (s *DatabaseVmClusterRemoveVirtualMachineResourceCrud) mapToDbServerDetails(fieldKeyFormat string) (oci_database.DbServerDetails, error) { result := oci_database.DbServerDetails{} diff --git a/internal/service/database/database_vm_cluster_resource.go b/internal/service/database/database_vm_cluster_resource.go index 062bbf07d7e..f981015c674 100644 --- a/internal/service/database/database_vm_cluster_resource.go +++ b/internal/service/database/database_vm_cluster_resource.go @@ -71,6 +71,84 @@ func DatabaseVmClusterResource() *schema.Resource { }, // Optional + "cloud_automation_update_details": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "apply_update_time_preference": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "apply_update_preferred_end_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "apply_update_preferred_start_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "freeze_period": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "freeze_period_end_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "freeze_period_start_time": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "is_early_adoption_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + "is_freeze_period_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, "data_collection_options": { Type: schema.TypeList, Optional: true, @@ -328,6 +406,17 @@ func (s *DatabaseVmClusterResourceCrud) UpdatedTarget() []string { func (s *DatabaseVmClusterResourceCrud) Create() error { request := oci_database.CreateVmClusterRequest{} + if cloudAutomationUpdateDetails, ok := s.D.GetOkExists("cloud_automation_update_details"); ok { + if tmpList := cloudAutomationUpdateDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "cloud_automation_update_details", 0) + tmp, err := s.mapToCloudAutomationUpdateDetails(fieldKeyFormat) + if err != nil { + return err + } + request.CloudAutomationUpdateDetails = &tmp + } + } + if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok { tmp := compartmentId.(string) request.CompartmentId = &tmp @@ -515,6 +604,17 @@ func (s *DatabaseVmClusterResourceCrud) Update() error { } request := oci_database.UpdateVmClusterRequest{} + if cloudAutomationUpdateDetails, ok := s.D.GetOkExists("cloud_automation_update_details"); ok { + if tmpList := cloudAutomationUpdateDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "cloud_automation_update_details", 0) + tmp, err := s.mapToCloudAutomationUpdateDetails(fieldKeyFormat) + if err != nil { + return err + } + request.CloudAutomationUpdateDetails = &tmp + } + } + if cpuCoreCount, ok := s.D.GetOkExists("cpu_core_count"); ok && s.D.HasChange("cpu_core_count") { tmp := cpuCoreCount.(int) request.CpuCoreCount = &tmp @@ -633,6 +733,12 @@ func (s *DatabaseVmClusterResourceCrud) SetData() error { s.D.Set("availability_domain", *s.Res.AvailabilityDomain) } + if s.Res.CloudAutomationUpdateDetails != nil { + s.D.Set("cloud_automation_update_details", []interface{}{CloudAutomationUpdateDetailsToMap(s.Res.CloudAutomationUpdateDetails)}) + } else { + s.D.Set("cloud_automation_update_details", nil) + } + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } @@ -743,6 +849,126 @@ func (s *DatabaseVmClusterResourceCrud) SetData() error { return nil } +func (s *DatabaseVmClusterResourceCrud) mapToCloudAutomationApplyUpdateTimePreference(fieldKeyFormat string) (oci_database.CloudAutomationApplyUpdateTimePreference, error) { + result := oci_database.CloudAutomationApplyUpdateTimePreference{} + + if applyUpdatePreferredEndTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_preferred_end_time")); ok { + tmp := applyUpdatePreferredEndTime.(string) + result.ApplyUpdatePreferredEndTime = &tmp + } + + if applyUpdatePreferredStartTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_preferred_start_time")); ok { + tmp := applyUpdatePreferredStartTime.(string) + result.ApplyUpdatePreferredStartTime = &tmp + } + + return result, nil +} + +func (s *DatabaseVmClusterResourceCrud) CloudAutomationApplyUpdateTimePreferenceToMap(obj *oci_database.CloudAutomationApplyUpdateTimePreference) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdatePreferredEndTime != nil { + result["apply_update_preferred_end_time"] = string(*obj.ApplyUpdatePreferredEndTime) + } + + if obj.ApplyUpdatePreferredStartTime != nil { + result["apply_update_preferred_start_time"] = string(*obj.ApplyUpdatePreferredStartTime) + } + + return result +} + +func (s *DatabaseVmClusterResourceCrud) mapToCloudAutomationFreezePeriod(fieldKeyFormat string) (oci_database.CloudAutomationFreezePeriod, error) { + result := oci_database.CloudAutomationFreezePeriod{} + + if freezePeriodEndTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period_end_time")); ok { + tmp := freezePeriodEndTime.(string) + result.FreezePeriodEndTime = &tmp + } + + if freezePeriodStartTime, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period_start_time")); ok { + tmp := freezePeriodStartTime.(string) + result.FreezePeriodStartTime = &tmp + } + + return result, nil +} + +func (s *DatabaseVmClusterResourceCrud) CloudAutomationFreezePeriodToMap(obj *oci_database.CloudAutomationFreezePeriod) map[string]interface{} { + result := map[string]interface{}{} + + if obj.FreezePeriodEndTime != nil { + result["freeze_period_end_time"] = string(*obj.FreezePeriodEndTime) + } + + if obj.FreezePeriodStartTime != nil { + result["freeze_period_start_time"] = string(*obj.FreezePeriodStartTime) + } + + return result +} + +func (s *DatabaseVmClusterResourceCrud) mapToCloudAutomationUpdateDetails(fieldKeyFormat string) (oci_database.CloudAutomationUpdateDetails, error) { + result := oci_database.CloudAutomationUpdateDetails{} + + if applyUpdateTimePreference, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "apply_update_time_preference")); ok { + if tmpList := applyUpdateTimePreference.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "apply_update_time_preference"), 0) + tmp, err := s.mapToCloudAutomationApplyUpdateTimePreference(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert apply_update_time_preference, encountered error: %v", err) + } + result.ApplyUpdateTimePreference = &tmp + } + } + + if freezePeriod, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "freeze_period")); ok { + if tmpList := freezePeriod.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "freeze_period"), 0) + tmp, err := s.mapToCloudAutomationFreezePeriod(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert freeze_period, encountered error: %v", err) + } + result.FreezePeriod = &tmp + } + } + + if isEarlyAdoptionEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_early_adoption_enabled")); ok { + tmp := isEarlyAdoptionEnabled.(bool) + result.IsEarlyAdoptionEnabled = &tmp + } + + if isFreezePeriodEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_freeze_period_enabled")); ok { + tmp := isFreezePeriodEnabled.(bool) + result.IsFreezePeriodEnabled = &tmp + } + + return result, nil +} + +func (s *DatabaseVmClusterResourceCrud) CloudAutomationUpdateDetailsToMap(obj *oci_database.CloudAutomationUpdateDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.ApplyUpdateTimePreference != nil { + result["apply_update_time_preference"] = []interface{}{CloudAutomationApplyUpdateTimePreferenceToMap(obj.ApplyUpdateTimePreference)} + } + + if obj.FreezePeriod != nil { + result["freeze_period"] = []interface{}{CloudAutomationFreezePeriodToMap(obj.FreezePeriod)} + } + + if obj.IsEarlyAdoptionEnabled != nil { + result["is_early_adoption_enabled"] = bool(*obj.IsEarlyAdoptionEnabled) + } + + if obj.IsFreezePeriodEnabled != nil { + result["is_freeze_period_enabled"] = bool(*obj.IsFreezePeriodEnabled) + } + + return result +} + func (s *DatabaseVmClusterResourceCrud) mapToDataCollectionOptions(fieldKeyFormat string) (oci_database.DataCollectionOptions, error) { result := oci_database.DataCollectionOptions{} diff --git a/internal/service/database/database_vm_clusters_data_source.go b/internal/service/database/database_vm_clusters_data_source.go index d6e41ab7107..92dba92096b 100644 --- a/internal/service/database/database_vm_clusters_data_source.go +++ b/internal/service/database/database_vm_clusters_data_source.go @@ -123,6 +123,12 @@ func (s *DatabaseVmClustersDataSourceCrud) SetData() error { vmCluster["availability_domain"] = *r.AvailabilityDomain } + if r.CloudAutomationUpdateDetails != nil { + vmCluster["cloud_automation_update_details"] = []interface{}{CloudAutomationUpdateDetailsToMap(r.CloudAutomationUpdateDetails)} + } else { + vmCluster["cloud_automation_update_details"] = nil + } + if r.CpusEnabled != nil { vmCluster["cpus_enabled"] = *r.CpusEnabled vmCluster["cpu_core_count"] = *r.CpusEnabled diff --git a/website/docs/d/database_autonomous_databases.html.markdown b/website/docs/d/database_autonomous_databases.html.markdown index 88f5f9d0d00..2a9d6cfe492 100644 --- a/website/docs/d/database_autonomous_databases.html.markdown +++ b/website/docs/d/database_autonomous_databases.html.markdown @@ -1,22 +1,24 @@ + + --- subcategory: "Database" layout: "oci" -page_title: "Oracle Cloud Infrastructure: oci_database_autonomous_database" -sidebar_current: "docs-oci-datasource-database-autonomous_database" +page_title: "Oracle Cloud Infrastructure: oci_database_autonomous_databases" +sidebar_current: "docs-oci-datasource-database-autonomous_databases" description: |- -Provides details about a specific Autonomous Database in Oracle Cloud Infrastructure Database service + Provides the list of Autonomous Databases in Oracle Cloud Infrastructure Database service --- -# Data Source: oci_database_autonomous_database -This data source provides details about a specific Autonomous Database resource in Oracle Cloud Infrastructure Database service. +# Data Source: oci_database_autonomous_databases +This data source provides the list of Autonomous Databases in Oracle Cloud Infrastructure Database service. -Gets the details of the specified Autonomous Database. +Gets a list of Autonomous Databases based on the query parameters specified. ## Example Usage ```hcl -data "oci_database_autonomous_database" "test_autonomous_database" { +data "oci_database_autonomous_databases" "test_autonomous_databases" { #Required compartment_id = var.compartment_id @@ -124,7 +126,7 @@ The following attributes are exported: This cannot be updated in parallel with any of the following: licenseModel, dbEdition, cpuCoreCount, computeCount, computeModel, adminPassword, whitelistedIps, isMTLSConnectionRequired, privateEndpointLabel, nsgIds, dbVersion, isRefreshable, dbName, scheduledOperations, dbToolsDetails, isLocalDataGuardEnabled, or isFreeTier. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). -* `disaster_recovery_region_type` - The disaster recovery (DR) region type of the Autonomous Database. For Autonomous Database Serverless instances, DR associations have designated primary and standby regions. These region types do not change when the database changes roles. The standby region in DR associations can be the same region as the primary region, or they can be in a remote regions. Some database administration operations may be available only in the primary region of the DR association, and cannot be performed when the database using the primary role is operating in a remote region. +* `disaster_recovery_region_type` - **Deprecated.** The disaster recovery (DR) region type of the Autonomous Database. For Autonomous Database Serverless instances, DR associations have designated primary and standby regions. These region types do not change when the database changes roles. The standby region in DR associations can be the same region as the primary region, or they can be in a remote regions. Some database administration operations may be available only in the primary region of the DR association, and cannot be performed when the database using the primary role is operating in a remote region. * `display_name` - The user-friendly name for the Autonomous Database. The name does not have to be unique. * `failed_data_recovery_in_seconds` - Indicates the number of seconds of data loss for a Data Guard failover. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` diff --git a/website/docs/d/database_autonomous_databases_clones.html.markdown b/website/docs/d/database_autonomous_databases_clones.html.markdown index a4cb7a6df98..6815b887e84 100644 --- a/website/docs/d/database_autonomous_databases_clones.html.markdown +++ b/website/docs/d/database_autonomous_databases_clones.html.markdown @@ -126,7 +126,7 @@ The following attributes are exported: This cannot be updated in parallel with any of the following: licenseModel, dbEdition, cpuCoreCount, computeCount, computeModel, adminPassword, whitelistedIps, isMTLSConnectionRequired, privateEndpointLabel, nsgIds, dbVersion, isRefreshable, dbName, scheduledOperations, dbToolsDetails, isLocalDataGuardEnabled, or isFreeTier. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). -* `disaster_recovery_region_type` - The disaster recovery (DR) region type of the Autonomous Database. For Autonomous Database Serverless instances, DR associations have designated primary and standby regions. These region types do not change when the database changes roles. The standby region in DR associations can be the same region as the primary region, or they can be in a remote regions. Some database administration operations may be available only in the primary region of the DR association, and cannot be performed when the database using the primary role is operating in a remote region. +* `disaster_recovery_region_type` - **Deprecated.** The disaster recovery (DR) region type of the Autonomous Database. For Autonomous Database Serverless instances, DR associations have designated primary and standby regions. These region types do not change when the database changes roles. The standby region in DR associations can be the same region as the primary region, or they can be in a remote regions. Some database administration operations may be available only in the primary region of the DR association, and cannot be performed when the database using the primary role is operating in a remote region. * `display_name` - The user-friendly name for the Autonomous Database. The name does not have to be unique. * `failed_data_recovery_in_seconds` - Indicates the number of seconds of data loss for a Data Guard failover. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` diff --git a/website/docs/d/database_autonomous_exadata_infrastructure.html.markdown b/website/docs/d/database_autonomous_exadata_infrastructure.html.markdown index 7148f67c824..c923a70e934 100644 --- a/website/docs/d/database_autonomous_exadata_infrastructure.html.markdown +++ b/website/docs/d/database_autonomous_exadata_infrastructure.html.markdown @@ -59,6 +59,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `next_maintenance_run_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next maintenance run. * `nsg_ids` - The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** diff --git a/website/docs/d/database_autonomous_exadata_infrastructures.html.markdown b/website/docs/d/database_autonomous_exadata_infrastructures.html.markdown index 2c86df6604a..f1375804ff9 100644 --- a/website/docs/d/database_autonomous_exadata_infrastructures.html.markdown +++ b/website/docs/d/database_autonomous_exadata_infrastructures.html.markdown @@ -73,6 +73,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `next_maintenance_run_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next maintenance run. * `nsg_ids` - The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** diff --git a/website/docs/d/database_autonomous_vm_cluster.html.markdown b/website/docs/d/database_autonomous_vm_cluster.html.markdown index 230641085a6..fc5aa667395 100644 --- a/website/docs/d/database_autonomous_vm_cluster.html.markdown +++ b/website/docs/d/database_autonomous_vm_cluster.html.markdown @@ -67,6 +67,7 @@ The following attributes are exported: * `months` - Months during the year when maintenance should be performed. * `name` - Name of the month of the year. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) to be enabled per OCPU or ECPU. diff --git a/website/docs/d/database_autonomous_vm_clusters.html.markdown b/website/docs/d/database_autonomous_vm_clusters.html.markdown index b80f27082c9..8580cb9c01c 100644 --- a/website/docs/d/database_autonomous_vm_clusters.html.markdown +++ b/website/docs/d/database_autonomous_vm_clusters.html.markdown @@ -81,6 +81,7 @@ The following attributes are exported: * `months` - Months during the year when maintenance should be performed. * `name` - Name of the month of the year. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) to be enabled per OCPU or ECPU. diff --git a/website/docs/d/database_cloud_autonomous_vm_cluster.html.markdown b/website/docs/d/database_cloud_autonomous_vm_cluster.html.markdown index ad8bdf58ea9..f33f7659319 100644 --- a/website/docs/d/database_cloud_autonomous_vm_cluster.html.markdown +++ b/website/docs/d/database_cloud_autonomous_vm_cluster.html.markdown @@ -80,6 +80,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) enabled per OCPU or ECPU. diff --git a/website/docs/d/database_cloud_autonomous_vm_clusters.html.markdown b/website/docs/d/database_cloud_autonomous_vm_clusters.html.markdown index a8a60e62a51..9aff0a694b7 100644 --- a/website/docs/d/database_cloud_autonomous_vm_clusters.html.markdown +++ b/website/docs/d/database_cloud_autonomous_vm_clusters.html.markdown @@ -96,6 +96,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) enabled per OCPU or ECPU. diff --git a/website/docs/d/database_cloud_exadata_infrastructure.html.markdown b/website/docs/d/database_cloud_exadata_infrastructure.html.markdown index 584bc6c3e12..6f8fca7e1ac 100644 --- a/website/docs/d/database_cloud_exadata_infrastructure.html.markdown +++ b/website/docs/d/database_cloud_exadata_infrastructure.html.markdown @@ -72,6 +72,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/d/database_cloud_exadata_infrastructures.html.markdown b/website/docs/d/database_cloud_exadata_infrastructures.html.markdown index 02019755861..8a542c21ff9 100644 --- a/website/docs/d/database_cloud_exadata_infrastructures.html.markdown +++ b/website/docs/d/database_cloud_exadata_infrastructures.html.markdown @@ -86,6 +86,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/d/database_cloud_vm_cluster.html.markdown b/website/docs/d/database_cloud_vm_cluster.html.markdown index 4f4b4e805bd..7ba0d3c6da4 100644 --- a/website/docs/d/database_cloud_vm_cluster.html.markdown +++ b/website/docs/d/database_cloud_vm_cluster.html.markdown @@ -38,6 +38,15 @@ The following attributes are exported: * `backup_subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the backup network subnet associated with the cloud VM cluster. **Subnet Restriction:** See the subnet restrictions information for **subnetId**. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `cloud_exadata_infrastructure_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cloud Exadata infrastructure. * `cluster_name` - The cluster name for cloud VM cluster. The cluster name must begin with an alphabetic character, and may contain hyphens (-). Underscores (_) are not permitted. The cluster name can be no longer than 11 characters and is not case sensitive. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. diff --git a/website/docs/d/database_cloud_vm_clusters.html.markdown b/website/docs/d/database_cloud_vm_clusters.html.markdown index b443062142d..987d49b8cc0 100644 --- a/website/docs/d/database_cloud_vm_clusters.html.markdown +++ b/website/docs/d/database_cloud_vm_clusters.html.markdown @@ -52,6 +52,15 @@ The following attributes are exported: * `backup_subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the backup network subnet associated with the cloud VM cluster. **Subnet Restriction:** See the subnet restrictions information for **subnetId**. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `cloud_exadata_infrastructure_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cloud Exadata infrastructure. * `cluster_name` - The cluster name for cloud VM cluster. The cluster name must begin with an alphabetic character, and may contain hyphens (-). Underscores (_) are not permitted. The cluster name can be no longer than 11 characters and is not case sensitive. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. diff --git a/website/docs/d/database_db_systems.html.markdown b/website/docs/d/database_db_systems.html.markdown index 869594670fd..a838757e881 100644 --- a/website/docs/d/database_db_systems.html.markdown +++ b/website/docs/d/database_db_systems.html.markdown @@ -99,6 +99,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `memory_size_in_gbs` - Memory allocated to the DB system, in gigabytes. * `next_maintenance_run_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next maintenance run. diff --git a/website/docs/d/database_exadata_infrastructure.html.markdown b/website/docs/d/database_exadata_infrastructure.html.markdown index b121ac1f1c8..f7673fad0b2 100644 --- a/website/docs/d/database_exadata_infrastructure.html.markdown +++ b/website/docs/d/database_exadata_infrastructure.html.markdown @@ -91,6 +91,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/d/database_exadata_infrastructures.html.markdown b/website/docs/d/database_exadata_infrastructures.html.markdown index 9641e51b466..c09a7980f14 100644 --- a/website/docs/d/database_exadata_infrastructures.html.markdown +++ b/website/docs/d/database_exadata_infrastructures.html.markdown @@ -101,6 +101,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/d/database_vm_cluster.html.markdown b/website/docs/d/database_vm_cluster.html.markdown index fa8d7757d72..ff48b13f95b 100644 --- a/website/docs/d/database_vm_cluster.html.markdown +++ b/website/docs/d/database_vm_cluster.html.markdown @@ -34,6 +34,15 @@ The following arguments are supported: The following attributes are exported: * `availability_domain` - The name of the availability domain that the VM cluster is located in. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpus_enabled` - The number of enabled CPU cores. * `data_collection_options` - Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. diff --git a/website/docs/d/database_vm_clusters.html.markdown b/website/docs/d/database_vm_clusters.html.markdown index 6d66b5227a5..ca7ab15d6a8 100644 --- a/website/docs/d/database_vm_clusters.html.markdown +++ b/website/docs/d/database_vm_clusters.html.markdown @@ -49,6 +49,15 @@ The following attributes are exported: The following attributes are exported: * `availability_domain` - The name of the availability domain that the VM cluster is located in. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpus_enabled` - The number of enabled CPU cores. * `data_collection_options` - Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. diff --git a/website/docs/guides/resource_discovery.html.markdown b/website/docs/guides/resource_discovery.html.markdown index 5f165562ddd..06966f3ac38 100644 --- a/website/docs/guides/resource_discovery.html.markdown +++ b/website/docs/guides/resource_discovery.html.markdown @@ -620,6 +620,7 @@ database * oci\_database\_application\_vip * oci\_database\_oneoff\_patch * oci\_database\_db\_node\_console\_history +* oci\_database\_autonomous\_database\_software\_image * oci\_database\_exascale\_db\_storage\_vault * oci\_database\_exadb\_vm\_cluster diff --git a/website/docs/r/database_autonomous_container_database.html.markdown b/website/docs/r/database_autonomous_container_database.html.markdown index 9ded57be3fa..3611df4db30 100644 --- a/website/docs/r/database_autonomous_container_database.html.markdown +++ b/website/docs/r/database_autonomous_container_database.html.markdown @@ -251,6 +251,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) enabled per ECPU or OCPU in the Autonomous VM Cluster. * `net_services_architecture` - Enabling SHARED server architecture enables a database server to allow many client processes to share very few server processes, thereby increasing the number of supported users. diff --git a/website/docs/r/database_autonomous_database.html.markdown b/website/docs/r/database_autonomous_database.html.markdown index c68e0895006..c19ae13a039 100644 --- a/website/docs/r/database_autonomous_database.html.markdown +++ b/website/docs/r/database_autonomous_database.html.markdown @@ -384,7 +384,7 @@ The following attributes are exported: * AJD - indicates an Autonomous JSON Database * APEX - indicates an Autonomous Database with the Oracle APEX Application Development workload type. - This cannot be updated in parallel with any of the following: licenseModel, dbEdition, cpuCoreCount, computeCount, computeModel, adminPassword, whitelistedIps, isMTLSConnectionRequired, privateEndpointLabel, nsgIds, dbVersion, isRefreshable, dbName, scheduledOperations, dbToolsDetails, isLocalDataGuardEnabled, or isFreeTier. + This cannot be updated in parallel with any of the following: licenseModel, dbEdition, cpuCoreCount, computeCount, computeModel, adminPassword, whitelistedIps, isMTLSConnectionRequired, privateEndpointLabel, nsgIds, dbVersion, isRefreshable, dbName, scheduledOperations, dbToolsDetails, isLocalDataGuardEnabled, or isFreeTier. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). * `disaster_recovery_region_type` - **Deprecated** The disaster recovery (DR) region type of the Autonomous Database. For Serverless Autonomous Databases, DR associations have designated primary (`PRIMARY`) and standby (`REMOTE`) regions. These region types do not change when the database changes roles. The standby region in DR associations can be the same region as the primary region, or they can be in a remote regions. Some database administration operations may be available only in the primary region of the DR association, and cannot be performed when the database using the primary role is operating in a remote region. * `display_name` - The user-friendly name for the Autonomous Database. The name does not have to be unique. diff --git a/website/docs/r/database_autonomous_database_saas_admin_user.html.markdown b/website/docs/r/database_autonomous_database_saas_admin_user.html.markdown index f1893ddedec..615034cfbf7 100644 --- a/website/docs/r/database_autonomous_database_saas_admin_user.html.markdown +++ b/website/docs/r/database_autonomous_database_saas_admin_user.html.markdown @@ -51,6 +51,8 @@ The following attributes are exported: * `apex_version` - The Oracle APEX Application Development version. * `ords_version` - The Oracle REST Data Services (ORDS) version. * `are_primary_whitelisted_ips_used` - This field will be null if the Autonomous Database is not Data Guard enabled or Access Control is disabled. It's value would be `TRUE` if Autonomous Database is Data Guard enabled and Access Control is enabled and if the Autonomous Database uses primary IP access control list (ACL) for standby. It's value would be `FALSE` if Autonomous Database is Data Guard enabled and Access Control is enabled and if the Autonomous Database uses different IP access control list (ACL) for standby compared to primary. +* `auto_refresh_frequency_in_seconds` - The frequency a refreshable clone is refreshed after auto-refresh is enabled. The minimum is 1 hour. The maximum is 7 days. The date and time that auto-refresh is enabled is controlled by the `timeOfAutoRefreshStart` parameter. +* `auto_refresh_point_lag_in_seconds` - The time, in seconds, the data of the refreshable clone lags the primary database at the point of refresh. The minimum is 0 minutes (0 mins means refresh to the latest available timestamp). The maximum is 7 days. The lag time increases after refreshing until the next data refresh happens. * `autonomous_container_database_id` - The Autonomous Container Database [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). Used only by Autonomous Database on Dedicated Exadata Infrastructure. * `autonomous_maintenance_schedule_type` - The maintenance schedule type of the Autonomous Database Serverless. An EARLY maintenance schedule follows a schedule applying patches prior to the REGULAR schedule. A REGULAR maintenance schedule follows the normal cycle * `available_upgrade_versions` - List of Oracle Database versions available for a database upgrade. If there are no version upgrades available, this list is empty. @@ -132,6 +134,7 @@ The following attributes are exported: * `is_auto_scaling_for_storage_enabled` - Indicates if auto scaling is enabled for the Autonomous Database storage. The default value is `FALSE`. * `is_data_guard_enabled` - **Deprecated.** Indicates whether the Autonomous Database has local (in-region) Data Guard enabled. Not applicable to cross-region Autonomous Data Guard associations, or to Autonomous Databases using dedicated Exadata infrastructure or Exadata Cloud@Customer infrastructure. * `is_dedicated` - True if the database uses [dedicated Exadata infrastructure](https://docs.oracle.com/en/cloud/paas/autonomous-database/index.html). +* `is_dev_tier` - This project introduces Autonomous Database for Developers (ADB-Dev), a free tier on dedicated infrastructure, and Cloud@Customer for database development purposes. ADB-Dev enables ExaDB customers to experiment with ADB for free and incentivizes enterprises to use ADB for new development projects.Note that ADB-Dev have 4 CPU and 20GB of memory. For ADB-Dev , memory and CPU cannot be scaled * `is_free_tier` - Indicates if this is an Always Free resource. The default value is false. Note that Always Free Autonomous Databases have 1 CPU and 20GB of memory. For Always Free databases, memory and CPU cannot be scaled. This cannot be updated in parallel with any of the following: licenseModel, dbEdition, cpuCoreCount, computeCount, computeModel, adminPassword, whitelistedIps, isMTLSConnectionRequired, openMode, permissionLevel, privateEndpointLabel, nsgIds, dbVersion, isRefreshable, dbName, scheduledOperations, dbToolsDetails, or isLocalDataGuardEnabled @@ -179,6 +182,7 @@ The following attributes are exported: * `time_of_backup` - The timestamp for the long-term backup schedule. For a MONTHLY cadence, months having fewer days than the provided date will have the backup taken on the last day of that month. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) enabled per ECPU or OCPU. * `ncharacter_set` - The national character set for the autonomous database. The default is AL16UTF16. Allowed values are: AL16UTF16 or UTF8. +* `net_services_architecture` - Enabling SHARED server architecture enables a database server to allow many client processes to share very few server processes, thereby increasing the number of supported users. * `next_long_term_backup_time_stamp` - The date and time when the next long-term backup would be created. * `nsg_ids` - The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** * A network security group (NSG) is optional for Autonomous Databases with private access. The nsgIds list can be empty. @@ -261,6 +265,7 @@ The following attributes are exported: * `time_local_data_guard_enabled` - The date and time that Autonomous Data Guard was enabled for an Autonomous Database where the standby was provisioned in the same region as the primary database. * `time_maintenance_begin` - The date and time when maintenance will begin. * `time_maintenance_end` - The date and time when maintenance will end. +* `time_of_auto_refresh_start` - The the date and time that auto-refreshing will begin for an Autonomous Database refreshable clone. This value controls only the start time for the first refresh operation. Subsequent (ongoing) refresh operations have start times controlled by the value of the `autoRefreshFrequencyInSeconds` parameter. * `time_of_joining_resource_pool` - The time the member joined the resource pool. * `time_of_last_failover` - The timestamp of the last failover operation. * `time_of_last_refresh` - The date and time when last refresh happened. @@ -268,7 +273,6 @@ The following attributes are exported: * `time_of_last_switchover` - The timestamp of the last switchover operation for the Autonomous Database. * `time_of_next_refresh` - The date and time of next refresh. * `time_reclamation_of_free_autonomous_database` - The date and time the Always Free database will be stopped because of inactivity. If this time is reached without any database activity, the database will automatically be put into the STOPPED state. -* `time_undeleted` - The date and time the Autonomous Database was most recently undeleted. * `time_until_reconnect_clone_enabled` - The time and date as an RFC3339 formatted string, e.g., 2022-01-01T12:00:00.000Z, to set the limit for a refreshable clone to be reconnected to its source database. * `total_backup_storage_size_in_gbs` - The backup storage to the database. * `used_data_storage_size_in_gbs` - The storage space consumed by Autonomous Database in GBs. diff --git a/website/docs/r/database_autonomous_exadata_infrastructure.html.markdown b/website/docs/r/database_autonomous_exadata_infrastructure.html.markdown index a64033bfd36..58a34131320 100644 --- a/website/docs/r/database_autonomous_exadata_infrastructure.html.markdown +++ b/website/docs/r/database_autonomous_exadata_infrastructure.html.markdown @@ -47,6 +47,7 @@ resource "oci_database_autonomous_exadata_infrastructure" "test_autonomous_exada } patching_mode = var.autonomous_exadata_infrastructure_maintenance_window_details_patching_mode preference = var.autonomous_exadata_infrastructure_maintenance_window_details_preference + skip_ru = var.autonomous_exadata_infrastructure_maintenance_window_details_skip_ru weeks_of_month = var.autonomous_exadata_infrastructure_maintenance_window_details_weeks_of_month } nsg_ids = var.autonomous_exadata_infrastructure_nsg_ids @@ -79,6 +80,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Optional) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Optional) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Optional) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `nsg_ids` - (Optional) (Updatable) The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** * A network security group (NSG) is optional for Autonomous Databases with private access. The nsgIds list can be empty. @@ -124,6 +126,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `next_maintenance_run_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next maintenance run. * `nsg_ids` - The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** diff --git a/website/docs/r/database_autonomous_vm_cluster.html.markdown b/website/docs/r/database_autonomous_vm_cluster.html.markdown index 2f861fca747..2774d9c3fd5 100644 --- a/website/docs/r/database_autonomous_vm_cluster.html.markdown +++ b/website/docs/r/database_autonomous_vm_cluster.html.markdown @@ -49,6 +49,7 @@ resource "oci_database_autonomous_vm_cluster" "test_autonomous_vm_cluster" { } patching_mode = var.autonomous_vm_cluster_maintenance_window_details_patching_mode preference = var.autonomous_vm_cluster_maintenance_window_details_preference + skip_ru = var.autonomous_vm_cluster_maintenance_window_details_skip_ru weeks_of_month = var.autonomous_vm_cluster_maintenance_window_details_weeks_of_month } memory_per_oracle_compute_unit_in_gbs = var.autonomous_vm_cluster_memory_per_oracle_compute_unit_in_gbs @@ -87,6 +88,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Optional) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Optional) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Optional) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `memory_per_oracle_compute_unit_in_gbs` - (Optional) The amount of memory (in GBs) to be enabled per OCPU or ECPU. * `scan_listener_port_non_tls` - (Optional) The SCAN Listener Non TLS port number. Default value is 1521. @@ -135,6 +137,7 @@ The following attributes are exported: * `months` - Months during the year when maintenance should be performed. * `name` - Name of the month of the year. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) to be enabled per OCPU or ECPU. diff --git a/website/docs/r/database_cloud_autonomous_vm_cluster.html.markdown b/website/docs/r/database_cloud_autonomous_vm_cluster.html.markdown index c6e91a79325..2a208545f8c 100644 --- a/website/docs/r/database_cloud_autonomous_vm_cluster.html.markdown +++ b/website/docs/r/database_cloud_autonomous_vm_cluster.html.markdown @@ -52,6 +52,7 @@ resource "oci_database_cloud_autonomous_vm_cluster" "test_cloud_autonomous_vm_cl } patching_mode = var.cloud_autonomous_vm_cluster_maintenance_window_details_patching_mode preference = var.cloud_autonomous_vm_cluster_maintenance_window_details_preference + skip_ru = var.cloud_autonomous_vm_cluster_maintenance_window_details_skip_ru weeks_of_month = var.cloud_autonomous_vm_cluster_maintenance_window_details_weeks_of_month } memory_per_oracle_compute_unit_in_gbs = var.cloud_autonomous_vm_cluster_memory_per_oracle_compute_unit_in_gbs @@ -97,6 +98,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Optional) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Optional) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Optional) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `memory_per_oracle_compute_unit_in_gbs` - (Optional) The amount of memory (in GBs) to be enabled per OCPU or ECPU. * `nsg_ids` - (Optional) (Updatable) The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** @@ -160,6 +162,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_acds_lowest_scaled_value` - The lowest value to which maximum number of ACDs can be scaled down. * `memory_per_oracle_compute_unit_in_gbs` - The amount of memory (in GBs) enabled per OCPU or ECPU. diff --git a/website/docs/r/database_cloud_exadata_infrastructure.html.markdown b/website/docs/r/database_cloud_exadata_infrastructure.html.markdown index 9e7e1ffc252..4f172c66974 100644 --- a/website/docs/r/database_cloud_exadata_infrastructure.html.markdown +++ b/website/docs/r/database_cloud_exadata_infrastructure.html.markdown @@ -51,6 +51,7 @@ resource "oci_database_cloud_exadata_infrastructure" "test_cloud_exadata_infrast } patching_mode = var.cloud_exadata_infrastructure_maintenance_window_patching_mode preference = var.cloud_exadata_infrastructure_maintenance_window_preference + skip_ru = var.cloud_exadata_infrastructure_maintenance_window_skip_ru weeks_of_month = var.cloud_exadata_infrastructure_maintenance_window_weeks_of_month } storage_count = var.cloud_exadata_infrastructure_storage_count @@ -86,6 +87,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Optional) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Optional) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Optional) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `shape` - (Required) The shape of the cloud Exadata infrastructure resource. * `storage_count` - (Optional) (Updatable) The number of storage servers for the cloud Exadata infrastructure. @@ -138,6 +140,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/r/database_cloud_vm_cluster.html.markdown b/website/docs/r/database_cloud_vm_cluster.html.markdown index 0ba20b9a55c..8c67832a381 100644 --- a/website/docs/r/database_cloud_vm_cluster.html.markdown +++ b/website/docs/r/database_cloud_vm_cluster.html.markdown @@ -30,6 +30,24 @@ resource "oci_database_cloud_vm_cluster" "test_cloud_vm_cluster" { #Optional backup_network_nsg_ids = var.cloud_vm_cluster_backup_network_nsg_ids + cloud_automation_update_details { + + #Optional + apply_update_time_preference { + + #Optional + apply_update_preferred_end_time = var.cloud_vm_cluster_cloud_automation_update_details_apply_update_time_preference_apply_update_preferred_end_time + apply_update_preferred_start_time = var.cloud_vm_cluster_cloud_automation_update_details_apply_update_time_preference_apply_update_preferred_start_time + } + freeze_period { + + #Optional + freeze_period_end_time = var.cloud_vm_cluster_cloud_automation_update_details_freeze_period_freeze_period_end_time + freeze_period_start_time = var.cloud_vm_cluster_cloud_automation_update_details_freeze_period_freeze_period_start_time + } + is_early_adoption_enabled = var.cloud_vm_cluster_cloud_automation_update_details_is_early_adoption_enabled + is_freeze_period_enabled = var.cloud_vm_cluster_cloud_automation_update_details_is_freeze_period_enabled + } cluster_name = var.cloud_vm_cluster_cluster_name data_collection_options { @@ -72,6 +90,15 @@ The following arguments are supported: * `backup_network_nsg_ids` - (Optional) (Updatable) A list of the [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the network security groups (NSGs) that the backup network of this DB system belongs to. Setting this to an empty array after the list is created removes the resource from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). Applicable only to Exadata systems. * `backup_subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the backup network subnet associated with the cloud VM cluster. +* `cloud_automation_update_details` - (Optional) (Updatable) Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - (Optional) (Updatable) Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - (Optional) (Updatable) End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - (Optional) (Updatable) Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - (Optional) (Updatable) Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - (Optional) (Updatable) End time of the freeze period cycle. + * `freeze_period_start_time` - (Optional) (Updatable) Start time of the freeze period cycle. + * `is_early_adoption_enabled` - (Optional) (Updatable) Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - (Optional) (Updatable) Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `cloud_exadata_infrastructure_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cloud Exadata infrastructure resource. * `cluster_name` - (Optional) The cluster name for cloud VM cluster. The cluster name must begin with an alphabetic character, and may contain hyphens (-). Underscores (_) are not permitted. The cluster name can be no longer than 11 characters and is not case sensitive. * `compartment_id` - (Required) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. @@ -133,6 +160,15 @@ The following attributes are exported: * `backup_subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the backup network subnet associated with the cloud VM cluster. **Subnet Restriction:** See the subnet restrictions information for **subnetId**. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `cloud_exadata_infrastructure_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the cloud Exadata infrastructure. * `cluster_name` - The cluster name for cloud VM cluster. The cluster name must begin with an alphabetic character, and may contain hyphens (-). Underscores (_) are not permitted. The cluster name can be no longer than 11 characters and is not case sensitive. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. diff --git a/website/docs/r/database_db_system.html.markdown b/website/docs/r/database_db_system.html.markdown index 59f4211e489..7e9959478a9 100644 --- a/website/docs/r/database_db_system.html.markdown +++ b/website/docs/r/database_db_system.html.markdown @@ -140,6 +140,7 @@ resource "oci_database_db_system" "test_db_system" { } patching_mode = var.db_system_maintenance_window_details_patching_mode preference = var.db_system_maintenance_window_details_preference + skip_ru = var.db_system_maintenance_window_details_skip_ru weeks_of_month = var.db_system_maintenance_window_details_weeks_of_month } node_count = var.db_system_node_count @@ -274,6 +275,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Applicable when source=NONE) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Applicable when source=NONE) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Applicable when source=NONE) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `node_count` - (Optional) The number of nodes to launch for a 2-node RAC virtual machine DB system. Specify either 1 or 2. * `nsg_ids` - (Optional) (Updatable) The list of [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) for the network security groups (NSGs) to which this resource belongs. Setting this to an empty list removes all resources from all NSGs. For more information about NSGs, see [Security Rules](https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/securityrules.htm). **NsgIds restrictions:** @@ -360,6 +362,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `memory_size_in_gbs` - Memory allocated to the DB system, in gigabytes. * `next_maintenance_run_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the next maintenance run. diff --git a/website/docs/r/database_exadata_infrastructure.html.markdown b/website/docs/r/database_exadata_infrastructure.html.markdown index 7abc59b426b..eb5564dd252 100644 --- a/website/docs/r/database_exadata_infrastructure.html.markdown +++ b/website/docs/r/database_exadata_infrastructure.html.markdown @@ -68,6 +68,7 @@ resource "oci_database_exadata_infrastructure" "test_exadata_infrastructure" { } patching_mode = var.exadata_infrastructure_maintenance_window_patching_mode preference = var.exadata_infrastructure_maintenance_window_preference + skip_ru = var.exadata_infrastructure_maintenance_window_skip_ru weeks_of_month = var.exadata_infrastructure_maintenance_window_weeks_of_month } multi_rack_configuration_file = var.exadata_infrastructure_multi_rack_configuration_file @@ -122,6 +123,7 @@ The following arguments are supported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - (Optional) (Updatable) The maintenance window scheduling preference. + * `skip_ru` - (Optional) (Updatable) If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - (Optional) (Updatable) Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `multi_rack_configuration_file` - (Optional) (Updatable) The base64 encoded Multi-Rack configuration json file. * `netmask` - (Required) (Updatable) The netmask for the control plane network. @@ -195,6 +197,7 @@ The following attributes are exported: *IMPORTANT*: Non-rolling infrastructure patching involves system down time. See [Oracle-Managed Infrastructure Maintenance Updates](https://docs.cloud.oracle.com/iaas/Content/Database/Concepts/examaintenance.htm#Oracle) for more information. * `preference` - The maintenance window scheduling preference. + * `skip_ru` - If true, skips the release update (RU) for the quarter. You cannot skip two consecutive quarters. An RU skip request will only be honoured if the current version of the Autonomous Container Database is supported for current quarter. * `weeks_of_month` - Weeks during the month when maintenance should be performed. Weeks start on the 1st, 8th, 15th, and 22nd days of the month, and have a duration of 7 days. Weeks start and end based on calendar dates, not days of the week. For example, to allow maintenance during the 2nd week of the month (from the 8th day to the 14th day of the month), use the value 2. Maintenance cannot be scheduled for the fifth week of months that contain more than 28 days. Note that this parameter works in conjunction with the daysOfWeek and hoursOfDay parameters to allow you to specify specific days of the week and hours that maintenance will be performed. * `max_cpu_count` - The total number of CPU cores available. * `max_data_storage_in_tbs` - The total available DATA disk group size. diff --git a/website/docs/r/database_vm_cluster.html.markdown b/website/docs/r/database_vm_cluster.html.markdown index 7d972a5bd4f..b44cadb490f 100644 --- a/website/docs/r/database_vm_cluster.html.markdown +++ b/website/docs/r/database_vm_cluster.html.markdown @@ -27,6 +27,24 @@ resource "oci_database_vm_cluster" "test_vm_cluster" { vm_cluster_network_id = oci_database_vm_cluster_network.test_vm_cluster_network.id #Optional + cloud_automation_update_details { + + #Optional + apply_update_time_preference { + + #Optional + apply_update_preferred_end_time = var.vm_cluster_cloud_automation_update_details_apply_update_time_preference_apply_update_preferred_end_time + apply_update_preferred_start_time = var.vm_cluster_cloud_automation_update_details_apply_update_time_preference_apply_update_preferred_start_time + } + freeze_period { + + #Optional + freeze_period_end_time = var.vm_cluster_cloud_automation_update_details_freeze_period_freeze_period_end_time + freeze_period_start_time = var.vm_cluster_cloud_automation_update_details_freeze_period_freeze_period_start_time + } + is_early_adoption_enabled = var.vm_cluster_cloud_automation_update_details_is_early_adoption_enabled + is_freeze_period_enabled = var.vm_cluster_cloud_automation_update_details_is_freeze_period_enabled + } data_collection_options { #Optional @@ -58,6 +76,15 @@ resource "oci_database_vm_cluster" "test_vm_cluster" { The following arguments are supported: +* `cloud_automation_update_details` - (Optional) (Updatable) Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - (Optional) (Updatable) Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - (Optional) (Updatable) End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - (Optional) (Updatable) Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - (Optional) (Updatable) Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - (Optional) (Updatable) End time of the freeze period cycle. + * `freeze_period_start_time` - (Optional) (Updatable) Start time of the freeze period cycle. + * `is_early_adoption_enabled` - (Optional) (Updatable) Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - (Optional) (Updatable) Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - (Required) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpu_core_count` - (Required) (Updatable) The number of CPU cores to enable for the VM cluster. *Note:* If `cpu_core_count` is modified in `DISCONNECTED` state, the provider could experience a drift in Terraform state. To remediate this, refresh your Terraform state and update the configuration file when the Oracle Cloud Infrastructure connection is established. * `data_collection_options` - (Optional) (Updatable) Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. @@ -94,6 +121,15 @@ Any change to a property that does not support update will force the destruction The following attributes are exported: * `availability_domain` - The name of the availability domain that the VM cluster is located in. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpus_enabled` - The number of enabled CPU cores. * `data_collection_options` - Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. diff --git a/website/docs/r/database_vm_cluster_add_virtual_machine.html.markdown b/website/docs/r/database_vm_cluster_add_virtual_machine.html.markdown index 2c955b398c2..83ccf53d6a5 100644 --- a/website/docs/r/database_vm_cluster_add_virtual_machine.html.markdown +++ b/website/docs/r/database_vm_cluster_add_virtual_machine.html.markdown @@ -45,6 +45,15 @@ Any change to a property that does not support update will force the destruction The following attributes are exported: * `availability_domain` - The name of the availability domain that the VM cluster is located in. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpus_enabled` - The number of enabled CPU cores. * `data_collection_options` - Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. diff --git a/website/docs/r/database_vm_cluster_remove_virtual_machine.html.markdown b/website/docs/r/database_vm_cluster_remove_virtual_machine.html.markdown index 58f21149c33..f10f0fcd25a 100644 --- a/website/docs/r/database_vm_cluster_remove_virtual_machine.html.markdown +++ b/website/docs/r/database_vm_cluster_remove_virtual_machine.html.markdown @@ -43,6 +43,15 @@ Any change to a property that does not support update will force the destruction The following attributes are exported: * `availability_domain` - The name of the availability domain that the VM cluster is located in. +* `cloud_automation_update_details` - Specifies the properties necessary for cloud automation updates. This includes modifying the apply update time preference, enabling or disabling early adoption, and enabling, modifying, or disabling the update freeze period. + * `apply_update_time_preference` - Configure the time slot for applying VM cloud automation software updates to the cluster. When nothing is selected, the default time slot is 12 AM to 2 AM UTC. Any 2-hour slot is available starting at 12 AM. + * `apply_update_preferred_end_time` - End time for polling VM cloud automation software updates for the cluster. If the endTime is not specified, 2 AM UTC is used by default. + * `apply_update_preferred_start_time` - Start time for polling VM cloud automation software updates for the cluster. If the startTime is not specified, 12 AM UTC is used by default. + * `freeze_period` - Enables a freeze period for the VM cluster prohibiting the VMs from getting cloud automation software updates during critical business cycles. Freeze period start date. Starts at 12:00 AM UTC on the selected date and ends at 11:59:59 PM UTC on the selected date. Validates to ensure the freeze period does not exceed 45 days. + * `freeze_period_end_time` - End time of the freeze period cycle. + * `freeze_period_start_time` - Start time of the freeze period cycle. + * `is_early_adoption_enabled` - Annotates whether the cluster should be part of early access to apply VM cloud automation software updates. Those clusters annotated as early access will download the software bits for cloud automation in the first week after the update is available, while other clusters will have to wait until the following week. + * `is_freeze_period_enabled` - Specifies if the freeze period is enabled for the VM cluster to prevent the VMs from receiving cloud automation software updates during critical business cycles. Freeze period starts at 12:00 AM UTC and ends at 11:59:59 PM UTC on the selected date. Ensure that the freezing period does not exceed 45 days. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment. * `cpus_enabled` - The number of enabled CPU cores. * `data_collection_options` - Indicates user preferences for the various diagnostic collection options for the VM cluster/Cloud VM cluster/VMBM DBCS. From 4353d46c7c89f4211e7767cc719a9ee6281a48ec Mon Sep 17 00:00:00 2001 From: Tawen Kan Date: Tue, 21 May 2024 20:42:43 -0700 Subject: [PATCH 08/31] Added - Support for Operations Insights : Autonomous Database IAM based connections --- .../autonomous_database_insight.tf | 125 +++++ ...tonomous_database_insight_resource_test.go | 96 ++++ .../opsi_autonomous_database_insight_test.go | 434 ++++++++++++++++++ .../opsi/opsi_database_insight_data_source.go | 84 ++++ .../opsi/opsi_database_insight_resource.go | 332 +++++++++++++- .../d/opsi_database_insight.html.markdown | 40 +- .../d/opsi_database_insights.html.markdown | 14 +- .../docs/d/opsi_host_insight.html.markdown | 1 + .../docs/d/opsi_host_insights.html.markdown | 2 +- .../r/opsi_database_insight.html.markdown | 34 +- .../docs/r/opsi_exadata_insight.html.markdown | 12 +- .../docs/r/opsi_host_insight.html.markdown | 1 + 12 files changed, 1122 insertions(+), 53 deletions(-) create mode 100644 examples/opsi/database_insight/autonomous_database_insight/autonomous_database_insight.tf create mode 100644 internal/integrationtest/opsi_autonomous_database_insight_resource_test.go create mode 100644 internal/integrationtest/opsi_autonomous_database_insight_test.go diff --git a/examples/opsi/database_insight/autonomous_database_insight/autonomous_database_insight.tf b/examples/opsi/database_insight/autonomous_database_insight/autonomous_database_insight.tf new file mode 100644 index 00000000000..7358b071219 --- /dev/null +++ b/examples/opsi/database_insight/autonomous_database_insight/autonomous_database_insight.tf @@ -0,0 +1,125 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "compartment_ocid" {} +variable "autonomous_database_id" {} +variable "service_name" {} +variable "adb_host" {} +variable "adb_port" {} + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region +} + +resource "oci_identity_tag_namespace" "tag-namespace1" { + compartment_id = var.tenancy_ocid + description = "example tag namespace" + name = "examples-tag-namespace-all" + is_retired = false +} + + +resource "oci_identity_tag" "tag1" { + description = "example tag" + name = "example-tag" + tag_namespace_id = oci_identity_tag_namespace.tag-namespace1.id + is_cost_tracking = false + is_retired = false +} + +variable "database_insight_database_type" { + default = ["ADW-S"] +} + +variable "database_insight_credential_details_credential_type" { + default = "CREDENTIALS_BY_IAM" +} + +variable "database_insight_credential_details_role" { + default = "NORMAL" +} + +variable "database_insight_database_resource_type" { + default = "autonomousdatabase" +} + +variable "database_insight_defined_tags_value" { + default = "value" +} + +variable "database_insight_entity_source" { + default = "AUTONOMOUS_DATABASE" +} + +variable "database_insight_fields" { + default = ["databaseName", "databaseType", "compartmentId", "databaseDisplayName", "freeformTags", "definedTags"] +} + +variable "database_insight_freeform_tags" { + default = { "bar-key" = "value" } +} + +variable "resource_status" { + default = "ENABLED" +} + +variable "is_advanced_features_enabled" { + default = true +} + +// Create Database insight for EM managed External Database +resource "oci_opsi_database_insight" "test_database_insight" { + #Required + compartment_id = var.compartment_ocid + entity_source = var.database_insight_entity_source + is_advanced_features_enabled = var.is_advanced_features_enabled + + #Optional + service_name = var.service_name + database_id = var.autonomous_database_id + database_resource_type = var.database_insight_database_resource_type + credential_details { + credential_type = var.database_insight_credential_details_credential_type + } + connection_details { + host_name = var.adb_host + port = var.adb_port + protocol = "TCPS" + service_name = var.service_name + } + //defined_tags = "${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "${var.database_insight_defined_tags_value}")}" + //freeform_tags = var.database_insight_freeform_tags + status = var.resource_status +} + +variable "database_insight_state" { + default = ["ACTIVE"] +} + +variable "database_insight_status" { + default = ["ENABLED"] +} + +// List opsi autonomous database insights +data "oci_opsi_database_insights" "test_database_insights" { + #Optional + compartment_id = var.compartment_ocid + database_type = var.database_insight_database_type + fields = var.database_insight_fields + state = var.database_insight_state + status = var.database_insight_status +} + +// Get an OPSI autonomous database insight +data "oci_opsi_database_insight" "test_database_insight" { + database_insight_id = oci_opsi_database_insight.test_database_insight.id +} \ No newline at end of file diff --git a/internal/integrationtest/opsi_autonomous_database_insight_resource_test.go b/internal/integrationtest/opsi_autonomous_database_insight_resource_test.go new file mode 100644 index 00000000000..fdaa46dbaf3 --- /dev/null +++ b/internal/integrationtest/opsi_autonomous_database_insight_resource_test.go @@ -0,0 +1,96 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "testing" + + "github.com/oracle/terraform-provider-oci/internal/acctest" + "github.com/oracle/terraform-provider-oci/internal/utils" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/oracle/terraform-provider-oci/httpreplay" +) + +var ( + autonomousDatabaseInsightRequiredRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "database_id": acctest.Representation{RepType: acctest.Required, Create: `${var.autonomous_database_id}`}, + "database_resource_type": acctest.Representation{RepType: acctest.Required, Create: `autonomousdatabase`}, + "is_advanced_features_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`}, + "credential_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightCredentialDetailsRepresentation}, + "connection_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightConnectionDetailsRepresentation}, + "status": acctest.Representation{RepType: acctest.Required, Create: `DISABLED`}, + "entity_source": acctest.Representation{RepType: acctest.Required, Create: `AUTONOMOUS_DATABASE`, Update: `AUTONOMOUS_DATABASE`}, + //"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`}, + //"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"bar-key": "value"}}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ignoreChangesADIRepresentation}, + } +) + +// issue-routing-tag: opsi/controlPlane +func TestOpsiAutonomousResourceDatabaseInsight(t *testing.T) { + httpreplay.SetScenario("TestOpsiAutonomousResourceDatabaseInsight") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + autonomousDatabaseId := utils.GetEnvSettingWithBlankDefault("autonomous_database_id") + autonomousDatabaseIdVariableStr := fmt.Sprintf("variable \"autonomous_database_id\" { default = \"%s\" }\n", autonomousDatabaseId) + + adbHostName := utils.GetEnvSettingWithBlankDefault("adb_host") + adbHostNameVariableStr := fmt.Sprintf("variable \"adb_host\" { default = \"%s\" }\n", adbHostName) + + adbPort := utils.GetEnvSettingWithBlankDefault("adb_port") + adbPortVariableStr := fmt.Sprintf("variable \"adb_port\" { default = \"%s\" }\n", adbPort) + + serviceName := utils.GetEnvSettingWithBlankDefault("service_name") + serviceNameVariableStr := fmt.Sprintf("variable \"service_name\" { default = \"%s\" }\n", serviceName) + + /*secretId := utils.GetEnvSettingWithBlankDefault("secret_id") + secretIdVariableStr := fmt.Sprintf("variable \"secret_id\" { default = \"%s\" }\n", secretId) + + userName := utils.GetEnvSettingWithBlankDefault("user_name") + userNamedVariableStr := fmt.Sprintf("variable \"user_name\" { default = \"%s\" }\n", userName)*/ + + resourceName := "oci_opsi_database_insight.test_database_insight" + + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "Create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+autonomousDatabaseIdVariableStr+adbHostNameVariableStr+adbPortVariableStr+serviceNameVariableStr+AutonomousDatabaseInsightResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Required, acctest.Create, autonomousDatabaseInsightRequiredRepresentation), "opsi", "databaseInsight", t) + + acctest.ResourceTest(t, testAccCheckOpsiDatabaseInsightDestroy, []resource.TestStep{ + // verify Create with Required + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Required, acctest.Create, autonomousDatabaseInsightRequiredRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "status", "DISABLED"), + + func(s *terraform.State) (err error) { + _, err = acctest.FromInstanceState(s, resourceName, "id") + return err + }, + ), + }, + // verify resource import + { + Config: config + AutonomousDatabaseInsightRequiredOnlyResource, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "entity_source", + "is_advanced_features_enable", + }, + ResourceName: resourceName, + }, + }) +} diff --git a/internal/integrationtest/opsi_autonomous_database_insight_test.go b/internal/integrationtest/opsi_autonomous_database_insight_test.go new file mode 100644 index 00000000000..9227fd9113c --- /dev/null +++ b/internal/integrationtest/opsi_autonomous_database_insight_test.go @@ -0,0 +1,434 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "context" + "fmt" + "strconv" + "testing" + "time" + + "github.com/oracle/terraform-provider-oci/internal/acctest" + tf_client "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + "github.com/oracle/terraform-provider-oci/internal/tfresource" + "github.com/oracle/terraform-provider-oci/internal/utils" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/oracle/oci-go-sdk/v65/common" + oci_opsi "github.com/oracle/oci-go-sdk/v65/opsi" + + "github.com/oracle/terraform-provider-oci/httpreplay" +) + +var ( + AutonomousDatabaseInsightRequiredOnlyResource = AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Required, acctest.Create, autonomousDatabaseInsightRepresentation) + + AutonomousDatabaseInsightResourceConfig = AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Update, autonomousDatabaseInsightRepresentation) + + autonomousDatabaseInsightSingularDataSourceRepresentation = map[string]interface{}{ + "database_insight_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_opsi_database_insight.test_database_insight.id}`}, + } + + autonomousDatabaseInsightDataSourceRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.compartment_id}`}, + "compartment_id_in_subtree": acctest.Representation{RepType: acctest.Optional, Create: `false`}, + "database_type": acctest.Representation{RepType: acctest.Optional, Create: []string{`ADW-S`}}, + "fields": acctest.Representation{RepType: acctest.Optional, Create: []string{`databaseName`, `databaseType`, `compartmentId`, `databaseDisplayName`, `freeformTags`, `definedTags`}}, + "id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_opsi_database_insight.test_database_insight.id}`}, + "state": acctest.Representation{RepType: acctest.Optional, Create: []string{`ACTIVE`}}, + "status": acctest.Representation{RepType: acctest.Optional, Create: []string{`ENABLED`}, Update: []string{`DISABLED`}}, + "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightDataSourceFilterRepresentation}, + } + + autonomousDatabaseInsightDataSourceFilterRepresentation = map[string]interface{}{ + "name": acctest.Representation{RepType: acctest.Required, Create: `id`}, + "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_opsi_database_insight.test_database_insight.id}`}}, + } + + autonomousDatabaseInsightRepresentation = map[string]interface{}{ + "database_id": acctest.Representation{RepType: acctest.Required, Create: `${var.autonomous_database_id}`}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "entity_source": acctest.Representation{RepType: acctest.Required, Create: `AUTONOMOUS_DATABASE`, Update: `AUTONOMOUS_DATABASE`}, + "is_advanced_features_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`}, + "database_resource_type": acctest.Representation{RepType: acctest.Required, Create: `autonomousdatabase`}, + "credential_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightCredentialDetailsRepresentation}, + "connection_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightConnectionDetailsRepresentation}, + "status": acctest.Representation{RepType: acctest.Optional, Create: `ENABLED`, Update: `DISABLED`}, + "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")}`}, + //"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"bar-key": "value"}, Update: map[string]string{"Department": "Accounting"}}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: ignoreChangesAutonomousDatabaseInsightRepresentation}, + } + + autonomousDatabaseInsightCredentialDetailsRepresentation = map[string]interface{}{ + "credential_type": acctest.Representation{RepType: acctest.Required, Create: `CREDENTIALS_BY_IAM`}, + } + + autonomousDatabaseInsightCredentialDetailsForUpdateRepresentation = map[string]interface{}{ + "credential_type": acctest.Representation{RepType: acctest.Required, Update: `CREDENTIALS_BY_VAULT`}, + "password_secret_id": acctest.Representation{RepType: acctest.Required, Update: `${var.secret_id}`}, + "role": acctest.Representation{RepType: acctest.Optional, Update: `NORMAL`}, + "user_name": acctest.Representation{RepType: acctest.Required, Update: `${var.user_name}`}, + } + + autonomousDatabaseInsightConnectionDetailsRepresentation = map[string]interface{}{ + "host_name": acctest.Representation{RepType: acctest.Required, Create: `${var.adb_host}`}, + "port": acctest.Representation{RepType: acctest.Required, Create: `${var.adb_port}`}, + "protocol": acctest.Representation{RepType: acctest.Required, Create: `TCPS`}, + "service_name": acctest.Representation{RepType: acctest.Required, Create: `${var.service_name}`}, + } + + ignoreChangesAutonomousDatabaseInsightRepresentation = map[string]interface{}{ + "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`}}, + } + + AutonomousDatabaseInsightResourceDependencies = DefinedTagsDependencies +) + +// issue-routing-tag: opsi/controlPlane +func TestOpsiAutonomousDatabaseInsightResource_basic(t *testing.T) { + httpreplay.SetScenario("TestOpsiAutonomousDatabaseInsightResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + autonomousDatabaseId := utils.GetEnvSettingWithBlankDefault("autonomous_database_id") + autonomousDatabaseIdVariableStr := fmt.Sprintf("variable \"autonomous_database_id\" { default = \"%s\" }\n", autonomousDatabaseId) + + adbHostName := utils.GetEnvSettingWithBlankDefault("adb_host") + adbHostNameVariableStr := fmt.Sprintf("variable \"adb_host\" { default = \"%s\" }\n", adbHostName) + + adbPort := utils.GetEnvSettingWithBlankDefault("adb_port") + adbPortVariableStr := fmt.Sprintf("variable \"adb_port\" { default = \"%s\" }\n", adbPort) + + serviceName := utils.GetEnvSettingWithBlankDefault("service_name") + serviceNameVariableStr := fmt.Sprintf("variable \"service_name\" { default = \"%s\" }\n", serviceName) + + secretId := utils.GetEnvSettingWithBlankDefault("secret_id") + secretIdVariableStr := fmt.Sprintf("variable \"secret_id\" { default = \"%s\" }\n", secretId) + + userName := utils.GetEnvSettingWithBlankDefault("user_name") + userNamedVariableStr := fmt.Sprintf("variable \"user_name\" { default = \"%s\" }\n", userName) + + resourceName := "oci_opsi_database_insight.test_database_insight" + datasourceName := "data.oci_opsi_database_insights.test_database_insights" + singularDatasourceName := "data.oci_opsi_database_insight.test_database_insight" + + var resId, resId2 string + // Save TF content to create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+autonomousDatabaseIdVariableStr+adbHostNameVariableStr+adbPortVariableStr+serviceNameVariableStr+AutonomousDatabaseInsightResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Create, autonomousDatabaseInsightRepresentation), "opsi", "databaseInsight", t) + + acctest.ResourceTest(t, testAccCheckOpsiAutonomousDatabaseInsightDestroy, []resource.TestStep{ + // verify create with optional opsiPrivateEndpointId + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Create, autonomousDatabaseInsightRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "credential_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.credential_type", "CREDENTIALS_BY_IAM"), + resource.TestCheckResourceAttr(resourceName, "connection_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.host_name", adbHostName), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.port", adbPort), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.service_name", serviceName), + resource.TestCheckResourceAttrSet(resourceName, "database_id"), + resource.TestCheckResourceAttrSet(resourceName, "database_name"), + resource.TestCheckResourceAttr(resourceName, "database_resource_type", "autonomousdatabase"), + resource.TestCheckResourceAttr(resourceName, "entity_source", "AUTONOMOUS_DATABASE"), + resource.TestCheckResourceAttr(resourceName, "is_advanced_features_enabled", "true"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "status"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + // verify update to the credential by vault + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + secretIdVariableStr + userNamedVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Update, + acctest.RepresentationCopyWithNewProperties(autonomousDatabaseInsightRepresentation, map[string]interface{}{ + "credential_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: autonomousDatabaseInsightCredentialDetailsForUpdateRepresentation}, + })), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "credential_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.credential_type", "CREDENTIALS_BY_VAULT"), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.password_secret_id", secretId), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.role", "NORMAL"), + resource.TestCheckResourceAttrSet(resourceName, "credential_details.0.user_name"), + resource.TestCheckResourceAttr(resourceName, "connection_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.host_name", adbHostName), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.port", adbPort), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.service_name", serviceName), + resource.TestCheckResourceAttrSet(resourceName, "database_id"), + resource.TestCheckResourceAttrSet(resourceName, "database_name"), + resource.TestCheckResourceAttr(resourceName, "database_resource_type", "autonomousdatabase"), + resource.TestCheckResourceAttr(resourceName, "entity_source", "AUTONOMOUS_DATABASE"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "status"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("resource recreated when it was supposed to be updated") + } + return err + }, + ), + }, + + // verify updates to updatable parameters + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Update, autonomousDatabaseInsightRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "credential_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.credential_type", "CREDENTIALS_BY_IAM"), + resource.TestCheckResourceAttr(resourceName, "connection_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.host_name", adbHostName), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.port", adbPort), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.service_name", serviceName), + resource.TestCheckResourceAttrSet(resourceName, "database_id"), + resource.TestCheckResourceAttrSet(resourceName, "database_name"), + resource.TestCheckResourceAttr(resourceName, "database_resource_type", "autonomousdatabase"), + resource.TestCheckResourceAttr(resourceName, "entity_source", "AUTONOMOUS_DATABASE"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "status"), + resource.TestCheckResourceAttr(resourceName, "status", "DISABLED"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("Resource recreated when it was supposed to be updated.") + } + return err + }, + ), + }, + // verify datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_opsi_database_insights", "test_database_insights", acctest.Optional, acctest.Update, autonomousDatabaseInsightDataSourceRepresentation) + + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Update, autonomousDatabaseInsightRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(datasourceName, "compartment_id_in_subtree", "false"), + resource.TestCheckResourceAttr(datasourceName, "database_type.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "fields.#", "6"), + resource.TestCheckResourceAttr(datasourceName, "state.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "status.#", "1"), + + resource.TestCheckResourceAttr(datasourceName, "database_insights_collection.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "database_insights_collection.0.items.#", "1"), + ), + }, + // verify singular datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Required, acctest.Create, autonomousDatabaseInsightSingularDataSourceRepresentation) + + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceConfig, + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(singularDatasourceName, "credential_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "credential_details.0.credential_type", "CREDENTIALS_BY_IAM"), + resource.TestCheckResourceAttr(resourceName, "connection_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.host_name", adbHostName), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.port", adbPort), + resource.TestCheckResourceAttr(resourceName, "connection_details.0.service_name", serviceName), + resource.TestCheckResourceAttrSet(singularDatasourceName, "database_display_name"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "database_name"), + resource.TestCheckResourceAttr(singularDatasourceName, "database_resource_type", "autonomousdatabase"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "database_type"), + resource.TestCheckResourceAttr(singularDatasourceName, "entity_source", "AUTONOMOUS_DATABASE"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "status"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_updated"), + ), + }, + // remove singular datasource from previous step so that it doesn't conflict with import tests + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceConfig, + }, + // verify enable + { + Config: config + compartmentIdVariableStr + autonomousDatabaseIdVariableStr + adbHostNameVariableStr + adbPortVariableStr + serviceNameVariableStr + AutonomousDatabaseInsightResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_opsi_database_insight", "test_database_insight", acctest.Optional, acctest.Update, + acctest.RepresentationCopyWithNewProperties(autonomousDatabaseInsightRepresentation, map[string]interface{}{ + "status": acctest.Representation{RepType: acctest.Required, Update: `ENABLED`}, + })), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "status", "ENABLED"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("resource recreated when it was supposed to be updated") + } + return err + }, + ), + }, + // verify resource import + { + Config: config + AutonomousDatabaseInsightRequiredOnlyResource, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "entity_source", + "is_advanced_features_enable", + }, + ResourceName: resourceName, + }, + }) +} + +func testAccCheckOpsiAutonomousDatabaseInsightDestroy(s *terraform.State) error { + noResourceFound := true + client := acctest.TestAccProvider.Meta().(*tf_client.OracleClients).OperationsInsightsClient() + for _, rs := range s.RootModule().Resources { + if rs.Type == "oci_opsi_database_insight" { + noResourceFound = false + request := oci_opsi.GetDatabaseInsightRequest{} + + tmp := rs.Primary.ID + request.DatabaseInsightId = &tmp + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "opsi") + + response, err := client.GetDatabaseInsight(context.Background(), request) + + if err == nil { + deletedLifecycleStates := map[string]bool{ + string(oci_opsi.LifecycleStateDeleted): true, + } + if _, ok := deletedLifecycleStates[string(response.GetLifecycleState())]; !ok { + //resource lifecycle state is not in expected deleted lifecycle states. + return fmt.Errorf("resource lifecycle state: %s is not in expected deleted lifecycle states", response.GetLifecycleState()) + } + //resource lifecycle state is in expected deleted lifecycle states. continue with next one. + continue + } + + //Verify that exception is for '404 not found'. + if failure, isServiceError := common.IsServiceError(err); !isServiceError || failure.GetHTTPStatusCode() != 404 { + return err + } + } + } + if noResourceFound { + return fmt.Errorf("at least one resource was expected from the state file, but could not be found") + } + + return nil +} + +func init() { + if acctest.DependencyGraph == nil { + acctest.InitDependencyGraph() + } + if !acctest.InSweeperExcludeList("OpsiAutonomousDatabaseInsight") { + resource.AddTestSweepers("OpsiAutonomousDatabaseInsight", &resource.Sweeper{ + Name: "OpsiAutonomousDatabaseInsight", + Dependencies: acctest.DependencyGraph["databaseInsight"], + F: sweepOpsiAutonomousDatabaseInsightResource, + }) + } +} + +func sweepOpsiAutonomousDatabaseInsightResource(compartment string) error { + operationsInsightsClient := acctest.GetTestClients(&schema.ResourceData{}).OperationsInsightsClient() + databaseInsightIds, err := getAutonomousDatabaseInsightIds(compartment) + if err != nil { + return err + } + for _, databaseInsightId := range databaseInsightIds { + if ok := acctest.SweeperDefaultResourceId[databaseInsightId]; !ok { + deleteDatabaseInsightRequest := oci_opsi.DeleteDatabaseInsightRequest{} + + deleteDatabaseInsightRequest.DatabaseInsightId = &databaseInsightId + + deleteDatabaseInsightRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(true, "opsi") + _, error := operationsInsightsClient.DeleteDatabaseInsight(context.Background(), deleteDatabaseInsightRequest) + if error != nil { + fmt.Printf("Error deleting DatabaseInsight %s %s, It is possible that the resource is already deleted. Please verify manually \n", databaseInsightId, error) + continue + } + acctest.WaitTillCondition(acctest.TestAccProvider, &databaseInsightId, autonomousDatabaseInsightSweepWaitCondition, time.Duration(3*time.Minute), + autonomousDatabaseInsightSweepResponseFetchOperation, "opsi", true) + } + } + return nil +} + +func getAutonomousDatabaseInsightIds(compartment string) ([]string, error) { + ids := acctest.GetResourceIdsToSweep(compartment, "DatabaseInsightId") + if ids != nil { + return ids, nil + } + var resourceIds []string + compartmentId := compartment + operationsInsightsClient := acctest.GetTestClients(&schema.ResourceData{}).OperationsInsightsClient() + + listDatabaseInsightsRequest := oci_opsi.ListDatabaseInsightsRequest{} + listDatabaseInsightsRequest.CompartmentId = &compartmentId + listDatabaseInsightsRequest.LifecycleState = []oci_opsi.LifecycleStateEnum{oci_opsi.LifecycleStateActive} + listDatabaseInsightsResponse, err := operationsInsightsClient.ListDatabaseInsights(context.Background(), listDatabaseInsightsRequest) + + if err != nil { + return resourceIds, fmt.Errorf("Error getting DatabaseInsight list for compartment id : %s , %s \n", compartmentId, err) + } + for _, databaseInsight := range listDatabaseInsightsResponse.Items { + id := *databaseInsight.GetId() + resourceIds = append(resourceIds, id) + acctest.AddResourceIdToSweeperResourceIdMap(compartmentId, "DatabaseInsightId", id) + } + return resourceIds, nil +} + +func autonomousDatabaseInsightSweepWaitCondition(response common.OCIOperationResponse) bool { + // Only stop if the resource is available beyond 3 mins. As there could be an issue for the sweeper to delete the resource and manual intervention required. + if databaseInsightResponse, ok := response.Response.(oci_opsi.GetDatabaseInsightResponse); ok { + return databaseInsightResponse.GetLifecycleState() != oci_opsi.LifecycleStateDeleted + } + return false +} + +func autonomousDatabaseInsightSweepResponseFetchOperation(client *tf_client.OracleClients, resourceId *string, retryPolicy *common.RetryPolicy) error { + _, err := client.OperationsInsightsClient().GetDatabaseInsight(context.Background(), oci_opsi.GetDatabaseInsightRequest{ + DatabaseInsightId: resourceId, + RequestMetadata: common.RequestMetadata{ + RetryPolicy: retryPolicy, + }, + }) + return err +} diff --git a/internal/service/opsi/opsi_database_insight_data_source.go b/internal/service/opsi/opsi_database_insight_data_source.go index 7e10f50d272..19b580bfcc4 100644 --- a/internal/service/opsi/opsi_database_insight_data_source.go +++ b/internal/service/opsi/opsi_database_insight_data_source.go @@ -67,6 +67,90 @@ func (s *OpsiDatabaseInsightDataSourceCrud) SetData() error { s.D.SetId(tfresource.GenerateDataSourceHashID("OpsiDatabaseInsightsSingularDataSource-", OpsiDatabaseInsightsDataSource(), s.D)) switch v := (s.Res.DatabaseInsight).(type) { + case oci_opsi.AutonomousDatabaseInsight: + s.D.Set("entity_source", "AUTONOMOUS_DATABASE") + + if v.ConnectionDetails != nil { + s.D.Set("connection_details", []interface{}{ConnectionDetailsToMap(v.ConnectionDetails)}) + } else { + s.D.Set("connection_details", nil) + } + log.Printf("[DEBUG] in data source setData") + if v.CredentialDetails != nil { + credentialDetailsArray := []interface{}{} + if credentialDetailsMap := CredentialDetailsToMap(&v.CredentialDetails); credentialDetailsMap != nil { + credentialDetailsArray = append(credentialDetailsArray, credentialDetailsMap) + } + s.D.Set("credential_details", credentialDetailsArray) + } else { + s.D.Set("credential_details", nil) + } + + if v.DatabaseDisplayName != nil { + s.D.Set("database_display_name", *v.DatabaseDisplayName) + } + + if v.DatabaseId != nil { + s.D.Set("database_id", *v.DatabaseId) + } + + if v.DatabaseName != nil { + s.D.Set("database_name", *v.DatabaseName) + } + + if v.DatabaseResourceType != nil { + s.D.Set("database_resource_type", *v.DatabaseResourceType) + } + + if v.OpsiPrivateEndpointId != nil { + s.D.Set("opsi_private_endpoint_id", *v.OpsiPrivateEndpointId) + } + + if v.IsAdvancedFeaturesEnabled != nil { + s.D.Set("is_advanced_features_enabled", *v.IsAdvancedFeaturesEnabled) + } + + if v.CompartmentId != nil { + s.D.Set("compartment_id", *v.CompartmentId) + } + + if v.DatabaseConnectionStatusDetails != nil { + s.D.Set("database_connection_status_details", *v.DatabaseConnectionStatusDetails) + } + + if v.DatabaseType != nil { + s.D.Set("database_type", *v.DatabaseType) + } + + if v.DatabaseVersion != nil { + s.D.Set("database_version", *v.DatabaseVersion) + } + + if v.DefinedTags != nil { + s.D.Set("defined_tags", tfresource.DefinedTagsToMap(v.DefinedTags)) + } + + s.D.Set("freeform_tags", v.FreeformTags) + + if v.LifecycleDetails != nil { + s.D.Set("lifecycle_details", *v.LifecycleDetails) + } + + s.D.Set("state", v.LifecycleState) + + s.D.Set("status", v.Status) + + if v.SystemTags != nil { + s.D.Set("system_tags", tfresource.SystemTagsToMap(v.SystemTags)) + } + + if v.TimeCreated != nil { + s.D.Set("time_created", v.TimeCreated.String()) + } + + if v.TimeUpdated != nil { + s.D.Set("time_updated", v.TimeUpdated.String()) + } case oci_opsi.EmManagedExternalDatabaseInsight: s.D.Set("entity_source", "EM_MANAGED_EXTERNAL_DATABASE") diff --git a/internal/service/opsi/opsi_database_insight_resource.go b/internal/service/opsi/opsi_database_insight_resource.go index a48e62d7550..444c77eabd5 100644 --- a/internal/service/opsi/opsi_database_insight_resource.go +++ b/internal/service/opsi/opsi_database_insight_resource.go @@ -46,6 +46,7 @@ func OpsiDatabaseInsightResource() *schema.Resource { "MACS_MANAGED_CLOUD_DATABASE", "MDS_MYSQL_DATABASE_SYSTEM", "PE_COMANAGED_DATABASE", + "AUTONOMOUS_DATABASE", }, true), }, // Optional @@ -111,7 +112,9 @@ func OpsiDatabaseInsightResource() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // Required + // Optional + // Computed "host_ip": { Type: schema.TypeString, @@ -153,11 +156,12 @@ func OpsiDatabaseInsightResource() *schema.Resource { Schema: map[string]*schema.Schema{ // Required "credential_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + //ForceNew: true, DiffSuppressFunc: tfresource.EqualIgnoreCaseSuppressDiff, ValidateFunc: validation.StringInSlice([]string{ + "CREDENTIALS_BY_IAM", "CREDENTIALS_BY_SOURCE", "CREDENTIALS_BY_VAULT", }, true), @@ -265,6 +269,12 @@ func OpsiDatabaseInsightResource() *schema.Resource { Computed: true, ForceNew: true, }, + "is_advanced_features_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + //ForceNew: true, + }, "management_agent_id": { Type: schema.TypeString, Optional: true, @@ -471,6 +481,7 @@ func (s *OpsiDatabaseInsightResourceCrud) Create() error { if status, ok := s.D.GetOkExists("status"); ok { wantedState := strings.ToUpper(status.(string)) + log.Printf("[DEBUG] Running CREATE and wantedState (%s)", wantedState) if oci_opsi.ResourceStatusDisabled == oci_opsi.ResourceStatusEnum(wantedState) { request := oci_opsi.DisableDatabaseInsightRequest{} request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "opsi") @@ -630,6 +641,7 @@ func (s *OpsiDatabaseInsightResourceCrud) Get() error { func (s *OpsiDatabaseInsightResourceCrud) Update() error { if compartment, ok := s.D.GetOkExists("compartment_id"); ok && s.D.HasChange("compartment_id") { + log.Printf("[DEBUG] Running Update moviing compartment (%s)", compartment) oldRaw, newRaw := s.D.GetChange("compartment_id") if newRaw != "" && oldRaw != "" { err := s.updateCompartment(compartment) @@ -670,6 +682,19 @@ func (s *OpsiDatabaseInsightResourceCrud) Update() error { } } + // For AUTONOMOUS_DATABASE + if strings.ToLower(entitySource) == strings.ToLower("AUTONOMOUS_DATABASE") { + updateAdbFullFeatureRequest := oci_opsi.ChangeAutonomousDatabaseInsightAdvancedFeaturesRequest{} + updateFullFeature := s.populateUpdateAdbFullFeatureRequest(&updateAdbFullFeatureRequest) + log.Printf("[DEBUG] Running Update after change adb (%t)", updateFullFeature) + if updateFullFeature { + err := s.updateAdbFullFeatures(&updateAdbFullFeatureRequest) + if err != nil { + return err + } + } + } + request := oci_opsi.UpdateDatabaseInsightRequest{} err := s.populateTopLevelPolymorphicUpdateDatabaseInsightRequest(&request) if err != nil { @@ -704,6 +729,8 @@ func (s *OpsiDatabaseInsightResourceCrud) Update() error { } } + log.Printf("[DEBUG] status in update disable : (%t), enable :(%t)", disableDatabaseInsight, enableDatabaseInsight) + if disableDatabaseInsight { request := oci_opsi.DisableDatabaseInsightRequest{} request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "opsi") @@ -796,6 +823,85 @@ func (s *OpsiDatabaseInsightResourceCrud) Delete() error { func (s *OpsiDatabaseInsightResourceCrud) SetData() error { switch v := (*s.Res).(type) { + case oci_opsi.AutonomousDatabaseInsight: + if v.ConnectionDetails != nil { + s.D.Set("connection_details", []interface{}{ConnectionDetailsToMap(v.ConnectionDetails)}) + } else { + s.D.Set("connection_details", nil) + } + + if v.CredentialDetails != nil { + credentialDetailsArray := []interface{}{} + if credentialDetailsMap := CredentialDetailsToMap(&v.CredentialDetails); credentialDetailsMap != nil { + credentialDetailsArray = append(credentialDetailsArray, credentialDetailsMap) + } + s.D.Set("credential_details", credentialDetailsArray) + } else { + s.D.Set("credential_details", nil) + } + + if v.DatabaseDisplayName != nil { + s.D.Set("database_display_name", *v.DatabaseDisplayName) + } + + if v.DatabaseId != nil { + s.D.Set("database_id", *v.DatabaseId) + } + + if v.DatabaseName != nil { + s.D.Set("database_name", *v.DatabaseName) + } + + if v.DatabaseType != nil { + s.D.Set("database_type", *v.DatabaseType) + } + + if v.DatabaseResourceType != nil { + s.D.Set("database_resource_type", *v.DatabaseResourceType) + } + + if v.OpsiPrivateEndpointId != nil { + s.D.Set("opsi_private_endpoint_id", *v.OpsiPrivateEndpointId) + } + + if v.CompartmentId != nil { + s.D.Set("compartment_id", *v.CompartmentId) + } + + if v.DatabaseConnectionStatusDetails != nil { + s.D.Set("database_connection_status_details", *v.DatabaseConnectionStatusDetails) + } + + if v.DefinedTags != nil { + s.D.Set("defined_tags", tfresource.DefinedTagsToMap(v.DefinedTags)) + } + + s.D.Set("freeform_tags", v.FreeformTags) + + if v.LifecycleDetails != nil { + s.D.Set("lifecycle_details", *v.LifecycleDetails) + } + + if v.ProcessorCount != nil { + s.D.Set("processor_count", *v.ProcessorCount) + } + + s.D.Set("state", v.LifecycleState) + + s.D.Set("status", v.Status) + + if v.SystemTags != nil { + s.D.Set("system_tags", tfresource.SystemTagsToMap(v.SystemTags)) + } + + if v.TimeCreated != nil { + s.D.Set("time_created", v.TimeCreated.String()) + } + + if v.TimeUpdated != nil { + s.D.Set("time_updated", v.TimeUpdated.String()) + } + case oci_opsi.EmManagedExternalDatabaseInsight: s.D.Set("entity_source", "EM_MANAGED_EXTERNAL_DATABASE") @@ -1182,6 +1288,8 @@ func ConnectionDetailsToMap(obj *oci_opsi.ConnectionDetails) map[string]interfac result["protocol"] = string(obj.Protocol) + log.Printf("[DEBUG] populate for updating (%s)", result["protocol"]) + if obj.ServiceName != nil { result["service_name"] = string(*obj.ServiceName) } @@ -1200,6 +1308,13 @@ func (s *OpsiDatabaseInsightResourceCrud) mapToCredentialDetails(fieldKeyFormat credentialType = "" // default value } switch strings.ToLower(credentialType) { + case strings.ToLower("CREDENTIALS_BY_IAM"): + details := oci_opsi.CredentialByIam{} + if credentialSourceName, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "credential_source_name")); ok { + tmp := credentialSourceName.(string) + details.CredentialSourceName = &tmp + } + baseObject = details case strings.ToLower("CREDENTIALS_BY_SOURCE"): details := oci_opsi.CredentialsBySource{} if credentialSourceName, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "credential_source_name")); ok { @@ -1235,6 +1350,8 @@ func (s *OpsiDatabaseInsightResourceCrud) mapToCredentialDetails(fieldKeyFormat func CredentialDetailsToMap(obj *oci_opsi.CredentialDetails) map[string]interface{} { result := map[string]interface{}{} switch v := (*obj).(type) { + case oci_opsi.CredentialByIam: + result["credential_type"] = "CREDENTIALS_BY_IAM" case oci_opsi.CredentialsBySource: result["credential_type"] = "CREDENTIALS_BY_SOURCE" case oci_opsi.CredentialByVault: @@ -1265,6 +1382,70 @@ func DatabaseInsightSummaryToMap(obj oci_opsi.DatabaseInsightSummary) map[string result := map[string]interface{}{} switch v := (obj).(type) { + case oci_opsi.AutonomousDatabaseInsightSummary: + result["entity_source"] = "AUTONOMOUS_DATABASE" + if v.Id != nil { + result["id"] = string(*v.Id) + } + + if v.DatabaseId != nil { + result["database_id"] = string(*v.DatabaseId) + } + + if v.CompartmentId != nil { + result["compartment_id"] = string(*v.CompartmentId) + } + + if v.DatabaseName != nil { + result["database_name"] = string(*v.DatabaseName) + } + + if v.DatabaseDisplayName != nil { + result["database_display_name"] = string(*v.DatabaseDisplayName) + } + + if v.DatabaseType != nil { + result["database_type"] = string(*v.DatabaseType) + } + + if v.DatabaseVersion != nil { + result["database_version"] = string(*v.DatabaseVersion) + } + + if v.LifecycleDetails != nil { + result["lifecycle_details"] = string(*v.LifecycleDetails) + } + + result["state"] = string(v.LifecycleState) + + result["status"] = string(v.Status) + + if v.TimeCreated != nil { + result["time_created"] = v.TimeCreated.String() + } + + if v.TimeUpdated != nil { + result["time_updated"] = v.TimeUpdated.String() + } + + if v.SystemTags != nil { + result["system_tags"] = tfresource.SystemTagsToMap(v.SystemTags) + } + + result["freeform_tags"] = v.FreeformTags + + if v.DefinedTags != nil { + result["defined_tags"] = tfresource.DefinedTagsToMap(v.DefinedTags) + } + + if v.DatabaseResourceType != nil { + result["database_resource_type"] = string(*v.DatabaseResourceType) + } + + if v.IsAdvancedFeaturesEnabled != nil { + result["is_advanced_features_enabled"] = bool(*v.IsAdvancedFeaturesEnabled) + } + case oci_opsi.EmManagedExternalDatabaseInsightSummary: result["entity_source"] = "EM_MANAGED_EXTERNAL_DATABASE" if v.Id != nil { @@ -1653,6 +1834,7 @@ func PeComanagedDatabaseHostDetailsToMap(obj oci_opsi.PeComanagedDatabaseHostDet func (s *OpsiDatabaseInsightResourceCrud) populateChangePeComanagedDatabaseInsightRequest(updateRequest *oci_opsi.ChangePeComanagedDatabaseInsightRequest) bool { hasChanged := false + if credentialDetails, ok := s.D.GetOkExists("credential_details"); ok { if s.D.HasChange("credential_details.0.password_secret_id") || s.D.HasChange("credential_details.0.user_name") || s.D.HasChange("credential_details.0.role") { hasChanged = true @@ -1683,6 +1865,34 @@ func (s *OpsiDatabaseInsightResourceCrud) populateChangePeComanagedDatabaseInsig return hasChanged } +func (s *OpsiDatabaseInsightResourceCrud) populateUpdateAdbFullFeatureRequest(updateRequest *oci_opsi.ChangeAutonomousDatabaseInsightAdvancedFeaturesRequest) bool { + hasChanged := false + if credentialDetails, ok := s.D.GetOkExists("credential_details"); ok { + if s.D.HasChange("credential_details.0.credential_type") { + hasChanged = true + } + if tmpList := credentialDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "credential_details", 0) + tmp, err := s.mapToCredentialDetails(fieldKeyFormat) + if err != nil { + return false + } + updateRequest.CredentialDetails = tmp + } + } + if connectionDetails, ok := s.D.GetOkExists("connection_details"); ok { + if tmpList := connectionDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "connection_details", 0) + tmp, err := s.mapToConnectionDetails(fieldKeyFormat) + if err != nil { + return false + } + updateRequest.ConnectionDetails = &tmp + } + } + return hasChanged +} + func (s *OpsiDatabaseInsightResourceCrud) populateChangeMacsCloudConnectionDetailsRequest(updateRequest *oci_opsi.ChangeMacsManagedCloudDatabaseInsightConnectionRequest) bool { hasChanged := false if connectionCredentialDetails, ok := s.D.GetOkExists("connection_credential_details"); ok { @@ -1731,6 +1941,68 @@ func (s *OpsiDatabaseInsightResourceCrud) populateTopLevelPolymorphicCreateDatab entitySource = "" // default value } switch strings.ToLower(entitySource) { + case strings.ToLower("AUTONOMOUS_DATABASE"): + details := oci_opsi.CreateAutonomousDatabaseInsightDetails{} + if connectionDetails, ok := s.D.GetOkExists("connection_details"); ok { + if tmpList := connectionDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "connection_details", 0) + tmp, err := s.mapToConnectionDetails(fieldKeyFormat) + if err != nil { + return err + } + details.ConnectionDetails = &tmp + } + } + if credentialDetails, ok := s.D.GetOkExists("credential_details"); ok { + if tmpList := credentialDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "credential_details", 0) + tmp, err := s.mapToCredentialDetails(fieldKeyFormat) + if err != nil { + return err + } + details.CredentialDetails = tmp + } + } + if databaseId, ok := s.D.GetOkExists("database_id"); ok { + tmp := databaseId.(string) + details.DatabaseId = &tmp + } + if databaseResourceType, ok := s.D.GetOkExists("database_resource_type"); ok { + tmp := databaseResourceType.(string) + details.DatabaseResourceType = &tmp + } + if isAdvancedFeaturesEnabled, ok := s.D.GetOkExists("is_advanced_features_enabled"); ok { + tmp := isAdvancedFeaturesEnabled.(bool) + details.IsAdvancedFeaturesEnabled = &tmp + } + if opsiPrivateEndpointId, ok := s.D.GetOkExists("opsi_private_endpoint_id"); ok { + tmp := opsiPrivateEndpointId.(string) + details.OpsiPrivateEndpointId = &tmp + } + + if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok { + tmp := compartmentId.(string) + details.CompartmentId = &tmp + } + if definedTags, ok := s.D.GetOkExists("defined_tags"); ok { + convertedDefinedTags, err := tfresource.MapToDefinedTags(definedTags.(map[string]interface{})) + if err != nil { + return err + } + details.DefinedTags = convertedDefinedTags + } + if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok { + details.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) + } + if systemTags, ok := s.D.GetOkExists("system_tags"); ok { + convertedSystemTags, err := tfresource.MapToSystemTags(systemTags.(map[string]interface{})) + if err != nil { + return err + } + details.SystemTags = convertedSystemTags + } + + request.CreateDatabaseInsightDetails = details case strings.ToLower("EM_MANAGED_EXTERNAL_DATABASE"): details := oci_opsi.CreateEmManagedExternalDatabaseInsightDetails{} if enterpriseManagerBridgeId, ok := s.D.GetOkExists("enterprise_manager_bridge_id"); ok { @@ -1935,7 +2207,7 @@ func (s *OpsiDatabaseInsightResourceCrud) populateTopLevelPolymorphicUpdateDatab } else { entitySource = "" // default value } - + log.Printf("[DEBUG] populate for updating (%s)", entitySourceRaw) switch strings.ToLower(entitySource) { case strings.ToLower("EM_MANAGED_EXTERNAL_DATABASE"): details := oci_opsi.UpdateEmManagedExternalDatabaseInsightDetails{} @@ -1982,6 +2254,21 @@ func (s *OpsiDatabaseInsightResourceCrud) populateTopLevelPolymorphicUpdateDatab details.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) } request.UpdateDatabaseInsightDetails = details + case strings.ToLower("AUTONOMOUS_DATABASE"): + details := oci_opsi.UpdateAutonomousDatabaseInsightDetails{} + tmp := s.D.Id() + request.DatabaseInsightId = &tmp + if definedTags, ok := s.D.GetOkExists("defined_tags"); ok { + convertedDefinedTags, err := tfresource.MapToDefinedTags(definedTags.(map[string]interface{})) + if err != nil { + return err + } + details.DefinedTags = convertedDefinedTags + } + if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok { + details.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) + } + request.UpdateDatabaseInsightDetails = details case strings.ToLower("MDS_MYSQL_DATABASE_SYSTEM"): details := oci_opsi.UpdateMdsMySqlDatabaseInsight{} tmp := s.D.Id() @@ -2062,6 +2349,43 @@ func (s *OpsiDatabaseInsightResourceCrud) populateTopLevelPolymorphicEnableDatab details.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) } request.EnableDatabaseInsightDetails = details + case strings.ToLower("AUTONOMOUS_DATABASE"): + details := oci_opsi.EnableAutonomousDatabaseInsightDetails{} + if opsiPrivateEndpointId, ok := s.D.GetOkExists("opsi_private_endpoint_id"); ok { + tmp := opsiPrivateEndpointId.(string) + details.OpsiPrivateEndpointId = &tmp + } + if credentialDetails, ok := s.D.GetOkExists("credential_details"); ok { + if tmpList := credentialDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "credential_details", 0) + tmp, err := s.mapToCredentialDetails(fieldKeyFormat) + if err != nil { + return err + } + details.CredentialDetails = tmp + } + } + if connectionDetails, ok := s.D.GetOkExists("connection_details"); ok { + if tmpList := connectionDetails.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "connection_details", 0) + tmp, err := s.mapToConnectionDetails(fieldKeyFormat) + if err != nil { + return err + } + details.ConnectionDetails = &tmp + } + } + if definedTags, ok := s.D.GetOkExists("defined_tags"); ok { + convertedDefinedTags, err := tfresource.MapToDefinedTags(definedTags.(map[string]interface{})) + if err != nil { + return err + } + details.DefinedTags = convertedDefinedTags + } + if freeformTags, ok := s.D.GetOkExists("freeform_tags"); ok { + details.FreeformTags = tfresource.ObjectMapToStringMap(freeformTags.(map[string]interface{})) + } + request.EnableDatabaseInsightDetails = details case strings.ToLower("MACS_MANAGED_CLOUD_DATABASE"): details := oci_opsi.EnableMacsManagedCloudDatabaseInsightDetails{} if managementAgentId, ok := s.D.GetOkExists("management_agent_id"); ok { diff --git a/website/docs/d/opsi_database_insight.html.markdown b/website/docs/d/opsi_database_insight.html.markdown index 41690d465a7..7645524a35a 100644 --- a/website/docs/d/opsi_database_insight.html.markdown +++ b/website/docs/d/opsi_database_insight.html.markdown @@ -34,28 +34,28 @@ The following attributes are exported: * `compartment_id` - Compartment identifier of the database * `connection_credential_details` - User credential details to connect to the database. - * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. - * `credential_type` - Credential type. - * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. - * `role` - database user role. - * `user_name` - database user name. - * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. + * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. + * `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. + * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. + * `role` - database user role. + * `user_name` - database user name. + * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. * `connection_details` - Connection details to connect to the database. HostName, protocol, and port should be specified. - * `host_name` - Name of the listener host that will be used to create the connect string to the database. - * `hosts` - List of hosts and port for private endpoint accessed database resource. - * `host_ip` - Host IP used for connection requests for Cloud DB resource. - * `port` - Listener port number used for connection requests for rivate endpoint accessed db resource. - * `port` - Listener port number used for connection requests. - * `protocol` - Protocol used for connection requests for private endpoint accssed database resource. - * `service_name` - Database service name used for connection requests. - * `connector_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of External Database Connector + * `host_name` - Name of the listener host that will be used to create the connect string to the database. + * `hosts` - List of hosts and port for private endpoint accessed database resource. + * `host_ip` - Host IP used for connection requests for Cloud DB resource. + * `port` - Listener port number used for connection requests for rivate endpoint accessed db resource. + * `port` - Listener port number used for connection requests. + * `protocol` - Protocol used for connection requests for private endpoint accssed database resource. + * `service_name` - Database service name used for connection requests. +* `connector_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of External Database Connector * `credential_details` - User credential details to connect to the database. - * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. - * `credential_type` - Credential type. - * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. - * `role` - database user role. - * `user_name` - database user name. - * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. + * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. + * `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. + * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. + * `role` - database user role. + * `user_name` - database user name. + * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. * `database_connection_status_details` - A message describing the status of the database connection of this resource. For example, it can be used to provide actionable information about the permission and content validity of the database connection. * `database_display_name` - Display name of database * `database_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database. diff --git a/website/docs/d/opsi_database_insights.html.markdown b/website/docs/d/opsi_database_insights.html.markdown index 611f6f951c7..b1008d7749e 100644 --- a/website/docs/d/opsi_database_insights.html.markdown +++ b/website/docs/d/opsi_database_insights.html.markdown @@ -64,7 +64,7 @@ The following attributes are exported: * `compartment_id` - Compartment identifier of the database * `connection_credential_details` - User credential details to connect to the database. * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. - * `credential_type` - Credential type. + * `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. * `role` - database user role. * `user_name` - database user name. @@ -78,13 +78,13 @@ The following attributes are exported: * `protocol` - Protocol used for connection requests for private endpoint accssed database resource. * `service_name` - Database service name used for connection requests. * `connector_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of External Database Connector - * `credential_details` - User credential details to connect to the database. +* `credential_details` - User credential details to connect to the database. * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. - * `credential_type` - Credential type. - * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. - * `role` - database user role. - * `user_name` - database user name. - * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. + * `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. + * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. + * `role` - database user role. + * `user_name` - database user name. + * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. * `database_connection_status_details` - A message describing the status of the database connection of this resource. For example, it can be used to provide actionable information about the permission and content validity of the database connection. * `database_display_name` - Display name of database * `database_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database. diff --git a/website/docs/d/opsi_host_insight.html.markdown b/website/docs/d/opsi_host_insight.html.markdown index fc18e2e1a9d..cd80863944d 100644 --- a/website/docs/d/opsi_host_insight.html.markdown +++ b/website/docs/d/opsi_host_insight.html.markdown @@ -57,6 +57,7 @@ The following attributes are exported: * `platform_type` - Platform type. Supported platformType(s) for MACS-managed external host insight: [LINUX, SOLARIS, WINDOWS]. Supported platformType(s) for MACS-managed cloud host insight: [LINUX]. Supported platformType(s) for EM-managed external host insight: [LINUX, SOLARIS, SUNOS, ZLINUX, WINDOWS, AIX]. * `platform_version` - Platform version. * `root_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Exadata Infrastructure. +* `root_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Exadata Infrastructure. * `state` - The current state of the host. * `status` - Indicates the status of a host insight in Operations Insights * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"orcl-cloud.free-tier-retained": "true"}` diff --git a/website/docs/d/opsi_host_insights.html.markdown b/website/docs/d/opsi_host_insights.html.markdown index 268d9ab1cc5..c29c56c7dc4 100644 --- a/website/docs/d/opsi_host_insights.html.markdown +++ b/website/docs/d/opsi_host_insights.html.markdown @@ -39,7 +39,7 @@ The following arguments are supported: * `compartment_id_in_subtree` - (Optional) A flag to search all resources within a given compartment and all sub-compartments. * `enterprise_manager_bridge_id` - (Applicable when entity_source=EM_MANAGED_EXTERNAL_HOST) Unique Enterprise Manager bridge identifier * `exadata_insight_id` - (Applicable when entity_source=EM_MANAGED_EXTERNAL_HOST) [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of exadata insight resource. -* `host_type` - (Optional) Filter by one or more host types. Possible values are CLOUD-HOST, EXTERNAL-HOST, COMANAGED-VM-HOST, COMANAGED-BM-HOST, COMANAGED-EXACS-HOST, COMANAGED-EXACC-HOST +* `host_type` - (Optional) Filter by one or more host types. Possible values are CLOUD-HOST, EXTERNAL-HOST, COMANAGED-VM-HOST, COMANAGED-BM-HOST, COMANAGED-EXACS-HOST, COMANAGED-EXACC-HOST * `id` - (Optional) Optional list of host insight resource [OCIDs](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm). * `platform_type` - (Applicable when entity_source=EM_MANAGED_EXTERNAL_HOST | MACS_MANAGED_CLOUD_DB_HOST | MACS_MANAGED_CLOUD_HOST | MACS_MANAGED_EXTERNAL_HOST | PE_COMANAGED_HOST) Filter by one or more platform types. Supported platformType(s) for MACS-managed external host insight: [LINUX, SOLARIS, WINDOWS]. Supported platformType(s) for MACS-managed cloud host insight: [LINUX]. Supported platformType(s) for EM-managed external host insight: [LINUX, SOLARIS, SUNOS, ZLINUX, WINDOWS, AIX]. * `state` - (Optional) Lifecycle states diff --git a/website/docs/r/opsi_database_insight.html.markdown b/website/docs/r/opsi_database_insight.html.markdown index 83a0ffd5813..f437a8dd1d8 100644 --- a/website/docs/r/opsi_database_insight.html.markdown +++ b/website/docs/r/opsi_database_insight.html.markdown @@ -19,6 +19,11 @@ Create a Database Insight resource for a Enterprise Manager(EM) managed database resource "oci_opsi_database_insight" "test_database_insight" { #Required compartment_id = var.compartment_id + database_id = oci_database_database.test_database.id + database_resource_type = var.database_insight_database_resource_type + entity_source = var.database_insight_entity_source + + #Optional connection_details { #Required protocol = var.database_insight_connection_details_protocol @@ -59,8 +64,6 @@ resource "oci_opsi_database_insight" "test_database_insight" { user_name = oci_identity_user.test_user.name wallet_secret_id = oci_vault_secret.test_secret.id } - database_id = oci_database_database.test_database.id - database_resource_type = var.database_insight_database_resource_type dbm_private_endpoint_id = oci_dataflow_private_endpoint.test_private_endpoint.id defined_tags = {"foo-namespace.bar-key"= "value"} deployment_type = var.database_insight_deployment_type @@ -114,6 +117,7 @@ The following arguments are supported: * `entity_source` - (Required) (Updatable) Source of the database entity. * `exadata_insight_id` - (Applicable when entity_source=EM_MANAGED_EXTERNAL_DATABASE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Exadata insight. * `freeform_tags` - (Optional) (Updatable) Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` +* `is_advanced_features_enabled` - (Required when entity_source=AUTONOMOUS_DATABASE) Flag is to identify if advanced features for autonomous database is enabled or not * `management_agent_id` - (Required when entity_source=MACS_MANAGED_CLOUD_DATABASE | MACS_MANAGED_EXTERNAL_DATABASE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Management Agent * `opsi_private_endpoint_id` - (Applicable when entity_source=AUTONOMOUS_DATABASE | PE_COMANAGED_DATABASE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the OPSI private endpoint * `dbm_private_endpoint_id` - (Applicable when entity_source=PE_COMANAGED_DATABASE) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Database Management private endpoint. This field and opsi_private_endpoint_id are mutually exclusive. If DBM private endpoint ID is provided, a new OPSI private endpoint ID will be created. @@ -131,27 +135,27 @@ The following attributes are exported: * `compartment_id` - Compartment identifier of the database * `connection_credential_details` - User credential details to connect to the database. This is supplied via the External Database Service. * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. -* `credential_type` - Credential type. +* `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. * `role` - database user role. * `user_name` - database user name. * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. * `connection_details` - Connection details to connect to the database. HostName, protocol, and port should be specified. -* `host_name` - Name of the listener host that will be used to create the connect string to the database. -* `hosts` - List of hosts and port for private endpoint accessed database resource. - * `host_ip` - Host IP used for connection requests for Cloud DB resource. - * `port` - Listener port number used for connection requests for rivate endpoint accessed db resource. -* `port` - Listener port number used for connection requests. -* `protocol` - Protocol used for connection requests for private endpoint accssed database resource. -* `service_name` - Database service name used for connection requests. + * `host_name` - Name of the listener host that will be used to create the connect string to the database. + * `hosts` - List of hosts and port for private endpoint accessed database resource. + * `host_ip` - Host IP used for connection requests for Cloud DB resource. + * `port` - Listener port number used for connection requests for rivate endpoint accessed db resource. + * `port` - Listener port number used for connection requests. + * `protocol` - Protocol used for connection requests for private endpoint accssed database resource. + * `service_name` - Database service name used for connection requests. * `connector_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of External Database Connector * `credential_details` - User credential details to connect to the database. * `credential_source_name` - Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. -* `credential_type` - Credential type. -* `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. -* `role` - database user role. -* `user_name` - database user name. -* `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. +* `credential_type` - CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. + * `password_secret_id` - The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. + * `role` - database user role. + * `user_name` - database user name. + * `wallet_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. * `database_connection_status_details` - A message describing the status of the database connection of this resource. For example, it can be used to provide actionable information about the permission and content validity of the database connection. * `database_display_name` - Display name of database * `database_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database. diff --git a/website/docs/r/opsi_exadata_insight.html.markdown b/website/docs/r/opsi_exadata_insight.html.markdown index 00f05342576..cfe4fba476a 100644 --- a/website/docs/r/opsi_exadata_insight.html.markdown +++ b/website/docs/r/opsi_exadata_insight.html.markdown @@ -126,12 +126,12 @@ The following arguments are supported: * `protocol` - (Required when entity_source=MACS_MANAGED_CLOUD_EXADATA | PE_COMANAGED_EXADATA) Protocol used for connection requests for private endpoint accssed database resource. * `service_name` - (Required when entity_source=MACS_MANAGED_CLOUD_EXADATA | PE_COMANAGED_EXADATA) Database service name used for connection requests. * `credential_details` - (Required when entity_source=PE_COMANAGED_EXADATA) User credential details to connect to the database. - * `credential_source_name` - (Required when entity_source=PE_COMANAGED_EXADATA) Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. - * `credential_type` - (Required) Credential type. - * `password_secret_id` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. - * `role` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) database user role. - * `user_name` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) database user name. - * `wallet_secret_id` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored. This is used for TCPS support in BM/VM/ExaCS cases. + * `credential_source_name` - (Required when entity_source=PE_COMANAGED_EXADATA) Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. + * `credential_type` - (Required) CREDENTIALS_BY_SOURCE is supplied via the External Database Service. CREDENTIALS_BY_VAULT is supplied by secret service to connection PE_COMANAGED_DATABASE and ADB as well. CREDENTIALS_BY_IAM is used db-token to connect only for Autonomous Database. + * `password_secret_id` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) The secret [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) mapping to the database credentials. + * `role` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) database user role. + * `user_name` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) database user name. + * `wallet_secret_id` - (Applicable when credential_type=CREDENTIALS_BY_VAULT) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the database keystore contents are stored.This is used for TCPS support in BM/VM/ExaCS cases. * `database_id` - (Required when entity_source=MACS_MANAGED_CLOUD_EXADATA | PE_COMANAGED_EXADATA) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database. * `database_resource_type` - (Required when entity_source=MACS_MANAGED_CLOUD_EXADATA | PE_COMANAGED_EXADATA) Oracle Cloud Infrastructure database resource type * `dbm_private_endpoint_id` - (Applicable when entity_source=PE_COMANAGED_EXADATA) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Database Management private endpoint diff --git a/website/docs/r/opsi_host_insight.html.markdown b/website/docs/r/opsi_host_insight.html.markdown index fb2c70cf104..1d7937cba41 100644 --- a/website/docs/r/opsi_host_insight.html.markdown +++ b/website/docs/r/opsi_host_insight.html.markdown @@ -82,6 +82,7 @@ The following attributes are exported: * `platform_name` - Platform name. * `platform_type` - Platform type. Supported platformType(s) for MACS-managed external host insight: [LINUX, SOLARIS, WINDOWS]. Supported platformType(s) for MACS-managed cloud host insight: [LINUX]. Supported platformType(s) for EM-managed external host insight: [LINUX, SOLARIS, SUNOS, ZLINUX, WINDOWS, AIX]. * `platform_version` - Platform version. +* `root_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Exadata Infrastructure. This is the OCPU count for Autonomous Database and CPU core count for other database types. * `root_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Exadata Infrastructure. * `state` - The current state of the host. * `status` - Indicates the status of a host insight in Operations Insights From 882961e1c459499642a837b4513cb6c79835920c Mon Sep 17 00:00:00 2001 From: Marcel Casado Date: Tue, 24 Sep 2024 13:38:46 -0600 Subject: [PATCH 09/31] Added - Desktop as a Service: Shape Flexibility --- examples/desktops/desktop_pool/main.tf | 2 +- ...-shape-flexibility-phx.auto.tfvars.example | 20 +++ .../desktop_pool/shape_flexibility/main.tf | 121 +++++++++++++ .../desktop_pool/shape_flexibility/outputs.tf | 21 +++ .../shape_flexibility/provider.tf | 16 ++ .../shape_flexibility/variables.tf | 167 ++++++++++++++++++ .../desktop_pool/terraform.tfvars.template | 10 ++ .../desktops_desktop_pool_test.go | 43 +++++ .../desktops/desktops_desktop_data_source.go | 4 + .../desktops_desktop_pool_data_source.go | 8 + .../desktops_desktop_pool_resource.go | 128 ++++++++++++++ website/docs/d/desktops_desktop.html.markdown | 1 + .../d/desktops_desktop_pool.html.markdown | 12 ++ .../d/desktops_desktop_pools.html.markdown | 12 ++ .../r/desktops_desktop_pool.html.markdown | 35 ++++ 15 files changed, 599 insertions(+), 1 deletion(-) create mode 100644 examples/desktops/desktop_pool/shape_flexibility/desktops-shape-flexibility-phx.auto.tfvars.example create mode 100644 examples/desktops/desktop_pool/shape_flexibility/main.tf create mode 100644 examples/desktops/desktop_pool/shape_flexibility/outputs.tf create mode 100644 examples/desktops/desktop_pool/shape_flexibility/provider.tf create mode 100644 examples/desktops/desktop_pool/shape_flexibility/variables.tf diff --git a/examples/desktops/desktop_pool/main.tf b/examples/desktops/desktop_pool/main.tf index ef24903c4c2..4c845812fb5 100644 --- a/examples/desktops/desktop_pool/main.tf +++ b/examples/desktops/desktop_pool/main.tf @@ -80,7 +80,7 @@ data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" { #Optional # availability_domain = data.oci_identity_availability_domain.ad.name # display_name = var.desktop_pool_display_name - # id = var.desktop_pool_id + id = oci_desktops_desktop_pool.test_desktop_pool.id # state = var.desktop_pool_state } diff --git a/examples/desktops/desktop_pool/shape_flexibility/desktops-shape-flexibility-phx.auto.tfvars.example b/examples/desktops/desktop_pool/shape_flexibility/desktops-shape-flexibility-phx.auto.tfvars.example new file mode 100644 index 00000000000..a33de0fea77 --- /dev/null +++ b/examples/desktops/desktop_pool/shape_flexibility/desktops-shape-flexibility-phx.auto.tfvars.example @@ -0,0 +1,20 @@ +# OCI config profile +config_file_profile="terraform-federation-test" + +# region (us-phoenix-1, ca-toronto-1, etc) +region="us-phoenix-1" + +# Secure Desktops with Shape Flexibility Example Configuration + +compartment_id = "" + +desktop_pool_vcn_id = "" +desktop_pool_subnet_id = "" +desktop_pool_image_id = "" +desktop_pool_image_name = "" +desktop_pool_backup_policy_id = "" +desktop_pool_contact_details = "test%40example.com" +desktop_pool_shape_config_baseline_ocpu_utilization = "BASELINE_1_2" +desktop_pool_shape_config_memory_in_gbs = 4 +desktop_pool_shape_config_ocpus = 2 +desktop_pool_use_dedicated_vm_host = "FALSE" diff --git a/examples/desktops/desktop_pool/shape_flexibility/main.tf b/examples/desktops/desktop_pool/shape_flexibility/main.tf new file mode 100644 index 00000000000..32a3747109c --- /dev/null +++ b/examples/desktops/desktop_pool/shape_flexibility/main.tf @@ -0,0 +1,121 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + + +resource "oci_desktops_desktop_pool" "test_desktop_pool" { + #Required + compartment_id = var.compartment_id + display_name = var.desktop_pool_display_name + contact_details = var.desktop_pool_contact_details + + are_privileged_users = var.desktop_pool_are_privileged_users + availability_domain = data.oci_identity_availability_domain.ad.name + + network_configuration { + #Required + subnet_id = var.desktop_pool_subnet_id + vcn_id = var.desktop_pool_vcn_id + } + + device_policy { + #Required + audio_mode = var.desktop_pool_device_policy_audio_mode + cdm_mode = var.desktop_pool_device_policy_cdm_mode + clipboard_mode = var.desktop_pool_device_policy_clipboard_mode + is_display_enabled = var.desktop_pool_device_policy_is_display_enabled + is_keyboard_enabled = var.desktop_pool_device_policy_is_keyboard_enabled + is_pointer_enabled = var.desktop_pool_device_policy_is_pointer_enabled + is_printing_enabled = var.desktop_pool_device_policy_is_printing_enabled + } + + image { + #Required + image_id = var.desktop_pool_image_id + image_name = var.desktop_pool_image_name + } + + availability_policy { + #Required + start_schedule { + #Required + cron_expression = var.desktop_pool_start_schedule_cron_expr + timezone = var.desktop_pool_start_schedule_timezone + } + stop_schedule { + #Required + cron_expression = var.desktop_pool_stop_schedule_cron_expr + timezone = var.desktop_pool_stop_schedule_timezone + } + } + + is_storage_enabled = var.desktop_pool_is_storage_enabled + storage_backup_policy_id = var.desktop_pool_backup_policy_id + storage_size_in_gbs = var.desktop_pool_storage_size_in_gbs + + shape_name = var.desktop_pool_shape_name + standby_size = var.desktop_pool_standby_size + maximum_size = var.desktop_pool_maximum_size + + #Optional + # defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.desktop_pool_defined_tags_value) + # description = var.desktop_pool_description + # freeform_tags = var.desktop_pool_freeform_tags + # nsg_ids = var.desktop_pool_nsg_ids + # time_start_scheduled = var.desktop_pool_time_start_scheduled + # time_stop_scheduled = var.desktop_pool_time_stop_scheduled + shape_config { + baseline_ocpu_utilization = var.desktop_pool_shape_config_baseline_ocpu_utilization + memory_in_gbs = var.desktop_pool_shape_config_memory_in_gbs + ocpus = var.desktop_pool_shape_config_ocpus + } + + use_dedicated_vm_host = var.desktop_pool_use_dedicated_vm_host +} + +data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" { + #Required + compartment_id = var.compartment_id + + #Optional + # availability_domain = data.oci_identity_availability_domain.ad.name + # display_name = var.desktop_pool_display_name + id = oci_desktops_desktop_pool.test_desktop_pool.id + # state = var.desktop_pool_state +} + +data "oci_desktops_desktop_pool" "test_desktop_pool_datasource" { + #Required + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_desktops" "test_desktop_pool_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_volumes" "test_desktop_pool_volumes_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + #Optional + # display_name = var.desktop_pool_display_name + # state = var.desktop_pool_state +} + +data "oci_identity_availability_domain" "ad" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +data "oci_desktops_desktops" "test_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + state = "ACTIVE" +} + +#data "oci_desktops_desktop" "test_desktop_datasource" { +# desktop_id = data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.0.desktop_id +#} + diff --git a/examples/desktops/desktop_pool/shape_flexibility/outputs.tf b/examples/desktops/desktop_pool/shape_flexibility/outputs.tf new file mode 100644 index 00000000000..a6a113ed692 --- /dev/null +++ b/examples/desktops/desktop_pool/shape_flexibility/outputs.tf @@ -0,0 +1,21 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +output "desktop_pool_id" { + value = [data.oci_desktops_desktop_pools.test_desktop_pools_datasource.desktop_pool_collection.0.items.*.id] +} + +# Output the desktop IDs of the desktop pool +output "desktop_pool_desktop_ids" { + value = [data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.*.desktop_id] +} + +# Output the volume IDs of the desktop pool +output "desktop_pool_volume_ids" { + value = [data.oci_desktops_desktop_pool_volumes.test_desktop_pool_volumes_datasource.desktop_pool_volume_collection.0.items.*.id] +} + +# Output the desktop IDs of the desktop pool +output "desktop_ids" { + value = [data.oci_desktops_desktops.test_desktops_datasource.desktop_collection.0.items.*.id] +} diff --git a/examples/desktops/desktop_pool/shape_flexibility/provider.tf b/examples/desktops/desktop_pool/shape_flexibility/provider.tf new file mode 100644 index 00000000000..ff2c9efa433 --- /dev/null +++ b/examples/desktops/desktop_pool/shape_flexibility/provider.tf @@ -0,0 +1,16 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "config_file_profile" { +} + +provider "oci" { + auth = "SecurityToken" + config_file_profile = var.config_file_profile + region = var.region +} + +provider "local" { + version = ">=1.3.0" # Need this version of the local provider to support base64 encoded inputs +} + diff --git a/examples/desktops/desktop_pool/shape_flexibility/variables.tf b/examples/desktops/desktop_pool/shape_flexibility/variables.tf new file mode 100644 index 00000000000..fa83e24b7db --- /dev/null +++ b/examples/desktops/desktop_pool/shape_flexibility/variables.tf @@ -0,0 +1,167 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "compartment_id" {} + +variable "desktop_pool_are_privileged_users" { + description = "" + default = false +} + +variable "desktop_pool_description" { + description = "" + default = "Pool Description" +} + +variable "desktop_pool_contact_details" { + description = "" + default = "" +} + +variable "desktop_pool_device_policy_audio_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_cdm_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_clipboard_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_is_display_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_keyboard_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_pointer_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_printing_enabled" { + description = "" + default = false +} + +variable "desktop_pool_display_name" { + description = "" + default = "testPool1" +} + +variable "desktop_pool_freeform_tags" { + description = "" + type = map(string) + + default = { + Test = "Test" + } +} + +variable "desktop_pool_standby_size" { + description = "" + default = 2 +} + +variable "desktop_pool_maximum_size" { + description = "" + default = 10 +} + +variable "desktop_pool_nsg_ids" { + description = "" + type = set(string) + default = null +} + +variable "desktop_pool_is_storage_enabled" { + description = "" + default = true +} + +variable "desktop_pool_backup_policy_id" { + description = "" + default = "" +} + +variable "desktop_pool_storage_size_in_gbs" { + description = "" + default = 50 +} + +variable "desktop_pool_vcn_id" { + description = "" +} + +variable "desktop_pool_subnet_id" { + description = "" +} + +variable "desktop_pool_shape_name" { + description = "" + default = "Flex Low" +} + +variable "desktop_pool_image_id" { + description = "" +} + +variable "desktop_pool_image_name" { + description = "" +} + +variable "desktop_pool_start_schedule_cron_expr" { + description = "" + default = "0 10 8 ? * 1" +} + +variable "desktop_pool_start_schedule_timezone" { + description = "" + default = "MST" +} + +variable "desktop_pool_stop_schedule_cron_expr" { + description = "" + default = "0 20 18 ? * 5" +} + +variable "desktop_pool_stop_schedule_timezone" { + description = "" + default = "MST" +} + +variable "desktop_pool_shape_config_baseline_ocpu_utilization" { + default = "BASELINE_1_2" +} + +variable "desktop_pool_shape_config_memory_in_gbs" { + default = 4 +} + +variable "desktop_pool_shape_config_ocpus" { + default = 2 +} + +variable "desktop_pool_use_dedicated_vm_host" { + default = "TRUE" +} + +variable "desktop_pool_state" { + description = "" + default = "ACTIVE" +} + diff --git a/examples/desktops/desktop_pool/terraform.tfvars.template b/examples/desktops/desktop_pool/terraform.tfvars.template index ea6e545f740..4fbb9690902 100644 --- a/examples/desktops/desktop_pool/terraform.tfvars.template +++ b/examples/desktops/desktop_pool/terraform.tfvars.template @@ -41,6 +41,10 @@ config_file_profile="terraform-federation-test" # region (us-phoenix-1, ca-toronto-1, etc) region="" +# needed to get domain availability zone +tenancy_ocid="" + + # To be able to use OCI Secure Desktops it requires to have some customer OCI resources ready in the customer tenancy like a VCN, Subnet and a custom Image. # Additionally a Dynamic Group, service policies and user policies are required. # See setting up the Tenancy: https://docs.oracle.com/en-us/iaas/secure-desktops/setup-tenancy.htm for guidance. @@ -61,3 +65,9 @@ desktop_pool_image_name = "" desktop_pool_backup_policy_id = "" desktop_pool_contact_details = "" +# shape flexibility +desktop_pool_shape_config_baseline_ocpu_utilization = "BASELINE_1_2" +desktop_pool_shape_config_memory_in_gbs = 4 +desktop_pool_shape_config_ocpus = 2 +desktop_pool_use_dedicated_vm_host = "FALSE" + diff --git a/internal/integrationtest/desktops_desktop_pool_test.go b/internal/integrationtest/desktops_desktop_pool_test.go index 7232080113f..83fe445db92 100644 --- a/internal/integrationtest/desktops_desktop_pool_test.go +++ b/internal/integrationtest/desktops_desktop_pool_test.go @@ -66,6 +66,8 @@ var ( "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}}, + "shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolShapeConfigRepresentation}, + "use_dedicated_vm_host": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_use_dedicated_vm_host}`}, "private_access_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolPrivateAccessDetailsRepresentation}, } DesktopsDesktopPoolAvailabilityPolicyRepresentation = map[string]interface{}{ @@ -89,6 +91,11 @@ var ( "subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_subnet_id}`}, "vcn_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_vcn_id}`}, } + DesktopsDesktopPoolShapeConfigRepresentation = map[string]interface{}{ + "baseline_ocpu_utilization": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_shape_config_baseline_ocpu_utilization}`}, + "memory_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_shape_config_memory_in_gbs}`}, + "ocpus": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_shape_config_ocpus}`}, + } DesktopsDesktopPoolPrivateAccessDetailsRepresentation = map[string]interface{}{ "subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_private_access_subnet_id}`}, "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_private_access_nsg_id}`}}, @@ -148,6 +155,18 @@ var ( test_nsg_id = utils.GetEnvSettingWithBlankDefault("test_nsg_id") nsgIdVariableStr = fmt.Sprintf("variable \"test_nsg_id\" { default = \"%s\" }\n", test_nsg_id) + test_use_dedicated_vm_host = utils.GetEnvSettingWithBlankDefault("test_use_dedicated_vm_host") + useDedicatedVmHostVariableStr = fmt.Sprintf("variable \"test_use_dedicated_vm_host\" { default = \"%s\" }\n", test_use_dedicated_vm_host) + + test_shape_config_baseline_ocpu_utilization = utils.GetEnvSettingWithBlankDefault("test_shape_config_baseline_ocpu_utilization") + shapeConfigBaselineOcpuUtilizationVariableStr = fmt.Sprintf("variable \"test_shape_config_baseline_ocpu_utilization\" { default = \"%s\" }\n", test_shape_config_baseline_ocpu_utilization) + + test_shape_config_memory_in_gbs = utils.GetEnvSettingWithBlankDefault("test_shape_config_memory_in_gbs") + shapeConfigMemoryInGbsVariableStr = fmt.Sprintf("variable \"test_shape_config_memory_in_gbs\" { default = \"%s\" }\n", test_shape_config_memory_in_gbs) + + test_shape_config_ocpus = utils.GetEnvSettingWithBlankDefault("test_shape_config_ocpus") + shapeConfigOcpusVariableStr = fmt.Sprintf("variable \"test_shape_config_ocpus\" { default = \"%s\" }\n", test_shape_config_ocpus) + test_private_access_subnet_id = utils.GetEnvSettingWithBlankDefault("test_private_access_subnet_id") privateAccessSubnetIdVariableStr = fmt.Sprintf("variable \"test_private_access_subnet_id\" { default = \"%s\" }\n", test_private_access_subnet_id) @@ -172,6 +191,10 @@ var ( stopScheduleTimezoneCreateVariableStr + stopScheduleTimezoneUpdateVariableStr + nsgIdVariableStr + + useDedicatedVmHostVariableStr + + shapeConfigBaselineOcpuUtilizationVariableStr + + shapeConfigMemoryInGbsVariableStr + + shapeConfigOcpusVariableStr + privateAccessSubnetIdVariableStr + privateAccessNsgIdVariableStr + privateAccessPrivateIpVariableStr + @@ -286,6 +309,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.baseline_ocpu_utilization"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.memory_in_gbs"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.ocpus"), resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), @@ -296,6 +323,7 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "storage_backup_policy_id"), resource.TestCheckResourceAttr(resourceName, "storage_size_in_gbs", "50"), resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttrSet(resourceName, "use_dedicated_vm_host"), func(s *terraform.State) (err error) { resId, err = acctest.FromInstanceState(s, resourceName, "id") @@ -348,6 +376,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.baseline_ocpu_utilization"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.memory_in_gbs"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.ocpus"), resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), @@ -358,6 +390,7 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "storage_backup_policy_id"), resource.TestCheckResourceAttr(resourceName, "storage_size_in_gbs", "50"), resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttrSet(resourceName, "use_dedicated_vm_host"), func(s *terraform.State) (err error) { resId2, err = acctest.FromInstanceState(s, resourceName, "id") @@ -405,6 +438,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "shape_config.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.baseline_ocpu_utilization"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.memory_in_gbs"), + resource.TestCheckResourceAttrSet(resourceName, "shape_config.0.ocpus"), resource.TestCheckResourceAttr(resourceName, "private_access_details.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), @@ -415,6 +452,7 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "storage_backup_policy_id"), resource.TestCheckResourceAttr(resourceName, "storage_size_in_gbs", "50"), resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttrSet(resourceName, "use_dedicated_vm_host"), func(s *terraform.State) (err error) { resId2, err = acctest.FromInstanceState(s, resourceName, "id") @@ -489,11 +527,16 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.endpoint_fqdn"), resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(singularDatasourceName, "private_access_details.0.vcn_id"), + resource.TestCheckResourceAttr(singularDatasourceName, "shape_config.#", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.baseline_ocpu_utilization"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.memory_in_gbs"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.ocpus"), resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_name"), resource.TestCheckResourceAttr(singularDatasourceName, "standby_size", "3"), resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), resource.TestCheckResourceAttr(singularDatasourceName, "storage_size_in_gbs", "50"), resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "use_dedicated_vm_host"), ), }, // verify resource import diff --git a/internal/service/desktops/desktops_desktop_data_source.go b/internal/service/desktops/desktops_desktop_data_source.go index ccf640070aa..96db217f3d1 100644 --- a/internal/service/desktops/desktops_desktop_data_source.go +++ b/internal/service/desktops/desktops_desktop_data_source.go @@ -109,6 +109,10 @@ func DesktopsDesktopDataSource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "operating_system": { + Type: schema.TypeString, + Computed: true, + }, }, }, }, diff --git a/internal/service/desktops/desktops_desktop_pool_data_source.go b/internal/service/desktops/desktops_desktop_pool_data_source.go index c40ca20697e..befa2732de7 100644 --- a/internal/service/desktops/desktops_desktop_pool_data_source.go +++ b/internal/service/desktops/desktops_desktop_pool_data_source.go @@ -131,6 +131,12 @@ func (s *DesktopsDesktopPoolDataSourceCrud) SetData() error { s.D.Set("nsg_ids", s.Res.NsgIds) + if s.Res.ShapeConfig != nil { + s.D.Set("shape_config", []interface{}{DesktopPoolShapeConfigToMap(s.Res.ShapeConfig)}) + } else { + s.D.Set("shape_config", nil) + } + if s.Res.PrivateAccessDetails != nil { s.D.Set("private_access_details", []interface{}{DesktopPoolPrivateAccessDetailsToMap(s.Res.PrivateAccessDetails, true)}) } else { @@ -167,5 +173,7 @@ func (s *DesktopsDesktopPoolDataSourceCrud) SetData() error { s.D.Set("time_stop_scheduled", s.Res.TimeStopScheduled.Format(time.RFC3339Nano)) } + s.D.Set("use_dedicated_vm_host", s.Res.UseDedicatedVmHost) + return nil } diff --git a/internal/service/desktops/desktops_desktop_pool_resource.go b/internal/service/desktops/desktops_desktop_pool_resource.go index fc15c704e7b..3c4a8113c1f 100644 --- a/internal/service/desktops/desktops_desktop_pool_resource.go +++ b/internal/service/desktops/desktops_desktop_pool_resource.go @@ -7,6 +7,7 @@ import ( "context" "fmt" "log" + "strconv" "strings" "time" @@ -180,6 +181,12 @@ func DesktopsDesktopPoolResource() *schema.Resource { }, // Optional + "operating_system": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed }, @@ -268,6 +275,45 @@ func DesktopsDesktopPoolResource() *schema.Resource { Type: schema.TypeString, }, }, + "shape_config": { + Type: schema.TypeList, + Optional: true, + Computed: true, + ForceNew: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "baseline_ocpu_utilization": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + "memory_in_gbs": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ValidateFunc: tfresource.ValidateInt64TypeString, + DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, + }, + "ocpus": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ValidateFunc: tfresource.ValidateInt64TypeString, + DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, + }, + + // Computed + }, + }, + }, "private_access_details": { Type: schema.TypeList, Optional: true, @@ -322,6 +368,12 @@ func DesktopsDesktopPoolResource() *schema.Resource { Optional: true, DiffSuppressFunc: tfresource.TimeDiffSuppressFunction, }, + "use_dedicated_vm_host": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed "active_desktops": { @@ -521,6 +573,17 @@ func (s *DesktopsDesktopPoolResourceCrud) Create() error { } } + if shapeConfig, ok := s.D.GetOkExists("shape_config"); ok { + if tmpList := shapeConfig.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "shape_config", 0) + tmp, err := s.mapToCreateDesktopPoolShapeConfigDetails(fieldKeyFormat) + if err != nil { + return err + } + request.ShapeConfig = &tmp + } + } + if privateAccessDetails, ok := s.D.GetOkExists("private_access_details"); ok { if tmpList := privateAccessDetails.([]interface{}); len(tmpList) > 0 { fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "private_access_details", 0) @@ -568,6 +631,10 @@ func (s *DesktopsDesktopPoolResourceCrud) Create() error { request.TimeStopScheduled = &oci_common.SDKTime{Time: tmp} } + if useDedicatedVmHost, ok := s.D.GetOkExists("use_dedicated_vm_host"); ok { + request.UseDedicatedVmHost = oci_desktops.CreateDesktopPoolDetailsUseDedicatedVmHostEnum(useDedicatedVmHost.(string)) + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "desktops") response, err := s.Client.CreateDesktopPool(context.Background(), request) @@ -924,6 +991,12 @@ func (s *DesktopsDesktopPoolResourceCrud) SetData() error { } s.D.Set("nsg_ids", schema.NewSet(tfresource.LiteralTypeHashCodeForSets, nsgIds)) + if s.Res.ShapeConfig != nil { + s.D.Set("shape_config", []interface{}{DesktopPoolShapeConfigToMap(s.Res.ShapeConfig)}) + } else { + s.D.Set("shape_config", nil) + } + if s.Res.PrivateAccessDetails != nil { s.D.Set("private_access_details", []interface{}{DesktopPoolPrivateAccessDetailsToMap(s.Res.PrivateAccessDetails, false)}) } else { @@ -960,9 +1033,55 @@ func (s *DesktopsDesktopPoolResourceCrud) SetData() error { s.D.Set("time_stop_scheduled", s.Res.TimeStopScheduled.Format(time.RFC3339Nano)) } + s.D.Set("use_dedicated_vm_host", s.Res.UseDedicatedVmHost) + return nil } +func (s *DesktopsDesktopPoolResourceCrud) mapToCreateDesktopPoolShapeConfigDetails(fieldKeyFormat string) (oci_desktops.CreateDesktopPoolShapeConfigDetails, error) { + result := oci_desktops.CreateDesktopPoolShapeConfigDetails{} + + if baselineOcpuUtilization, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "baseline_ocpu_utilization")); ok { + result.BaselineOcpuUtilization = oci_desktops.CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum(baselineOcpuUtilization.(string)) + } + + if memoryInGBs, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "memory_in_gbs")); ok { + tmp := memoryInGBs.(string) + tmpInt64, err := strconv.ParseInt(tmp, 10, 64) + if err != nil { + return result, fmt.Errorf("unable to convert memoryInGBs string: %s to an int64 and encountered error: %v", tmp, err) + } + result.MemoryInGBs = &tmpInt64 + } + + if ocpus, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "ocpus")); ok { + tmp := ocpus.(string) + tmpInt64, err := strconv.ParseInt(tmp, 10, 64) + if err != nil { + return result, fmt.Errorf("unable to convert ocpus string: %s to an int64 and encountered error: %v", tmp, err) + } + result.Ocpus = &tmpInt64 + } + + return result, nil +} + +func DesktopPoolShapeConfigToMap(obj *oci_desktops.DesktopPoolShapeConfig) map[string]interface{} { + result := map[string]interface{}{} + + result["baseline_ocpu_utilization"] = string(obj.BaselineOcpuUtilization) + + if obj.MemoryInGBs != nil { + result["memory_in_gbs"] = strconv.FormatInt(*obj.MemoryInGBs, 10) + } + + if obj.Ocpus != nil { + result["ocpus"] = strconv.FormatInt(*obj.Ocpus, 10) + } + + return result +} + func (s *DesktopsDesktopPoolResourceCrud) mapToCreateDesktopPoolPrivateAccessDetails(fieldKeyFormat string) (oci_desktops.CreateDesktopPoolPrivateAccessDetails, error) { result := oci_desktops.CreateDesktopPoolPrivateAccessDetails{} @@ -1146,6 +1265,11 @@ func (s *DesktopsDesktopPoolResourceCrud) mapToDesktopImage(fieldKeyFormat strin result.ImageName = &tmp } + if operatingSystem, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "operating_system")); ok { + tmp := operatingSystem.(string) + result.OperatingSystem = &tmp + } + return result, nil } @@ -1160,6 +1284,10 @@ func DesktopImageToMap(obj *oci_desktops.DesktopImage) map[string]interface{} { result["image_name"] = string(*obj.ImageName) } + if obj.OperatingSystem != nil { + result["operating_system"] = string(*obj.OperatingSystem) + } + return result } diff --git a/website/docs/d/desktops_desktop.html.markdown b/website/docs/d/desktops_desktop.html.markdown index a5e8ade3371..c00e871a78b 100644 --- a/website/docs/d/desktops_desktop.html.markdown +++ b/website/docs/d/desktops_desktop.html.markdown @@ -48,6 +48,7 @@ The following attributes are exported: * `image` - Provides information about the desktop image. * `image_id` - The OCID of the desktop image. * `image_name` - The name of the desktop image. + * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `id` - The OCID of the desktop. * `pool_id` - The OCID of the desktop pool the desktop is a member of. * `state` - The state of the desktop. diff --git a/website/docs/d/desktops_desktop_pool.html.markdown b/website/docs/d/desktops_desktop_pool.html.markdown index d06f3357222..45d93ed07d7 100644 --- a/website/docs/d/desktops_desktop_pool.html.markdown +++ b/website/docs/d/desktops_desktop_pool.html.markdown @@ -61,12 +61,23 @@ The following attributes are exported: * `image` - Provides information about the desktop image. * `image_id` - The OCID of the desktop image. * `image_name` - The name of the desktop image. + * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `nsg_ids` - A list of network security groups for the network. +* `shape_config` - The shape configuration used for each desktop compute instance in the desktop pool. + * `baseline_ocpu_utilization` - The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: + * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. * `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). * `nsg_ids` - A list of network security groups for the private access. @@ -81,4 +92,5 @@ The following attributes are exported: * `time_created` - The date and time the resource was created. * `time_start_scheduled` - The start time of the desktop pool. * `time_stop_scheduled` - The stop time of the desktop pool. +* `use_dedicated_vm_host` - Indicates whether the desktop pool uses dedicated virtual machine hosts. diff --git a/website/docs/d/desktops_desktop_pools.html.markdown b/website/docs/d/desktops_desktop_pools.html.markdown index e02499cab1d..17efa571a9e 100644 --- a/website/docs/d/desktops_desktop_pools.html.markdown +++ b/website/docs/d/desktops_desktop_pools.html.markdown @@ -77,12 +77,23 @@ The following attributes are exported: * `image` - Provides information about the desktop image. * `image_id` - The OCID of the desktop image. * `image_name` - The name of the desktop image. + * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `nsg_ids` - A list of network security groups for the network. +* `shape_config` - The shape configuration used for each desktop compute instance in the desktop pool. + * `baseline_ocpu_utilization` - The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: + * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. * `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). * `nsg_ids` - A list of network security groups for the private access. @@ -97,4 +108,5 @@ The following attributes are exported: * `time_created` - The date and time the resource was created. * `time_start_scheduled` - The start time of the desktop pool. * `time_stop_scheduled` - The stop time of the desktop pool. +* `use_dedicated_vm_host` - Indicates whether the desktop pool uses dedicated virtual machine hosts. diff --git a/website/docs/r/desktops_desktop_pool.html.markdown b/website/docs/r/desktops_desktop_pool.html.markdown index 8df0b543a0c..2bc67f4a5e7 100644 --- a/website/docs/r/desktops_desktop_pool.html.markdown +++ b/website/docs/r/desktops_desktop_pool.html.markdown @@ -49,6 +49,9 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { #Required image_id = oci_core_image.test_image.id image_name = var.desktop_pool_image_image_name + + #Optional + operating_system = var.desktop_pool_image_operating_system } is_storage_enabled = var.desktop_pool_is_storage_enabled maximum_size = var.desktop_pool_maximum_size @@ -67,6 +70,13 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { description = var.desktop_pool_description freeform_tags = {"Department"= "Finance"} nsg_ids = var.desktop_pool_nsg_ids + shape_config { + + #Optional + baseline_ocpu_utilization = var.desktop_pool_shape_config_baseline_ocpu_utilization + memory_in_gbs = var.desktop_pool_shape_config_memory_in_gbs + ocpus = var.desktop_pool_shape_config_ocpus + } private_access_details { #Required subnet_id = oci_core_subnet.test_subnet.id @@ -77,6 +87,7 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { } time_start_scheduled = var.desktop_pool_time_start_scheduled time_stop_scheduled = var.desktop_pool_time_stop_scheduled + use_dedicated_vm_host = var.desktop_pool_use_dedicated_vm_host } ``` @@ -110,12 +121,23 @@ The following arguments are supported: * `image` - (Required) Provides information about the desktop image. * `image_id` - (Required) The OCID of the desktop image. * `image_name` - (Required) The name of the desktop image. + * `operating_system` - (Optional) The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `is_storage_enabled` - (Required) Indicates whether storage is enabled for the desktop pool. * `maximum_size` - (Required) (Updatable) The maximum number of desktops permitted in the desktop pool. * `network_configuration` - (Required) Provides information about the network configuration of the desktop pool. * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. * `vcn_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `nsg_ids` - (Optional) A list of network security groups for the private access. +* `shape_config` - (Optional) The compute instance shape configuration requested for each desktop in the desktop pool. + * `baseline_ocpu_utilization` - (Optional) The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: + * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + * `memory_in_gbs` - (Optional) The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + * `ocpus` - (Optional) The total number of OCPUs available for each desktop compute instance in the desktop pool. + * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - (Optional) A list of network security groups for the private access. * `private_access_details` - (Optional) The details of the desktop's private access network connectivity to be set up for the desktop pool. * `nsg_ids` - (Optional) A list of network security groups for the private access. * `private_ip` - (Optional) The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. @@ -126,6 +148,7 @@ The following arguments are supported: * `storage_size_in_gbs` - (Required) The size in GBs of the storage for the desktop pool. * `time_start_scheduled` - (Optional) (Updatable) The start time of the desktop pool. * `time_stop_scheduled` - (Optional) (Updatable) The stop time of the desktop pool. +* `use_dedicated_vm_host` - (Optional) Indicates whether the desktop pool uses dedicated virtual machine hosts. ** IMPORTANT ** @@ -163,12 +186,23 @@ The following attributes are exported: * `image` - Provides information about the desktop image. * `image_id` - The OCID of the desktop image. * `image_name` - The name of the desktop image. + * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `nsg_ids` - A list of network security groups for the network. +* `shape_config` - The shape configuration used for each desktop compute instance in the desktop pool. + * `baseline_ocpu_utilization` - The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: + * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `nsg_ids` - A list of network security groups for the network. * `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). * `nsg_ids` - A list of network security groups for the private access. @@ -183,6 +217,7 @@ The following attributes are exported: * `time_created` - The date and time the resource was created. * `time_start_scheduled` - The start time of the desktop pool. * `time_stop_scheduled` - The stop time of the desktop pool. +* `use_dedicated_vm_host` - Indicates whether the desktop pool uses dedicated virtual machine hosts. ## Timeouts From 1081b94a98995caae0044e0dd6a382e28d14bd9f Mon Sep 17 00:00:00 2001 From: Rakshith Siddanahalli Murukannappa Date: Mon, 7 Oct 2024 21:47:28 -0700 Subject: [PATCH 10/31] Vendored - oci-go-sdk v65.75.2 changes for existing & new services --- .../oracle/oci-go-sdk/v65/common/version.go | 2 +- .../v65/containerengine/add_on_options.go | 6 +- .../oci-go-sdk/v65/containerengine/addon.go | 6 +- .../containerengine/addon_configuration.go | 6 +- .../v65/containerengine/addon_error.go | 6 +- .../containerengine/addon_lifecycle_state.go | 6 +- .../containerengine/addon_option_summary.go | 6 +- .../v65/containerengine/addon_summary.go | 6 +- .../addon_version_configuration.go | 6 +- .../v65/containerengine/addon_versions.go | 6 +- .../admission_controller_options.go | 6 +- .../oci-go-sdk/v65/containerengine/cluster.go | 8 +- .../containerengine/cluster_create_options.go | 6 +- .../cluster_endpoint_config.go | 6 +- .../v65/containerengine/cluster_endpoints.go | 6 +- .../cluster_lifecycle_state.go | 6 +- .../v65/containerengine/cluster_metadata.go | 6 +- .../cluster_migrate_to_native_vcn_details.go | 6 +- .../cluster_migrate_to_native_vcn_status.go | 6 +- .../v65/containerengine/cluster_options.go | 6 +- .../cluster_pod_network_option_details.go | 6 +- .../v65/containerengine/cluster_summary.go | 8 +- .../v65/containerengine/cluster_type.go | 6 +- .../containerengine/containerengine_client.go | 94 ++-- .../containerengine/create_cluster_details.go | 6 +- .../create_cluster_endpoint_config_details.go | 6 +- ...eate_cluster_kubeconfig_content_details.go | 6 +- .../create_image_policy_config_details.go | 6 +- .../create_node_pool_details.go | 6 +- .../create_node_pool_node_config_details.go | 6 +- .../create_node_shape_config_details.go | 6 +- .../create_virtual_node_pool_details.go | 6 +- .../create_workload_mapping_details.go | 6 +- .../credential_rotation_status.go | 6 +- ...lete_virtual_node_pool_request_response.go | 4 +- ...rlay_cluster_pod_network_option_details.go | 6 +- ...ay_node_pool_pod_network_option_details.go | 6 +- .../containerengine/image_policy_config.go | 6 +- .../initial_virtual_node_label.go | 6 +- .../containerengine/install_addon_details.go | 6 +- .../v65/containerengine/key_details.go | 6 +- .../v65/containerengine/key_value.go | 6 +- .../kubernetes_network_config.go | 6 +- .../kubernetes_versions_filters.go | 6 +- .../list_clusters_request_response.go | 2 +- .../list_node_pools_request_response.go | 2 +- .../oci-go-sdk/v65/containerengine/node.go | 8 +- .../v65/containerengine/node_error.go | 6 +- .../node_eviction_node_pool_settings.go | 6 +- .../v65/containerengine/node_pool.go | 8 +- .../node_pool_cycling_details.go | 6 +- .../node_pool_lifecycle_state.go | 6 +- .../node_pool_node_config_details.go | 6 +- .../v65/containerengine/node_pool_options.go | 6 +- .../node_pool_placement_config_details.go | 6 +- .../node_pool_pod_network_option_details.go | 6 +- .../v65/containerengine/node_pool_summary.go | 8 +- .../v65/containerengine/node_shape_config.go | 6 +- .../containerengine/node_source_details.go | 6 +- .../v65/containerengine/node_source_option.go | 6 +- .../v65/containerengine/node_source_type.go | 6 +- .../node_source_via_image_details.go | 6 +- .../node_source_via_image_option.go | 6 +- ...tive_cluster_pod_network_option_details.go | 6 +- ...ve_node_pool_pod_network_option_details.go | 6 +- .../persistent_volume_config_details.go | 6 +- .../placement_configuration.go | 6 +- .../v65/containerengine/pod_configuration.go | 6 +- .../v65/containerengine/pod_shape.go | 6 +- .../v65/containerengine/pod_shape_summary.go | 6 +- .../preemptible_node_config_details.go | 6 +- .../v65/containerengine/preemption_action.go | 6 +- .../service_lb_config_details.go | 6 +- .../containerengine/shape_memory_options.go | 6 +- .../shape_network_bandwidth_options.go | 6 +- .../v65/containerengine/shape_ocpu_options.go | 6 +- .../v65/containerengine/sort_order.go | 6 +- .../start_credential_rotation_details.go | 8 +- .../oci-go-sdk/v65/containerengine/taint.go | 6 +- .../terminate_preemption_action.go | 6 +- .../containerengine/update_addon_details.go | 6 +- .../containerengine/update_cluster_details.go | 6 +- .../update_cluster_endpoint_config_details.go | 6 +- .../update_cluster_options_details.go | 6 +- .../update_image_policy_config_details.go | 6 +- .../update_node_pool_details.go | 6 +- .../update_node_pool_node_config_details.go | 6 +- .../update_node_shape_config_details.go | 6 +- .../update_virtual_node_pool_details.go | 6 +- .../update_workload_mapping_details.go | 6 +- .../v65/containerengine/virtual_node.go | 6 +- .../virtual_node_lifecycle_state.go | 6 +- .../v65/containerengine/virtual_node_pool.go | 6 +- .../virtual_node_pool_lifecycle_state.go | 6 +- .../virtual_node_pool_summary.go | 6 +- .../containerengine/virtual_node_summary.go | 6 +- .../v65/containerengine/virtual_node_tags.go | 6 +- .../v65/containerengine/work_request.go | 6 +- .../v65/containerengine/work_request_error.go | 6 +- .../containerengine/work_request_log_entry.go | 6 +- .../work_request_operation_type.go | 10 +- .../containerengine/work_request_resource.go | 6 +- .../containerengine/work_request_status.go | 6 +- .../containerengine/work_request_summary.go | 7 +- .../v65/containerengine/workload_mapping.go | 10 +- .../workload_mapping_lifecycle_state.go | 6 +- .../workload_mapping_summary.go | 10 +- ...h_attach_paravirtualized_volume_details.go | 153 +++++++ .../v65/core/launch_attach_volume_details.go | 4 + .../v65/database/cloud_vm_cluster.go | 2 + .../v65/database/cloud_vm_cluster_summary.go | 2 + .../create_cloud_vm_cluster_details.go | 2 + .../v65/database/create_vm_cluster_details.go | 2 + .../update_cloud_vm_cluster_details.go | 2 + .../v65/database/update_vm_cluster_details.go | 2 + .../oci-go-sdk/v65/database/vm_cluster.go | 2 + .../v65/database/vm_cluster_summary.go | 2 + ..._pool_desktop_session_lifecycle_actions.go | 39 ++ .../desktops/create_desktop_pool_details.go | 60 ++- ...ate_desktop_pool_private_access_details.go | 47 ++ ...reate_desktop_pool_shape_config_details.go | 102 +++++ .../oci-go-sdk/v65/desktops/desktop_image.go | 3 + .../desktops/desktop_network_configuration.go | 5 +- .../oci-go-sdk/v65/desktops/desktop_pool.go | 60 ++- .../desktop_pool_private_access_details.go | 55 +++ .../v65/desktops/desktop_pool_shape_config.go | 102 +++++ .../desktop_session_lifecycle_actions.go | 39 ++ .../v65/desktops/disconnect_config.go | 88 ++++ .../v65/desktops/inactivity_config.go | 88 ++++ .../desktops/stop_desktop_request_response.go | 3 + ..._pool_desktop_session_lifecycle_actions.go | 39 ++ .../desktops/update_desktop_pool_details.go | 2 + ...e_fusion_environment_admin_user_details.go | 6 +- .../fusionapps_fusionapplications_client.go | 2 +- .../loadbalancer/connection_configuration.go | 48 +++ ...ate_autonomous_database_insight_details.go | 150 +++++++ .../opsi/create_database_insight_details.go | 4 + .../oci-go-sdk/v65/opsi/credential_by_iam.go | 61 +++ .../oci-go-sdk/v65/opsi/credential_details.go | 8 + ...ble_autonomous_database_insight_details.go | 123 ++++++ .../opsi/enable_database_insight_details.go | 4 + .../create_maintenance_window_details.go | 87 ++++ ...ate_maintenance_window_request_response.go | 104 +++++ ...ate_maintenance_window_resource_details.go | 44 ++ ...ete_maintenance_window_request_response.go | 98 +++++ ...get_maintenance_window_request_response.go | 94 ++++ ...st_maintenance_windows_request_response.go | 345 +++++++++++++++ .../v65/stackmonitoring/maintenance_window.go | 130 ++++++ .../maintenance_window_collection.go | 39 ++ .../maintenance_window_lifecycle_details.go | 60 +++ .../maintenance_window_lifecycle_state.go | 80 ++++ .../maintenance_window_operation_status.go | 60 +++ .../maintenance_window_operation_type.go | 64 +++ .../maintenance_window_schedule.go | 123 ++++++ .../maintenance_window_sort_by.go | 68 +++ .../maintenance_window_summary.go | 144 +++++++ .../monitored_resource_details.go | 49 +++ .../one_time_maintenance_window_schedule.go | 57 +++ .../v65/stackmonitoring/operation_type.go | 16 + .../recurrent_maintenance_window_schedule.go | 71 +++ ...nance_window_operation_request_response.go | 98 +++++ .../stackmonitoring/stackmonitoring_client.go | 408 ++++++++++++++++++ ...top_maintenance_window_request_response.go | 98 +++++ .../update_maintenance_window_details.go | 75 ++++ ...ate_maintenance_window_request_response.go | 101 +++++ .../create_configuration_request_response.go | 5 - .../zpr/create_zpr_policy_request_response.go | 5 - .../zpr/delete_zpr_policy_request_response.go | 15 - .../zpr/get_configuration_request_response.go | 5 - ...iguration_work_request_request_response.go | 15 - .../zpr/get_zpr_policy_request_response.go | 15 - ...pr_policy_work_request_request_response.go | 15 - ...on_work_request_errors_request_response.go | 15 - ...tion_work_request_logs_request_response.go | 15 - ...guration_work_requests_request_response.go | 5 - .../zpr/list_zpr_policies_request_response.go | 5 - ...cy_work_request_errors_request_response.go | 15 - ...licy_work_request_logs_request_response.go | 15 - ...r_policy_work_requests_request_response.go | 5 - .../zpr/update_zpr_policy_request_response.go | 15 - .../oracle/oci-go-sdk/v65/zpr/zpr_client.go | 2 +- 181 files changed, 4194 insertions(+), 538 deletions(-) create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_paravirtualized_volume_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_desktop_session_lifecycle_actions.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_private_access_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_shape_config_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_private_access_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_shape_config.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_session_lifecycle_actions.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/disconnect_config.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/inactivity_config.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_desktop_session_lifecycle_actions.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_autonomous_database_insight_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_by_iam.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_autonomous_database_insight_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_resource_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/delete_maintenance_window_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/get_maintenance_window_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/list_maintenance_windows_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_collection.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_state.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_status.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_type.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_schedule.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_sort_by.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_summary.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/monitored_resource_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/one_time_maintenance_window_schedule.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/recurrent_maintenance_window_schedule.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/retry_failed_maintenance_window_operation_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stop_maintenance_window_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_request_response.go diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go b/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go index 7c69bfa3a84..7e36c4cd322 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go @@ -13,7 +13,7 @@ import ( const ( major = "65" minor = "75" - patch = "1" + patch = "2" tag = "" ) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/add_on_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/add_on_options.go index f21717d8071..d7944957edc 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/add_on_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/add_on_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon.go index a181fe9b2c3..c6247ce6ade 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_configuration.go index 18e45e98ca2..4d79d670b8e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_configuration.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_error.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_error.go index 76a0c6249de..2f10b7f9335 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_error.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_error.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_lifecycle_state.go index 37347a6fb38..e7339e90ce6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_option_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_option_summary.go index a8d46800c9d..46210220f72 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_option_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_option_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_summary.go index b4bf81ebb29..aaf7c03f3f5 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_version_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_version_configuration.go index fec500f1f09..8c8d9c3eeff 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_version_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_version_configuration.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_versions.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_versions.go index 01a61fab55e..2296534d316 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_versions.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/addon_versions.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/admission_controller_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/admission_controller_options.go index 36a22ba20cc..d80d33ca8c0 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/admission_controller_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/admission_controller_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go index 0df24041d15..da6f644fca8 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -62,7 +62,7 @@ type Cluster struct { // Metadata about the cluster. Metadata *ClusterMetadata `mandatory:"false" json:"metadata"` - // The state of the cluster masters. + // The state of the cluster masters. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState ClusterLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` // Details about the state of the cluster masters. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go index ca766bbffc2..eafbcf7c206 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoint_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoint_config.go index c4dbd716af0..4d2db14a0a9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoint_config.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoint_config.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoints.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoints.go index 03596b64c15..d0b7e5bc56c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoints.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_endpoints.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_lifecycle_state.go index bcd6912603d..67cb8985835 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_metadata.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_metadata.go index d95f01c117d..25a4ddce7f5 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_metadata.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_metadata.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_details.go index 666ba6fab8a..829b4308aa9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_status.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_status.go index 950acfb5e66..e57770322b2 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_status.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_migrate_to_native_vcn_status.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_options.go index cd4839078ff..f1790141ba1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_pod_network_option_details.go index 5d5caf2ae87..dc854ded848 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_summary.go index 9f75d7e7d45..d84864fb280 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -59,7 +59,7 @@ type ClusterSummary struct { // Metadata about the cluster. Metadata *ClusterMetadata `mandatory:"false" json:"metadata"` - // The state of the cluster masters. + // The state of the cluster masters. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState ClusterLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` // Details about the state of the cluster masters. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_type.go index bd036e1c4df..52e78765803 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_type.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_type.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/containerengine_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/containerengine_client.go index bb64cd79f2b..ff2e20351b3 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/containerengine_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/containerengine_client.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -142,7 +142,7 @@ func (client ContainerEngineClient) clusterMigrateToNativeVcn(ctx context.Contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/ClusterMigrateToNativeVcn" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ClusterMigrateToNativeVcn", apiReferenceLink) return response, err } @@ -205,7 +205,7 @@ func (client ContainerEngineClient) completeCredentialRotation(ctx context.Conte defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/CompleteCredentialRotation" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CompleteCredentialRotation", apiReferenceLink) return response, err } @@ -268,7 +268,7 @@ func (client ContainerEngineClient) createCluster(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/CreateCluster" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CreateCluster", apiReferenceLink) return response, err } @@ -325,7 +325,7 @@ func (client ContainerEngineClient) createKubeconfig(ctx context.Context, reques httpResponse, err = client.Call(ctx, &httpRequest) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/CreateKubeconfig" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CreateKubeconfig", apiReferenceLink) return response, err } @@ -388,7 +388,7 @@ func (client ContainerEngineClient) createNodePool(ctx context.Context, request defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePool/CreateNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CreateNodePool", apiReferenceLink) return response, err } @@ -451,7 +451,7 @@ func (client ContainerEngineClient) createVirtualNodePool(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/CreateVirtualNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CreateVirtualNodePool", apiReferenceLink) return response, err } @@ -514,7 +514,7 @@ func (client ContainerEngineClient) createWorkloadMapping(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkloadMapping/CreateWorkloadMapping" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "CreateWorkloadMapping", apiReferenceLink) return response, err } @@ -572,7 +572,7 @@ func (client ContainerEngineClient) deleteCluster(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/DeleteCluster" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteCluster", apiReferenceLink) return response, err } @@ -630,7 +630,7 @@ func (client ContainerEngineClient) deleteNode(ctx context.Context, request comm defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePool/DeleteNode" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteNode", apiReferenceLink) return response, err } @@ -688,7 +688,7 @@ func (client ContainerEngineClient) deleteNodePool(ctx context.Context, request defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePool/DeleteNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteNodePool", apiReferenceLink) return response, err } @@ -746,7 +746,7 @@ func (client ContainerEngineClient) deleteVirtualNodePool(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/DeleteVirtualNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteVirtualNodePool", apiReferenceLink) return response, err } @@ -804,7 +804,7 @@ func (client ContainerEngineClient) deleteWorkRequest(ctx context.Context, reque defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkRequest/DeleteWorkRequest" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteWorkRequest", apiReferenceLink) return response, err } @@ -862,7 +862,7 @@ func (client ContainerEngineClient) deleteWorkloadMapping(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkloadMapping/DeleteWorkloadMapping" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DeleteWorkloadMapping", apiReferenceLink) return response, err } @@ -920,7 +920,7 @@ func (client ContainerEngineClient) disableAddon(ctx context.Context, request co defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/DisableAddon" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "DisableAddon", apiReferenceLink) return response, err } @@ -978,7 +978,7 @@ func (client ContainerEngineClient) getAddon(ctx context.Context, request common defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/GetAddon" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetAddon", apiReferenceLink) return response, err } @@ -1036,7 +1036,7 @@ func (client ContainerEngineClient) getCluster(ctx context.Context, request comm defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/GetCluster" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetCluster", apiReferenceLink) return response, err } @@ -1094,7 +1094,7 @@ func (client ContainerEngineClient) getClusterMigrateToNativeVcnStatus(ctx conte defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/ClusterMigrateToNativeVcnStatus/GetClusterMigrateToNativeVcnStatus" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetClusterMigrateToNativeVcnStatus", apiReferenceLink) return response, err } @@ -1152,7 +1152,7 @@ func (client ContainerEngineClient) getClusterOptions(ctx context.Context, reque defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/ClusterOptions/GetClusterOptions" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetClusterOptions", apiReferenceLink) return response, err } @@ -1210,7 +1210,7 @@ func (client ContainerEngineClient) getCredentialRotationStatus(ctx context.Cont defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/CredentialRotationStatus/GetCredentialRotationStatus" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetCredentialRotationStatus", apiReferenceLink) return response, err } @@ -1268,7 +1268,7 @@ func (client ContainerEngineClient) getNodePool(ctx context.Context, request com defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePool/GetNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetNodePool", apiReferenceLink) return response, err } @@ -1326,7 +1326,7 @@ func (client ContainerEngineClient) getNodePoolOptions(ctx context.Context, requ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePoolOptions/GetNodePoolOptions" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetNodePoolOptions", apiReferenceLink) return response, err } @@ -1384,7 +1384,7 @@ func (client ContainerEngineClient) getVirtualNode(ctx context.Context, request defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/GetVirtualNode" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetVirtualNode", apiReferenceLink) return response, err } @@ -1442,7 +1442,7 @@ func (client ContainerEngineClient) getVirtualNodePool(ctx context.Context, requ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/GetVirtualNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetVirtualNodePool", apiReferenceLink) return response, err } @@ -1500,7 +1500,7 @@ func (client ContainerEngineClient) getWorkRequest(ctx context.Context, request defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkRequest/GetWorkRequest" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetWorkRequest", apiReferenceLink) return response, err } @@ -1558,7 +1558,7 @@ func (client ContainerEngineClient) getWorkloadMapping(ctx context.Context, requ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkloadMapping/GetWorkloadMapping" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "GetWorkloadMapping", apiReferenceLink) return response, err } @@ -1621,7 +1621,7 @@ func (client ContainerEngineClient) installAddon(ctx context.Context, request co defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/InstallAddon" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "InstallAddon", apiReferenceLink) return response, err } @@ -1679,7 +1679,7 @@ func (client ContainerEngineClient) listAddonOptions(ctx context.Context, reques defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/AddonOptionSummary/ListAddonOptions" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListAddonOptions", apiReferenceLink) return response, err } @@ -1737,7 +1737,7 @@ func (client ContainerEngineClient) listAddons(ctx context.Context, request comm defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/ListAddons" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListAddons", apiReferenceLink) return response, err } @@ -1795,7 +1795,7 @@ func (client ContainerEngineClient) listClusters(ctx context.Context, request co defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/ClusterSummary/ListClusters" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListClusters", apiReferenceLink) return response, err } @@ -1853,7 +1853,7 @@ func (client ContainerEngineClient) listNodePools(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePoolSummary/ListNodePools" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListNodePools", apiReferenceLink) return response, err } @@ -1911,7 +1911,7 @@ func (client ContainerEngineClient) listPodShapes(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/PodShapeSummary/ListPodShapes" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListPodShapes", apiReferenceLink) return response, err } @@ -1969,7 +1969,7 @@ func (client ContainerEngineClient) listVirtualNodePools(ctx context.Context, re defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePoolSummary/ListVirtualNodePools" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListVirtualNodePools", apiReferenceLink) return response, err } @@ -2027,7 +2027,7 @@ func (client ContainerEngineClient) listVirtualNodes(ctx context.Context, reques defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/ListVirtualNodes" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListVirtualNodes", apiReferenceLink) return response, err } @@ -2085,7 +2085,7 @@ func (client ContainerEngineClient) listWorkRequestErrors(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkRequestError/ListWorkRequestErrors" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListWorkRequestErrors", apiReferenceLink) return response, err } @@ -2143,7 +2143,7 @@ func (client ContainerEngineClient) listWorkRequestLogs(ctx context.Context, req defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkRequestLogEntry/ListWorkRequestLogs" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListWorkRequestLogs", apiReferenceLink) return response, err } @@ -2201,7 +2201,7 @@ func (client ContainerEngineClient) listWorkRequests(ctx context.Context, reques defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkRequestSummary/ListWorkRequests" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListWorkRequests", apiReferenceLink) return response, err } @@ -2259,7 +2259,7 @@ func (client ContainerEngineClient) listWorkloadMappings(ctx context.Context, re defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkloadMappingSummary/ListWorkloadMappings" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "ListWorkloadMappings", apiReferenceLink) return response, err } @@ -2322,7 +2322,7 @@ func (client ContainerEngineClient) startCredentialRotation(ctx context.Context, defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/StartCredentialRotation" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "StartCredentialRotation", apiReferenceLink) return response, err } @@ -2380,7 +2380,7 @@ func (client ContainerEngineClient) updateAddon(ctx context.Context, request com defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/UpdateAddon" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateAddon", apiReferenceLink) return response, err } @@ -2438,7 +2438,7 @@ func (client ContainerEngineClient) updateCluster(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/UpdateCluster" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateCluster", apiReferenceLink) return response, err } @@ -2496,7 +2496,7 @@ func (client ContainerEngineClient) updateClusterEndpointConfig(ctx context.Cont defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/Cluster/UpdateClusterEndpointConfig" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateClusterEndpointConfig", apiReferenceLink) return response, err } @@ -2554,7 +2554,7 @@ func (client ContainerEngineClient) updateNodePool(ctx context.Context, request defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/NodePool/UpdateNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateNodePool", apiReferenceLink) return response, err } @@ -2612,7 +2612,7 @@ func (client ContainerEngineClient) updateVirtualNodePool(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/VirtualNodePool/UpdateVirtualNodePool" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateVirtualNodePool", apiReferenceLink) return response, err } @@ -2670,7 +2670,7 @@ func (client ContainerEngineClient) updateWorkloadMapping(ctx context.Context, r defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/containerengine/20180222/WorkloadMapping/UpdateWorkloadMapping" + apiReferenceLink := "" err = common.PostProcessServiceError(err, "ContainerEngine", "UpdateWorkloadMapping", apiReferenceLink) return response, err } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_details.go index b7fe3ddc513..60c01becbc9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_endpoint_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_endpoint_config_details.go index 9a00e3ad11d..f847686e7cf 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_endpoint_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_endpoint_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_kubeconfig_content_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_kubeconfig_content_details.go index 0524c448bf7..e108dded1cd 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_kubeconfig_content_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_cluster_kubeconfig_content_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_image_policy_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_image_policy_config_details.go index dbbfedadad9..b7abd792821 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_image_policy_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_image_policy_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_details.go index 2f13ea482f3..3dfdfdf2e32 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_node_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_node_config_details.go index caf3056bc6e..1b229cd5426 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_node_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_pool_node_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_shape_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_shape_config_details.go index b4a4e022e63..0e1efee1f86 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_shape_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_node_shape_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_virtual_node_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_virtual_node_pool_details.go index ba8d283e69d..212c6566817 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_virtual_node_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_virtual_node_pool_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_workload_mapping_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_workload_mapping_details.go index c154a705019..080a552bd31 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_workload_mapping_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/create_workload_mapping_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/credential_rotation_status.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/credential_rotation_status.go index 50903c9cf74..f3a3bce1e48 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/credential_rotation_status.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/credential_rotation_status.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/delete_virtual_node_pool_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/delete_virtual_node_pool_request_response.go index 5cc62ebc83d..394309a191c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/delete_virtual_node_pool_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/delete_virtual_node_pool_request_response.go @@ -30,11 +30,11 @@ type DeleteVirtualNodePoolRequest struct { // Oracle about a particular request, please provide the request ID. OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` - // Duration after which Sk8s will give up eviction of the pods on the node. + // Duration after which SKE will give up eviction of the pods on the node. // PT0M will indicate you want to delete the virtual node without cordon and drain. Default PT60M, Min PT0M, Max: PT60M. Format ISO 8601 e.g PT30M OverrideEvictionGraceDurationVnp *string `mandatory:"false" contributesTo:"query" name:"overrideEvictionGraceDurationVnp"` - // If the underlying compute instance should be deleted if you cannot evict all the pods in grace period + // If the underlying virtual node should be force deleted if all the pods are not evicted in the evictionGraceDuration. IsForceDeletionAfterOverrideGraceDurationVnp *bool `mandatory:"false" contributesTo:"query" name:"isForceDeletionAfterOverrideGraceDurationVnp"` // Metadata about the request. This information will not be transmitted to the service, but diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_cluster_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_cluster_pod_network_option_details.go index 67caae6aad7..73031e91849 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_cluster_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_cluster_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_node_pool_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_node_pool_pod_network_option_details.go index ab642e48b27..54e054c010b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_node_pool_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/flannel_overlay_node_pool_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/image_policy_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/image_policy_config.go index 00d7e80e004..30a0bbc59fe 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/image_policy_config.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/image_policy_config.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/initial_virtual_node_label.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/initial_virtual_node_label.go index 5e8c051822a..e4165e880ad 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/initial_virtual_node_label.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/initial_virtual_node_label.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/install_addon_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/install_addon_details.go index d4d09745f49..cd9a7669086 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/install_addon_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/install_addon_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_details.go index 18be063db54..9d9e670cdba 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_value.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_value.go index e787c82afc3..8857b464671 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_value.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/key_value.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_network_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_network_config.go index 1e48b57f0a3..b19c03a3a2b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_network_config.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_network_config.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_versions_filters.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_versions_filters.go index 87bc039e376..3c394203375 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_versions_filters.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/kubernetes_versions_filters.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_clusters_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_clusters_request_response.go index 4ea045c9c2e..114fd486db9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_clusters_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_clusters_request_response.go @@ -21,7 +21,7 @@ type ListClustersRequest struct { // The OCID of the compartment. CompartmentId *string `mandatory:"true" contributesTo:"query" name:"compartmentId"` - // A cluster lifecycle state to filter on. Can have multiple parameters of this name. + // A cluster lifecycle state to filter on. Can have multiple parameters of this name. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState []ClusterLifecycleStateEnum `contributesTo:"query" name:"lifecycleState" omitEmpty:"true" collectionFormat:"multi"` // The name to filter on. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_node_pools_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_node_pools_request_response.go index 1b761b07d8b..9052e163d15 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_node_pools_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/list_node_pools_request_response.go @@ -46,7 +46,7 @@ type ListNodePoolsRequest struct { // Oracle about a particular request, please provide the request ID. OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` - // A list of nodepool lifecycle states on which to filter on, matching any of the list items (OR logic). eg. [ACTIVE, DELETING] + // A list of nodepool lifecycle states on which to filter on, matching any of the list items (OR logic). eg. ACTIVE, DELETING. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState []NodePoolLifecycleStateEnum `contributesTo:"query" name:"lifecycleState" omitEmpty:"true" collectionFormat:"multi"` // Metadata about the request. This information will not be transmitted to the service, but diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node.go index cf8a5b44e3c..643d95669fa 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -64,7 +64,7 @@ type Node struct { // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` - // The state of the node. + // The state of the node. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState NodeLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` // Details about the state of the node. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_error.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_error.go index 837fd903ba8..f25519f5c07 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_error.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_error.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_eviction_node_pool_settings.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_eviction_node_pool_settings.go index f9272eaba82..cee7b517928 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_eviction_node_pool_settings.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_eviction_node_pool_settings.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool.go index c5a0f8167eb..562cb9eabf1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -24,7 +24,7 @@ type NodePool struct { // The OCID of the node pool. Id *string `mandatory:"false" json:"id"` - // The state of the nodepool. + // The state of the nodepool. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState NodePoolLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` // Details about the state of the nodepool. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_cycling_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_cycling_details.go index 0f35181c6bf..63e7923b693 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_cycling_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_cycling_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_lifecycle_state.go index 8d1d8c39e90..1f74dbd290d 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_node_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_node_config_details.go index 2de50c7a2ee..ae8faf928b1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_node_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_node_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_options.go index d4fd90df601..b9332dd2005 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_placement_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_placement_config_details.go index 0afa620ef41..1baeb94de9f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_placement_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_placement_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_pod_network_option_details.go index 64924b89260..96b1b7d6ad1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_summary.go index ce46b04f97f..3d8f8e22c17 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_pool_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -24,7 +24,7 @@ type NodePoolSummary struct { // The OCID of the node pool. Id *string `mandatory:"false" json:"id"` - // The state of the nodepool. + // The state of the nodepool. For more information, see Monitoring Clusters (https://docs.cloud.oracle.com/Content/ContEng/Tasks/contengmonitoringclusters.htm) LifecycleState NodePoolLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` // Details about the state of the nodepool. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_shape_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_shape_config.go index ede30810c17..b5a24ef74d1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_shape_config.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_shape_config.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_details.go index 4a9ec7c67e2..8fdbe27c191 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_option.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_option.go index c13fa545e1f..a56ad2fafc4 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_option.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_option.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_type.go index 7696620c277..6aa63cec483 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_type.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_type.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_details.go index 86e7bc7034c..d8f9bb20606 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_option.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_option.go index 2eca0010fd3..3dea684936f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_option.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/node_source_via_image_option.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_cluster_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_cluster_pod_network_option_details.go index 24ba042adff..2cc1f3d7ad4 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_cluster_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_cluster_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_node_pool_pod_network_option_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_node_pool_pod_network_option_details.go index 778a7839def..a3e715a5608 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_node_pool_pod_network_option_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/oci_vcn_ip_native_node_pool_pod_network_option_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/persistent_volume_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/persistent_volume_config_details.go index 0e4876dd3fd..7a98797c967 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/persistent_volume_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/persistent_volume_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/placement_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/placement_configuration.go index 40f9b10ec02..edd17776ad4 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/placement_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/placement_configuration.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_configuration.go index faf3f60c017..9d847384e23 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_configuration.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape.go index 36fcb8906a7..4db17edcd6b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape_summary.go index 7740c796f1d..e20bcd45242 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/pod_shape_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemptible_node_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemptible_node_config_details.go index 96783639c68..18310c90393 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemptible_node_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemptible_node_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemption_action.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemption_action.go index 577a85dfd4f..55530ca8ef6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemption_action.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/preemption_action.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/service_lb_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/service_lb_config_details.go index 214f6335986..49521e94e4f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/service_lb_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/service_lb_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_memory_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_memory_options.go index ac979bad542..f56fb9e325e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_memory_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_memory_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_network_bandwidth_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_network_bandwidth_options.go index 46a64366925..9ea7342d047 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_network_bandwidth_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_network_bandwidth_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_ocpu_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_ocpu_options.go index abc825c21ac..8ea6491e510 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_ocpu_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/shape_ocpu_options.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/sort_order.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/sort_order.go index 214857a6602..ebe40a0fa7f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/sort_order.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/sort_order.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/start_credential_rotation_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/start_credential_rotation_details.go index 92e8b5d4fae..cf45729c633 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/start_credential_rotation_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/start_credential_rotation_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -20,7 +20,7 @@ import ( // StartCredentialRotationDetails Properties that define a request to start credential rotation on a kubernetes cluster. type StartCredentialRotationDetails struct { - // The duration in days(in ISO 8601 notation eg. P5D) after which the old credentials should be retired. Maximum delay duration is 14 days. + // The duration in days(in ISO 8601 notation eg. P5D) after which the old credentials should be retired. Maximum delay duration is 90 days. AutoCompletionDelayDuration *string `mandatory:"true" json:"autoCompletionDelayDuration"` } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/taint.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/taint.go index eaafe914a06..15bcec0b74b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/taint.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/taint.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/terminate_preemption_action.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/terminate_preemption_action.go index 478abdf3b84..6113f332c3c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/terminate_preemption_action.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/terminate_preemption_action.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_addon_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_addon_details.go index 7d164a5ad1d..27d01bcc1b4 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_addon_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_addon_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_details.go index 1b16d396713..e10c3039ef3 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_endpoint_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_endpoint_config_details.go index 649d9f68cfd..e86d8047f7c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_endpoint_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_endpoint_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go index 370c88e40a7..8351a2c734e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_image_policy_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_image_policy_config_details.go index b9737776bca..bf1266a56f1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_image_policy_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_image_policy_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_details.go index a5b4be323a5..1643a11dc4a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_node_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_node_config_details.go index b02f0106986..cbeef7c02e6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_node_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_pool_node_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_shape_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_shape_config_details.go index f2a6263da43..1dbd9a1be71 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_shape_config_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_node_shape_config_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_virtual_node_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_virtual_node_pool_details.go index 8064c5c295a..da7cff35176 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_virtual_node_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_virtual_node_pool_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_workload_mapping_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_workload_mapping_details.go index bdae873eaf3..a7ff13899c9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_workload_mapping_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_workload_mapping_details.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node.go index a6a6db6014b..29a6231cd16 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_lifecycle_state.go index 4950deecae5..a29b0ff389a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool.go index 3c15f6f6967..188355de894 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_lifecycle_state.go index 3b66b86dbf1..f129e44da63 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_summary.go index caa4a3a3252..6ec4675ed6e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_pool_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_summary.go index f5922be3304..e387e536527 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_tags.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_tags.go index 173cda2280b..a9db750c1e8 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_tags.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/virtual_node_tags.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request.go index b8fe6605c37..4ea63058bcd 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_error.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_error.go index f9044250b71..ef6f6f5a211 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_error.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_error.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_log_entry.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_log_entry.go index 235ebdfd40b..8a8d7f9975f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_log_entry.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_log_entry.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_operation_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_operation_type.go index 15c7e7ac9e9..cf959fdb549 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_operation_type.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_operation_type.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -23,6 +23,7 @@ const ( WorkRequestOperationTypeClusterCreate WorkRequestOperationTypeEnum = "CLUSTER_CREATE" WorkRequestOperationTypeClusterUpdate WorkRequestOperationTypeEnum = "CLUSTER_UPDATE" WorkRequestOperationTypeClusterDelete WorkRequestOperationTypeEnum = "CLUSTER_DELETE" + WorkRequestOperationTypeCreateNamespace WorkRequestOperationTypeEnum = "CREATE_NAMESPACE" WorkRequestOperationTypeNodepoolCreate WorkRequestOperationTypeEnum = "NODEPOOL_CREATE" WorkRequestOperationTypeNodepoolUpdate WorkRequestOperationTypeEnum = "NODEPOOL_UPDATE" WorkRequestOperationTypeNodepoolDelete WorkRequestOperationTypeEnum = "NODEPOOL_DELETE" @@ -43,6 +44,7 @@ var mappingWorkRequestOperationTypeEnum = map[string]WorkRequestOperationTypeEnu "CLUSTER_CREATE": WorkRequestOperationTypeClusterCreate, "CLUSTER_UPDATE": WorkRequestOperationTypeClusterUpdate, "CLUSTER_DELETE": WorkRequestOperationTypeClusterDelete, + "CREATE_NAMESPACE": WorkRequestOperationTypeCreateNamespace, "NODEPOOL_CREATE": WorkRequestOperationTypeNodepoolCreate, "NODEPOOL_UPDATE": WorkRequestOperationTypeNodepoolUpdate, "NODEPOOL_DELETE": WorkRequestOperationTypeNodepoolDelete, @@ -63,6 +65,7 @@ var mappingWorkRequestOperationTypeEnumLowerCase = map[string]WorkRequestOperati "cluster_create": WorkRequestOperationTypeClusterCreate, "cluster_update": WorkRequestOperationTypeClusterUpdate, "cluster_delete": WorkRequestOperationTypeClusterDelete, + "create_namespace": WorkRequestOperationTypeCreateNamespace, "nodepool_create": WorkRequestOperationTypeNodepoolCreate, "nodepool_update": WorkRequestOperationTypeNodepoolUpdate, "nodepool_delete": WorkRequestOperationTypeNodepoolDelete, @@ -94,6 +97,7 @@ func GetWorkRequestOperationTypeEnumStringValues() []string { "CLUSTER_CREATE", "CLUSTER_UPDATE", "CLUSTER_DELETE", + "CREATE_NAMESPACE", "NODEPOOL_CREATE", "NODEPOOL_UPDATE", "NODEPOOL_DELETE", diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_resource.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_resource.go index 3c006ec493c..c79a7234d60 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_resource.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_resource.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_status.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_status.go index fe43bdbc0cb..4c71155a617 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_status.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_status.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_summary.go index 13d0f6cadd2..9f22598124d 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/work_request_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -78,6 +78,7 @@ const ( WorkRequestSummaryOperationTypeClusterCreate WorkRequestOperationTypeEnum = "CLUSTER_CREATE" WorkRequestSummaryOperationTypeClusterUpdate WorkRequestOperationTypeEnum = "CLUSTER_UPDATE" WorkRequestSummaryOperationTypeClusterDelete WorkRequestOperationTypeEnum = "CLUSTER_DELETE" + WorkRequestSummaryOperationTypeCreateNamespace WorkRequestOperationTypeEnum = "CREATE_NAMESPACE" WorkRequestSummaryOperationTypeNodepoolCreate WorkRequestOperationTypeEnum = "NODEPOOL_CREATE" WorkRequestSummaryOperationTypeNodepoolUpdate WorkRequestOperationTypeEnum = "NODEPOOL_UPDATE" WorkRequestSummaryOperationTypeNodepoolDelete WorkRequestOperationTypeEnum = "NODEPOOL_DELETE" diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping.go index cff8d663dcb..2c05a5e9410 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -50,6 +50,10 @@ type WorkloadMapping struct { // For more information, see Resource Tags (https://docs.cloud.oracle.com/Content/General/Concepts/resourcetags.htm). // Example: `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + // Usage of system tag keys. These predefined keys are scoped to namespaces. + // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` + SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` } func (m WorkloadMapping) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_lifecycle_state.go index 0c1add92801..e86f9bf04e0 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_lifecycle_state.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_lifecycle_state.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_summary.go index ce8246b645e..a284b3600e1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/workload_mapping_summary.go @@ -2,11 +2,11 @@ // This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. // Code generated. DO NOT EDIT. -// Container Engine for Kubernetes API +// Kubernetes Engine API // -// API for the Container Engine for Kubernetes service. Use this API to build, deploy, +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, // and manage cloud-native applications. For more information, see -// Overview of Container Engine for Kubernetes (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). // package containerengine @@ -50,6 +50,10 @@ type WorkloadMappingSummary struct { // For more information, see Resource Tags (https://docs.cloud.oracle.com/Content/General/Concepts/resourcetags.htm). // Example: `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + // Usage of system tag keys. These predefined keys are scoped to namespaces. + // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` + SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` } func (m WorkloadMappingSummary) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_paravirtualized_volume_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_paravirtualized_volume_details.go new file mode 100644 index 00000000000..43cf17d6fe9 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_paravirtualized_volume_details.go @@ -0,0 +1,153 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Core Services API +// +// Use the Core Services API to manage resources such as virtual cloud networks (VCNs), +// compute instances, and block storage volumes. For more information, see the console +// documentation for the Networking (https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/overview.htm), +// Compute (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm), and +// Block Volume (https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/overview.htm) services. +// The required permissions are documented in the +// Details for the Core Services (https://docs.cloud.oracle.com/iaas/Content/Identity/Reference/corepolicyreference.htm) article. +// + +package core + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// LaunchAttachParavirtualizedVolumeDetails Details specific to PV type volume attachments. +type LaunchAttachParavirtualizedVolumeDetails struct { + + // The device name. To retrieve a list of devices for a given instance, see ListInstanceDevices. + Device *string `mandatory:"false" json:"device"` + + // A user-friendly name. Does not have to be unique, and it's changeable. + // Avoid entering confidential information. + DisplayName *string `mandatory:"false" json:"displayName"` + + // Whether the attachment was created in read-only mode. + IsReadOnly *bool `mandatory:"false" json:"isReadOnly"` + + // Whether the attachment should be created in shareable mode. If an attachment + // is created in shareable mode, then other instances can attach the same volume, provided + // that they also create their attachments in shareable mode. Only certain volume types can + // be attached in shareable mode. Defaults to false if not specified. + IsShareable *bool `mandatory:"false" json:"isShareable"` + + // The OCID of the volume. If CreateVolumeDetails is specified, this field must be omitted from the request. + VolumeId *string `mandatory:"false" json:"volumeId"` + + LaunchCreateVolumeDetails LaunchCreateVolumeDetails `mandatory:"false" json:"launchCreateVolumeDetails"` + + // Whether to enable in-transit encryption for the data volume's paravirtualized attachment. The default value is false. + IsPvEncryptionInTransitEnabled *bool `mandatory:"false" json:"isPvEncryptionInTransitEnabled"` +} + +// GetDevice returns Device +func (m LaunchAttachParavirtualizedVolumeDetails) GetDevice() *string { + return m.Device +} + +// GetDisplayName returns DisplayName +func (m LaunchAttachParavirtualizedVolumeDetails) GetDisplayName() *string { + return m.DisplayName +} + +// GetIsReadOnly returns IsReadOnly +func (m LaunchAttachParavirtualizedVolumeDetails) GetIsReadOnly() *bool { + return m.IsReadOnly +} + +// GetIsShareable returns IsShareable +func (m LaunchAttachParavirtualizedVolumeDetails) GetIsShareable() *bool { + return m.IsShareable +} + +// GetVolumeId returns VolumeId +func (m LaunchAttachParavirtualizedVolumeDetails) GetVolumeId() *string { + return m.VolumeId +} + +// GetLaunchCreateVolumeDetails returns LaunchCreateVolumeDetails +func (m LaunchAttachParavirtualizedVolumeDetails) GetLaunchCreateVolumeDetails() LaunchCreateVolumeDetails { + return m.LaunchCreateVolumeDetails +} + +func (m LaunchAttachParavirtualizedVolumeDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m LaunchAttachParavirtualizedVolumeDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m LaunchAttachParavirtualizedVolumeDetails) MarshalJSON() (buff []byte, e error) { + type MarshalTypeLaunchAttachParavirtualizedVolumeDetails LaunchAttachParavirtualizedVolumeDetails + s := struct { + DiscriminatorParam string `json:"type"` + MarshalTypeLaunchAttachParavirtualizedVolumeDetails + }{ + "paravirtualized", + (MarshalTypeLaunchAttachParavirtualizedVolumeDetails)(m), + } + + return json.Marshal(&s) +} + +// UnmarshalJSON unmarshals from json +func (m *LaunchAttachParavirtualizedVolumeDetails) UnmarshalJSON(data []byte) (e error) { + model := struct { + Device *string `json:"device"` + DisplayName *string `json:"displayName"` + IsReadOnly *bool `json:"isReadOnly"` + IsShareable *bool `json:"isShareable"` + VolumeId *string `json:"volumeId"` + LaunchCreateVolumeDetails launchcreatevolumedetails `json:"launchCreateVolumeDetails"` + IsPvEncryptionInTransitEnabled *bool `json:"isPvEncryptionInTransitEnabled"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.Device = model.Device + + m.DisplayName = model.DisplayName + + m.IsReadOnly = model.IsReadOnly + + m.IsShareable = model.IsShareable + + m.VolumeId = model.VolumeId + + nn, e = model.LaunchCreateVolumeDetails.UnmarshalPolymorphicJSON(model.LaunchCreateVolumeDetails.JsonData) + if e != nil { + return + } + if nn != nil { + m.LaunchCreateVolumeDetails = nn.(LaunchCreateVolumeDetails) + } else { + m.LaunchCreateVolumeDetails = nil + } + + m.IsPvEncryptionInTransitEnabled = model.IsPvEncryptionInTransitEnabled + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_volume_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_volume_details.go index f9647ddf51f..30f3b493c97 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_volume_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/launch_attach_volume_details.go @@ -89,6 +89,10 @@ func (m *launchattachvolumedetails) UnmarshalPolymorphicJSON(data []byte) (inter var err error switch m.Type { + case "paravirtualized": + mm := LaunchAttachParavirtualizedVolumeDetails{} + err = json.Unmarshal(data, &mm) + return mm, err case "iscsi": mm := LaunchAttachIScsiVolumeDetails{} err = json.Unmarshal(data, &mm) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster.go index 367603073eb..340cb8aa36e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster.go @@ -190,6 +190,8 @@ type CloudVmCluster struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` + IormConfigCache *ExadataIormConfig `mandatory:"false" json:"iormConfigCache"` } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster_summary.go index 094dfd36573..ecfb889d038 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/cloud_vm_cluster_summary.go @@ -189,6 +189,8 @@ type CloudVmClusterSummary struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m CloudVmClusterSummary) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/create_cloud_vm_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/create_cloud_vm_cluster_details.go index 18e2f0b5fda..a396360be86 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/create_cloud_vm_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/create_cloud_vm_cluster_details.go @@ -137,6 +137,8 @@ type CreateCloudVmClusterDetails struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m CreateCloudVmClusterDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/create_vm_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/create_vm_cluster_details.go index 68e138b8c37..2f924401686 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/create_vm_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/create_vm_cluster_details.go @@ -86,6 +86,8 @@ type CreateVmClusterDetails struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m CreateVmClusterDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/update_cloud_vm_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/update_cloud_vm_cluster_details.go index 1e5d24353b6..6e67c414b7b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/update_cloud_vm_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/update_cloud_vm_cluster_details.go @@ -76,6 +76,8 @@ type UpdateCloudVmClusterDetails struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m UpdateCloudVmClusterDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/update_vm_cluster_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/update_vm_cluster_details.go index f235089bc83..4c9b0ce4f98 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/update_vm_cluster_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/update_vm_cluster_details.go @@ -60,6 +60,8 @@ type UpdateVmClusterDetails struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m UpdateVmClusterDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster.go index 6b3e12b1422..c89ce0c7402 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster.go @@ -109,6 +109,8 @@ type VmCluster struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m VmCluster) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster_summary.go index 969f0e3f830..d84e17a3857 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/database/vm_cluster_summary.go @@ -109,6 +109,8 @@ type VmClusterSummary struct { // Details of the file system configuration of the VM cluster. FileSystemConfigurationDetails []FileSystemConfigurationDetail `mandatory:"false" json:"fileSystemConfigurationDetails"` + + CloudAutomationUpdateDetails *CloudAutomationUpdateDetails `mandatory:"false" json:"cloudAutomationUpdateDetails"` } func (m VmClusterSummary) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_desktop_session_lifecycle_actions.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_desktop_session_lifecycle_actions.go new file mode 100644 index 00000000000..c9cb3fb9d4b --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_desktop_session_lifecycle_actions.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateDesktopPoolDesktopSessionLifecycleActions The details of action to be triggered in case of inactivity or disconnect +type CreateDesktopPoolDesktopSessionLifecycleActions struct { + Inactivity *InactivityConfig `mandatory:"false" json:"inactivity"` + + Disconnect *DisconnectConfig `mandatory:"false" json:"disconnect"` +} + +func (m CreateDesktopPoolDesktopSessionLifecycleActions) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateDesktopPoolDesktopSessionLifecycleActions) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_details.go index 833154d3c50..c0b8e0e2432 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_details.go @@ -64,6 +64,13 @@ type CreateDesktopPoolDetails struct { // Avoid entering confidential information. Description *string `mandatory:"false" json:"description"` + ShapeConfig *CreateDesktopPoolShapeConfigDetails `mandatory:"false" json:"shapeConfig"` + + // Indicates whether the desktop pool uses dedicated virtual machine hosts. + UseDedicatedVmHost CreateDesktopPoolDetailsUseDedicatedVmHostEnum `mandatory:"false" json:"useDedicatedVmHost,omitempty"` + + SessionLifecycleActions *CreateDesktopPoolDesktopSessionLifecycleActions `mandatory:"false" json:"sessionLifecycleActions"` + // The start time of the desktop pool. TimeStartScheduled *common.SDKTime `mandatory:"false" json:"timeStartScheduled"` @@ -79,8 +86,10 @@ type CreateDesktopPoolDetails struct { // Example: `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` - // A list of network security groups for the desktop pool. + // A list of network security groups for the private access. NsgIds []string `mandatory:"false" json:"nsgIds"` + + PrivateAccessDetails *CreateDesktopPoolPrivateAccessDetails `mandatory:"false" json:"privateAccessDetails"` } func (m CreateDesktopPoolDetails) String() string { @@ -93,8 +102,57 @@ func (m CreateDesktopPoolDetails) String() string { func (m CreateDesktopPoolDetails) ValidateEnumValue() (bool, error) { errMessage := []string{} + if _, ok := GetMappingCreateDesktopPoolDetailsUseDedicatedVmHostEnum(string(m.UseDedicatedVmHost)); !ok && m.UseDedicatedVmHost != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for UseDedicatedVmHost: %s. Supported values are: %s.", m.UseDedicatedVmHost, strings.Join(GetCreateDesktopPoolDetailsUseDedicatedVmHostEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } return false, nil } + +// CreateDesktopPoolDetailsUseDedicatedVmHostEnum Enum with underlying type: string +type CreateDesktopPoolDetailsUseDedicatedVmHostEnum string + +// Set of constants representing the allowable values for CreateDesktopPoolDetailsUseDedicatedVmHostEnum +const ( + CreateDesktopPoolDetailsUseDedicatedVmHostTrue CreateDesktopPoolDetailsUseDedicatedVmHostEnum = "TRUE" + CreateDesktopPoolDetailsUseDedicatedVmHostFalse CreateDesktopPoolDetailsUseDedicatedVmHostEnum = "FALSE" + CreateDesktopPoolDetailsUseDedicatedVmHostAuto CreateDesktopPoolDetailsUseDedicatedVmHostEnum = "AUTO" +) + +var mappingCreateDesktopPoolDetailsUseDedicatedVmHostEnum = map[string]CreateDesktopPoolDetailsUseDedicatedVmHostEnum{ + "TRUE": CreateDesktopPoolDetailsUseDedicatedVmHostTrue, + "FALSE": CreateDesktopPoolDetailsUseDedicatedVmHostFalse, + "AUTO": CreateDesktopPoolDetailsUseDedicatedVmHostAuto, +} + +var mappingCreateDesktopPoolDetailsUseDedicatedVmHostEnumLowerCase = map[string]CreateDesktopPoolDetailsUseDedicatedVmHostEnum{ + "true": CreateDesktopPoolDetailsUseDedicatedVmHostTrue, + "false": CreateDesktopPoolDetailsUseDedicatedVmHostFalse, + "auto": CreateDesktopPoolDetailsUseDedicatedVmHostAuto, +} + +// GetCreateDesktopPoolDetailsUseDedicatedVmHostEnumValues Enumerates the set of values for CreateDesktopPoolDetailsUseDedicatedVmHostEnum +func GetCreateDesktopPoolDetailsUseDedicatedVmHostEnumValues() []CreateDesktopPoolDetailsUseDedicatedVmHostEnum { + values := make([]CreateDesktopPoolDetailsUseDedicatedVmHostEnum, 0) + for _, v := range mappingCreateDesktopPoolDetailsUseDedicatedVmHostEnum { + values = append(values, v) + } + return values +} + +// GetCreateDesktopPoolDetailsUseDedicatedVmHostEnumStringValues Enumerates the set of values in String for CreateDesktopPoolDetailsUseDedicatedVmHostEnum +func GetCreateDesktopPoolDetailsUseDedicatedVmHostEnumStringValues() []string { + return []string{ + "TRUE", + "FALSE", + "AUTO", + } +} + +// GetMappingCreateDesktopPoolDetailsUseDedicatedVmHostEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingCreateDesktopPoolDetailsUseDedicatedVmHostEnum(val string) (CreateDesktopPoolDetailsUseDedicatedVmHostEnum, bool) { + enum, ok := mappingCreateDesktopPoolDetailsUseDedicatedVmHostEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_private_access_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_private_access_details.go new file mode 100644 index 00000000000..8bf2766dd4d --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_private_access_details.go @@ -0,0 +1,47 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateDesktopPoolPrivateAccessDetails The details of the desktop's private access network connectivity to be set up for the desktop pool. +type CreateDesktopPoolPrivateAccessDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the + // connectivity will be established. + SubnetId *string `mandatory:"true" json:"subnetId"` + + // A list of network security groups for the private access. + NsgIds []string `mandatory:"false" json:"nsgIds"` + + // The IPv4 address from the provided OCI subnet which needs to be assigned to the VNIC. If not provided, it will + // be auto-assigned with an available IPv4 address from the subnet. + PrivateIp *string `mandatory:"false" json:"privateIp"` +} + +func (m CreateDesktopPoolPrivateAccessDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateDesktopPoolPrivateAccessDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_shape_config_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_shape_config_details.go new file mode 100644 index 00000000000..2e925a0764f --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/create_desktop_pool_shape_config_details.go @@ -0,0 +1,102 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateDesktopPoolShapeConfigDetails The compute instance shape configuration requested for each desktop in the desktop pool. +type CreateDesktopPoolShapeConfigDetails struct { + + // The total number of OCPUs available for each desktop compute instance in the desktop pool. + Ocpus *int64 `mandatory:"false" json:"ocpus"` + + // The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + MemoryInGBs *int64 `mandatory:"false" json:"memoryInGBs"` + + // The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in + // the desktop pool. + // Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with + // `BASELINE_1_1`. + // + // The following values are supported: + // - `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + // - `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + // - `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + BaselineOcpuUtilization CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum `mandatory:"false" json:"baselineOcpuUtilization,omitempty"` +} + +func (m CreateDesktopPoolShapeConfigDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateDesktopPoolShapeConfigDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum(string(m.BaselineOcpuUtilization)); !ok && m.BaselineOcpuUtilization != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for BaselineOcpuUtilization: %s. Supported values are: %s.", m.BaselineOcpuUtilization, strings.Join(GetCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum Enum with underlying type: string +type CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum string + +// Set of constants representing the allowable values for CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum +const ( + CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization8 CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum = "BASELINE_1_8" + CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization2 CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum = "BASELINE_1_2" + CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization1 CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum = "BASELINE_1_1" +) + +var mappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum = map[string]CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum{ + "BASELINE_1_8": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization8, + "BASELINE_1_2": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization2, + "BASELINE_1_1": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization1, +} + +var mappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumLowerCase = map[string]CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum{ + "baseline_1_8": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization8, + "baseline_1_2": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization2, + "baseline_1_1": CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilization1, +} + +// GetCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumValues Enumerates the set of values for CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum +func GetCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumValues() []CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum { + values := make([]CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum, 0) + for _, v := range mappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum { + values = append(values, v) + } + return values +} + +// GetCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumStringValues Enumerates the set of values in String for CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum +func GetCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumStringValues() []string { + return []string{ + "BASELINE_1_8", + "BASELINE_1_2", + "BASELINE_1_1", + } +} + +// GetMappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum(val string) (CreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnum, bool) { + enum, ok := mappingCreateDesktopPoolShapeConfigDetailsBaselineOcpuUtilizationEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_image.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_image.go index 74e2590f8cb..6217915a284 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_image.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_image.go @@ -23,6 +23,9 @@ type DesktopImage struct { // The name of the desktop image. ImageName *string `mandatory:"true" json:"imageName"` + + // The operating system of the desktop image, e.g. "Oracle Linux", "Windows". + OperatingSystem *string `mandatory:"false" json:"operatingSystem"` } func (m DesktopImage) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_network_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_network_configuration.go index 063df43dd29..09d4e024bc9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_network_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_network_configuration.go @@ -18,10 +18,11 @@ import ( // DesktopNetworkConfiguration Provides information about the network configuration of the desktop pool. type DesktopNetworkConfiguration struct { - // The OCID of the VCN used by the desktop pool. + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the customer VCN. VcnId *string `mandatory:"true" json:"vcnId"` - // The OCID of the subnet to use for the desktop pool. + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the + // connectivity will be established. SubnetId *string `mandatory:"true" json:"subnetId"` } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool.go index 8993aec43a4..e1158423147 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool.go @@ -73,6 +73,13 @@ type DesktopPool struct { // Avoid entering confidential information. Description *string `mandatory:"false" json:"description"` + ShapeConfig *DesktopPoolShapeConfig `mandatory:"false" json:"shapeConfig"` + + // Indicates whether the desktop pool uses dedicated virtual machine hosts. + UseDedicatedVmHost DesktopPoolUseDedicatedVmHostEnum `mandatory:"false" json:"useDedicatedVmHost,omitempty"` + + SessionLifecycleActions *DesktopSessionLifecycleActions `mandatory:"false" json:"sessionLifecycleActions"` + // The start time of the desktop pool. TimeStartScheduled *common.SDKTime `mandatory:"false" json:"timeStartScheduled"` @@ -88,8 +95,10 @@ type DesktopPool struct { // Example: `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` - // A list of network security groups for the desktop pool. + // A list of network security groups for the network. NsgIds []string `mandatory:"false" json:"nsgIds"` + + PrivateAccessDetails *DesktopPoolPrivateAccessDetails `mandatory:"false" json:"privateAccessDetails"` } func (m DesktopPool) String() string { @@ -105,8 +114,57 @@ func (m DesktopPool) ValidateEnumValue() (bool, error) { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetLifecycleStateEnumStringValues(), ","))) } + if _, ok := GetMappingDesktopPoolUseDedicatedVmHostEnum(string(m.UseDedicatedVmHost)); !ok && m.UseDedicatedVmHost != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for UseDedicatedVmHost: %s. Supported values are: %s.", m.UseDedicatedVmHost, strings.Join(GetDesktopPoolUseDedicatedVmHostEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } return false, nil } + +// DesktopPoolUseDedicatedVmHostEnum Enum with underlying type: string +type DesktopPoolUseDedicatedVmHostEnum string + +// Set of constants representing the allowable values for DesktopPoolUseDedicatedVmHostEnum +const ( + DesktopPoolUseDedicatedVmHostTrue DesktopPoolUseDedicatedVmHostEnum = "TRUE" + DesktopPoolUseDedicatedVmHostFalse DesktopPoolUseDedicatedVmHostEnum = "FALSE" + DesktopPoolUseDedicatedVmHostAuto DesktopPoolUseDedicatedVmHostEnum = "AUTO" +) + +var mappingDesktopPoolUseDedicatedVmHostEnum = map[string]DesktopPoolUseDedicatedVmHostEnum{ + "TRUE": DesktopPoolUseDedicatedVmHostTrue, + "FALSE": DesktopPoolUseDedicatedVmHostFalse, + "AUTO": DesktopPoolUseDedicatedVmHostAuto, +} + +var mappingDesktopPoolUseDedicatedVmHostEnumLowerCase = map[string]DesktopPoolUseDedicatedVmHostEnum{ + "true": DesktopPoolUseDedicatedVmHostTrue, + "false": DesktopPoolUseDedicatedVmHostFalse, + "auto": DesktopPoolUseDedicatedVmHostAuto, +} + +// GetDesktopPoolUseDedicatedVmHostEnumValues Enumerates the set of values for DesktopPoolUseDedicatedVmHostEnum +func GetDesktopPoolUseDedicatedVmHostEnumValues() []DesktopPoolUseDedicatedVmHostEnum { + values := make([]DesktopPoolUseDedicatedVmHostEnum, 0) + for _, v := range mappingDesktopPoolUseDedicatedVmHostEnum { + values = append(values, v) + } + return values +} + +// GetDesktopPoolUseDedicatedVmHostEnumStringValues Enumerates the set of values in String for DesktopPoolUseDedicatedVmHostEnum +func GetDesktopPoolUseDedicatedVmHostEnumStringValues() []string { + return []string{ + "TRUE", + "FALSE", + "AUTO", + } +} + +// GetMappingDesktopPoolUseDedicatedVmHostEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDesktopPoolUseDedicatedVmHostEnum(val string) (DesktopPoolUseDedicatedVmHostEnum, bool) { + enum, ok := mappingDesktopPoolUseDedicatedVmHostEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_private_access_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_private_access_details.go new file mode 100644 index 00000000000..33cb7833704 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_private_access_details.go @@ -0,0 +1,55 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DesktopPoolPrivateAccessDetails The details of the desktop's private access network connectivity that were used to create the pool. +type DesktopPoolPrivateAccessDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the + // connectivity will be established. + SubnetId *string `mandatory:"true" json:"subnetId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the customer VCN. + VcnId *string `mandatory:"true" json:"vcnId"` + + // A list of network security groups for the private access. + NsgIds []string `mandatory:"false" json:"nsgIds"` + + // The IPv4 address from the provided OCI subnet which needs to be assigned to the VNIC. If not provided, it will + // be auto-assigned with an available IPv4 address from the subnet. + PrivateIp *string `mandatory:"false" json:"privateIp"` + + // The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are + // updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's + // private IP address to access the service (for example, xyz.oraclecloud.com). + EndpointFqdn *string `mandatory:"false" json:"endpointFqdn"` +} + +func (m DesktopPoolPrivateAccessDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DesktopPoolPrivateAccessDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_shape_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_shape_config.go new file mode 100644 index 00000000000..aa0d7387958 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_pool_shape_config.go @@ -0,0 +1,102 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DesktopPoolShapeConfig The shape configuration used for each desktop compute instance in the desktop pool. +type DesktopPoolShapeConfig struct { + + // The total number of OCPUs available for each desktop compute instance in the desktop pool. + Ocpus *int64 `mandatory:"false" json:"ocpus"` + + // The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + MemoryInGBs *int64 `mandatory:"false" json:"memoryInGBs"` + + // The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in + // the desktop pool. + // Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with + // `BASELINE_1_1`. + // + // The following values are supported: + // - `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + // - `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + // - `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + BaselineOcpuUtilization DesktopPoolShapeConfigBaselineOcpuUtilizationEnum `mandatory:"false" json:"baselineOcpuUtilization,omitempty"` +} + +func (m DesktopPoolShapeConfig) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DesktopPoolShapeConfig) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnum(string(m.BaselineOcpuUtilization)); !ok && m.BaselineOcpuUtilization != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for BaselineOcpuUtilization: %s. Supported values are: %s.", m.BaselineOcpuUtilization, strings.Join(GetDesktopPoolShapeConfigBaselineOcpuUtilizationEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// DesktopPoolShapeConfigBaselineOcpuUtilizationEnum Enum with underlying type: string +type DesktopPoolShapeConfigBaselineOcpuUtilizationEnum string + +// Set of constants representing the allowable values for DesktopPoolShapeConfigBaselineOcpuUtilizationEnum +const ( + DesktopPoolShapeConfigBaselineOcpuUtilization8 DesktopPoolShapeConfigBaselineOcpuUtilizationEnum = "BASELINE_1_8" + DesktopPoolShapeConfigBaselineOcpuUtilization2 DesktopPoolShapeConfigBaselineOcpuUtilizationEnum = "BASELINE_1_2" + DesktopPoolShapeConfigBaselineOcpuUtilization1 DesktopPoolShapeConfigBaselineOcpuUtilizationEnum = "BASELINE_1_1" +) + +var mappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnum = map[string]DesktopPoolShapeConfigBaselineOcpuUtilizationEnum{ + "BASELINE_1_8": DesktopPoolShapeConfigBaselineOcpuUtilization8, + "BASELINE_1_2": DesktopPoolShapeConfigBaselineOcpuUtilization2, + "BASELINE_1_1": DesktopPoolShapeConfigBaselineOcpuUtilization1, +} + +var mappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnumLowerCase = map[string]DesktopPoolShapeConfigBaselineOcpuUtilizationEnum{ + "baseline_1_8": DesktopPoolShapeConfigBaselineOcpuUtilization8, + "baseline_1_2": DesktopPoolShapeConfigBaselineOcpuUtilization2, + "baseline_1_1": DesktopPoolShapeConfigBaselineOcpuUtilization1, +} + +// GetDesktopPoolShapeConfigBaselineOcpuUtilizationEnumValues Enumerates the set of values for DesktopPoolShapeConfigBaselineOcpuUtilizationEnum +func GetDesktopPoolShapeConfigBaselineOcpuUtilizationEnumValues() []DesktopPoolShapeConfigBaselineOcpuUtilizationEnum { + values := make([]DesktopPoolShapeConfigBaselineOcpuUtilizationEnum, 0) + for _, v := range mappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnum { + values = append(values, v) + } + return values +} + +// GetDesktopPoolShapeConfigBaselineOcpuUtilizationEnumStringValues Enumerates the set of values in String for DesktopPoolShapeConfigBaselineOcpuUtilizationEnum +func GetDesktopPoolShapeConfigBaselineOcpuUtilizationEnumStringValues() []string { + return []string{ + "BASELINE_1_8", + "BASELINE_1_2", + "BASELINE_1_1", + } +} + +// GetMappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnum(val string) (DesktopPoolShapeConfigBaselineOcpuUtilizationEnum, bool) { + enum, ok := mappingDesktopPoolShapeConfigBaselineOcpuUtilizationEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_session_lifecycle_actions.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_session_lifecycle_actions.go new file mode 100644 index 00000000000..769b9314013 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/desktop_session_lifecycle_actions.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DesktopSessionLifecycleActions Action to be triggered on inactivity or disconnect +type DesktopSessionLifecycleActions struct { + Inactivity *InactivityConfig `mandatory:"false" json:"inactivity"` + + Disconnect *DisconnectConfig `mandatory:"false" json:"disconnect"` +} + +func (m DesktopSessionLifecycleActions) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DesktopSessionLifecycleActions) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/disconnect_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/disconnect_config.go new file mode 100644 index 00000000000..1dd53ec2aee --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/disconnect_config.go @@ -0,0 +1,88 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DisconnectConfig Action and grace period for disconnect +type DisconnectConfig struct { + + // a disconnect action to be triggered + Action DisconnectConfigActionEnum `mandatory:"true" json:"action"` + + // The period of time (in minutes) after disconnect before any action occurs. + // If the value is not provided, a default value is used. + GracePeriodInMinutes *int `mandatory:"false" json:"gracePeriodInMinutes"` +} + +func (m DisconnectConfig) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DisconnectConfig) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingDisconnectConfigActionEnum(string(m.Action)); !ok && m.Action != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Action: %s. Supported values are: %s.", m.Action, strings.Join(GetDisconnectConfigActionEnumStringValues(), ","))) + } + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// DisconnectConfigActionEnum Enum with underlying type: string +type DisconnectConfigActionEnum string + +// Set of constants representing the allowable values for DisconnectConfigActionEnum +const ( + DisconnectConfigActionNone DisconnectConfigActionEnum = "NONE" + DisconnectConfigActionStop DisconnectConfigActionEnum = "STOP" +) + +var mappingDisconnectConfigActionEnum = map[string]DisconnectConfigActionEnum{ + "NONE": DisconnectConfigActionNone, + "STOP": DisconnectConfigActionStop, +} + +var mappingDisconnectConfigActionEnumLowerCase = map[string]DisconnectConfigActionEnum{ + "none": DisconnectConfigActionNone, + "stop": DisconnectConfigActionStop, +} + +// GetDisconnectConfigActionEnumValues Enumerates the set of values for DisconnectConfigActionEnum +func GetDisconnectConfigActionEnumValues() []DisconnectConfigActionEnum { + values := make([]DisconnectConfigActionEnum, 0) + for _, v := range mappingDisconnectConfigActionEnum { + values = append(values, v) + } + return values +} + +// GetDisconnectConfigActionEnumStringValues Enumerates the set of values in String for DisconnectConfigActionEnum +func GetDisconnectConfigActionEnumStringValues() []string { + return []string{ + "NONE", + "STOP", + } +} + +// GetMappingDisconnectConfigActionEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDisconnectConfigActionEnum(val string) (DisconnectConfigActionEnum, bool) { + enum, ok := mappingDisconnectConfigActionEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/inactivity_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/inactivity_config.go new file mode 100644 index 00000000000..d61b2b7d670 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/inactivity_config.go @@ -0,0 +1,88 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// InactivityConfig Action and grace period for inactivity +type InactivityConfig struct { + + // an inactivity action to be triggered + Action InactivityConfigActionEnum `mandatory:"true" json:"action"` + + // The period of time (in minutes) during which the session must remain inactive before any action occurs. + // If the value is not provided, a default value is used. + GracePeriodInMinutes *int `mandatory:"false" json:"gracePeriodInMinutes"` +} + +func (m InactivityConfig) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m InactivityConfig) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingInactivityConfigActionEnum(string(m.Action)); !ok && m.Action != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Action: %s. Supported values are: %s.", m.Action, strings.Join(GetInactivityConfigActionEnumStringValues(), ","))) + } + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// InactivityConfigActionEnum Enum with underlying type: string +type InactivityConfigActionEnum string + +// Set of constants representing the allowable values for InactivityConfigActionEnum +const ( + InactivityConfigActionNone InactivityConfigActionEnum = "NONE" + InactivityConfigActionDisconnect InactivityConfigActionEnum = "DISCONNECT" +) + +var mappingInactivityConfigActionEnum = map[string]InactivityConfigActionEnum{ + "NONE": InactivityConfigActionNone, + "DISCONNECT": InactivityConfigActionDisconnect, +} + +var mappingInactivityConfigActionEnumLowerCase = map[string]InactivityConfigActionEnum{ + "none": InactivityConfigActionNone, + "disconnect": InactivityConfigActionDisconnect, +} + +// GetInactivityConfigActionEnumValues Enumerates the set of values for InactivityConfigActionEnum +func GetInactivityConfigActionEnumValues() []InactivityConfigActionEnum { + values := make([]InactivityConfigActionEnum, 0) + for _, v := range mappingInactivityConfigActionEnum { + values = append(values, v) + } + return values +} + +// GetInactivityConfigActionEnumStringValues Enumerates the set of values in String for InactivityConfigActionEnum +func GetInactivityConfigActionEnumStringValues() []string { + return []string{ + "NONE", + "DISCONNECT", + } +} + +// GetMappingInactivityConfigActionEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingInactivityConfigActionEnum(val string) (InactivityConfigActionEnum, bool) { + enum, ok := mappingInactivityConfigActionEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/stop_desktop_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/stop_desktop_request_response.go index 9cfbf1886e0..0542917eff2 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/stop_desktop_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/stop_desktop_request_response.go @@ -30,6 +30,9 @@ type StopDesktopRequest struct { // A token that uniquely identifies a request. OpcRetryToken *string `mandatory:"false" contributesTo:"header" name:"opc-retry-token"` + // Force a STOP(power off) of the desktop if set to false + IsSoftStop *bool `mandatory:"false" contributesTo:"query" name:"isSoftStop"` + // Metadata about the request. This information will not be transmitted to the service, but // represents information that the SDK will consume to drive retry behavior. RequestMetadata common.RequestMetadata diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_desktop_session_lifecycle_actions.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_desktop_session_lifecycle_actions.go new file mode 100644 index 00000000000..596915a2f20 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_desktop_session_lifecycle_actions.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Secure Desktops API +// +// Create and manage cloud-hosted desktops which can be accessed from a web browser or installed client. +// + +package desktops + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// UpdateDesktopPoolDesktopSessionLifecycleActions The update details of action to be triggered in case of inactivity or disconnect +type UpdateDesktopPoolDesktopSessionLifecycleActions struct { + Inactivity *InactivityConfig `mandatory:"false" json:"inactivity"` + + Disconnect *DisconnectConfig `mandatory:"false" json:"disconnect"` +} + +func (m UpdateDesktopPoolDesktopSessionLifecycleActions) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m UpdateDesktopPoolDesktopSessionLifecycleActions) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_details.go index 59a5b40a3a4..2ede6de2fb3 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/desktops/update_desktop_pool_details.go @@ -53,6 +53,8 @@ type UpdateDesktopPoolDetails struct { // For more information, see Resource Tags (https://docs.cloud.oracle.com/Content/General/Concepts/resourcetags.htm). // Example: `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + SessionLifecycleActions *UpdateDesktopPoolDesktopSessionLifecycleActions `mandatory:"false" json:"sessionLifecycleActions"` } func (m UpdateDesktopPoolDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/create_fusion_environment_admin_user_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/create_fusion_environment_admin_user_details.go index d85706d8bb8..0dd37fff21b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/create_fusion_environment_admin_user_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/create_fusion_environment_admin_user_details.go @@ -21,9 +21,6 @@ type CreateFusionEnvironmentAdminUserDetails struct { // The username for the administrator. Username *string `mandatory:"true" json:"username"` - // The password for the administrator. - Password *string `mandatory:"true" json:"password"` - // The email address for the administrator. EmailAddress *string `mandatory:"true" json:"emailAddress"` @@ -32,6 +29,9 @@ type CreateFusionEnvironmentAdminUserDetails struct { // The administrator's last name. LastName *string `mandatory:"true" json:"lastName"` + + // The password for the administrator. + Password *string `mandatory:"false" json:"password"` } func (m CreateFusionEnvironmentAdminUserDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/fusionapps_fusionapplications_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/fusionapps_fusionapplications_client.go index bae3dcf9b77..30a650c5d49 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/fusionapps_fusionapplications_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/fusionapps/fusionapps_fusionapplications_client.go @@ -2221,7 +2221,7 @@ func (client FusionApplicationsClient) listWorkRequests(ctx context.Context, req return response, err } -// ResetFusionEnvironmentPassword Resets the password of the Fusion Environment Administrator. +// ResetFusionEnvironmentPassword Reset FusionEnvironment admin password. This API will be deprecated on Mon, 15 Jan 2024 01:00:00 GMT. Users can reset password themselves, FAaaS will no longer provide an API for this. // // # See also // diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/loadbalancer/connection_configuration.go b/vendor/github.com/oracle/oci-go-sdk/v65/loadbalancer/connection_configuration.go index 3f1b1bef5e3..fdebbb7b622 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/loadbalancer/connection_configuration.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/loadbalancer/connection_configuration.go @@ -29,6 +29,10 @@ type ConnectionConfiguration struct { // The backend TCP Proxy Protocol version. // Example: `1` BackendTcpProxyProtocolVersion *int `mandatory:"false" json:"backendTcpProxyProtocolVersion"` + + // An array that represents the PPV2 Options that can be enabled on TCP Listeners. + // Example: ["PP2_TYPE_AUTHORITY"] + BackendTcpProxyProtocolOptions []ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum `mandatory:"false" json:"backendTcpProxyProtocolOptions,omitempty"` } func (m ConnectionConfiguration) String() string { @@ -41,8 +45,52 @@ func (m ConnectionConfiguration) String() string { func (m ConnectionConfiguration) ValidateEnumValue() (bool, error) { errMessage := []string{} + for _, val := range m.BackendTcpProxyProtocolOptions { + if _, ok := GetMappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnum(string(val)); !ok && val != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for BackendTcpProxyProtocolOptions: %s. Supported values are: %s.", val, strings.Join(GetConnectionConfigurationBackendTcpProxyProtocolOptionsEnumStringValues(), ","))) + } + } + if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } return false, nil } + +// ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum Enum with underlying type: string +type ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum string + +// Set of constants representing the allowable values for ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum +const ( + ConnectionConfigurationBackendTcpProxyProtocolOptionsPp2TypeAuthority ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum = "PP2_TYPE_AUTHORITY" +) + +var mappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnum = map[string]ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum{ + "PP2_TYPE_AUTHORITY": ConnectionConfigurationBackendTcpProxyProtocolOptionsPp2TypeAuthority, +} + +var mappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnumLowerCase = map[string]ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum{ + "pp2_type_authority": ConnectionConfigurationBackendTcpProxyProtocolOptionsPp2TypeAuthority, +} + +// GetConnectionConfigurationBackendTcpProxyProtocolOptionsEnumValues Enumerates the set of values for ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum +func GetConnectionConfigurationBackendTcpProxyProtocolOptionsEnumValues() []ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum { + values := make([]ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum, 0) + for _, v := range mappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnum { + values = append(values, v) + } + return values +} + +// GetConnectionConfigurationBackendTcpProxyProtocolOptionsEnumStringValues Enumerates the set of values in String for ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum +func GetConnectionConfigurationBackendTcpProxyProtocolOptionsEnumStringValues() []string { + return []string{ + "PP2_TYPE_AUTHORITY", + } +} + +// GetMappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnum(val string) (ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum, bool) { + enum, ok := mappingConnectionConfigurationBackendTcpProxyProtocolOptionsEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_autonomous_database_insight_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_autonomous_database_insight_details.go new file mode 100644 index 00000000000..c4e603baf8a --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_autonomous_database_insight_details.go @@ -0,0 +1,150 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Ops Insights API +// +// Use the Ops Insights API to perform data extraction operations to obtain database +// resource utilization, performance statistics, and reference information. For more information, +// see About Oracle Cloud Infrastructure Ops Insights (https://docs.cloud.oracle.com/en-us/iaas/operations-insights/doc/operations-insights.html). +// + +package opsi + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateAutonomousDatabaseInsightDetails The information about database to be analyzed. When isAdvancedFeaturesEnabled is set to false, parameters connectionDetails, credentialDetails and opsiPrivateEndpoint are optional. Otherwise, connectionDetails and crendetialDetails are required to enable full OPSI service features. If the Autonomouse Database is configured with private, restricted or dedicated access, opsiPrivateEndpoint parameter is required. +type CreateAutonomousDatabaseInsightDetails struct { + + // Compartment Identifier of database + CompartmentId *string `mandatory:"true" json:"compartmentId"` + + // The OCID (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the database. + DatabaseId *string `mandatory:"true" json:"databaseId"` + + // OCI database resource type + DatabaseResourceType *string `mandatory:"true" json:"databaseResourceType"` + + // Flag is to identify if advanced features for autonomous database is enabled or not + IsAdvancedFeaturesEnabled *bool `mandatory:"true" json:"isAdvancedFeaturesEnabled"` + + // Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. + // Example: `{"bar-key": "value"}` + FreeformTags map[string]string `mandatory:"false" json:"freeformTags"` + + // Defined tags for this resource. Each key is predefined and scoped to a namespace. + // Example: `{"foo-namespace": {"bar-key": "value"}}` + DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + ConnectionDetails *ConnectionDetails `mandatory:"false" json:"connectionDetails"` + + CredentialDetails CredentialDetails `mandatory:"false" json:"credentialDetails"` + + // The OCID (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the OPSI private endpoint + OpsiPrivateEndpointId *string `mandatory:"false" json:"opsiPrivateEndpointId"` + + // System tags for this resource. Each key is predefined and scoped to a namespace. + // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` + SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` +} + +// GetCompartmentId returns CompartmentId +func (m CreateAutonomousDatabaseInsightDetails) GetCompartmentId() *string { + return m.CompartmentId +} + +// GetFreeformTags returns FreeformTags +func (m CreateAutonomousDatabaseInsightDetails) GetFreeformTags() map[string]string { + return m.FreeformTags +} + +// GetDefinedTags returns DefinedTags +func (m CreateAutonomousDatabaseInsightDetails) GetDefinedTags() map[string]map[string]interface{} { + return m.DefinedTags +} + +func (m CreateAutonomousDatabaseInsightDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateAutonomousDatabaseInsightDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m CreateAutonomousDatabaseInsightDetails) MarshalJSON() (buff []byte, e error) { + type MarshalTypeCreateAutonomousDatabaseInsightDetails CreateAutonomousDatabaseInsightDetails + s := struct { + DiscriminatorParam string `json:"entitySource"` + MarshalTypeCreateAutonomousDatabaseInsightDetails + }{ + "AUTONOMOUS_DATABASE", + (MarshalTypeCreateAutonomousDatabaseInsightDetails)(m), + } + + return json.Marshal(&s) +} + +// UnmarshalJSON unmarshals from json +func (m *CreateAutonomousDatabaseInsightDetails) UnmarshalJSON(data []byte) (e error) { + model := struct { + FreeformTags map[string]string `json:"freeformTags"` + DefinedTags map[string]map[string]interface{} `json:"definedTags"` + ConnectionDetails *ConnectionDetails `json:"connectionDetails"` + CredentialDetails credentialdetails `json:"credentialDetails"` + OpsiPrivateEndpointId *string `json:"opsiPrivateEndpointId"` + SystemTags map[string]map[string]interface{} `json:"systemTags"` + CompartmentId *string `json:"compartmentId"` + DatabaseId *string `json:"databaseId"` + DatabaseResourceType *string `json:"databaseResourceType"` + IsAdvancedFeaturesEnabled *bool `json:"isAdvancedFeaturesEnabled"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.FreeformTags = model.FreeformTags + + m.DefinedTags = model.DefinedTags + + m.ConnectionDetails = model.ConnectionDetails + + nn, e = model.CredentialDetails.UnmarshalPolymorphicJSON(model.CredentialDetails.JsonData) + if e != nil { + return + } + if nn != nil { + m.CredentialDetails = nn.(CredentialDetails) + } else { + m.CredentialDetails = nil + } + + m.OpsiPrivateEndpointId = model.OpsiPrivateEndpointId + + m.SystemTags = model.SystemTags + + m.CompartmentId = model.CompartmentId + + m.DatabaseId = model.DatabaseId + + m.DatabaseResourceType = model.DatabaseResourceType + + m.IsAdvancedFeaturesEnabled = model.IsAdvancedFeaturesEnabled + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_database_insight_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_database_insight_details.go index e0d5ed53c75..2732b7db849 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_database_insight_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/create_database_insight_details.go @@ -73,6 +73,10 @@ func (m *createdatabaseinsightdetails) UnmarshalPolymorphicJSON(data []byte) (in mm := CreateMacsManagedCloudDatabaseInsightDetails{} err = json.Unmarshal(data, &mm) return mm, err + case "AUTONOMOUS_DATABASE": + mm := CreateAutonomousDatabaseInsightDetails{} + err = json.Unmarshal(data, &mm) + return mm, err case "MDS_MYSQL_DATABASE_SYSTEM": mm := CreateMdsMySqlDatabaseInsightDetails{} err = json.Unmarshal(data, &mm) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_by_iam.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_by_iam.go new file mode 100644 index 00000000000..01e215d6245 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_by_iam.go @@ -0,0 +1,61 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Ops Insights API +// +// Use the Ops Insights API to perform data extraction operations to obtain database +// resource utilization, performance statistics, and reference information. For more information, +// see About Oracle Cloud Infrastructure Ops Insights (https://docs.cloud.oracle.com/en-us/iaas/operations-insights/doc/operations-insights.html). +// + +package opsi + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CredentialByIam IAM Credential Details to connect to the database. +type CredentialByIam struct { + + // Credential source name that had been added in Management Agent wallet. This is supplied in the External Database Service. + CredentialSourceName *string `mandatory:"true" json:"credentialSourceName"` +} + +// GetCredentialSourceName returns CredentialSourceName +func (m CredentialByIam) GetCredentialSourceName() *string { + return m.CredentialSourceName +} + +func (m CredentialByIam) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CredentialByIam) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m CredentialByIam) MarshalJSON() (buff []byte, e error) { + type MarshalTypeCredentialByIam CredentialByIam + s := struct { + DiscriminatorParam string `json:"credentialType"` + MarshalTypeCredentialByIam + }{ + "CREDENTIALS_BY_IAM", + (MarshalTypeCredentialByIam)(m), + } + + return json.Marshal(&s) +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_details.go index 8a35631af14..ab661fac5f0 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/credential_details.go @@ -65,6 +65,10 @@ func (m *credentialdetails) UnmarshalPolymorphicJSON(data []byte) (interface{}, mm := CredentialByVault{} err = json.Unmarshal(data, &mm) return mm, err + case "CREDENTIALS_BY_IAM": + mm := CredentialByIam{} + err = json.Unmarshal(data, &mm) + return mm, err default: common.Logf("Recieved unsupported enum value for CredentialDetails: %s.", m.CredentialType) return *m, nil @@ -99,16 +103,19 @@ type CredentialDetailsCredentialTypeEnum string const ( CredentialDetailsCredentialTypeSource CredentialDetailsCredentialTypeEnum = "CREDENTIALS_BY_SOURCE" CredentialDetailsCredentialTypeVault CredentialDetailsCredentialTypeEnum = "CREDENTIALS_BY_VAULT" + CredentialDetailsCredentialTypeIam CredentialDetailsCredentialTypeEnum = "CREDENTIALS_BY_IAM" ) var mappingCredentialDetailsCredentialTypeEnum = map[string]CredentialDetailsCredentialTypeEnum{ "CREDENTIALS_BY_SOURCE": CredentialDetailsCredentialTypeSource, "CREDENTIALS_BY_VAULT": CredentialDetailsCredentialTypeVault, + "CREDENTIALS_BY_IAM": CredentialDetailsCredentialTypeIam, } var mappingCredentialDetailsCredentialTypeEnumLowerCase = map[string]CredentialDetailsCredentialTypeEnum{ "credentials_by_source": CredentialDetailsCredentialTypeSource, "credentials_by_vault": CredentialDetailsCredentialTypeVault, + "credentials_by_iam": CredentialDetailsCredentialTypeIam, } // GetCredentialDetailsCredentialTypeEnumValues Enumerates the set of values for CredentialDetailsCredentialTypeEnum @@ -125,6 +132,7 @@ func GetCredentialDetailsCredentialTypeEnumStringValues() []string { return []string{ "CREDENTIALS_BY_SOURCE", "CREDENTIALS_BY_VAULT", + "CREDENTIALS_BY_IAM", } } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_autonomous_database_insight_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_autonomous_database_insight_details.go new file mode 100644 index 00000000000..b9959488c07 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_autonomous_database_insight_details.go @@ -0,0 +1,123 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Ops Insights API +// +// Use the Ops Insights API to perform data extraction operations to obtain database +// resource utilization, performance statistics, and reference information. For more information, +// see About Oracle Cloud Infrastructure Ops Insights (https://docs.cloud.oracle.com/en-us/iaas/operations-insights/doc/operations-insights.html). +// + +package opsi + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// EnableAutonomousDatabaseInsightDetails The information about database to be analyzed. When isAdvancedFeaturesEnabled is set to false, parameters connectionDetails, credentialDetails and opsiPrivateEndpoint are optional. Otherwise, connectionDetails and crendetialDetails are required to enable full OPSI service features. If the Autonomouse Database is configured with private, restricted or dedicated access, opsiPrivateEndpoint parameter is required. +type EnableAutonomousDatabaseInsightDetails struct { + + // Flag is to identify if advanced features for autonomous database is enabled or not + IsAdvancedFeaturesEnabled *bool `mandatory:"true" json:"isAdvancedFeaturesEnabled"` + + // OCI database resource type + DatabaseResourceType *string `mandatory:"false" json:"databaseResourceType"` + + ConnectionDetails *ConnectionDetails `mandatory:"false" json:"connectionDetails"` + + CredentialDetails CredentialDetails `mandatory:"false" json:"credentialDetails"` + + // The OCID (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the OPSI private endpoint + OpsiPrivateEndpointId *string `mandatory:"false" json:"opsiPrivateEndpointId"` + + // Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. + // Example: `{"bar-key": "value"}` + FreeformTags map[string]string `mandatory:"false" json:"freeformTags"` + + // Defined tags for this resource. Each key is predefined and scoped to a namespace. + // Example: `{"foo-namespace": {"bar-key": "value"}}` + DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + // System tags for this resource. Each key is predefined and scoped to a namespace. + // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` + SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` +} + +func (m EnableAutonomousDatabaseInsightDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m EnableAutonomousDatabaseInsightDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m EnableAutonomousDatabaseInsightDetails) MarshalJSON() (buff []byte, e error) { + type MarshalTypeEnableAutonomousDatabaseInsightDetails EnableAutonomousDatabaseInsightDetails + s := struct { + DiscriminatorParam string `json:"entitySource"` + MarshalTypeEnableAutonomousDatabaseInsightDetails + }{ + "AUTONOMOUS_DATABASE", + (MarshalTypeEnableAutonomousDatabaseInsightDetails)(m), + } + + return json.Marshal(&s) +} + +// UnmarshalJSON unmarshals from json +func (m *EnableAutonomousDatabaseInsightDetails) UnmarshalJSON(data []byte) (e error) { + model := struct { + DatabaseResourceType *string `json:"databaseResourceType"` + ConnectionDetails *ConnectionDetails `json:"connectionDetails"` + CredentialDetails credentialdetails `json:"credentialDetails"` + OpsiPrivateEndpointId *string `json:"opsiPrivateEndpointId"` + FreeformTags map[string]string `json:"freeformTags"` + DefinedTags map[string]map[string]interface{} `json:"definedTags"` + SystemTags map[string]map[string]interface{} `json:"systemTags"` + IsAdvancedFeaturesEnabled *bool `json:"isAdvancedFeaturesEnabled"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.DatabaseResourceType = model.DatabaseResourceType + + m.ConnectionDetails = model.ConnectionDetails + + nn, e = model.CredentialDetails.UnmarshalPolymorphicJSON(model.CredentialDetails.JsonData) + if e != nil { + return + } + if nn != nil { + m.CredentialDetails = nn.(CredentialDetails) + } else { + m.CredentialDetails = nil + } + + m.OpsiPrivateEndpointId = model.OpsiPrivateEndpointId + + m.FreeformTags = model.FreeformTags + + m.DefinedTags = model.DefinedTags + + m.SystemTags = model.SystemTags + + m.IsAdvancedFeaturesEnabled = model.IsAdvancedFeaturesEnabled + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_database_insight_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_database_insight_details.go index 28efee0cd0a..f04f816a0d1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_database_insight_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/opsi/enable_database_insight_details.go @@ -60,6 +60,10 @@ func (m *enabledatabaseinsightdetails) UnmarshalPolymorphicJSON(data []byte) (in mm := EnableMdsMySqlDatabaseInsightDetails{} err = json.Unmarshal(data, &mm) return mm, err + case "AUTONOMOUS_DATABASE": + mm := EnableAutonomousDatabaseInsightDetails{} + err = json.Unmarshal(data, &mm) + return mm, err case "MACS_MANAGED_CLOUD_DATABASE": mm := EnableMacsManagedCloudDatabaseInsightDetails{} err = json.Unmarshal(data, &mm) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_details.go new file mode 100644 index 00000000000..c11acd78f8f --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_details.go @@ -0,0 +1,87 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateMaintenanceWindowDetails Infomation to create a new Maintenance Window. +type CreateMaintenanceWindowDetails struct { + + // Maintenance Window name. + Name *string `mandatory:"true" json:"name"` + + // Compartment Identifier OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm). + CompartmentId *string `mandatory:"true" json:"compartmentId"` + + // List of resource Ids which are part of the Maintenance Window + Resources []CreateMaintenanceWindowResourceDetails `mandatory:"true" json:"resources"` + + Schedule MaintenanceWindowSchedule `mandatory:"true" json:"schedule"` + + // Maintenance Window description. + Description *string `mandatory:"false" json:"description"` +} + +func (m CreateMaintenanceWindowDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateMaintenanceWindowDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// UnmarshalJSON unmarshals from json +func (m *CreateMaintenanceWindowDetails) UnmarshalJSON(data []byte) (e error) { + model := struct { + Description *string `json:"description"` + Name *string `json:"name"` + CompartmentId *string `json:"compartmentId"` + Resources []CreateMaintenanceWindowResourceDetails `json:"resources"` + Schedule maintenancewindowschedule `json:"schedule"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.Description = model.Description + + m.Name = model.Name + + m.CompartmentId = model.CompartmentId + + m.Resources = make([]CreateMaintenanceWindowResourceDetails, len(model.Resources)) + copy(m.Resources, model.Resources) + nn, e = model.Schedule.UnmarshalPolymorphicJSON(model.Schedule.JsonData) + if e != nil { + return + } + if nn != nil { + m.Schedule = nn.(MaintenanceWindowSchedule) + } else { + m.Schedule = nil + } + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_request_response.go new file mode 100644 index 00000000000..0bfe24ef0dd --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_request_response.go @@ -0,0 +1,104 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// CreateMaintenanceWindowRequest wrapper for the CreateMaintenanceWindow operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/CreateMaintenanceWindow.go.html to see an example of how to use CreateMaintenanceWindowRequest. +type CreateMaintenanceWindowRequest struct { + + // Details to create the Maintenance Window + CreateMaintenanceWindowDetails `contributesTo:"body"` + + // A token that uniquely identifies a request so it can be retried in case of a timeout or + // server error without risk of executing that same action again. Retry tokens expire after 24 + // hours, but can be invalidated before then due to conflicting operations. For example, if a resource + // has been deleted and purged from the system, then a retry of the original creation request + // might be rejected. + OpcRetryToken *string `mandatory:"false" contributesTo:"header" name:"opc-retry-token"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request CreateMaintenanceWindowRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request CreateMaintenanceWindowRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request CreateMaintenanceWindowRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request CreateMaintenanceWindowRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request CreateMaintenanceWindowRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// CreateMaintenanceWindowResponse wrapper for the CreateMaintenanceWindow operation +type CreateMaintenanceWindowResponse struct { + + // The underlying http response + RawResponse *http.Response + + // The MaintenanceWindow instance + MaintenanceWindow `presentIn:"body"` + + // Unique Oracle-assigned identifier for the asynchronous request. You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // For optimistic concurrency control. See `if-match`. + Etag *string `presentIn:"header" name:"etag"` +} + +func (response CreateMaintenanceWindowResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response CreateMaintenanceWindowResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_resource_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_resource_details.go new file mode 100644 index 00000000000..0365ea00694 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/create_maintenance_window_resource_details.go @@ -0,0 +1,44 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// CreateMaintenanceWindowResourceDetails List of resource IDs that are part of the Maintenance Window. +type CreateMaintenanceWindowResourceDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of monitored resource + // part of the Maintenance window. + ResourceId *string `mandatory:"true" json:"resourceId"` + + // Flag to indicate if the members of the resource has to be include in the + // Maintenance Window. + AreMembersIncluded *bool `mandatory:"false" json:"areMembersIncluded"` +} + +func (m CreateMaintenanceWindowResourceDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m CreateMaintenanceWindowResourceDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/delete_maintenance_window_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/delete_maintenance_window_request_response.go new file mode 100644 index 00000000000..7e825824da5 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/delete_maintenance_window_request_response.go @@ -0,0 +1,98 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// DeleteMaintenanceWindowRequest wrapper for the DeleteMaintenanceWindow operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/DeleteMaintenanceWindow.go.html to see an example of how to use DeleteMaintenanceWindowRequest. +type DeleteMaintenanceWindowRequest struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + MaintenanceWindowId *string `mandatory:"true" contributesTo:"path" name:"maintenanceWindowId"` + + // For optimistic concurrency control. In the PUT or DELETE call + // for a resource, set the `if-match` parameter to the value of the + // etag from a previous GET or POST response for that resource. + // The resource will be updated or deleted only if the etag you + // provide matches the resource's current etag value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"if-match"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request DeleteMaintenanceWindowRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request DeleteMaintenanceWindowRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request DeleteMaintenanceWindowRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request DeleteMaintenanceWindowRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request DeleteMaintenanceWindowRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// DeleteMaintenanceWindowResponse wrapper for the DeleteMaintenanceWindow operation +type DeleteMaintenanceWindowResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the asynchronous request. You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` +} + +func (response DeleteMaintenanceWindowResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response DeleteMaintenanceWindowResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/get_maintenance_window_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/get_maintenance_window_request_response.go new file mode 100644 index 00000000000..a64d2183d0c --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/get_maintenance_window_request_response.go @@ -0,0 +1,94 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// GetMaintenanceWindowRequest wrapper for the GetMaintenanceWindow operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/GetMaintenanceWindow.go.html to see an example of how to use GetMaintenanceWindowRequest. +type GetMaintenanceWindowRequest struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + MaintenanceWindowId *string `mandatory:"true" contributesTo:"path" name:"maintenanceWindowId"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request GetMaintenanceWindowRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request GetMaintenanceWindowRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request GetMaintenanceWindowRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request GetMaintenanceWindowRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request GetMaintenanceWindowRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// GetMaintenanceWindowResponse wrapper for the GetMaintenanceWindow operation +type GetMaintenanceWindowResponse struct { + + // The underlying http response + RawResponse *http.Response + + // The MaintenanceWindow instance + MaintenanceWindow `presentIn:"body"` + + // For optimistic concurrency control. See `if-match`. + Etag *string `presentIn:"header" name:"etag"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` +} + +func (response GetMaintenanceWindowResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response GetMaintenanceWindowResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/list_maintenance_windows_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/list_maintenance_windows_request_response.go new file mode 100644 index 00000000000..e772687be21 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/list_maintenance_windows_request_response.go @@ -0,0 +1,345 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// ListMaintenanceWindowsRequest wrapper for the ListMaintenanceWindows operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/ListMaintenanceWindows.go.html to see an example of how to use ListMaintenanceWindowsRequest. +type ListMaintenanceWindowsRequest struct { + + // The ID of the compartment in which data is listed. + CompartmentId *string `mandatory:"true" contributesTo:"query" name:"compartmentId"` + + // A filter to return maintenance windows that match exact resource name. + Name *string `mandatory:"false" contributesTo:"query" name:"name"` + + // A filter to return maintenance windows with matching lifecycleDetails. + LifecycleDetails ListMaintenanceWindowsLifecycleDetailsEnum `mandatory:"false" contributesTo:"query" name:"lifecycleDetails" omitEmpty:"true"` + + // A filter to return only maintenance windows with matching lifecycleState. + Status ListMaintenanceWindowsStatusEnum `mandatory:"false" contributesTo:"query" name:"status" omitEmpty:"true"` + + // The field to sort by. Only one sort order may be provided. + // Default order for timeCreated is descending. Default order for mainteance window name is ascending. + SortBy ListMaintenanceWindowsSortByEnum `mandatory:"false" contributesTo:"query" name:"sortBy" omitEmpty:"true"` + + // The sort order to use, either ascending (`ASC`) or descending (`DESC`). + SortOrder ListMaintenanceWindowsSortOrderEnum `mandatory:"false" contributesTo:"query" name:"sortOrder" omitEmpty:"true"` + + // For list pagination. The maximum number of results per page, or items to return in a + // paginated "List" call. For important details about how pagination works, see + // List Pagination (https://docs.cloud.oracle.com/iaas/Content/API/Concepts/usingapi.htm#nine). + Limit *int `mandatory:"false" contributesTo:"query" name:"limit"` + + // For list pagination. The value of the `opc-next-page` response header from the + // previous "List" call. For important details about how pagination works, see + // List Pagination (https://docs.cloud.oracle.com/iaas/Content/API/Concepts/usingapi.htm#nine). + Page *string `mandatory:"false" contributesTo:"query" name:"page"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request ListMaintenanceWindowsRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request ListMaintenanceWindowsRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request ListMaintenanceWindowsRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request ListMaintenanceWindowsRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request ListMaintenanceWindowsRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingListMaintenanceWindowsLifecycleDetailsEnum(string(request.LifecycleDetails)); !ok && request.LifecycleDetails != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleDetails: %s. Supported values are: %s.", request.LifecycleDetails, strings.Join(GetListMaintenanceWindowsLifecycleDetailsEnumStringValues(), ","))) + } + if _, ok := GetMappingListMaintenanceWindowsStatusEnum(string(request.Status)); !ok && request.Status != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Status: %s. Supported values are: %s.", request.Status, strings.Join(GetListMaintenanceWindowsStatusEnumStringValues(), ","))) + } + if _, ok := GetMappingListMaintenanceWindowsSortByEnum(string(request.SortBy)); !ok && request.SortBy != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for SortBy: %s. Supported values are: %s.", request.SortBy, strings.Join(GetListMaintenanceWindowsSortByEnumStringValues(), ","))) + } + if _, ok := GetMappingListMaintenanceWindowsSortOrderEnum(string(request.SortOrder)); !ok && request.SortOrder != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for SortOrder: %s. Supported values are: %s.", request.SortOrder, strings.Join(GetListMaintenanceWindowsSortOrderEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// ListMaintenanceWindowsResponse wrapper for the ListMaintenanceWindows operation +type ListMaintenanceWindowsResponse struct { + + // The underlying http response + RawResponse *http.Response + + // A list of MaintenanceWindowCollection instances + MaintenanceWindowCollection `presentIn:"body"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // For pagination of a list of items. When paging through a list, if this header appears in the response, + // then a partial list might have been returned. Include this value as the `page` parameter for the + // subsequent GET request to get the next batch of items. + OpcNextPage *string `presentIn:"header" name:"opc-next-page"` + + // For pagination of a list of items. The total number of items in the result. + OpcTotalItems *int `presentIn:"header" name:"opc-total-items"` +} + +func (response ListMaintenanceWindowsResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response ListMaintenanceWindowsResponse) HTTPResponse() *http.Response { + return response.RawResponse +} + +// ListMaintenanceWindowsLifecycleDetailsEnum Enum with underlying type: string +type ListMaintenanceWindowsLifecycleDetailsEnum string + +// Set of constants representing the allowable values for ListMaintenanceWindowsLifecycleDetailsEnum +const ( + ListMaintenanceWindowsLifecycleDetailsInProgress ListMaintenanceWindowsLifecycleDetailsEnum = "IN_PROGRESS" + ListMaintenanceWindowsLifecycleDetailsScheduled ListMaintenanceWindowsLifecycleDetailsEnum = "SCHEDULED" + ListMaintenanceWindowsLifecycleDetailsCompleted ListMaintenanceWindowsLifecycleDetailsEnum = "COMPLETED" +) + +var mappingListMaintenanceWindowsLifecycleDetailsEnum = map[string]ListMaintenanceWindowsLifecycleDetailsEnum{ + "IN_PROGRESS": ListMaintenanceWindowsLifecycleDetailsInProgress, + "SCHEDULED": ListMaintenanceWindowsLifecycleDetailsScheduled, + "COMPLETED": ListMaintenanceWindowsLifecycleDetailsCompleted, +} + +var mappingListMaintenanceWindowsLifecycleDetailsEnumLowerCase = map[string]ListMaintenanceWindowsLifecycleDetailsEnum{ + "in_progress": ListMaintenanceWindowsLifecycleDetailsInProgress, + "scheduled": ListMaintenanceWindowsLifecycleDetailsScheduled, + "completed": ListMaintenanceWindowsLifecycleDetailsCompleted, +} + +// GetListMaintenanceWindowsLifecycleDetailsEnumValues Enumerates the set of values for ListMaintenanceWindowsLifecycleDetailsEnum +func GetListMaintenanceWindowsLifecycleDetailsEnumValues() []ListMaintenanceWindowsLifecycleDetailsEnum { + values := make([]ListMaintenanceWindowsLifecycleDetailsEnum, 0) + for _, v := range mappingListMaintenanceWindowsLifecycleDetailsEnum { + values = append(values, v) + } + return values +} + +// GetListMaintenanceWindowsLifecycleDetailsEnumStringValues Enumerates the set of values in String for ListMaintenanceWindowsLifecycleDetailsEnum +func GetListMaintenanceWindowsLifecycleDetailsEnumStringValues() []string { + return []string{ + "IN_PROGRESS", + "SCHEDULED", + "COMPLETED", + } +} + +// GetMappingListMaintenanceWindowsLifecycleDetailsEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListMaintenanceWindowsLifecycleDetailsEnum(val string) (ListMaintenanceWindowsLifecycleDetailsEnum, bool) { + enum, ok := mappingListMaintenanceWindowsLifecycleDetailsEnumLowerCase[strings.ToLower(val)] + return enum, ok +} + +// ListMaintenanceWindowsStatusEnum Enum with underlying type: string +type ListMaintenanceWindowsStatusEnum string + +// Set of constants representing the allowable values for ListMaintenanceWindowsStatusEnum +const ( + ListMaintenanceWindowsStatusCreating ListMaintenanceWindowsStatusEnum = "CREATING" + ListMaintenanceWindowsStatusUpdating ListMaintenanceWindowsStatusEnum = "UPDATING" + ListMaintenanceWindowsStatusInactive ListMaintenanceWindowsStatusEnum = "INACTIVE" + ListMaintenanceWindowsStatusActive ListMaintenanceWindowsStatusEnum = "ACTIVE" + ListMaintenanceWindowsStatusDeleting ListMaintenanceWindowsStatusEnum = "DELETING" + ListMaintenanceWindowsStatusDeleted ListMaintenanceWindowsStatusEnum = "DELETED" + ListMaintenanceWindowsStatusFailed ListMaintenanceWindowsStatusEnum = "FAILED" + ListMaintenanceWindowsStatusNeedsAttention ListMaintenanceWindowsStatusEnum = "NEEDS_ATTENTION" +) + +var mappingListMaintenanceWindowsStatusEnum = map[string]ListMaintenanceWindowsStatusEnum{ + "CREATING": ListMaintenanceWindowsStatusCreating, + "UPDATING": ListMaintenanceWindowsStatusUpdating, + "INACTIVE": ListMaintenanceWindowsStatusInactive, + "ACTIVE": ListMaintenanceWindowsStatusActive, + "DELETING": ListMaintenanceWindowsStatusDeleting, + "DELETED": ListMaintenanceWindowsStatusDeleted, + "FAILED": ListMaintenanceWindowsStatusFailed, + "NEEDS_ATTENTION": ListMaintenanceWindowsStatusNeedsAttention, +} + +var mappingListMaintenanceWindowsStatusEnumLowerCase = map[string]ListMaintenanceWindowsStatusEnum{ + "creating": ListMaintenanceWindowsStatusCreating, + "updating": ListMaintenanceWindowsStatusUpdating, + "inactive": ListMaintenanceWindowsStatusInactive, + "active": ListMaintenanceWindowsStatusActive, + "deleting": ListMaintenanceWindowsStatusDeleting, + "deleted": ListMaintenanceWindowsStatusDeleted, + "failed": ListMaintenanceWindowsStatusFailed, + "needs_attention": ListMaintenanceWindowsStatusNeedsAttention, +} + +// GetListMaintenanceWindowsStatusEnumValues Enumerates the set of values for ListMaintenanceWindowsStatusEnum +func GetListMaintenanceWindowsStatusEnumValues() []ListMaintenanceWindowsStatusEnum { + values := make([]ListMaintenanceWindowsStatusEnum, 0) + for _, v := range mappingListMaintenanceWindowsStatusEnum { + values = append(values, v) + } + return values +} + +// GetListMaintenanceWindowsStatusEnumStringValues Enumerates the set of values in String for ListMaintenanceWindowsStatusEnum +func GetListMaintenanceWindowsStatusEnumStringValues() []string { + return []string{ + "CREATING", + "UPDATING", + "INACTIVE", + "ACTIVE", + "DELETING", + "DELETED", + "FAILED", + "NEEDS_ATTENTION", + } +} + +// GetMappingListMaintenanceWindowsStatusEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListMaintenanceWindowsStatusEnum(val string) (ListMaintenanceWindowsStatusEnum, bool) { + enum, ok := mappingListMaintenanceWindowsStatusEnumLowerCase[strings.ToLower(val)] + return enum, ok +} + +// ListMaintenanceWindowsSortByEnum Enum with underlying type: string +type ListMaintenanceWindowsSortByEnum string + +// Set of constants representing the allowable values for ListMaintenanceWindowsSortByEnum +const ( + ListMaintenanceWindowsSortByName ListMaintenanceWindowsSortByEnum = "NAME" + ListMaintenanceWindowsSortByStartTime ListMaintenanceWindowsSortByEnum = "START_TIME" + ListMaintenanceWindowsSortByEndTime ListMaintenanceWindowsSortByEnum = "END_TIME" + ListMaintenanceWindowsSortByTimeCreated ListMaintenanceWindowsSortByEnum = "TIME_CREATED" + ListMaintenanceWindowsSortByTimeUpdated ListMaintenanceWindowsSortByEnum = "TIME_UPDATED" +) + +var mappingListMaintenanceWindowsSortByEnum = map[string]ListMaintenanceWindowsSortByEnum{ + "NAME": ListMaintenanceWindowsSortByName, + "START_TIME": ListMaintenanceWindowsSortByStartTime, + "END_TIME": ListMaintenanceWindowsSortByEndTime, + "TIME_CREATED": ListMaintenanceWindowsSortByTimeCreated, + "TIME_UPDATED": ListMaintenanceWindowsSortByTimeUpdated, +} + +var mappingListMaintenanceWindowsSortByEnumLowerCase = map[string]ListMaintenanceWindowsSortByEnum{ + "name": ListMaintenanceWindowsSortByName, + "start_time": ListMaintenanceWindowsSortByStartTime, + "end_time": ListMaintenanceWindowsSortByEndTime, + "time_created": ListMaintenanceWindowsSortByTimeCreated, + "time_updated": ListMaintenanceWindowsSortByTimeUpdated, +} + +// GetListMaintenanceWindowsSortByEnumValues Enumerates the set of values for ListMaintenanceWindowsSortByEnum +func GetListMaintenanceWindowsSortByEnumValues() []ListMaintenanceWindowsSortByEnum { + values := make([]ListMaintenanceWindowsSortByEnum, 0) + for _, v := range mappingListMaintenanceWindowsSortByEnum { + values = append(values, v) + } + return values +} + +// GetListMaintenanceWindowsSortByEnumStringValues Enumerates the set of values in String for ListMaintenanceWindowsSortByEnum +func GetListMaintenanceWindowsSortByEnumStringValues() []string { + return []string{ + "NAME", + "START_TIME", + "END_TIME", + "TIME_CREATED", + "TIME_UPDATED", + } +} + +// GetMappingListMaintenanceWindowsSortByEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListMaintenanceWindowsSortByEnum(val string) (ListMaintenanceWindowsSortByEnum, bool) { + enum, ok := mappingListMaintenanceWindowsSortByEnumLowerCase[strings.ToLower(val)] + return enum, ok +} + +// ListMaintenanceWindowsSortOrderEnum Enum with underlying type: string +type ListMaintenanceWindowsSortOrderEnum string + +// Set of constants representing the allowable values for ListMaintenanceWindowsSortOrderEnum +const ( + ListMaintenanceWindowsSortOrderAsc ListMaintenanceWindowsSortOrderEnum = "ASC" + ListMaintenanceWindowsSortOrderDesc ListMaintenanceWindowsSortOrderEnum = "DESC" +) + +var mappingListMaintenanceWindowsSortOrderEnum = map[string]ListMaintenanceWindowsSortOrderEnum{ + "ASC": ListMaintenanceWindowsSortOrderAsc, + "DESC": ListMaintenanceWindowsSortOrderDesc, +} + +var mappingListMaintenanceWindowsSortOrderEnumLowerCase = map[string]ListMaintenanceWindowsSortOrderEnum{ + "asc": ListMaintenanceWindowsSortOrderAsc, + "desc": ListMaintenanceWindowsSortOrderDesc, +} + +// GetListMaintenanceWindowsSortOrderEnumValues Enumerates the set of values for ListMaintenanceWindowsSortOrderEnum +func GetListMaintenanceWindowsSortOrderEnumValues() []ListMaintenanceWindowsSortOrderEnum { + values := make([]ListMaintenanceWindowsSortOrderEnum, 0) + for _, v := range mappingListMaintenanceWindowsSortOrderEnum { + values = append(values, v) + } + return values +} + +// GetListMaintenanceWindowsSortOrderEnumStringValues Enumerates the set of values in String for ListMaintenanceWindowsSortOrderEnum +func GetListMaintenanceWindowsSortOrderEnumStringValues() []string { + return []string{ + "ASC", + "DESC", + } +} + +// GetMappingListMaintenanceWindowsSortOrderEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListMaintenanceWindowsSortOrderEnum(val string) (ListMaintenanceWindowsSortOrderEnum, bool) { + enum, ok := mappingListMaintenanceWindowsSortOrderEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window.go new file mode 100644 index 00000000000..0c223eb3a7e --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window.go @@ -0,0 +1,130 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// MaintenanceWindow Maintenance Window object. It contains all the information of the Maintenance window. +// Used in the Create and Get operations. +type MaintenanceWindow struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + Id *string `mandatory:"true" json:"id"` + + // Maintenance Window name. + Name *string `mandatory:"true" json:"name"` + + // Compartment Identifier OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm). + CompartmentId *string `mandatory:"true" json:"compartmentId"` + + // Maintenance Window description. + Description *string `mandatory:"false" json:"description"` + + // List of resource Ids which are part of the Maintenance Window + Resources []CreateMaintenanceWindowResourceDetails `mandatory:"false" json:"resources"` + + // List of resource details that are part of the Maintenance Window. + ResourcesDetails []MonitoredResourceDetails `mandatory:"false" json:"resourcesDetails"` + + // Lifecycle state of the monitored resource. + LifecycleState MaintenanceWindowLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` + + // Lifecycle Details of the Maintenance Window. + LifecycleDetails MaintenanceWindowLifecycleDetailsEnum `mandatory:"false" json:"lifecycleDetails,omitempty"` + + Schedule MaintenanceWindowSchedule `mandatory:"false" json:"schedule"` + + // The time the the maintenance window was created. An RFC3339 formatted datetime string + TimeCreated *common.SDKTime `mandatory:"false" json:"timeCreated"` + + // The time the the mainteance window was updated. An RFC3339 formatted datetime string + TimeUpdated *common.SDKTime `mandatory:"false" json:"timeUpdated"` +} + +func (m MaintenanceWindow) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m MaintenanceWindow) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingMaintenanceWindowLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetMaintenanceWindowLifecycleStateEnumStringValues(), ","))) + } + if _, ok := GetMappingMaintenanceWindowLifecycleDetailsEnum(string(m.LifecycleDetails)); !ok && m.LifecycleDetails != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleDetails: %s. Supported values are: %s.", m.LifecycleDetails, strings.Join(GetMaintenanceWindowLifecycleDetailsEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// UnmarshalJSON unmarshals from json +func (m *MaintenanceWindow) UnmarshalJSON(data []byte) (e error) { + model := struct { + Description *string `json:"description"` + Resources []CreateMaintenanceWindowResourceDetails `json:"resources"` + ResourcesDetails []MonitoredResourceDetails `json:"resourcesDetails"` + LifecycleState MaintenanceWindowLifecycleStateEnum `json:"lifecycleState"` + LifecycleDetails MaintenanceWindowLifecycleDetailsEnum `json:"lifecycleDetails"` + Schedule maintenancewindowschedule `json:"schedule"` + TimeCreated *common.SDKTime `json:"timeCreated"` + TimeUpdated *common.SDKTime `json:"timeUpdated"` + Id *string `json:"id"` + Name *string `json:"name"` + CompartmentId *string `json:"compartmentId"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.Description = model.Description + + m.Resources = make([]CreateMaintenanceWindowResourceDetails, len(model.Resources)) + copy(m.Resources, model.Resources) + m.ResourcesDetails = make([]MonitoredResourceDetails, len(model.ResourcesDetails)) + copy(m.ResourcesDetails, model.ResourcesDetails) + m.LifecycleState = model.LifecycleState + + m.LifecycleDetails = model.LifecycleDetails + + nn, e = model.Schedule.UnmarshalPolymorphicJSON(model.Schedule.JsonData) + if e != nil { + return + } + if nn != nil { + m.Schedule = nn.(MaintenanceWindowSchedule) + } else { + m.Schedule = nil + } + + m.TimeCreated = model.TimeCreated + + m.TimeUpdated = model.TimeUpdated + + m.Id = model.Id + + m.Name = model.Name + + m.CompartmentId = model.CompartmentId + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_collection.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_collection.go new file mode 100644 index 00000000000..fd58cbbf8e9 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_collection.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// MaintenanceWindowCollection Result of List of maintenance window. Contains MaintenanceWindowSummary items and other data. +type MaintenanceWindowCollection struct { + + // List of maintenance window. + Items []MaintenanceWindowSummary `mandatory:"true" json:"items"` +} + +func (m MaintenanceWindowCollection) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m MaintenanceWindowCollection) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_details.go new file mode 100644 index 00000000000..bd4a4a3a0b5 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_details.go @@ -0,0 +1,60 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "strings" +) + +// MaintenanceWindowLifecycleDetailsEnum Enum with underlying type: string +type MaintenanceWindowLifecycleDetailsEnum string + +// Set of constants representing the allowable values for MaintenanceWindowLifecycleDetailsEnum +const ( + MaintenanceWindowLifecycleDetailsInProgress MaintenanceWindowLifecycleDetailsEnum = "IN_PROGRESS" + MaintenanceWindowLifecycleDetailsScheduled MaintenanceWindowLifecycleDetailsEnum = "SCHEDULED" + MaintenanceWindowLifecycleDetailsCompleted MaintenanceWindowLifecycleDetailsEnum = "COMPLETED" +) + +var mappingMaintenanceWindowLifecycleDetailsEnum = map[string]MaintenanceWindowLifecycleDetailsEnum{ + "IN_PROGRESS": MaintenanceWindowLifecycleDetailsInProgress, + "SCHEDULED": MaintenanceWindowLifecycleDetailsScheduled, + "COMPLETED": MaintenanceWindowLifecycleDetailsCompleted, +} + +var mappingMaintenanceWindowLifecycleDetailsEnumLowerCase = map[string]MaintenanceWindowLifecycleDetailsEnum{ + "in_progress": MaintenanceWindowLifecycleDetailsInProgress, + "scheduled": MaintenanceWindowLifecycleDetailsScheduled, + "completed": MaintenanceWindowLifecycleDetailsCompleted, +} + +// GetMaintenanceWindowLifecycleDetailsEnumValues Enumerates the set of values for MaintenanceWindowLifecycleDetailsEnum +func GetMaintenanceWindowLifecycleDetailsEnumValues() []MaintenanceWindowLifecycleDetailsEnum { + values := make([]MaintenanceWindowLifecycleDetailsEnum, 0) + for _, v := range mappingMaintenanceWindowLifecycleDetailsEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowLifecycleDetailsEnumStringValues Enumerates the set of values in String for MaintenanceWindowLifecycleDetailsEnum +func GetMaintenanceWindowLifecycleDetailsEnumStringValues() []string { + return []string{ + "IN_PROGRESS", + "SCHEDULED", + "COMPLETED", + } +} + +// GetMappingMaintenanceWindowLifecycleDetailsEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowLifecycleDetailsEnum(val string) (MaintenanceWindowLifecycleDetailsEnum, bool) { + enum, ok := mappingMaintenanceWindowLifecycleDetailsEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_state.go new file mode 100644 index 00000000000..da50d40ce54 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_lifecycle_state.go @@ -0,0 +1,80 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "strings" +) + +// MaintenanceWindowLifecycleStateEnum Enum with underlying type: string +type MaintenanceWindowLifecycleStateEnum string + +// Set of constants representing the allowable values for MaintenanceWindowLifecycleStateEnum +const ( + MaintenanceWindowLifecycleStateCreating MaintenanceWindowLifecycleStateEnum = "CREATING" + MaintenanceWindowLifecycleStateUpdating MaintenanceWindowLifecycleStateEnum = "UPDATING" + MaintenanceWindowLifecycleStateInactive MaintenanceWindowLifecycleStateEnum = "INACTIVE" + MaintenanceWindowLifecycleStateActive MaintenanceWindowLifecycleStateEnum = "ACTIVE" + MaintenanceWindowLifecycleStateDeleting MaintenanceWindowLifecycleStateEnum = "DELETING" + MaintenanceWindowLifecycleStateDeleted MaintenanceWindowLifecycleStateEnum = "DELETED" + MaintenanceWindowLifecycleStateFailed MaintenanceWindowLifecycleStateEnum = "FAILED" + MaintenanceWindowLifecycleStateNeedsAttention MaintenanceWindowLifecycleStateEnum = "NEEDS_ATTENTION" +) + +var mappingMaintenanceWindowLifecycleStateEnum = map[string]MaintenanceWindowLifecycleStateEnum{ + "CREATING": MaintenanceWindowLifecycleStateCreating, + "UPDATING": MaintenanceWindowLifecycleStateUpdating, + "INACTIVE": MaintenanceWindowLifecycleStateInactive, + "ACTIVE": MaintenanceWindowLifecycleStateActive, + "DELETING": MaintenanceWindowLifecycleStateDeleting, + "DELETED": MaintenanceWindowLifecycleStateDeleted, + "FAILED": MaintenanceWindowLifecycleStateFailed, + "NEEDS_ATTENTION": MaintenanceWindowLifecycleStateNeedsAttention, +} + +var mappingMaintenanceWindowLifecycleStateEnumLowerCase = map[string]MaintenanceWindowLifecycleStateEnum{ + "creating": MaintenanceWindowLifecycleStateCreating, + "updating": MaintenanceWindowLifecycleStateUpdating, + "inactive": MaintenanceWindowLifecycleStateInactive, + "active": MaintenanceWindowLifecycleStateActive, + "deleting": MaintenanceWindowLifecycleStateDeleting, + "deleted": MaintenanceWindowLifecycleStateDeleted, + "failed": MaintenanceWindowLifecycleStateFailed, + "needs_attention": MaintenanceWindowLifecycleStateNeedsAttention, +} + +// GetMaintenanceWindowLifecycleStateEnumValues Enumerates the set of values for MaintenanceWindowLifecycleStateEnum +func GetMaintenanceWindowLifecycleStateEnumValues() []MaintenanceWindowLifecycleStateEnum { + values := make([]MaintenanceWindowLifecycleStateEnum, 0) + for _, v := range mappingMaintenanceWindowLifecycleStateEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowLifecycleStateEnumStringValues Enumerates the set of values in String for MaintenanceWindowLifecycleStateEnum +func GetMaintenanceWindowLifecycleStateEnumStringValues() []string { + return []string{ + "CREATING", + "UPDATING", + "INACTIVE", + "ACTIVE", + "DELETING", + "DELETED", + "FAILED", + "NEEDS_ATTENTION", + } +} + +// GetMappingMaintenanceWindowLifecycleStateEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowLifecycleStateEnum(val string) (MaintenanceWindowLifecycleStateEnum, bool) { + enum, ok := mappingMaintenanceWindowLifecycleStateEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_status.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_status.go new file mode 100644 index 00000000000..f162147a86c --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_status.go @@ -0,0 +1,60 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "strings" +) + +// MaintenanceWindowOperationStatusEnum Enum with underlying type: string +type MaintenanceWindowOperationStatusEnum string + +// Set of constants representing the allowable values for MaintenanceWindowOperationStatusEnum +const ( + MaintenanceWindowOperationStatusInProgress MaintenanceWindowOperationStatusEnum = "IN_PROGRESS" + MaintenanceWindowOperationStatusFailed MaintenanceWindowOperationStatusEnum = "FAILED" + MaintenanceWindowOperationStatusSucceeded MaintenanceWindowOperationStatusEnum = "SUCCEEDED" +) + +var mappingMaintenanceWindowOperationStatusEnum = map[string]MaintenanceWindowOperationStatusEnum{ + "IN_PROGRESS": MaintenanceWindowOperationStatusInProgress, + "FAILED": MaintenanceWindowOperationStatusFailed, + "SUCCEEDED": MaintenanceWindowOperationStatusSucceeded, +} + +var mappingMaintenanceWindowOperationStatusEnumLowerCase = map[string]MaintenanceWindowOperationStatusEnum{ + "in_progress": MaintenanceWindowOperationStatusInProgress, + "failed": MaintenanceWindowOperationStatusFailed, + "succeeded": MaintenanceWindowOperationStatusSucceeded, +} + +// GetMaintenanceWindowOperationStatusEnumValues Enumerates the set of values for MaintenanceWindowOperationStatusEnum +func GetMaintenanceWindowOperationStatusEnumValues() []MaintenanceWindowOperationStatusEnum { + values := make([]MaintenanceWindowOperationStatusEnum, 0) + for _, v := range mappingMaintenanceWindowOperationStatusEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowOperationStatusEnumStringValues Enumerates the set of values in String for MaintenanceWindowOperationStatusEnum +func GetMaintenanceWindowOperationStatusEnumStringValues() []string { + return []string{ + "IN_PROGRESS", + "FAILED", + "SUCCEEDED", + } +} + +// GetMappingMaintenanceWindowOperationStatusEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowOperationStatusEnum(val string) (MaintenanceWindowOperationStatusEnum, bool) { + enum, ok := mappingMaintenanceWindowOperationStatusEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_type.go new file mode 100644 index 00000000000..6a306b2f0d7 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_operation_type.go @@ -0,0 +1,64 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "strings" +) + +// MaintenanceWindowOperationTypeEnum Enum with underlying type: string +type MaintenanceWindowOperationTypeEnum string + +// Set of constants representing the allowable values for MaintenanceWindowOperationTypeEnum +const ( + MaintenanceWindowOperationTypeUpdate MaintenanceWindowOperationTypeEnum = "UPDATE" + MaintenanceWindowOperationTypeCreate MaintenanceWindowOperationTypeEnum = "CREATE" + MaintenanceWindowOperationTypeDelete MaintenanceWindowOperationTypeEnum = "DELETE" + MaintenanceWindowOperationTypeStop MaintenanceWindowOperationTypeEnum = "STOP" +) + +var mappingMaintenanceWindowOperationTypeEnum = map[string]MaintenanceWindowOperationTypeEnum{ + "UPDATE": MaintenanceWindowOperationTypeUpdate, + "CREATE": MaintenanceWindowOperationTypeCreate, + "DELETE": MaintenanceWindowOperationTypeDelete, + "STOP": MaintenanceWindowOperationTypeStop, +} + +var mappingMaintenanceWindowOperationTypeEnumLowerCase = map[string]MaintenanceWindowOperationTypeEnum{ + "update": MaintenanceWindowOperationTypeUpdate, + "create": MaintenanceWindowOperationTypeCreate, + "delete": MaintenanceWindowOperationTypeDelete, + "stop": MaintenanceWindowOperationTypeStop, +} + +// GetMaintenanceWindowOperationTypeEnumValues Enumerates the set of values for MaintenanceWindowOperationTypeEnum +func GetMaintenanceWindowOperationTypeEnumValues() []MaintenanceWindowOperationTypeEnum { + values := make([]MaintenanceWindowOperationTypeEnum, 0) + for _, v := range mappingMaintenanceWindowOperationTypeEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowOperationTypeEnumStringValues Enumerates the set of values in String for MaintenanceWindowOperationTypeEnum +func GetMaintenanceWindowOperationTypeEnumStringValues() []string { + return []string{ + "UPDATE", + "CREATE", + "DELETE", + "STOP", + } +} + +// GetMappingMaintenanceWindowOperationTypeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowOperationTypeEnum(val string) (MaintenanceWindowOperationTypeEnum, bool) { + enum, ok := mappingMaintenanceWindowOperationTypeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_schedule.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_schedule.go new file mode 100644 index 00000000000..978d46054cb --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_schedule.go @@ -0,0 +1,123 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// MaintenanceWindowSchedule Schedule information of the Maintenance Window +type MaintenanceWindowSchedule interface { +} + +type maintenancewindowschedule struct { + JsonData []byte + ScheduleType string `json:"scheduleType"` +} + +// UnmarshalJSON unmarshals json +func (m *maintenancewindowschedule) UnmarshalJSON(data []byte) error { + m.JsonData = data + type Unmarshalermaintenancewindowschedule maintenancewindowschedule + s := struct { + Model Unmarshalermaintenancewindowschedule + }{} + err := json.Unmarshal(data, &s.Model) + if err != nil { + return err + } + m.ScheduleType = s.Model.ScheduleType + + return err +} + +// UnmarshalPolymorphicJSON unmarshals polymorphic json +func (m *maintenancewindowschedule) UnmarshalPolymorphicJSON(data []byte) (interface{}, error) { + + if data == nil || string(data) == "null" { + return nil, nil + } + + var err error + switch m.ScheduleType { + case "RECURRENT": + mm := RecurrentMaintenanceWindowSchedule{} + err = json.Unmarshal(data, &mm) + return mm, err + case "ONE_TIME": + mm := OneTimeMaintenanceWindowSchedule{} + err = json.Unmarshal(data, &mm) + return mm, err + default: + common.Logf("Recieved unsupported enum value for MaintenanceWindowSchedule: %s.", m.ScheduleType) + return *m, nil + } +} + +func (m maintenancewindowschedule) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m maintenancewindowschedule) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MaintenanceWindowScheduleScheduleTypeEnum Enum with underlying type: string +type MaintenanceWindowScheduleScheduleTypeEnum string + +// Set of constants representing the allowable values for MaintenanceWindowScheduleScheduleTypeEnum +const ( + MaintenanceWindowScheduleScheduleTypeOneTime MaintenanceWindowScheduleScheduleTypeEnum = "ONE_TIME" + MaintenanceWindowScheduleScheduleTypeRecurrent MaintenanceWindowScheduleScheduleTypeEnum = "RECURRENT" +) + +var mappingMaintenanceWindowScheduleScheduleTypeEnum = map[string]MaintenanceWindowScheduleScheduleTypeEnum{ + "ONE_TIME": MaintenanceWindowScheduleScheduleTypeOneTime, + "RECURRENT": MaintenanceWindowScheduleScheduleTypeRecurrent, +} + +var mappingMaintenanceWindowScheduleScheduleTypeEnumLowerCase = map[string]MaintenanceWindowScheduleScheduleTypeEnum{ + "one_time": MaintenanceWindowScheduleScheduleTypeOneTime, + "recurrent": MaintenanceWindowScheduleScheduleTypeRecurrent, +} + +// GetMaintenanceWindowScheduleScheduleTypeEnumValues Enumerates the set of values for MaintenanceWindowScheduleScheduleTypeEnum +func GetMaintenanceWindowScheduleScheduleTypeEnumValues() []MaintenanceWindowScheduleScheduleTypeEnum { + values := make([]MaintenanceWindowScheduleScheduleTypeEnum, 0) + for _, v := range mappingMaintenanceWindowScheduleScheduleTypeEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowScheduleScheduleTypeEnumStringValues Enumerates the set of values in String for MaintenanceWindowScheduleScheduleTypeEnum +func GetMaintenanceWindowScheduleScheduleTypeEnumStringValues() []string { + return []string{ + "ONE_TIME", + "RECURRENT", + } +} + +// GetMappingMaintenanceWindowScheduleScheduleTypeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowScheduleScheduleTypeEnum(val string) (MaintenanceWindowScheduleScheduleTypeEnum, bool) { + enum, ok := mappingMaintenanceWindowScheduleScheduleTypeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_sort_by.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_sort_by.go new file mode 100644 index 00000000000..68581c9ef3c --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_sort_by.go @@ -0,0 +1,68 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "strings" +) + +// MaintenanceWindowSortByEnum Enum with underlying type: string +type MaintenanceWindowSortByEnum string + +// Set of constants representing the allowable values for MaintenanceWindowSortByEnum +const ( + MaintenanceWindowSortByName MaintenanceWindowSortByEnum = "NAME" + MaintenanceWindowSortByStartTime MaintenanceWindowSortByEnum = "START_TIME" + MaintenanceWindowSortByEndTime MaintenanceWindowSortByEnum = "END_TIME" + MaintenanceWindowSortByTimeCreated MaintenanceWindowSortByEnum = "TIME_CREATED" + MaintenanceWindowSortByTimeUpdated MaintenanceWindowSortByEnum = "TIME_UPDATED" +) + +var mappingMaintenanceWindowSortByEnum = map[string]MaintenanceWindowSortByEnum{ + "NAME": MaintenanceWindowSortByName, + "START_TIME": MaintenanceWindowSortByStartTime, + "END_TIME": MaintenanceWindowSortByEndTime, + "TIME_CREATED": MaintenanceWindowSortByTimeCreated, + "TIME_UPDATED": MaintenanceWindowSortByTimeUpdated, +} + +var mappingMaintenanceWindowSortByEnumLowerCase = map[string]MaintenanceWindowSortByEnum{ + "name": MaintenanceWindowSortByName, + "start_time": MaintenanceWindowSortByStartTime, + "end_time": MaintenanceWindowSortByEndTime, + "time_created": MaintenanceWindowSortByTimeCreated, + "time_updated": MaintenanceWindowSortByTimeUpdated, +} + +// GetMaintenanceWindowSortByEnumValues Enumerates the set of values for MaintenanceWindowSortByEnum +func GetMaintenanceWindowSortByEnumValues() []MaintenanceWindowSortByEnum { + values := make([]MaintenanceWindowSortByEnum, 0) + for _, v := range mappingMaintenanceWindowSortByEnum { + values = append(values, v) + } + return values +} + +// GetMaintenanceWindowSortByEnumStringValues Enumerates the set of values in String for MaintenanceWindowSortByEnum +func GetMaintenanceWindowSortByEnumStringValues() []string { + return []string{ + "NAME", + "START_TIME", + "END_TIME", + "TIME_CREATED", + "TIME_UPDATED", + } +} + +// GetMappingMaintenanceWindowSortByEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingMaintenanceWindowSortByEnum(val string) (MaintenanceWindowSortByEnum, bool) { + enum, ok := mappingMaintenanceWindowSortByEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_summary.go new file mode 100644 index 00000000000..31d646a7ccf --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/maintenance_window_summary.go @@ -0,0 +1,144 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// MaintenanceWindowSummary General information of a Maintenance Window +type MaintenanceWindowSummary struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + Id *string `mandatory:"true" json:"id"` + + // Maintenance Window name. + Name *string `mandatory:"true" json:"name"` + + // Compartment Identifier OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm). + CompartmentId *string `mandatory:"false" json:"compartmentId"` + + // Number of resources of the Maintenance window. + NumberOfResources *int `mandatory:"false" json:"numberOfResources"` + + // Lifecycle state of the monitored resource. + LifecycleState MaintenanceWindowLifecycleStateEnum `mandatory:"false" json:"lifecycleState,omitempty"` + + // Lifecycle Details of the Maintenance Window. + LifecycleDetails MaintenanceWindowLifecycleDetailsEnum `mandatory:"false" json:"lifecycleDetails,omitempty"` + + // The name of the most recent operation of the Maintenance window. + OperationType MaintenanceWindowOperationTypeEnum `mandatory:"false" json:"operationType,omitempty"` + + // Status of the most recent operation of the Maintenance Window. + OperationStatus MaintenanceWindowOperationStatusEnum `mandatory:"false" json:"operationStatus,omitempty"` + + Schedule MaintenanceWindowSchedule `mandatory:"false" json:"schedule"` + + // Simple key-value pair that is applied without any predefined name, type or scope. Exists for cross-compatibility only. + // Example: `{"bar-key": "value"}` + FreeformTags map[string]string `mandatory:"false" json:"freeformTags"` + + // Defined tags for this resource. Each key is predefined and scoped to a namespace. + // Example: `{"foo-namespace": {"bar-key": "value"}}` + DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + + // Usage of system tag keys. These predefined keys are scoped to namespaces. + // Example: `{"orcl-cloud": {"free-tier-retained": "true"}}` + SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"` +} + +func (m MaintenanceWindowSummary) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m MaintenanceWindowSummary) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingMaintenanceWindowLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetMaintenanceWindowLifecycleStateEnumStringValues(), ","))) + } + if _, ok := GetMappingMaintenanceWindowLifecycleDetailsEnum(string(m.LifecycleDetails)); !ok && m.LifecycleDetails != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleDetails: %s. Supported values are: %s.", m.LifecycleDetails, strings.Join(GetMaintenanceWindowLifecycleDetailsEnumStringValues(), ","))) + } + if _, ok := GetMappingMaintenanceWindowOperationTypeEnum(string(m.OperationType)); !ok && m.OperationType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for OperationType: %s. Supported values are: %s.", m.OperationType, strings.Join(GetMaintenanceWindowOperationTypeEnumStringValues(), ","))) + } + if _, ok := GetMappingMaintenanceWindowOperationStatusEnum(string(m.OperationStatus)); !ok && m.OperationStatus != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for OperationStatus: %s. Supported values are: %s.", m.OperationStatus, strings.Join(GetMaintenanceWindowOperationStatusEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// UnmarshalJSON unmarshals from json +func (m *MaintenanceWindowSummary) UnmarshalJSON(data []byte) (e error) { + model := struct { + CompartmentId *string `json:"compartmentId"` + NumberOfResources *int `json:"numberOfResources"` + LifecycleState MaintenanceWindowLifecycleStateEnum `json:"lifecycleState"` + LifecycleDetails MaintenanceWindowLifecycleDetailsEnum `json:"lifecycleDetails"` + OperationType MaintenanceWindowOperationTypeEnum `json:"operationType"` + OperationStatus MaintenanceWindowOperationStatusEnum `json:"operationStatus"` + Schedule maintenancewindowschedule `json:"schedule"` + FreeformTags map[string]string `json:"freeformTags"` + DefinedTags map[string]map[string]interface{} `json:"definedTags"` + SystemTags map[string]map[string]interface{} `json:"systemTags"` + Id *string `json:"id"` + Name *string `json:"name"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.CompartmentId = model.CompartmentId + + m.NumberOfResources = model.NumberOfResources + + m.LifecycleState = model.LifecycleState + + m.LifecycleDetails = model.LifecycleDetails + + m.OperationType = model.OperationType + + m.OperationStatus = model.OperationStatus + + nn, e = model.Schedule.UnmarshalPolymorphicJSON(model.Schedule.JsonData) + if e != nil { + return + } + if nn != nil { + m.Schedule = nn.(MaintenanceWindowSchedule) + } else { + m.Schedule = nil + } + + m.FreeformTags = model.FreeformTags + + m.DefinedTags = model.DefinedTags + + m.SystemTags = model.SystemTags + + m.Id = model.Id + + m.Name = model.Name + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/monitored_resource_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/monitored_resource_details.go new file mode 100644 index 00000000000..a4c5ea75f38 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/monitored_resource_details.go @@ -0,0 +1,49 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// MonitoredResourceDetails Details of the Resource that are part of the Maintenance Window. +type MonitoredResourceDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of monitored resource + // part of the Maintenance window. + ResourceId *string `mandatory:"true" json:"resourceId"` + + // Name of the monitored resource + Name *string `mandatory:"true" json:"name"` + + // Type of the monitored resource + Type *string `mandatory:"true" json:"type"` + + // Number of members of the resource + NumberOfMembers *int `mandatory:"false" json:"numberOfMembers"` +} + +func (m MonitoredResourceDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m MonitoredResourceDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/one_time_maintenance_window_schedule.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/one_time_maintenance_window_schedule.go new file mode 100644 index 00000000000..7191e87de2b --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/one_time_maintenance_window_schedule.go @@ -0,0 +1,57 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// OneTimeMaintenanceWindowSchedule Schedule information for the Maintenance Window that is executed only once. +type OneTimeMaintenanceWindowSchedule struct { + + // Start time of Maintenance window. A RFC3339 formatted datetime string + TimeMaintenanceWindowStart *common.SDKTime `mandatory:"false" json:"timeMaintenanceWindowStart"` + + // Start time of Maintenance window. A RFC3339 formatted datetime string + TimeMaintenanceWindowEnd *common.SDKTime `mandatory:"false" json:"timeMaintenanceWindowEnd"` +} + +func (m OneTimeMaintenanceWindowSchedule) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m OneTimeMaintenanceWindowSchedule) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m OneTimeMaintenanceWindowSchedule) MarshalJSON() (buff []byte, e error) { + type MarshalTypeOneTimeMaintenanceWindowSchedule OneTimeMaintenanceWindowSchedule + s := struct { + DiscriminatorParam string `json:"scheduleType"` + MarshalTypeOneTimeMaintenanceWindowSchedule + }{ + "ONE_TIME", + (MarshalTypeOneTimeMaintenanceWindowSchedule)(m), + } + + return json.Marshal(&s) +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/operation_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/operation_type.go index 7bfb7596cd5..49712f1cb0c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/operation_type.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/operation_type.go @@ -32,6 +32,10 @@ const ( OperationTypeBulkDeleteResources OperationTypeEnum = "BULK_DELETE_RESOURCES" OperationTypeUpdateAndPropagateTags OperationTypeEnum = "UPDATE_AND_PROPAGATE_TAGS" OperationTypeImportResources OperationTypeEnum = "IMPORT_RESOURCES" + OperationTypeCreateMaintenanceWindow OperationTypeEnum = "CREATE_MAINTENANCE_WINDOW" + OperationTypeUpdateMaintenanceWindow OperationTypeEnum = "UPDATE_MAINTENANCE_WINDOW" + OperationTypeDeleteMaintenanceWindow OperationTypeEnum = "DELETE_MAINTENANCE_WINDOW" + OperationTypeStopMaintenanceWindow OperationTypeEnum = "STOP_MAINTENANCE_WINDOW" ) var mappingOperationTypeEnum = map[string]OperationTypeEnum{ @@ -49,6 +53,10 @@ var mappingOperationTypeEnum = map[string]OperationTypeEnum{ "BULK_DELETE_RESOURCES": OperationTypeBulkDeleteResources, "UPDATE_AND_PROPAGATE_TAGS": OperationTypeUpdateAndPropagateTags, "IMPORT_RESOURCES": OperationTypeImportResources, + "CREATE_MAINTENANCE_WINDOW": OperationTypeCreateMaintenanceWindow, + "UPDATE_MAINTENANCE_WINDOW": OperationTypeUpdateMaintenanceWindow, + "DELETE_MAINTENANCE_WINDOW": OperationTypeDeleteMaintenanceWindow, + "STOP_MAINTENANCE_WINDOW": OperationTypeStopMaintenanceWindow, } var mappingOperationTypeEnumLowerCase = map[string]OperationTypeEnum{ @@ -66,6 +74,10 @@ var mappingOperationTypeEnumLowerCase = map[string]OperationTypeEnum{ "bulk_delete_resources": OperationTypeBulkDeleteResources, "update_and_propagate_tags": OperationTypeUpdateAndPropagateTags, "import_resources": OperationTypeImportResources, + "create_maintenance_window": OperationTypeCreateMaintenanceWindow, + "update_maintenance_window": OperationTypeUpdateMaintenanceWindow, + "delete_maintenance_window": OperationTypeDeleteMaintenanceWindow, + "stop_maintenance_window": OperationTypeStopMaintenanceWindow, } // GetOperationTypeEnumValues Enumerates the set of values for OperationTypeEnum @@ -94,6 +106,10 @@ func GetOperationTypeEnumStringValues() []string { "BULK_DELETE_RESOURCES", "UPDATE_AND_PROPAGATE_TAGS", "IMPORT_RESOURCES", + "CREATE_MAINTENANCE_WINDOW", + "UPDATE_MAINTENANCE_WINDOW", + "DELETE_MAINTENANCE_WINDOW", + "STOP_MAINTENANCE_WINDOW", } } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/recurrent_maintenance_window_schedule.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/recurrent_maintenance_window_schedule.go new file mode 100644 index 00000000000..b372421cd17 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/recurrent_maintenance_window_schedule.go @@ -0,0 +1,71 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// RecurrentMaintenanceWindowSchedule Schedule information for the Maintenance Window that is executed multiple times. +type RecurrentMaintenanceWindowSchedule struct { + + // A RFC5545 formatted recurrence string which represents the Maintenance Window Recurrence. + // Please refer this for details:https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10 + // FREQ: Frequency of the Maintenance Window. The supported values are: DAILY and WEEKLY. + // BYDAY: Comma separated days for Weekly Maintenance Window. + // BYHOUR: Specifies the start hour of each recurrence after `timeMaintenanceWindowStart` value. + // BYMINUTE: Specifies the start minute of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 + // BYSECOND: Specifies the start second of each reccurrence after `timeMaintenanceWindowStart` value. The default value is 00 + // Other Rules are not supported. + MaintenanceWindowRecurrences *string `mandatory:"true" json:"maintenanceWindowRecurrences"` + + // Start time of Maintenance window. A RFC3339 formatted datetime string + TimeMaintenanceWindowStart *common.SDKTime `mandatory:"false" json:"timeMaintenanceWindowStart"` + + // Start time of Maintenance window. A RFC3339 formatted datetime string + TimeMaintenanceWindowEnd *common.SDKTime `mandatory:"false" json:"timeMaintenanceWindowEnd"` + + // Duration time of each recurrence of each Maintenance Window. + // It must be specified as a string in ISO 8601 extended format. + MaintenanceWindowDuration *string `mandatory:"false" json:"maintenanceWindowDuration"` +} + +func (m RecurrentMaintenanceWindowSchedule) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m RecurrentMaintenanceWindowSchedule) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m RecurrentMaintenanceWindowSchedule) MarshalJSON() (buff []byte, e error) { + type MarshalTypeRecurrentMaintenanceWindowSchedule RecurrentMaintenanceWindowSchedule + s := struct { + DiscriminatorParam string `json:"scheduleType"` + MarshalTypeRecurrentMaintenanceWindowSchedule + }{ + "RECURRENT", + (MarshalTypeRecurrentMaintenanceWindowSchedule)(m), + } + + return json.Marshal(&s) +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/retry_failed_maintenance_window_operation_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/retry_failed_maintenance_window_operation_request_response.go new file mode 100644 index 00000000000..0c4e5b461d1 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/retry_failed_maintenance_window_operation_request_response.go @@ -0,0 +1,98 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// RetryFailedMaintenanceWindowOperationRequest wrapper for the RetryFailedMaintenanceWindowOperation operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/RetryFailedMaintenanceWindowOperation.go.html to see an example of how to use RetryFailedMaintenanceWindowOperationRequest. +type RetryFailedMaintenanceWindowOperationRequest struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + MaintenanceWindowId *string `mandatory:"true" contributesTo:"path" name:"maintenanceWindowId"` + + // For optimistic concurrency control. In the PUT or DELETE call + // for a resource, set the `if-match` parameter to the value of the + // etag from a previous GET or POST response for that resource. + // The resource will be updated or deleted only if the etag you + // provide matches the resource's current etag value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"if-match"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request RetryFailedMaintenanceWindowOperationRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request RetryFailedMaintenanceWindowOperationRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request RetryFailedMaintenanceWindowOperationRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request RetryFailedMaintenanceWindowOperationRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request RetryFailedMaintenanceWindowOperationRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// RetryFailedMaintenanceWindowOperationResponse wrapper for the RetryFailedMaintenanceWindowOperation operation +type RetryFailedMaintenanceWindowOperationResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the asynchronous request. You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` +} + +func (response RetryFailedMaintenanceWindowOperationResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response RetryFailedMaintenanceWindowOperationResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stackmonitoring_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stackmonitoring_client.go index f86424bdfb1..e47e66df482 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stackmonitoring_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stackmonitoring_client.go @@ -670,6 +670,70 @@ func (client StackMonitoringClient) createDiscoveryJob(ctx context.Context, requ return response, err } +// CreateMaintenanceWindow Creates a new Maintenance Window for the given resources. It will create also the +// Alarms Suppression for each alarm that the resource migth trigger. +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/CreateMaintenanceWindow.go.html to see an example of how to use CreateMaintenanceWindow API. +// A default retry strategy applies to this operation CreateMaintenanceWindow() +func (client StackMonitoringClient) CreateMaintenanceWindow(ctx context.Context, request CreateMaintenanceWindowRequest) (response CreateMaintenanceWindowResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + + if !(request.OpcRetryToken != nil && *request.OpcRetryToken != "") { + request.OpcRetryToken = common.String(common.RetryToken()) + } + + ociResponse, err = common.Retry(ctx, request, client.createMaintenanceWindow, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = CreateMaintenanceWindowResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = CreateMaintenanceWindowResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(CreateMaintenanceWindowResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into CreateMaintenanceWindowResponse") + } + return +} + +// createMaintenanceWindow implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) createMaintenanceWindow(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPost, "/maintenanceWindows", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response CreateMaintenanceWindowResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/CreateMaintenanceWindow" + err = common.PostProcessServiceError(err, "StackMonitoring", "CreateMaintenanceWindow", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // CreateMetricExtension Creates a new metric extension resource for a given compartment // // # See also @@ -1159,6 +1223,63 @@ func (client StackMonitoringClient) deleteDiscoveryJob(ctx context.Context, requ return response, err } +// DeleteMaintenanceWindow Deletes a maintenance window by identifier +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/DeleteMaintenanceWindow.go.html to see an example of how to use DeleteMaintenanceWindow API. +func (client StackMonitoringClient) DeleteMaintenanceWindow(ctx context.Context, request DeleteMaintenanceWindowRequest) (response DeleteMaintenanceWindowResponse, err error) { + var ociResponse common.OCIResponse + policy := common.NoRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.deleteMaintenanceWindow, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = DeleteMaintenanceWindowResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = DeleteMaintenanceWindowResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(DeleteMaintenanceWindowResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into DeleteMaintenanceWindowResponse") + } + return +} + +// deleteMaintenanceWindow implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) deleteMaintenanceWindow(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodDelete, "/maintenanceWindows/{maintenanceWindowId}", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response DeleteMaintenanceWindowResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/DeleteMaintenanceWindow" + err = common.PostProcessServiceError(err, "StackMonitoring", "DeleteMaintenanceWindow", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // DeleteMetricExtension Deletes a metric extension by identifier // // # See also @@ -1940,6 +2061,64 @@ func (client StackMonitoringClient) getDiscoveryJob(ctx context.Context, request return response, err } +// GetMaintenanceWindow Get maintenance window for the given identifier OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm). +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/GetMaintenanceWindow.go.html to see an example of how to use GetMaintenanceWindow API. +// A default retry strategy applies to this operation GetMaintenanceWindow() +func (client StackMonitoringClient) GetMaintenanceWindow(ctx context.Context, request GetMaintenanceWindowRequest) (response GetMaintenanceWindowResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.getMaintenanceWindow, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = GetMaintenanceWindowResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = GetMaintenanceWindowResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(GetMaintenanceWindowResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into GetMaintenanceWindowResponse") + } + return +} + +// getMaintenanceWindow implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) getMaintenanceWindow(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodGet, "/maintenanceWindows/{maintenanceWindowId}", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response GetMaintenanceWindowResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/GetMaintenanceWindow" + err = common.PostProcessServiceError(err, "StackMonitoring", "GetMaintenanceWindow", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // GetMetricExtension Gets a Metric Extension by identifier // // # See also @@ -2520,6 +2699,64 @@ func (client StackMonitoringClient) listDiscoveryJobs(ctx context.Context, reque return response, err } +// ListMaintenanceWindows Returns a list of maintenance windows. +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/ListMaintenanceWindows.go.html to see an example of how to use ListMaintenanceWindows API. +// A default retry strategy applies to this operation ListMaintenanceWindows() +func (client StackMonitoringClient) ListMaintenanceWindows(ctx context.Context, request ListMaintenanceWindowsRequest) (response ListMaintenanceWindowsResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.listMaintenanceWindows, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = ListMaintenanceWindowsResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = ListMaintenanceWindowsResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(ListMaintenanceWindowsResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into ListMaintenanceWindowsResponse") + } + return +} + +// listMaintenanceWindows implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) listMaintenanceWindows(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodGet, "/maintenanceWindows", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response ListMaintenanceWindowsResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/ListMaintenanceWindows" + err = common.PostProcessServiceError(err, "StackMonitoring", "ListMaintenanceWindows", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // ListMetricExtensions Returns a list of metric extensions // // # See also @@ -3176,6 +3413,63 @@ func (client StackMonitoringClient) requestMonitoredResourcesSummarizedCount(ctx return response, err } +// RetryFailedMaintenanceWindowOperation Retry the last failed operation. The operation failed will be the most recent one. It won't apply for previous failed operations. +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/RetryFailedMaintenanceWindowOperation.go.html to see an example of how to use RetryFailedMaintenanceWindowOperation API. +func (client StackMonitoringClient) RetryFailedMaintenanceWindowOperation(ctx context.Context, request RetryFailedMaintenanceWindowOperationRequest) (response RetryFailedMaintenanceWindowOperationResponse, err error) { + var ociResponse common.OCIResponse + policy := common.NoRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.retryFailedMaintenanceWindowOperation, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = RetryFailedMaintenanceWindowOperationResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = RetryFailedMaintenanceWindowOperationResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(RetryFailedMaintenanceWindowOperationResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into RetryFailedMaintenanceWindowOperationResponse") + } + return +} + +// retryFailedMaintenanceWindowOperation implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) retryFailedMaintenanceWindowOperation(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPost, "/maintenanceWindows/{maintenanceWindowId}/actions/retryFailedOperation", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response RetryFailedMaintenanceWindowOperationResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/RetryFailedMaintenanceWindowOperation" + err = common.PostProcessServiceError(err, "StackMonitoring", "RetryFailedMaintenanceWindowOperation", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // SearchAssociatedResources List all associated resources recursively up-to a specified level, // for the monitored resources of type specified. // @@ -3429,6 +3723,63 @@ func (client StackMonitoringClient) searchMonitoredResources(ctx context.Context return response, err } +// StopMaintenanceWindow Stop a maintenance window before the end time is reached. +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/StopMaintenanceWindow.go.html to see an example of how to use StopMaintenanceWindow API. +func (client StackMonitoringClient) StopMaintenanceWindow(ctx context.Context, request StopMaintenanceWindowRequest) (response StopMaintenanceWindowResponse, err error) { + var ociResponse common.OCIResponse + policy := common.NoRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.stopMaintenanceWindow, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = StopMaintenanceWindowResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = StopMaintenanceWindowResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(StopMaintenanceWindowResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into StopMaintenanceWindowResponse") + } + return +} + +// stopMaintenanceWindow implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) stopMaintenanceWindow(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPost, "/maintenanceWindows/{maintenanceWindowId}/actions/stop", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response StopMaintenanceWindowResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/StopMaintenanceWindow" + err = common.PostProcessServiceError(err, "StackMonitoring", "StopMaintenanceWindow", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // TestMetricExtension Performs test of Metric Extension on a specific resource Id // // # See also @@ -3673,6 +4024,63 @@ func (client StackMonitoringClient) updateConfig(ctx context.Context, request co return response, err } +// UpdateMaintenanceWindow Update maintenance window by the given identifier OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm). +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/UpdateMaintenanceWindow.go.html to see an example of how to use UpdateMaintenanceWindow API. +func (client StackMonitoringClient) UpdateMaintenanceWindow(ctx context.Context, request UpdateMaintenanceWindowRequest) (response UpdateMaintenanceWindowResponse, err error) { + var ociResponse common.OCIResponse + policy := common.NoRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.updateMaintenanceWindow, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = UpdateMaintenanceWindowResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = UpdateMaintenanceWindowResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(UpdateMaintenanceWindowResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into UpdateMaintenanceWindowResponse") + } + return +} + +// updateMaintenanceWindow implements the OCIOperation interface (enables retrying operations) +func (client StackMonitoringClient) updateMaintenanceWindow(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPut, "/maintenanceWindows/{maintenanceWindowId}", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response UpdateMaintenanceWindowResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/stack-monitoring/20210330/MaintenanceWindow/UpdateMaintenanceWindow" + err = common.PostProcessServiceError(err, "StackMonitoring", "UpdateMaintenanceWindow", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // UpdateMetricExtension Updates the Metric Extension // // # See also diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stop_maintenance_window_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stop_maintenance_window_request_response.go new file mode 100644 index 00000000000..5479554a886 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/stop_maintenance_window_request_response.go @@ -0,0 +1,98 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// StopMaintenanceWindowRequest wrapper for the StopMaintenanceWindow operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/StopMaintenanceWindow.go.html to see an example of how to use StopMaintenanceWindowRequest. +type StopMaintenanceWindowRequest struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + MaintenanceWindowId *string `mandatory:"true" contributesTo:"path" name:"maintenanceWindowId"` + + // For optimistic concurrency control. In the PUT or DELETE call + // for a resource, set the `if-match` parameter to the value of the + // etag from a previous GET or POST response for that resource. + // The resource will be updated or deleted only if the etag you + // provide matches the resource's current etag value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"if-match"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request StopMaintenanceWindowRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request StopMaintenanceWindowRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request StopMaintenanceWindowRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request StopMaintenanceWindowRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request StopMaintenanceWindowRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// StopMaintenanceWindowResponse wrapper for the StopMaintenanceWindow operation +type StopMaintenanceWindowResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the asynchronous request. You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` +} + +func (response StopMaintenanceWindowResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response StopMaintenanceWindowResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_details.go new file mode 100644 index 00000000000..b6382abaa59 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_details.go @@ -0,0 +1,75 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Stack Monitoring API +// +// Stack Monitoring API. +// + +package stackmonitoring + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// UpdateMaintenanceWindowDetails Infomation to create a new Maintenance Window. +type UpdateMaintenanceWindowDetails struct { + + // Maintenance Window description. + Description *string `mandatory:"false" json:"description"` + + // List of resource Ids which are part of the Maintenance Window + Resources []CreateMaintenanceWindowResourceDetails `mandatory:"false" json:"resources"` + + Schedule MaintenanceWindowSchedule `mandatory:"false" json:"schedule"` +} + +func (m UpdateMaintenanceWindowDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m UpdateMaintenanceWindowDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// UnmarshalJSON unmarshals from json +func (m *UpdateMaintenanceWindowDetails) UnmarshalJSON(data []byte) (e error) { + model := struct { + Description *string `json:"description"` + Resources []CreateMaintenanceWindowResourceDetails `json:"resources"` + Schedule maintenancewindowschedule `json:"schedule"` + }{} + + e = json.Unmarshal(data, &model) + if e != nil { + return + } + var nn interface{} + m.Description = model.Description + + m.Resources = make([]CreateMaintenanceWindowResourceDetails, len(model.Resources)) + copy(m.Resources, model.Resources) + nn, e = model.Schedule.UnmarshalPolymorphicJSON(model.Schedule.JsonData) + if e != nil { + return + } + if nn != nil { + m.Schedule = nn.(MaintenanceWindowSchedule) + } else { + m.Schedule = nil + } + + return +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_request_response.go new file mode 100644 index 00000000000..d6acf80d7a8 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/stackmonitoring/update_maintenance_window_request_response.go @@ -0,0 +1,101 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package stackmonitoring + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// UpdateMaintenanceWindowRequest wrapper for the UpdateMaintenanceWindow operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/stackmonitoring/UpdateMaintenanceWindow.go.html to see an example of how to use UpdateMaintenanceWindowRequest. +type UpdateMaintenanceWindowRequest struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of maintenance window. + MaintenanceWindowId *string `mandatory:"true" contributesTo:"path" name:"maintenanceWindowId"` + + // The information to be updated. + UpdateMaintenanceWindowDetails `contributesTo:"body"` + + // For optimistic concurrency control. In the PUT or DELETE call + // for a resource, set the `if-match` parameter to the value of the + // etag from a previous GET or POST response for that resource. + // The resource will be updated or deleted only if the etag you + // provide matches the resource's current etag value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"if-match"` + + // Unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please provide the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request UpdateMaintenanceWindowRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request UpdateMaintenanceWindowRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request UpdateMaintenanceWindowRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request UpdateMaintenanceWindowRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request UpdateMaintenanceWindowRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// UpdateMaintenanceWindowResponse wrapper for the UpdateMaintenanceWindow operation +type UpdateMaintenanceWindowResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the asynchronous request. You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + + // Unique Oracle-assigned identifier for the request. If you need to contact + // Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` +} + +func (response UpdateMaintenanceWindowResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response UpdateMaintenanceWindowResponse) HTTPResponse() *http.Response { + return response.RawResponse +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_configuration_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_configuration_request_response.go index 142e718a1da..cdadfb1c1c2 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_configuration_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_configuration_request_response.go @@ -64,11 +64,6 @@ func (request CreateConfigurationRequest) BinaryRequestBody() (*common.OCIReadSe } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request CreateConfigurationRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request CreateConfigurationRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_zpr_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_zpr_policy_request_response.go index 33d07baff9b..81f4c54f8e0 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_zpr_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/create_zpr_policy_request_response.go @@ -64,11 +64,6 @@ func (request CreateZprPolicyRequest) BinaryRequestBody() (*common.OCIReadSeekCl } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request CreateZprPolicyRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request CreateZprPolicyRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/delete_zpr_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/delete_zpr_policy_request_response.go index ca69fc60f8e..20b2b97eea1 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/delete_zpr_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/delete_zpr_policy_request_response.go @@ -63,21 +63,6 @@ func (request DeleteZprPolicyRequest) BinaryRequestBody() (*common.OCIReadSeekCl } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request DeleteZprPolicyRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["zprPolicyId"] != nil { - templateParam := mandatoryParamMap["zprPolicyId"] - for _, template := range templateParam { - replacementParam := *request.ZprPolicyId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request DeleteZprPolicyRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_configuration_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_configuration_request_response.go index 71eb3619865..c401f1826ab 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_configuration_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_configuration_request_response.go @@ -53,11 +53,6 @@ func (request GetConfigurationRequest) BinaryRequestBody() (*common.OCIReadSeekC } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request GetConfigurationRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request GetConfigurationRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_configuration_work_request_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_configuration_work_request_request_response.go index 85e27919d05..93fabf2b46b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_configuration_work_request_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_configuration_work_request_request_response.go @@ -53,21 +53,6 @@ func (request GetZprConfigurationWorkRequestRequest) BinaryRequestBody() (*commo } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request GetZprConfigurationWorkRequestRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request GetZprConfigurationWorkRequestRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_request_response.go index f3264f260d8..0d56a619ffb 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_request_response.go @@ -53,21 +53,6 @@ func (request GetZprPolicyRequest) BinaryRequestBody() (*common.OCIReadSeekClose } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request GetZprPolicyRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["zprPolicyId"] != nil { - templateParam := mandatoryParamMap["zprPolicyId"] - for _, template := range templateParam { - replacementParam := *request.ZprPolicyId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request GetZprPolicyRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_work_request_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_work_request_request_response.go index 1ada1e0eae9..0f258ad6772 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_work_request_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/get_zpr_policy_work_request_request_response.go @@ -53,21 +53,6 @@ func (request GetZprPolicyWorkRequestRequest) BinaryRequestBody() (*common.OCIRe } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request GetZprPolicyWorkRequestRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request GetZprPolicyWorkRequestRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_errors_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_errors_request_response.go index dff2aad12be..79859898762 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_errors_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_errors_request_response.go @@ -69,21 +69,6 @@ func (request ListZprConfigurationWorkRequestErrorsRequest) BinaryRequestBody() } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprConfigurationWorkRequestErrorsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprConfigurationWorkRequestErrorsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_logs_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_logs_request_response.go index 6ae16e6fae6..22e87827d63 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_logs_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_request_logs_request_response.go @@ -69,21 +69,6 @@ func (request ListZprConfigurationWorkRequestLogsRequest) BinaryRequestBody() (* } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprConfigurationWorkRequestLogsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprConfigurationWorkRequestLogsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_requests_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_requests_request_response.go index 9b5ea785605..688b53a6377 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_requests_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_configuration_work_requests_request_response.go @@ -78,11 +78,6 @@ func (request ListZprConfigurationWorkRequestsRequest) BinaryRequestBody() (*com } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprConfigurationWorkRequestsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprConfigurationWorkRequestsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policies_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policies_request_response.go index e9467d7c6bb..253923e65a9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policies_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policies_request_response.go @@ -80,11 +80,6 @@ func (request ListZprPoliciesRequest) BinaryRequestBody() (*common.OCIReadSeekCl } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprPoliciesRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprPoliciesRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_errors_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_errors_request_response.go index 0cbb1ce3129..156c446eeff 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_errors_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_errors_request_response.go @@ -69,21 +69,6 @@ func (request ListZprPolicyWorkRequestErrorsRequest) BinaryRequestBody() (*commo } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprPolicyWorkRequestErrorsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprPolicyWorkRequestErrorsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_logs_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_logs_request_response.go index da089d92620..f93a62ebeac 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_logs_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_request_logs_request_response.go @@ -69,21 +69,6 @@ func (request ListZprPolicyWorkRequestLogsRequest) BinaryRequestBody() (*common. } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprPolicyWorkRequestLogsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["workRequestId"] != nil { - templateParam := mandatoryParamMap["workRequestId"] - for _, template := range templateParam { - replacementParam := *request.WorkRequestId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprPolicyWorkRequestLogsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_requests_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_requests_request_response.go index 62fd61daf69..254ab04cf6e 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_requests_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/list_zpr_policy_work_requests_request_response.go @@ -78,11 +78,6 @@ func (request ListZprPolicyWorkRequestsRequest) BinaryRequestBody() (*common.OCI } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request ListZprPolicyWorkRequestsRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request ListZprPolicyWorkRequestsRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/update_zpr_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/update_zpr_policy_request_response.go index 7b07003bec7..67681c7d3c6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/update_zpr_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/update_zpr_policy_request_response.go @@ -73,21 +73,6 @@ func (request UpdateZprPolicyRequest) BinaryRequestBody() (*common.OCIReadSeekCl } -// ReplaceMandatoryParamInPath replaces the mandatory parameter in the path with the value provided. -// Not all services are supporting this feature and this method will be a no-op for those services. -func (request UpdateZprPolicyRequest) ReplaceMandatoryParamInPath(client *common.BaseClient, mandatoryParamMap map[string][]common.TemplateParamForPerRealmEndpoint) { - if mandatoryParamMap["zprPolicyId"] != nil { - templateParam := mandatoryParamMap["zprPolicyId"] - for _, template := range templateParam { - replacementParam := *request.ZprPolicyId - if template.EndsWithDot { - replacementParam = replacementParam + "." - } - client.Host = strings.Replace(client.Host, template.Template, replacementParam, -1) - } - } -} - // RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. func (request UpdateZprPolicyRequest) RetryPolicy() *common.RetryPolicy { return request.RequestMetadata.RetryPolicy diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go index 5ab74a19d56..a55a979c383 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go @@ -67,7 +67,7 @@ func newZprClientFromBaseClient(baseClient common.BaseClient, configProvider com // SetRegion overrides the region of this client. func (client *ZprClient) SetRegion(region string) { - client.Host, _ = common.StringToRegion(region).EndpointForTemplateDottedRegion("zpr", "https://{service}.{region}.oci.{secondLevelDomain}", "${endpoint-template-prefix}") + client.Host = common.StringToRegion(region).EndpointForTemplate("zpr", "https://zpr.{region}.oci.{secondLevelDomain}") } // SetConfigurationProvider sets the configuration provider including the region, returns an error if is not valid From ecd4f5a7eb7c0190b6125863c2cb9e7bca24ee59 Mon Sep 17 00:00:00 2001 From: Rakshith Siddanahalli Murukannappa Date: Mon, 7 Oct 2024 23:01:37 -0700 Subject: [PATCH 11/31] Finalize changelog and release for version v6.13.0 --- CHANGELOG.md | 12 ++++++++++++ internal/globalvar/version.go | 4 ++-- website/oci.erb | 24 ++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f82f74856d..6736d5da506 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## 6.13.0 (Unreleased) + +### Added +- Desktop as a Service: Shape Flexibility +- Support for Operations Insights : Autonomous Database IAM based connections +- Support for Customer Facing Scalable agent upgrade | ExaCC and ExaCS +- 9/24- Support for ZPR v1 +- Support for PV Support for Launch w/Multiple Attachments Support for VMs +- Support for Stack Monitoring Maintenance Windows +- To Support for Depracate old apps admin user creation with password +- Support for Desktop as a Service: Private Access + ## 6.12.0 (October 02, 2024) ### Added diff --git a/internal/globalvar/version.go b/internal/globalvar/version.go index e3b798c919b..76b8c73d713 100644 --- a/internal/globalvar/version.go +++ b/internal/globalvar/version.go @@ -7,9 +7,9 @@ import ( "log" ) -const Version = "6.12.0" +const Version = "6.13.0" -const ReleaseDate = "2024-10-05" +const ReleaseDate = "2024-10-12" func PrintVersion() { log.Printf("[INFO] terraform-provider-oci %s\n", Version) diff --git a/website/oci.erb b/website/oci.erb index 3a770a98d70..161b339f547 100644 --- a/website/oci.erb +++ b/website/oci.erb @@ -3175,6 +3175,12 @@
  • oci_database_autonomous_database_regional_wallet_management
  • +
  • + oci_database_autonomous_database_software_image +
  • +
  • + oci_database_autonomous_database_software_images +
  • oci_database_autonomous_database_wallet
  • @@ -3525,6 +3531,9 @@
  • oci_database_autonomous_database_saas_admin_user
  • +
  • + oci_database_autonomous_database_software_image +
  • oci_database_autonomous_database_wallet
  • @@ -8821,6 +8830,12 @@
  • oci_stack_monitoring_discovery_jobs
  • +
  • + oci_stack_monitoring_maintenance_window +
  • +
  • + oci_stack_monitoring_maintenance_windows +
  • oci_stack_monitoring_metric_extension
  • @@ -8865,6 +8880,15 @@
  • oci_stack_monitoring_discovery_job
  • +
  • + oci_stack_monitoring_maintenance_window +
  • +
  • + oci_stack_monitoring_maintenance_windows_retry_failed_operation +
  • +
  • + oci_stack_monitoring_maintenance_windows_stop +
  • oci_stack_monitoring_metric_extension
  • From ae0c589d921f9eb96df850e7325f57c10f11deb3 Mon Sep 17 00:00:00 2001 From: Anushree Jana Date: Sun, 25 Feb 2024 23:48:50 -0800 Subject: [PATCH 12/31] Added - LBCP ppv2 support --- examples/load_balancer/lb_full/lb_full.tf | 8 ++-- .../load_balancer_listener_tcp_test.go | 4 ++ .../load_balancer_listener_resource.go | 43 +++++++++++++++++++ ...load_balancer_load_balancers.html.markdown | 4 +- .../r/load_balancer_listener.html.markdown | 2 + 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/examples/load_balancer/lb_full/lb_full.tf b/examples/load_balancer/lb_full/lb_full.tf index d73b6ef60ed..3b800718e94 100644 --- a/examples/load_balancer/lb_full/lb_full.tf +++ b/examples/load_balancer/lb_full/lb_full.tf @@ -65,7 +65,6 @@ variable "availability_domain" { } provider "oci" { - // version = "6.9.0" // published on August 27, 2024. tenancy_ocid = var.tenancy_ocid user_ocid = var.user_ocid fingerprint = var.fingerprint @@ -74,12 +73,12 @@ provider "oci" { } data "oci_identity_availability_domain" "ad1" { - compartment_id = var.compartment_ocid // needs to be compartment_ocid if not using root compartment + compartment_id = var.tenancy_ocid // needs to be compartment_ocid if not using root compartment ad_number = 1 } data "oci_identity_availability_domain" "ad2" { - compartment_id = var.compartment_ocid // needs to be compartment_ocid if not using root compartment + compartment_id = var.tenancy_ocid // needs to be compartment_ocid if not using root compartment ad_number = 2 } @@ -476,7 +475,8 @@ resource "oci_load_balancer_listener" "lb-listener3" { connection_configuration { idle_timeout_in_seconds = "2" - backend_tcp_proxy_protocol_version = "1" + backend_tcp_proxy_protocol_version = "2" + backend_tcp_proxy_protocol_options = ["PP2_TYPE_AUTHORITY"] } } diff --git a/internal/integrationtest/load_balancer_listener_tcp_test.go b/internal/integrationtest/load_balancer_listener_tcp_test.go index 48826dd6859..721709b64a3 100644 --- a/internal/integrationtest/load_balancer_listener_tcp_test.go +++ b/internal/integrationtest/load_balancer_listener_tcp_test.go @@ -30,6 +30,7 @@ var ( listenerTcpConnectionConfigurationRepresentation = map[string]interface{}{ "idle_timeout_in_seconds": acctest.Representation{RepType: acctest.Required, Create: `10`, Update: `11`}, "backend_tcp_proxy_protocol_version": acctest.Representation{RepType: acctest.Optional, Create: `1`, Update: `2`}, + "backend_tcp_proxy_protocol_options": acctest.Representation{RepType: acctest.Optional, Update: []string{`PP2_TYPE_AUTHORITY`}}, } ) @@ -60,6 +61,7 @@ func TestLoadBalancerListenerTcpResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "connection_configuration.#", "1"), resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.backend_tcp_proxy_protocol_version", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.backend_tcp_proxy_protocol_options.#", "0"), resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.idle_timeout_in_seconds", "10"), resource.TestCheckResourceAttrSet(resourceName, "load_balancer_id"), resource.TestCheckResourceAttr(resourceName, "name", "mylistener"), @@ -76,6 +78,8 @@ func TestLoadBalancerListenerTcpResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttr(resourceName, "connection_configuration.#", "1"), resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.backend_tcp_proxy_protocol_version", "2"), + resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.backend_tcp_proxy_protocol_options.#", "1"), + resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.backend_tcp_proxy_protocol_options.0", "PP2_TYPE_AUTHORITY"), resource.TestCheckResourceAttr(resourceName, "connection_configuration.0.idle_timeout_in_seconds", "11"), resource.TestCheckResourceAttrSet(resourceName, "load_balancer_id"), resource.TestCheckResourceAttr(resourceName, "name", "mylistener"), diff --git a/internal/service/load_balancer/load_balancer_listener_resource.go b/internal/service/load_balancer/load_balancer_listener_resource.go index 53fb31f3f3c..399c50ac60c 100644 --- a/internal/service/load_balancer/load_balancer_listener_resource.go +++ b/internal/service/load_balancer/load_balancer_listener_resource.go @@ -72,6 +72,16 @@ func LoadBalancerListenerResource() *schema.Resource { DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, }, + // Optional + "backend_tcp_proxy_protocol_options": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + // Optional "backend_tcp_proxy_protocol_version": { Type: schema.TypeInt, @@ -643,9 +653,38 @@ func parseListenerCompositeId(compositeId string) (listenerName string, loadBala return } +func toString(s []oci_load_balancer.ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum) []string { + c := make([]string, len(s)) + for i, v := range s { + c[i] = string(v) + } + return c +} + +func toBackendTcpProxyProtocolOptionsEnum(s []string) []oci_load_balancer.ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum { + c := make([]oci_load_balancer.ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum, len(s)) + for i, v := range s { + c[i] = oci_load_balancer.ConnectionConfigurationBackendTcpProxyProtocolOptionsEnum(v) + } + return c +} + func (s *LoadBalancerListenerResourceCrud) mapToConnectionConfiguration(fieldKeyFormat string) (oci_load_balancer.ConnectionConfiguration, error) { result := oci_load_balancer.ConnectionConfiguration{} + if backendTcpProxyProtocolOptions, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "backend_tcp_proxy_protocol_options")); ok { + interfaces := backendTcpProxyProtocolOptions.([]interface{}) + tmp := make([]string, len(interfaces)) + for i := range interfaces { + if interfaces[i] != nil { + tmp[i] = interfaces[i].(string) + } + } + if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "backend_tcp_proxy_protocol_options")) { + result.BackendTcpProxyProtocolOptions = toBackendTcpProxyProtocolOptionsEnum(tmp) + } + } + if backendTcpProxyProtocolVersion, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "backend_tcp_proxy_protocol_version")); ok { tmp := backendTcpProxyProtocolVersion.(int) // Terraform v11 will auto assign nil value to 0 which is invalid value @@ -670,6 +709,10 @@ func (s *LoadBalancerListenerResourceCrud) mapToConnectionConfiguration(fieldKey func ConnectionConfigurationToMap(obj *oci_load_balancer.ConnectionConfiguration) map[string]interface{} { result := map[string]interface{}{} + if obj.BackendTcpProxyProtocolOptions != nil { + result["backend_tcp_proxy_protocol_options"] = toString(obj.BackendTcpProxyProtocolOptions) + } + if obj.BackendTcpProxyProtocolVersion != nil { result["backend_tcp_proxy_protocol_version"] = int(*obj.BackendTcpProxyProtocolVersion) } diff --git a/website/docs/d/load_balancer_load_balancers.html.markdown b/website/docs/d/load_balancer_load_balancers.html.markdown index fcc0e0327c4..2d48fd7a80a 100644 --- a/website/docs/d/load_balancer_load_balancers.html.markdown +++ b/website/docs/d/load_balancer_load_balancers.html.markdown @@ -127,8 +127,8 @@ The following attributes are exported: The values must be between minimumBandwidthInMbps and 8000 (8Gbps). - Example: `1500` - * `minimum_bandwidth_in_mbps` - Bandwidth in Mbps that determines the total pre-provisioned bandwidth (ingress plus egress). The values must be between 10 and the maximumBandwidthInMbps. Example: `150` + Example: `1500` + * `minimum_bandwidth_in_mbps` - Bandwidth in Mbps that determines the total pre-provisioned bandwidth (ingress plus egress). The values must be between 0 and the maximumBandwidthInMbps in multiples of 10. The current allowed maximum value is defined in [Service Limits](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/servicelimits.htm). Example: `150` * `ssl_cipher_suites` - The configuration details of an SSL cipher suite. The algorithms that compose a cipher suite help you secure Transport Layer Security (TLS) or Secure Socket Layer (SSL) network connections. A cipher suite defines the list of security algorithms your load balancer uses to negotiate with peers while sending and receiving information. The cipher suites you use affect the security level, performance, and compatibility of your data traffic. diff --git a/website/docs/r/load_balancer_listener.html.markdown b/website/docs/r/load_balancer_listener.html.markdown index 8d69efd82dd..51aa3e81f24 100644 --- a/website/docs/r/load_balancer_listener.html.markdown +++ b/website/docs/r/load_balancer_listener.html.markdown @@ -29,6 +29,7 @@ resource "oci_load_balancer_listener" "test_listener" { idle_timeout_in_seconds = var.listener_connection_configuration_idle_timeout_in_seconds #Optional + backend_tcp_proxy_protocol_options = var.listener_connection_configuration_backend_tcp_proxy_protocol_options backend_tcp_proxy_protocol_version = var.listener_connection_configuration_backend_tcp_proxy_protocol_version } hostname_names = [oci_load_balancer_hostname.test_hostname.name] @@ -55,6 +56,7 @@ resource "oci_load_balancer_listener" "test_listener" { The following arguments are supported: * `connection_configuration` - (Optional) (Updatable) Configuration details for the connection between the client and backend servers. + * `backend_tcp_proxy_protocol_options` - (Optional) (Updatable) An array that represents the PPV2 Options that can be enabled on TCP Listeners. Example: ["PP2_TYPE_AUTHORITY"] * `backend_tcp_proxy_protocol_version` - (Required when `protocol` = `TCP`) (Updatable) The backend TCP Proxy Protocol version. Example: `1` * `idle_timeout_in_seconds` - (Required) (Updatable) The maximum idle time, in seconds, allowed between two successive receive or two successive send operations between the client and backend servers. A send operation does not reset the timer for receive operations. A receive operation does not reset the timer for send operations. From cd3b81772df65228a0b37751bc70f2f577f68fbb Mon Sep 17 00:00:00 2001 From: Rakshith Siddanahalli Date: Tue, 8 Oct 2024 09:47:42 -0700 Subject: [PATCH 13/31] Finalize changelog and release for version v6.13.0 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6736d5da506..0ebcd8e38e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Support for Stack Monitoring Maintenance Windows - To Support for Depracate old apps admin user creation with password - Support for Desktop as a Service: Private Access +- Support for Proxy Protocol on OCI LBaaS ## 6.12.0 (October 02, 2024) From c6d3e9bf26b25cecc51de9f7986b23132fef329e Mon Sep 17 00:00:00 2001 From: Marcel Casado Date: Fri, 27 Sep 2024 02:21:42 -0600 Subject: [PATCH 14/31] Added - Support for Desktop as a Service: Desktop Session Lifecycle Management --- ...fecycle-management-phx.auto.tfvars.example | 26 ++ .../session_lifecycle_management/main.tf | 122 +++++++++ .../session_lifecycle_management/outputs.tf | 21 ++ .../session_lifecycle_management/provider.tf | 15 + .../session_lifecycle_management/variables.tf | 171 ++++++++++++ .../desktops_desktop_pool_test.go | 259 ++++++++++++++++-- .../desktops_desktop_pool_data_source.go | 6 + .../desktops_desktop_pool_resource.go | 205 +++++++++++++- .../d/desktops_desktop_pool.html.markdown | 86 +++--- .../d/desktops_desktop_pools.html.markdown | 16 +- .../r/desktops_desktop_pool.html.markdown | 61 +++-- 11 files changed, 889 insertions(+), 99 deletions(-) create mode 100644 examples/desktops/desktop_pool/session_lifecycle_management/desktops-session-lifecycle-management-phx.auto.tfvars.example create mode 100644 examples/desktops/desktop_pool/session_lifecycle_management/main.tf create mode 100644 examples/desktops/desktop_pool/session_lifecycle_management/outputs.tf create mode 100644 examples/desktops/desktop_pool/session_lifecycle_management/provider.tf create mode 100644 examples/desktops/desktop_pool/session_lifecycle_management/variables.tf diff --git a/examples/desktops/desktop_pool/session_lifecycle_management/desktops-session-lifecycle-management-phx.auto.tfvars.example b/examples/desktops/desktop_pool/session_lifecycle_management/desktops-session-lifecycle-management-phx.auto.tfvars.example new file mode 100644 index 00000000000..66dacf3388d --- /dev/null +++ b/examples/desktops/desktop_pool/session_lifecycle_management/desktops-session-lifecycle-management-phx.auto.tfvars.example @@ -0,0 +1,26 @@ +# OCI config profile +config_file_profile="terraform-federation-test" + +# region (us-phoenix-1, ca-toronto-1, etc) +region="us-phoenix-1" + +# Secure Desktops with Shape Flexibility Example Configuration + +compartment_id = "" + +desktop_pool_vcn_id = "" +desktop_pool_subnet_id = "" +desktop_pool_image_id = "" +desktop_pool_image_name = "" +desktop_pool_backup_policy_id = "" +desktop_pool_contact_details = "test%40example.com" +desktop_pool_shape_config_baseline_ocpu_utilization = "BASELINE_1_2" +desktop_pool_shape_config_memory_in_gbs = 4 +desktop_pool_shape_config_ocpus = 2 +desktop_pool_use_dedicated_vm_host = "FALSE" + +desktop_pool_session_lifecycle_actions_disconnect_action = "STOP" +desktop_pool_session_lifecycle_actions_disconnect_grace_period_in_minutes = 60 + +desktop_pool_session_lifecycle_actions_inactivity_action = "DISCONNECT" +desktop_pool_session_lifecycle_actions_inactivity_grace_period_in_minutes = 60 \ No newline at end of file diff --git a/examples/desktops/desktop_pool/session_lifecycle_management/main.tf b/examples/desktops/desktop_pool/session_lifecycle_management/main.tf new file mode 100644 index 00000000000..f2b00308a6e --- /dev/null +++ b/examples/desktops/desktop_pool/session_lifecycle_management/main.tf @@ -0,0 +1,122 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + + +resource "oci_desktops_desktop_pool" "test_desktop_pool" { + #Required + compartment_id = var.compartment_id + display_name = var.desktop_pool_display_name + contact_details = var.desktop_pool_contact_details + + are_privileged_users = var.desktop_pool_are_privileged_users + availability_domain = data.oci_identity_availability_domain.ad.name + + network_configuration { + #Required + subnet_id = var.desktop_pool_subnet_id + vcn_id = var.desktop_pool_vcn_id + } + + device_policy { + #Required + audio_mode = var.desktop_pool_device_policy_audio_mode + cdm_mode = var.desktop_pool_device_policy_cdm_mode + clipboard_mode = var.desktop_pool_device_policy_clipboard_mode + is_display_enabled = var.desktop_pool_device_policy_is_display_enabled + is_keyboard_enabled = var.desktop_pool_device_policy_is_keyboard_enabled + is_pointer_enabled = var.desktop_pool_device_policy_is_pointer_enabled + is_printing_enabled = var.desktop_pool_device_policy_is_printing_enabled + } + + image { + #Required + image_id = var.desktop_pool_image_id + image_name = var.desktop_pool_image_name + } + + # Important: Availability policy can not be set when DISCONNECT Session Lifecycle Action is being set but + # "availability_policy" element without start nor stop schedules needs to be present + availability_policy { + } + + is_storage_enabled = var.desktop_pool_is_storage_enabled + storage_backup_policy_id = var.desktop_pool_backup_policy_id + storage_size_in_gbs = var.desktop_pool_storage_size_in_gbs + + shape_name = var.desktop_pool_shape_name + standby_size = var.desktop_pool_standby_size + maximum_size = var.desktop_pool_maximum_size + + #Optional + # defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.desktop_pool_defined_tags_value) + # description = var.desktop_pool_description + # freeform_tags = var.desktop_pool_freeform_tags + # nsg_ids = var.desktop_pool_nsg_ids + # time_start_scheduled = var.desktop_pool_time_start_scheduled + # time_stop_scheduled = var.desktop_pool_time_stop_scheduled + session_lifecycle_actions { + + #Optional : + # Important: Disconnect lifecycle can only be set when "availability_policy" schedules are not been set + disconnect { + #Required + action = var.desktop_pool_session_lifecycle_actions_disconnect_action + #Optional + grace_period_in_minutes = var.desktop_pool_session_lifecycle_actions_disconnect_grace_period_in_minutes + } + inactivity { + #Required + action = var.desktop_pool_session_lifecycle_actions_inactivity_action + #Optional + grace_period_in_minutes = var.desktop_pool_session_lifecycle_actions_inactivity_grace_period_in_minutes + } + } + +} + +data "oci_desktops_desktop_pools" "test_desktop_pools_datasource" { + #Required + compartment_id = var.compartment_id + + #Optional + # availability_domain = data.oci_identity_availability_domain.ad.name + # display_name = var.desktop_pool_display_name + id = oci_desktops_desktop_pool.test_desktop_pool.id + # state = var.desktop_pool_state +} + +data "oci_desktops_desktop_pool" "test_desktop_pool_datasource" { + #Required + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_desktops" "test_desktop_pool_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id +} + +data "oci_desktops_desktop_pool_volumes" "test_desktop_pool_volumes_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + #Optional + # display_name = var.desktop_pool_display_name + # state = var.desktop_pool_state +} + +data "oci_identity_availability_domain" "ad" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +data "oci_desktops_desktops" "test_desktops_datasource" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_id + desktop_pool_id = oci_desktops_desktop_pool.test_desktop_pool.id + state = "ACTIVE" +} + +data "oci_desktops_desktop" "test_desktop_datasource" { + desktop_id = data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.0.desktop_id +} diff --git a/examples/desktops/desktop_pool/session_lifecycle_management/outputs.tf b/examples/desktops/desktop_pool/session_lifecycle_management/outputs.tf new file mode 100644 index 00000000000..31ee709a166 --- /dev/null +++ b/examples/desktops/desktop_pool/session_lifecycle_management/outputs.tf @@ -0,0 +1,21 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +output "desktop_pool_id" { + value = [data.oci_desktops_desktop_pools.test_desktop_pools_datasource.desktop_pool_collection.0.items.*.id] +} + +# Output the desktop IDs of the desktop pool +output "desktop_pool_desktop_ids" { + value = [data.oci_desktops_desktop_pool_desktops.test_desktop_pool_desktops_datasource.desktop_pool_desktop_collection.0.items.*.desktop_id] +} + +# Output the volume IDs of the desktop pool +output "desktop_pool_volume_ids" { + value = [data.oci_desktops_desktop_pool_volumes.test_desktop_pool_volumes_datasource.desktop_pool_volume_collection.0.items.*.id] +} + +# Output the desktop IDs of the desktop pool +output "desktop_ids" { + value = [data.oci_desktops_desktops.test_desktops_datasource.desktop_collection.0.items.*.id] +} \ No newline at end of file diff --git a/examples/desktops/desktop_pool/session_lifecycle_management/provider.tf b/examples/desktops/desktop_pool/session_lifecycle_management/provider.tf new file mode 100644 index 00000000000..ed3dfb3e510 --- /dev/null +++ b/examples/desktops/desktop_pool/session_lifecycle_management/provider.tf @@ -0,0 +1,15 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "config_file_profile" { +} + +provider "oci" { + auth = "SecurityToken" + config_file_profile = var.config_file_profile + region = var.region +} + +provider "local" { + version = ">=1.3.0" # Need this version of the local provider to support base64 encoded inputs +} diff --git a/examples/desktops/desktop_pool/session_lifecycle_management/variables.tf b/examples/desktops/desktop_pool/session_lifecycle_management/variables.tf new file mode 100644 index 00000000000..6e4937bcb5a --- /dev/null +++ b/examples/desktops/desktop_pool/session_lifecycle_management/variables.tf @@ -0,0 +1,171 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} +variable "compartment_id" {} + +variable "desktop_pool_are_privileged_users" { + description = "" + default = false +} + +variable "desktop_pool_description" { + description = "" + default = "Pool Description" +} + +variable "desktop_pool_contact_details" { + description = "" + default = "" +} + +variable "desktop_pool_device_policy_audio_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_cdm_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_clipboard_mode" { + description = "" + default = "NONE" +} + +variable "desktop_pool_device_policy_is_display_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_keyboard_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_pointer_enabled" { + description = "" + default = false +} + +variable "desktop_pool_device_policy_is_printing_enabled" { + description = "" + default = false +} + +variable "desktop_pool_display_name" { + description = "" + default = "testPool1" +} + +variable "desktop_pool_freeform_tags" { + description = "" + type = map(string) + + default = { + Test = "Test" + } +} + +variable "desktop_pool_standby_size" { + description = "" + default = 2 +} + +variable "desktop_pool_maximum_size" { + description = "" + default = 10 +} + +variable "desktop_pool_nsg_ids" { + description = "" + type = set(string) + default = null +} + +variable "desktop_pool_is_storage_enabled" { + description = "" + default = true +} + +variable "desktop_pool_backup_policy_id" { + description = "" + default = "" +} + +variable "desktop_pool_storage_size_in_gbs" { + description = "" + default = 50 +} + +variable "desktop_pool_vcn_id" { + description = "" +} + +variable "desktop_pool_subnet_id" { + description = "" +} + +variable "desktop_pool_shape_name" { + description = "" + default = "Flex Low" +} + +variable "desktop_pool_image_id" { + description = "" +} + +variable "desktop_pool_image_name" { + description = "" +} + +variable "desktop_pool_start_schedule_cron_expr" { + description = "" + default = "0 10 8 ? * 1" +} + +variable "desktop_pool_start_schedule_timezone" { + description = "" + default = "MST" +} + +variable "desktop_pool_stop_schedule_cron_expr" { + description = "" + default = "0 20 18 ? * 5" +} + +variable "desktop_pool_stop_schedule_timezone" { + description = "" + default = "MST" +} + +variable "desktop_pool_session_lifecycle_actions_disconnect_action" { + description = "" + default = "NONE" +} + +variable "desktop_pool_session_lifecycle_actions_inactivity_action" { + description = "" + default = "NONE" +} + +variable "desktop_pool_session_lifecycle_actions_disconnect_grace_period_in_minutes" { + description = "" + default = 60 +} + +variable "desktop_pool_session_lifecycle_actions_inactivity_grace_period_in_minutes" { + description = "" + default = 60 +} + + +variable "desktop_pool_state" { + description = "" + default = "ACTIVE" +} diff --git a/internal/integrationtest/desktops_desktop_pool_test.go b/internal/integrationtest/desktops_desktop_pool_test.go index 83fe445db92..fedb5e4c9e2 100644 --- a/internal/integrationtest/desktops_desktop_pool_test.go +++ b/internal/integrationtest/desktops_desktop_pool_test.go @@ -48,32 +48,60 @@ var ( } DesktopsDesktopPoolRepresentation = map[string]interface{}{ - "are_privileged_users": acctest.Representation{RepType: acctest.Required, Create: `false`}, - "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, - "availability_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyRepresentation}, - "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "contact_details": acctest.Representation{RepType: acctest.Required, Create: `contactDetails`, Update: `contactDetails2`}, - "device_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolDevicePolicyRepresentation}, - "display_name": acctest.Representation{RepType: acctest.Required, Create: `testPool1`, Update: `testPool2`}, - "image": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolImageRepresentation}, - "is_storage_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`}, - "maximum_size": acctest.Representation{RepType: acctest.Required, Create: `10`, Update: `11`}, - "network_configuration": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolNetworkConfigurationRepresentation}, - "shape_name": acctest.Representation{RepType: acctest.Required, Create: `${var.test_shape_name}`}, - "standby_size": acctest.Representation{RepType: acctest.Required, Create: `2`, Update: `3`}, - "storage_backup_policy_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_storage_backup_policy_id}`}, - "storage_size_in_gbs": acctest.Representation{RepType: acctest.Required, Create: `50`}, - "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, - "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, - "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}}, - "shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolShapeConfigRepresentation}, - "use_dedicated_vm_host": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_use_dedicated_vm_host}`}, - "private_access_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolPrivateAccessDetailsRepresentation}, + "are_privileged_users": acctest.Representation{RepType: acctest.Required, Create: `false`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, + "availability_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyRepresentation}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "contact_details": acctest.Representation{RepType: acctest.Required, Create: `contactDetails`, Update: `contactDetails2`}, + "device_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolDevicePolicyRepresentation}, + "display_name": acctest.Representation{RepType: acctest.Required, Create: `testPool1`, Update: `testPool2`}, + "image": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolImageRepresentation}, + "is_storage_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`}, + "maximum_size": acctest.Representation{RepType: acctest.Required, Create: `10`, Update: `11`}, + "network_configuration": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolNetworkConfigurationRepresentation}, + "shape_name": acctest.Representation{RepType: acctest.Required, Create: `${var.test_shape_name}`}, + "standby_size": acctest.Representation{RepType: acctest.Required, Create: `2`, Update: `3`}, + "storage_backup_policy_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_storage_backup_policy_id}`}, + "storage_size_in_gbs": acctest.Representation{RepType: acctest.Required, Create: `50`}, + "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}}, + "shape_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolShapeConfigRepresentation}, + "use_dedicated_vm_host": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_use_dedicated_vm_host}`}, + "private_access_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolPrivateAccessDetailsRepresentation}, + "session_lifecycle_actions": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolSessionLifecycleActionsRepresentation}, } + + DesktopsDesktopPoolAllSessionLifecycleActionsNoAvailPolicySchedulesRepresentation = map[string]interface{}{ + "are_privileged_users": acctest.Representation{RepType: acctest.Required, Create: `false`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, + "availability_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyNoStartStopSchedulesRepresentation}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "contact_details": acctest.Representation{RepType: acctest.Required, Create: `contactDetails`, Update: `contactDetails2`}, + "device_policy": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolDevicePolicyRepresentation}, + "display_name": acctest.Representation{RepType: acctest.Required, Create: `testPool1`, Update: `testPool2`}, + "image": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolImageRepresentation}, + "is_storage_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`}, + "maximum_size": acctest.Representation{RepType: acctest.Required, Create: `10`, Update: `11`}, + "network_configuration": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolNetworkConfigurationRepresentation}, + "shape_name": acctest.Representation{RepType: acctest.Required, Create: `${var.test_shape_name}`}, + "standby_size": acctest.Representation{RepType: acctest.Required, Create: `2`, Update: `3`}, + "storage_backup_policy_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_storage_backup_policy_id}`}, + "storage_size_in_gbs": acctest.Representation{RepType: acctest.Required, Create: `50`}, + "description": acctest.Representation{RepType: acctest.Optional, Create: `description`, Update: `description2`}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_nsg_id}`}}, + "session_lifecycle_actions": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolSessionLifecycleActionsAllRepresentation}, + } + DesktopsDesktopPoolAvailabilityPolicyRepresentation = map[string]interface{}{ - "start_schedule": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation}, - "stop_schedule": acctest.RepresentationGroup{RepType: acctest.Required, Group: DesktopsDesktopPoolAvailabilityPolicyStopScheduleRepresentation}, + "start_schedule": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation}, + "stop_schedule": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolAvailabilityPolicyStopScheduleRepresentation}, } + + // This is the only way for not to not pass availability policy schedules and pass server side validation + DesktopsDesktopPoolAvailabilityPolicyNoStartStopSchedulesRepresentation = map[string]interface{}{} + DesktopsDesktopPoolDevicePolicyRepresentation = map[string]interface{}{ "audio_mode": acctest.Representation{RepType: acctest.Required, Create: `NONE`, Update: `TODESKTOP`}, "cdm_mode": acctest.Representation{RepType: acctest.Required, Create: `NONE`, Update: `READONLY`}, @@ -91,6 +119,7 @@ var ( "subnet_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_subnet_id}`}, "vcn_id": acctest.Representation{RepType: acctest.Required, Create: `${var.test_vcn_id}`}, } + DesktopsDesktopPoolShapeConfigRepresentation = map[string]interface{}{ "baseline_ocpu_utilization": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_shape_config_baseline_ocpu_utilization}`}, "memory_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_shape_config_memory_in_gbs}`}, @@ -101,6 +130,16 @@ var ( "nsg_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${var.test_private_access_nsg_id}`}}, "private_ip": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_private_access_private_ip}`}, } + + DesktopsDesktopPoolSessionLifecycleActionsRepresentation = map[string]interface{}{ + "inactivity": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolSessionLifecycleActionsInactivityRepresentation}, + } + + DesktopsDesktopPoolSessionLifecycleActionsAllRepresentation = map[string]interface{}{ + "inactivity": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolSessionLifecycleActionsInactivityRepresentation}, + "disconnect": acctest.RepresentationGroup{RepType: acctest.Optional, Group: DesktopsDesktopPoolSessionLifecycleActionsDisconnectRepresentation}, + } + DesktopsDesktopPoolAvailabilityPolicyStartScheduleRepresentation = map[string]interface{}{ "cron_expression": acctest.Representation{RepType: acctest.Required, Create: `${var.test_start_schedule_cron_expr_create}`, Update: `${var.test_start_schedule_cron_expr_update}`}, "timezone": acctest.Representation{RepType: acctest.Required, Create: `${var.test_start_schedule_timezone_create}`, Update: `${var.test_start_schedule_timezone_update}`}, @@ -110,6 +149,16 @@ var ( "timezone": acctest.Representation{RepType: acctest.Required, Create: `${var.test_stop_schedule_timezone_create}`, Update: `${var.test_stop_schedule_timezone_update}`}, } + DesktopsDesktopPoolSessionLifecycleActionsInactivityRepresentation = map[string]interface{}{ + "action": acctest.Representation{RepType: acctest.Required, Create: `${var.test_slm_inactivity_action_create}`}, + "grace_period_in_minutes": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_slm_inactivity_grace_period_create}`}, + } + + DesktopsDesktopPoolSessionLifecycleActionsDisconnectRepresentation = map[string]interface{}{ + "action": acctest.Representation{RepType: acctest.Required, Create: `${var.test_slm_disconnect_action_create}`}, + "grace_period_in_minutes": acctest.Representation{RepType: acctest.Optional, Create: `${var.test_slm_disconnect_grace_period_create}`}, + } + test_vcn_id = utils.GetEnvSettingWithBlankDefault("test_vcn_id") vcnIdVariableStr = fmt.Sprintf("variable \"test_vcn_id\" { default = \"%s\" }\n", test_vcn_id) @@ -176,6 +225,24 @@ var ( test_private_access_private_ip = utils.GetEnvSettingWithBlankDefault("test_private_access_private_ip") privateAccessPrivateIpVariableStr = fmt.Sprintf("variable \"test_private_access_private_ip\" { default = \"%s\" }\n", test_private_access_private_ip) + test_slm_disconnect_action_create = utils.GetEnvSettingWithBlankDefault("test_slm_disconnect_action_create") + slmDisconnectActionCreateVariableStr = fmt.Sprintf("variable \"test_slm_disconnect_action_create\" { default = \"%s\" }\n", test_slm_disconnect_action_create) + + test_slm_disconnect_action_update = utils.GetEnvSettingWithBlankDefault("test_slm_disconnect_action_update") + slmDisconnectActionUpdateVariableStr = fmt.Sprintf("variable \"test_slm_disconnect_action_update\" { default = \"%s\" }\n", test_slm_disconnect_action_update) + + test_slm_disconnect_grace_period_create = utils.GetEnvSettingWithBlankDefault("test_slm_disconnect_grace_period_create") + slmDisconnectGracePeriodCreateVariableStr = fmt.Sprintf("variable \"test_slm_disconnect_grace_period_create\" { default = \"%s\" }\n", test_slm_disconnect_grace_period_create) + + test_slm_inactivity_action_create = utils.GetEnvSettingWithBlankDefault("test_slm_inactivity_action_create") + slmInactivityActionCreateVariableStr = fmt.Sprintf("variable \"test_slm_inactivity_action_create\" { default = \"%s\" }\n", test_slm_inactivity_action_create) + + test_slm_inactivity_action_update = utils.GetEnvSettingWithBlankDefault("test_slm_inactivity_action_update") + slmInactivityActionUpdateVariableStr = fmt.Sprintf("variable \"test_slm_inactivity_action_update\" { default = \"%s\" }\n", test_slm_inactivity_action_update) + + test_slm_inactivity_grace_period_create = utils.GetEnvSettingWithBlankDefault("test_slm_inactivity_grace_period_create") + slmInactivityGracePeriodCreateVariableStr = fmt.Sprintf("variable \"test_slm_inactivity_grace_period_create\" { default = \"%s\" }\n", test_slm_inactivity_grace_period_create) + DesktopsDesktopPoolResourceDependencies = vcnIdVariableStr + subnetIdVariableStr + shapeNameVariableStr + @@ -198,6 +265,12 @@ var ( privateAccessSubnetIdVariableStr + privateAccessNsgIdVariableStr + privateAccessPrivateIpVariableStr + + slmDisconnectActionCreateVariableStr + + slmDisconnectActionUpdateVariableStr + + slmDisconnectGracePeriodCreateVariableStr + + slmInactivityActionCreateVariableStr + + slmInactivityActionUpdateVariableStr + + slmInactivityGracePeriodCreateVariableStr + AvailabilityDomainConfig ) @@ -232,12 +305,6 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "are_privileged_users", "false"), resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttr(resourceName, "availability_policy.#", "1"), - resource.TestCheckResourceAttr(resourceName, "availability_policy.0.start_schedule.#", "1"), - resource.TestCheckResourceAttrSet(resourceName, "availability_policy.0.start_schedule.0.cron_expression"), - resource.TestCheckResourceAttrSet(resourceName, "availability_policy.0.start_schedule.0.timezone"), - resource.TestCheckResourceAttr(resourceName, "availability_policy.0.stop_schedule.#", "1"), - resource.TestCheckResourceAttrSet(resourceName, "availability_policy.0.stop_schedule.0.cron_expression"), - resource.TestCheckResourceAttrSet(resourceName, "availability_policy.0.stop_schedule.0.timezone"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "contact_details", "contactDetails"), resource.TestCheckResourceAttr(resourceName, "device_policy.#", "1"), @@ -317,6 +384,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.#", "1"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.0.inactivity.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.action"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.grace_period_in_minutes"), resource.TestCheckResourceAttrSet(resourceName, "shape_name"), resource.TestCheckResourceAttr(resourceName, "standby_size", "2"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -384,6 +455,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.private_ip"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.subnet_id"), resource.TestCheckResourceAttrSet(resourceName, "private_access_details.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.#", "1"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.0.inactivity.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.action"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.grace_period_in_minutes"), resource.TestCheckResourceAttrSet(resourceName, "shape_name"), resource.TestCheckResourceAttr(resourceName, "standby_size", "2"), resource.TestCheckResourceAttrSet(resourceName, "state"), @@ -531,6 +606,10 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.baseline_ocpu_utilization"), resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.memory_in_gbs"), resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_config.0.ocpus"), + resource.TestCheckResourceAttr(singularDatasourceName, "session_lifecycle_actions.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "session_lifecycle_actions.0.inactivity.#", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "session_lifecycle_actions.0.inactivity.0.action"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "session_lifecycle_actions.0.inactivity.0.grace_period_in_minutes"), resource.TestCheckResourceAttrSet(singularDatasourceName, "shape_name"), resource.TestCheckResourceAttr(singularDatasourceName, "standby_size", "3"), resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), @@ -550,6 +629,128 @@ func TestDesktopsDesktopPoolResource_basic(t *testing.T) { }) } +func TestDesktopsDesktopPoolResource_session_lifecycle_disconnect(t *testing.T) { + httpreplay.SetScenario("TestDesktopsDesktopPoolResource_session_lifecycle_disconnect") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_desktops_desktop_pool.test_desktop_pool" + + var resId, resId2 string + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+DesktopsDesktopPoolResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_desktops_desktop_pool", "test_desktop_pool", acctest.Optional, acctest.Create, DesktopsDesktopPoolAllSessionLifecycleActionsNoAvailPolicySchedulesRepresentation), "desktops", "desktopPool", t) + + acctest.ResourceTest(t, testAccCheckDesktopsDesktopPoolDestroy, []resource.TestStep{ + // verify Create with optionals + { + Config: config + compartmentIdVariableStr + DesktopsDesktopPoolResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_desktops_desktop_pool", "test_desktop_pool", acctest.Optional, acctest.Create, DesktopsDesktopPoolAllSessionLifecycleActionsNoAvailPolicySchedulesRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "are_privileged_users", "false"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "availability_policy.#", "1"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "contact_details", "contactDetails"), + resource.TestCheckResourceAttr(resourceName, "description", "description"), + resource.TestCheckResourceAttr(resourceName, "device_policy.#", "1"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.audio_mode", "NONE"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.cdm_mode", "NONE"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.clipboard_mode", "NONE"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_display_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_keyboard_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_pointer_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_printing_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "display_name", "testPool1"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "image.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "image.0.image_id"), + resource.TestCheckResourceAttrSet(resourceName, "image.0.image_name"), + resource.TestCheckResourceAttr(resourceName, "is_storage_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "maximum_size", "10"), + resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.#", "1"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.0.inactivity.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.action"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.inactivity.0.grace_period_in_minutes"), + resource.TestCheckResourceAttr(resourceName, "session_lifecycle_actions.0.disconnect.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.disconnect.0.action"), + resource.TestCheckResourceAttrSet(resourceName, "session_lifecycle_actions.0.disconnect.0.grace_period_in_minutes"), + resource.TestCheckResourceAttrSet(resourceName, "shape_name"), + resource.TestCheckResourceAttr(resourceName, "standby_size", "2"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "storage_backup_policy_id"), + resource.TestCheckResourceAttr(resourceName, "storage_size_in_gbs", "50"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + + // verify updates to updatable parameters + { + Config: config + compartmentIdVariableStr + DesktopsDesktopPoolResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_desktops_desktop_pool", "test_desktop_pool", acctest.Optional, acctest.Update, DesktopsDesktopPoolAllSessionLifecycleActionsNoAvailPolicySchedulesRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "are_privileged_users", "false"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "availability_policy.#", "1"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "contact_details", "contactDetails2"), + resource.TestCheckResourceAttr(resourceName, "description", "description2"), + resource.TestCheckResourceAttr(resourceName, "device_policy.#", "1"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.audio_mode", "TODESKTOP"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.cdm_mode", "READONLY"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.clipboard_mode", "TODESKTOP"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_display_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_keyboard_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_pointer_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "device_policy.0.is_printing_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "display_name", "testPool2"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttr(resourceName, "image.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "image.0.image_id"), + resource.TestCheckResourceAttrSet(resourceName, "image.0.image_name"), + resource.TestCheckResourceAttr(resourceName, "is_storage_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "maximum_size", "11"), + resource.TestCheckResourceAttr(resourceName, "network_configuration.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.subnet_id"), + resource.TestCheckResourceAttrSet(resourceName, "network_configuration.0.vcn_id"), + resource.TestCheckResourceAttrSet(resourceName, "shape_name"), + resource.TestCheckResourceAttr(resourceName, "standby_size", "3"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "storage_backup_policy_id"), + resource.TestCheckResourceAttr(resourceName, "storage_size_in_gbs", "50"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("Resource recreated when it was supposed to be updated.") + } + return err + }, + ), + }, + }) +} + func testAccCheckDesktopsDesktopPoolDestroy(s *terraform.State) error { noResourceFound := true client := acctest.TestAccProvider.Meta().(*tf_client.OracleClients).DesktopServiceClient() diff --git a/internal/service/desktops/desktops_desktop_pool_data_source.go b/internal/service/desktops/desktops_desktop_pool_data_source.go index befa2732de7..c99c4412192 100644 --- a/internal/service/desktops/desktops_desktop_pool_data_source.go +++ b/internal/service/desktops/desktops_desktop_pool_data_source.go @@ -143,6 +143,12 @@ func (s *DesktopsDesktopPoolDataSourceCrud) SetData() error { s.D.Set("private_access_details", nil) } + if s.Res.SessionLifecycleActions != nil { + s.D.Set("session_lifecycle_actions", []interface{}{DesktopSessionLifecycleActionsToMap(s.Res.SessionLifecycleActions)}) + } else { + s.D.Set("session_lifecycle_actions", nil) + } + if s.Res.ShapeName != nil { s.D.Set("shape_name", *s.Res.ShapeName) } diff --git a/internal/service/desktops/desktops_desktop_pool_resource.go b/internal/service/desktops/desktops_desktop_pool_resource.go index 3c4a8113c1f..fc80ddc2a7f 100644 --- a/internal/service/desktops/desktops_desktop_pool_resource.go +++ b/internal/service/desktops/desktops_desktop_pool_resource.go @@ -52,9 +52,11 @@ func DesktopsDesktopPoolResource() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // Required + + // Optional "start_schedule": { Type: schema.TypeList, - Required: true, + Optional: true, MaxItems: 1, MinItems: 1, Elem: &schema.Resource{ @@ -77,7 +79,7 @@ func DesktopsDesktopPoolResource() *schema.Resource { }, "stop_schedule": { Type: schema.TypeList, - Required: true, + Optional: true, MaxItems: 1, MinItems: 1, Elem: &schema.Resource{ @@ -99,8 +101,6 @@ func DesktopsDesktopPoolResource() *schema.Resource { }, }, - // Optional - // Computed }, }, @@ -358,6 +358,72 @@ func DesktopsDesktopPoolResource() *schema.Resource { }, }, }, + "session_lifecycle_actions": { + Type: schema.TypeList, + Optional: true, + ForceNew: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "disconnect": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "action": { + Type: schema.TypeString, + Required: true, + }, + + // Optional + "grace_period_in_minutes": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "inactivity": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "action": { + Type: schema.TypeString, + Required: true, + }, + + // Optional + "grace_period_in_minutes": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + + // Computed + }, + }, + }, "time_start_scheduled": { Type: schema.TypeString, Optional: true, @@ -595,6 +661,17 @@ func (s *DesktopsDesktopPoolResourceCrud) Create() error { } } + if sessionLifecycleActions, ok := s.D.GetOkExists("session_lifecycle_actions"); ok { + if tmpList := sessionLifecycleActions.([]interface{}); len(tmpList) > 0 { + fieldKeyFormat := fmt.Sprintf("%s.%d.%%s", "session_lifecycle_actions", 0) + tmp, err := s.mapToCreateDesktopPoolDesktopSessionLifecycleActions(fieldKeyFormat) + if err != nil { + return err + } + request.SessionLifecycleActions = &tmp + } + } + if shapeName, ok := s.D.GetOkExists("shape_name"); ok { tmp := shapeName.(string) request.ShapeName = &tmp @@ -1003,6 +1080,12 @@ func (s *DesktopsDesktopPoolResourceCrud) SetData() error { s.D.Set("private_access_details", nil) } + if s.Res.SessionLifecycleActions != nil { + s.D.Set("session_lifecycle_actions", []interface{}{DesktopSessionLifecycleActionsToMap(s.Res.SessionLifecycleActions)}) + } else { + s.D.Set("session_lifecycle_actions", nil) + } + if s.Res.ShapeName != nil { s.D.Set("shape_name", *s.Res.ShapeName) } @@ -1112,6 +1195,34 @@ func (s *DesktopsDesktopPoolResourceCrud) mapToCreateDesktopPoolPrivateAccessDet return result, nil } +func (s *DesktopsDesktopPoolResourceCrud) mapToCreateDesktopPoolDesktopSessionLifecycleActions(fieldKeyFormat string) (oci_desktops.CreateDesktopPoolDesktopSessionLifecycleActions, error) { + result := oci_desktops.CreateDesktopPoolDesktopSessionLifecycleActions{} + + if disconnect, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "disconnect")); ok { + if tmpList := disconnect.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "disconnect"), 0) + tmp, err := s.mapToDisconnectConfig(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert disconnect, encountered error: %v", err) + } + result.Disconnect = &tmp + } + } + + if inactivity, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "inactivity")); ok { + if tmpList := inactivity.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "inactivity"), 0) + tmp, err := s.mapToInactivityConfig(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert inactivity, encountered error: %v", err) + } + result.Inactivity = &tmp + } + } + + return result, nil +} + func DesktopPoolPrivateAccessDetailsToMap(obj *oci_desktops.DesktopPoolPrivateAccessDetails, datasource bool) map[string]interface{} { result := map[string]interface{}{} @@ -1144,6 +1255,34 @@ func DesktopPoolPrivateAccessDetailsToMap(obj *oci_desktops.DesktopPoolPrivateAc return result } +func CreateDesktopPoolDesktopSessionLifecycleActionsToMap(obj *oci_desktops.CreateDesktopPoolDesktopSessionLifecycleActions) map[string]interface{} { + result := map[string]interface{}{} + + if obj.Disconnect != nil { + result["disconnect"] = []interface{}{DisconnectConfigToMap(obj.Disconnect)} + } + + if obj.Inactivity != nil { + result["inactivity"] = []interface{}{InactivityConfigToMap(obj.Inactivity)} + } + + return result +} + +func DesktopSessionLifecycleActionsToMap(obj *oci_desktops.DesktopSessionLifecycleActions) map[string]interface{} { + result := map[string]interface{}{} + + if obj.Disconnect != nil { + result["disconnect"] = []interface{}{DisconnectConfigToMap(obj.Disconnect)} + } + + if obj.Inactivity != nil { + result["inactivity"] = []interface{}{InactivityConfigToMap(obj.Inactivity)} + } + + return result +} + func (s *DesktopsDesktopPoolResourceCrud) mapToDesktopAvailabilityPolicy(fieldKeyFormat string) (oci_desktops.DesktopAvailabilityPolicy, error) { result := oci_desktops.DesktopAvailabilityPolicy{} @@ -1175,11 +1314,11 @@ func (s *DesktopsDesktopPoolResourceCrud) mapToDesktopAvailabilityPolicy(fieldKe func DesktopAvailabilityPolicyToMap(obj *oci_desktops.DesktopAvailabilityPolicy) map[string]interface{} { result := map[string]interface{}{} - if obj.StartSchedule != nil { + if obj.StartSchedule != nil && obj.StartSchedule.CronExpression != nil { result["start_schedule"] = []interface{}{DesktopScheduleToMap(obj.StartSchedule)} } - if obj.StopSchedule != nil { + if obj.StopSchedule != nil && obj.StopSchedule.CronExpression != nil { result["stop_schedule"] = []interface{}{DesktopScheduleToMap(obj.StopSchedule)} } @@ -1393,6 +1532,60 @@ func DesktopScheduleToMap(obj *oci_desktops.DesktopSchedule) map[string]interfac return result } +func (s *DesktopsDesktopPoolResourceCrud) mapToDisconnectConfig(fieldKeyFormat string) (oci_desktops.DisconnectConfig, error) { + result := oci_desktops.DisconnectConfig{} + + if action, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "action")); ok { + result.Action = oci_desktops.DisconnectConfigActionEnum(action.(string)) + } + + if gracePeriodInMinutes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "grace_period_in_minutes")); ok { + tmp := gracePeriodInMinutes.(int) + result.GracePeriodInMinutes = &tmp + } + + return result, nil +} + +func DisconnectConfigToMap(obj *oci_desktops.DisconnectConfig) map[string]interface{} { + result := map[string]interface{}{} + + result["action"] = string(obj.Action) + + if obj.GracePeriodInMinutes != nil { + result["grace_period_in_minutes"] = int(*obj.GracePeriodInMinutes) + } + + return result +} + +func (s *DesktopsDesktopPoolResourceCrud) mapToInactivityConfig(fieldKeyFormat string) (oci_desktops.InactivityConfig, error) { + result := oci_desktops.InactivityConfig{} + + if action, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "action")); ok { + result.Action = oci_desktops.InactivityConfigActionEnum(action.(string)) + } + + if gracePeriodInMinutes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "grace_period_in_minutes")); ok { + tmp := gracePeriodInMinutes.(int) + result.GracePeriodInMinutes = &tmp + } + + return result, nil +} + +func InactivityConfigToMap(obj *oci_desktops.InactivityConfig) map[string]interface{} { + result := map[string]interface{}{} + + result["action"] = string(obj.Action) + + if obj.GracePeriodInMinutes != nil { + result["grace_period_in_minutes"] = int(*obj.GracePeriodInMinutes) + } + + return result +} + func (s *DesktopsDesktopPoolResourceCrud) updateCompartment(compartment interface{}) error { changeCompartmentRequest := oci_desktops.ChangeDesktopPoolCompartmentRequest{} diff --git a/website/docs/d/desktops_desktop_pool.html.markdown b/website/docs/d/desktops_desktop_pool.html.markdown index 45d93ed07d7..9f14f3ae54c 100644 --- a/website/docs/d/desktops_desktop_pool.html.markdown +++ b/website/docs/d/desktops_desktop_pool.html.markdown @@ -8,11 +8,11 @@ description: |- --- # Data Source: oci_desktops_desktop_pool + This data source provides details about a specific Desktop Pool resource in Oracle Cloud Infrastructure Desktops service. Returns information about the desktop pool including all configuration parameters and the current state. - ## Example Usage ```hcl @@ -28,7 +28,6 @@ The following arguments are supported: * `desktop_pool_id` - (Required) The OCID of the desktop pool. - ## Attributes Reference The following attributes are exported: @@ -37,53 +36,57 @@ The following attributes are exported: * `are_privileged_users` - Indicates whether desktop pool users have administrative privileges on their desktop. * `availability_domain` - The availability domain of the desktop pool. * `availability_policy` - Provides the start and stop schedule information for desktop availability of the desktop pool. - * `start_schedule` - Provides the schedule information for a desktop. - * `cron_expression` - A cron expression describing the desktop's schedule. - * `timezone` - The timezone of the desktop's schedule. - * `stop_schedule` - Provides the schedule information for a desktop. - * `cron_expression` - A cron expression describing the desktop's schedule. - * `timezone` - The timezone of the desktop's schedule. + * `start_schedule` - Provides the schedule information for a desktop. + * `cron_expression` - A cron expression describing the desktop's schedule. + * `timezone` - The timezone of the desktop's schedule. + * `stop_schedule` - Provides the schedule information for a desktop. + * `cron_expression` - A cron expression describing the desktop's schedule. + * `timezone` - The timezone of the desktop's schedule. * `compartment_id` - The OCID of the compartment of the desktop pool. -* `contact_details` - Contact information of the desktop pool administrator. Avoid entering confidential information. -* `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` -* `description` - A user friendly description providing additional information about the resource. Avoid entering confidential information. -* `device_policy` - Provides the settings for desktop and client device options, such as audio in and out, client drive mapping, and clipboard access. - * `audio_mode` - The audio mode. NONE: No access to the local audio devices is permitted. TODESKTOP: The user may record audio on their desktop. FROMDESKTOP: The user may play audio on their desktop. FULL: The user may play and record audio on their desktop. - * `cdm_mode` - The client local drive access mode. NONE: No access to local drives permitted. READONLY: The user may read from local drives on their desktop. FULL: The user may read from and write to their local drives on their desktop. - * `clipboard_mode` - The clipboard mode. NONE: No access to the local clipboard is permitted. TODESKTOP: The clipboard can be used to transfer data to the desktop only. FROMDESKTOP: The clipboard can be used to transfer data from the desktop only. FULL: The clipboard can be used to transfer data to and from the desktop. - * `is_display_enabled` - Indicates whether the display is enabled. - * `is_keyboard_enabled` - Indicates whether the keyboard is enabled. - * `is_pointer_enabled` - Indicates whether the pointer is enabled. - * `is_printing_enabled` - Indicates whether printing is enabled. +* `contact_details` - Contact information of the desktop pool administrator. Avoid entering confidential information. +* `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` +* `description` - A user friendly description providing additional information about the resource. Avoid entering confidential information. +* `device_policy` - Provides the settings for desktop and client device options, such as audio in and out, client drive mapping, and clipboard access. + * `audio_mode` - The audio mode. NONE: No access to the local audio devices is permitted. TODESKTOP: The user may record audio on their desktop. FROMDESKTOP: The user may play audio on their desktop. FULL: The user may play and record audio on their desktop. + * `cdm_mode` - The client local drive access mode. NONE: No access to local drives permitted. READONLY: The user may read from local drives on their desktop. FULL: The user may read from and write to their local drives on their desktop. + * `clipboard_mode` - The clipboard mode. NONE: No access to the local clipboard is permitted. TODESKTOP: The clipboard can be used to transfer data to the desktop only. FROMDESKTOP: The clipboard can be used to transfer data from the desktop only. FULL: The clipboard can be used to transfer data to and from the desktop. + * `is_display_enabled` - Indicates whether the display is enabled. + * `is_keyboard_enabled` - Indicates whether the keyboard is enabled. + * `is_pointer_enabled` - Indicates whether the pointer is enabled. + * `is_printing_enabled` - Indicates whether printing is enabled. * `display_name` - A user friendly display name. Avoid entering confidential information. -* `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` +* `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` * `id` - The OCID of the desktop pool. * `image` - Provides information about the desktop image. - * `image_id` - The OCID of the desktop image. - * `image_name` - The name of the desktop image. - * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". + * `image_id` - The OCID of the desktop image. + * `image_name` - The name of the desktop image. + * `operating_system` - The operating system of the desktop image, e.g. "Oracle Linux", "Windows". * `is_storage_enabled` - Indicates whether storage is enabled for the desktop pool. * `maximum_size` - The maximum number of desktops permitted in the desktop pool. * `network_configuration` - Provides information about the network configuration of the desktop pool. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. * `nsg_ids` - A list of network security groups for the network. -* `shape_config` - The shape configuration used for each desktop compute instance in the desktop pool. - * `baseline_ocpu_utilization` - The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: - * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. - * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. - * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. - * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. - * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. -* `nsg_ids` - A list of network security groups for the network. -* `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. - * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). - * `nsg_ids` - A list of network security groups for the private access. - * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `shape_config` - The shape configuration used for each desktop compute instance in the desktop pool. + * `baseline_ocpu_utilization` - The baseline OCPU utilization for a subcore burstable VM instance used for each desktop compute instance in the desktop pool. Leave this attribute blank for a non-burstable instance, or explicitly specify non-burstable with `BASELINE_1_1`. The following values are supported: + * `BASELINE_1_8` - baseline usage is 1/8 of an OCPU. + * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. + * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. + * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. +* `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. + * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). + * `nsg_ids` - A list of network security groups for the private access. + * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the private subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `session_lifecycle_actions` - Action to be triggered on inactivity or disconnect + * `disconnect` - Action and grace period for disconnect + * `action` - a disconnect action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) after disconnect before any action occurs. If the value is not provided, a default value is used. + * `inactivity` - Action and grace period for inactivity + * `action` - an inactivity action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) during which the session must remain inactive before any action occurs. If the value is not provided, a default value is used. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. @@ -93,4 +96,5 @@ The following attributes are exported: * `time_start_scheduled` - The start time of the desktop pool. * `time_stop_scheduled` - The stop time of the desktop pool. * `use_dedicated_vm_host` - Indicates whether the desktop pool uses dedicated virtual machine hosts. +--- diff --git a/website/docs/d/desktops_desktop_pools.html.markdown b/website/docs/d/desktops_desktop_pools.html.markdown index 17efa571a9e..83e4a3efe5e 100644 --- a/website/docs/d/desktops_desktop_pools.html.markdown +++ b/website/docs/d/desktops_desktop_pools.html.markdown @@ -90,16 +90,20 @@ The following attributes are exported: * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. - * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. -* `nsg_ids` - A list of network security groups for the network. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. * `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). * `nsg_ids` - A list of network security groups for the private access. * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. + * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the private subnet in the customer VCN where the connectivity will be established. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `session_lifecycle_actions` - Action to be triggered on inactivity or disconnect + * `disconnect` - Action and grace period for disconnect + * `action` - a disconnect action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) after disconnect before any action occurs. If the value is not provided, a default value is used. + * `inactivity` - Action and grace period for inactivity + * `action` - an inactivity action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) during which the session must remain inactive before any action occurs. If the value is not provided, a default value is used. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. diff --git a/website/docs/r/desktops_desktop_pool.html.markdown b/website/docs/r/desktops_desktop_pool.html.markdown index 2bc67f4a5e7..b85a1a06fba 100644 --- a/website/docs/r/desktops_desktop_pool.html.markdown +++ b/website/docs/r/desktops_desktop_pool.html.markdown @@ -20,7 +20,8 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { are_privileged_users = var.desktop_pool_are_privileged_users availability_domain = var.desktop_pool_availability_domain availability_policy { - #Required + + #Optional start_schedule { #Required cron_expression = "0 10 8 ? * 2" @@ -78,12 +79,30 @@ resource "oci_desktops_desktop_pool" "test_desktop_pool" { ocpus = var.desktop_pool_shape_config_ocpus } private_access_details { - #Required - subnet_id = oci_core_subnet.test_subnet.id + #Required + subnet_id = oci_core_subnet.test_subnet.id + + #Optional + nsg_ids = var.desktop_pool_private_access_details_nsg_ids + private_ip = var.desktop_pool_private_access_details_private_ip + } + session_lifecycle_actions { #Optional - nsg_ids = var.desktop_pool_private_access_details_nsg_ids - private_ip = var.desktop_pool_private_access_details_private_ip + disconnect { + #Required + action = "STOP" + + #Optional + grace_period_in_minutes = var.desktop_pool_session_lifecycle_actions_disconnect_grace_period_in_minutes + } + inactivity { + #Required + action = "DISCONNECT" + + #Optional + grace_period_in_minutes = var.desktop_pool_session_lifecycle_actions_inactivity_grace_period_in_minutes + } } time_start_scheduled = var.desktop_pool_time_start_scheduled time_stop_scheduled = var.desktop_pool_time_stop_scheduled @@ -98,10 +117,10 @@ The following arguments are supported: * `are_privileged_users` - (Required) Indicates whether desktop pool users have administrative privileges on their desktop. * `availability_domain` - (Required) The availability domain of the desktop pool. * `availability_policy` - (Required) (Updatable) Provides the start and stop schedule information for desktop availability of the desktop pool. - * `start_schedule` - (Required) (Updatable) Provides the schedule information for a desktop. + * `start_schedule` - (Optional) (Updatable) Provides the schedule information for a desktop. * `cron_expression` - (Required) (Updatable) A cron expression describing the desktop's schedule. * `timezone` - (Required) (Updatable) The timezone of the desktop's schedule. - * `stop_schedule` - (Required) (Updatable) Provides the schedule information for a desktop. + * `stop_schedule` - (Optional) (Updatable) Provides the schedule information for a desktop. * `cron_expression` - (Required) (Updatable) A cron expression describing the desktop's schedule. * `timezone` - (Required) (Updatable) The timezone of the desktop's schedule. * `compartment_id` - (Required) (Updatable) The OCID of the compartment which will contain the desktop pool. @@ -134,14 +153,18 @@ The following arguments are supported: * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. * `memory_in_gbs` - (Optional) The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. - * `ocpus` - (Optional) The total number of OCPUs available for each desktop compute instance in the desktop pool. - * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. -* `nsg_ids` - (Optional) A list of network security groups for the private access. + * `ocpus` - (Optional) The total number of OCPUs available for each desktop compute instance in the desktop pool. * `private_access_details` - (Optional) The details of the desktop's private access network connectivity to be set up for the desktop pool. * `nsg_ids` - (Optional) A list of network security groups for the private access. * `private_ip` - (Optional) The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. - * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. + * `subnet_id` - (Required) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the private subnet in the customer VCN where the connectivity will be established. +* `session_lifecycle_actions` - (Optional) The details of action to be triggered in case of inactivity or disconnect + * `disconnect` - (Optional) (Updatable) Action and grace period for disconnect + * `action` - (Required) (Updatable) a disconnect action to be triggered + * `grace_period_in_minutes` - (Optional) (Updatable) The period of time (in minutes) after disconnect before any action occurs. If the value is not provided, a default value is used. + * `inactivity` - (Optional) (Updatable) Action and grace period for inactivity + * `action` - (Required) (Updatable) an inactivity action to be triggered + * `grace_period_in_minutes` - (Optional) (Updatable) The period of time (in minutes) during which the session must remain inactive before any action occurs. If the value is not provided, a default value is used. * `shape_name` - (Required) The shape of the desktop pool. * `standby_size` - (Required) (Updatable) The maximum number of standby desktops available in the desktop pool. * `storage_backup_policy_id` - (Required) The backup policy OCID of the storage. @@ -199,16 +222,20 @@ The following attributes are exported: * `BASELINE_1_2` - baseline usage is 1/2 of an OCPU. * `BASELINE_1_1` - baseline usage is the entire OCPU. This represents a non-burstable instance. * `memory_in_gbs` - The total amount of memory available in gigabytes for each desktop compute instance in the desktop pool. - * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. - * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. -* `nsg_ids` - A list of network security groups for the network. + * `ocpus` - The total number of OCPUs available for each desktop compute instance in the desktop pool. * `private_access_details` - The details of the desktop's private access network connectivity that were used to create the pool. * `endpoint_fqdn` - The three-label FQDN to use for the private endpoint. The customer VCN's DNS records are updated with this FQDN. This enables the customer to use the FQDN instead of the private endpoint's private IP address to access the service (for example, xyz.oraclecloud.com). * `nsg_ids` - A list of network security groups for the private access. * `private_ip` - The IPv4 address from the provided Oracle Cloud Infrastructure subnet which needs to be assigned to the VNIC. If not provided, it will be auto-assigned with an available IPv4 address from the subnet. * `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the subnet in the customer VCN where the connectivity will be established. - * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. + * `vcn_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the customer VCN. +* `session_lifecycle_actions` - Action to be triggered on inactivity or disconnect + * `disconnect` - Action and grace period for disconnect + * `action` - a disconnect action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) after disconnect before any action occurs. If the value is not provided, a default value is used. + * `inactivity` - Action and grace period for inactivity + * `action` - an inactivity action to be triggered + * `grace_period_in_minutes` - The period of time (in minutes) during which the session must remain inactive before any action occurs. If the value is not provided, a default value is used. * `shape_name` - The shape of the desktop pool. * `standby_size` - The maximum number of standby desktops available in the desktop pool. * `state` - The current state of the desktop pool. From 719910b00feab1fcd8eaa95f5226029d0f867c0f Mon Sep 17 00:00:00 2001 From: Ravi Chandra Date: Wed, 14 Aug 2024 12:41:30 +0530 Subject: [PATCH 15/31] Added - Direct API support for OCI BSS --- .../storage/block/corevolume/boot_volume.tf | 87 ++++++ examples/storage/block/corevolume/volume.tf | 55 ++++ .../integrationtest/core_boot_volume_test.go | 259 ++++++++++++++++- internal/integrationtest/core_volume_test.go | 264 +++++++++++++++++- .../service/core/core_boot_volume_resource.go | 65 ++++- internal/service/core/core_volume_resource.go | 65 ++++- website/docs/d/core_boot_volume.html.markdown | 5 +- .../docs/d/core_boot_volumes.html.markdown | 5 +- website/docs/d/core_volume.html.markdown | 11 +- website/docs/d/core_volumes.html.markdown | 11 +- website/docs/r/core_boot_volume.html.markdown | 19 +- website/docs/r/core_volume.html.markdown | 29 +- 12 files changed, 828 insertions(+), 47 deletions(-) create mode 100644 examples/storage/block/corevolume/boot_volume.tf create mode 100644 examples/storage/block/corevolume/volume.tf diff --git a/examples/storage/block/corevolume/boot_volume.tf b/examples/storage/block/corevolume/boot_volume.tf new file mode 100644 index 00000000000..8e44808601a --- /dev/null +++ b/examples/storage/block/corevolume/boot_volume.tf @@ -0,0 +1,87 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +# This example creates a new boot volume from an existing instance + +variable "boot_vol_first_backup_ocid" { +} + +variable "boot_vol_second_backup_ocid" { +} + +variable "instance_image_ocid" { +} + +resource "oci_core_boot_volume" "test_boot_volume_from_source_boot_volume" { + availability_domain = oci_core_instance.test_instance.availability_domain + compartment_id = oci_core_instance.test_instance.compartment_id + + source_details { + #Required + id = oci_core_instance.test_instance.boot_volume_id + type = "bootVolume" + } +} + +resource "oci_core_boot_volume" "test_create_delta_restored_boot_volume" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "tf-delta-restored-boot-volume-1" + size_in_gbs = "56" + source_details { + first_backup_id = var.boot_vol_first_backup_ocid + second_backup_id = var.boot_vol_second_backup_ocid + change_block_size_in_bytes = 4096 + type = "bootVolumeBackupDelta" + } +} + +resource "oci_core_instance" "test_instance" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "TestInstance" + shape = "VM.Standard2.1" + + create_vnic_details { + subnet_id = oci_core_subnet.test_subnet.id + display_name = "Primaryvnic" + assign_public_ip = true + hostname_label = "testinstance" + } + + source_details { + source_type = "image" + source_id = var.instance_image_ocid + } + + timeouts { + create = "60m" + } +} + +resource "oci_core_vcn" "test_vcn" { + cidr_block = "10.1.0.0/16" + compartment_id = var.compartment_ocid + display_name = "TestVcn" + dns_label = "testvcn" +} + +resource "oci_core_subnet" "test_subnet" { + availability_domain = data.oci_identity_availability_domain.ad.name + cidr_block = "10.1.20.0/24" + display_name = "TestSubnet" + dns_label = "testsubnet" + security_list_ids = [oci_core_vcn.test_vcn.default_security_list_id] + compartment_id = var.compartment_ocid + vcn_id = oci_core_vcn.test_vcn.id + route_table_id = oci_core_vcn.test_vcn.default_route_table_id + dhcp_options_id = oci_core_vcn.test_vcn.default_dhcp_options_id +} + +output "boot_volume_from_instance_outputs" { + value = { + boot_volume_from_instance = oci_core_instance.test_instance.boot_volume_id + boot_volume_from_source_boot_volume_id = oci_core_boot_volume.test_boot_volume_from_source_boot_volume.id + } +} + diff --git a/examples/storage/block/corevolume/volume.tf b/examples/storage/block/corevolume/volume.tf new file mode 100644 index 00000000000..205b38311d5 --- /dev/null +++ b/examples/storage/block/corevolume/volume.tf @@ -0,0 +1,55 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +variable "tenancy_ocid" { +} + +variable "auth" { +} + +variable "config_file_profile" { +} + +variable "region" { +} + +variable "compartment_ocid" { +} + +variable "destination_region" { +} + +variable "vol_first_backup_ocid" { +} + +variable "vol_second_backup_ocid" { +} + +provider "oci" { + auth = var.auth + config_file_profile = var.config_file_profile + region = var.region +} + +data "oci_identity_availability_domain" "ad" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +resource "oci_core_volume" "test_create_volume" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "tf-volume-1" + size_in_gbs = "50" +} + +resource "oci_core_volume" "test_create_delta_restored_volume" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "tf-delta-restored-volume-1" + size_in_gbs = "50" + source_details { + first_backup_id = var.vol_first_backup_ocid + second_backup_id = var.vol_second_backup_ocid + change_block_size_in_bytes = 4096 + type = "volumeBackupDelta" + } +} \ No newline at end of file diff --git a/internal/integrationtest/core_boot_volume_test.go b/internal/integrationtest/core_boot_volume_test.go index c0f62d1965f..f3e05ccbef8 100644 --- a/internal/integrationtest/core_boot_volume_test.go +++ b/internal/integrationtest/core_boot_volume_test.go @@ -37,14 +37,25 @@ var ( BootVolumeResourceConfig = CoreBootVolumeResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Update, CoreBootVolumeRepresentation) + BootVolumeDeltaRestoreResourceConfig = CoreBootVolumeDeltaRestoreResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Required, acctest.Update, CoreDeltaRestoreBootVolumeRepresentation) + + BootVolumeDeltaRestoredRequiredOnlyResource = CoreBootVolumeDeltaRestoreResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Required, acctest.Create, CoreDeltaRestoreBootVolumeRepresentation) + CoreCoreBootVolumeSingularDataSourceRepresentation = map[string]interface{}{ "boot_volume_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_boot_volume.test_boot_volume.id}`}, } + CoreIgnoreSystemTagsChangesRepresentation = map[string]interface{}{ + "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`, `freeform_tags`}}, + } + CoreCoreBootVolumeDataSourceRepresentation = map[string]interface{}{ "availability_domain": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, "compartment_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.compartment_id}`}, - "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreBootVolumeDataSourceFilterRepresentation}} + "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreBootVolumeDataSourceFilterRepresentation}, + } CoreBootVolumeDataSourceFilterRepresentation = map[string]interface{}{ "name": acctest.Representation{RepType: acctest.Required, Create: `id`}, "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_boot_volume.test_boot_volume.id}`}}, @@ -64,11 +75,35 @@ var ( "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreBootVolumeAutotunePoliciesRepresentation}, "is_auto_tune_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIgnoreSystemTagsChangesRepresentation}, } + + CoreDeltaRestoreBootVolumeRepresentation = map[string]interface{}{ + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "source_details": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreBootVolumeSourceDeltaDetailsRepresentation}, + "cluster_placement_group_id": acctest.Representation{RepType: acctest.Optional, Create: ``}, + "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")}`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `deltaRestoredVolumeName`, Update: `deltaRestoredVolumeName2`}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, + "size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `57`, Update: `58`}, + "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, + "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreBootVolumeAutotunePoliciesRepresentation}, + "is_auto_tune_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIgnoreSystemTagsChangesRepresentation}, + } + CoreBootVolumeSourceDetailsRepresentation = map[string]interface{}{ "id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_instance.test_instance.boot_volume_id}`}, "type": acctest.Representation{RepType: acctest.Required, Create: `bootVolume`}, } + CoreBootVolumeSourceDeltaDetailsRepresentation = map[string]interface{}{ + "change_block_size_in_bytes": acctest.Representation{RepType: acctest.Optional, Create: `4096`}, + "first_backup_id": acctest.Representation{RepType: acctest.Required, Create: `${var.boot_vol_first_backup_id}`}, + "second_backup_id": acctest.Representation{RepType: acctest.Required, Create: `${var.boot_vol_second_backup_id}`}, + "type": acctest.Representation{RepType: acctest.Required, Create: `bootVolumeBackupDelta`}, + } CoreBootVolumeAutotunePoliciesRepresentation = map[string]interface{}{ "autotune_type": acctest.Representation{RepType: acctest.Required, Create: `PERFORMANCE_BASED`, Update: `PERFORMANCE_BASED`}, "max_vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `20`, Update: `30`}, @@ -88,6 +123,17 @@ var ( AvailabilityDomainConfig + DefinedTagsDependencies + KeyResourceDependencyConfig + kmsKeyIdCreateVariableStr + kmsKeyIdUpdateVariableStr + + CoreBootVolumeDeltaRestoreResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) + + acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation) + + utils.OciImageIdsVariable + + acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Create, CoreInstanceRepresentation) + + utils.VolumeBackupPolicyDependency + + SourceVolumeListDependency + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "source_boot_volume", acctest.Required, acctest.Create, CoreDeltaRestoreBootVolumeRepresentation) + + AvailabilityDomainConfig + + DefinedTagsDependencies + + KeyResourceDependencyConfig + kmsKeyIdCreateVariableStr + kmsKeyIdUpdateVariableStr ) // issue-routing-tag: core/blockStorage @@ -326,6 +372,217 @@ func TestCoreBootVolumeResource_basic(t *testing.T) { }) } +// issue-routing-tag: core/blockStorage +func TestCoreBootVolumeDeltaRestoreResource_basic(t *testing.T) { + httpreplay.SetScenario("TestCoreBootVolumeDeltaRestoreResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + firstBackupId := utils.GetEnvSettingWithBlankDefault("boot_vol_first_backup_ocid") + firstBackupIdVariableStr := fmt.Sprintf("variable \"boot_vol_first_backup_id\" { default = \"%s\" }\n", firstBackupId) + + secondBackupId := utils.GetEnvSettingWithBlankDefault("boot_vol_second_backup_ocid") + secondBackupIdVariableStr := fmt.Sprintf("variable \"boot_vol_second_backup_id\" { default = \"%s\" }\n", secondBackupId) + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + compartmentIdU := utils.GetEnvSettingWithDefault("compartment_id_for_update", compartmentId) + compartmentIdUVariableStr := fmt.Sprintf("variable \"compartment_id_for_update\" { default = \"%s\" }\n", compartmentIdU) + + resourceName := "oci_core_boot_volume.test_boot_volume" + datasourceName := "data.oci_core_boot_volumes.test_boot_volumes" + singularDatasourceName := "data.oci_core_boot_volume.test_boot_volume" + + var resId, resId2 string + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "Create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+CoreBootVolumeDeltaRestoreResourceDependencies+firstBackupIdVariableStr+secondBackupIdVariableStr+ + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Create, CoreDeltaRestoreBootVolumeRepresentation), "core", "bootVolume", t) + + acctest.ResourceTest(t, testAccCheckCoreBootVolumeDestroy, []resource.TestStep{ + // verify Create + { + Config: config + compartmentIdVariableStr + CoreBootVolumeDeltaRestoreResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Create, CoreDeltaRestoreBootVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckNoResourceAttr(resourceName, "backup_policy_id"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "bootVolumeBackupDelta"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + return err + }, + ), + }, + + // delete before next Create + { + Config: config + compartmentIdVariableStr + CoreBootVolumeDeltaRestoreResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr, + }, + // verify Create with optionals + { + Config: config + compartmentIdVariableStr + CoreBootVolumeDeltaRestoreResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Create, CoreDeltaRestoreBootVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "20"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "57"), + resource.TestCheckResourceAttrSet(resourceName, "size_in_mbs"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "bootVolumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.first_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.second_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + + // verify Update to the compartment (the compartment will be switched back in the next step) + { + Config: config + compartmentIdVariableStr + compartmentIdUVariableStr + CoreBootVolumeDeltaRestoreResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Create, + acctest.RepresentationCopyWithNewProperties(CoreDeltaRestoreBootVolumeRepresentation, map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id_for_update}`}, + })), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "20"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "57"), + resource.TestCheckResourceAttrSet(resourceName, "size_in_mbs"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "bootVolumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.first_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.second_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("resource recreated when it was supposed to be updated") + } + return err + }, + ), + }, + + // verify updates to updatable parameters + { + PreConfig: acctest.WaitTillCondition(acctest.TestAccProvider, &resId, bootVolumeWaitCondition, BootVolumeWaitConditionDuration, + bootVolumeResponseFetchOperation, "core", false), + Config: config + compartmentIdVariableStr + CoreBootVolumeDeltaRestoreResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Update, CoreDeltaRestoreBootVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "30"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName2"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "58"), + resource.TestCheckResourceAttrSet(resourceName, "size_in_mbs"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "bootVolumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.first_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "source_details.0.second_backup_id"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("Resource recreated when it was supposed to be updated.") + } + return err + }, + ), + }, + // verify datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_core_boot_volumes", "test_boot_volumes", acctest.Optional, acctest.Update, CoreCoreBootVolumeDataSourceRepresentation) + + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Optional, acctest.Update, CoreDeltaRestoreBootVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(datasourceName, "availability_domain"), + resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), + resource.TestCheckNoResourceAttr(datasourceName, "volume_backup_id"), + resource.TestCheckNoResourceAttr(datasourceName, "volume_group_id"), + ), + }, + // verify singular datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_core_boot_volume", "test_boot_volume", acctest.Required, acctest.Create, CoreCoreBootVolumeSingularDataSourceRepresentation) + + compartmentIdVariableStr + firstBackupIdVariableStr + secondBackupIdVariableStr + BootVolumeDeltaRestoreResourceConfig, + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckNoResourceAttr(singularDatasourceName, "backup_policy_id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "boot_volume_id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "kms_key_id"), + + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.0.max_vpus_per_gb", "30"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "availability_domain"), + resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "deltaRestoredVolumeName2"), + resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "is_hydrated"), + resource.TestCheckResourceAttr(singularDatasourceName, "size_in_gbs", "58"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "size_in_mbs"), + resource.TestCheckResourceAttr(singularDatasourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "source_details.0.type", "bootVolumeBackupDelta"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), + resource.TestCheckResourceAttr(singularDatasourceName, "vpus_per_gb", "10"), + ), + }, + // verify resource import + { + Config: config + BootVolumeDeltaRestoredRequiredOnlyResource, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "backup_policy_id", + "cluster_placement_group_id", + }, + ResourceName: resourceName, + }, + }) +} + func testAccCheckCoreBootVolumeDestroy(s *terraform.State) error { noResourceFound := true client := acctest.TestAccProvider.Meta().(*tf_client.OracleClients).BlockstorageClient() diff --git a/internal/integrationtest/core_volume_test.go b/internal/integrationtest/core_volume_test.go index a739dfaabab..dc12f66d210 100644 --- a/internal/integrationtest/core_volume_test.go +++ b/internal/integrationtest/core_volume_test.go @@ -50,6 +50,10 @@ var ( "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_volume.test_volume.id}`}}, } + IgnoreSystemTagsChangesRep = map[string]interface{}{ + "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`system_tags`, `defined_tags`, `freeform_tags`}}, + } + CoreVolumeRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeAutotunePoliciesRepresentation}, @@ -64,7 +68,25 @@ var ( "size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `51`, Update: `52`}, "source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeSourceDetailsRepresentation}, "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: IgnoreSystemTagsChangesRep}, + } + + CoreDeltaRestoreVolumeRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeAutotunePoliciesRepresentation}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, + "cluster_placement_group_id": acctest.Representation{RepType: acctest.Optional, Create: ``}, + "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")}`}, + "display_name": acctest.Representation{RepType: acctest.Optional, Create: `deltaRestoredVolumeName`, Update: `deltaRestoredVolumeName2`}, + "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "is_auto_tune_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, + "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, + "size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `51`, Update: `52`}, + "source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeSourceDeltaDetailsRepresentation}, + "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: IgnoreSystemTagsChangesRep}, } + CoreVolumeAutotunePoliciesRepresentation = map[string]interface{}{ "autotune_type": acctest.Representation{RepType: acctest.Required, Create: `PERFORMANCE_BASED`, Update: `PERFORMANCE_BASED`}, "max_vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `20`, Update: `30`}, @@ -77,12 +99,23 @@ var ( "id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_volume.source_volume.id}`}, "type": acctest.Representation{RepType: acctest.Required, Create: `volume`}, } + CoreVolumeSourceDeltaDetailsRepresentation = map[string]interface{}{ + "change_block_size_in_bytes": acctest.Representation{RepType: acctest.Optional, Create: `4096`}, + "first_backup_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.vol_first_backup_id}`}, + "second_backup_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.vol_second_backup_id}`}, + "type": acctest.Representation{RepType: acctest.Required, Create: `volumeBackupDelta`}, + } CoreVolumeResourceDependencies = utils.VolumeBackupPolicyDependency + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "source_volume", acctest.Required, acctest.Create, CoreVolumeRepresentation) + AvailabilityDomainConfig + DefinedTagsDependencies + KeyResourceDependencyConfig + + CoreDeltaRestoredVolumeResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "source_volume", acctest.Required, acctest.Create, CoreDeltaRestoreVolumeRepresentation) + + AvailabilityDomainConfig + + DefinedTagsDependencies + + KeyResourceDependencyConfig ) // issue-routing-tag: core/blockStorage @@ -317,6 +350,223 @@ func TestCoreVolumeResource_basic(t *testing.T) { }) } +func TestCoreVolumeDeltaRestoreResource_basic(t *testing.T) { + if httpreplay.ShouldRetryImmediately() { + t.Skip("TestCoreVolumeDeltaRestoreResource_basic is running flaky in http replay mode, will skip this for checkin test.") + } + + httpreplay.SetScenario("TestCoreVolumeDeltaRestoreResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + firstBackupId := utils.GetEnvSettingWithBlankDefault("vol_first_backup_ocid") + firstBackupIdVariableStr := fmt.Sprintf("variable \"vol_first_backup_id\" { default = \"%s\" }\n", firstBackupId) + + secondBackupId := utils.GetEnvSettingWithBlankDefault("vol_second_backup_ocid") + secondBackupIdVariableStr := fmt.Sprintf("variable \"vol_second_backup_id\" { default = \"%s\" }\n", secondBackupId) + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + compartmentIdU := utils.GetEnvSettingWithDefault("compartment_id_for_update", compartmentId) + compartmentIdUVariableStr := fmt.Sprintf("variable \"compartment_id_for_update\" { default = \"%s\" }\n", compartmentIdU) + + resourceName := "oci_core_volume.test_volume" + datasourceName := "data.oci_core_volumes.test_volumes" + singularDatasourceName := "data.oci_core_volume.test_volume" + + var resId, resId2 string + // Save TF content to Create resource with optional properties. This has to be exactly the same as the config part in the "Create with optionals" step in the test. + acctest.SaveConfigContent(config+compartmentIdVariableStr+CoreDeltaRestoredVolumeResourceDependencies+firstBackupIdVariableStr+secondBackupIdVariableStr+ + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Create, CoreDeltaRestoreVolumeRepresentation), "core", "volume", t) + + acctest.ResourceTest(t, testAccCheckCoreVolumeDestroy, []resource.TestStep{ + // verify Create + { + Config: config + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Required, acctest.Create, CoreDeltaRestoreVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + // Check on default values used + resource.TestCheckResourceAttr(resourceName, "size_in_mbs", "51200"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "50"), + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + return err + }, + ), + }, + // delete before next Create + { + Config: config + compartmentIdVariableStr + firstBackupIdVariableStr + secondBackupIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies, + }, + + { + Config: config + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Create, CoreDeltaRestoreVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "20"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "51"), + resource.TestCheckResourceAttr(resourceName, "size_in_mbs", "52224"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "volumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckNoResourceAttr(resourceName, "volume_backup_id"), + resource.TestCheckNoResourceAttr(resourceName, "volume_group_id"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + + //verify Update to the compartment (the compartment will be switched back in the next step) + { + Config: config + compartmentIdVariableStr + compartmentIdUVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Create, + acctest.RepresentationCopyWithNewProperties(CoreDeltaRestoreVolumeRepresentation, map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id_for_update}`}, + })), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "20"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "51"), + resource.TestCheckResourceAttr(resourceName, "size_in_mbs", "52224"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "volumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckNoResourceAttr(resourceName, "volume_backup_id"), + resource.TestCheckNoResourceAttr(resourceName, "volume_group_id"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("resource recreated when it was supposed to be updated") + } + return err + }, + ), + }, + + // verify updates to updatable parameters + { + Config: config + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Update, CoreDeltaRestoreVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(resourceName, "autotune_policies.0.max_vpus_per_gb", "30"), + resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "display_name", "deltaRestoredVolumeName2"), + resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(resourceName, "id"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "size_in_gbs", "52"), + resource.TestCheckResourceAttr(resourceName, "size_in_mbs", "53248"), + resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), + resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "volumeBackupDelta"), + resource.TestCheckResourceAttrSet(resourceName, "state"), + resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckNoResourceAttr(resourceName, "volume_backup_id"), + resource.TestCheckNoResourceAttr(resourceName, "volume_group_id"), + resource.TestCheckResourceAttr(resourceName, "vpus_per_gb", "10"), + + func(s *terraform.State) (err error) { + resId2, err = acctest.FromInstanceState(s, resourceName, "id") + if resId != resId2 { + return fmt.Errorf("Resource recreated when it was supposed to be updated.") + } + return err + }, + ), + }, + // verify datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_core_volumes", "test_volumes", acctest.Optional, acctest.Update, CoreVolumeDataSourceRepresentation) + + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + firstBackupIdVariableStr + secondBackupIdVariableStr + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Update, CoreDeltaRestoreVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(datasourceName, "availability_domain"), + resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(datasourceName, "display_name", "displayName2"), + resource.TestCheckResourceAttrSet(datasourceName, "state"), + resource.TestCheckNoResourceAttr(datasourceName, "volume_backup_id"), + resource.TestCheckNoResourceAttr(datasourceName, "volume_group_id"), + ), + }, + // verify singular datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Required, acctest.Create, CoreVolumeSingularDataSourceRepresentation) + firstBackupIdVariableStr + secondBackupIdVariableStr + + compartmentIdVariableStr + CoreDeltaRestoredVolumeResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Optional, acctest.Update, CoreDeltaRestoreVolumeRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(singularDatasourceName, "volume_id"), + + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.#", "1"), + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.0.autotune_type", "PERFORMANCE_BASED"), + resource.TestCheckResourceAttr(singularDatasourceName, "autotune_policies.0.max_vpus_per_gb", "30"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "availability_domain"), + resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId), + + resource.TestCheckResourceAttrSet(singularDatasourceName, "display_name"), + resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "is_hydrated"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "kms_key_id"), + resource.TestCheckResourceAttr(singularDatasourceName, "size_in_gbs", "52"), + resource.TestCheckResourceAttr(singularDatasourceName, "size_in_mbs", "53248"), + resource.TestCheckResourceAttr(singularDatasourceName, "source_details.#", "1"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "source_details.0.first_backup_id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "source_details.0.second_backup_id"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "source_details.0.type"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "state"), + resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"), + resource.TestCheckResourceAttr(singularDatasourceName, "vpus_per_gb", "10"), + ), + }, + // verify resource import + { + Config: config + CoreVolumeRequiredOnlyResource, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "volume_backup_id", + "cluster_placement_group_id", + }, + ResourceName: resourceName, + }, + }) +} + // This test is separated from the basic test due to weird behavior from Terraform test framework. // An test step that results in an error will result in the state being voided. Isolate such test steps to // avoid interfering with regular tests that Create/Update resources. @@ -498,7 +748,6 @@ variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = 50 } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } - ` + compartmentIdVariableStr + CoreVolumeResourceConfig, Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), @@ -547,9 +796,7 @@ resource "oci_core_volume" "test_volume" { compartment_id = "${var.compartment_id}" #Optional - defined_tags = "${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "${var.volume_defined_tags_value}")}" display_name = "${var.volume_display_name}" - freeform_tags = "${var.volume_freeform_tags}" size_in_mbs = "${var.volume_size_in_mbs}" source_details { #Required @@ -557,9 +804,7 @@ resource "oci_core_volume" "test_volume" { type = "${var.volume_source_details_type}" } } -variable "volume_defined_tags_value" { default = "updatedValue" } variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_mbs" { default = "51200" } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } @@ -575,9 +820,7 @@ resource "oci_core_volume" "test_volume" { compartment_id = "${var.compartment_id}" #Optional - defined_tags = "${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "${var.volume_defined_tags_value}")}" display_name = "${var.volume_display_name}" - freeform_tags = "${var.volume_freeform_tags}" size_in_gbs = "${var.volume_size_in_gbs}" source_details { #Required @@ -585,12 +828,11 @@ resource "oci_core_volume" "test_volume" { type = "${var.volume_source_details_type}" } } -variable "volume_defined_tags_value" { default = "updatedValue" } variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = "50" } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } +variable "volume_ignore_changes" { default = ["system_tags", "defined_tags", "freeform_tags"] } ` + compartmentIdVariableStr + CoreVolumeResourceDependencies, ExpectNonEmptyPlan: false, }, @@ -603,9 +845,7 @@ resource "oci_core_volume" "test_volume" { compartment_id = "${var.compartment_id}" #Optional - defined_tags = "${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "${var.volume_defined_tags_value}")}" display_name = "${var.volume_display_name}" - freeform_tags = "${var.volume_freeform_tags}" size_in_gbs = "${var.volume_size_in_gbs}" source_details { #Required @@ -613,9 +853,7 @@ resource "oci_core_volume" "test_volume" { type = "${var.volume_source_details_type}" } } -variable "volume_defined_tags_value" { default = "updatedValue" } variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = "50" } variable "volume_source_details_type" { default = "VoLume" } # case-insensitive variable "volume_state" { default = "AVAILABLE" } diff --git a/internal/service/core/core_boot_volume_resource.go b/internal/service/core/core_boot_volume_resource.go index 1a04c3e1a5d..e9a4565179d 100644 --- a/internal/service/core/core_boot_volume_resource.go +++ b/internal/service/core/core_boot_volume_resource.go @@ -50,11 +50,6 @@ func CoreBootVolumeResource() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // Required - "id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, "type": { Type: schema.TypeString, Required: true, @@ -63,11 +58,38 @@ func CoreBootVolumeResource() *schema.Resource { ValidateFunc: validation.StringInSlice([]string{ "bootVolume", "bootVolumeBackup", + "bootVolumeBackupDelta", "bootVolumeReplica", }, true), }, // Optional + "change_block_size_in_bytes": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + ValidateFunc: tfresource.ValidateInt64TypeString, + DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, + }, + "first_backup_id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, + "id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, + "second_backup_id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, // Computed }, @@ -798,6 +820,25 @@ func (s *CoreBootVolumeResourceCrud) mapToBootVolumeSourceDetails(fieldKeyFormat details.Id = &tmp } baseObject = details + case strings.ToLower("bootVolumeBackupDelta"): + details := oci_core.BootVolumeSourceFromBootVolumeBackupDeltaDetails{} + if changeBlockSizeInBytes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "change_block_size_in_bytes")); ok { + tmp := changeBlockSizeInBytes.(string) + tmpInt64, err := strconv.ParseInt(tmp, 10, 64) + if err != nil { + return details, fmt.Errorf("unable to convert changeBlockSizeInBytes string: %s to an int64 and encountered error: %v", tmp, err) + } + details.ChangeBlockSizeInBytes = &tmpInt64 + } + if firstBackupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "first_backup_id")); ok { + tmp := firstBackupId.(string) + details.FirstBackupId = &tmp + } + if secondBackupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "second_backup_id")); ok { + tmp := secondBackupId.(string) + details.SecondBackupId = &tmp + } + baseObject = details case strings.ToLower("bootVolumeReplica"): details := oci_core.BootVolumeSourceFromBootVolumeReplicaDetails{} if id, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "id")); ok { @@ -826,6 +867,20 @@ func BootVolumeSourceDetailsToMap(obj *oci_core.BootVolumeSourceDetails) map[str if v.Id != nil { result["id"] = string(*v.Id) } + case oci_core.BootVolumeSourceFromBootVolumeBackupDeltaDetails: + result["type"] = "bootVolumeBackupDelta" + + if v.ChangeBlockSizeInBytes != nil { + result["change_block_size_in_bytes"] = strconv.FormatInt(*v.ChangeBlockSizeInBytes, 10) + } + + if v.FirstBackupId != nil { + result["first_backup_id"] = string(*v.FirstBackupId) + } + + if v.SecondBackupId != nil { + result["second_backup_id"] = string(*v.SecondBackupId) + } case oci_core.BootVolumeSourceFromBootVolumeReplicaDetails: result["type"] = "bootVolumeReplica" diff --git a/internal/service/core/core_volume_resource.go b/internal/service/core/core_volume_resource.go index f8bb1c9c3b3..025d251ee8a 100644 --- a/internal/service/core/core_volume_resource.go +++ b/internal/service/core/core_volume_resource.go @@ -171,11 +171,6 @@ func CoreVolumeResource() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ // Required - "id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, "type": { Type: schema.TypeString, Required: true, @@ -185,10 +180,37 @@ func CoreVolumeResource() *schema.Resource { "blockVolumeReplica", "volume", "volumeBackup", + "volumeBackupDelta", }, true), }, // Optional + "change_block_size_in_bytes": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + ValidateFunc: tfresource.ValidateInt64TypeString, + DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, + }, + "first_backup_id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, + "id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, + "second_backup_id": { + Type: schema.TypeString, + Optional: true, + Computed: false, + ForceNew: true, + }, // Computed }, @@ -828,6 +850,25 @@ func (s *CoreVolumeResourceCrud) mapToVolumeSourceDetails(fieldKeyFormat string) details.Id = &tmp } baseObject = details + case strings.ToLower("volumeBackupDelta"): + details := oci_core.VolumeSourceFromVolumeBackupDeltaDetails{} + if changeBlockSizeInBytes, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "change_block_size_in_bytes")); ok { + tmp := changeBlockSizeInBytes.(string) + tmpInt64, err := strconv.ParseInt(tmp, 10, 64) + if err != nil { + return details, fmt.Errorf("unable to convert changeBlockSizeInBytes string: %s to an int64 and encountered error: %v", tmp, err) + } + details.ChangeBlockSizeInBytes = &tmpInt64 + } + if firstBackupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "first_backup_id")); ok { + tmp := firstBackupId.(string) + details.FirstBackupId = &tmp + } + if secondBackupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "second_backup_id")); ok { + tmp := secondBackupId.(string) + details.SecondBackupId = &tmp + } + baseObject = details default: return nil, fmt.Errorf("unknown type '%v' was specified", type_) } @@ -855,6 +896,20 @@ func VolumeSourceDetailsToMap(obj *oci_core.VolumeSourceDetails) map[string]inte if v.Id != nil { result["id"] = string(*v.Id) } + case oci_core.VolumeSourceFromVolumeBackupDeltaDetails: + result["type"] = "volumeBackupDelta" + + if v.ChangeBlockSizeInBytes != nil { + result["change_block_size_in_bytes"] = strconv.FormatInt(*v.ChangeBlockSizeInBytes, 10) + } + + if v.FirstBackupId != nil { + result["first_backup_id"] = string(*v.FirstBackupId) + } + + if v.SecondBackupId != nil { + result["second_backup_id"] = string(*v.SecondBackupId) + } default: log.Printf("[WARN] Received 'type' of unknown type %v", *obj) return nil diff --git a/website/docs/d/core_boot_volume.html.markdown b/website/docs/d/core_boot_volume.html.markdown index b8d66a3e2fa..111baff141d 100644 --- a/website/docs/d/core_boot_volume.html.markdown +++ b/website/docs/d/core_boot_volume.html.markdown @@ -54,8 +54,11 @@ The following attributes are exported: * `size_in_gbs` - The size of the boot volume in GBs. * `size_in_mbs` - The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`. * `source_details` - + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first boot volume backup. * `id` - The OCID of the boot volume replica. - * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica` + * `second_backup_id` - The OCID of the second boot volume backup. + * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeBackupDelta`, `bootVolumeReplica` * `state` - The current state of a boot volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the boot volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/d/core_boot_volumes.html.markdown b/website/docs/d/core_boot_volumes.html.markdown index 24772f67f73..a735125ea00 100644 --- a/website/docs/d/core_boot_volumes.html.markdown +++ b/website/docs/d/core_boot_volumes.html.markdown @@ -66,8 +66,11 @@ The following attributes are exported: * `size_in_gbs` - The size of the boot volume in GBs. * `size_in_mbs` - The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`. * `source_details` - + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first boot volume backup. * `id` - The OCID of the boot volume replica. - * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica` + * `second_backup_id` - The OCID of the second boot volume backup. + * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeBackupDelta`, `bootVolumeReplica` * `state` - The current state of a boot volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the boot volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/d/core_volume.html.markdown b/website/docs/d/core_volume.html.markdown index fae45b710a6..150ba8009ef 100644 --- a/website/docs/d/core_volume.html.markdown +++ b/website/docs/d/core_volume.html.markdown @@ -51,10 +51,13 @@ The following attributes are exported: * `is_hydrated` - Specifies whether the cloned volume's data has finished copying from the source volume or backup. * `kms_key_id` - The OCID of the Vault service key which is the master encryption key for the volume. * `size_in_gbs` - The size of the volume in GBs. -* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use sizeInGBs instead. -* `source_details` - - * `id` - The OCID of the block volume replica. - * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup` +* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use sizeInGBs instead. +* `source_details` - Specifies the volume source details for a new Block volume. The volume source is either another Block volume in the same Availability Domain or a Block volume backup. This is an optional field. If not specified or set to null, the new Block volume will be empty. When specified, the new Block volume will contain data from the source volume or backup. + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first volume backup. + * `id` - The OCID of the block volume replica. + * `second_backup_id` - The OCID of the second volume backup. + * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`, `volumeBackupDelta` * `state` - The current state of a volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/d/core_volumes.html.markdown b/website/docs/d/core_volumes.html.markdown index 1e2bf29211e..7aaabf1244e 100644 --- a/website/docs/d/core_volumes.html.markdown +++ b/website/docs/d/core_volumes.html.markdown @@ -69,10 +69,13 @@ The following attributes are exported: * `is_hydrated` - Specifies whether the cloned volume's data has finished copying from the source volume or backup. * `kms_key_id` - The OCID of the Vault service key which is the master encryption key for the volume. * `size_in_gbs` - The size of the volume in GBs. -* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use `size_in_gbs` instead. -* `source_details` - - * `id` - The OCID of the block volume replica. - * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup` +* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use sizeInGBs instead. +* `source_details` - Specifies the volume source details for a new Block volume. The volume source is either another Block volume in the same Availability Domain or a Block volume backup. This is an optional field. If not specified or set to null, the new Block volume will be empty. When specified, the new Block volume will contain data from the source volume or backup. + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first volume backup. + * `id` - The OCID of the block volume replica. + * `second_backup_id` - The OCID of the second volume backup. + * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`, `volumeBackupDelta` * `state` - The current state of a volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/r/core_boot_volume.html.markdown b/website/docs/r/core_boot_volume.html.markdown index eccfcedc5b5..63076a006ab 100644 --- a/website/docs/r/core_boot_volume.html.markdown +++ b/website/docs/r/core_boot_volume.html.markdown @@ -24,8 +24,13 @@ resource "oci_core_boot_volume" "test_boot_volume" { compartment_id = var.compartment_id source_details { #Required - id = var.boot_volume_source_details_id type = var.boot_volume_source_details_type + + #Optional + change_block_size_in_bytes = var.boot_volume_source_details_change_block_size_in_bytes + first_backup_id = oci_database_backup.test_backup.id + id = var.boot_volume_source_details_id + second_backup_id = oci_database_backup.test_backup.id } #Optional @@ -78,8 +83,11 @@ The following arguments are supported: * `kms_key_id` - (Optional) (Updatable) The OCID of the Vault service key to assign as the master encryption key for the boot volume. * `size_in_gbs` - (Optional) (Updatable) The size of the volume in GBs. * `source_details` - (Required) - * `id` - (Required) The OCID of the boot volume replica. - * `type` - (Required) The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica` + * `change_block_size_in_bytes` - (Applicable when type=bootVolumeBackupDelta) Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - (Required when type=bootVolumeBackupDelta) The OCID of the first boot volume backup. + * `id` - (Required when type=bootVolume | bootVolumeBackup | bootVolumeReplica) The OCID of the boot volume replica. + * `second_backup_id` - (Required when type=bootVolumeBackupDelta) The OCID of the second boot volume backup. + * `type` - (Required) The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeBackupDelta`, `bootVolumeReplica` * `vpus_per_gb` - (Optional) (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information. Allowed values: @@ -119,8 +127,11 @@ The following attributes are exported: * `size_in_gbs` - The size of the boot volume in GBs. * `size_in_mbs` - The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Please use `size_in_gbs`. * `source_details` - + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first boot volume backup. * `id` - The OCID of the boot volume replica. - * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeReplica` + * `second_backup_id` - The OCID of the second boot volume backup. + * `type` - The type can be one of these values: `bootVolume`, `bootVolumeBackup`, `bootVolumeBackupDelta`, `bootVolumeReplica` * `state` - The current state of a boot volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the boot volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/r/core_volume.html.markdown b/website/docs/r/core_volume.html.markdown index baebf9bd006..bb76fa63947 100644 --- a/website/docs/r/core_volume.html.markdown +++ b/website/docs/r/core_volume.html.markdown @@ -60,8 +60,13 @@ resource "oci_core_volume" "test_volume" { size_in_mbs = var.volume_size_in_mbs source_details { #Required - id = var.volume_source_details_id type = var.volume_source_details_type + + #Optional + change_block_size_in_bytes = var.volume_source_details_change_block_size_in_bytes + first_backup_id = oci_database_backup.test_backup.id + id = var.volume_source_details_id + second_backup_id = oci_database_backup.test_backup.id } vpus_per_gb = var.volume_vpus_per_gb block_volume_replicas_deletion = true @@ -88,10 +93,13 @@ The following arguments are supported: * `is_auto_tune_enabled` - (Optional) (Updatable) Specifies whether the auto-tune performance is enabled for this volume. This field is deprecated. Use the `DetachedVolumeAutotunePolicy` instead to enable the volume for detached autotune. * `kms_key_id` - (Optional) (Updatable) The OCID of the Vault service key to assign as the master encryption key for the volume. * `size_in_gbs` - (Optional) (Updatable) The size of the volume in GBs. -* `size_in_mbs` - (Optional) The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Use `size_in_gbs` instead. -* `source_details` - (Optional) - * `id` - (Required) The OCID of the block volume replica. - * `type` - (Required) The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup` +* `size_in_mbs` - (Optional) The size of the volume in MBs. The value must be a multiple of 1024. This field is deprecated. Use sizeInGBs instead. +* `source_details` - (Optional) Specifies the volume source details for a new Block volume. The volume source is either another Block volume in the same Availability Domain or a Block volume backup. This is an optional field. If not specified or set to null, the new Block volume will be empty. When specified, the new Block volume will contain data from the source volume or backup. + * `change_block_size_in_bytes` - (Applicable when type=volumeBackupDelta) Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - (Required when type=volumeBackupDelta) The OCID of the first volume backup. + * `id` - (Required when type=blockVolumeReplica | volume | volumeBackup) The OCID of the block volume replica. + * `second_backup_id` - (Required when type=volumeBackupDelta) The OCID of the second volume backup. + * `type` - (Required) The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`, `volumeBackupDelta` * `volume_backup_id` - (Optional) The OCID of the volume backup from which the data should be restored on the newly created volume. This field is deprecated. Use the sourceDetails field instead to specify the backup for the volume. * `vpus_per_gb` - (Optional) (Updatable) The number of volume performance units (VPUs) that will be applied to this volume per GB, representing the Block Volume service's elastic performance options. See [Block Volume Performance Levels](https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/blockvolumeperformance.htm#perf_levels) for more information. @@ -130,10 +138,13 @@ The following attributes are exported: * `is_hydrated` - Specifies whether the cloned volume's data has finished copying from the source volume or backup. * `kms_key_id` - The OCID of the Vault service key which is the master encryption key for the volume. * `size_in_gbs` - The size of the volume in GBs. -* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use `size_in_gbs` instead. -* `source_details` - - * `id` - The OCID of the block volume replica. - * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup` +* `size_in_mbs` - The size of the volume in MBs. This field is deprecated. Use sizeInGBs instead. +* `source_details` - + * `change_block_size_in_bytes` - Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + * `first_backup_id` - The OCID of the first volume backup. + * `id` - The OCID of the block volume replica or volume backup. + * `second_backup_id` - The OCID of the second volume backup. + * `type` - The type can be one of these values: `blockVolumeReplica`, `volume`, `volumeBackup`, `volumeBackupDelta` * `state` - The current state of a volume. * `system_tags` - System tags for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `time_created` - The date and time the volume was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). From d890f69e1fc39b755eeb83099a9055deb759588e Mon Sep 17 00:00:00 2001 From: James Kiselak Date: Tue, 12 Sep 2023 12:20:52 -0400 Subject: [PATCH 16/31] Added - Support for DNSSEC --- examples/dns/dnssec/provider.tf | 33 ++ examples/dns/dnssec/zone.tf | 83 +++++ examples/dns/global/zone.tf | 14 + .../integrationtest/dns_zone_dnssec_test.go | 107 ++++++ ...ns_zone_promote_dnssec_key_version_test.go | 68 ++++ .../dns_zone_stage_dnssec_key_version_test.go | 80 ++++ internal/integrationtest/dns_zone_test.go | 11 +- ...ion_create_zone_from_zone_file_resource.go | 176 +++++++++ ...one_promote_dnssec_key_version_resource.go | 119 ++++++ internal/service/dns/dns_zone_resource.go | 345 ++++++++++++++++++ ..._zone_stage_dnssec_key_version_resource.go | 119 ++++++ internal/service/dns/dns_zones_data_source.go | 16 + internal/service/dns/register_resource.go | 2 + website/docs/d/dns_records.html.markdown | 22 +- website/docs/d/dns_resolver.html.markdown | 7 +- .../d/dns_resolver_endpoint.html.markdown | 7 +- .../d/dns_resolver_endpoints.html.markdown | 2 +- website/docs/d/dns_resolvers.html.markdown | 12 +- website/docs/d/dns_rrset.html.markdown | 20 +- website/docs/d/dns_rrsets.html.markdown | 13 +- .../d/dns_steering_policies.html.markdown | 2 +- .../docs/d/dns_steering_policy.html.markdown | 2 +- website/docs/d/dns_view.html.markdown | 6 +- website/docs/d/dns_views.html.markdown | 12 +- website/docs/d/dns_zones.html.markdown | 91 ++++- ...n_create_zone_from_zone_file.html.markdown | 2 +- website/docs/r/dns_record.html.markdown | 14 +- website/docs/r/dns_resolver.html.markdown | 5 +- .../r/dns_resolver_endpoint.html.markdown | 2 +- website/docs/r/dns_rrset.html.markdown | 22 +- .../docs/r/dns_steering_policy.html.markdown | 4 +- website/docs/r/dns_zone.html.markdown | 100 ++++- ...e_promote_dnssec_key_version.html.markdown | 66 ++++ ...one_stage_dnssec_key_version.html.markdown | 61 ++++ 34 files changed, 1553 insertions(+), 92 deletions(-) create mode 100644 examples/dns/dnssec/provider.tf create mode 100644 examples/dns/dnssec/zone.tf create mode 100644 internal/integrationtest/dns_zone_dnssec_test.go create mode 100644 internal/integrationtest/dns_zone_promote_dnssec_key_version_test.go create mode 100644 internal/integrationtest/dns_zone_stage_dnssec_key_version_test.go create mode 100644 internal/service/dns/dns_zone_promote_dnssec_key_version_resource.go create mode 100644 internal/service/dns/dns_zone_stage_dnssec_key_version_resource.go create mode 100644 website/docs/r/dns_zone_promote_dnssec_key_version.html.markdown create mode 100644 website/docs/r/dns_zone_stage_dnssec_key_version.html.markdown diff --git a/examples/dns/dnssec/provider.tf b/examples/dns/dnssec/provider.tf new file mode 100644 index 00000000000..bb3802a42bc --- /dev/null +++ b/examples/dns/dnssec/provider.tf @@ -0,0 +1,33 @@ +// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * Provider config for dns sample + */ + +variable "tenancy_ocid" { +} + +variable "user_ocid" { +} + +variable "fingerprint" { +} + +variable "private_key_path" { +} + +variable "compartment_ocid" { +} + +variable "region" { +} + +provider "oci" { + region = var.region + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path +} + diff --git a/examples/dns/dnssec/zone.tf b/examples/dns/dnssec/zone.tf new file mode 100644 index 00000000000..cc3f9888559 --- /dev/null +++ b/examples/dns/dnssec/zone.tf @@ -0,0 +1,83 @@ +// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +/* + * This file demonstrates initial setup of a dnssec enabled zone when the zone's + * parent zone is in OCI. It does not demonstrate setting up dnssec for the parent + * zone or handle rotating the dnssec key versions. + */ + +resource "random_string" "random_prefix" { + length = 4 + numeric = false + special = false +} + +resource "oci_dns_zone" "dnssec_parent_zone" { + compartment_id = var.compartment_ocid + name = "${data.oci_identity_tenancy.tenancy.name}-${random_string.random_prefix.result}-tf-example-dnssec-parent.oci-dns" + zone_type = "PRIMARY" + scope = "GLOBAL" + dnssec_state = "ENABLED" +} + +resource "oci_dns_zone" "dnssec_child_zone" { + compartment_id = var.compartment_ocid + name = "child.${oci_dns_zone.dnssec_parent_zone.name}" + zone_type = "PRIMARY" + scope = "GLOBAL" + dnssec_state = "ENABLED" +} + +resource "oci_dns_rrset" "parent_zone_ns_rrset" { + zone_name_or_id = oci_dns_zone.dnssec_parent_zone.id + domain = oci_dns_zone.dnssec_child_zone.name + rtype = "NS" + + items { + domain = oci_dns_zone.dnssec_child_zone.name + rtype = "NS" + rdata = oci_dns_zone.dnssec_child_zone.nameservers[0].hostname + ttl = 86400 + } +} + +locals { + ksk = oci_dns_zone.dnssec_child_zone.dnssec_config[0].ksk_dnssec_key_versions[0] +} + +resource "oci_dns_rrset" "parent_zone_ds_rrset" { + zone_name_or_id = oci_dns_zone.dnssec_parent_zone.id + domain = oci_dns_zone.dnssec_child_zone.name + rtype = "DS" + + items { + domain = oci_dns_zone.dnssec_child_zone.name + rtype = "DS" + rdata = local.ksk.ds_data[0].rdata + ttl = 86400 + } + + lifecycle { + ignore_changes = [ + items, + ] + } +} + +resource "oci_dns_zone_promote_dnssec_key_version" "promote_dnssec_key_version" { + dnssec_key_version_uuid = local.ksk.uuid + zone_id = oci_dns_zone.dnssec_child_zone.id + scope = "GLOBAL" + depends_on = [oci_dns_rrset.parent_zone_ds_rrset] + lifecycle { + ignore_changes = [ + dnssec_key_version_uuid, + ] + } +} + +data "oci_identity_tenancy" "tenancy" { + tenancy_id = var.tenancy_ocid +} + diff --git a/examples/dns/global/zone.tf b/examples/dns/global/zone.tf index 555ad57bb3e..bc3160d5b3f 100644 --- a/examples/dns/global/zone.tf +++ b/examples/dns/global/zone.tf @@ -46,6 +46,20 @@ resource "oci_dns_zone" "zone3" { zone_type = "PRIMARY" } +resource "oci_dns_zone" "zone4" { + compartment_id = var.compartment_ocid + name = "${data.oci_identity_tenancy.tenancy.name}-${random_string.random_prefix.result}-tf-example-primary.oci-dns4" + zone_type = "PRIMARY" + scope = "GLOBAL" + dnssec_state = "ENABLED" +} + +resource "oci_dns_zone_stage_dnssec_key_version" "stage_dnssec_key_version" { + predecessor_dnssec_key_version_uuid = oci_dns_zone.zone4.dnssec_config[0].zsk_dnssec_key_versions[0].uuid + zone_id = oci_dns_zone.zone4.id + scope = "GLOBAL" +} + data "oci_dns_zones" "zs" { compartment_id = var.compartment_ocid name_contains = "example" diff --git a/internal/integrationtest/dns_zone_dnssec_test.go b/internal/integrationtest/dns_zone_dnssec_test.go new file mode 100644 index 00000000000..b274e720457 --- /dev/null +++ b/internal/integrationtest/dns_zone_dnssec_test.go @@ -0,0 +1,107 @@ +// Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + zoneRepresentationGlobal = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "name": acctest.Representation{RepType: acctest.Required, + Create: `${data.oci_identity_tenancy.test_tenancy.name}.{{.token}}.stage-dnssec-key-version-test`}, + "zone_type": acctest.Representation{RepType: acctest.Required, Create: `PRIMARY`}, + "scope": acctest.Representation{RepType: acctest.Required, Create: `GLOBAL`}, + } + + ZoneResourceDnssecDependencies = ` + data "oci_identity_tenancy" "test_tenancy" { + tenancy_id = "${var.tenancy_ocid}" + } + ` +) + +func TestDnsZoneResourceDnssec(t *testing.T) { + httpreplay.SetScenario("TestDnsZoneResourceDnssec") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_dns_zone.test_zone" + + _, tokenFn := acctest.TokenizeWithHttpReplay("dns_zone") + + acctest.ResourceTest(t, testAccCheckDnsZoneDestroy, []resource.TestStep{ + // create a zone with DNSSEC disabled + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneResourceDnssecDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", "test_zone", acctest.Required, + acctest.Create, zoneRepresentationGlobal), nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "dnssec_state", "DISABLED"), + ), + }, + + // verify enabling DNSSEC + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneResourceDnssecDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", "test_zone", acctest.Optional, + acctest.Update, acctest.RepresentationCopyWithNewProperties(zoneRepresentationGlobal, + map[string]interface{}{ + "dnssec_state": acctest.Representation{RepType: acctest.Optional, + Create: `ENABLED`}, + })), nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "dnssec_state", "ENABLED"), + resource.TestCheckResourceAttr(resourceName, "dnssec_config.0.zsk_dnssec_key_versions.#", "1"), + resource.TestCheckResourceAttr(resourceName, "dnssec_config.0.ksk_dnssec_key_versions.#", "1"), + ), + }, + + // delete before next Create + { + Config: tokenFn(config+compartmentIdVariableStr, nil), + }, + + // verify zone creation with DNSSEC enabled + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneResourceDnssecDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", "test_zone", acctest.Optional, acctest.Create, + acctest.RepresentationCopyWithNewProperties(zoneRepresentationGlobal, map[string]interface{}{ + "dnssec_state": acctest.Representation{RepType: acctest.Required, + Create: `ENABLED`}, + })), nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "dnssec_state", "ENABLED"), + resource.TestCheckResourceAttr(resourceName, "dnssec_config.0.zsk_dnssec_key_versions.#", "1"), + resource.TestCheckResourceAttr(resourceName, "dnssec_config.0.ksk_dnssec_key_versions.#", "1"), + ), + }, + + // verify disabling DNSSEC + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneResourceDnssecDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", "test_zone", acctest.Optional, + acctest.Update, acctest.RepresentationCopyWithNewProperties(zoneRepresentationGlobal, + map[string]interface{}{ + "dnssec_state": acctest.Representation{RepType: acctest.Optional, + Create: `DISABLED`}, + })), nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "dnssec_state", "DISABLED"), + ), + }, + }) +} diff --git a/internal/integrationtest/dns_zone_promote_dnssec_key_version_test.go b/internal/integrationtest/dns_zone_promote_dnssec_key_version_test.go new file mode 100644 index 00000000000..de2d9f7f7d6 --- /dev/null +++ b/internal/integrationtest/dns_zone_promote_dnssec_key_version_test.go @@ -0,0 +1,68 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + ZonePromoteDnssecKeyVersionResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", + "test_dnssec_zone", acctest.Required, acctest.Create, zoneRepresentationDnssec) + + DefinedTagsDependencies + ` + data "oci_identity_tenancy" "test_tenancy" { + tenancy_id = "${var.tenancy_ocid}" + } + ` +) + +// issue-routing-tag: dns/default +func TestDnsZonePromoteDnssecKeyVersionResource_basic(t *testing.T) { + httpreplay.SetScenario("TestDnsZonePromoteDnssecKeyVersionResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_dns_zone.test_dnssec_zone" + + _, tokenFn := acctest.TokenizeWithHttpReplay("dns_resource") + + acctest.ResourceTest(t, nil, []resource.TestStep{ + + // Create a dnssec enabled zone + { + Config: tokenFn(config+compartmentIdVariableStr+ZonePromoteDnssecKeyVersionResourceDependencies, nil), + }, + + // Promote the staged KSK version + { + Config: tokenFn(config+compartmentIdVariableStr+ZonePromoteDnssecKeyVersionResourceDependencies+` + resource "oci_dns_zone_promote_dnssec_key_version" "test_zone_promote_dnssec_key_version" { + zone_id = oci_dns_zone.test_dnssec_zone.id + dnssec_key_version_uuid = oci_dns_zone.test_dnssec_zone.dnssec_config[0].ksk_dnssec_key_versions[0].uuid + scope = "GLOBAL" + } + `, nil), + }, + + // Validate that the KSK key version's time_promoted was updated. + // This requires a separate step because it requires a refresh of the/zone resource. + { + Config: tokenFn(config+compartmentIdVariableStr+ZonePromoteDnssecKeyVersionResourceDependencies, nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "dnssec_config.0.ksk_dnssec_key_versions.0.time_promoted"), + ), + }, + }) +} diff --git a/internal/integrationtest/dns_zone_stage_dnssec_key_version_test.go b/internal/integrationtest/dns_zone_stage_dnssec_key_version_test.go new file mode 100644 index 00000000000..907b3190dfd --- /dev/null +++ b/internal/integrationtest/dns_zone_stage_dnssec_key_version_test.go @@ -0,0 +1,80 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + zoneRepresentationDnssec = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + "name": acctest.Representation{RepType: acctest.Required, + Create: `${data.oci_identity_tenancy.test_tenancy.name}.{{.token}}.stage-dnssec-key-version-test`}, + "zone_type": acctest.Representation{RepType: acctest.Required, Create: `PRIMARY`}, + "scope": acctest.Representation{RepType: acctest.Required, Create: `GLOBAL`}, + "dnssec_state": acctest.Representation{RepType: acctest.Required, Create: `ENABLED`}, + } + + ZoneStageDnssecKeyVersionResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_dns_zone", + "test_dnssec_zone", acctest.Required, acctest.Create, zoneRepresentationDnssec) + + DefinedTagsDependencies + ` + data "oci_identity_tenancy" "test_tenancy" { + tenancy_id = "${var.tenancy_ocid}" + } + ` +) + +// issue-routing-tag: dns/default +func TestDnsZoneStageDnssecKeyVersionResource_basic(t *testing.T) { + httpreplay.SetScenario("TestDnsZoneStageDnssecKeyVersionResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_dns_zone.test_dnssec_zone" + + _, tokenFn := acctest.TokenizeWithHttpReplay("dns_resource") + + acctest.ResourceTest(t, nil, []resource.TestStep{ + + // Create a dnssec enabled zone + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneStageDnssecKeyVersionResourceDependencies, nil), + }, + + // Stage a replacement ZSK version + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneStageDnssecKeyVersionResourceDependencies+` + locals { + predecessor_uuid = length(oci_dns_zone.test_dnssec_zone.dnssec_config[0].zsk_dnssec_key_versions) == 1 ? oci_dns_zone.test_dnssec_zone.dnssec_config[0].zsk_dnssec_key_versions[0].uuid : [ for zsk in oci_dns_zone.test_dnssec_zone.dnssec_config[0].zsk_dnssec_key_versions : zsk if zsk.successor_dnssec_key_version_uuid != ""][0].uuid + } + resource "oci_dns_zone_stage_dnssec_key_version" "test_zone_stage_dnssec_key_version" { + zone_id = oci_dns_zone.test_dnssec_zone.id + predecessor_dnssec_key_version_uuid = local.predecessor_uuid + scope = "GLOBAL" + } + `, nil), + }, + + // Validate that a second ZSK key version was added to the dnssec configuration. + // This requires a separate step because it requires a refresh of the zone resource. + { + Config: tokenFn(config+compartmentIdVariableStr+ZoneStageDnssecKeyVersionResourceDependencies, nil), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "dnssec_config.0.zsk_dnssec_key_versions.#", "2"), + ), + }, + }) +} diff --git a/internal/integrationtest/dns_zone_test.go b/internal/integrationtest/dns_zone_test.go index 97515407e14..027cf911ea3 100644 --- a/internal/integrationtest/dns_zone_test.go +++ b/internal/integrationtest/dns_zone_test.go @@ -11,12 +11,6 @@ import ( "testing" "time" - "github.com/oracle/terraform-provider-oci/internal/acctest" - tf_client "github.com/oracle/terraform-provider-oci/internal/client" - "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" - "github.com/oracle/terraform-provider-oci/internal/tfresource" - "github.com/oracle/terraform-provider-oci/internal/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" @@ -24,6 +18,11 @@ import ( oci_dns "github.com/oracle/oci-go-sdk/v65/dns" "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + tf_client "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + "github.com/oracle/terraform-provider-oci/internal/tfresource" + "github.com/oracle/terraform-provider-oci/internal/utils" ) var ( diff --git a/internal/service/dns/dns_action_create_zone_from_zone_file_resource.go b/internal/service/dns/dns_action_create_zone_from_zone_file_resource.go index 87282aa90e0..d435fbd3c46 100644 --- a/internal/service/dns/dns_action_create_zone_from_zone_file_resource.go +++ b/internal/service/dns/dns_action_create_zone_from_zone_file_resource.go @@ -59,6 +59,174 @@ func DnsActionCreateZoneFromZoneFileResource() *schema.Resource { Computed: true, Elem: schema.TypeString, }, + "dnssec_config": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "ksk_dnssec_key_versions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "algorithm": { + Type: schema.TypeString, + Computed: true, + }, + "ds_data": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "digest_type": { + Type: schema.TypeString, + Computed: true, + }, + "rdata": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "key_tag": { + Type: schema.TypeInt, + Computed: true, + }, + "length_in_bytes": { + Type: schema.TypeInt, + Computed: true, + }, + "predecessor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "successor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "time_activated": { + Type: schema.TypeString, + Computed: true, + }, + "time_created": { + Type: schema.TypeString, + Computed: true, + }, + "time_expired": { + Type: schema.TypeString, + Computed: true, + }, + "time_inactivated": { + Type: schema.TypeString, + Computed: true, + }, + "time_promoted": { + Type: schema.TypeString, + Computed: true, + }, + "time_published": { + Type: schema.TypeString, + Computed: true, + }, + "time_unpublished": { + Type: schema.TypeString, + Computed: true, + }, + "uuid": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "zsk_dnssec_key_versions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "algorithm": { + Type: schema.TypeString, + Computed: true, + }, + "key_tag": { + Type: schema.TypeInt, + Computed: true, + }, + "length_in_bytes": { + Type: schema.TypeInt, + Computed: true, + }, + "predecessor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "successor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "time_activated": { + Type: schema.TypeString, + Computed: true, + }, + "time_created": { + Type: schema.TypeString, + Computed: true, + }, + "time_expired": { + Type: schema.TypeString, + Computed: true, + }, + "time_inactivated": { + Type: schema.TypeString, + Computed: true, + }, + "time_promoted": { + Type: schema.TypeString, + Computed: true, + }, + "time_published": { + Type: schema.TypeString, + Computed: true, + }, + "time_unpublished": { + Type: schema.TypeString, + Computed: true, + }, + "uuid": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + }, + "dnssec_state": { + Type: schema.TypeString, + Computed: true, + }, "external_downstreams": { Type: schema.TypeList, Computed: true, @@ -315,6 +483,14 @@ func (s *DnsActionCreateZoneFromZoneFileResourceCrud) SetData() error { s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags)) } + if s.Res.DnssecConfig != nil { + s.D.Set("dnssec_config", []interface{}{DnssecConfigToMap(s.Res.DnssecConfig)}) + } else { + s.D.Set("dnssec_config", nil) + } + + s.D.Set("dnssec_state", s.Res.DnssecState) + externalDownstreams := []interface{}{} for _, item := range s.Res.ExternalDownstreams { externalDownstreams = append(externalDownstreams, ExternalDownstreamToMap(item)) diff --git a/internal/service/dns/dns_zone_promote_dnssec_key_version_resource.go b/internal/service/dns/dns_zone_promote_dnssec_key_version_resource.go new file mode 100644 index 00000000000..e6a81204b93 --- /dev/null +++ b/internal/service/dns/dns_zone_promote_dnssec_key_version_resource.go @@ -0,0 +1,119 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package dns + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + oci_dns "github.com/oracle/oci-go-sdk/v65/dns" + oci_work_requests "github.com/oracle/oci-go-sdk/v65/workrequests" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func DnsZonePromoteDnssecKeyVersionResource() *schema.Resource { + return &schema.Resource{ + Timeouts: tfresource.DefaultTimeout, + Create: createDnsZonePromoteDnssecKeyVersion, + Read: readDnsZonePromoteDnssecKeyVersion, + Delete: deleteDnsZonePromoteDnssecKeyVersion, + Schema: map[string]*schema.Schema{ + // Required + "dnssec_key_version_uuid": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "zone_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + // Optional + "scope": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + + // Computed + }, + } +} + +func createDnsZonePromoteDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + sync := &DnsZonePromoteDnssecKeyVersionResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).DnsClient() + sync.WorkRequestClient = m.(*client.OracleClients).WorkRequestClient + + return tfresource.CreateResource(d, sync) +} + +func readDnsZonePromoteDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + return nil +} + +func deleteDnsZonePromoteDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + return nil +} + +type DnsZonePromoteDnssecKeyVersionResourceCrud struct { + tfresource.BaseCrud + Client *oci_dns.DnsClient + DisableNotFoundRetries bool + WorkRequestClient *oci_work_requests.WorkRequestClient +} + +func (s *DnsZonePromoteDnssecKeyVersionResourceCrud) ID() string { + return s.D.Id() +} + +func (s *DnsZonePromoteDnssecKeyVersionResourceCrud) Create() error { + request := oci_dns.PromoteZoneDnssecKeyVersionRequest{} + + if dnssecKeyVersionUuid, ok := s.D.GetOkExists("dnssec_key_version_uuid"); ok { + tmp := dnssecKeyVersionUuid.(string) + request.DnssecKeyVersionUuid = &tmp + } + + if scope, ok := s.D.GetOkExists("scope"); ok { + request.Scope = oci_dns.PromoteZoneDnssecKeyVersionScopeEnum(scope.(string)) + } + + if zoneId, ok := s.D.GetOkExists("zone_id"); ok { + tmp := zoneId.(string) + request.ZoneId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "dns") + + response, err := s.Client.PromoteZoneDnssecKeyVersion(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + + if workId != nil { + _, err := tfresource.WaitForWorkRequestWithErrorHandling(s.WorkRequestClient, workId, "zone", + oci_work_requests.WorkRequestResourceActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries) + if err != nil { + return err + } + } + s.D.SetId(fmt.Sprintf("%s-%s", *request.ZoneId, *request.DnssecKeyVersionUuid)) + + return nil +} + +func (s *DnsZonePromoteDnssecKeyVersionResourceCrud) SetData() error { + return nil +} diff --git a/internal/service/dns/dns_zone_resource.go b/internal/service/dns/dns_zone_resource.go index f2db0ff6f82..59d480520e6 100644 --- a/internal/service/dns/dns_zone_resource.go +++ b/internal/service/dns/dns_zone_resource.go @@ -58,6 +58,11 @@ func DnsZoneResource() *schema.Resource { DiffSuppressFunc: tfresource.DefinedTagsDiffSuppressFunction, Elem: schema.TypeString, }, + "dnssec_state": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, "external_downstreams": { Type: schema.TypeList, Optional: true, @@ -133,6 +138,170 @@ func DnsZoneResource() *schema.Resource { }, // Computed + "dnssec_config": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "ksk_dnssec_key_versions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "algorithm": { + Type: schema.TypeString, + Computed: true, + }, + "ds_data": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "digest_type": { + Type: schema.TypeString, + Computed: true, + }, + "rdata": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "key_tag": { + Type: schema.TypeInt, + Computed: true, + }, + "length_in_bytes": { + Type: schema.TypeInt, + Computed: true, + }, + "predecessor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "successor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "time_activated": { + Type: schema.TypeString, + Computed: true, + }, + "time_created": { + Type: schema.TypeString, + Computed: true, + }, + "time_expired": { + Type: schema.TypeString, + Computed: true, + }, + "time_inactivated": { + Type: schema.TypeString, + Computed: true, + }, + "time_promoted": { + Type: schema.TypeString, + Computed: true, + }, + "time_published": { + Type: schema.TypeString, + Computed: true, + }, + "time_unpublished": { + Type: schema.TypeString, + Computed: true, + }, + "uuid": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "zsk_dnssec_key_versions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "algorithm": { + Type: schema.TypeString, + Computed: true, + }, + "key_tag": { + Type: schema.TypeInt, + Computed: true, + }, + "length_in_bytes": { + Type: schema.TypeInt, + Computed: true, + }, + "predecessor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "successor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Computed: true, + }, + "time_activated": { + Type: schema.TypeString, + Computed: true, + }, + "time_created": { + Type: schema.TypeString, + Computed: true, + }, + "time_expired": { + Type: schema.TypeString, + Computed: true, + }, + "time_inactivated": { + Type: schema.TypeString, + Computed: true, + }, + "time_promoted": { + Type: schema.TypeString, + Computed: true, + }, + "time_published": { + Type: schema.TypeString, + Computed: true, + }, + "time_unpublished": { + Type: schema.TypeString, + Computed: true, + }, + "uuid": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + }, "is_protected": { Type: schema.TypeBool, Computed: true, @@ -285,6 +454,18 @@ func (s *DnsZoneResourceCrud) DeletedTarget() []string { } } +func (s *DnsZoneResourceCrud) UpdatedPending() []string { + return []string{ + string(oci_dns.ZoneLifecycleStateUpdating), + } +} + +func (s *DnsZoneResourceCrud) UpdatedTarget() []string { + return []string{ + string(oci_dns.ZoneLifecycleStateActive), + } +} + func (s *DnsZoneResourceCrud) Create() error { request := oci_dns.CreateZoneRequest{} createZoneDetailsRequest := oci_dns.CreateZoneDetails{} @@ -301,6 +482,10 @@ func (s *DnsZoneResourceCrud) Create() error { createZoneDetailsRequest.DefinedTags = convertedDefinedTags } + if dnssecState, ok := s.D.GetOkExists("dnssec_state"); ok { + createZoneDetailsRequest.DnssecState = oci_dns.ZoneDnssecStateEnum(dnssecState.(string)) + } + if externalDownstreams, ok := s.D.GetOkExists("external_downstreams"); ok { interfaces := externalDownstreams.([]interface{}) tmp := make([]oci_dns.ExternalDownstream, len(interfaces)) @@ -440,6 +625,10 @@ func (s *DnsZoneResourceCrud) Update() error { request.DefinedTags = convertedDefinedTags } + if dnssecState, ok := s.D.GetOkExists("dnssec_state"); ok { + request.DnssecState = oci_dns.ZoneDnssecStateEnum(dnssecState.(string)) + } + if externalDownstreams, ok := s.D.GetOkExists("external_downstreams"); ok { interfaces := externalDownstreams.([]interface{}) tmp := make([]oci_dns.ExternalDownstream, len(interfaces)) @@ -538,6 +727,14 @@ func (s *DnsZoneResourceCrud) SetData() error { s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags)) } + if s.Res.DnssecConfig != nil { + s.D.Set("dnssec_config", []interface{}{DnssecConfigToMap(s.Res.DnssecConfig)}) + } else { + s.D.Set("dnssec_config", nil) + } + + s.D.Set("dnssec_state", s.Res.DnssecState) + externalDownstreams := []interface{}{} for _, item := range s.Res.ExternalDownstreams { externalDownstreams = append(externalDownstreams, ExternalDownstreamToMap(item)) @@ -605,6 +802,36 @@ func (s *DnsZoneResourceCrud) SetData() error { return nil } +func DnssecConfigToMap(obj *oci_dns.DnssecConfig) map[string]interface{} { + result := map[string]interface{}{} + + kskDnssecKeyVersions := []interface{}{} + for _, item := range obj.KskDnssecKeyVersions { + kskDnssecKeyVersions = append(kskDnssecKeyVersions, KskDnssecKeyVersionToMap(item)) + } + result["ksk_dnssec_key_versions"] = kskDnssecKeyVersions + + zskDnssecKeyVersions := []interface{}{} + for _, item := range obj.ZskDnssecKeyVersions { + zskDnssecKeyVersions = append(zskDnssecKeyVersions, ZskDnssecKeyVersionToMap(item)) + } + result["zsk_dnssec_key_versions"] = zskDnssecKeyVersions + + return result +} + +func DnssecKeyVersionDsDataToMap(obj oci_dns.DnssecKeyVersionDsData) map[string]interface{} { + result := map[string]interface{}{} + + result["digest_type"] = string(obj.DigestType) + + if obj.Rdata != nil { + result["rdata"] = string(*obj.Rdata) + } + + return result +} + func (s *DnsZoneResourceCrud) mapToExternalDownstream(fieldKeyFormat string) (oci_dns.ExternalDownstream, error) { result := oci_dns.ExternalDownstream{} @@ -683,6 +910,68 @@ func ExternalMasterToMap(obj oci_dns.ExternalMaster) map[string]interface{} { return result } +func KskDnssecKeyVersionToMap(obj oci_dns.KskDnssecKeyVersion) map[string]interface{} { + result := map[string]interface{}{} + + result["algorithm"] = string(obj.Algorithm) + + dsData := []interface{}{} + for _, item := range obj.DsData { + dsData = append(dsData, DnssecKeyVersionDsDataToMap(item)) + } + result["ds_data"] = dsData + + if obj.KeyTag != nil { + result["key_tag"] = int(*obj.KeyTag) + } + + if obj.LengthInBytes != nil { + result["length_in_bytes"] = int(*obj.LengthInBytes) + } + + if obj.PredecessorDnssecKeyVersionUuid != nil { + result["predecessor_dnssec_key_version_uuid"] = string(*obj.PredecessorDnssecKeyVersionUuid) + } + + if obj.SuccessorDnssecKeyVersionUuid != nil { + result["successor_dnssec_key_version_uuid"] = string(*obj.SuccessorDnssecKeyVersionUuid) + } + + if obj.TimeActivated != nil { + result["time_activated"] = obj.TimeActivated.String() + } + + if obj.TimeCreated != nil { + result["time_created"] = obj.TimeCreated.String() + } + + if obj.TimeExpired != nil { + result["time_expired"] = obj.TimeExpired.String() + } + + if obj.TimeInactivated != nil { + result["time_inactivated"] = obj.TimeInactivated.String() + } + + if obj.TimePromoted != nil { + result["time_promoted"] = obj.TimePromoted.String() + } + + if obj.TimePublished != nil { + result["time_published"] = obj.TimePublished.String() + } + + if obj.TimeUnpublished != nil { + result["time_unpublished"] = obj.TimeUnpublished.String() + } + + if obj.Uuid != nil { + result["uuid"] = string(*obj.Uuid) + } + + return result +} + func NameserverToMap(obj oci_dns.Nameserver) map[string]interface{} { result := map[string]interface{}{} @@ -715,6 +1004,62 @@ func ZoneTransferServerToMap(obj oci_dns.ZoneTransferServer) map[string]interfac return result } +func ZskDnssecKeyVersionToMap(obj oci_dns.ZskDnssecKeyVersion) map[string]interface{} { + result := map[string]interface{}{} + + result["algorithm"] = string(obj.Algorithm) + + if obj.KeyTag != nil { + result["key_tag"] = int(*obj.KeyTag) + } + + if obj.LengthInBytes != nil { + result["length_in_bytes"] = int(*obj.LengthInBytes) + } + + if obj.PredecessorDnssecKeyVersionUuid != nil { + result["predecessor_dnssec_key_version_uuid"] = string(*obj.PredecessorDnssecKeyVersionUuid) + } + + if obj.SuccessorDnssecKeyVersionUuid != nil { + result["successor_dnssec_key_version_uuid"] = string(*obj.SuccessorDnssecKeyVersionUuid) + } + + if obj.TimeActivated != nil { + result["time_activated"] = obj.TimeActivated.String() + } + + if obj.TimeCreated != nil { + result["time_created"] = obj.TimeCreated.String() + } + + if obj.TimeExpired != nil { + result["time_expired"] = obj.TimeExpired.String() + } + + if obj.TimeInactivated != nil { + result["time_inactivated"] = obj.TimeInactivated.String() + } + + if obj.TimePromoted != nil { + result["time_promoted"] = obj.TimePromoted.String() + } + + if obj.TimePublished != nil { + result["time_published"] = obj.TimePublished.String() + } + + if obj.TimeUnpublished != nil { + result["time_unpublished"] = obj.TimeUnpublished.String() + } + + if obj.Uuid != nil { + result["uuid"] = string(*obj.Uuid) + } + + return result +} + func (s *DnsZoneResourceCrud) updateCompartment(compartment interface{}) error { changeCompartmentRequest := oci_dns.ChangeZoneCompartmentRequest{} diff --git a/internal/service/dns/dns_zone_stage_dnssec_key_version_resource.go b/internal/service/dns/dns_zone_stage_dnssec_key_version_resource.go new file mode 100644 index 00000000000..c7453f74fc8 --- /dev/null +++ b/internal/service/dns/dns_zone_stage_dnssec_key_version_resource.go @@ -0,0 +1,119 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package dns + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + oci_dns "github.com/oracle/oci-go-sdk/v65/dns" + oci_work_requests "github.com/oracle/oci-go-sdk/v65/workrequests" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func DnsZoneStageDnssecKeyVersionResource() *schema.Resource { + return &schema.Resource{ + Timeouts: tfresource.DefaultTimeout, + Create: createDnsZoneStageDnssecKeyVersion, + Read: readDnsZoneStageDnssecKeyVersion, + Delete: deleteDnsZoneStageDnssecKeyVersion, + Schema: map[string]*schema.Schema{ + // Required + "predecessor_dnssec_key_version_uuid": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "zone_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + + // Optional + "scope": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + + // Computed + }, + } +} + +func createDnsZoneStageDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + sync := &DnsZoneStageDnssecKeyVersionResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).DnsClient() + sync.WorkRequestClient = m.(*client.OracleClients).WorkRequestClient + + return tfresource.CreateResource(d, sync) +} + +func readDnsZoneStageDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + return nil +} + +func deleteDnsZoneStageDnssecKeyVersion(d *schema.ResourceData, m interface{}) error { + return nil +} + +type DnsZoneStageDnssecKeyVersionResourceCrud struct { + tfresource.BaseCrud + Client *oci_dns.DnsClient + DisableNotFoundRetries bool + WorkRequestClient *oci_work_requests.WorkRequestClient +} + +func (s *DnsZoneStageDnssecKeyVersionResourceCrud) ID() string { + return s.D.Id() +} + +func (s *DnsZoneStageDnssecKeyVersionResourceCrud) Create() error { + request := oci_dns.StageZoneDnssecKeyVersionRequest{} + + if predecessorDnssecKeyVersionUuid, ok := s.D.GetOkExists("predecessor_dnssec_key_version_uuid"); ok { + tmp := predecessorDnssecKeyVersionUuid.(string) + request.PredecessorDnssecKeyVersionUuid = &tmp + } + + if scope, ok := s.D.GetOkExists("scope"); ok { + request.Scope = oci_dns.StageZoneDnssecKeyVersionScopeEnum(scope.(string)) + } + + if zoneId, ok := s.D.GetOkExists("zone_id"); ok { + tmp := zoneId.(string) + request.ZoneId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "dns") + + response, err := s.Client.StageZoneDnssecKeyVersion(context.Background(), request) + if err != nil { + return err + } + + workId := response.OpcWorkRequestId + + if workId != nil { + _, err := tfresource.WaitForWorkRequestWithErrorHandling(s.WorkRequestClient, workId, "zone", + oci_work_requests.WorkRequestResourceActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries) + if err != nil { + return err + } + } + s.D.SetId(fmt.Sprintf("%s-%s", *request.ZoneId, *request.PredecessorDnssecKeyVersionUuid)) + + return nil +} + +func (s *DnsZoneStageDnssecKeyVersionResourceCrud) SetData() error { + return nil +} diff --git a/internal/service/dns/dns_zones_data_source.go b/internal/service/dns/dns_zones_data_source.go index ca608795ea3..be03fcaaffc 100644 --- a/internal/service/dns/dns_zones_data_source.go +++ b/internal/service/dns/dns_zones_data_source.go @@ -24,6 +24,10 @@ func DnsZonesDataSource() *schema.Resource { Type: schema.TypeString, Required: true, }, + "dnssec_state": { + Type: schema.TypeString, + Optional: true, + }, "name": { Type: schema.TypeString, Optional: true, @@ -103,6 +107,10 @@ func (s *DnsZonesDataSourceCrud) Get() error { request.CompartmentId = &tmp } + if dnssecState, ok := s.D.GetOkExists("dnssec_state"); ok { + request.DnssecState = oci_dns.ListZonesDnssecStateEnum(dnssecState.(string)) + } + if name, ok := s.D.GetOkExists("name"); ok { tmp := name.(string) request.Name = &tmp @@ -229,6 +237,14 @@ func (s *DnsZonesDataSourceCrud) SetData() error { zone["defined_tags"] = tfresource.DefinedTagsToMap(r.DefinedTags) } + if r.DnssecConfig != nil { + zone["dnssec_config"] = []interface{}{DnssecConfigToMap(r.DnssecConfig)} + } else { + zone["dnssec_config"] = nil + } + + zone["dnssec_state"] = r.DnssecState + zone["freeform_tags"] = r.FreeformTags if r.Id != nil { diff --git a/internal/service/dns/register_resource.go b/internal/service/dns/register_resource.go index bcc88b5c04f..96b70bfd8d8 100644 --- a/internal/service/dns/register_resource.go +++ b/internal/service/dns/register_resource.go @@ -16,4 +16,6 @@ func RegisterResource() { tfresource.RegisterResource("oci_dns_tsig_key", DnsTsigKeyResource()) tfresource.RegisterResource("oci_dns_view", DnsViewResource()) tfresource.RegisterResource("oci_dns_zone", DnsZoneResource()) + tfresource.RegisterResource("oci_dns_zone_promote_dnssec_key_version", DnsZonePromoteDnssecKeyVersionResource()) + tfresource.RegisterResource("oci_dns_zone_stage_dnssec_key_version", DnsZoneStageDnssecKeyVersionResource()) } diff --git a/website/docs/d/dns_records.html.markdown b/website/docs/d/dns_records.html.markdown index 8b6f934c69b..f300ff44c8d 100644 --- a/website/docs/d/dns_records.html.markdown +++ b/website/docs/d/dns_records.html.markdown @@ -13,11 +13,12 @@ description: |- This data source provides the list of Records in Oracle Cloud Infrastructure DNS service. -Gets all records in the specified zone. The results are sorted by `domain` in alphabetical order by default. -For more information about records, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). -For private zones, the scope query parameter is required with a value of `PRIVATE`. When the zone name is -provided as a path parameter and `PRIVATE` is used for the scope query parameter then the viewId query -parameter is required. +Gets all records in the specified zone. + +The results are sorted by `domain` in alphabetical order by default. For more information about records, +see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). +When the zone name is provided as a path parameter and `PRIVATE` is used for the scope query parameter +then the viewId query parameter is required. ## Example Usage @@ -28,12 +29,9 @@ data "oci_dns_records" "test_records" { zone_name_or_id = oci_dns_zone_name_or.test_zone_name_or.id #Optional - compartment_id = var.compartment_id domain = var.record_domain domain_contains = var.record_domain_contains rtype = var.record_rtype - scope = var.record_scope - view_id = oci_dns_view.test_view.id zone_version = var.record_zone_version } ``` @@ -42,7 +40,9 @@ data "oci_dns_records" "test_records" { The following arguments are supported: -* `compartment_id` - (Optional) The OCID of the compartment the resource belongs to. +* `compartment_id` - (Optional) The OCID of the compartment the zone belongs to. + + This parameter is deprecated and should be omitted. * `domain` - (Optional) Search by domain. Will match any record whose domain (case-insensitive) equals the provided value. * `domain_contains` - (Optional) Search by domain. Will match any record whose domain (case-insensitive) contains the provided value. * `rtype` - (Optional) Search by record type. Will match any record whose [type](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4) (case-insensitive) equals the provided value. @@ -67,7 +67,7 @@ The following attributes are exported: * `rdata` - The record's data, as whitespace-delimited tokens in type-specific presentation format. All RDATA is normalized and the returned presentation of your RDATA may differ from its initial input. For more information about RDATA, see [Supported DNS Resource Record Types](https://docs.cloud.oracle.com/iaas/Content/DNS/Reference/supporteddnsresource.htm) * `record_hash` - A unique identifier for the record within its zone. * `rrset_version` - The latest version of the record's zone in which its RRSet differs from the preceding version. -* `rtype` - The canonical name for the record's type, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). -* `ttl` - The Time To Live for the record, in seconds. +* `rtype` - The type of DNS record, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). +* `ttl` - The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. * `zone_name_or_id` - The name or OCID of the target zone. diff --git a/website/docs/d/dns_resolver.html.markdown b/website/docs/d/dns_resolver.html.markdown index 51e3d25101b..3fedaa89500 100644 --- a/website/docs/d/dns_resolver.html.markdown +++ b/website/docs/d/dns_resolver.html.markdown @@ -10,9 +10,10 @@ description: |- # Data Source: oci_dns_resolver This data source provides details about a specific Resolver resource in Oracle Cloud Infrastructure DNS service. -Gets information about a specific resolver. Note that attempting to get a -resolver in the DELETED lifecycleState will result in a `404` response to be -consistent with other operations of the API. Requires a `PRIVATE` scope query parameter. +Gets information about a specific resolver. + +Note that attempting to get a resolver in the DELETED lifecycleState will result in a `404` +response to be consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_resolver_endpoint.html.markdown b/website/docs/d/dns_resolver_endpoint.html.markdown index 89b1dad45bc..86b8ec51ae4 100644 --- a/website/docs/d/dns_resolver_endpoint.html.markdown +++ b/website/docs/d/dns_resolver_endpoint.html.markdown @@ -10,9 +10,10 @@ description: |- # Data Source: oci_dns_resolver_endpoint This data source provides details about a specific Resolver Endpoint resource in Oracle Cloud Infrastructure DNS service. -Gets information about a specific resolver endpoint. Note that attempting to get a resolver endpoint -in the DELETED lifecycle state will result in a `404` response to be consistent with other operations of the -API. Requires a `PRIVATE` scope query parameter. +Gets information about a specific resolver endpoint. + +Note that attempting to get a resolver endpoint in the DELETED lifecycle state will result +in a `404` response to be consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_resolver_endpoints.html.markdown b/website/docs/d/dns_resolver_endpoints.html.markdown index 7efd061a5de..3abd30da5a3 100644 --- a/website/docs/d/dns_resolver_endpoints.html.markdown +++ b/website/docs/d/dns_resolver_endpoints.html.markdown @@ -13,7 +13,7 @@ This data source provides the list of Resolver Endpoints in Oracle Cloud Infrast Gets a list of all endpoints within a resolver. The collection can be filtered by name or lifecycle state. It can be sorted on creation time or name both in ASC or DESC order. Note that when no lifecycleState query parameter is provided, the collection does not include resolver endpoints in the DELETED -lifecycle state to be consistent with other operations of the API. Requires a `PRIVATE` scope query parameter. +lifecycle state to be consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_resolvers.html.markdown b/website/docs/d/dns_resolvers.html.markdown index 9b42ef9b0bd..5bead49b575 100644 --- a/website/docs/d/dns_resolvers.html.markdown +++ b/website/docs/d/dns_resolvers.html.markdown @@ -10,12 +10,12 @@ description: |- # Data Source: oci_dns_resolvers This data source provides the list of Resolvers in Oracle Cloud Infrastructure DNS service. -Gets a list of all resolvers within a compartment. The collection can -be filtered by display name, id, or lifecycle state. It can be sorted -on creation time or displayName both in ASC or DESC order. Note that -when no lifecycleState query parameter is provided, the collection -does not include resolvers in the DELETED lifecycleState to be consistent -with other operations of the API. Requires a `PRIVATE` scope query parameter. +Gets a list of all resolvers within a compartment. + +The collection can be filtered by display name, id, or lifecycle state. It can be sorted +on creation time or displayName both in ASC or DESC order. Note that when no lifecycleState +query parameter is provided, the collection does not include resolvers in the DELETED +lifecycleState to be consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_rrset.html.markdown b/website/docs/d/dns_rrset.html.markdown index 7c1824fe33e..de8bce88316 100644 --- a/website/docs/d/dns_rrset.html.markdown +++ b/website/docs/d/dns_rrset.html.markdown @@ -10,10 +10,10 @@ description: |- # Data Source: oci_dns_rrset This data source provides details about a specific Rrset resource in Oracle Cloud Infrastructure DNS service. -Gets a list of all records in the specified RRSet. The results are sorted by `recordHash` by default. For -private zones, the scope query parameter is required with a value of `PRIVATE`. When the zone name is -provided as a path parameter and `PRIVATE` is used for the scope query parameter then the viewId query -parameter is required. +Gets a list of all records in the specified RRSet. + +The results are sorted by `recordHash` by default. When the zone name is provided as a path parameter +and `PRIVATE` is used for the scope query parameter then the viewId query parameter is required. ## Example Usage @@ -26,7 +26,6 @@ data "oci_dns_rrset" "test_rrset" { zone_name_or_id = oci_dns_zone.test_zone.id #Optional - compartment_id = var.compartment_id scope = var.rrset_scope view_id = oci_dns_view.test_view.id } @@ -36,12 +35,13 @@ data "oci_dns_rrset" "test_rrset" { The following arguments are supported: -* `compartment_id` - (Optional) The OCID of the compartment the resource belongs to. +* `compartment_id` - (Optional) The OCID of the compartment the zone belongs to. + + This parameter is deprecated and should be omitted. * `domain` - (Required) The target fully-qualified domain name (FQDN) within the target zone. * `rtype` - (Required) The type of the target RRSet within the target zone. -* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. -This value will be null for zones in the global DNS and `PRIVATE` when listing private Rrsets. -* `view_id` - (Optional) The OCID of the view the resource is associated with. +* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. +* `view_id` - (Optional) The OCID of the view the zone is associated with. Required when accessing a private zone by name. * `zone_name_or_id` - (Required) The name or OCID of the target zone. * `zone_version` - (Optional) The version of the zone for which data is requested. @@ -57,5 +57,5 @@ The following attributes are exported: * `record_hash` - A unique identifier for the record within its zone. * `rrset_version` - The latest version of the record's zone in which its RRSet differs from the preceding version. * `rtype` - The type of DNS record, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). - * `ttl` - The Time To Live for the record, in seconds. + * `ttl` - The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. diff --git a/website/docs/d/dns_rrsets.html.markdown b/website/docs/d/dns_rrsets.html.markdown index cb07db10897..6fb80baa2d4 100644 --- a/website/docs/d/dns_rrsets.html.markdown +++ b/website/docs/d/dns_rrsets.html.markdown @@ -10,10 +10,11 @@ description: |- # Data Source: oci_dns_rrsets This data source provides the list of RRsets in Oracle Cloud Infrastructure DNS service. -Gets a list of all rrsets in the specified zone. You can optionally filter the results using the listed parameters. -For private zones, the scope query parameter is required with a value of `PRIVATE`. When the zone name is -provided as a path parameter and `PRIVATE` is used for the scope query parameter then the viewId query -parameter is required. +Gets a list of all rrsets in the specified zone. + +You can optionally filter the results using the listed parameters. When the zone name +is provided as a path parameter and `PRIVATE` is used for the scope query parameter then +the viewId parameter is required. ## Example Usage @@ -40,7 +41,7 @@ The following arguments are supported: * `domain_contains` - (Optional) Matches any rrset whose fully-qualified domain name (FQDN) contains the provided value. * `rtype` - (Optional) Search by record type. Will match any record whose [type](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4) (case-insensitive) equals the provided value. * `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. -* `view_id` - (Optional) The OCID of the view the resource is associated with. +* `view_id` - (Optional) The OCID of the view the zone is associated with. Required when accessing a private zone by name. * `zone_name_or_id` - (Required) The name or OCID of the target zone. @@ -63,5 +64,5 @@ The following attributes are exported: * `record_hash` - A unique identifier for the record within its zone. * `rrset_version` - The latest version of the record's zone in which its RRSet differs from the preceding version. * `rtype` - The type of DNS record, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). - * `ttl` - The Time To Live for the record, in seconds. + * `ttl` - The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. diff --git a/website/docs/d/dns_steering_policies.html.markdown b/website/docs/d/dns_steering_policies.html.markdown index 17a96119c71..d850e253b21 100644 --- a/website/docs/d/dns_steering_policies.html.markdown +++ b/website/docs/d/dns_steering_policies.html.markdown @@ -79,7 +79,7 @@ The following attributes are exported: * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. * `should_keep` - Keeps the answer only if the value is `true`. * `value` - The rank assigned to the set of answers that match the expression in `answerCondition`. Answers with the lowest values move to the beginning of the list without changing the relative order of those with the same value. Answers can be given a value between `0` and `255`. - * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.subnet in ('192.0.2.0/24')` to define a case that matches queries from that office. + * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.address in ('192.0.2.0/24')` to define a case that matches queries from that office. * `count` - The number of answers allowed to remain after the limit rule has been processed, keeping only the first of the remaining answers in the list. Example: If the `count` property is set to `2` and four answers remain before the limit rule is processed, only the first two answers in the list will remain after the limit rule has been processed. * `default_answer_data` - Defines a default set of answer conditions and values that are applied to an answer when `cases` is not defined for the rule, or a matching case does not have any matching `answerCondition`s in its `answerData`. `defaultAnswerData` is not applied if `cases` is defined and there are no matching cases. In this scenario, the next rule will be processed. * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. diff --git a/website/docs/d/dns_steering_policy.html.markdown b/website/docs/d/dns_steering_policy.html.markdown index 2ed8184793f..c78718c3ecc 100644 --- a/website/docs/d/dns_steering_policy.html.markdown +++ b/website/docs/d/dns_steering_policy.html.markdown @@ -55,7 +55,7 @@ The following attributes are exported: * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. * `should_keep` - Keeps the answer only if the value is `true`. * `value` - The rank assigned to the set of answers that match the expression in `answerCondition`. Answers with the lowest values move to the beginning of the list without changing the relative order of those with the same value. Answers can be given a value between `0` and `255`. - * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.subnet in ('192.0.2.0/24')` to define a case that matches queries from that office. + * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.address in ('192.0.2.0/24')` to define a case that matches queries from that office. * `count` - The number of answers allowed to remain after the limit rule has been processed, keeping only the first of the remaining answers in the list. Example: If the `count` property is set to `2` and four answers remain before the limit rule is processed, only the first two answers in the list will remain after the limit rule has been processed. * `default_answer_data` - Defines a default set of answer conditions and values that are applied to an answer when `cases` is not defined for the rule, or a matching case does not have any matching `answerCondition`s in its `answerData`. `defaultAnswerData` is not applied if `cases` is defined and there are no matching cases. In this scenario, the next rule will be processed. * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. diff --git a/website/docs/d/dns_view.html.markdown b/website/docs/d/dns_view.html.markdown index bcad8b8e014..dc7081f3502 100644 --- a/website/docs/d/dns_view.html.markdown +++ b/website/docs/d/dns_view.html.markdown @@ -10,9 +10,11 @@ description: |- # Data Source: oci_dns_view This data source provides details about a specific View resource in Oracle Cloud Infrastructure DNS service. -Gets information about a specific view. Note that attempting to get a +Gets information about a specific view. + +Note that attempting to get a view in the DELETED lifecycleState will result in a `404` response to be -consistent with other operations of the API. Requires a `PRIVATE` scope query parameter. +consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_views.html.markdown b/website/docs/d/dns_views.html.markdown index a51bbab1d00..5961e4f9dd8 100644 --- a/website/docs/d/dns_views.html.markdown +++ b/website/docs/d/dns_views.html.markdown @@ -10,12 +10,12 @@ description: |- # Data Source: oci_dns_views This data source provides the list of Views in Oracle Cloud Infrastructure DNS service. -Gets a list of all views within a compartment. The collection can -be filtered by display name, id, or lifecycle state. It can be sorted -on creation time or displayName both in ASC or DESC order. Note that -when no lifecycleState query parameter is provided, the collection -does not include views in the DELETED lifecycleState to be consistent -with other operations of the API. Requires a `PRIVATE` scope query parameter. +Gets a list of all views within a compartment. + +The collection can be filtered by display name, id, or lifecycle state. It can be sorted +on creation time or displayName both in ASC or DESC order. Note that when no lifecycleState +query parameter is provided, the collection does not include views in the DELETED +lifecycleState to be consistent with other operations of the API. ## Example Usage diff --git a/website/docs/d/dns_zones.html.markdown b/website/docs/d/dns_zones.html.markdown index 11bf6d53868..1c7db678a2e 100644 --- a/website/docs/d/dns_zones.html.markdown +++ b/website/docs/d/dns_zones.html.markdown @@ -10,10 +10,11 @@ description: |- # Data Source: oci_dns_zones This data source provides the list of Zones in Oracle Cloud Infrastructure DNS service. -Gets a list of all zones in the specified compartment. The collection -can be filtered by name, time created, scope, associated view, and zone type. -Additionally, for Private DNS, the `scope` query parameter is required when -listing private zones. +Gets a list of all zones in the specified compartment. + +The collection can be filtered by name, time created, scope, associated view, and zone type. +Filtering by view is only supported for private zones. + ## Example Usage @@ -23,6 +24,7 @@ data "oci_dns_zones" "test_zones" { compartment_id = var.compartment_id #Optional + dnssec_state = var.zone_dnssec_state name = var.zone_name name_contains = var.zone_name_contains scope = var.zone_scope @@ -40,10 +42,10 @@ data "oci_dns_zones" "test_zones" { The following arguments are supported: * `compartment_id` - (Required) The OCID of the compartment the resource belongs to. +* `dnssec_state` - (Optional) Search for zones that have the given `DnssecState`. * `name` - (Optional) A case-sensitive filter for zone names. Will match any zone with a name that equals the provided value. * `name_contains` - (Optional) Search by zone name. Will match any zone whose name (case-insensitive) contains the provided value. -* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. This value will be null -for zones in the global DNS and `PRIVATE` when listing private zones. +* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. * `sort_by` - (Optional) The field by which to sort zones. Allowed values are: name|zoneType|timeCreated * `sort_order` - The order to sort the resources. Allowed values are: ASC|DESC * `state` - (Optional) The state of a resource. @@ -67,7 +69,82 @@ The following attributes are exported: * `compartment_id` - The OCID of the compartment containing the zone. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). - **Example:** `{"Operations.CostCenter": "42"}` + **Example:** `{"Operations": {"CostCenter": "42"}}` +* `dnssec_config` - DNSSEC configuration data. + + A zone may have a maximum of 10 `DnssecKeyVersions`, regardless of signing key type. + * `ksk_dnssec_key_versions` - A read-only array of key signing key (KSK) versions. + * `algorithm` - The signing algorithm used for the key. + * `ds_data` - An array of data for DS records corresponding with this key version. An entry will exist for each supported DS digest algorithm. + * `digest_type` - The type of the digest associated with the rdata. + * `rdata` - Presentation-format DS record data that must be added to the parent zone. For more information about RDATA, see [Supported DNS Resource Record Types](https://docs.cloud.oracle.com/iaas/Content/DNS/Reference/supporteddnsresource.htm) + * `key_tag` - The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see [RFC 4034](https://tools.ietf.org/html/rfc4034). + * `length_in_bytes` - The length of the corresponding private key in bytes, expressed as an integer. + * `predecessor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has replaced. + * `successor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this `DnssecKeyVersion`. + * `time_activated` - The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is when the key material will be used to generate RRSIGs. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_created` - The date and time the key version was created, expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_expired` - The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. This prevents service disruption at the potential increased risk of key compromise. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_inactivated` - The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_promoted` - The date and time the key version was promoted expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_published` - The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is when the zone contents will include a DNSKEY record corresponding to the key material. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_unpublished` - The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `uuid` - The UUID of the `DnssecKeyVersion`. + * `zsk_dnssec_key_versions` - A read-only array of zone signing key (ZSK) versions. + * `algorithm` - The signing algorithm used for the key. + * `key_tag` - The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see [RFC 4034](https://tools.ietf.org/html/rfc4034). + * `length_in_bytes` - The length of the corresponding private key in bytes, expressed as an integer. + * `predecessor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has replaced. + * `successor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this `DnssecKeyVersion`. + * `time_activated` - The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is when the key material will be used to generate RRSIGs. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_created` - The date and time the key version was created, expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_expired` - The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. This prevents service disruption at the potential increased risk of key compromise. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_inactivated` - The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_promoted` - The date and time the key version was promoted expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_published` - The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is when the zone contents will include a DNSKEY record corresponding to the key material. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_unpublished` - The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `uuid` - The UUID of the `DnssecKeyVersion`. +* `dnssec_state` - The state of DNSSEC on the zone. + + For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + + New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + + To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called. + + Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + + Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency. + + For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). * `external_downstreams` - External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`. * `address` - The server's IP address (IPv4 or IPv6). * `port` - The server's port. Port value must be a value of 53, otherwise omit the port value. diff --git a/website/docs/r/dns_action_create_zone_from_zone_file.html.markdown b/website/docs/r/dns_action_create_zone_from_zone_file.html.markdown index 94f59d314d9..e7a96979631 100644 --- a/website/docs/r/dns_action_create_zone_from_zone_file.html.markdown +++ b/website/docs/r/dns_action_create_zone_from_zone_file.html.markdown @@ -10,7 +10,7 @@ description: |- # oci_dns_action_create_zone_from_zone_file This resource provides the Action Create Zone From Zone File resource in Oracle Cloud Infrastructure DNS service. -Creates a new zone from a zone file in the specified compartment. +Creates a new zone from a zone file in the specified compartment. Not supported for private zones. After the zone has been created, it should be further managed by importing it to an `oci_dns_zone` resource. diff --git a/website/docs/r/dns_record.html.markdown b/website/docs/r/dns_record.html.markdown index 33442b02ab6..c992f861e8c 100644 --- a/website/docs/r/dns_record.html.markdown +++ b/website/docs/r/dns_record.html.markdown @@ -13,11 +13,12 @@ description: |- This resource provides the Record resource in Oracle Cloud Infrastructure DNS service. -Replaces records in the specified zone with the records specified in the -request body. If a specified record does not exist, it will be created. -If the record exists, then it will be updated to represent the record in -the body of the request. If a record in the zone does not exist in the -request body, the record will be removed from the zone. + Updates a collection of records in the specified zone. + +You can update one record or all records for the specified zone depending on the changes provided in the +request body. You can also add or remove records using this function. When the zone name is provided as +a path parameter and `PRIVATE` is used for the scope query parameter then the viewId query parameter is +required. ## Example Usage @@ -30,7 +31,6 @@ resource "oci_dns_record" "test_record" { rtype = var.record_items_rtype #Optional - compartment_id = var.compartment_id rdata = var.record_items_rdata ttl = var.record_items_ttl } @@ -62,7 +62,7 @@ The following attributes are exported: * `record_hash` - A unique identifier for the record within its zone. * `rrset_version` - The latest version of the record's zone in which its RRSet differs from the preceding version. * `rtype` - The canonical name for the record's type, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). -* `ttl` - The Time To Live for the record, in seconds. +* `ttl` - The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. * `zone_name_or_id` - The name or OCID of the target zone. ## Timeouts diff --git a/website/docs/r/dns_resolver.html.markdown b/website/docs/r/dns_resolver.html.markdown index c42cc4f2394..fff9737f3ad 100644 --- a/website/docs/r/dns_resolver.html.markdown +++ b/website/docs/r/dns_resolver.html.markdown @@ -65,8 +65,8 @@ The following arguments are supported: * `client_address_conditions` - (Optional) (Updatable) A list of CIDR blocks. The query must come from a client within one of the blocks in order for the rule action to apply. * `destination_addresses` - (Required) (Updatable) IP addresses to which queries should be forwarded. Currently limited to a single address. * `qname_cover_conditions` - (Optional) (Updatable) A list of domain names. The query must be covered by one of the domains in order for the rule action to apply. - * `source_endpoint_name` - (Required) (Updatable) Name of an endpoint, that is a sub-resource of the resolver, to use as the forwarding interface. The endpoint must have isForwarding set to true. -* `scope` - (Optional) If specified, must be `PRIVATE` when creating private name resolvers. + * `source_endpoint_name` - (Required) (Updatable) Case-insensitive name of an endpoint, that is a sub-resource of the resolver, to use as the forwarding interface. The endpoint must have isForwarding set to true. +* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. ** IMPORTANT ** @@ -138,3 +138,4 @@ Resolvers can be imported using their OCID, e.g. ``` $ terraform import oci_dns_resolver.test_resolver "id" ``` + diff --git a/website/docs/r/dns_resolver_endpoint.html.markdown b/website/docs/r/dns_resolver_endpoint.html.markdown index f9eb239261e..ab601aafdd4 100644 --- a/website/docs/r/dns_resolver_endpoint.html.markdown +++ b/website/docs/r/dns_resolver_endpoint.html.markdown @@ -10,7 +10,7 @@ description: |- # oci_dns_resolver_endpoint This resource provides the Resolver Endpoint resource in Oracle Cloud Infrastructure DNS service. -Creates a new resolver endpoint. Requires a `PRIVATE` scope query parameter. +Creates a new resolver endpoint in the same compartment as the resolver. ## Example Usage diff --git a/website/docs/r/dns_rrset.html.markdown b/website/docs/r/dns_rrset.html.markdown index 2d449c1dbe3..404a25100e9 100644 --- a/website/docs/r/dns_rrset.html.markdown +++ b/website/docs/r/dns_rrset.html.markdown @@ -10,8 +10,10 @@ description: |- # oci_dns_rrset This resource provides the Rrset resource in Oracle Cloud Infrastructure DNS service. -Replaces records in the specified RRSet. When the zone name is provided as a path parameter -and the zone has a scope of `PRIVATE` then the viewId query parameter is required. + Updates records in the specified RRSet. + +When the zone name is provided as a path parameter and `PRIVATE` is used for the scope query +parameter then the viewId query parameter is required. ## Example Usage @@ -23,7 +25,6 @@ resource "oci_dns_rrset" "test_rrset" { zone_name_or_id = oci_dns_zone.test_zone.id #Optional - compartment_id = var.compartment_id items { #Required domain = var.rrset_items_domain @@ -40,18 +41,19 @@ resource "oci_dns_rrset" "test_rrset" { The following arguments are supported: -* `compartment_id` - (Optional) (Updatable) The OCID of the compartment the resource belongs to. +* `compartment_id` - (Optional) (Updatable) The OCID of the compartment the zone belongs to. + + This parameter is deprecated and should be omitted. * `domain` - (Required) The target fully-qualified domain name (FQDN) within the target zone. * `items` - (Optional) (Updatable) - **NOTE** Omitting `items` at time of create, will delete any existing records in the RRSet + **NOTE** Omitting `items` at time of create will delete any existing records in the RRSet * `domain` - (Required) The fully qualified domain name where the record can be located. * `rdata` - (Required) (Updatable) The record's data, as whitespace-delimited tokens in type-specific presentation format. All RDATA is normalized and the returned presentation of your RDATA may differ from its initial input. For more information about RDATA, see [Supported DNS Resource Record Types](https://docs.cloud.oracle.com/iaas/Content/DNS/Reference/supporteddnsresource.htm) - * `rtype` - (Required) The canonical name for the record's type, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). - * `ttl` - (Required) (Updatable) The Time To Live for the record, in seconds. + * `rtype` - (Required) The type of DNS record, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). + * `ttl` - (Required) (Updatable) The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. * `rtype` - (Required) The type of the target RRSet within the target zone. * `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. -This value will be null for zones in the global DNS and `PRIVATE` when creating private Rrsets. -* `view_id` - (Optional) The OCID of the view the resource is associated with. +* `view_id` - (Optional) The OCID of the view the zone is associated with. Required when accessing a private zone by name. * `zone_name_or_id` - (Required) The name or OCID of the target zone. @@ -69,7 +71,7 @@ The following attributes are exported: * `record_hash` - A unique identifier for the record within its zone. * `rrset_version` - The latest version of the record's zone in which its RRSet differs from the preceding version. * `rtype` - The type of DNS record, such as A or CNAME. For more information, see [Resource Record (RR) TYPEs](https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4). - * `ttl` - The Time To Live for the record, in seconds. + * `ttl` - The Time To Live for the record, in seconds. Using a TTL lower than 30 seconds is not recommended. ## Timeouts diff --git a/website/docs/r/dns_steering_policy.html.markdown b/website/docs/r/dns_steering_policy.html.markdown index ccc7cff5a55..322c689e670 100644 --- a/website/docs/r/dns_steering_policy.html.markdown +++ b/website/docs/r/dns_steering_policy.html.markdown @@ -96,7 +96,7 @@ The following arguments are supported: * `answer_condition` - (Applicable when rule_type=FILTER | PRIORITY | WEIGHTED) An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. * `should_keep` - (Applicable when rule_type=FILTER) Keeps the answer only if the value is `true`. * `value` - (Required when rule_type=PRIORITY | WEIGHTED) The rank assigned to the set of answers that match the expression in `answerCondition`. Answers with the lowest values move to the beginning of the list without changing the relative order of those with the same value. Answers can be given a value between `0` and `255`. - * `case_condition` - (Applicable when rule_type=FILTER | HEALTH | LIMIT | PRIORITY | WEIGHTED) An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.subnet in ('192.0.2.0/24')` to define a case that matches queries from that office. + * `case_condition` - (Applicable when rule_type=FILTER | HEALTH | LIMIT | PRIORITY | WEIGHTED) An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.address in ('192.0.2.0/24')` to define a case that matches queries from that office. * `count` - (Required when rule_type=LIMIT) The number of answers allowed to remain after the limit rule has been processed, keeping only the first of the remaining answers in the list. Example: If the `count` property is set to `2` and four answers remain before the limit rule is processed, only the first two answers in the list will remain after the limit rule has been processed. * `default_answer_data` - (Applicable when rule_type=FILTER | PRIORITY | WEIGHTED) Defines a default set of answer conditions and values that are applied to an answer when `cases` is not defined for the rule, or a matching case does not have any matching `answerCondition`s in its `answerData`. `defaultAnswerData` is not applied if `cases` is defined and there are no matching cases. In this scenario, the next rule will be processed. * `answer_condition` - (Applicable when rule_type=FILTER | PRIORITY | WEIGHTED) An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. @@ -157,7 +157,7 @@ The following attributes are exported: * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. * `should_keep` - Keeps the answer only if the value is `true`. * `value` - The rank assigned to the set of answers that match the expression in `answerCondition`. Answers with the lowest values move to the beginning of the list without changing the relative order of those with the same value. Answers can be given a value between `0` and `255`. - * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.subnet in ('192.0.2.0/24')` to define a case that matches queries from that office. + * `case_condition` - An expression that uses conditions at the time of a DNS query to indicate whether a case matches. Conditions may include the geographical location, IP subnet, or ASN the DNS query originated. **Example:** If you have an office that uses the subnet `192.0.2.0/24` you could use a `caseCondition` expression `query.client.address in ('192.0.2.0/24')` to define a case that matches queries from that office. * `count` - The number of answers allowed to remain after the limit rule has been processed, keeping only the first of the remaining answers in the list. Example: If the `count` property is set to `2` and four answers remain before the limit rule is processed, only the first two answers in the list will remain after the limit rule has been processed. * `default_answer_data` - Defines a default set of answer conditions and values that are applied to an answer when `cases` is not defined for the rule, or a matching case does not have any matching `answerCondition`s in its `answerData`. `defaultAnswerData` is not applied if `cases` is defined and there are no matching cases. In this scenario, the next rule will be processed. * `answer_condition` - An expression that is used to select a set of answers that match a condition. For example, answers with matching pool properties. diff --git a/website/docs/r/dns_zone.html.markdown b/website/docs/r/dns_zone.html.markdown index 8834b1f2d06..276dbdb113d 100644 --- a/website/docs/r/dns_zone.html.markdown +++ b/website/docs/r/dns_zone.html.markdown @@ -10,11 +10,10 @@ description: |- # oci_dns_zone This resource provides the Zone resource in Oracle Cloud Infrastructure DNS service. -Creates a new zone in the specified compartment. For global zones, if the `Content-Type` header for the request -is `text/dns`, the `compartmentId` query parameter is required. `text/dns` for the `Content-Type` header is -not supported for private zones. Query parameter scope with a value of `PRIVATE` is required when creating a -private zone. Private zones must have a zone type of `PRIMARY`. Creating a private zone at or under -`oraclevcn.com` within the default protected view of a VCN-dedicated resolver is not permitted. +Creates a new zone in the specified compartment. + +Private zones must have a zone type of `PRIMARY`. Creating a private zone at or under `oraclevcn.com` +within the default protected view of a VCN-dedicated resolver is not permitted. ## Example Usage @@ -28,6 +27,7 @@ resource "oci_dns_zone" "test_zone" { #Optional defined_tags = var.zone_defined_tags + dnssec_state = var.zone_dnssec_state external_downstreams { #Required address = var.zone_external_downstreams_address @@ -54,10 +54,23 @@ resource "oci_dns_zone" "test_zone" { The following arguments are supported: -* `compartment_id` - (Required) (Updatable) The OCID of the compartment the resource belongs to. +* `compartment_id` - (Required) (Updatable) The OCID of the compartment containing the zone. * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). **Example:** `{"Operations": {"CostCenter": "42"}}` +* `dnssec_state` - (Optional) (Updatable) The state of DNSSEC on the zone. + + For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + + New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + + To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called. + + Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + + Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency. + + For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). * `external_downstreams` - (Optional) (Updatable) External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`. * `address` - (Required) (Updatable) The server's IP address (IPv4 or IPv6). * `port` - (Optional) (Updatable) The server's port. Port value must be a value of 53, otherwise omit the port value. @@ -87,6 +100,81 @@ The following attributes are exported: * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). **Example:** `{"Operations": {"CostCenter": "42"}}` +* `dnssec_config` - DNSSEC configuration data. + + A zone may have a maximum of 10 `DnssecKeyVersions`, regardless of signing key type. + * `ksk_dnssec_key_versions` - A read-only array of key signing key (KSK) versions. + * `algorithm` - The signing algorithm used for the key. + * `ds_data` - An array of data for DS records corresponding with this key version. An entry will exist for each supported DS digest algorithm. + * `digest_type` - The type of the digest associated with the rdata. + * `rdata` - Presentation-format DS record data that must be added to the parent zone. For more information about RDATA, see [Supported DNS Resource Record Types](https://docs.cloud.oracle.com/iaas/Content/DNS/Reference/supporteddnsresource.htm) + * `key_tag` - The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see [RFC 4034](https://tools.ietf.org/html/rfc4034). + * `length_in_bytes` - The length of the corresponding private key in bytes, expressed as an integer. + * `predecessor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has replaced. + * `successor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this `DnssecKeyVersion`. + * `time_activated` - The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is when the key material will be used to generate RRSIGs. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_created` - The date and time the key version was created, expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_expired` - The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. This prevents service disruption at the potential increased risk of key compromise. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_inactivated` - The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_promoted` - The date and time the key version was promoted expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_published` - The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is when the zone contents will include a DNSKEY record corresponding to the key material. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_unpublished` - The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `uuid` - The UUID of the `DnssecKeyVersion`. + * `zsk_dnssec_key_versions` - A read-only array of zone signing key (ZSK) versions. + * `algorithm` - The signing algorithm used for the key. + * `key_tag` - The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see [RFC 4034](https://tools.ietf.org/html/rfc4034). + * `length_in_bytes` - The length of the corresponding private key in bytes, expressed as an integer. + * `predecessor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has replaced. + * `successor_dnssec_key_version_uuid` - When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this `DnssecKeyVersion`. + * `time_activated` - The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is when the key material will be used to generate RRSIGs. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_created` - The date and time the key version was created, expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_expired` - The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. This prevents service disruption at the potential increased risk of key compromise. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_inactivated` - The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_promoted` - The date and time the key version was promoted expressed in RFC 3339 timestamp format. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_published` - The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is when the zone contents will include a DNSKEY record corresponding to the key material. + + **Example:** `2016-07-22T17:23:59:00Z` + * `time_unpublished` - The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + + **Example:** `2016-07-22T17:23:59:00Z` + * `uuid` - The UUID of the `DnssecKeyVersion`. +* `dnssec_state` - The state of DNSSEC on the zone. + + For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + + New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + + To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called. + + Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + + Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency. + + For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). * `external_downstreams` - External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`. * `address` - The server's IP address (IPv4 or IPv6). * `port` - The server's port. Port value must be a value of 53, otherwise omit the port value. diff --git a/website/docs/r/dns_zone_promote_dnssec_key_version.html.markdown b/website/docs/r/dns_zone_promote_dnssec_key_version.html.markdown new file mode 100644 index 00000000000..10937d48d69 --- /dev/null +++ b/website/docs/r/dns_zone_promote_dnssec_key_version.html.markdown @@ -0,0 +1,66 @@ +--- +subcategory: "DNS" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_dns_zone_promote_dnssec_key_version" +sidebar_current: "docs-oci-resource-dns-zone_promote_dnssec_key_version" +description: |- + Provides the Zone Promote Dnssec Key Version resource in Oracle Cloud Infrastructure DNS service +--- + +# oci_dns_zone_promote_dnssec_key_version +This resource provides the Zone Promote Dnssec Key Version resource in Oracle Cloud Infrastructure DNS service. + +Promotes a specified `DnssecKeyVersion` on the zone. + +If the `DnssecKeyVersion` identified in the request body is a key signing key (KSK) that is replacing +another `DnssecKeyVersion`, then the old `DnssecKeyVersion` is scheduled for removal from the zone. + +For key signing keys (KSKs), you must create the DS record with the new key information **before** promoting +the new key to establish a chain of trust. To avoid a service disruption, remove the old DS record as soon +as its TTL (time to live) expires. + +For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). + + +## Example Usage + +```hcl +resource "oci_dns_zone_promote_dnssec_key_version" "test_zone_promote_dnssec_key_version" { + #Required + dnssec_key_version_uuid = var.zone_promote_dnssec_key_version_dnssec_key_version_uuid + zone_id = oci_dns_zone.test_zone.id + + #Optional + scope = var.zone_promote_dnssec_key_version_scope +} +``` + +## Argument Reference + +The following arguments are supported: + +* `dnssec_key_version_uuid` - (Required) The UUID of the `DnssecKeyVersion` that is being promoted. +* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. +* `zone_id` - (Required) The OCID of the target zone. + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Zone Promote Dnssec Key Version + * `update` - (Defaults to 20 minutes), when updating the Zone Promote Dnssec Key Version + * `delete` - (Defaults to 20 minutes), when destroying the Zone Promote Dnssec Key Version + + +## Import + +Import is not supported for this resource. + diff --git a/website/docs/r/dns_zone_stage_dnssec_key_version.html.markdown b/website/docs/r/dns_zone_stage_dnssec_key_version.html.markdown new file mode 100644 index 00000000000..bed5ceaf09e --- /dev/null +++ b/website/docs/r/dns_zone_stage_dnssec_key_version.html.markdown @@ -0,0 +1,61 @@ +--- +subcategory: "DNS" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_dns_zone_stage_dnssec_key_version" +sidebar_current: "docs-oci-resource-dns-zone_stage_dnssec_key_version" +description: |- + Provides the Zone Stage Dnssec Key Version resource in Oracle Cloud Infrastructure DNS service +--- + +# oci_dns_zone_stage_dnssec_key_version +This resource provides the Zone Stage Dnssec Key Version resource in Oracle Cloud Infrastructure DNS service. + +Stages a new `DnssecKeyVersion` on the zone. Staging is a process that generates a new "successor" key version +that replaces an existing "predecessor" key version. +**Note:** A new key-signing key (KSK) version is inert until you update the parent zone DS records. + +For more information, see the [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm) documentation. + + +## Example Usage + +```hcl +resource "oci_dns_zone_stage_dnssec_key_version" "test_zone_stage_dnssec_key_version" { + #Required + predecessor_dnssec_key_version_uuid = var.zone_stage_dnssec_key_version_predecessor_dnssec_key_version_uuid + zone_id = oci_dns_zone.test_zone.id + + #Optional + scope = var.zone_stage_dnssec_key_version_scope +} +``` + +## Argument Reference + +The following arguments are supported: + +* `predecessor_dnssec_key_version_uuid` - (Required) The UUID of the `DnssecKeyVersion` for which a new successor should be generated. +* `scope` - (Optional) Specifies to operate only on resources that have a matching DNS scope. +* `zone_id` - (Required) The OCID of the target zone. + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Zone Stage Dnssec Key Version + * `update` - (Defaults to 20 minutes), when updating the Zone Stage Dnssec Key Version + * `delete` - (Defaults to 20 minutes), when destroying the Zone Stage Dnssec Key Version + + +## Import + +Import is not supported for this resource. + From 9202df68a46530a96abfdda11f969e9b62df2fe2 Mon Sep 17 00:00:00 2001 From: Lorant Madarasz Date: Tue, 3 Sep 2024 10:34:13 +0200 Subject: [PATCH 17/31] Added - Support for GoldenGate new deployment creation page and extended connectivity test results --- examples/goldengate/Deployment/main.tf | 4 + ...golden_gate_deployment_environment_test.go | 54 +++++ .../golden_gate_deployment_test.go | 55 ++++- .../golden_gate_deployment_backup_resource.go | 20 +- .../golden_gate_deployment_data_source.go | 4 + ...ate_deployment_environments_data_source.go | 212 ++++++++++++++++ .../golden_gate_deployment_resource.go | 226 +++++++++++++++--- .../golden_gate_deployments_data_source.go | 2 +- .../golden_gate/register_datasource.go | 1 + .../d/golden_gate_deployment.html.markdown | 9 +- ...gate_deployment_environments.html.markdown | 53 ++++ .../d/golden_gate_deployments.html.markdown | 9 +- .../r/golden_gate_connection.html.markdown | 82 ++++--- ...n_gate_database_registration.html.markdown | 2 +- .../r/golden_gate_deployment.html.markdown | 25 +- 15 files changed, 662 insertions(+), 96 deletions(-) create mode 100644 internal/integrationtest/golden_gate_deployment_environment_test.go create mode 100644 internal/service/golden_gate/golden_gate_deployment_environments_data_source.go create mode 100644 website/docs/d/golden_gate_deployment_environments.html.markdown diff --git a/examples/goldengate/Deployment/main.tf b/examples/goldengate/Deployment/main.tf index 2b8425e44dd..734c06ea89f 100644 --- a/examples/goldengate/Deployment/main.tf +++ b/examples/goldengate/Deployment/main.tf @@ -9,6 +9,7 @@ variable "objectstorage_bucket_name" {} variable "objectstorage_namespace" {} variable password_secret_id {} variable identity_domain_id {} +variable group_id {} variable "deployment_cpu_core_count" { default = 1 @@ -106,6 +107,9 @@ resource "oci_golden_gate_deployment" "test_deployment" { admin_password = var.deployment_ogg_data_admin_password admin_username = var.deployment_ogg_data_admin_username deployment_name = var.deployment_ogg_data_deployment_name + group_to_roles_mapping { + security_group_id = var.group_id + } } locks {} } diff --git a/internal/integrationtest/golden_gate_deployment_environment_test.go b/internal/integrationtest/golden_gate_deployment_environment_test.go new file mode 100644 index 00000000000..5e4f1975045 --- /dev/null +++ b/internal/integrationtest/golden_gate_deployment_environment_test.go @@ -0,0 +1,54 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + GoldenGateDeploymentEnvironmentDataSourceRepresentation = map[string]interface{}{ + "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, + } + + GoldenGateDeploymentEnvironmentResourceConfig = "" +) + +// issue-routing-tag: golden_gate/default +func TestGoldenGateDeploymentEnvironmentResource_basic(t *testing.T) { + httpreplay.SetScenario("TestGoldenGateDeploymentEnvironmentResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + datasourceName := "data.oci_golden_gate_deployment_environments.test_deployment_environments" + + acctest.SaveConfigContent("", "", "", t) + + acctest.ResourceTest(t, nil, []resource.TestStep{ + // verify datasource + { + Config: config + + acctest.GenerateDataSourceFromRepresentationMap("oci_golden_gate_deployment_environments", "test_deployment_environments", acctest.Required, acctest.Create, GoldenGateDeploymentEnvironmentDataSourceRepresentation) + + compartmentIdVariableStr + GoldenGateDeploymentEnvironmentResourceConfig, + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(datasourceName, "compartment_id", compartmentId), + + resource.TestCheckResourceAttrSet(datasourceName, "deployment_environment_collection.#"), + resource.TestCheckResourceAttr(datasourceName, "deployment_environment_collection.0.items.#", "6"), + ), + }, + }) +} diff --git a/internal/integrationtest/golden_gate_deployment_test.go b/internal/integrationtest/golden_gate_deployment_test.go index 2eca479eefe..aabf5a9cb21 100644 --- a/internal/integrationtest/golden_gate_deployment_test.go +++ b/internal/integrationtest/golden_gate_deployment_test.go @@ -43,6 +43,7 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { IDENTITY_DOMAIN_ID = "identity_domain_id" PASSWORD_SECRET_ID = "password_secret_id" PASSWORD_SECRET_ID_2 = "password_secret_id_2" + GROUP_ID = "group_id" ) var ( @@ -73,6 +74,7 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { passwordSecretId2 = utils.GetEnvSettingWithBlankDefault(PASSWORD_SECRET_ID_2) baseOggVersion = utils.GetEnvSettingWithBlankDefault(BASE_OGG_VERSION) upgradedOggVersion = utils.GetEnvSettingWithBlankDefault(UPGRADED_OGG_VERSION) + groupId = utils.GetEnvSettingWithBlankDefault(GROUP_ID) resId string resId2 string @@ -93,6 +95,20 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { "key": acctest.Representation{RepType: acctest.Optional, Update: `${var.key}`}, } + groupToRolesMappingRepresentation = map[string]interface{}{ + "security_group_id": acctest.Representation{RepType: acctest.Required, Create: `${var.group_id}`}, + "administrator_group_id": acctest.Representation{RepType: acctest.Optional, Update: `${var.group_id}`}, + "operator_group_id": acctest.Representation{RepType: acctest.Optional, Update: `${var.group_id}`}, + "user_group_id": acctest.Representation{RepType: acctest.Optional, Update: `${var.group_id}`}, + } + + goldenGateDeploymentOggDataWithGroupRoleMappingRepresentation = map[string]interface{}{ + "admin_password": acctest.Representation{RepType: acctest.Required, Create: `${var.password}`}, + "admin_username": acctest.Representation{RepType: acctest.Required, Create: `adminUsername`}, + "deployment_name": acctest.Representation{RepType: acctest.Required, Create: `depl_test_ggs_deployment_name`}, + "group_to_roles_mapping": acctest.RepresentationGroup{RepType: acctest.Required, Group: groupToRolesMappingRepresentation}, + } + deploymentMaintenanceConfigurationRepresentation = map[string]interface{}{ "bundle_release_upgrade_period_in_days": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `11`}, "interim_release_upgrade_period_in_days": acctest.Representation{RepType: acctest.Optional, Create: `5`, Update: `6`}, @@ -182,6 +198,7 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { makeVariableStr(NEW_PASSWORD, t) + makeVariableStr(PASSWORD_SECRET_ID, t) + makeVariableStr(PASSWORD_SECRET_ID_2, t) + + makeVariableStr(GROUP_ID, t) + GoldenGateDeploymentResourceDependencies if identityDomainId != "" { @@ -192,7 +209,7 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { acctest.SaveConfigContent(config+testDeploymentIdVariableStr+ acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment", "depl_test_ggs_deployment", acctest.Optional, acctest.Create, goldenGateDeploymentRepresentation), "goldengate", "deployment", t) - acctest.ResourceTest(t, testAccCheckGoldenGateDeploymentDestroy, []resource.TestStep{ + var steps = []resource.TestStep{ // verify Create { Config: config + testDeploymentIdVariableStr + @@ -220,6 +237,39 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { ), }, + // delete before next Create + { + Config: config, + }, + // check groupToRolesMapping attribute set + { + Config: config + testDeploymentIdVariableStr + acctest.GenerateResourceFromRepresentationMap("oci_golden_gate_deployment", "depl_test_ggs_deployment", acctest.Required, acctest.Create, + acctest.RepresentationCopyWithNewProperties(goldenGateDeploymentRepresentation, map[string]interface{}{ + "deployment_type": acctest.Representation{RepType: acctest.Required, Create: `OGG`}, + "ogg_data": acctest.RepresentationGroup{RepType: acctest.Required, Group: goldenGateDeploymentOggDataWithGroupRoleMappingRepresentation}, + })), + + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), + resource.TestCheckResourceAttr(resourceName, "cpu_core_count", "1"), + resource.TestCheckResourceAttr(resourceName, "deployment_type", "OGG"), + resource.TestCheckResourceAttr(resourceName, "display_name", "Terraform_integration_test"), + resource.TestCheckResourceAttr(resourceName, "is_auto_scaling_enabled", "false"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_id"), + resource.TestCheckResourceAttr(resourceName, "license_model", "LICENSE_INCLUDED"), + resource.TestCheckResourceAttr(resourceName, "ogg_data.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ogg_data.0.admin_username", "adminUsername"), + resource.TestCheckResourceAttrSet(resourceName, "ogg_data.0.deployment_name"), + resource.TestCheckResourceAttrSet(resourceName, "ogg_data.0.ogg_version"), + resource.TestCheckResourceAttr(resourceName, "ogg_data.0.group_to_roles_mapping.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ogg_data.0.group_to_roles_mapping.0.security_group_id", groupId), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + return err + }, + ), + }, // delete before next Create { Config: config, @@ -685,7 +735,8 @@ func TestGoldenGateDeploymentResource_basic(t *testing.T) { { Config: config, }, - }) + } + acctest.ResourceTest(t, testAccCheckGoldenGateDeploymentDestroy, steps) } func testAccCheckGoldenGateDeploymentDestroy(s *terraform.State) error { diff --git a/internal/service/golden_gate/golden_gate_deployment_backup_resource.go b/internal/service/golden_gate/golden_gate_deployment_backup_resource.go index ae371b953ad..304bdbd33cb 100644 --- a/internal/service/golden_gate/golden_gate_deployment_backup_resource.go +++ b/internal/service/golden_gate/golden_gate_deployment_backup_resource.go @@ -310,22 +310,10 @@ func (s *GoldenGateDeploymentBackupResourceCrud) Create() error { } workId := response.OpcWorkRequestId - workRequestResponse := oci_golden_gate.GetWorkRequestResponse{} - workRequestResponse, err = s.Client.GetWorkRequest(context.Background(), - oci_golden_gate.GetWorkRequestRequest{ - WorkRequestId: workId, - RequestMetadata: oci_common.RequestMetadata{ - RetryPolicy: tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate"), - }, - }) - if err == nil { - // The work request response contains an array of objects - for _, res := range workRequestResponse.Resources { - if res.EntityType != nil && strings.Contains(strings.ToLower(*res.EntityType), "deploymentbackup") && res.Identifier != nil { - s.D.SetId(*res.Identifier) - break - } - } + var identifier *string + identifier = response.Id + if identifier != nil { + s.D.SetId(*identifier) } return s.getDeploymentBackupFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate"), oci_golden_gate.ActionTypeCreated, s.D.Timeout(schema.TimeoutCreate)) } diff --git a/internal/service/golden_gate/golden_gate_deployment_data_source.go b/internal/service/golden_gate/golden_gate_deployment_data_source.go index f727873f62c..27928a1c7b9 100644 --- a/internal/service/golden_gate/golden_gate_deployment_data_source.go +++ b/internal/service/golden_gate/golden_gate_deployment_data_source.go @@ -67,6 +67,8 @@ func (s *GoldenGateDeploymentDataSourceCrud) SetData() error { s.D.SetId(*s.Res.Id) + s.D.Set("category", s.Res.Category) + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } @@ -103,6 +105,8 @@ func (s *GoldenGateDeploymentDataSourceCrud) SetData() error { s.D.Set("display_name", *s.Res.DisplayName) } + s.D.Set("environment_type", s.Res.EnvironmentType) + if s.Res.Fqdn != nil { s.D.Set("fqdn", *s.Res.Fqdn) } diff --git a/internal/service/golden_gate/golden_gate_deployment_environments_data_source.go b/internal/service/golden_gate/golden_gate_deployment_environments_data_source.go new file mode 100644 index 00000000000..83fe642bb7f --- /dev/null +++ b/internal/service/golden_gate/golden_gate_deployment_environments_data_source.go @@ -0,0 +1,212 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package golden_gate + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + oci_golden_gate "github.com/oracle/oci-go-sdk/v65/goldengate" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func GoldenGateDeploymentEnvironmentsDataSource() *schema.Resource { + return &schema.Resource{ + Read: readGoldenGateDeploymentEnvironments, + Schema: map[string]*schema.Schema{ + "filter": tfresource.DataSourceFiltersSchema(), + "compartment_id": { + Type: schema.TypeString, + Required: true, + }, + "deployment_environment_collection": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "items": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + + // Computed + "category": { + Type: schema.TypeString, + Computed: true, + }, + "default_cpu_core_count": { + Type: schema.TypeInt, + Computed: true, + }, + "display_name": { + Type: schema.TypeString, + Computed: true, + }, + "environment_type": { + Type: schema.TypeString, + Computed: true, + }, + "is_auto_scaling_enabled_by_default": { + Type: schema.TypeBool, + Computed: true, + }, + "max_cpu_core_count": { + Type: schema.TypeInt, + Computed: true, + }, + "memory_per_ocpu_in_gbs": { + Type: schema.TypeInt, + Computed: true, + }, + "min_cpu_core_count": { + Type: schema.TypeInt, + Computed: true, + }, + "network_bandwidth_per_ocpu_in_gbps": { + Type: schema.TypeInt, + Computed: true, + }, + "storage_usage_limit_per_ocpu_in_gbs": { + Type: schema.TypeInt, + Computed: true, + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func readGoldenGateDeploymentEnvironments(d *schema.ResourceData, m interface{}) error { + sync := &GoldenGateDeploymentEnvironmentsDataSourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).GoldenGateClient() + + return tfresource.ReadResource(sync) +} + +type GoldenGateDeploymentEnvironmentsDataSourceCrud struct { + D *schema.ResourceData + Client *oci_golden_gate.GoldenGateClient + Res *oci_golden_gate.ListDeploymentEnvironmentsResponse +} + +func (s *GoldenGateDeploymentEnvironmentsDataSourceCrud) VoidState() { + s.D.SetId("") +} + +func (s *GoldenGateDeploymentEnvironmentsDataSourceCrud) Get() error { + request := oci_golden_gate.ListDeploymentEnvironmentsRequest{} + + if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok { + tmp := compartmentId.(string) + request.CompartmentId = &tmp + } + + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "golden_gate") + + response, err := s.Client.ListDeploymentEnvironments(context.Background(), request) + if err != nil { + return err + } + + s.Res = &response + request.Page = s.Res.OpcNextPage + + for request.Page != nil { + listResponse, err := s.Client.ListDeploymentEnvironments(context.Background(), request) + if err != nil { + return err + } + + s.Res.Items = append(s.Res.Items, listResponse.Items...) + request.Page = listResponse.OpcNextPage + } + + return nil +} + +func (s *GoldenGateDeploymentEnvironmentsDataSourceCrud) SetData() error { + if s.Res == nil { + return nil + } + + s.D.SetId(tfresource.GenerateDataSourceHashID("GoldenGateDeploymentEnvironmentsDataSource-", GoldenGateDeploymentEnvironmentsDataSource(), s.D)) + resources := []map[string]interface{}{} + deploymentEnvironment := map[string]interface{}{} + + items := []interface{}{} + for _, item := range s.Res.Items { + items = append(items, DeploymentEnvironmentSummaryToMap(item)) + } + deploymentEnvironment["items"] = items + + if f, fOk := s.D.GetOkExists("filter"); fOk { + items = tfresource.ApplyFiltersInCollection(f.(*schema.Set), items, GoldenGateDeploymentEnvironmentsDataSource().Schema["deployment_environment_collection"].Elem.(*schema.Resource).Schema) + deploymentEnvironment["items"] = items + } + + resources = append(resources, deploymentEnvironment) + if err := s.D.Set("deployment_environment_collection", resources); err != nil { + return err + } + + return nil +} + +func DeploymentEnvironmentSummaryToMap(obj oci_golden_gate.DeploymentEnvironmentSummary) map[string]interface{} { + result := map[string]interface{}{} + + result["category"] = string(obj.Category) + + if obj.DefaultCpuCoreCount != nil { + result["default_cpu_core_count"] = int(*obj.DefaultCpuCoreCount) + } + + if obj.DisplayName != nil { + result["display_name"] = string(*obj.DisplayName) + } + + result["environment_type"] = string(obj.EnvironmentType) + + if obj.IsAutoScalingEnabledByDefault != nil { + result["is_auto_scaling_enabled_by_default"] = bool(*obj.IsAutoScalingEnabledByDefault) + } + + if obj.MaxCpuCoreCount != nil { + result["max_cpu_core_count"] = int(*obj.MaxCpuCoreCount) + } + + if obj.MemoryPerOcpuInGBs != nil { + result["memory_per_ocpu_in_gbs"] = int(*obj.MemoryPerOcpuInGBs) + } + + if obj.MinCpuCoreCount != nil { + result["min_cpu_core_count"] = int(*obj.MinCpuCoreCount) + } + + if obj.NetworkBandwidthPerOcpuInGbps != nil { + result["network_bandwidth_per_ocpu_in_gbps"] = int(*obj.NetworkBandwidthPerOcpuInGbps) + } + + if obj.StorageUsageLimitPerOcpuInGBs != nil { + result["storage_usage_limit_per_ocpu_in_gbs"] = int(*obj.StorageUsageLimitPerOcpuInGBs) + } + + return result +} diff --git a/internal/service/golden_gate/golden_gate_deployment_resource.go b/internal/service/golden_gate/golden_gate_deployment_resource.go index 44c79419db4..573a3107977 100644 --- a/internal/service/golden_gate/golden_gate_deployment_resource.go +++ b/internal/service/golden_gate/golden_gate_deployment_resource.go @@ -6,7 +6,6 @@ package golden_gate import ( "context" "fmt" - "log" "strconv" "strings" "time" @@ -28,7 +27,7 @@ func GoldenGateDeploymentResource() *schema.Resource { Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, }, - Timeouts: &schema.ResourceTimeout{ + Timeouts: &schema.ResourceTimeout{ // custom code, do not change Create: tfresource.GetTimeoutDuration("90m"), Update: tfresource.GetTimeoutDuration("60m"), Delete: tfresource.GetTimeoutDuration("30m"), @@ -88,6 +87,11 @@ func GoldenGateDeploymentResource() *schema.Resource { Optional: true, Computed: true, }, + "environment_type": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, "fqdn": { Type: schema.TypeString, Optional: true, @@ -259,6 +263,41 @@ func GoldenGateDeploymentResource() *schema.Resource { Optional: true, Computed: true, }, + "group_to_roles_mapping": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "security_group_id": { + Type: schema.TypeString, + Required: true, + }, + + // Optional + "administrator_group_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "operator_group_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "user_group_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, "identity_domain_id": { Type: schema.TypeString, Optional: true, @@ -273,6 +312,7 @@ func GoldenGateDeploymentResource() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, + // ForceNew: true, Upgrade is handled in different action, not part of the update operation }, "password_secret_id": { Type: schema.TypeString, @@ -287,6 +327,10 @@ func GoldenGateDeploymentResource() *schema.Resource { }, // Computed + "category": { + Type: schema.TypeString, + Computed: true, + }, "deployment_diagnostic_data": { Type: schema.TypeList, Computed: true, @@ -388,7 +432,7 @@ func GoldenGateDeploymentResource() *schema.Resource { "state": { Type: schema.TypeString, Computed: true, - Optional: true, + Optional: true, // custom code, action start and stop are implemented by this DiffSuppressFunc: tfresource.EqualIgnoreCaseSuppressDiff, ValidateFunc: validation.StringInSlice([]string{ string(oci_golden_gate.LifecycleStateInactive), @@ -630,6 +674,10 @@ func (s *GoldenGateDeploymentResourceCrud) Create() error { request.DisplayName = &tmp } + if environmentType, ok := s.D.GetOkExists("environment_type"); ok { + request.EnvironmentType = oci_golden_gate.EnvironmentTypeEnum(environmentType.(string)) + } + if fqdn, ok := s.D.GetOkExists("fqdn"); ok { tmp := fqdn.(string) request.Fqdn = &tmp @@ -747,12 +795,10 @@ func (s *GoldenGateDeploymentResourceCrud) getDeploymentFromWorkRequest(workId * actionTypeEnum oci_golden_gate.ActionTypeEnum, timeout time.Duration) error { // Wait until it finishes - deploymentId, err := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", + deploymentId, err := deploymentWaitForWorkRequest(workId, "deployment", actionTypeEnum, timeout, s.DisableNotFoundRetries, s.Client) if err != nil { - // Try to cancel the work request - log.Printf("[DEBUG] operation failed: %v for identifier: %v\n", workId, deploymentId) return err } s.D.SetId(*deploymentId) @@ -760,7 +806,7 @@ func (s *GoldenGateDeploymentResourceCrud) getDeploymentFromWorkRequest(workId * return s.Get() } -func goldenGateDeploymentWorkRequestShouldRetryFunc(timeout time.Duration) func(response oci_common.OCIOperationResponse) bool { +func deploymentWorkRequestShouldRetryFunc(timeout time.Duration) func(response oci_common.OCIOperationResponse) bool { startTime := time.Now() stopTime := startTime.Add(timeout) return func(response oci_common.OCIOperationResponse) bool { @@ -783,16 +829,17 @@ func goldenGateDeploymentWorkRequestShouldRetryFunc(timeout time.Duration) func( } } -func goldenGateDeploymentWaitForWorkRequest(wId *string, entityType string, action oci_golden_gate.ActionTypeEnum, +func deploymentWaitForWorkRequest(wId *string, entityType string, action oci_golden_gate.ActionTypeEnum, timeout time.Duration, disableFoundRetries bool, client *oci_golden_gate.GoldenGateClient) (*string, error) { retryPolicy := tfresource.GetRetryPolicy(disableFoundRetries, "golden_gate") - retryPolicy.ShouldRetryOperation = goldenGateDeploymentWorkRequestShouldRetryFunc(timeout) + retryPolicy.ShouldRetryOperation = deploymentWorkRequestShouldRetryFunc(timeout) response := oci_golden_gate.GetWorkRequestResponse{} stateConf := &resource.StateChangeConf{ Pending: []string{ string(oci_golden_gate.OperationStatusInProgress), string(oci_golden_gate.OperationStatusAccepted), + //string(oci_golden_gate.OperationStatusCanceling), //Canceling workrequest is N/A for GGS }, Target: []string{ string(oci_golden_gate.OperationStatusSucceeded), @@ -830,13 +877,13 @@ func goldenGateDeploymentWaitForWorkRequest(wId *string, entityType string, acti // The workrequest may have failed, check for errors if identifier is not found or work failed or got cancelled if identifier == nil || response.Status == oci_golden_gate.OperationStatusFailed || response.Status == oci_golden_gate.OperationStatusCanceled { - return nil, getErrorFromDeploymentWorkRequest(client, wId, retryPolicy, entityType, action) + return nil, getErrorFromGoldenGateDeploymentWorkRequest(client, wId, retryPolicy, entityType, action) } return identifier, nil } -func getErrorFromDeploymentWorkRequest(client *oci_golden_gate.GoldenGateClient, workId *string, retryPolicy *oci_common.RetryPolicy, entityType string, action oci_golden_gate.ActionTypeEnum) error { +func getErrorFromGoldenGateDeploymentWorkRequest(client *oci_golden_gate.GoldenGateClient, workId *string, retryPolicy *oci_common.RetryPolicy, entityType string, action oci_golden_gate.ActionTypeEnum) error { response, err := client.ListWorkRequestErrors(context.Background(), oci_golden_gate.ListWorkRequestErrorsRequest{ WorkRequestId: workId, @@ -914,6 +961,10 @@ func (s *GoldenGateDeploymentResourceCrud) Update() error { request.DisplayName = &tmp } + if environmentType, ok := s.D.GetOkExists("environment_type"); ok { + request.EnvironmentType = oci_golden_gate.EnvironmentTypeEnum(environmentType.(string)) + } + if fqdn, ok := s.D.GetOkExists("fqdn"); ok { tmp := fqdn.(string) request.Fqdn = &tmp @@ -1030,12 +1081,14 @@ func (s *GoldenGateDeploymentResourceCrud) Delete() error { workId := response.OpcWorkRequestId // Wait until it finishes - _, delWorkRequestErr := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", + _, delWorkRequestErr := deploymentWaitForWorkRequest(workId, "deployment", oci_golden_gate.ActionTypeDeleted, s.D.Timeout(schema.TimeoutDelete), s.DisableNotFoundRetries, s.Client) return delWorkRequestErr } func (s *GoldenGateDeploymentResourceCrud) SetData() error { + s.D.Set("category", s.Res.Category) + if s.Res.CompartmentId != nil { s.D.Set("compartment_id", *s.Res.CompartmentId) } @@ -1072,6 +1125,8 @@ func (s *GoldenGateDeploymentResourceCrud) SetData() error { s.D.Set("display_name", *s.Res.DisplayName) } + s.D.Set("environment_type", s.Res.EnvironmentType) + if s.Res.Fqdn != nil { s.D.Set("fqdn", *s.Res.Fqdn) } @@ -1148,10 +1203,10 @@ func (s *GoldenGateDeploymentResourceCrud) SetData() error { for _, item := range s.Res.NsgIds { nsgIds = append(nsgIds, item) } - s.D.Set("nsg_ids", nsgIds) + s.D.Set("nsg_ids", nsgIds) // custom code, do not change if s.Res.OggData != nil { - s.D.Set("ogg_data", []interface{}{OggDeploymentToMap(s.Res.OggData, s.D)}) + s.D.Set("ogg_data", []interface{}{OggDeploymentToMap(s.Res.OggData, s.D)}) // custom code, do not change } else { s.D.Set("ogg_data", nil) } @@ -1324,8 +1379,8 @@ func MaintenanceConfigurationToMap(obj *oci_golden_gate.MaintenanceConfiguration return result } -func (s *GoldenGateDeploymentResourceCrud) mapToUpdateMaintenanceWindowDetails(fieldKeyFormat string) (oci_golden_gate.UpdateMaintenanceWindowDetails, error) { - result := oci_golden_gate.UpdateMaintenanceWindowDetails{} +func (s *GoldenGateDeploymentResourceCrud) mapToCreateMaintenanceWindowDetails(fieldKeyFormat string) (oci_golden_gate.CreateMaintenanceWindowDetails, error) { + result := oci_golden_gate.CreateMaintenanceWindowDetails{} if day, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "day")); ok { result.Day = oci_golden_gate.DayEnum(day.(string)) @@ -1339,8 +1394,8 @@ func (s *GoldenGateDeploymentResourceCrud) mapToUpdateMaintenanceWindowDetails(f return result, nil } -func (s *GoldenGateDeploymentResourceCrud) mapToCreateMaintenanceWindowDetails(fieldKeyFormat string) (oci_golden_gate.CreateMaintenanceWindowDetails, error) { - result := oci_golden_gate.CreateMaintenanceWindowDetails{} +func (s *GoldenGateDeploymentResourceCrud) mapToUpdateMaintenanceWindowDetails(fieldKeyFormat string) (oci_golden_gate.UpdateMaintenanceWindowDetails, error) { + result := oci_golden_gate.UpdateMaintenanceWindowDetails{} if day, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "day")); ok { result.Day = oci_golden_gate.DayEnum(day.(string)) @@ -1393,6 +1448,17 @@ func (s *GoldenGateDeploymentResourceCrud) mapToCreateOggDeploymentDetails(field result.DeploymentName = &tmp } + if groupToRolesMapping, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "group_to_roles_mapping")); ok { + if tmpList := groupToRolesMapping.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "group_to_roles_mapping"), 0) + tmp, err := s.mapToGroupToRolesMappingDetails(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert group_to_roles_mapping, encountered error: %v", err) + } + result.GroupToRolesMapping = &tmp + } + } + if identityDomainId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "identity_domain_id")); ok { tmp := identityDomainId.(string) result.IdentityDomainId = &tmp @@ -1419,7 +1485,7 @@ func (s *GoldenGateDeploymentResourceCrud) mapToCreateOggDeploymentDetails(field func (s *GoldenGateDeploymentResourceCrud) mapToUpdateOggDeploymentDetails(fieldKeyFormat string) (oci_golden_gate.UpdateOggDeploymentDetails, error) { result := oci_golden_gate.UpdateOggDeploymentDetails{} - adminPasswordKeyFormat := fmt.Sprintf(fieldKeyFormat, "admin_password") + adminPasswordKeyFormat := fmt.Sprintf(fieldKeyFormat, "admin_password") // custom code, do not change if adminPassword, ok := s.D.GetOk(adminPasswordKeyFormat); ok && s.D.HasChange(adminPasswordKeyFormat) { tmp := adminPassword.(string) result.AdminPassword = &tmp @@ -1430,27 +1496,38 @@ func (s *GoldenGateDeploymentResourceCrud) mapToUpdateOggDeploymentDetails(field result.AdminUsername = &tmp } - if certificate, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "certificate")); ok { + if certificate, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "certificate")); ok { // custom code, do not change tmp := certificate.(string) result.Certificate = &tmp } - if credentialStore, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "credential_store")); ok { + if credentialStore, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "credential_store")); ok { // custom code, do not change result.CredentialStore = oci_golden_gate.CredentialStoreEnum(credentialStore.(string)) } - if identityDomainId, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "identity_domain_id")); ok { + if groupToRolesMapping, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "group_to_roles_mapping")); ok { + if tmpList := groupToRolesMapping.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "group_to_roles_mapping"), 0) + tmp, err := s.mapToUpdateGroupToRolesMappingDetails(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert group_to_roles_mapping, encountered error: %v", err) + } + result.GroupToRolesMapping = &tmp + } + } + + if identityDomainId, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "identity_domain_id")); ok { // custom code, do not change tmp := identityDomainId.(string) result.IdentityDomainId = &tmp } - keyKeyFormat := fmt.Sprintf(fieldKeyFormat, "key") + keyKeyFormat := fmt.Sprintf(fieldKeyFormat, "key") // custom code, do not change if key, ok := s.D.GetOk(keyKeyFormat); ok && s.D.HasChange(keyKeyFormat) { tmp := key.(string) result.Key = &tmp } - if passwordSecretId, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "password_secret_id")); ok { + if passwordSecretId, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "password_secret_id")); ok { // custom code, do not change tmp := passwordSecretId.(string) result.PasswordSecretId = &tmp } @@ -1458,7 +1535,7 @@ func (s *GoldenGateDeploymentResourceCrud) mapToUpdateOggDeploymentDetails(field return result, nil } -func OggDeploymentToMap(obj *oci_golden_gate.OggDeployment, resourceData *schema.ResourceData) map[string]interface{} { +func OggDeploymentToMap(obj *oci_golden_gate.OggDeployment, resourceData *schema.ResourceData) map[string]interface{} { // custom code, do not change result := map[string]interface{}{} if oggData, ok := resourceData.GetOkExists("ogg_data"); ok { @@ -1490,6 +1567,10 @@ func OggDeploymentToMap(obj *oci_golden_gate.OggDeployment, resourceData *schema result["deployment_name"] = string(*obj.DeploymentName) } + if obj.GroupToRolesMapping != nil { + result["group_to_roles_mapping"] = []interface{}{GroupToRolesMappingDetailsToMap(obj.GroupToRolesMapping)} + } + if obj.IdentityDomainId != nil { result["identity_domain_id"] = string(*obj.IdentityDomainId) } @@ -1533,9 +1614,11 @@ func DeploymentDiagnosticDataToMap(obj *oci_golden_gate.DeploymentDiagnosticData return result } -func GoldenGateDeploymentSummaryToMap(obj oci_golden_gate.DeploymentSummary) map[string]interface{} { +func DeploymentSummaryToMap(obj oci_golden_gate.DeploymentSummary) map[string]interface{} { result := map[string]interface{}{} + result["category"] = string(obj.Category) + if obj.CompartmentId != nil { result["compartment_id"] = string(*obj.CompartmentId) } @@ -1562,6 +1645,8 @@ func GoldenGateDeploymentSummaryToMap(obj oci_golden_gate.DeploymentSummary) map result["display_name"] = string(*obj.DisplayName) } + result["environment_type"] = string(obj.EnvironmentType) + if obj.Fqdn != nil { result["fqdn"] = string(*obj.Fqdn) } @@ -1647,6 +1732,80 @@ func GoldenGateDeploymentSummaryToMap(obj oci_golden_gate.DeploymentSummary) map return result } +func (s *GoldenGateDeploymentResourceCrud) mapToGroupToRolesMappingDetails(fieldKeyFormat string) (oci_golden_gate.GroupToRolesMappingDetails, error) { + result := oci_golden_gate.GroupToRolesMappingDetails{} + + if administratorGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "administrator_group_id")); ok { + tmp := administratorGroupId.(string) + result.AdministratorGroupId = &tmp + } + + if operatorGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "operator_group_id")); ok { + tmp := operatorGroupId.(string) + result.OperatorGroupId = &tmp + } + + if securityGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_group_id")); ok { + tmp := securityGroupId.(string) + result.SecurityGroupId = &tmp + } + + if userGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "user_group_id")); ok { + tmp := userGroupId.(string) + result.UserGroupId = &tmp + } + + return result, nil +} + +func (s *GoldenGateDeploymentResourceCrud) mapToUpdateGroupToRolesMappingDetails(fieldKeyFormat string) (oci_golden_gate.UpdateGroupToRolesMappingDetails, error) { + result := oci_golden_gate.UpdateGroupToRolesMappingDetails{} + + if administratorGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "administrator_group_id")); ok { + tmp := administratorGroupId.(string) + result.AdministratorGroupId = &tmp + } + + if operatorGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "operator_group_id")); ok { + tmp := operatorGroupId.(string) + result.OperatorGroupId = &tmp + } + + if securityGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "security_group_id")); ok { + tmp := securityGroupId.(string) + result.SecurityGroupId = &tmp + } + + if userGroupId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "user_group_id")); ok { + tmp := userGroupId.(string) + result.UserGroupId = &tmp + } + + return result, nil +} + +func GroupToRolesMappingDetailsToMap(obj *oci_golden_gate.GroupToRolesMappingDetails) map[string]interface{} { + result := map[string]interface{}{} + + if obj.AdministratorGroupId != nil { + result["administrator_group_id"] = string(*obj.AdministratorGroupId) + } + + if obj.OperatorGroupId != nil { + result["operator_group_id"] = string(*obj.OperatorGroupId) + } + + if obj.SecurityGroupId != nil { + result["security_group_id"] = string(*obj.SecurityGroupId) + } + + if obj.UserGroupId != nil { + result["user_group_id"] = string(*obj.UserGroupId) + } + + return result +} + func (s *GoldenGateDeploymentResourceCrud) updateCompartment(compartment interface{}) error { changeCompartmentRequest := oci_golden_gate.ChangeDeploymentCompartmentRequest{} @@ -1670,9 +1829,8 @@ func (s *GoldenGateDeploymentResourceCrud) updateCompartment(compartment interfa workId := response.OpcWorkRequestId // Wait until it finishes - _, changeWorkRequestErr := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", - oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries, s.Client) - return changeWorkRequestErr + return s.getDeploymentFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate"), + oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate)) } func (s *GoldenGateDeploymentResourceCrud) upgradeToSpecificVersion(oggVersion interface{}) error { @@ -1700,7 +1858,7 @@ func (s *GoldenGateDeploymentResourceCrud) upgradeToSpecificVersion(oggVersion i workId := response.OpcWorkRequestId // Wait until it finishes - _, upgradeWorkRequestErr := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", + _, upgradeWorkRequestErr := deploymentWaitForWorkRequest(workId, "deployment", oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries, s.Client) if upgradeWorkRequestErr != nil { return upgradeWorkRequestErr @@ -1746,8 +1904,8 @@ func (s *GoldenGateDeploymentResourceCrud) startDeployment() error { workId := response.OpcWorkRequestId // Wait until it finishes - _, startWorkRequestErr := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", - oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries, s.Client) + startWorkRequestErr := s.getDeploymentFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate"), + oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate)) if startWorkRequestErr != nil { return startWorkRequestErr } @@ -1775,8 +1933,8 @@ func (s *GoldenGateDeploymentResourceCrud) stopDeployment() error { workId := response.OpcWorkRequestId // Wait until it finishes - _, stopWorkRequestErr := goldenGateDeploymentWaitForWorkRequest(workId, "deployment", - oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries, s.Client) + stopWorkRequestErr := s.getDeploymentFromWorkRequest(workId, tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "golden_gate"), + oci_golden_gate.ActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate)) if stopWorkRequestErr != nil { return stopWorkRequestErr } diff --git a/internal/service/golden_gate/golden_gate_deployments_data_source.go b/internal/service/golden_gate/golden_gate_deployments_data_source.go index 1bbd14e6214..ecc1a0898bb 100644 --- a/internal/service/golden_gate/golden_gate_deployments_data_source.go +++ b/internal/service/golden_gate/golden_gate_deployments_data_source.go @@ -160,7 +160,7 @@ func (s *GoldenGateDeploymentsDataSourceCrud) SetData() error { items := []interface{}{} for _, item := range s.Res.Items { - items = append(items, GoldenGateDeploymentSummaryToMap(item)) + items = append(items, DeploymentSummaryToMap(item)) } deployment["items"] = items diff --git a/internal/service/golden_gate/register_datasource.go b/internal/service/golden_gate/register_datasource.go index fbbc2a763e9..e07793e87d1 100644 --- a/internal/service/golden_gate/register_datasource.go +++ b/internal/service/golden_gate/register_datasource.go @@ -17,6 +17,7 @@ func RegisterDatasource() { tfresource.RegisterDatasource("oci_golden_gate_deployment_backups", GoldenGateDeploymentBackupsDataSource()) tfresource.RegisterDatasource("oci_golden_gate_deployment_certificate", GoldenGateDeploymentCertificateDataSource()) tfresource.RegisterDatasource("oci_golden_gate_deployment_certificates", GoldenGateDeploymentCertificatesDataSource()) + tfresource.RegisterDatasource("oci_golden_gate_deployment_environments", GoldenGateDeploymentEnvironmentsDataSource()) tfresource.RegisterDatasource("oci_golden_gate_deployment_type", GoldenGateDeploymentTypeDataSource()) tfresource.RegisterDatasource("oci_golden_gate_deployment_types", GoldenGateDeploymentTypesDataSource()) tfresource.RegisterDatasource("oci_golden_gate_deployment_upgrade", GoldenGateDeploymentUpgradeDataSource()) diff --git a/website/docs/d/golden_gate_deployment.html.markdown b/website/docs/d/golden_gate_deployment.html.markdown index d4d1903f317..cd82b93b1d9 100644 --- a/website/docs/d/golden_gate_deployment.html.markdown +++ b/website/docs/d/golden_gate_deployment.html.markdown @@ -33,6 +33,7 @@ The following arguments are supported: The following attributes are exported: +* `category` - The deployment category defines the broad separation of the deployment type into three categories. Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment being referenced. * `cpu_core_count` - The Minimum number of OCPUs to be made available for this Deployment. * `defined_tags` - Tags defined for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` @@ -48,6 +49,7 @@ The following attributes are exported: * `deployment_url` - The URL of a resource. * `description` - Metadata about this specific object. * `display_name` - An object's Display Name. +* `environment_type` - Specifies whether the deployment is used in a production or development/testing environment. * `fqdn` - A three-label Fully Qualified Domain Name (FQDN) for a resource. * `freeform_tags` - A simple key-value pair that is applied without any predefined name, type, or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` * `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the deployment being referenced. @@ -57,7 +59,7 @@ The following attributes are exported: * `is_healthy` - True if all of the aggregate resources are working correctly. * `is_latest_version` - Indicates if the resource is the the latest available version. * `is_public` - True if this object is publicly available. -* `is_storage_utilization_limit_exceeded` - Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. +* `is_storage_utilization_limit_exceeded` - Deprecated: This field is not updated and will be removed in future versions. If storage utilization exceeds the limit, the respective warning message will appear in deployment messages, which can be accessed through /messages?deploymentId=. Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. * `license_model` - The Oracle license model that applies to a Deployment. * `lifecycle_details` - Describes the object's current state in detail. For example, it can be used to provide actionable information for a resource in a Failed state. * `lifecycle_sub_state` - Possible GGS lifecycle sub-states. @@ -85,6 +87,11 @@ The following attributes are exported: * `certificate` - The base64 encoded content of the PEM file containing the SSL certificate. * `credential_store` - The type of credential store for OGG. * `deployment_name` - The name given to the GoldenGate service deployment. The name must be 1 to 32 characters long, must contain only alphanumeric characters and must start with a letter. + * `group_to_roles_mapping` - Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. User belonging to each group can only perform the actions according to the role the respective group is mapped to. + * `administrator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. It grants full access to the user, including the ability to alter general, non-security related operational parameters and profiles of the server. + * `operator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. It allows users to perform only operational actions, like starting and stopping resources. Operators cannot alter the operational parameters or profiles of the MA server. + * `security_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. It grants administration of security related objects and invoke security related service requests. This role has full privileges. + * `user_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. It allows information-only service requests, which do not alter or affect the operation of either the MA. Examples of query and read-only information include performance metric information and resource status and monitoring information * `identity_domain_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Identity Domain when IAM credential store is used. * `ogg_version` - Version of OGG * `password_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the deployment password is stored. diff --git a/website/docs/d/golden_gate_deployment_environments.html.markdown b/website/docs/d/golden_gate_deployment_environments.html.markdown new file mode 100644 index 00000000000..567b6ec374a --- /dev/null +++ b/website/docs/d/golden_gate_deployment_environments.html.markdown @@ -0,0 +1,53 @@ +--- +subcategory: "Golden Gate" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_golden_gate_deployment_environments" +sidebar_current: "docs-oci-datasource-golden_gate-deployment_environments" +description: |- + Provides the list of Deployment Environments in Oracle Cloud Infrastructure Golden Gate service +--- + +# Data Source: oci_golden_gate_deployment_environments +This data source provides the list of Deployment Environments in Oracle Cloud Infrastructure Golden Gate service. + +Returns an array of DeploymentEnvironmentDescriptor + + +## Example Usage + +```hcl +data "oci_golden_gate_deployment_environments" "test_deployment_environments" { + #Required + compartment_id = var.compartment_id +} +``` + +## Argument Reference + +The following arguments are supported: + +* `compartment_id` - (Required) The OCID of the compartment that contains the work request. Work requests should be scoped to the same compartment as the resource the work request affects. If the work request concerns multiple resources, and those resources are not in the same compartment, it is up to the service team to pick the primary resource whose compartment should be used. + + +## Attributes Reference + +The following attributes are exported: + +* `deployment_environment_collection` - The list of deployment_environment_collection. + +### DeploymentEnvironment Reference + +The following attributes are exported: + +* `items` - Array of DeploymentEnvironmentSummary objects. + * `category` - The deployment category defines the broad separation of the deployment type into three categories. Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. + * `default_cpu_core_count` - The default CPU core count. + * `display_name` - An object's Display Name. + * `environment_type` - Specifies whether the deployment is used in a production or development/testing environment. + * `is_auto_scaling_enabled_by_default` - Specifies whether the "Auto scaling" option should be enabled by default or not. + * `max_cpu_core_count` - The maximum CPU core count. + * `memory_per_ocpu_in_gbs` - The multiplier value between CPU core count and memory size. + * `min_cpu_core_count` - The minimum CPU core count. + * `network_bandwidth_per_ocpu_in_gbps` - The multiplier value between CPU core count and network bandwidth. + * `storage_usage_limit_per_ocpu_in_gbs` - The multiplier value between CPU core count and storage usage limit size. + diff --git a/website/docs/d/golden_gate_deployments.html.markdown b/website/docs/d/golden_gate_deployments.html.markdown index fe1b1b286d6..b3a4c686ebe 100644 --- a/website/docs/d/golden_gate_deployments.html.markdown +++ b/website/docs/d/golden_gate_deployments.html.markdown @@ -55,6 +55,7 @@ The following attributes are exported: The following attributes are exported: +* `category` - The deployment category defines the broad separation of the deployment type into three categories. Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment being referenced. * `cpu_core_count` - The Minimum number of OCPUs to be made available for this Deployment. * `defined_tags` - Tags defined for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` @@ -70,6 +71,7 @@ The following attributes are exported: * `deployment_url` - The URL of a resource. * `description` - Metadata about this specific object. * `display_name` - An object's Display Name. +* `environment_type` - Specifies whether the deployment is used in a production or development/testing environment. * `fqdn` - A three-label Fully Qualified Domain Name (FQDN) for a resource. * `freeform_tags` - A simple key-value pair that is applied without any predefined name, type, or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` * `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the deployment being referenced. @@ -79,7 +81,7 @@ The following attributes are exported: * `is_healthy` - True if all of the aggregate resources are working correctly. * `is_latest_version` - Indicates if the resource is the the latest available version. * `is_public` - True if this object is publicly available. -* `is_storage_utilization_limit_exceeded` - Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. +* `is_storage_utilization_limit_exceeded` - Deprecated: This field is not updated and will be removed in future versions. If storage utilization exceeds the limit, the respective warning message will appear in deployment messages, which can be accessed through /messages?deploymentId=. Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. * `license_model` - The Oracle license model that applies to a Deployment. * `lifecycle_details` - Describes the object's current state in detail. For example, it can be used to provide actionable information for a resource in a Failed state. * `lifecycle_sub_state` - Possible GGS lifecycle sub-states. @@ -107,6 +109,11 @@ The following attributes are exported: * `certificate` - The base64 encoded content of the PEM file containing the SSL certificate. * `credential_store` - The type of credential store for OGG. * `deployment_name` - The name given to the GoldenGate service deployment. The name must be 1 to 32 characters long, must contain only alphanumeric characters and must start with a letter. + * `group_to_roles_mapping` - Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. User belonging to each group can only perform the actions according to the role the respective group is mapped to. + * `administrator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. It grants full access to the user, including the ability to alter general, non-security related operational parameters and profiles of the server. + * `operator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. It allows users to perform only operational actions, like starting and stopping resources. Operators cannot alter the operational parameters or profiles of the MA server. + * `security_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. It grants administration of security related objects and invoke security related service requests. This role has full privileges. + * `user_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. It allows information-only service requests, which do not alter or affect the operation of either the MA. Examples of query and read-only information include performance metric information and resource status and monitoring information * `identity_domain_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Identity Domain when IAM credential store is used. * `ogg_version` - Version of OGG * `password_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the deployment password is stored. diff --git a/website/docs/r/golden_gate_connection.html.markdown b/website/docs/r/golden_gate_connection.html.markdown index 52cad863fb5..8418d7a8b95 100644 --- a/website/docs/r/golden_gate_connection.html.markdown +++ b/website/docs/r/golden_gate_connection.html.markdown @@ -122,17 +122,18 @@ The following arguments are supported: * `access_key_id` - (Required when connection_type=AMAZON_KINESIS | AMAZON_S3) (Updatable) Access key ID to access the Amazon S3 bucket. e.g.: "this-is-not-the-secret" * `account_key` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure storage account key. This property is required when 'authenticationType' is set to 'SHARED_KEY'. e.g.: pa3WbhVATzj56xD4DH1VjOUhApRGEGHvOo58eQJVWIzX+j8j4CUVFcTjpIqDSRaSa1Wo2LbWY5at+AStEgLOIQ== -* `account_name` - (Required when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Sets the Azure storage account name. -* `additional_attributes` - (Applicable when connection_type=MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) An array of name-value pair attribute entries. Used as additional parameters in connection string. - * `name` - (Required when connection_type=MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The name of the property entry. - * `value` - (Required when connection_type=MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The value of the property entry. -* `authentication_mode` - (Applicable when connection_type=ORACLE) (Updatable) Authentication mode. It can be provided at creation of Oracle Autonomous Database Serverless connections, when a databaseId is provided. The default value is MTLS. -* `authentication_type` - (Required when connection_type=AZURE_DATA_LAKE_STORAGE | ELASTICSEARCH | JAVA_MESSAGE_SERVICE | KAFKA_SCHEMA_REGISTRY | REDIS | SNOWFLAKE) (Updatable) Authentication type for Java Message Service. If not provided, default is NONE. Optional until 2024-06-27, in the release after it will be made required. -* `azure_tenant_id` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure tenant ID of the application. This property is required when 'authenticationType' is set to 'AZURE_ACTIVE_DIRECTORY'. e.g.: 14593954-d337-4a61-a364-9f758c64f97f +* `account_name` - (Required when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Sets the Azure storage account name. +* `additional_attributes` - (Applicable when connection_type=DB2 | MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) An array of name-value pair attribute entries. Used as additional parameters in connection string. + * `name` - (Required when connection_type=DB2 | MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The name of the property entry. + * `value` - (Required when connection_type=DB2 | MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The value of the property entry. +* `authentication_mode` - (Applicable when connection_type=ORACLE) (Updatable) Authentication mode. It can be provided at creation of Oracle Autonomous Database Serverless connections, when a databaseId is provided. The default value is MTLS. +* `authentication_type` - (Required when connection_type=AZURE_DATA_LAKE_STORAGE | ELASTICSEARCH | JAVA_MESSAGE_SERVICE | KAFKA_SCHEMA_REGISTRY | REDIS | SNOWFLAKE) (Updatable) Authentication type for Java Message Service. If not provided, default is NONE. Optional until 2024-06-27, in the release after it will be made required. +* `azure_tenant_id` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure tenant ID of the application. This property is required when 'authenticationType' is set to 'AZURE_ACTIVE_DIRECTORY'. e.g.: 14593954-d337-4a61-a364-9f758c64f97f * `bootstrap_servers` - (Applicable when connection_type=KAFKA) (Updatable) Kafka bootstrap. Equivalent of bootstrap.servers configuration property in Kafka: list of KafkaBootstrapServer objects specified by host/port. Used for establishing the initial connection to the Kafka cluster. Example: `"server1.example.com:9092,server2.example.com:9092"` * `host` - (Required when connection_type=KAFKA) (Updatable) The name or address of a host. - * `port` - (Applicable when connection_type=KAFKA) (Updatable) The port of an endpoint usually specified for a connection. + * `port` - (Applicable when connection_type=KAFKA) (Updatable) The port of an endpoint usually specified for a connection. * `private_ip` - (Applicable when connection_type=KAFKA) (Updatable) Deprecated: this field will be removed in future versions. Either specify the private IP in the connectionString or host field, or make sure the host name is resolvable in the target VCN. + The private IP address of the connection's endpoint in the customer's VCN, typically a database endpoint or a big data endpoint (e.g. Kafka bootstrap server). In case the privateIp is provided, the subnetId must also be provided. In case the privateIp (and the subnetId) is not provided it is assumed the datasource is publicly accessible. In case the connection is accessible only privately, the lack of privateIp will result in not being able to access the connection. * `client_id` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure client ID of the application. This property is required when 'authenticationType' is set to 'AZURE_ACTIVE_DIRECTORY'. e.g.: 06ecaabf-8b80-4ec8-a0ec-20cbf463703d * `client_secret` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure client secret (aka application password) for authentication. This property is required when 'authenticationType' is set to 'AZURE_ACTIVE_DIRECTORY'. e.g.: dO29Q~F5-VwnA.lZdd11xFF_t5NAXCaGwDl9NbT1 @@ -149,7 +150,7 @@ The following arguments are supported: * `defined_tags` - (Optional) (Updatable) Tags defined for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` * `deployment_id` - (Applicable when connection_type=GOLDENGATE) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the deployment being referenced. * `description` - (Optional) (Updatable) Metadata about this specific object. -* `display_name` - (Required) (Updatable) An object's Display Name. +* `display_name` - (Required) (Updatable) An object's Display Name. * `endpoint` - (Applicable when connection_type=AZURE_DATA_LAKE_STORAGE) (Updatable) Azure Storage service endpoint. e.g: https://test.blob.core.windows.net * `fingerprint` - (Applicable when connection_type=ELASTICSEARCH) (Updatable) Fingerprint required by TLS security protocol. Eg.: '6152b2dfbff200f973c5074a5b91d06ab3b472c07c09a1ea57bb7fd406cdce9c' * `freeform_tags` - (Optional) (Updatable) A simple key-value pair that is applied without any predefined name, type, or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` @@ -170,6 +171,7 @@ The following arguments are supported: * `password` - (Required when connection_type=AMAZON_REDSHIFT | AZURE_SYNAPSE_ANALYTICS | DB2 | ELASTICSEARCH | GOLDENGATE | JAVA_MESSAGE_SERVICE | KAFKA | KAFKA_SCHEMA_REGISTRY | MICROSOFT_SQLSERVER | MONGODB | MYSQL | ORACLE | POSTGRESQL | REDIS | SNOWFLAKE) (Updatable) The password Oracle GoldenGate uses to connect the associated system of the given technology. It must conform to the specific security requirements including length, case sensitivity, and so on. * `port` - (Required when connection_type=DB2 | GOLDENGATE | MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The port of an endpoint usually specified for a connection. * `private_ip` - (Applicable when connection_type=GOLDENGATE | JAVA_MESSAGE_SERVICE | KAFKA_SCHEMA_REGISTRY | MICROSOFT_SQLSERVER | MYSQL | ORACLE | POSTGRESQL) (Updatable) Deprecated: this field will be removed in future versions. Either specify the private IP in the connectionString or host field, or make sure the host name is resolvable in the target VCN. + The private IP address of the connection's endpoint in the customer's VCN, typically a database endpoint or a big data endpoint (e.g. Kafka bootstrap server). In case the privateIp is provided, the subnetId must also be provided. In case the privateIp (and the subnetId) is not provided it is assumed the datasource is publicly accessible. In case the connection is accessible only privately, the lack of privateIp will result in not being able to access the connection. * `private_key_file` - (Required when connection_type=OCI_OBJECT_STORAGE | ORACLE_NOSQL | SNOWFLAKE) (Updatable) The base64 encoded content of the private key file (PEM file) corresponding to the API key of the fingerprint. See documentation: https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/managingcredentials.htm * `private_key_passphrase` - (Applicable when connection_type=OCI_OBJECT_STORAGE | ORACLE_NOSQL | SNOWFLAKE) (Updatable) Password if the private key file is encrypted. @@ -186,12 +188,12 @@ The following arguments are supported: * `session_mode` - (Applicable when connection_type=ORACLE) (Updatable) The mode of the database connection session to be established by the data client. 'REDIRECT' - for a RAC database, 'DIRECT' - for a non-RAC database. Connection to a RAC database involves a redirection received from the SCAN listeners to the database node to connect to. By default the mode would be DIRECT. * `should_use_jndi` - (Required when connection_type=JAVA_MESSAGE_SERVICE) (Updatable) If set to true, Java Naming and Directory Interface (JNDI) properties should be provided. * `should_validate_server_certificate` - (Applicable when connection_type=MICROSOFT_SQLSERVER) (Updatable) If set to true, the driver validates the certificate that is sent by the database server. -* `ssl_ca` - (Applicable when connection_type=MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) Database Certificate - The base64 encoded content of pem file containing the server public key (for 1-way SSL). -* `ssl_cert` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) Client Certificate - The base64 encoded content of client-cert.pem file containing the client public key (for 2-way SSL). -* `ssl_client_keystash` - (Applicable when connection_type=DB2) (Updatable) The base64 encoded keystash file which contains the encrypted password to the key database file. -* `ssl_client_keystoredb` - (Applicable when connection_type=DB2) (Updatable) The base64 encoded keystore file created at the client containing the server certificate / CA root certificate. -* `ssl_crl` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) Certificates revoked by certificate authorities (CA). Server certificate must not be on this list (for 1 and 2-way SSL). Note: This is an optional and that too only applicable if TLS/MTLS option is selected. -* `ssl_key` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) Client Key - The client-key.pem containing the client private key (for 2-way SSL). +* `ssl_ca` - (Applicable when connection_type=MICROSOFT_SQLSERVER | MYSQL | POSTGRESQL) (Updatable) The base64 encoded certificate of the trusted certificate authorities (Trusted CA) for PostgreSQL. The supported file formats are .pem and .crt. +* `ssl_cert` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) Client Certificate - The base64 encoded content of a .pem or .crt file. containing the client public key (for 2-way SSL). +* `ssl_client_keystash` - (Applicable when connection_type=DB2) (Updatable) The base64 encoded keystash file which contains the encrypted password to the key database file. +* `ssl_client_keystoredb` - (Applicable when connection_type=DB2) (Updatable) The base64 encoded keystore file created at the client containing the server certificate / CA root certificate. +* `ssl_crl` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) The base64 encoded list of certificates revoked by the trusted certificate authorities (Trusted CA). Note: This is an optional property and only applicable if TLS/MTLS option is selected. +* `ssl_key` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) Client Key – The base64 encoded content of a .pem or .crt file containing the client private key (for 2-way SSL). * `ssl_key_password` - (Applicable when connection_type=JAVA_MESSAGE_SERVICE | KAFKA | KAFKA_SCHEMA_REGISTRY) (Updatable) The password for the cert inside of the KeyStore. In case it differs from the KeyStore password, it should be provided. * `ssl_mode` - (Applicable when connection_type=MYSQL | POSTGRESQL) (Updatable) SSL modes for PostgreSQL. * `ssl_server_certificate` - (Applicable when connection_type=DB2) (Updatable) The base64 encoded file which contains the self-signed server certificate / Certificate Authority (CA) certificate. @@ -205,7 +207,8 @@ The following arguments are supported: * `user_id` - (Applicable when connection_type=OCI_OBJECT_STORAGE | ORACLE_NOSQL) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Oracle Cloud Infrastructure user who will access the Oracle NoSQL database. The user must have write access to the table they want to connect to. * `username` - (Required when connection_type=AMAZON_REDSHIFT | AZURE_SYNAPSE_ANALYTICS | DB2 | ELASTICSEARCH | GOLDENGATE | JAVA_MESSAGE_SERVICE | KAFKA | KAFKA_SCHEMA_REGISTRY | MICROSOFT_SQLSERVER | MONGODB | MYSQL | ORACLE | POSTGRESQL | REDIS | SNOWFLAKE) (Updatable) The username Oracle GoldenGate uses to connect the associated system of the given technology. This username must already exist and be available by the system/application to be connected to and must conform to the case sensitivty requirments defined in it. * `vault_id` - (Optional) (Updatable) Refers to the customer's vault OCID. If provided, it references a vault where GoldenGate can manage secrets. Customers must add policies to permit GoldenGate to manage secrets contained within this vault. -* `wallet` - (Applicable when connection_type=ORACLE) (Updatable) The wallet contents Oracle GoldenGate uses to make connections to a database. This attribute is expected to be base64 encoded. +* `wallet` - (Applicable when connection_type=ORACLE) (Updatable) The wallet contents Oracle GoldenGate uses to make connections to a database. This attribute is expected to be base64 encoded. + ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values @@ -263,39 +266,40 @@ The following attributes are exported: * `key_id` - Refers to the customer's master key OCID. If provided, it references a key to manage secrets. Customers must add policies to permit GoldenGate to use this key. * `lifecycle_details` - Describes the object's current state in detail. For example, it can be used to provide actionable information for a resource in a Failed state. * `locks` - Locks associated with this resource. - * `message` - A message added by the creator of the lock. This is typically used to give an indication of why the resource is locked. - * `related_resource_id` - The id of the resource that is locking this resource. Indicates that deleting this resource will remove the lock. + * `message` - A message added by the creator of the lock. This is typically used to give an indication of why the resource is locked. + * `related_resource_id` - The id of the resource that is locking this resource. Indicates that deleting this resource will remove the lock. * `time_created` - When the lock was created. * `type` - Type of the lock. -* `nsg_ids` - An array of Network Security Group OCIDs used to define network access for either Deployments or Connections. -* `port` - The port of an endpoint usually specified for a connection. +* `nsg_ids` - An array of Network Security Group OCIDs used to define network access for either Deployments or Connections. +* `port` - The port of an endpoint usually specified for a connection. * `private_ip` - Deprecated: this field will be removed in future versions. Either specify the private IP in the connectionString or host field, or make sure the host name is resolvable in the target VCN. - The private IP address of the connection's endpoint in the customer's VCN, typically a database endpoint or a big data endpoint (e.g. Kafka bootstrap server). In case the privateIp is provided, the subnetId must also be provided. In case the privateIp (and the subnetId) is not provided it is assumed the datasource is publicly accessible. In case the connection is accessible only privately, the lack of privateIp will result in not being able to access the connection. -* `redis_cluster_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Redis cluster. -* `region` - The name of the region. e.g.: us-ashburn-1 -* `routing_method` - Controls the network traffic direction to the target: SHARED_SERVICE_ENDPOINT: Traffic flows through the Goldengate Service's network to public hosts. Cannot be used for private targets. SHARED_DEPLOYMENT_ENDPOINT: Network traffic flows from the assigned deployment's private endpoint through the deployment's subnet. DEDICATED_ENDPOINT: A dedicated private endpoint is created in the target VCN subnet for the connection. The subnetId is required when DEDICATED_ENDPOINT networking is selected. + + The private IP address of the connection's endpoint in the customer's VCN, typically a database endpoint or a big data endpoint (e.g. Kafka bootstrap server). In case the privateIp is provided, the subnetId must also be provided. In case the privateIp (and the subnetId) is not provided it is assumed the datasource is publicly accessible. In case the connection is accessible only privately, the lack of privateIp will result in not being able to access the connection. +* `redis_cluster_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Redis cluster. +* `region` - The name of the region. e.g.: us-ashburn-1 +* `routing_method` - Controls the network traffic direction to the target: SHARED_SERVICE_ENDPOINT: Traffic flows through the Goldengate Service's network to public hosts. Cannot be used for private targets. SHARED_DEPLOYMENT_ENDPOINT: Network traffic flows from the assigned deployment's private endpoint through the deployment's subnet. DEDICATED_ENDPOINT: A dedicated private endpoint is created in the target VCN subnet for the connection. The subnetId is required when DEDICATED_ENDPOINT networking is selected. * `security_protocol` - Security Protocol to be provided for the following connection types: ELASTICSEARCH, JAVA_MESSAGE_SERVICE, KAFKA, MICROSOFT_SQLSERVER, MYSQL, POSTGRESQL, REDIS * JAVA_MESSAGE_SERVICE - If not provided, default is NONE. Optional until 2024-06-27, in the release after it will be made required. * `servers` - Comma separated list of server addresses, specified as host:port entries, where :port is optional. Example: `"server1.example.com:4000,server2.example.com:4000"` If port is not specified, a default value is set, in case of ELASTICSEARCH: 9200, for REDIS 6379. -* `session_mode` - The mode of the database connection session to be established by the data client. 'REDIRECT' - for a RAC database, 'DIRECT' - for a non-RAC database. Connection to a RAC database involves a redirection received from the SCAN listeners to the database node to connect to. By default the mode would be DIRECT. -* `should_use_jndi` - If set to true, Java Naming and Directory Interface (JNDI) properties should be provided. -* `should_validate_server_certificate` - If set to true, the driver validates the certificate that is sent by the database server. -* `ssl_ca` - Database Certificate - The base64 encoded content of pem file containing the server public key (for 1-way SSL). +* `session_mode` - The mode of the database connection session to be established by the data client. 'REDIRECT' - for a RAC database, 'DIRECT' - for a non-RAC database. Connection to a RAC database involves a redirection received from the SCAN listeners to the database node to connect to. By default the mode would be DIRECT. +* `should_use_jndi` - If set to true, Java Naming and Directory Interface (JNDI) properties should be provided. +* `should_validate_server_certificate` - If set to true, the driver validates the certificate that is sent by the database server. +* `ssl_ca` - Database Certificate - The base64 encoded content of a .pem or .crt file. containing the server public key (for 1-way SSL). * `ssl_mode` - SSL mode to be provided for the following connection types: MYSQL, POSTGRESQL. -* `state` - Possible lifecycle states for connection. -* `stream_pool_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the stream pool being referenced. -* `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the target subnet of the dedicated connection. -* `system_tags` - The system tags associated with this resource, if any. The system tags are set by Oracle Cloud Infrastructure services. Each key is predefined and scoped to namespaces. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{orcl-cloud: {free-tier-retain: true}}` +* `state` - Possible lifecycle states for connection. +* `stream_pool_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the stream pool being referenced. +* `subnet_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the target subnet of the dedicated connection. +* `system_tags` - The system tags associated with this resource, if any. The system tags are set by Oracle Cloud Infrastructure services. Each key is predefined and scoped to namespaces. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{orcl-cloud: {free-tier-retain: true}}` * `technology_type` - The technology type. -* `tenancy_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the related Oracle Cloud Infrastructure tenancy. -* `time_created` - The time the resource was created. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339), such as `2016-08-25T21:10:29.600Z`. -* `time_updated` - The time the resource was last updated. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339), such as `2016-08-25T21:10:29.600Z`. -* `url` - Kafka Schema Registry URL. e.g.: 'https://server1.us.oracle.com:8081' -* `user_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Oracle Cloud Infrastructure user who will access the Oracle NoSQL database/Object Storage. The user must have write access. -* `username` - The username Oracle GoldenGate uses to connect the associated system of the given technology. This username must already exist and be available by the system/application to be connected to and must conform to the case sensitivity requirements defined in it. -* `vault_id` - Refers to the customer's vault OCID. If provided, it references a vault where GoldenGate can manage secrets. Customers must add policies to permit GoldenGate to manage secrets contained within this vault. +* `tenancy_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the related Oracle Cloud Infrastructure tenancy. +* `time_created` - The time the resource was created. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339), such as `2016-08-25T21:10:29.600Z`. +* `time_updated` - The time the resource was last updated. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339), such as `2016-08-25T21:10:29.600Z`. +* `url` - Kafka Schema Registry URL. e.g.: 'https://server1.us.oracle.com:8081' +* `user_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Oracle Cloud Infrastructure user who will access the Oracle NoSQL database. The user must have write access to the table they want to connect to. +* `username` - The username Oracle GoldenGate uses to connect the associated system of the given technology. This username must already exist and be available by the system/application to be connected to and must conform to the case sensitivty requirments defined in it. +* `vault_id` - Refers to the customer's vault OCID. If provided, it references a vault where GoldenGate can manage secrets. Customers must add policies to permit GoldenGate to manage secrets contained within this vault. ## Timeouts diff --git a/website/docs/r/golden_gate_database_registration.html.markdown b/website/docs/r/golden_gate_database_registration.html.markdown index b351850a8ea..1b09d3458cf 100644 --- a/website/docs/r/golden_gate_database_registration.html.markdown +++ b/website/docs/r/golden_gate_database_registration.html.markdown @@ -63,7 +63,7 @@ The following arguments are supported: * `subnet_id` - (Optional) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the target subnet of the dedicated connection. * `username` - (Required) (Updatable) The username Oracle GoldenGate uses to connect the associated system of the given technology. This username must already exist and be available by the system/application to be connected to and must conform to the case sensitivty requirments defined in it. * `vault_id` - (Optional) Refers to the customer's vault OCID. If provided, it references a vault where GoldenGate can manage secrets. Customers must add policies to permit GoldenGate to manage secrets contained within this vault. -* `wallet` - (Optional) (Updatable) The wallet contents Oracle GoldenGate uses to make connections to a database. This attribute is expected to be base64 encoded. +* `wallet` - (Optional) (Updatable) The wallet contents Oracle GoldenGate uses to make connections to a database. This attribute is expected to be base64 encoded. ** IMPORTANT ** diff --git a/website/docs/r/golden_gate_deployment.html.markdown b/website/docs/r/golden_gate_deployment.html.markdown index 6eb387cd647..67e91bdbb82 100644 --- a/website/docs/r/golden_gate_deployment.html.markdown +++ b/website/docs/r/golden_gate_deployment.html.markdown @@ -30,6 +30,7 @@ resource "oci_golden_gate_deployment" "test_deployment" { defined_tags = {"foo-namespace.bar-key"= "value"} deployment_backup_id = oci_golden_gate_deployment_backup.test_deployment_backup.id description = var.deployment_description + environment_type = var.deployment_environment_type fqdn = var.deployment_fqdn freeform_tags = {"bar-key"= "value"} is_public = var.deployment_is_public @@ -65,6 +66,15 @@ resource "oci_golden_gate_deployment" "test_deployment" { admin_username = var.deployment_ogg_data_admin_username certificate = var.deployment_ogg_data_certificate credential_store = var.deployment_ogg_data_credential_store + group_to_roles_mapping { + #Required + security_group_id = oci_identity_group.test_group.id + + #Optional + administrator_group_id = oci_identity_group.test_group.id + operator_group_id = oci_identity_group.test_group.id + user_group_id = oci_identity_group.test_group.id + } identity_domain_id = oci_identity_domain.test_domain.id key = var.deployment_ogg_data_key ogg_version = var.deployment_ogg_data_ogg_version @@ -85,6 +95,7 @@ The following arguments are supported: * `deployment_type` - (Required) The type of deployment, which can be any one of the Allowed values. NOTE: Use of the value 'OGG' is maintained for backward compatibility purposes. Its use is discouraged in favor of 'DATABASE_ORACLE'. * `description` - (Optional) (Updatable) Metadata about this specific object. * `display_name` - (Required) (Updatable) An object's Display Name. +* `environment_type` - (Optional) (Updatable) Specifies whether the deployment is used in a production or development/testing environment. * `fqdn` - (Optional) (Updatable) A three-label Fully Qualified Domain Name (FQDN) for a resource. * `freeform_tags` - (Optional) (Updatable) A simple key-value pair that is applied without any predefined name, type, or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` * `is_auto_scaling_enabled` - (Required) (Updatable) Indicates if auto scaling is enabled for the Deployment's CPU core count. @@ -110,6 +121,11 @@ The following arguments are supported: * `certificate` - (Optional) (Updatable) The base64 encoded content of the PEM file containing the SSL certificate. * `credential_store` - (Optional) (Updatable) The type of credential store for OGG. * `deployment_name` - (Required) The name given to the GoldenGate service deployment. The name must be 1 to 32 characters long, must contain only alphanumeric characters and must start with a letter. + * `group_to_roles_mapping` - (Optional) (Updatable) Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. User belonging to each group can only perform the actions according to the role the respective group is mapped to. + * `administrator_group_id` - (Optional) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. It grants full access to the user, including the ability to alter general, non-security related operational parameters and profiles of the server. + * `operator_group_id` - (Optional) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. It allows users to perform only operational actions, like starting and stopping resources. Operators cannot alter the operational parameters or profiles of the MA server. + * `security_group_id` - (Required) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. It grants administration of security related objects and invoke security related service requests. This role has full privileges. + * `user_group_id` - (Optional) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. It allows information-only service requests, which do not alter or affect the operation of either the MA. Examples of query and read-only information include performance metric information and resource status and monitoring information * `identity_domain_id` - (Optional) (Updatable) The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Identity Domain when IAM credential store is used. * `key` - (Optional) (Updatable) The base64 encoded content of the PEM file containing the private key. * `ogg_version` - (Optional) Version of OGG @@ -125,6 +141,7 @@ Any change to a property that does not support update will force the destruction The following attributes are exported: +* `category` - The deployment category defines the broad separation of the deployment type into three categories. Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. * `compartment_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment being referenced. * `cpu_core_count` - The Minimum number of OCPUs to be made available for this Deployment. * `defined_tags` - Tags defined for this resource. Each key is predefined and scoped to a namespace. Example: `{"foo-namespace.bar-key": "value"}` @@ -140,6 +157,7 @@ The following attributes are exported: * `deployment_url` - The URL of a resource. * `description` - Metadata about this specific object. * `display_name` - An object's Display Name. +* `environment_type` - Specifies whether the deployment is used in a production or development/testing environment. * `fqdn` - A three-label Fully Qualified Domain Name (FQDN) for a resource. * `freeform_tags` - A simple key-value pair that is applied without any predefined name, type, or scope. Exists for cross-compatibility only. Example: `{"bar-key": "value"}` * `id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the deployment being referenced. @@ -149,7 +167,7 @@ The following attributes are exported: * `is_healthy` - True if all of the aggregate resources are working correctly. * `is_latest_version` - Indicates if the resource is the the latest available version. * `is_public` - True if this object is publicly available. -* `is_storage_utilization_limit_exceeded` - Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. +* `is_storage_utilization_limit_exceeded` - Deprecated: This field is not updated and will be removed in future versions. If storage utilization exceeds the limit, the respective warning message will appear in deployment messages, which can be accessed through /messages?deploymentId=. Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. * `license_model` - The Oracle license model that applies to a Deployment. * `lifecycle_details` - Describes the object's current state in detail. For example, it can be used to provide actionable information for a resource in a Failed state. * `lifecycle_sub_state` - Possible GGS lifecycle sub-states. @@ -177,6 +195,11 @@ The following attributes are exported: * `certificate` - The base64 encoded content of the PEM file containing the SSL certificate. * `credential_store` - The type of credential store for OGG. * `deployment_name` - The name given to the GoldenGate service deployment. The name must be 1 to 32 characters long, must contain only alphanumeric characters and must start with a letter. + * `group_to_roles_mapping` - Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. User belonging to each group can only perform the actions according to the role the respective group is mapped to. + * `administrator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. It grants full access to the user, including the ability to alter general, non-security related operational parameters and profiles of the server. + * `operator_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. It allows users to perform only operational actions, like starting and stopping resources. Operators cannot alter the operational parameters or profiles of the MA server. + * `security_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. It grants administration of security related objects and invoke security related service requests. This role has full privileges. + * `user_group_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. It allows information-only service requests, which do not alter or affect the operation of either the MA. Examples of query and read-only information include performance metric information and resource status and monitoring information * `identity_domain_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Identity Domain when IAM credential store is used. * `ogg_version` - Version of OGG * `password_secret_id` - The [OCID](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the Secret where the deployment password is stored. From 9bd49a86774f8ce9f2f792449b08767b8798f307 Mon Sep 17 00:00:00 2001 From: Mark Mudimba Date: Wed, 7 Aug 2024 19:44:59 +0000 Subject: [PATCH 18/31] Added - Support for OIDC Auth Terraform --- .../oidc_authn_token_config/main.tf | 280 ++++++++++++++ .../containerengine_cluster_test.go | 54 ++- .../containerengine_cluster_resource.go | 343 ++++++++++++++++-- .../containerengine_node_pool_resource.go | 14 - .../d/containerengine_clusters.html.markdown | 13 + .../r/containerengine_cluster.html.markdown | 46 +++ 6 files changed, 692 insertions(+), 58 deletions(-) create mode 100644 examples/container_engine/oidc_authn_token_config/main.tf diff --git a/examples/container_engine/oidc_authn_token_config/main.tf b/examples/container_engine/oidc_authn_token_config/main.tf new file mode 100644 index 00000000000..3a584431221 --- /dev/null +++ b/examples/container_engine/oidc_authn_token_config/main.tf @@ -0,0 +1,280 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" { +} + +variable "user_ocid" { +} + +variable "compartment_ocid" { +} + +variable "region" { + default = "us-ashburn-1" +} + +variable "kms_vault_id" { +} + +variable "compartment_id" { +} + +variable "cluster_cluster_pod_network_options_cni_type" { + default = "OCI_VCN_IP_NATIVE" +} + +variable "cluster_defined_tags_value" { + default = "value" +} + +variable "cluster_endpoint_config_is_public_ip_enabled" { + default = false +} + +variable "cluster_endpoint_config_nsg_ids" { + default = [] +} + +variable "cluster_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_image_policy_config_is_policy_enabled" { + default = false +} + +variable "cluster_kubernetes_version" { + default = "kubernetesVersion" +} + +variable "cluster_name" { + default = "name" +} + +variable "cluster_options_add_ons_is_kubernetes_dashboard_enabled" { + default = true +} + +variable "cluster_options_add_ons_is_tiller_enabled" { + default = true +} + +variable "cluster_options_admission_controller_options_is_pod_security_policy_enabled" { + default = false +} + +variable "cluster_options_kubernetes_network_config_pods_cidr" { + default = "10.1.0.0/16" +} + +variable "cluster_options_kubernetes_network_config_services_cidr" { + default = "10.2.0.0/16" +} + +variable "cluster_options_open_id_connect_token_authentication_config_client_id" { + default = "client_id" +} + +variable "cluster_options_open_id_connect_token_authentication_config_is_open_id_connect_auth_enabled" { + default = true +} + +variable "cluster_options_open_id_connect_token_authentication_config_ca_certificate" { +} + +variable "cluster_options_open_id_connect_token_authentication_config_groups_claim" { + default = "groupsClaim" +} + +variable "cluster_options_open_id_connect_token_authentication_config_groups_prefix" { + default = "groupsPrefix" +} + +variable "cluster_options_open_id_connect_token_authentication_config_issuer_url" { + default = "https://url1.com" +} + +variable "cluster_options_open_id_connect_token_authentication_config_required_claims_key" { + default = "key" +} + +variable "cluster_options_open_id_connect_token_authentication_config_required_claims_value" { + default = "value" +} + +variable "cluster_options_open_id_connect_token_authentication_config_signing_algorithms" { + default = ["RS256"] +} + +variable "cluster_options_open_id_connect_token_authentication_config_username_claim" { + default = "sub" +} + +variable "cluster_options_open_id_connect_token_authentication_config_username_prefix" { + default = "oidc:" +} + +variable "cluster_options_persistent_volume_config_defined_tags_value" { + default = "value" +} + +variable "cluster_options_persistent_volume_config_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_options_service_lb_config_defined_tags_value" { + default = "value" +} + +variable "cluster_options_service_lb_config_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_options_service_lb_subnet_ids" { + default = [] +} + +variable "cluster_state" { + default = [] +} + +variable "cluster_type" { + default = "ENHANCED_CLUSTER" +} + + + +provider "oci" { + region = var.region + auth = "SecurityToken" + config_file_profile = "terraform-federation-test" +} + +variable defined_tag_namespace_name { + default = "test" +} + +resource "oci_core_vcn" "test_vcn" { + cidr_block = "10.0.0.0/16" + compartment_id = var.compartment_ocid + display_name = "tfVcnForClusters" +} + +resource "oci_core_internet_gateway" "test_ig" { + compartment_id = var.compartment_ocid + display_name = "tfClusterInternetGateway" + vcn_id = oci_core_vcn.test_vcn.id +} + +resource "oci_identity_tag_namespace" "tag-namespace1" { + #Required + compartment_id = var.tenancy_ocid + description = "example tag namespace" + name = var.defined_tag_namespace_name != "" ? var.defined_tag_namespace_name : "example-tag-namespace-all" + + is_retired = false +} + +resource "oci_core_route_table" "test_route_table" { + compartment_id = var.compartment_ocid + vcn_id = oci_core_vcn.test_vcn.id + display_name = "tfClustersRouteTable" + + route_rules { + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + network_entity_id = oci_core_internet_gateway.test_ig.id + } +} + +data "oci_identity_availability_domains" "test_availability_domains" { + compartment_id = var.tenancy_ocid +} + +data "oci_identity_availability_domain" "ad1" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +data "oci_identity_availability_domain" "ad2" { + compartment_id = var.tenancy_ocid + ad_number = 2 +} + +resource "oci_core_subnet" "clusterSubnet_2" { + #Required + availability_domain = data.oci_identity_availability_domain.ad2.name + cidr_block = "10.0.21.0/24" + compartment_id = var.compartment_ocid + vcn_id = oci_core_vcn.test_vcn.id + display_name = "tfSubNet1ForClusters" + + # Provider code tries to maintain compatibility with old versions. + security_list_ids = [oci_core_vcn.test_vcn.default_security_list_id] + route_table_id = oci_core_route_table.test_route_table.id +} + +resource "oci_containerengine_cluster" "test_cluster" { + #Required + compartment_id = var.compartment_ocid + kubernetes_version = "v1.28.2" + name = "tfTestCluster" + vcn_id = oci_core_vcn.test_vcn.id + + #Optional + # defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.cluster_defined_tags_value) + + freeform_tags = var.cluster_freeform_tags + options { + + #Optional + add_ons { + + #Optional + is_kubernetes_dashboard_enabled = var.cluster_options_add_ons_is_kubernetes_dashboard_enabled + is_tiller_enabled = var.cluster_options_add_ons_is_tiller_enabled + } + admission_controller_options { + + #Optional + is_pod_security_policy_enabled = var.cluster_options_admission_controller_options_is_pod_security_policy_enabled + } + kubernetes_network_config { + + #Optional + pods_cidr = var.cluster_options_kubernetes_network_config_pods_cidr + services_cidr = var.cluster_options_kubernetes_network_config_services_cidr + } + open_id_connect_token_authentication_config { + #Required + is_open_id_connect_auth_enabled = var.cluster_options_open_id_connect_token_authentication_config_is_open_id_connect_auth_enabled + + #Optional + client_id = var.cluster_options_open_id_connect_token_authentication_config_client_id + issuer_url = var.cluster_options_open_id_connect_token_authentication_config_issuer_url + ca_certificate = var.cluster_options_open_id_connect_token_authentication_config_ca_certificate + groups_claim = var.cluster_options_open_id_connect_token_authentication_config_groups_claim + groups_prefix = var.cluster_options_open_id_connect_token_authentication_config_groups_prefix + required_claims { + + #Optional + key = var.cluster_options_open_id_connect_token_authentication_config_required_claims_key + value = var.cluster_options_open_id_connect_token_authentication_config_required_claims_value + } + signing_algorithms = var.cluster_options_open_id_connect_token_authentication_config_signing_algorithms + username_claim = var.cluster_options_open_id_connect_token_authentication_config_username_claim + username_prefix = var.cluster_options_open_id_connect_token_authentication_config_username_prefix + } + } + type = var.cluster_type +} + +data "oci_containerengine_clusters" "test_clusters" { + #Required + compartment_id = var.compartment_id + + #Optional + name = var.cluster_name + state = var.cluster_state +} \ No newline at end of file diff --git a/internal/integrationtest/containerengine_cluster_test.go b/internal/integrationtest/containerengine_cluster_test.go index 8b30461fdc8..b31d87f3bce 100644 --- a/internal/integrationtest/containerengine_cluster_test.go +++ b/internal/integrationtest/containerengine_cluster_test.go @@ -69,7 +69,7 @@ var ( "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, "image_policy_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterImagePolicyConfigRepresentation}, "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, - "type": acctest.Representation{RepType: acctest.Optional, Create: `BASIC_CLUSTER`, Update: `ENHANCED_CLUSTER`}, + "type": acctest.Representation{RepType: acctest.Optional, Create: `ENHANCED_CLUSTER`, Update: `ENHANCED_CLUSTER`}, "options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsRepresentation}, } clusterClusterPodNetworkOptionsRepresentation = map[string]interface{}{ @@ -86,9 +86,10 @@ var ( ContainerengineClusterOptionsRepresentation = map[string]interface{}{ "add_ons": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsAddOnsRepresentation}, "kubernetes_network_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsKubernetesNetworkConfigRepresentation}, - "persistent_volume_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsPersistentVolumeConfigRepresentation}, - "service_lb_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsServiceLbConfigRepresentation}, - "service_lb_subnet_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_subnet.clusterSubnet_1.id}`, `${oci_core_subnet.clusterSubnet_2.id}`}}, + "open_id_connect_token_authentication_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsOpenIdConnectTokenAuthenticationConfigRepresentation}, + "persistent_volume_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsPersistentVolumeConfigRepresentation}, + "service_lb_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsServiceLbConfigRepresentation}, + "service_lb_subnet_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_subnet.clusterSubnet_1.id}`, `${oci_core_subnet.clusterSubnet_2.id}`}}, } ContainerengineClusterImagePolicyConfigKeyDetailsRepresentation = map[string]interface{}{ "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency_RSA.keys[0], "id")}`}, @@ -101,6 +102,18 @@ var ( "pods_cidr": acctest.Representation{RepType: acctest.Optional, Create: `10.1.0.0/16`}, "services_cidr": acctest.Representation{RepType: acctest.Optional, Create: `10.2.0.0/16`}, } + ContainerengineClusterOptionsOpenIdConnectTokenAuthenticationConfigRepresentation = map[string]interface{}{ + "is_open_id_connect_auth_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `false`}, + "ca_certificate": acctest.Representation{RepType: acctest.Optional, Create: `LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY5RENDQTl5Z0F3SUJBZ0lVYjZUaGdGNThwZVR0QkQ3Q2dyWlVNbDRXMWZNd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZQXhDekFKQmdOVkJBWVRBbGhZTVJJd0VBWURWUVFJREFsVGRHRjBaVTVoYldVeEVUQVBCZ05WQkFjTQpDRU5wZEhsT1lXMWxNUlF3RWdZRFZRUUtEQXREYjIxd1lXNTVUbUZ0WlRFYk1Ca0dBMVVFQ3d3U1EyOXRjR0Z1CmVWTmxZM1JwYjI1T1lXMWxNUmN3RlFZRFZRUUREQTR4TlRBdU1UTTJMak0zTGpJME16QWVGdzB5TkRBME1ETXcKTWpVMU1qQmFGdzB6TkRBME1ERXdNalUxTWpCYU1JR0FNUXN3Q1FZRFZRUUdFd0pZV0RFU01CQUdBMVVFQ0F3SgpVM1JoZEdWT1lXMWxNUkV3RHdZRFZRUUhEQWhEYVhSNVRtRnRaVEVVTUJJR0ExVUVDZ3dMUTI5dGNHRnVlVTVoCmJXVXhHekFaQmdOVkJBc01Fa052YlhCaGJubFRaV04wYVc5dVRtRnRaVEVYTUJVR0ExVUVBd3dPTVRVd0xqRXoKTmk0ek55NHlORE13Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRRFBmWGFUaXE4ZAp3VW1QZjNNWUdZUnRYVlliUzhRblUzeGNUdnpqeExxRTlIZnVPUUgyVFBna0wvbjBQUTVvZnFURnlMRjd3Z1BvCks5Wmx2dG1mUzhNRUlsU1doUFdSWWpuNDRYVXhOVjBhTldUWi80bWFYcUlXOUM1aC9xaEhiVU1IbTAwNzZkQjMKby9GaTBEZnpwN3JDTGhZeTJUaG5oc1BOWXYzcFljVlNDbVFZVVpUNlh6eVR5Ym4vY3IvY2tTYXRWTkZKNEQ3UwpLK2xxdEtzNzF3bkMzTjhQd2xZemFyOWFaMnNlSmNrSXZRWWtKZ3phcktZK0hYTkg3SVZKa0h2N3QyY1NJdGJvClRUVTJHVE5icEJyK05YSFZlaWo0THpsZWdER0dPWkFjYWEwS094YWoxNXNISFlQSVBJYlZ2NXMwVXVodkVyUEIKOFUxRjVhRFU0L0MrbW9Lc3EwTlpEcDZNSkphZ1lBazEvUzduRCtXbEExem5rMzRyYXl0U2FDdDdFK1JTMlR2YQpaRkExQWFNNmlBVXp1eEY3ZWtnejhzZ1lZd0drMnJZTFRzQm9IdHloeUkxM0FwMVBlL3ROSVQxaHlYdmQzVzVICmFtQ09PSnFkYUFkYU1xR2g0V25lemZ6UjZUY2NHNmpaekVqV2N0amEyWXlPVlZaaWlRWWllajA2S1VYazI4U2wKUVlGamNXak53c0s5b1U4OFRFbkJ6U0FPZ29OVXBITkxEeFVzRHhEMDBuQm9aS2U2aExFVmFMckRiSEdzdU5MSgo1TDd3WE1xdUZIQ2RjUUhhTzMxTnp5UllrTGw3UUtiSkRvZjNWNzBQMmRtbXhDdU5ybTkwWFNoZ3o3L2xHK0krCnFiUkRVT21Pcjc1dmxvZEFDODB4SU5tKzZLcEdJcXVGaVFJREFRQUJvMlF3WWpBZEJnTlZIUTRFRmdRVU4zK0gKa3Z5SW9KVFVLSTlFNEFweTFSbEc3bjh3SHdZRFZSMGpCQmd3Rm9BVU4zK0hrdnlJb0pUVUtJOUU0QXB5MVJsRwo3bjh3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFQQmdOVkhSRUVDREFHaHdTV2lDWHpNQTBHQ1NxR1NJYjNEUUVCCkN3VUFBNElDQVFDQjR4SEljOG81MlpFaHoyYVJoNUl0QTdYeUs4bjdROVRqODJiTjZPaFB1ZDg0MDRNbUFldHIKNFAzTUtadWlJNDRIeUVZQ2tSenFNVXVRNS9yd2JJNU1iUStBN1Z3dEpDdjRMZEZjOEsxRnZKcEo0c2lXaWwzMgpaQ0YyS052elB6Vm1NVVc4QkZFSVFMMnIvdWhrelc2V2FvWHVVZTV0NkE3UDJIL1lYU3JvRUdDZGZDOGQ3TWo5CkppN1Nxc3BYTUM2WlNvZmhQUFZMTUtRWk44REh5SXorUlJHZS8zYkw2S2ZMUXpuZDJ4UzJVcVZ3eGIweERjZ04KK0lrNGRCcjdqS1Z1N3cwTjJvcUo5V2ZmVjgxRFV1OWgwZjROeGcxakc1bWlCZHRTU1dTWEdqNHlLRmdvWnJwTApMZEdGRGdiUFh1QjZLWGVBY3N1M21hRjZrOXBsU29WeFU1cC9zdGRVSXMycFphTmdsdzh2UmJxWFM3cXFKT0V2Ck5RSmZPcEszN2JrMjBCS1lsQ2NXUWxGVjFmejdRdUFJdS9hK0NlUXFwUXhGUVk5SmFsYStNWDFxaDRIYWJUNHgKNGNOaktBNC9pNVhkYkdaTUFJQVhxN2tnNVlSc2xyQmQ5ZFNaM0FMUVVocEppZ01TOFhDY1htQUZrcnR2Tm81YgplWXNjM1AyT0hnRjQ3a3Z1N00rUWdDNU43RkJvNkhSdkNLY1dwRG5oSVprd2JsRkRsVW1iejBicHJLRDVqc01wCi93dDl3OUhaWEFsOTRtU1JLeTFJdmFvMHdndEYzNW9Sait1eXpxRUl2RVdkMmpvc21LTmtGWGlXMU5lbGNrUnUKT1FjdFBNN3BJbHZ6ZWh2U3BENTVWN09NbHhLZHArMTQ0cVMrbDB2UStOUGJSMk91TkNZa1lBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=`}, + "client_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_containerengine_client.test_client.id}`}, + "groups_claim": acctest.Representation{RepType: acctest.Optional, Create: `groupsClaim`}, + "groups_prefix": acctest.Representation{RepType: acctest.Optional, Create: `groupsPrefix`}, + "issuer_url": acctest.Representation{RepType: acctest.Optional, Create: `https://url1.com`}, + "required_claims": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsOpenIdConnectTokenAuthenticationConfigRequiredClaimsRepresentation}, + "signing_algorithms": acctest.Representation{RepType: acctest.Optional, Create: []string{`RS256`}}, + "username_claim": acctest.Representation{RepType: acctest.Optional, Create: `sub`}, + "username_prefix": acctest.Representation{RepType: acctest.Optional, Create: `oidc:`}, + } ContainerengineClusterOptionsPersistentVolumeConfigRepresentation = map[string]interface{}{ "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")}`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, @@ -109,6 +122,10 @@ var ( "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")}`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, } + ContainerengineClusterOptionsOpenIdConnectTokenAuthenticationConfigRequiredClaimsRepresentation = map[string]interface{}{ + "key": acctest.Representation{RepType: acctest.Optional, Create: `key`}, + "value": acctest.Representation{RepType: acctest.Optional, Create: `value`}, + } ContainerengineClusterResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "clusterSubnet_1", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${lower("${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}")}`}, "cidr_block": acctest.Representation{RepType: acctest.Required, Create: `10.0.20.0/24`}, "dns_label": acctest.Representation{RepType: acctest.Required, Create: `cluster1`}})) + acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "clusterSubnet_2", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{"availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${lower("${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}")}`}, "cidr_block": acctest.Representation{RepType: acctest.Required, Create: `10.0.21.0/24`}, "dns_label": acctest.Representation{RepType: acctest.Required, Create: `cluster2`}})) + @@ -189,12 +206,25 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "options.0.open_id_connect_token_authentication_config.0.ca_certificate"), + resource.TestCheckResourceAttrSet(resourceName, "options.0.open_id_connect_token_authentication_config.0.client_id"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.groups_claim", "groupsClaim"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.groups_prefix", "groupsPrefix"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.is_open_id_connect_auth_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.issuer_url", "https://url1.com"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.required_claims.#", "1"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.required_claims.0.key", "key"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.required_claims.0.value", "value"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.signing_algorithms.#", "1"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.username_claim", "RS256"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.username_prefix", "oidc:"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "type", "BASIC_CLUSTER"), + resource.TestCheckResourceAttr(resourceName, "type", "ENHANCED_CLUSTER"), resource.TestCheckResourceAttrSet(resourceName, "vcn_id"), func(s *terraform.State) (err error) { @@ -238,6 +268,7 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.#", "0"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_config.#", "1"), @@ -291,6 +322,19 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.ca_certificate", "caCertificate2"), + resource.TestCheckResourceAttrSet(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.client_id"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.groups_claim", "groupsClaim2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.groups_prefix", "groupsPrefix2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.is_open_id_connect_auth_enabled", "true"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.issuer_url", "issuerUrl2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.required_claims.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.required_claims.0.key", "key2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.required_claims.0.value", "value2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.signing_algorithms.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.username_claim", "usernameClaim2"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.username_prefix", "usernamePrefix2"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.service_lb_config.#", "1"), diff --git a/internal/service/containerengine/containerengine_cluster_resource.go b/internal/service/containerengine/containerengine_cluster_resource.go index 5d26cd5b7e3..8ee9181dd3a 100644 --- a/internal/service/containerengine/containerengine_cluster_resource.go +++ b/internal/service/containerengine/containerengine_cluster_resource.go @@ -259,6 +259,93 @@ func ContainerengineClusterResource() *schema.Resource { }, }, }, + "open_id_connect_token_authentication_config": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + "is_open_id_connect_auth_enabled": { + Type: schema.TypeBool, + Required: true, + }, + + // Optional + "ca_certificate": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "client_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "groups_claim": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "groups_prefix": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "issuer_url": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "required_claims": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "key": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "value": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, + "signing_algorithms": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "username_claim": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "username_prefix": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, "persistent_volume_config": { Type: schema.TypeList, Optional: true, @@ -1149,6 +1236,17 @@ func (s *ContainerengineClusterResourceCrud) mapToClusterCreateOptions(fieldKeyF } } + if openIdConnectTokenAuthenticationConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "open_id_connect_token_authentication_config")); ok { + if tmpList := openIdConnectTokenAuthenticationConfig.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "open_id_connect_token_authentication_config"), 0) + tmp, err := s.mapToOpenIdConnectTokenAuthenticationConfig(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert open_id_connect_token_authentication_config, encountered error: %v", err) + } + result.OpenIdConnectTokenAuthenticationConfig = &tmp + } + } + if persistentVolumeConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "persistent_volume_config")); ok { if tmpList := persistentVolumeConfig.([]interface{}); len(tmpList) > 0 { fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "persistent_volume_config"), 0) @@ -1187,6 +1285,56 @@ func (s *ContainerengineClusterResourceCrud) mapToClusterCreateOptions(fieldKeyF return result, nil } +func (s *ContainerengineClusterResourceCrud) mapToUpdateClusterOptionsDetails(fieldKeyFormat string) (oci_containerengine.UpdateClusterOptionsDetails, error) { + result := oci_containerengine.UpdateClusterOptionsDetails{} + + if admissionControllerOptions, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "admission_controller_options")); ok { + if tmpList := admissionControllerOptions.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "admission_controller_options"), 0) + tmp, err := s.mapToAdmissionControllerOptions(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert admission_controller_options, encountered error: %v", err) + } + result.AdmissionControllerOptions = &tmp + } + } + + if openIdConnectTokenAuthenticationConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "open_id_connect_token_authentication_config")); ok { + if tmpList := openIdConnectTokenAuthenticationConfig.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "open_id_connect_token_authentication_config"), 0) + tmp, err := s.mapToOpenIdConnectTokenAuthenticationConfig(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert open_id_connect_token_authentication_config, encountered error: %v", err) + } + result.OpenIdConnectTokenAuthenticationConfig = &tmp + } + } + + if persistentVolumeConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "persistent_volume_config")); ok { + if tmpList := persistentVolumeConfig.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "persistent_volume_config"), 0) + tmp, err := s.mapToPersistentVolumeConfigDetails(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert persistent_volume_config, encountered error: %v", err) + } + result.PersistentVolumeConfig = &tmp + } + } + + if serviceLbConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "service_lb_config")); ok { + if tmpList := serviceLbConfig.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "service_lb_config"), 0) + tmp, err := s.mapToServiceLbConfigDetails(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert service_lb_config, encountered error: %v", err) + } + result.ServiceLbConfig = &tmp + } + } + + return result, nil +} + func ClusterCreateOptionsToMap(obj *oci_containerengine.ClusterCreateOptions) map[string]interface{} { result := map[string]interface{}{} @@ -1202,6 +1350,10 @@ func ClusterCreateOptionsToMap(obj *oci_containerengine.ClusterCreateOptions) ma result["kubernetes_network_config"] = []interface{}{KubernetesNetworkConfigToMap(obj.KubernetesNetworkConfig)} } + if obj.OpenIdConnectTokenAuthenticationConfig != nil { + result["open_id_connect_token_authentication_config"] = []interface{}{OpenIdConnectTokenAuthenticationConfigToMap(obj.OpenIdConnectTokenAuthenticationConfig)} + } + if obj.PersistentVolumeConfig != nil { result["persistent_volume_config"] = []interface{}{PersistentVolumeConfigDetailsToMap(obj.PersistentVolumeConfig)} } @@ -1526,6 +1678,36 @@ func KeyDetailsToMap(obj oci_containerengine.KeyDetails) map[string]interface{} return result } +func (s *ContainerengineClusterResourceCrud) mapToKeyValue(fieldKeyFormat string) (oci_containerengine.KeyValue, error) { + result := oci_containerengine.KeyValue{} + + if key, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "key")); ok { + tmp := key.(string) + result.Key = &tmp + } + + if value, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "value")); ok { + tmp := value.(string) + result.Value = &tmp + } + + return result, nil +} + +func KeyValueToMap(obj oci_containerengine.KeyValue) map[string]interface{} { + result := map[string]interface{}{} + + if obj.Key != nil { + result["key"] = string(*obj.Key) + } + + if obj.Value != nil { + result["value"] = string(*obj.Value) + } + + return result +} + func (s *ContainerengineClusterResourceCrud) mapToKubernetesNetworkConfig(fieldKeyFormat string) (oci_containerengine.KubernetesNetworkConfig, error) { result := oci_containerengine.KubernetesNetworkConfig{} @@ -1556,6 +1738,128 @@ func KubernetesNetworkConfigToMap(obj *oci_containerengine.KubernetesNetworkConf return result } +func (s *ContainerengineClusterResourceCrud) mapToOpenIdConnectTokenAuthenticationConfig(fieldKeyFormat string) (oci_containerengine.OpenIdConnectTokenAuthenticationConfig, error) { + result := oci_containerengine.OpenIdConnectTokenAuthenticationConfig{} + + if caCertificate, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "ca_certificate")); ok { + tmp := caCertificate.(string) + result.CaCertificate = &tmp + } + + if clientId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "client_id")); ok { + tmp := clientId.(string) + result.ClientId = &tmp + } + + if groupsClaim, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "groups_claim")); ok { + tmp := groupsClaim.(string) + result.GroupsClaim = &tmp + } + + if groupsPrefix, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "groups_prefix")); ok { + tmp := groupsPrefix.(string) + result.GroupsPrefix = &tmp + } + + if isOpenIdConnectAuthEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_open_id_connect_auth_enabled")); ok { + tmp := isOpenIdConnectAuthEnabled.(bool) + result.IsOpenIdConnectAuthEnabled = &tmp + } + + if issuerUrl, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "issuer_url")); ok { + tmp := issuerUrl.(string) + result.IssuerUrl = &tmp + } + + if requiredClaims, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "required_claims")); ok { + interfaces := requiredClaims.([]interface{}) + tmp := make([]oci_containerengine.KeyValue, len(interfaces)) + for i := range interfaces { + stateDataIndex := i + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "required_claims"), stateDataIndex) + converted, err := s.mapToKeyValue(fieldKeyFormatNextLevel) + if err != nil { + return result, err + } + tmp[i] = converted + } + if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "required_claims")) { + result.RequiredClaims = tmp + } + } + + if signingAlgorithms, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "signing_algorithms")); ok { + interfaces := signingAlgorithms.([]interface{}) + tmp := make([]string, len(interfaces)) + for i := range interfaces { + if interfaces[i] != nil { + tmp[i] = interfaces[i].(string) + } + } + if len(tmp) != 0 || s.D.HasChange(fmt.Sprintf(fieldKeyFormat, "signing_algorithms")) { + result.SigningAlgorithms = tmp + } + } + + if usernameClaim, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "username_claim")); ok { + tmp := usernameClaim.(string) + result.UsernameClaim = &tmp + } + + if usernamePrefix, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "username_prefix")); ok { + tmp := usernamePrefix.(string) + result.UsernamePrefix = &tmp + } + + return result, nil +} + +func OpenIdConnectTokenAuthenticationConfigToMap(obj *oci_containerengine.OpenIdConnectTokenAuthenticationConfig) map[string]interface{} { + result := map[string]interface{}{} + + if obj.CaCertificate != nil { + result["ca_certificate"] = string(*obj.CaCertificate) + } + + if obj.ClientId != nil { + result["client_id"] = string(*obj.ClientId) + } + + if obj.GroupsClaim != nil { + result["groups_claim"] = string(*obj.GroupsClaim) + } + + if obj.GroupsPrefix != nil { + result["groups_prefix"] = string(*obj.GroupsPrefix) + } + + if obj.IsOpenIdConnectAuthEnabled != nil { + result["is_open_id_connect_auth_enabled"] = bool(*obj.IsOpenIdConnectAuthEnabled) + } + + if obj.IssuerUrl != nil { + result["issuer_url"] = string(*obj.IssuerUrl) + } + + requiredClaims := []interface{}{} + for _, item := range obj.RequiredClaims { + requiredClaims = append(requiredClaims, KeyValueToMap(item)) + } + result["required_claims"] = requiredClaims + + result["signing_algorithms"] = obj.SigningAlgorithms + + if obj.UsernameClaim != nil { + result["username_claim"] = string(*obj.UsernameClaim) + } + + if obj.UsernamePrefix != nil { + result["username_prefix"] = string(*obj.UsernamePrefix) + } + + return result +} + func (s *ContainerengineClusterResourceCrud) mapToPersistentVolumeConfigDetails(fieldKeyFormat string) (oci_containerengine.PersistentVolumeConfigDetails, error) { result := oci_containerengine.PersistentVolumeConfigDetails{} @@ -1615,42 +1919,3 @@ func ServiceLbConfigDetailsToMap(obj *oci_containerengine.ServiceLbConfigDetails return result } - -func (s *ContainerengineClusterResourceCrud) mapToUpdateClusterOptionsDetails(fieldKeyFormat string) (oci_containerengine.UpdateClusterOptionsDetails, error) { - result := oci_containerengine.UpdateClusterOptionsDetails{} - - if admissionControllerOptions, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "admission_controller_options")); ok { - if tmpList := admissionControllerOptions.([]interface{}); len(tmpList) > 0 { - fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "admission_controller_options"), 0) - tmp, err := s.mapToAdmissionControllerOptions(fieldKeyFormatNextLevel) - if err != nil { - return result, fmt.Errorf("unable to convert admission_controller_options, encountered error: %v", err) - } - result.AdmissionControllerOptions = &tmp - } - } - - if persistentVolumeConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "persistent_volume_config")); ok { - if tmpList := persistentVolumeConfig.([]interface{}); len(tmpList) > 0 { - fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "persistent_volume_config"), 0) - tmp, err := s.mapToPersistentVolumeConfigDetails(fieldKeyFormatNextLevel) - if err != nil { - return result, fmt.Errorf("unable to convert persistent_volume_config, encountered error: %v", err) - } - result.PersistentVolumeConfig = &tmp - } - } - - if serviceLbConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "service_lb_config")); ok { - if tmpList := serviceLbConfig.([]interface{}); len(tmpList) > 0 { - fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "service_lb_config"), 0) - tmp, err := s.mapToServiceLbConfigDetails(fieldKeyFormatNextLevel) - if err != nil { - return result, fmt.Errorf("unable to convert service_lb_config, encountered error: %v", err) - } - result.ServiceLbConfig = &tmp - } - } - - return result, nil -} diff --git a/internal/service/containerengine/containerengine_node_pool_resource.go b/internal/service/containerengine/containerengine_node_pool_resource.go index cc7f8beaf46..58e4ac7bf4d 100644 --- a/internal/service/containerengine/containerengine_node_pool_resource.go +++ b/internal/service/containerengine/containerengine_node_pool_resource.go @@ -1543,20 +1543,6 @@ func (s *ContainerengineNodePoolResourceCrud) mapToKeyValue(fieldKeyFormat strin return result, nil } -func KeyValueToMap(obj oci_containerengine.KeyValue) map[string]interface{} { - result := map[string]interface{}{} - - if obj.Key != nil { - result["key"] = string(*obj.Key) - } - - if obj.Value != nil { - result["value"] = string(*obj.Value) - } - - return result -} - func NodeToMap(obj oci_containerengine.Node) map[string]interface{} { result := map[string]interface{}{} diff --git a/website/docs/d/containerengine_clusters.html.markdown b/website/docs/d/containerengine_clusters.html.markdown index d92416c129c..e1fc8161ff9 100644 --- a/website/docs/d/containerengine_clusters.html.markdown +++ b/website/docs/d/containerengine_clusters.html.markdown @@ -88,6 +88,19 @@ The following attributes are exported: * `kubernetes_network_config` - Network configuration for Kubernetes. * `pods_cidr` - The CIDR block for Kubernetes pods. Optional, defaults to 10.244.0.0/16. * `services_cidr` - The CIDR block for Kubernetes services. Optional, defaults to 10.96.0.0/16. + * `open_id_connect_token_authentication_config` - The properties that configure OIDC token authentication in kube-apiserver. For more information, see [Configuring the API Server](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-flags). + * `ca_certificate` - A Base64 encoded public RSA or ECDSA certificates used to signed your identity provider's web certificate. + * `client_id` - A client id that all tokens must be issued for. + * `groups_claim` - JWT claim to use as the user's group. If the claim is present it must be an array of strings. + * `groups_prefix` - Prefix prepended to group claims to prevent clashes with existing names (such as system:groups). + * `is_open_id_connect_auth_enabled` - Whether the cluster has OIDC Auth Config enabled. Defaults to false. + * `issuer_url` - URL of the provider that allows the API server to discover public signing keys. Only URLs that use the https:// scheme are accepted. This is typically the provider's discovery URL, changed to have an empty path. + * `required_claims` - A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present in the ID Token with a matching value. Repeat this flag to specify multiple claims. + * `key` - The key of the pair. + * `value` - The value of the pair. + * `signing_algorithms` - The signing algorithms accepted. Default is ["RS256"]. + * `username_claim` - JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. + * `username_prefix` - Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. * `persistent_volume_config` - Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` diff --git a/website/docs/r/containerengine_cluster.html.markdown b/website/docs/r/containerengine_cluster.html.markdown index b4e08d848be..5b439f6bd82 100644 --- a/website/docs/r/containerengine_cluster.html.markdown +++ b/website/docs/r/containerengine_cluster.html.markdown @@ -67,6 +67,26 @@ resource "oci_containerengine_cluster" "test_cluster" { pods_cidr = var.cluster_options_kubernetes_network_config_pods_cidr services_cidr = var.cluster_options_kubernetes_network_config_services_cidr } + open_id_connect_token_authentication_config { + #Required + is_open_id_connect_auth_enabled = var.cluster_options_open_id_connect_token_authentication_config_is_open_id_connect_auth_enabled + + #Optional + ca_certificate = var.cluster_options_open_id_connect_token_authentication_config_ca_certificate + client_id = oci_containerengine_client.test_client.id + groups_claim = var.cluster_options_open_id_connect_token_authentication_config_groups_claim + groups_prefix = var.cluster_options_open_id_connect_token_authentication_config_groups_prefix + issuer_url = var.cluster_options_open_id_connect_token_authentication_config_issuer_url + required_claims { + + #Optional + key = var.cluster_options_open_id_connect_token_authentication_config_required_claims_key + value = var.cluster_options_open_id_connect_token_authentication_config_required_claims_value + } + signing_algorithms = var.cluster_options_open_id_connect_token_authentication_config_signing_algorithms + username_claim = var.cluster_options_open_id_connect_token_authentication_config_username_claim + username_prefix = var.cluster_options_open_id_connect_token_authentication_config_username_prefix + } persistent_volume_config { #Optional @@ -114,6 +134,19 @@ The following arguments are supported: * `kubernetes_network_config` - (Optional) Network configuration for Kubernetes. * `pods_cidr` - (Optional) The CIDR block for Kubernetes pods. Optional, defaults to 10.244.0.0/16. * `services_cidr` - (Optional) The CIDR block for Kubernetes services. Optional, defaults to 10.96.0.0/16. + * `open_id_connect_token_authentication_config` - (Optional) (Updatable) The properties that configure OIDC token authentication in kube-apiserver. For more information, see [Configuring the API Server](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-flags). + * `ca_certificate` - (Optional) (Updatable) A Base64 encoded public RSA or ECDSA certificates used to signed your identity provider's web certificate. + * `client_id` - (Optional) (Updatable) A client id that all tokens must be issued for. + * `groups_claim` - (Optional) (Updatable) JWT claim to use as the user's group. If the claim is present it must be an array of strings. + * `groups_prefix` - (Optional) (Updatable) Prefix prepended to group claims to prevent clashes with existing names (such as system:groups). + * `is_open_id_connect_auth_enabled` - (Required) (Updatable) Whether the cluster has OIDC Auth Config enabled. Defaults to false. + * `issuer_url` - (Optional) (Updatable) URL of the provider that allows the API server to discover public signing keys. Only URLs that use the https:// scheme are accepted. This is typically the provider's discovery URL, changed to have an empty path. + * `required_claims` - (Optional) (Updatable) A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present in the ID Token with a matching value. Repeat this flag to specify multiple claims. + * `key` - (Optional) (Updatable) The key of the pair. + * `value` - (Optional) (Updatable) The value of the pair. + * `signing_algorithms` - (Optional) (Updatable) The signing algorithms accepted. Default is ["RS256"]. + * `username_claim` - (Optional) (Updatable) JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. + * `username_prefix` - (Optional) (Updatable) Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. * `persistent_volume_config` - (Optional) (Updatable) Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - (Optional) (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` @@ -176,6 +209,19 @@ The following attributes are exported: * `kubernetes_network_config` - Network configuration for Kubernetes. * `pods_cidr` - The CIDR block for Kubernetes pods. Optional, defaults to 10.244.0.0/16. * `services_cidr` - The CIDR block for Kubernetes services. Optional, defaults to 10.96.0.0/16. + * `open_id_connect_token_authentication_config` - The properties that configure OIDC token authentication in kube-apiserver. For more information, see [Configuring the API Server](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-flags). + * `ca_certificate` - A Base64 encoded public RSA or ECDSA certificates used to signed your identity provider's web certificate. + * `client_id` - A client id that all tokens must be issued for. + * `groups_claim` - JWT claim to use as the user's group. If the claim is present it must be an array of strings. + * `groups_prefix` - Prefix prepended to group claims to prevent clashes with existing names (such as system:groups). + * `is_open_id_connect_auth_enabled` - Whether the cluster has OIDC Auth Config enabled. Defaults to false. + * `issuer_url` - URL of the provider that allows the API server to discover public signing keys. Only URLs that use the https:// scheme are accepted. This is typically the provider's discovery URL, changed to have an empty path. + * `required_claims` - A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present in the ID Token with a matching value. Repeat this flag to specify multiple claims. + * `key` - The key of the pair. + * `value` - The value of the pair. + * `signing_algorithms` - The signing algorithms accepted. Default is ["RS256"]. + * `username_claim` - JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. + * `username_prefix` - Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. * `persistent_volume_config` - Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` From b9aade4c7a27021745add4c19b14346c87cec2f9 Mon Sep 17 00:00:00 2001 From: Alex Mui Date: Tue, 13 Aug 2024 15:40:12 -0600 Subject: [PATCH 19/31] TERSI-3772 - bug fix: do not recreate database on admin_password update and do not set unchanged size fields during cvm update. --- .../integrationtest/database_database_test.go | 16 +++++----- .../database_cloud_vm_cluster_resource.go | 10 +++--- .../database/database_database_resource.go | 31 +++++++++---------- 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/internal/integrationtest/database_database_test.go b/internal/integrationtest/database_database_test.go index 17fb3ffdc03..19ac69eb336 100644 --- a/internal/integrationtest/database_database_test.go +++ b/internal/integrationtest/database_database_test.go @@ -207,7 +207,7 @@ var ( "database": acctest.RepresentationGroup{RepType: acctest.Required, Group: databaseDatabaseRepresentation}, "db_home_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_db_home.test_db_home.id}`}, "source": acctest.Representation{RepType: acctest.Required, Create: `NONE`}, - "db_version": acctest.Representation{RepType: acctest.Optional, Create: `19.20.0.0`}, + "db_version": acctest.Representation{RepType: acctest.Optional, Create: `19.24.0.0`}, "key_store_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_database_key_store.test_key_store.id}`}, "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.kms_key_id}`}, "kms_key_rotation": acctest.Representation{RepType: acctest.Optional, Update: `1`}, @@ -218,14 +218,14 @@ var ( "database": acctest.RepresentationGroup{RepType: acctest.Required, Group: databaseDatabaseRepresentation2}, "db_home_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_database_db_home.test_db_home.id}`, Update: `${oci_database_db_home.test_db_home_dbrs.id}`}, "source": acctest.Representation{RepType: acctest.Required, Create: `NONE`}, - "db_version": acctest.Representation{RepType: acctest.Optional, Create: `19.20.0.0`}, + "db_version": acctest.Representation{RepType: acctest.Optional, Create: `19.24.0.0`}, "kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.kms_key_id}`}, "kms_key_rotation": acctest.Representation{RepType: acctest.Optional, Update: `1`}, "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: databaseIgnoreDefinedTagsRepresentation}, } databaseDatabaseRepresentation2 = map[string]interface{}{ - "admin_password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`}, + "admin_password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#11`, Update: `BEstrO0ng_#12`}, "db_name": acctest.Representation{RepType: acctest.Required, Create: `myTestDb`}, "character_set": acctest.Representation{RepType: acctest.Optional, Create: `AL32UTF8`}, "db_backup_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: databaseDatabaseDbBackupConfigRepresentation2}, @@ -381,13 +381,13 @@ var ( } dbHomeRepresentationSourceNone2 = acctest.RepresentationCopyWithNewProperties(DatabaseDbHomeRepresentationBase2, map[string]interface{}{ - "db_version": acctest.Representation{RepType: acctest.Required, Create: `19.20.0.0`}, + "db_version": acctest.Representation{RepType: acctest.Required, Create: `19.24.0.0`}, "source": acctest.Representation{RepType: acctest.Optional, Create: `NONE`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `createdDbHomeNone`}, }) dbHomeDbrsRepresentation = acctest.RepresentationCopyWithNewProperties(dbHomeRepresentationSourceNone2, map[string]interface{}{ - "db_version": acctest.Representation{RepType: acctest.Required, Create: `19.20.0.0`}, + "db_version": acctest.Representation{RepType: acctest.Required, Create: `19.24.0.0`}, }) DatabaseDatabaseResourceDependencies = ExaBaseDependencies + DefinedTagsDependencies + AvailabilityDomainConfig + KeyResourceDependencyConfig + @@ -514,7 +514,7 @@ func TestDatabaseDatabaseResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "db_home_id"), resource.TestCheckResourceAttrSet(resourceName, "db_name"), resource.TestCheckResourceAttrSet(resourceName, "db_unique_name"), - resource.TestCheckResourceAttr(resourceName, "db_version", "19.20.0.0"), + resource.TestCheckResourceAttr(resourceName, "db_version", "19.24.0.0"), resource.TestCheckResourceAttrSet(resourceName, "id"), //resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), resource.TestCheckResourceAttr(resourceName, "source", "NONE"), @@ -540,7 +540,7 @@ func TestDatabaseDatabaseResource_basic(t *testing.T) { Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(resourceName, "compartment_id"), resource.TestCheckResourceAttr(resourceName, "database.#", "1"), - resource.TestCheckResourceAttr(resourceName, "database.0.admin_password", "BEstrO0ng_#11"), + resource.TestCheckResourceAttr(resourceName, "database.0.admin_password", "BEstrO0ng_#12"), resource.TestCheckResourceAttr(resourceName, "character_set", "AL32UTF8"), resource.TestCheckResourceAttr(resourceName, "db_backup_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "db_backup_config.0.auto_backup_enabled", "true"), @@ -557,7 +557,7 @@ func TestDatabaseDatabaseResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "db_home_id"), resource.TestCheckResourceAttrSet(resourceName, "db_name"), resource.TestCheckResourceAttrSet(resourceName, "db_unique_name"), - resource.TestCheckResourceAttr(resourceName, "db_version", "19.20.0.0"), + resource.TestCheckResourceAttr(resourceName, "db_version", "19.24.0.0"), resource.TestCheckResourceAttrSet(resourceName, "id"), //resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), resource.TestCheckResourceAttr(resourceName, "source", "NONE"), diff --git a/internal/service/database/database_cloud_vm_cluster_resource.go b/internal/service/database/database_cloud_vm_cluster_resource.go index 76107076658..0af0c6fe2e9 100644 --- a/internal/service/database/database_cloud_vm_cluster_resource.go +++ b/internal/service/database/database_cloud_vm_cluster_resource.go @@ -907,7 +907,7 @@ func (s *DatabaseCloudVmClusterResourceCrud) Update() error { flex, err := s.flexAvailableDbStorageInGBs(compartmentId.(string), flexShape) if err == nil { - if storageSizeInGBs, ok := s.D.GetOkExists("storage_size_in_gbs"); ok { + if storageSizeInGBs, ok := s.D.GetOkExists("storage_size_in_gbs"); ok && s.D.HasChange("storage_size_in_gbs") { tmp := flex**s.Infra.StorageCount - storageSizeInGBs.(int) request.StorageSizeInGBs = &tmp } @@ -935,12 +935,12 @@ func (s *DatabaseCloudVmClusterResourceCrud) Update() error { } } - if dataStorageSizeInTBs, ok := s.D.GetOkExists("data_storage_size_in_tbs"); ok { + if dataStorageSizeInTBs, ok := s.D.GetOkExists("data_storage_size_in_tbs"); ok && s.D.HasChange("data_storage_size_in_tbs") { tmp := dataStorageSizeInTBs.(float64) request.DataStorageSizeInTBs = &tmp } - if dbNodeStorageSizeInGBs, ok := s.D.GetOkExists("db_node_storage_size_in_gbs"); ok { + if dbNodeStorageSizeInGBs, ok := s.D.GetOkExists("db_node_storage_size_in_gbs"); ok && s.D.HasChange("db_node_storage_size_in_gbs") { tmp := dbNodeStorageSizeInGBs.(int) request.DbNodeStorageSizeInGBs = &tmp } @@ -953,7 +953,7 @@ func (s *DatabaseCloudVmClusterResourceCrud) Update() error { request.DefinedTags = convertedDefinedTags } - if displayName, ok := s.D.GetOkExists("display_name"); ok { + if displayName, ok := s.D.GetOkExists("display_name"); ok && s.D.HasChange("display_name") { tmp := displayName.(string) request.DisplayName = &tmp } @@ -983,7 +983,7 @@ func (s *DatabaseCloudVmClusterResourceCrud) Update() error { request.LicenseModel = oci_database.UpdateCloudVmClusterDetailsLicenseModelEnum(licenseModel.(string)) } - if memorySizeInGBs, ok := s.D.GetOkExists("memory_size_in_gbs"); ok { + if memorySizeInGBs, ok := s.D.GetOkExists("memory_size_in_gbs"); ok && s.D.HasChange("memory_size_in_gbs") { tmp := memorySizeInGBs.(int) request.MemorySizeInGBs = &tmp } diff --git a/internal/service/database/database_database_resource.go b/internal/service/database/database_database_resource.go index 16d9959d4fd..21b93ca8a85 100644 --- a/internal/service/database/database_database_resource.go +++ b/internal/service/database/database_database_resource.go @@ -56,7 +56,6 @@ func DatabaseDatabaseResource() *schema.Resource { "admin_password": { Type: schema.TypeString, Required: true, - ForceNew: true, Sensitive: true, }, "db_name": { @@ -1404,28 +1403,28 @@ func (s *DatabaseDatabaseResourceCrud) DatabaseToMap(obj *oci_database.Database) } func (s *DatabaseDatabaseResourceCrud) setDbKeyVersion(databaseId string) error { - setDbKeyVersionRequest := oci_database.SetDbKeyVersionRequest{} - setDbKeyVersionRequest.DatabaseId = &databaseId - setDbKeyVersionRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "database") - details := oci_database.OciProviderSetKeyVersionDetails{} - if kmsKeyVersionId, ok := s.D.GetOkExists("kms_key_version_id"); ok && s.D.HasChange("kms_key_version_id") { oldRaw, newRaw := s.D.GetChange("kms_key_version_id") if oldRaw == "" && newRaw != "" { + setDbKeyVersionRequest := oci_database.SetDbKeyVersionRequest{} + setDbKeyVersionRequest.DatabaseId = &databaseId + setDbKeyVersionRequest.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "database") + details := oci_database.OciProviderSetKeyVersionDetails{} + temp := kmsKeyVersionId.(string) details.KmsKeyVersionId = &temp setDbKeyVersionRequest.SetKeyVersionDetails = details - } - } - response, err := s.Client.SetDbKeyVersion(context.Background(), setDbKeyVersionRequest) - if err != nil { - return err - } - workId := response.OpcWorkRequestId - if workId != nil { - _, err = tfresource.WaitForWorkRequestWithErrorHandling(s.WorkRequestClient, workId, "database", oci_work_requests.WorkRequestResourceActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries) - if err != nil { + response, err := s.Client.SetDbKeyVersion(context.Background(), setDbKeyVersionRequest) + if err != nil { + return err + } + workId := response.OpcWorkRequestId + if workId != nil { + _, err = tfresource.WaitForWorkRequestWithErrorHandling(s.WorkRequestClient, workId, "database", oci_work_requests.WorkRequestResourceActionTypeUpdated, s.D.Timeout(schema.TimeoutUpdate), s.DisableNotFoundRetries) + if err != nil { + } + } } } return nil From 805594ee171834c64a0a8a0974ce767db08cf564 Mon Sep 17 00:00:00 2001 From: rohan Date: Fri, 4 Oct 2024 15:19:10 +0530 Subject: [PATCH 20/31] Bug Fix Fixed the timestamp issue to corrected form --- .../service/cloud_guard/cloud_guard_data_source_resource.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/cloud_guard/cloud_guard_data_source_resource.go b/internal/service/cloud_guard/cloud_guard_data_source_resource.go index 654a60444f1..fbbeca9cd71 100644 --- a/internal/service/cloud_guard/cloud_guard_data_source_resource.go +++ b/internal/service/cloud_guard/cloud_guard_data_source_resource.go @@ -750,7 +750,7 @@ func ContinuousQueryStartPolicyToMap(obj *oci_cloud_guard.ContinuousQueryStartPo result["start_policy_type"] = "ABSOLUTE_TIME_START_POLICY" if v.QueryStartTime != nil { - result["query_start_time"] = v.QueryStartTime.Format(time.RFC3339Nano) + result["query_start_time"] = v.QueryStartTime.Round(time.Millisecond).Format(time.RFC3339Nano) } case oci_cloud_guard.NoDelayStartPolicy: result["start_policy_type"] = "NO_DELAY_START_POLICY" From 89300b93aaec87e1cc8555e325b63c45e508b11d Mon Sep 17 00:00:00 2001 From: zhenyao Date: Fri, 4 Oct 2024 16:56:51 -0700 Subject: [PATCH 21/31] Bugfix - fix unified_agent_configuration param --- examples/logging/identity/identity.tf | 39 ---- examples/logging/log/log.tf | 6 +- .../log_agent_configuration.tf | 22 +- examples/logging/log_group/log_group.tf | 7 +- examples/logging/log_rule/log_rule.tf | 5 - .../log_saved_search/log_saved_search.tf | 5 - examples/logging/main.tf | 17 +- examples/logging/provider.tf | 5 + ...ogging_unified_agent_configuration_test.go | 32 +-- ...ng_unified_agent_configuration_resource.go | 201 +++++++++--------- 10 files changed, 120 insertions(+), 219 deletions(-) diff --git a/examples/logging/identity/identity.tf b/examples/logging/identity/identity.tf index 352214f561d..3fcca5f93a6 100644 --- a/examples/logging/identity/identity.tf +++ b/examples/logging/identity/identity.tf @@ -11,43 +11,4 @@ variable "log_group_freeform_tags" { default = { "Department" = "Finance" } -} - -variable "tag_namespace_description" { - default = "Just a test" -} - -variable "tag_namespace_name" { - default = "tf-testexamples-tag-namespace" -} - -resource "oci_identity_tag_namespace" "tag-namespace1" { - #Required - compartment_id = var.compartment_id - description = var.tag_namespace_description - name = var.tag_namespace_name -} - -resource "oci_identity_tag" "tag1" { - #Required - description = "tf example tag" - name = "tf-example-tag" - tag_namespace_id = oci_identity_tag_namespace.tag-namespace1.id -} - -resource "oci_identity_tag" "tag2" { - #Required - description = "tf example tag 2" - name = "tf-example-tag-2" - tag_namespace_id = oci_identity_tag_namespace.tag-namespace1.id -} - -output "tag_namespace1_name" { - value = oci_identity_tag_namespace.tag-namespace1.name -} -output "tag1_name" { - value = oci_identity_tag.tag1.name -} -output "tag2_name" { - value = oci_identity_tag.tag2.name } \ No newline at end of file diff --git a/examples/logging/log/log.tf b/examples/logging/log/log.tf index 92196cb80ef..407210b4aae 100644 --- a/examples/logging/log/log.tf +++ b/examples/logging/log/log.tf @@ -57,8 +57,7 @@ variable "test_log_group_id" {} variable "test_log_name" { default = "tf-exampleLog" } -variable "tag_namespace1_name" {} -variable "tag2_name" {} + resource "oci_logging_log" "test_log" { #Required @@ -84,9 +83,6 @@ resource "oci_logging_log" "test_log" { compartment_id = "ocid1.compartment.oc1..aaaaaaaa4rv5j2vzbrwaztnzvtu7kgswtigms4llcbylelylsqt2l3kl7gaa" }*/ - defined_tags = { - "${var.tag_namespace1_name}.${var.tag2_name}" = var.defined_tags_value - } freeform_tags = var.freeform_tags_value is_enabled = "false" retention_duration = "30" diff --git a/examples/logging/log_agent_configuration/log_agent_configuration.tf b/examples/logging/log_agent_configuration/log_agent_configuration.tf index 725ca0693d6..ef7f73c956d 100644 --- a/examples/logging/log_agent_configuration/log_agent_configuration.tf +++ b/examples/logging/log_agent_configuration/log_agent_configuration.tf @@ -1,6 +1,7 @@ // Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. // Licensed under the Mozilla Public License v2.0 + variable "compartment_id" {} variable "unified_agent_configuration_defined_tags_value" { @@ -174,8 +175,7 @@ variable "unified_agent_configuration_state" { variable "log_group_defined_tags_value" { default = "value2" } -variable "tag_namespace1_name" {} -variable "tag1_name" {} + variable "test_log_group_id" {} variable "test_log_id" {} @@ -238,10 +238,6 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura } } - #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = var.unified_agent_configuration_description display_name = var.unified_agent_configuration_display_name freeform_tags = var.unified_agent_configuration_freeform_tags @@ -330,9 +326,6 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura } #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = var.unified_agent_configuration_description display_name = "test_unified_agent_configuration_1" freeform_tags = var.unified_agent_configuration_freeform_tags @@ -374,7 +367,7 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura source { name = "kubernetes_source" scrape_targets { - k8s_namespace = "kube_system" + k8s_namespace = "kube-system" resource_group = "tf-test-resource-group" resource_type = "PODS" service_name = "kubernetes" @@ -390,9 +383,6 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura } #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = var.unified_agent_configuration_description display_name = "test_unified_agent_configuration_monitoring_KUBERNETES" freeform_tags = var.unified_agent_configuration_freeform_tags @@ -463,9 +453,6 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura } #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = var.unified_agent_configuration_description display_name = "test_unified_agent_configuration_monitoring_TAIL" freeform_tags = var.unified_agent_configuration_freeform_tags @@ -510,9 +497,6 @@ resource "oci_logging_unified_agent_configuration" "test_unified_agent_configura } #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = var.unified_agent_configuration_description display_name = "test_unified_agent_configuration_monitoring_URL" freeform_tags = var.unified_agent_configuration_freeform_tags diff --git a/examples/logging/log_group/log_group.tf b/examples/logging/log_group/log_group.tf index 7a0d85ff3b9..693106cb5a9 100644 --- a/examples/logging/log_group/log_group.tf +++ b/examples/logging/log_group/log_group.tf @@ -18,9 +18,6 @@ variable "freeform_tags_value" { } } -variable "tag_namespace1_name" {} -variable "tag2_name" {} - variable "compartment_id" {} variable "log_group_name" { @@ -34,9 +31,7 @@ resource "oci_logging_log_group" "test_log_group" { #Optional description = "description" - defined_tags = { - "${var.tag_namespace1_name}.${var.tag2_name}" = var.defined_tags_value - } + freeform_tags = var.freeform_tags_value lifecycle { diff --git a/examples/logging/log_rule/log_rule.tf b/examples/logging/log_rule/log_rule.tf index a349d06c1e0..c30899f95dd 100644 --- a/examples/logging/log_rule/log_rule.tf +++ b/examples/logging/log_rule/log_rule.tf @@ -1,7 +1,5 @@ variable "compartment_id" {} -variable "tag_namespace1_name" {} -variable "tag1_name" {} variable "defined_tags_value" { default = "defined_tags_value" @@ -21,9 +19,6 @@ resource "oci_logging_log" "test_log" { resource "oci_logging_log_rule" "test_log_rule" { compartment_id = var.compartment_id custom_log_id = oci_logging_log.test_log.id - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.defined_tags_value - } description = "description2" display_name = "logRuleTFExampleName" freeform_tags = { diff --git a/examples/logging/log_saved_search/log_saved_search.tf b/examples/logging/log_saved_search/log_saved_search.tf index e039da2472d..1eb77d300cb 100644 --- a/examples/logging/log_saved_search/log_saved_search.tf +++ b/examples/logging/log_saved_search/log_saved_search.tf @@ -13,8 +13,6 @@ variable "log_group_defined_tags_value" { default = "tf-value-group" } variable "compartment_id" {} -variable "tag_namespace1_name" {} -variable "tag1_name" {} variable "test_log_saved_search_name" { default = "tf-exampleLogSavedSearch" } @@ -26,9 +24,6 @@ resource "oci_logging_log_saved_search" "test_log_saved_search" { query = "exampleQuery" #Optional - defined_tags = { - "${var.tag_namespace1_name}.${var.tag1_name}" = var.log_group_defined_tags_value - } description = "description" freeform_tags = var.log_saved_search_freeform_tags diff --git a/examples/logging/main.tf b/examples/logging/main.tf index 03c37392769..faa5533f20f 100644 --- a/examples/logging/main.tf +++ b/examples/logging/main.tf @@ -7,10 +7,11 @@ locals { region = "us-phoenix-1" tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa4s2hncj4oaulmf5tz4yfeska6fya4gkd5jsg3fmlgq7pprgr7wiq" - user_ocid = "ocid1.user.oc1..aaaaaaaa5mxx5f6ltt5w6soekhzetsymtgntbjijmikyc4kqpbau2xfwnsva" - fingerprint = "1e:84:e8:12:08:55:af:2e:51:5e:2a:57:41:ab:fd:c9" - private_key_path = "/Users/shxi/.oci/oci_api_key.pem" + user_ocid = "ocid1.user.oc1..aaaaaaaark6yo7jgevogxohlgerphpr6lreunmmsovjdkhmujnuj2urix5aq" + fingerprint = "16:9a:cf:f4:78:3f:ba:fd:67:fc:74:30:72:e8:e7:11" + private_key_path = "/Users/zhenyao/.oci/oci_api_key.pem" } + module "identity" { source = "./identity" compartment_id = var.compartment_ocid @@ -19,29 +20,21 @@ module "identity" { module "log_group" { source = "./log_group" compartment_id = var.compartment_ocid - tag2_name = module.identity.tag2_name - tag_namespace1_name = module.identity.tag_namespace1_name } module "log" { source = "./log" test_log_group_id = module.log_group.test_log_group_id - tag2_name = module.identity.tag2_name - tag_namespace1_name = module.identity.tag_namespace1_name } module "log_saved_search" { source = "./log_saved_search" compartment_id = var.compartment_ocid - tag1_name = module.identity.tag1_name - tag_namespace1_name = module.identity.tag_namespace1_name } module "log_agent_configuration" { source = "./log_agent_configuration" compartment_id = var.compartment_ocid - tag1_name = module.identity.tag1_name - tag_namespace1_name = module.identity.tag_namespace1_name test_log_id = module.log.test_log_id test_log_group_id = module.log_group.test_log_group_id -} +} \ No newline at end of file diff --git a/examples/logging/provider.tf b/examples/logging/provider.tf index facaf92d9d9..c710ac87ebb 100644 --- a/examples/logging/provider.tf +++ b/examples/logging/provider.tf @@ -7,18 +7,23 @@ // These variables would commonly be defined as environment variables or sourced in a .env file variable "tenancy_ocid" { + default = "ocid1.tenancy.oc1..aaaaaaaa4s2hncj4oaulmf5tz4yfeska6fya4gkd5jsg3fmlgq7pprgr7wiq" } variable "user_ocid" { + default = "ocid1.user.oc1..aaaaaaaark6yo7jgevogxohlgerphpr6lreunmmsovjdkhmujnuj2urix5aq" } variable "fingerprint" { + default = "16:9a:cf:f4:78:3f:ba:fd:67:fc:74:30:72:e8:e7:11" } variable "private_key_path" { + default = "/Users/zhenyao/.oci/oci_api_key.pem" } variable "compartment_ocid" { + default = "ocid1.compartment.oc1..aaaaaaaajdgiuoxrwem3326sihqitq3rf62hg4bq255hzchqwszx2xz4zega" } variable "region" { diff --git a/internal/integrationtest/logging_unified_agent_configuration_test.go b/internal/integrationtest/logging_unified_agent_configuration_test.go index 88ac4d912dd..ac9591152a8 100644 --- a/internal/integrationtest/logging_unified_agent_configuration_test.go +++ b/internal/integrationtest/logging_unified_agent_configuration_test.go @@ -45,7 +45,6 @@ var ( "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "is_enabled": acctest.Representation{RepType: acctest.Required, Create: `true`, Update: `false`}, "service_configuration": acctest.RepresentationGroup{RepType: acctest.Required, Group: LoggingUnifiedAgentConfigurationServiceConfigurationRepresentation}, - "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")}`}, "description": acctest.Representation{RepType: acctest.Required, Create: `description`, Update: `description2`}, "display_name": acctest.Representation{RepType: acctest.Required, Create: `displayName`, Update: `displayName2`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, @@ -73,7 +72,8 @@ var ( "pattern": acctest.Representation{RepType: acctest.Optional, Create: `pattern`, Update: `pattern2`}, } LoggingUnifiedAgentConfigurationGroupAssociationRepresentation = map[string]interface{}{ - "group_list": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_identity_group.test_group.id}`}}, // Update: []string{`${oci_identity_group.test_group.id}`, `ocid1.Group.oc1..aaaaaaaa5rvs7zjwdk3zdmysm7x7wcxyanbllutswe4xbl7ng4stohtg3sla`}}, + //"group_list": acctest.Representation{RepType: acctest.Required, Create: []string{`ocid1.group.oc1..aaaaaaaafxpft7qucqbpsygm555uzxipqslne7d5meupykscq57q32jfiifa`}}, // Update: []string{`${oci_identity_group.test_group.id}`, `ocid1.Group.oc1..aaaaaaaa5rvs7zjwdk3zdmysm7x7wcxyanbllutswe4xbl7ng4stohtg3sla`}}, + "group_list": acctest.Representation{RepType: acctest.Required, Create: []string{`ocid1.group.oc1..testid`}}, // Update: []string{`${oci_identity_group.test_group.id}`, `ocid1.Group.oc1..aaaaaaaa5rvs7zjwdk3zdmysm7x7wcxyanbllutswe4xbl7ng4stohtg3sla`}}, } LoggingUnifiedAgentConfigurationServiceConfigurationDestinationRepresentation = map[string]interface{}{ @@ -111,7 +111,6 @@ var ( "null_value_pattern": acctest.Representation{RepType: acctest.Optional, Create: `nullValuePattern`}, "timeout_in_milliseconds": acctest.Representation{RepType: acctest.Optional, Create: `10`}, "types": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"types": "types"}}, - //"is_estimate_current_event": acctest.Representation{RepType: acctest.Optional, Create: `false`}, } LoggingUnifiedAgentConfigurationDataSourceFilterRepresentation = map[string]interface{}{ @@ -126,13 +125,8 @@ var ( } // need to add policy for creating groups - LoggingUnifiedAgentConfigurationResourceDependencies = DefinedTagsDependencies + - acctest.GenerateResourceFromRepresentationMap("oci_identity_group", "test_group", acctest.Required, acctest.Create, LoggingUAIdentityGroupRepresentation) + - acctest.GenerateResourceFromRepresentationMap("oci_logging_log_group", "test_log_group", acctest.Required, acctest.Create, LoggingLogGroupRepresentation) + + LoggingUnifiedAgentConfigurationResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_logging_log_group", "test_log_group", acctest.Required, acctest.Create, LoggingLogGroupRepresentation) + acctest.GenerateResourceFromRepresentationMap("oci_logging_log", "test_log", acctest.Required, acctest.Create, customLogRepresentation) // + - //acctest.GenerateResourceFromRepresentationMap("oci_objectstorage_bucket", "test_bucket", acctest.Required, acctest.Create, ObjectStorageBucketRepresentation) + - //acctest.GenerateDataSourceFromRepresentationMap("oci_objectstorage_namespace", "test_namespace", acctest.Required, acctest.Create, ObjectStorageObjectStorageNamespaceSingularDataSourceRepresentation) + - //acctest.GenerateResourceFromRepresentationMap("oci_objectstorage_object", "test_object", acctest.Required, acctest.Create, ObjectStorageObjectRepresentation) LoggingUnifiedAgentConfigurationServiceConfigurationSourcesRepresentation = map[string]interface{}{ "advanced_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: LoggingUnifiedAgentConfigurationServiceConfigurationApplicationConfigurationsSourcesAdvancedOptionsRepresentation}, @@ -140,7 +134,6 @@ var ( "paths": acctest.Representation{RepType: acctest.Required, Create: []string{`/var/log/*`}}, "name": acctest.Representation{RepType: acctest.Required, Create: `name`}, "parser": acctest.RepresentationGroup{RepType: acctest.Required, Group: LoggingUnifiedAgentConfigurationServiceConfigurationSourcesParserRepresentation}, - //"channels": acctest.Representation{RepType: acctest.Required, Create: []string{`Security`}, Update: []string{`Security`, `Application`}}, } LoggingUnifiedAgentConfigurationServiceConfigurationApplicationConfigurationsSourcesAdvancedOptionsRepresentation = map[string]interface{}{ "is_read_from_head": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, @@ -148,9 +141,8 @@ var ( // Add new test configs here // CRI parser configs LoggingUnifiedAgentConfigurationServiceConfigurationSourcesParserNestedParserRepresentation = map[string]interface{}{ - "time_format": acctest.Representation{RepType: acctest.Optional, Create: `%Y-%m-%dT%H:%M:%S.%L%z`, Update: `%Y-%m-%d %H:%M:%S.%L%z`}, - "field_time_key": acctest.Representation{RepType: acctest.Optional, Create: `time`, Update: `time1`}, - "is_keep_time_key": acctest.Representation{RepType: acctest.Optional, Create: `true`, Update: `false`}, + "time_format": acctest.Representation{RepType: acctest.Optional, Create: `%Y-%m-%dT%H:%M:%S.%L%z`, Update: `%Y-%m-%d %H:%M:%S.%L%z`}, + "field_time_key": acctest.Representation{RepType: acctest.Optional, Create: `time`, Update: `time1`}, } LoggingUnifiedAgentConfigurationServiceConfigurationSourcesCriParserRepresentation = map[string]interface{}{ @@ -202,7 +194,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "service_configuration.0.destination.0.log_object_id"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.paths.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), @@ -226,7 +217,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "service_configuration.0.destination.0.log_object_id"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.paths.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), @@ -234,7 +224,7 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.is_merge_cri_fields", "true"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.nested_parser.0.time_format", "%Y-%m-%dT%H:%M:%S.%L%z"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.nested_parser.0.field_time_key", "time"), - resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.nested_parser.0.is_keep_time_key", "true"), + resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.nested_parser.0.is_keep_time_key", "false"), func(s *terraform.State) (err error) { _, err = acctest.FromInstanceState(s, resourceName, "id") @@ -254,7 +244,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "service_configuration.0.destination.0.log_object_id"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.paths.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), @@ -284,7 +273,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "service_configuration.0.destination.0.log_object_id"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.paths.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), @@ -329,8 +317,7 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), - resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.parser_type", "AUDITD"), - resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.is_estimate_current_event", "true"), + //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.parser.0.parser_type", "AUDITD"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.advanced_options.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.advanced_options.0.is_read_from_head", "false"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.unified_agent_configuration_filter.#", "1"), @@ -387,7 +374,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.record_input.0.resource_group", "resourceGroup"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.type", "UMA_METRICS"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.unified_agent_configuration_filter.#", "1"), @@ -440,8 +426,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.record_input.0.resource_group", "resourceGroup2"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.type", "UMA_METRICS"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.channels.#", "2"), - //resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.name", "name2"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.unified_agent_configuration_filter.#", "1"), resource.TestCheckResourceAttr(resourceName, "service_configuration.0.unified_agent_configuration_filter.0.allow_list.#", "1"), @@ -509,8 +493,6 @@ func TestLoggingUnifiedAgentConfigurationResource_basic(t *testing.T) { resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.record_input.0.resource_group", "resourceGroup2"), resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.destination.0.operational_metrics_configuration.0.source.0.type", "UMA_METRICS"), resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.sources.#", "1"), - //resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.sources.0.channels.#", "2"), - //resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.sources.0.name", "name2"), resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.sources.0.source_type", "LOG_TAIL"), resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.sources.0.advanced_options.0.is_read_from_head", "true"), resource.TestCheckResourceAttr(singularDatasourceName, "service_configuration.0.unified_agent_configuration_filter.#", "1"), diff --git a/internal/service/logging/logging_unified_agent_configuration_resource.go b/internal/service/logging/logging_unified_agent_configuration_resource.go index dcf7ad8b454..fb7fcfb412f 100644 --- a/internal/service/logging/logging_unified_agent_configuration_resource.go +++ b/internal/service/logging/logging_unified_agent_configuration_resource.go @@ -285,12 +285,12 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_estimate_current_event": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: true, }, "is_keep_time_key": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_merge_cri_fields": { Type: schema.TypeBool, @@ -300,7 +300,7 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_null_empty_string": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_support_colonless_ident": { Type: schema.TypeBool, @@ -804,12 +804,12 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_estimate_current_event": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: true, }, "is_keep_time_key": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_merge_cri_fields": { Type: schema.TypeBool, @@ -819,7 +819,7 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_null_empty_string": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_support_colonless_ident": { Type: schema.TypeBool, @@ -1257,12 +1257,12 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_estimate_current_event": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: true, }, "is_keep_time_key": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_merge_cri_fields": { Type: schema.TypeBool, @@ -1273,7 +1273,7 @@ func LoggingUnifiedAgentConfigurationResource() *schema.Resource { "is_null_empty_string": { Type: schema.TypeBool, Optional: true, - Computed: true, + Default: false, }, "is_support_colonless_ident": { Type: schema.TypeBool, @@ -3348,7 +3348,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3378,7 +3378,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3408,7 +3408,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3440,6 +3440,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := isEstimateCurrentEvent.(bool) details.IsEstimateCurrentEvent = &tmp } + if isKeepTimeKey, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_keep_time_key")); ok { tmp := isKeepTimeKey.(bool) details.IsKeepTimeKey = &tmp @@ -3452,7 +3453,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3498,7 +3499,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3552,7 +3553,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3597,7 +3598,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3627,7 +3628,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3673,7 +3674,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3731,7 +3732,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3765,7 +3766,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3805,7 +3806,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3843,7 +3844,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3895,7 +3896,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3941,7 +3942,7 @@ func (s *LoggingUnifiedAgentConfigurationResourceCrud) mapToUnifiedAgentParser(f tmp := nullValuePattern.(string) details.NullValuePattern = &tmp } - if timeoutInMilliseconds, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { + if timeoutInMilliseconds, ok := s.D.GetOk(fmt.Sprintf(fieldKeyFormat, "timeout_in_milliseconds")); ok { tmp := timeoutInMilliseconds.(int) details.TimeoutInMilliseconds = &tmp } @@ -3964,21 +3965,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -3989,21 +3988,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4014,21 +4011,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4039,7 +4034,21 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int if v.IsMergeCriFields != nil { result["is_merge_cri_fields"] = bool(*v.IsMergeCriFields) } - + if v.IsEstimateCurrentEvent != nil { + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) + } + if v.IsKeepTimeKey != nil { + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) + } + if v.IsNullEmptyString != nil { + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) + } + if v.NullValuePattern != nil { + result["null_value_pattern"] = v.NullValuePattern + } + if v.TimeoutInMilliseconds != nil { + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) + } if v.NestedParser != nil { result["nested_parser"] = []interface{}{UnifiedJsonParserToMap(v.NestedParser)} } @@ -4050,21 +4059,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4088,16 +4095,20 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["grok_name_key"] = string(*v.GrokNameKey) } + if v.IsEstimateCurrentEvent != nil { + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) + } + if v.IsKeepTimeKey != nil { + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) + } + if v.IsNullEmptyString != nil { + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) + } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } - if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds - } - - if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { @@ -4122,21 +4133,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4152,21 +4161,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4177,21 +4184,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4207,21 +4212,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4249,21 +4252,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4283,21 +4284,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4316,21 +4315,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) @@ -4361,21 +4358,19 @@ func UnifiedAgentParserToMap(obj *oci_logging.UnifiedAgentParser) map[string]int result["field_time_key"] = v.FieldTimeKey } if v.IsEstimateCurrentEvent != nil { - result["is_estimate_current_event"] = v.IsEstimateCurrentEvent - } else { - result["is_estimate_current_event"] = true + result["is_estimate_current_event"] = bool(*v.IsEstimateCurrentEvent) } if v.IsKeepTimeKey != nil { - result["is_keep_time_key"] = v.IsKeepTimeKey + result["is_keep_time_key"] = bool(*v.IsKeepTimeKey) } if v.IsNullEmptyString != nil { - result["is_null_empty_string"] = v.IsNullEmptyString + result["is_null_empty_string"] = bool(*v.IsNullEmptyString) } if v.NullValuePattern != nil { result["null_value_pattern"] = v.NullValuePattern } if v.TimeoutInMilliseconds != nil { - result["timeout_in_milliseconds"] = v.TimeoutInMilliseconds + result["timeout_in_milliseconds"] = int(*v.TimeoutInMilliseconds) } if v.Types != nil { result["types"] = tfresource.StringMapToObjectMap(v.Types) From bdbd8c30427588e0b1bae6501526893da174ff7b Mon Sep 17 00:00:00 2001 From: Saksham Agarwal Date: Mon, 9 Sep 2024 14:54:37 +0530 Subject: [PATCH 22/31] Added - Support for GenerateOnPremConnectorConfiguration resource in Data Safe --- ...enerate_on_prem_connector_configuration.tf | 28 +++++ ...te_on_prem_connector_configuration_test.go | 69 ++++++++++++ internal/provider/register_datasource.go | 4 - internal/provider/register_resource.go | 4 - .../service/data_safe/data_safe_export.go | 5 + ...n_prem_connector_configuration_resource.go | 101 ++++++++++++++++++ .../service/data_safe/register_resource.go | 1 + .../guides/resource_discovery.html.markdown | 7 ++ ...prem_connector_configuration.html.markdown | 57 ++++++++++ 9 files changed, 268 insertions(+), 8 deletions(-) create mode 100644 examples/datasafe/generate_on_prem_connector_configuration/generate_on_prem_connector_configuration.tf create mode 100644 internal/integrationtest/data_safe_generate_on_prem_connector_configuration_test.go create mode 100644 internal/service/data_safe/data_safe_generate_on_prem_connector_configuration_resource.go create mode 100644 website/docs/r/data_safe_generate_on_prem_connector_configuration.html.markdown diff --git a/examples/datasafe/generate_on_prem_connector_configuration/generate_on_prem_connector_configuration.tf b/examples/datasafe/generate_on_prem_connector_configuration/generate_on_prem_connector_configuration.tf new file mode 100644 index 00000000000..9959d7c91ca --- /dev/null +++ b/examples/datasafe/generate_on_prem_connector_configuration/generate_on_prem_connector_configuration.tf @@ -0,0 +1,28 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" {} +variable "user_ocid" {} +variable "fingerprint" {} +variable "private_key_path" {} +variable "region" {} + +variable "generate_on_prem_connector_configuration_password" { + default = "BEstrO0ng_#1111" +} + + + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region +} + +resource "oci_data_safe_generate_on_prem_connector_configuration" "test_generate_on_prem_connector_configuration" { + #Required + on_prem_connector_id = oci_data_safe_on_prem_connector.test_on_prem_connector.id + password = var.generate_on_prem_connector_configuration_password +} \ No newline at end of file diff --git a/internal/integrationtest/data_safe_generate_on_prem_connector_configuration_test.go b/internal/integrationtest/data_safe_generate_on_prem_connector_configuration_test.go new file mode 100644 index 00000000000..012ef7d4874 --- /dev/null +++ b/internal/integrationtest/data_safe_generate_on_prem_connector_configuration_test.go @@ -0,0 +1,69 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package integrationtest + +import ( + "fmt" + "strconv" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/oracle/terraform-provider-oci/httpreplay" + "github.com/oracle/terraform-provider-oci/internal/acctest" + + "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + + "github.com/oracle/terraform-provider-oci/internal/utils" +) + +var ( + DataSafeGenerateOnPremConnectorConfigurationRepresentation = map[string]interface{}{ + "on_prem_connector_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_data_safe_on_prem_connector.test_on_prem_connector.id}`}, + "password": acctest.Representation{RepType: acctest.Required, Create: `BEstrO0ng_#1111`}, + } + + DataSafeGenerateOnPremConnectorConfigurationResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_data_safe_on_prem_connector", "test_on_prem_connector", acctest.Required, acctest.Create, onPremConnectorRepresentation) +) + +// issue-routing-tag: data_safe/default +func TestDataSafeGenerateOnPremConnectorConfigurationResource_basic(t *testing.T) { + httpreplay.SetScenario("TestDataSafeGenerateOnPremConnectorConfigurationResource_basic") + defer httpreplay.SaveScenario() + + config := acctest.ProviderTestConfig() + + compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid") + compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) + + resourceName := "oci_data_safe_generate_on_prem_connector_configuration.test_generate_on_prem_connector_configuration" + + var resId string + // 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. + acctest.SaveConfigContent(config+compartmentIdVariableStr+DataSafeGenerateOnPremConnectorConfigurationResourceDependencies+ + acctest.GenerateResourceFromRepresentationMap("oci_data_safe_generate_on_prem_connector_configuration", "test_generate_on_prem_connector_configuration", acctest.Required, acctest.Create, DataSafeGenerateOnPremConnectorConfigurationRepresentation), "datasafe", "generateOnPremConnectorConfiguration", t) + + acctest.ResourceTest(t, nil, []resource.TestStep{ + // verify Create + { + Config: config + compartmentIdVariableStr + DataSafeGenerateOnPremConnectorConfigurationResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_data_safe_generate_on_prem_connector_configuration", "test_generate_on_prem_connector_configuration", acctest.Required, acctest.Create, DataSafeGenerateOnPremConnectorConfigurationRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "on_prem_connector_id"), + resource.TestCheckResourceAttr(resourceName, "password", "BEstrO0ng_#1111"), + + func(s *terraform.State) (err error) { + resId, err = acctest.FromInstanceState(s, resourceName, "id") + if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment { + if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil { + return errExport + } + } + return err + }, + ), + }, + }) +} diff --git a/internal/provider/register_datasource.go b/internal/provider/register_datasource.go index d5767724bb0..3932fa23fc9 100644 --- a/internal/provider/register_datasource.go +++ b/internal/provider/register_datasource.go @@ -62,7 +62,6 @@ import ( tf_fusion_apps "github.com/oracle/terraform-provider-oci/internal/service/fusion_apps" tf_generative_ai "github.com/oracle/terraform-provider-oci/internal/service/generative_ai" tf_generic_artifacts_content "github.com/oracle/terraform-provider-oci/internal/service/generic_artifacts_content" - tf_globally_distributed_database "github.com/oracle/terraform-provider-oci/internal/service/globally_distributed_database" tf_golden_gate "github.com/oracle/terraform-provider-oci/internal/service/golden_gate" tf_health_checks "github.com/oracle/terraform-provider-oci/internal/service/health_checks" tf_identity "github.com/oracle/terraform-provider-oci/internal/service/identity" @@ -303,9 +302,6 @@ func init() { if common.CheckForEnabledServices("genericartifactscontent") { tf_generic_artifacts_content.RegisterDatasource() } - if common.CheckForEnabledServices("globallydistributeddatabase") { - tf_globally_distributed_database.RegisterDatasource() - } if common.CheckForEnabledServices("goldengate") { tf_golden_gate.RegisterDatasource() } diff --git a/internal/provider/register_resource.go b/internal/provider/register_resource.go index d49c9a101bc..e400d01852c 100644 --- a/internal/provider/register_resource.go +++ b/internal/provider/register_resource.go @@ -62,7 +62,6 @@ import ( tf_fusion_apps "github.com/oracle/terraform-provider-oci/internal/service/fusion_apps" tf_generative_ai "github.com/oracle/terraform-provider-oci/internal/service/generative_ai" tf_generic_artifacts_content "github.com/oracle/terraform-provider-oci/internal/service/generic_artifacts_content" - tf_globally_distributed_database "github.com/oracle/terraform-provider-oci/internal/service/globally_distributed_database" tf_golden_gate "github.com/oracle/terraform-provider-oci/internal/service/golden_gate" tf_health_checks "github.com/oracle/terraform-provider-oci/internal/service/health_checks" tf_identity "github.com/oracle/terraform-provider-oci/internal/service/identity" @@ -303,9 +302,6 @@ func init() { if common.CheckForEnabledServices("genericartifactscontent") { tf_generic_artifacts_content.RegisterResource() } - if common.CheckForEnabledServices("globallydistributeddatabase") { - tf_globally_distributed_database.RegisterResource() - } if common.CheckForEnabledServices("goldengate") { tf_golden_gate.RegisterResource() } diff --git a/internal/service/data_safe/data_safe_export.go b/internal/service/data_safe/data_safe_export.go index 0f8f8d25ebd..e086a9362e4 100644 --- a/internal/service/data_safe/data_safe_export.go +++ b/internal/service/data_safe/data_safe_export.go @@ -388,6 +388,11 @@ var exportDataSafeCalculateAuditVolumeCollectedHints = &tf_export.TerraformResou ResourceAbbreviation: "calculate_audit_volume_collected", } +var exportDataSafeGenerateOnPremConnectorConfigurationHints = &tf_export.TerraformResourceHints{ + ResourceClass: "oci_data_safe_generate_on_prem_connector_configuration", + ResourceAbbreviation: "generate_on_prem_connector_configuration", +} + var dataSafeResourceGraph = tf_export.TerraformResourceGraph{ "oci_identity_compartment": { {TerraformResourceHints: exportDataSafeDataSafePrivateEndpointHints}, diff --git a/internal/service/data_safe/data_safe_generate_on_prem_connector_configuration_resource.go b/internal/service/data_safe/data_safe_generate_on_prem_connector_configuration_resource.go new file mode 100644 index 00000000000..6c40ef645e0 --- /dev/null +++ b/internal/service/data_safe/data_safe_generate_on_prem_connector_configuration_resource.go @@ -0,0 +1,101 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +package data_safe + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + oci_data_safe "github.com/oracle/oci-go-sdk/v65/datasafe" + + "github.com/oracle/terraform-provider-oci/internal/client" + "github.com/oracle/terraform-provider-oci/internal/tfresource" +) + +func DataSafeGenerateOnPremConnectorConfigurationResource() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Timeouts: tfresource.DefaultTimeout, + Create: createDataSafeGenerateOnPremConnectorConfiguration, + Read: readDataSafeGenerateOnPremConnectorConfiguration, + Delete: deleteDataSafeGenerateOnPremConnectorConfiguration, + Schema: map[string]*schema.Schema{ + // Required + "on_prem_connector_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "password": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Sensitive: true, + }, + + // Optional + + // Computed + }, + } +} + +func createDataSafeGenerateOnPremConnectorConfiguration(d *schema.ResourceData, m interface{}) error { + sync := &DataSafeGenerateOnPremConnectorConfigurationResourceCrud{} + sync.D = d + sync.Client = m.(*client.OracleClients).DataSafeClient() + + return tfresource.CreateResource(d, sync) +} + +func readDataSafeGenerateOnPremConnectorConfiguration(d *schema.ResourceData, m interface{}) error { + return nil +} + +func deleteDataSafeGenerateOnPremConnectorConfiguration(d *schema.ResourceData, m interface{}) error { + return nil +} + +type DataSafeGenerateOnPremConnectorConfigurationResourceCrud struct { + tfresource.BaseCrud + Client *oci_data_safe.DataSafeClient + Res *oci_data_safe.GenerateOnPremConnectorConfigurationResponse + DisableNotFoundRetries bool +} + +func (s *DataSafeGenerateOnPremConnectorConfigurationResourceCrud) ID() string { + return *s.Res.OpcRequestId +} + +func (s *DataSafeGenerateOnPremConnectorConfigurationResourceCrud) Create() error { + request := oci_data_safe.GenerateOnPremConnectorConfigurationRequest{} + + if onPremConnectorId, ok := s.D.GetOkExists("on_prem_connector_id"); ok { + tmp := onPremConnectorId.(string) + request.OnPremConnectorId = &tmp + } + + if password, ok := s.D.GetOkExists("password"); ok { + tmp := password.(string) + request.GenerateOnPremConnectorConfigurationDetails = oci_data_safe.GenerateOnPremConnectorConfigurationDetails{ + Password: &tmp, + } + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "data_safe") + + response, err := s.Client.GenerateOnPremConnectorConfiguration(context.Background(), request) + if err != nil { + return err + } + + s.Res = &response + return nil +} + +func (s *DataSafeGenerateOnPremConnectorConfigurationResourceCrud) SetData() error { + return nil +} diff --git a/internal/service/data_safe/register_resource.go b/internal/service/data_safe/register_resource.go index 114d0d59e16..1bc5addef3f 100644 --- a/internal/service/data_safe/register_resource.go +++ b/internal/service/data_safe/register_resource.go @@ -25,6 +25,7 @@ func RegisterResource() { tfresource.RegisterResource("oci_data_safe_database_security_config", DataSafeDatabaseSecurityConfigResource()) tfresource.RegisterResource("oci_data_safe_database_security_config_management", DataSafeDatabaseSecurityConfigManagementResource()) tfresource.RegisterResource("oci_data_safe_discovery_job", DataSafeDiscoveryJobResource()) + tfresource.RegisterResource("oci_data_safe_generate_on_prem_connector_configuration", DataSafeGenerateOnPremConnectorConfigurationResource()) tfresource.RegisterResource("oci_data_safe_library_masking_format", DataSafeLibraryMaskingFormatResource()) tfresource.RegisterResource("oci_data_safe_masking_policies_masking_column", DataSafeMaskingPoliciesMaskingColumnResource()) tfresource.RegisterResource("oci_data_safe_masking_policy", DataSafeMaskingPolicyResource()) diff --git a/website/docs/guides/resource_discovery.html.markdown b/website/docs/guides/resource_discovery.html.markdown index 06966f3ac38..ac1963156ad 100644 --- a/website/docs/guides/resource_discovery.html.markdown +++ b/website/docs/guides/resource_discovery.html.markdown @@ -587,6 +587,13 @@ data_safe * oci\_data\_safe\_sdm\_masking\_policy\_difference * oci\_data\_safe\_calculate\_audit\_volume\_available * oci\_data\_safe\_calculate\_audit\_volume\_collected +* oci\_data\_safe\_generate\_on\_prem\_connector\_configuration +* oci\_data\_safe\_security\_policy\_deployment +* oci\_data\_safe\_security\_policy +* oci\_data\_safe\_database\_security\_config +* oci\_data\_safe\_sql\_firewall\_policy +* oci\_data\_safe\_sql\_collection +* oci\_data\_safe\_target\_database\_peer\_target\_database database diff --git a/website/docs/r/data_safe_generate_on_prem_connector_configuration.html.markdown b/website/docs/r/data_safe_generate_on_prem_connector_configuration.html.markdown new file mode 100644 index 00000000000..2430340b85d --- /dev/null +++ b/website/docs/r/data_safe_generate_on_prem_connector_configuration.html.markdown @@ -0,0 +1,57 @@ +--- +subcategory: "Data Safe" +layout: "oci" +page_title: "Oracle Cloud Infrastructure: oci_data_safe_generate_on_prem_connector_configuration" +sidebar_current: "docs-oci-resource-data_safe-generate_on_prem_connector_configuration" +description: |- + Provides the Generate On Prem Connector Configuration resource in Oracle Cloud Infrastructure Data Safe service +--- + +# oci_data_safe_generate_on_prem_connector_configuration +This resource provides the Generate On Prem Connector Configuration resource in Oracle Cloud Infrastructure Data Safe service. + +Creates and downloads the configuration of the specified on-premises connector. + + +## Example Usage + +```hcl +resource "oci_data_safe_generate_on_prem_connector_configuration" "test_generate_on_prem_connector_configuration" { + #Required + on_prem_connector_id = oci_data_safe_on_prem_connector.test_on_prem_connector.id + password = var.generate_on_prem_connector_configuration_password +} +``` + +## Argument Reference + +The following arguments are supported: + +* `on_prem_connector_id` - (Required) The OCID of the on-premises connector. +* `password` - (Required) The password to encrypt the keys inside the wallet included as part of the configuration. The password must be between 12 and 30 characters long and must contain atleast 1 uppercase, 1 lowercase, 1 numeric, and 1 special character. + + +** IMPORTANT ** +Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values + +## Attributes Reference + +The following attributes are exported: + + +## Timeouts + +The `timeouts` block allows you to specify [timeouts](https://registry.terraform.io/providers/oracle/oci/latest/docs/guides/changing_timeouts) for certain operations: + * `create` - (Defaults to 20 minutes), when creating the Generate On Prem Connector Configuration + * `update` - (Defaults to 20 minutes), when updating the Generate On Prem Connector Configuration + * `delete` - (Defaults to 20 minutes), when destroying the Generate On Prem Connector Configuration + + +## Import + +GenerateOnPremConnectorConfiguration can be imported using the `id`, e.g. + +``` +$ terraform import oci_data_safe_generate_on_prem_connector_configuration.test_generate_on_prem_connector_configuration "id" +``` + From d26dcc4c196290895b2b7dbccf3512adad8de904 Mon Sep 17 00:00:00 2001 From: Atul Aditya Date: Sun, 25 Aug 2024 17:53:27 +0530 Subject: [PATCH 23/31] Added - Support for Support Cross region Backup copy & Replication for volumes encrypted with Customer KMS Keys --- examples/storage/block/volume_replica/main.tf | 36 +++++++++++++++++++ .../volume_replica/volume_replica_kms.tf | 31 ++++++++++++++++ .../core_block_volume_replica_test.go | 2 +- .../core_boot_volume_replica_test.go | 3 +- .../integrationtest/core_boot_volume_test.go | 9 ++++- ...re_volume_backup_policy_assignment_test.go | 30 ++++++++++++---- .../core_volume_group_replica_test.go | 12 +++---- .../integrationtest/core_volume_group_test.go | 12 ++++++- internal/integrationtest/core_volume_test.go | 17 ++++----- .../core_block_volume_replica_data_source.go | 8 +++++ .../core_block_volume_replicas_data_source.go | 8 +++++ .../core_boot_volume_replica_data_source.go | 8 +++++ .../core_boot_volume_replicas_data_source.go | 8 +++++ .../service/core/core_boot_volume_resource.go | 29 +++++++++++++++ .../core_instance_configuration_resource.go | 21 +++++++++++ ...olume_backup_policy_assignment_resource.go | 15 ++++++++ ...e_backup_policy_assignments_data_source.go | 4 +++ .../core/core_volume_group_resource.go | 23 ++++++++++-- internal/service/core/core_volume_resource.go | 29 +++++++++++++++ .../d/core_block_volume_replica.html.markdown | 1 + .../core_block_volume_replicas.html.markdown | 1 + website/docs/d/core_boot_volume.html.markdown | 1 + .../d/core_boot_volume_replica.html.markdown | 2 ++ .../d/core_boot_volume_replicas.html.markdown | 2 ++ .../docs/d/core_boot_volumes.html.markdown | 1 + .../core_instance_configuration.html.markdown | 2 ++ ...core_instance_configurations.html.markdown | 2 ++ website/docs/d/core_volume.html.markdown | 1 + ...me_backup_policy_assignments.html.markdown | 1 + .../docs/d/core_volume_groups.html.markdown | 1 + website/docs/d/core_volumes.html.markdown | 1 + website/docs/r/core_boot_volume.html.markdown | 8 ++++- .../core_instance_configuration.html.markdown | 17 ++++----- website/docs/r/core_volume.html.markdown | 8 ++++- ...ume_backup_policy_assignment.html.markdown | 5 +++ .../docs/r/core_volume_group.html.markdown | 6 ++++ 36 files changed, 325 insertions(+), 40 deletions(-) create mode 100644 examples/storage/block/volume_replica/main.tf create mode 100644 examples/storage/block/volume_replica/volume_replica_kms.tf diff --git a/examples/storage/block/volume_replica/main.tf b/examples/storage/block/volume_replica/main.tf new file mode 100644 index 00000000000..7017faa856d --- /dev/null +++ b/examples/storage/block/volume_replica/main.tf @@ -0,0 +1,36 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" { +} + +variable "user_ocid" { +} + +variable "fingerprint" { +} + +variable "private_key_path" { +} + +variable "region" { +} + +variable "compartment_ocid" { +} + + +data "oci_identity_availability_domain" "ad" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +provider "oci" { +# version = "6.9.0" + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region + +} \ No newline at end of file diff --git a/examples/storage/block/volume_replica/volume_replica_kms.tf b/examples/storage/block/volume_replica/volume_replica_kms.tf new file mode 100644 index 00000000000..e91c1c95d98 --- /dev/null +++ b/examples/storage/block/volume_replica/volume_replica_kms.tf @@ -0,0 +1,31 @@ + +resource "oci_core_volume" "test_volume_with_required_parameter" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid +} + +variable "kms_key_ocid_cross_region" { + default = "" +} +resource "oci_core_volume" "test_volume_with_optional_parameter" { + availability_domain = data.oci_identity_availability_domain.ad.name + compartment_id = var.compartment_ocid + display_name = "test_volume" + + // please find allowed other region's availability_domain and hardcode here + block_volume_replicas { + availability_domain = data.oci_identity_availability_domain.ad.name + display_name = "test_replicas" + } + + // if you want delete volume and this volume has replicas, please disable replicas at first, set this "block_volume_replicas_deletion" to true + block_volume_replicas_deletion = true + +} + +output "volume" { + value = { + test_volume_with_required_parameter = oci_core_volume.test_volume_with_required_parameter.id + test_volume_with_optional_parameter = oci_core_volume.test_volume_with_optional_parameter.id + } +} diff --git a/internal/integrationtest/core_block_volume_replica_test.go b/internal/integrationtest/core_block_volume_replica_test.go index 341d5436d44..f16ce2a8056 100644 --- a/internal/integrationtest/core_block_volume_replica_test.go +++ b/internal/integrationtest/core_block_volume_replica_test.go @@ -38,7 +38,7 @@ var ( //hardcode availability_domain here to meet the cross region replicas requirement CoreBlockDependenceVolumeBlockVolumeReplicasRepresentation = map[string]interface{}{ - "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `pjBI:US-ASHBURN-AD-1`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, } diff --git a/internal/integrationtest/core_boot_volume_replica_test.go b/internal/integrationtest/core_boot_volume_replica_test.go index 4fd81f31afb..d6986c438fc 100644 --- a/internal/integrationtest/core_boot_volume_replica_test.go +++ b/internal/integrationtest/core_boot_volume_replica_test.go @@ -39,7 +39,7 @@ var ( "boot_volume_replicas_deletion": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, } CoreCoreBootVolumeDependenceBootVolumeReplicasRepresentation = map[string]interface{}{ - "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `pjBI:US-ASHBURN-AD-1`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, } CoreBootVolumeReplicaResourceConfig = CoreBootVolumeResourceDependencies @@ -56,7 +56,6 @@ func TestCoreBootVolumeReplicaResource_basic(t *testing.T) { compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId) resourceName := "oci_core_boot_volume.test_boot_volume" - acctest.SaveConfigContent("", "", "", t) acctest.ResourceTest(t, nil, []resource.TestStep{ diff --git a/internal/integrationtest/core_boot_volume_test.go b/internal/integrationtest/core_boot_volume_test.go index f3e05ccbef8..47898236b29 100644 --- a/internal/integrationtest/core_boot_volume_test.go +++ b/internal/integrationtest/core_boot_volume_test.go @@ -61,6 +61,10 @@ var ( "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_boot_volume.test_boot_volume.id}`}}, } + IgnoreSystemTagsChangesRep = map[string]interface{}{ + "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`system_tags`, `defined_tags`, `freeform_tags`, `xrc_kms_key_id`}}, + } + CoreBootVolumeRepresentation = map[string]interface{}{ "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, @@ -75,7 +79,8 @@ var ( "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreBootVolumeAutotunePoliciesRepresentation}, "is_auto_tune_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, - "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIgnoreSystemTagsChangesRepresentation}, + "xrc_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: IgnoreSystemTagsChangesRep}, } CoreDeltaRestoreBootVolumeRepresentation = map[string]interface{}{ @@ -111,6 +116,7 @@ var ( CoreBootVolumeBootVolumeReplicasRepresentation = map[string]interface{}{ "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`, Update: `availabilityDomain2`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`}, + "xrr_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, } CoreBootVolumeResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) + @@ -366,6 +372,7 @@ func TestCoreBootVolumeResource_basic(t *testing.T) { ImportStateVerifyIgnore: []string{ "backup_policy_id", "cluster_placement_group_id", + "xrc_kms_key_id", }, ResourceName: resourceName, }, diff --git a/internal/integrationtest/core_volume_backup_policy_assignment_test.go b/internal/integrationtest/core_volume_backup_policy_assignment_test.go index a9a5246067b..6546d495a8d 100644 --- a/internal/integrationtest/core_volume_backup_policy_assignment_test.go +++ b/internal/integrationtest/core_volume_backup_policy_assignment_test.go @@ -18,14 +18,16 @@ import ( "github.com/oracle/terraform-provider-oci/internal/acctest" tf_client "github.com/oracle/terraform-provider-oci/internal/client" "github.com/oracle/terraform-provider-oci/internal/resourcediscovery" + "github.com/oracle/terraform-provider-oci/internal/tfresource" "github.com/oracle/terraform-provider-oci/internal/utils" ) var ( - CoreCoreVolumeBackupPolicyAssignmentRequiredOnlyResource = acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Required, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation) + CoreVolumeBackupPolicyAssignmentRequiredOnlyResource = acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Required, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation) CoreCoreVolumeBackupPolicyAssignmentDataSourceRepresentation = map[string]interface{}{ + "asset_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_volume.test_volume.id}`}, "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreVolumeBackupPolicyAssignmentDataSourceFilterRepresentation}} CoreVolumeBackupPolicyAssignmentDataSourceFilterRepresentation = map[string]interface{}{ @@ -34,13 +36,15 @@ var ( } CoreVolumeBackupPolicyAssignmentRepresentation = map[string]interface{}{ - "asset_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_volume.test_volume.id}`}, - "policy_id": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_core_volume_backup_policies.test_volume_backup_policies.volume_backup_policies.0.id}`}, + "asset_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_volume.test_volume.id}`}, + "policy_id": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_core_volume_backup_policies.test_volume_backup_policies.volume_backup_policies.0.id}`}, + "xrc_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.kms_key_ocid_cross_region}`}, } CoreVolumeBackupPolicyAssignmentResourceDependencies = utils.VolumeBackupPolicyDependency + acctest.GenerateResourceFromRepresentationMap("oci_core_volume", "test_volume", acctest.Required, acctest.Create, CoreVolumeRepresentation) + - AvailabilityDomainConfig + AvailabilityDomainConfig + + KeyResourceDependencyConfig ) // issue-routing-tag: core/blockStorage @@ -59,13 +63,27 @@ func TestCoreVolumeBackupPolicyAssignmentResource_basic(t *testing.T) { var resId string // 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. acctest.SaveConfigContent(config+compartmentIdVariableStr+CoreVolumeBackupPolicyAssignmentResourceDependencies+ - acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Required, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation), "core", "volumeBackupPolicyAssignment", t) + acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Optional, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation), "core", "volumeBackupPolicyAssignment", t) acctest.ResourceTest(t, testAccCheckCoreVolumeBackupPolicyAssignmentDestroy, []resource.TestStep{ // verify Create { Config: config + compartmentIdVariableStr + CoreVolumeBackupPolicyAssignmentResourceDependencies + acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Required, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation), + Check: acctest.ComposeAggregateTestCheckFuncWrapper( + resource.TestCheckResourceAttrSet(resourceName, "asset_id"), + resource.TestCheckResourceAttrSet(resourceName, "policy_id"), + ), + }, + + // delete before next Create + { + Config: config + compartmentIdVariableStr + CoreVolumeBackupPolicyAssignmentResourceDependencies, + }, + // verify Create with optionals + { + Config: config + compartmentIdVariableStr + CoreVolumeBackupPolicyAssignmentResourceDependencies + + acctest.GenerateResourceFromRepresentationMap("oci_core_volume_backup_policy_assignment", "test_volume_backup_policy_assignment", acctest.Optional, acctest.Create, CoreVolumeBackupPolicyAssignmentRepresentation), Check: acctest.ComposeAggregateTestCheckFuncWrapper( resource.TestCheckResourceAttrSet(resourceName, "asset_id"), resource.TestCheckResourceAttrSet(resourceName, "policy_id"), @@ -100,7 +118,7 @@ func TestCoreVolumeBackupPolicyAssignmentResource_basic(t *testing.T) { }, // verify resource import { - Config: config + CoreCoreVolumeBackupPolicyAssignmentRequiredOnlyResource, + Config: config + CoreVolumeBackupPolicyAssignmentRequiredOnlyResource, ImportState: true, ImportStateVerify: true, ImportStateVerifyIgnore: []string{}, diff --git a/internal/integrationtest/core_volume_group_replica_test.go b/internal/integrationtest/core_volume_group_replica_test.go index b4c64090a9d..14d2c2de9c8 100644 --- a/internal/integrationtest/core_volume_group_replica_test.go +++ b/internal/integrationtest/core_volume_group_replica_test.go @@ -26,12 +26,14 @@ var ( "volume_group_replicas": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeGroupVolumeGroupReplicasRepresentation}, "volume_group_replicas_deletion": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, "preserve_volume_replica": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIgnoreSystemTagsChangesRepresentation}, } //hardcode availability_domain here to meet the cross region replicas requirement CoreVolumeGroupVolumeGroupReplicasRepresentation = map[string]interface{}{ - "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `pjBI:US-ASHBURN-AD-1`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, + "xrr_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.kms_key_ocid_cross_region}`}, } ) @@ -70,7 +72,7 @@ func TestCoreVolumeGroupReplicaResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "volume_group_replicas.0.display_name"), func(s *terraform.State) (err error) { - time.Sleep(2 * time.Minute) + time.Sleep(35 * time.Minute) return }, ), @@ -82,11 +84,9 @@ func TestCoreVolumeGroupReplicaResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, "availability_domain"), resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId), resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"), - resource.TestCheckResourceAttr(resourceName, "state", "AVAILABLE"), - resource.TestCheckNoResourceAttr(resourceName, "volume_group_replicas"), - + resource.TestCheckResourceAttr(resourceName, "state", "UPDATE_PENDING"), func(s *terraform.State) (err error) { - time.Sleep(2 * time.Minute) + time.Sleep(10 * time.Minute) return }, ), diff --git a/internal/integrationtest/core_volume_group_test.go b/internal/integrationtest/core_volume_group_test.go index fe3b7836ef9..87fb7a17b8e 100644 --- a/internal/integrationtest/core_volume_group_test.go +++ b/internal/integrationtest/core_volume_group_test.go @@ -34,7 +34,7 @@ var ( volumeGroupDataSourceRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, - "availability_domain": acctest.Representation{RepType: acctest.Optional, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, + "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`}, "state": acctest.Representation{RepType: acctest.Optional, Create: `AVAILABLE`}, "filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: volumeGroupDataSourceFilterRepresentation}} @@ -42,6 +42,9 @@ var ( "name": acctest.Representation{RepType: acctest.Required, Create: `id`}, "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_volume_group.test_volume_group.id}`}}, } + CoreIgnoreTagsChangesRepresentation = map[string]interface{}{ + "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`defined_tags`, `freeform_tags`}}, + } CoreVolumeGroupRepresentation = map[string]interface{}{ "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_identity_availability_domains.test_availability_domains.availability_domains.0.name}`}, @@ -53,11 +56,14 @@ var ( "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`}, "volume_ids": acctest.Representation{RepType: acctest.Optional, Create: nil, Update: []string{`${oci_core_volume.source_volume_list.*.id[0]}`}}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, + "xrc_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, + "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIgnoreTagsChangesRepresentation}, } CoreVolumeGroupSourceDetailsRepresentation = map[string]interface{}{ "type": acctest.Representation{RepType: acctest.Required, Create: `volumeIds`}, "volume_ids": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_volume.source_volume_list.*.id}`}, } + CoreVolumeSourceDetailsJumbledVolumeIdsRepresentation = map[string]interface{}{ "type": acctest.Representation{RepType: acctest.Required, Create: `volumeIds`}, "volume_ids": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_volume.source_volume_list.*.id[1]}`, `${oci_core_volume.source_volume_list.*.id[0]}`}}, @@ -82,6 +88,8 @@ var ( } ` + AvailabilityDomainConfig + + KeyResourceDependencyConfig + + utils.VolumeBackupPolicyDependency + CoreVolumeBackupPolicyRequiredOnlyResource VolumeGroupRequiredOnlyResourceDependencies = AvailabilityDomainConfig + SourceVolumeListDependency @@ -170,6 +178,7 @@ func TestCoreVolumeGroupResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "source_details.#", "1"), resource.TestCheckResourceAttr(resourceName, "source_details.0.type", "volumeIds"), resource.TestCheckResourceAttrSet(resourceName, "time_created"), + resource.TestCheckResourceAttr(resourceName, "volume_ids.#", "2"), func(s *terraform.State) (err error) { @@ -287,6 +296,7 @@ func TestCoreVolumeGroupResource_basic(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{ "backup_policy_id", + "xrc_kms_key_id", "cluster_placement_group_id", }, ResourceName: resourceName, diff --git a/internal/integrationtest/core_volume_test.go b/internal/integrationtest/core_volume_test.go index dc12f66d210..8465efec310 100644 --- a/internal/integrationtest/core_volume_test.go +++ b/internal/integrationtest/core_volume_test.go @@ -50,10 +50,6 @@ var ( "values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_volume.test_volume.id}`}}, } - IgnoreSystemTagsChangesRep = map[string]interface{}{ - "ignore_changes": acctest.Representation{RepType: acctest.Required, Create: []string{`system_tags`, `defined_tags`, `freeform_tags`}}, - } - CoreVolumeRepresentation = map[string]interface{}{ "compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`}, "autotune_policies": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeAutotunePoliciesRepresentation}, @@ -68,6 +64,7 @@ var ( "size_in_gbs": acctest.Representation{RepType: acctest.Optional, Create: `51`, Update: `52`}, "source_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: CoreVolumeSourceDetailsRepresentation}, "vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `10`, Update: `10`}, + "xrc_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_kms_keys.test_keys_dependency.keys[0], "id")}`}, "lifecycle": acctest.RepresentationGroup{RepType: acctest.Required, Group: IgnoreSystemTagsChangesRep}, } @@ -92,6 +89,7 @@ var ( "max_vpus_per_gb": acctest.Representation{RepType: acctest.Optional, Create: `20`, Update: `30`}, } CoreVolumeBlockVolumeReplicasRepresentation = map[string]interface{}{ + "xrr_kms_key_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.kms_key_ocid_cross_region}`}, "availability_domain": acctest.Representation{RepType: acctest.Required, Create: `KvuH:US-ASHBURN-AD-1`}, "display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`}, } @@ -343,6 +341,7 @@ func TestCoreVolumeResource_basic(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{ "volume_backup_id", + "xrc_kms_key_id", "cluster_placement_group_id", }, ResourceName: resourceName, @@ -718,7 +717,7 @@ resource "oci_core_volume" "test_volume2" { } // This test is separated from the basic test due to weird behavior from Terraform test framework. -// An test step that results in an error will result in the state being voided. Isolate such test steps to +// A test step that results in an error will result in the state being voided. Isolate such test steps to // avoid interfering with regular tests that Create/Update resources. // issue-routing-tag: core/blockStorage func TestCoreVolumeResource_validations(t *testing.T) { @@ -742,9 +741,7 @@ func TestCoreVolumeResource_validations(t *testing.T) { // verify baseline Create { Config: config + ` -variable "volume_defined_tags_value" { default = "updatedValue" } variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = 50 } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } @@ -762,12 +759,11 @@ variable "volume_state" { default = "AVAILABLE" } // ensure that changing datatype of size_in_gbs is a no-op { Config: config + ` -variable "volume_defined_tags_value" { default = "updatedValue" } variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = "50" } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } +variable "volume_ignore_changes" { default = ["system_tags", "defined_tags", "freeform_tags"] } ` + compartmentIdVariableStr + CoreVolumeResourceConfig, PlanOnly: true, @@ -776,9 +772,8 @@ variable "volume_state" { default = "AVAILABLE" } // ensure that adding leading zeroes to size_in_gbs is a no-op { Config: config + ` -variable "volume_defined_tags_value" { default = "updatedValue" } + variable "volume_display_name" { default = "displayName2" } -variable "volume_freeform_tags" { default = {"Department"= "Accounting"} } variable "volume_size_in_gbs" { default = "0050" } variable "volume_source_details_type" { default = "volume" } variable "volume_state" { default = "AVAILABLE" } diff --git a/internal/service/core/core_block_volume_replica_data_source.go b/internal/service/core/core_block_volume_replica_data_source.go index 70e3187fc41..282245f9b1f 100644 --- a/internal/service/core/core_block_volume_replica_data_source.go +++ b/internal/service/core/core_block_volume_replica_data_source.go @@ -49,6 +49,10 @@ func CoreBlockVolumeReplicaDataSource() *schema.Resource { Computed: true, Elem: schema.TypeString, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, "size_in_gbs": { Type: schema.TypeString, Computed: true, @@ -139,6 +143,10 @@ func (s *CoreBlockVolumeReplicaDataSourceCrud) SetData() error { s.D.Set("freeform_tags", s.Res.FreeformTags) + if s.Res.KmsKeyId != nil { + s.D.Set("kms_key_id", *s.Res.KmsKeyId) + } + if s.Res.SizeInGBs != nil { s.D.Set("size_in_gbs", strconv.FormatInt(*s.Res.SizeInGBs, 10)) } diff --git a/internal/service/core/core_block_volume_replicas_data_source.go b/internal/service/core/core_block_volume_replicas_data_source.go index 757ba85b6a3..d399a846a6e 100644 --- a/internal/service/core/core_block_volume_replicas_data_source.go +++ b/internal/service/core/core_block_volume_replicas_data_source.go @@ -79,6 +79,10 @@ func CoreBlockVolumeReplicasDataSource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, "size_in_gbs": { Type: schema.TypeString, Computed: true, @@ -211,6 +215,10 @@ func (s *CoreBlockVolumeReplicasDataSourceCrud) SetData() error { blockVolumeReplica["id"] = *r.Id } + if r.KmsKeyId != nil { + blockVolumeReplica["kms_key_id"] = *r.KmsKeyId + } + if r.SizeInGBs != nil { blockVolumeReplica["size_in_gbs"] = strconv.FormatInt(*r.SizeInGBs, 10) } diff --git a/internal/service/core/core_boot_volume_replica_data_source.go b/internal/service/core/core_boot_volume_replica_data_source.go index 0dcecdcd33a..8f8d37b2c79 100644 --- a/internal/service/core/core_boot_volume_replica_data_source.go +++ b/internal/service/core/core_boot_volume_replica_data_source.go @@ -53,6 +53,10 @@ func CoreBootVolumeReplicaDataSource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, "size_in_gbs": { Type: schema.TypeString, Computed: true, @@ -147,6 +151,10 @@ func (s *CoreBootVolumeReplicaDataSourceCrud) SetData() error { s.D.Set("image_id", *s.Res.ImageId) } + if s.Res.KmsKeyId != nil { + s.D.Set("kms_key_id", *s.Res.KmsKeyId) + } + if s.Res.SizeInGBs != nil { s.D.Set("size_in_gbs", strconv.FormatInt(*s.Res.SizeInGBs, 10)) } diff --git a/internal/service/core/core_boot_volume_replicas_data_source.go b/internal/service/core/core_boot_volume_replicas_data_source.go index b26cc3fd6cb..e4860aa093b 100644 --- a/internal/service/core/core_boot_volume_replicas_data_source.go +++ b/internal/service/core/core_boot_volume_replicas_data_source.go @@ -83,6 +83,10 @@ func CoreBootVolumeReplicasDataSource() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, "size_in_gbs": { Type: schema.TypeString, Computed: true, @@ -219,6 +223,10 @@ func (s *CoreBootVolumeReplicasDataSourceCrud) SetData() error { bootVolumeReplica["image_id"] = *r.ImageId } + if r.KmsKeyId != nil { + bootVolumeReplica["kms_key_id"] = *r.KmsKeyId + } + if r.SizeInGBs != nil { bootVolumeReplica["size_in_gbs"] = strconv.FormatInt(*r.SizeInGBs, 10) } diff --git a/internal/service/core/core_boot_volume_resource.go b/internal/service/core/core_boot_volume_resource.go index e9a4565179d..793c862a088 100644 --- a/internal/service/core/core_boot_volume_resource.go +++ b/internal/service/core/core_boot_volume_resource.go @@ -153,12 +153,21 @@ func CoreBootVolumeResource() *schema.Resource { Optional: true, Computed: true, }, + "xrr_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, // Computed "boot_volume_replica_id": { Type: schema.TypeString, Computed: true, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, }, }, }, @@ -213,6 +222,12 @@ func CoreBootVolumeResource() *schema.Resource { ValidateFunc: tfresource.ValidateInt64TypeString, DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, }, + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed "auto_tuned_vpus_per_gb": { @@ -446,6 +461,11 @@ func (s *CoreBootVolumeResourceCrud) Create() error { request.VpusPerGB = &tmpInt64 } + if xrcKmsKeyId, ok := s.D.GetOkExists("xrc_kms_key_id"); ok { + tmp := xrcKmsKeyId.(string) + request.XrcKmsKeyId = &tmp + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "core") response, err := s.Client.CreateBootVolume(context.Background(), request) @@ -774,6 +794,11 @@ func (s *CoreBootVolumeResourceCrud) mapToBootVolumeReplicaDetails(fieldKeyForma result.DisplayName = &tmp } + if xrrKmsKeyId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "xrr_kms_key_id")); ok { + tmp := xrrKmsKeyId.(string) + result.XrrKmsKeyId = &tmp + } + return result, nil } @@ -792,6 +817,10 @@ func BootVolumeReplicaInfoToMap(obj oci_core.BootVolumeReplicaInfo) map[string]i result["display_name"] = string(*obj.DisplayName) } + if obj.KmsKeyId != nil { + result["kms_key_id"] = string(*obj.KmsKeyId) + } + return result } diff --git a/internal/service/core/core_instance_configuration_resource.go b/internal/service/core/core_instance_configuration_resource.go index 468c363ba36..05a80a1ebeb 100644 --- a/internal/service/core/core_instance_configuration_resource.go +++ b/internal/service/core/core_instance_configuration_resource.go @@ -331,6 +331,12 @@ func CoreInstanceConfigurationResource() *schema.Resource { ValidateFunc: tfresource.ValidateInt64TypeString, DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, }, + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed }, @@ -1326,6 +1332,12 @@ func CoreInstanceConfigurationResource() *schema.Resource { ValidateFunc: tfresource.ValidateInt64TypeString, DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, }, + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed }, @@ -3257,6 +3269,11 @@ func (s *CoreInstanceConfigurationResourceCrud) mapToInstanceConfigurationCreate result.VpusPerGB = &tmpInt64 } + if xrcKmsKeyId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "xrc_kms_key_id")); ok { + tmp := xrcKmsKeyId.(string) + result.XrcKmsKeyId = &tmp + } + return result, nil } @@ -3325,6 +3342,10 @@ func InstanceConfigurationCreateVolumeDetailsToMap(obj *oci_core.InstanceConfigu result["vpus_per_gb"] = strconv.FormatInt(*obj.VpusPerGB, 10) } + if obj.XrcKmsKeyId != nil { + result["xrc_kms_key_id"] = string(*obj.XrcKmsKeyId) + } + return result } diff --git a/internal/service/core/core_volume_backup_policy_assignment_resource.go b/internal/service/core/core_volume_backup_policy_assignment_resource.go index 758f72fb651..b882bf1b64b 100644 --- a/internal/service/core/core_volume_backup_policy_assignment_resource.go +++ b/internal/service/core/core_volume_backup_policy_assignment_resource.go @@ -37,6 +37,12 @@ func CoreVolumeBackupPolicyAssignmentResource() *schema.Resource { }, // Optional + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed "time_created": { @@ -96,6 +102,11 @@ func (s *CoreVolumeBackupPolicyAssignmentResourceCrud) Create() error { request.PolicyId = &tmp } + if xrcKmsKeyId, ok := s.D.GetOkExists("xrc_kms_key_id"); ok { + tmp := xrcKmsKeyId.(string) + request.XrcKmsKeyId = &tmp + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "core") response, err := s.Client.CreateVolumeBackupPolicyAssignment(context.Background(), request) @@ -149,5 +160,9 @@ func (s *CoreVolumeBackupPolicyAssignmentResourceCrud) SetData() error { s.D.Set("time_created", s.Res.TimeCreated.String()) } + if s.Res.XrcKmsKeyId != nil { + s.D.Set("xrc_kms_key_id", *s.Res.XrcKmsKeyId) + } + return nil } diff --git a/internal/service/core/core_volume_backup_policy_assignments_data_source.go b/internal/service/core/core_volume_backup_policy_assignments_data_source.go index 99d81047013..a2da19cf747 100644 --- a/internal/service/core/core_volume_backup_policy_assignments_data_source.go +++ b/internal/service/core/core_volume_backup_policy_assignments_data_source.go @@ -105,6 +105,10 @@ func (s *CoreVolumeBackupPolicyAssignmentsDataSourceCrud) SetData() error { volumeBackupPolicyAssignment["time_created"] = r.TimeCreated.String() } + if r.XrcKmsKeyId != nil { + volumeBackupPolicyAssignment["xrc_kms_key_id"] = *r.XrcKmsKeyId + } + resources = append(resources, volumeBackupPolicyAssignment) } diff --git a/internal/service/core/core_volume_group_resource.go b/internal/service/core/core_volume_group_resource.go index 1fe1e34a509..2f1e4370b91 100644 --- a/internal/service/core/core_volume_group_resource.go +++ b/internal/service/core/core_volume_group_resource.go @@ -154,8 +154,11 @@ func CoreVolumeGroupResource() *schema.Resource { Optional: true, Computed: true, }, - - // Computed + "xrr_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, "volume_group_replica_id": { Type: schema.TypeString, Computed: true, @@ -163,6 +166,12 @@ func CoreVolumeGroupResource() *schema.Resource { }, }, }, + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed "is_hydrated": { @@ -342,6 +351,11 @@ func (s *CoreVolumeGroupResourceCrud) Create() error { } } + if xrcKmsKeyId, ok := s.D.GetOkExists("xrc_kms_key_id"); ok { + tmp := xrcKmsKeyId.(string) + request.XrcKmsKeyId = &tmp + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "core") response, err := s.Client.CreateVolumeGroup(context.Background(), request) @@ -545,6 +559,11 @@ func (s *CoreVolumeGroupResourceCrud) mapToVolumeGroupReplicaDetails(fieldKeyFor result.DisplayName = &tmp } + if xrrKmsKeyId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "xrr_kms_key_id")); ok { + tmp := xrrKmsKeyId.(string) + result.XrrKmsKeyId = &tmp + } + return result, nil } diff --git a/internal/service/core/core_volume_resource.go b/internal/service/core/core_volume_resource.go index 025d251ee8a..fddb1cd1b36 100644 --- a/internal/service/core/core_volume_resource.go +++ b/internal/service/core/core_volume_resource.go @@ -99,12 +99,21 @@ func CoreVolumeResource() *schema.Resource { Optional: true, Computed: true, }, + "xrr_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + }, // Computed "block_volume_replica_id": { Type: schema.TypeString, Computed: true, }, + "kms_key_id": { + Type: schema.TypeString, + Computed: true, + }, }, }, }, @@ -229,6 +238,12 @@ func CoreVolumeResource() *schema.Resource { ValidateFunc: tfresource.ValidateInt64TypeString, DiffSuppressFunc: tfresource.Int64StringDiffSuppressFunction, }, + "xrc_kms_key_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, // Computed "auto_tuned_vpus_per_gb": { @@ -473,6 +488,11 @@ func (s *CoreVolumeResourceCrud) Create() error { request.VpusPerGB = &tmpInt64 } + if xrcKmsKeyId, ok := s.D.GetOkExists("xrc_kms_key_id"); ok { + tmp := xrcKmsKeyId.(string) + request.XrcKmsKeyId = &tmp + } + request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "core") response, err := s.Client.CreateVolume(context.Background(), request) @@ -797,6 +817,11 @@ func (s *CoreVolumeResourceCrud) mapToBlockVolumeReplicaDetails(fieldKeyFormat s result.DisplayName = &tmp } + if xrrKmsKeyId, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "xrr_kms_key_id")); ok { + tmp := xrrKmsKeyId.(string) + result.XrrKmsKeyId = &tmp + } + return result, nil } @@ -815,6 +840,10 @@ func BlockVolumeReplicaInfoToMap(obj oci_core.BlockVolumeReplicaInfo) map[string result["display_name"] = string(*obj.DisplayName) } + if obj.KmsKeyId != nil { + result["kms_key_id"] = string(*obj.KmsKeyId) + } + return result } diff --git a/website/docs/d/core_block_volume_replica.html.markdown b/website/docs/d/core_block_volume_replica.html.markdown index ebbdbd01ebd..525a2db88b2 100644 --- a/website/docs/d/core_block_volume_replica.html.markdown +++ b/website/docs/d/core_block_volume_replica.html.markdown @@ -39,6 +39,7 @@ The following attributes are exported: * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` * `id` - The block volume replica's Oracle ID (OCID). +* `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `size_in_gbs` - The size of the source block volume, in GBs. * `state` - The current state of a block volume replica. * `time_created` - The date and time the block volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/d/core_block_volume_replicas.html.markdown b/website/docs/d/core_block_volume_replicas.html.markdown index 141f7d59ee1..554a61c4449 100644 --- a/website/docs/d/core_block_volume_replicas.html.markdown +++ b/website/docs/d/core_block_volume_replicas.html.markdown @@ -56,6 +56,7 @@ The following attributes are exported: * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` * `id` - The block volume replica's Oracle ID (OCID). +* `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `size_in_gbs` - The size of the source block volume, in GBs. * `state` - The current state of a block volume replica. * `time_created` - The date and time the block volume replica was created. Format defined by [RFC3339](https://tools.ietf.org/html/rfc3339). diff --git a/website/docs/d/core_boot_volume.html.markdown b/website/docs/d/core_boot_volume.html.markdown index 111baff141d..788cc15a5c2 100644 --- a/website/docs/d/core_boot_volume.html.markdown +++ b/website/docs/d/core_boot_volume.html.markdown @@ -41,6 +41,7 @@ The following attributes are exported: * `availability_domain` - The availability domain of the boot volume replica. Example: `Uocm:PHX-AD-1` * `boot_volume_replica_id` - The boot volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - The OCID of the compartment that contains the boot volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` diff --git a/website/docs/d/core_boot_volume_replica.html.markdown b/website/docs/d/core_boot_volume_replica.html.markdown index aa55bef4cba..19b46adb2fc 100644 --- a/website/docs/d/core_boot_volume_replica.html.markdown +++ b/website/docs/d/core_boot_volume_replica.html.markdown @@ -39,6 +39,8 @@ The following attributes are exported: * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` * `id` - The boot volume replica's Oracle ID (OCID). +* `image_id` - The image OCID used to create the boot volume the replica is replicated from. +* `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the boot volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `image_id` - The image OCID used to create the boot volume the replica is replicated from. * `size_in_gbs` - The size of the source boot volume, in GBs. * `state` - The current state of a boot volume replica. diff --git a/website/docs/d/core_boot_volume_replicas.html.markdown b/website/docs/d/core_boot_volume_replicas.html.markdown index e11827f452b..3b92ee58414 100644 --- a/website/docs/d/core_boot_volume_replicas.html.markdown +++ b/website/docs/d/core_boot_volume_replicas.html.markdown @@ -56,6 +56,8 @@ The following attributes are exported: * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` * `id` - The boot volume replica's Oracle ID (OCID). +* `image_id` - The image OCID used to create the boot volume the replica is replicated from. +* `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the boot volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `image_id` - The image OCID used to create the boot volume the replica is replicated from. * `size_in_gbs` - The size of the source boot volume, in GBs. * `state` - The current state of a boot volume replica. diff --git a/website/docs/d/core_boot_volumes.html.markdown b/website/docs/d/core_boot_volumes.html.markdown index a735125ea00..e3d604e6da3 100644 --- a/website/docs/d/core_boot_volumes.html.markdown +++ b/website/docs/d/core_boot_volumes.html.markdown @@ -53,6 +53,7 @@ The following attributes are exported: * `availability_domain` - The availability domain of the boot volume replica. Example: `Uocm:PHX-AD-1` * `boot_volume_replica_id` - The boot volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - The OCID of the compartment that contains the boot volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` diff --git a/website/docs/d/core_instance_configuration.html.markdown b/website/docs/d/core_instance_configuration.html.markdown index e98e27a8271..5238a2d7aad 100644 --- a/website/docs/d/core_instance_configuration.html.markdown +++ b/website/docs/d/core_instance_configuration.html.markdown @@ -77,6 +77,7 @@ The following attributes are exported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `instance_type` - The type of instance details. Supported instanceType is compute * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -309,6 +310,7 @@ The following attributes are exported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. diff --git a/website/docs/d/core_instance_configurations.html.markdown b/website/docs/d/core_instance_configurations.html.markdown index cbdca40ad97..721b4f52cb5 100644 --- a/website/docs/d/core_instance_configurations.html.markdown +++ b/website/docs/d/core_instance_configurations.html.markdown @@ -84,6 +84,7 @@ The following attributes are exported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `instance_type` - The type of instance details. Supported instanceType is compute * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -316,6 +317,7 @@ The following attributes are exported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. diff --git a/website/docs/d/core_volume.html.markdown b/website/docs/d/core_volume.html.markdown index 150ba8009ef..390f547798e 100644 --- a/website/docs/d/core_volume.html.markdown +++ b/website/docs/d/core_volume.html.markdown @@ -42,6 +42,7 @@ The following attributes are exported: * `block_volume_replica_id` - The block volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `compartment_id` - The OCID of the compartment that contains the volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. diff --git a/website/docs/d/core_volume_backup_policy_assignments.html.markdown b/website/docs/d/core_volume_backup_policy_assignments.html.markdown index d4124a43a08..e7c08eeb272 100644 --- a/website/docs/d/core_volume_backup_policy_assignments.html.markdown +++ b/website/docs/d/core_volume_backup_policy_assignments.html.markdown @@ -45,4 +45,5 @@ The following attributes are exported: * `id` - The OCID of the volume backup policy assignment. * `policy_id` - The OCID of the volume backup policy that has been assigned to the volume. * `time_created` - The date and time the volume backup policy was assigned to the volume. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339). +* `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block / boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). diff --git a/website/docs/d/core_volume_groups.html.markdown b/website/docs/d/core_volume_groups.html.markdown index 90a0ac7b83f..931d6bd0e4e 100644 --- a/website/docs/d/core_volume_groups.html.markdown +++ b/website/docs/d/core_volume_groups.html.markdown @@ -67,6 +67,7 @@ The following attributes are exported: * `volume_group_replicas` - The list of volume group replicas of this volume group. * `availability_domain` - The availability domain of the boot volume replica replica. Example: `Uocm:PHX-AD-1` * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_group_replica_id` - The volume group replica's Oracle ID (OCID). * `volume_ids` - OCIDs for the volumes in this volume group. diff --git a/website/docs/d/core_volumes.html.markdown b/website/docs/d/core_volumes.html.markdown index 7aaabf1244e..46744c44e61 100644 --- a/website/docs/d/core_volumes.html.markdown +++ b/website/docs/d/core_volumes.html.markdown @@ -60,6 +60,7 @@ The following attributes are exported: * `block_volume_replica_id` - The block volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `compartment_id` - The OCID of the compartment that contains the volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. diff --git a/website/docs/r/core_boot_volume.html.markdown b/website/docs/r/core_boot_volume.html.markdown index 63076a006ab..05739471884 100644 --- a/website/docs/r/core_boot_volume.html.markdown +++ b/website/docs/r/core_boot_volume.html.markdown @@ -49,6 +49,7 @@ resource "oci_core_boot_volume" "test_boot_volume" { #Optional display_name = var.boot_volume_boot_volume_replicas_display_name + xrr_kms_key_id = oci_kms_key.test_key.id } cluster_placement_group_id = oci_identity_group.test_group.id defined_tags = {"Operations.CostCenter"= "42"} @@ -58,7 +59,9 @@ resource "oci_core_boot_volume" "test_boot_volume" { kms_key_id = oci_kms_key.test_key.id size_in_gbs = var.boot_volume_size_in_gbs vpus_per_gb = var.boot_volume_vpus_per_gb - boot_volume_replicas_deletion = true + xrc_kms_key_id = oci_kms_key.test_key.id + boot_volume_replicas_deletion = true + } ``` @@ -74,6 +77,7 @@ The following arguments are supported: * `boot_volume_replicas` - (Optional) (Updatable) The list of boot volume replicas to be enabled for this boot volume in the specified destination availability domains. * `availability_domain` - (Required) (Updatable) The availability domain of the boot volume replica. Example: `Uocm:PHX-AD-1` * `display_name` - (Optional) (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `xrr_kms_key_id` - (Optional) (Updatable) The OCID of the Vault service key which is the master encryption key for the cross region boot volume replicas, which will be used in the destination region to encrypt the boot volume replica's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `cluster_placement_group_id` - (Optional) The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - (Required) (Updatable) The OCID of the compartment that contains the boot volume. * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` @@ -96,6 +100,7 @@ The following arguments are supported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. +* `xrc_kms_key_id` - (Optional) The OCID of the Vault service key which is the master encryption key for the boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). ** IMPORTANT ** @@ -114,6 +119,7 @@ The following attributes are exported: * `availability_domain` - The availability domain of the boot volume replica. Example: `Uocm:PHX-AD-1` * `boot_volume_replica_id` - The boot volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - The OCID of the compartment that contains the boot volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` diff --git a/website/docs/r/core_instance_configuration.html.markdown b/website/docs/r/core_instance_configuration.html.markdown index f2bf8ab0c58..d327f32433d 100644 --- a/website/docs/r/core_instance_configuration.html.markdown +++ b/website/docs/r/core_instance_configuration.html.markdown @@ -80,6 +80,7 @@ resource "oci_core_instance_configuration" "test_instance_configuration" { id = var.instance_configuration_instance_details_block_volumes_create_details_source_details_id } vpus_per_gb = var.instance_configuration_instance_details_block_volumes_create_details_vpus_per_gb + xrc_kms_key_id = oci_kms_key.test_key.id } volume_id = oci_core_volume.test_volume.id } @@ -261,6 +262,7 @@ resource "oci_core_instance_configuration" "test_instance_configuration" { id = var.instance_configuration_instance_details_options_block_volumes_create_details_source_details_id } vpus_per_gb = var.instance_configuration_instance_details_options_block_volumes_create_details_vpus_per_gb + xrc_kms_key_id = oci_kms_key.test_key.id } volume_id = oci_core_volume.test_volume.id } @@ -477,7 +479,6 @@ The following arguments are supported: * `block_volume_replicas` - (Applicable when instance_type=compute) The list of block volume replicas to be enabled for this volume in the specified destination availability domains. * `availability_domain` - (Required when instance_type=compute) The availability domain of the block volume replica. Example: `Uocm:PHX-AD-1` * `display_name` - (Applicable when instance_type=compute) The display name of the block volume replica. You may optionally specify a *display name* for the block volume replica, otherwise a default is provided. - * `cluster_placement_group_id` - (Applicable when instance_type=compute) The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - (Applicable when instance_type=compute) The OCID of the compartment that contains the volume. * `defined_tags` - (Applicable when instance_type=compute) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `display_name` - (Applicable when instance_type=compute) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. @@ -497,6 +498,7 @@ The following arguments are supported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - (Applicable when instance_type=compute) The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - (Applicable when instance_type=compute) The OCID of the volume. * `instance_type` - (Required) The type of instance details. Supported instanceType is compute * `launch_details` - (Applicable when instance_type=compute) Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -732,8 +734,8 @@ The following arguments are supported: * `10`: Represents Balanced option. * `20`: Represents Higher Performance option. * `30`-`120`: Represents the Ultra High Performance option. - - For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - (Applicable when instance_type=instance_options) The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - (Applicable when instance_type=instance_options) The OCID of the volume. * `launch_details` - (Applicable when instance_type=instance_options) Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -1008,7 +1010,6 @@ The following attributes are exported: * `block_volume_replicas` - The list of block volume replicas to be enabled for this volume in the specified destination availability domains. * `availability_domain` - The availability domain of the block volume replica. Example: `Uocm:PHX-AD-1` * `display_name` - The display name of the block volume replica. You may optionally specify a *display name* for the block volume replica, otherwise a default is provided. - * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - The OCID of the compartment that contains the volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. @@ -1028,7 +1029,7 @@ The following attributes are exported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. - + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `instance_type` - The type of instance details. Supported instanceType is compute * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -1256,8 +1257,8 @@ The following attributes are exported: * `10`: Represents Balanced option. * `20`: Represents Higher Performance option. * `30`-`120`: Represents the Ultra High Performance option. - - For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. + * `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_id` - The OCID of the volume. * `launch_details` - Instance launch details for creating an instance from an instance configuration. Use the `sourceDetails` parameter to specify whether a boot volume or an image should be used to launch a new instance. @@ -1499,4 +1500,4 @@ InstanceConfigurations can be imported using the `id`, e.g. ``` $ terraform import oci_core_instance_configuration.test_instance_configuration "id" -``` \ No newline at end of file +``` diff --git a/website/docs/r/core_volume.html.markdown b/website/docs/r/core_volume.html.markdown index bb76fa63947..0d599b543ef 100644 --- a/website/docs/r/core_volume.html.markdown +++ b/website/docs/r/core_volume.html.markdown @@ -49,6 +49,7 @@ resource "oci_core_volume" "test_volume" { #Optional display_name = var.volume_block_volume_replicas_display_name + xrr_kms_key_id = oci_kms_key.test_key.id } cluster_placement_group_id = oci_identity_group.test_group.id defined_tags = {"Operations.CostCenter"= "42"} @@ -69,7 +70,9 @@ resource "oci_core_volume" "test_volume" { second_backup_id = oci_database_backup.test_backup.id } vpus_per_gb = var.volume_vpus_per_gb - block_volume_replicas_deletion = true + xrc_kms_key_id = oci_kms_key.test_key.id + block_volume_replicas_deletion = true + } ``` @@ -86,6 +89,7 @@ The following arguments are supported: * `availability_domain` - (Required) (Updatable) The availability domain of the block volume replica. Example: `Uocm:PHX-AD-1` * `display_name` - (Optional) (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. * `cluster_placement_group_id` - (Optional) The clusterPlacementGroup Id of the volume for volume placement. + * `xrr_kms_key_id` - (Optional) (Updatable) The OCID of the Vault service key which is the master encryption key for the cross region block volume replicas, which will be used in the destination region to encrypt the block volume replica's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `compartment_id` - (Required) (Updatable) The OCID of the compartment that contains the volume. * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `display_name` - (Optional) (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. @@ -110,6 +114,7 @@ The following arguments are supported: * `30`-`120`: Represents the Ultra High Performance option. For performance autotune enabled volumes, it would be the Default(Minimum) VPUs/GB. +* `xrc_kms_key_id` - (Optional) The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). ** IMPORTANT ** @@ -128,6 +133,7 @@ The following attributes are exported: * `availability_domain` - The availability domain of the block volume replica. Example: `Uocm:PHX-AD-1` * `block_volume_replica_id` - The block volume replica's Oracle ID (OCID). * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `cluster_placement_group_id` - The clusterPlacementGroup Id of the volume for volume placement. * `compartment_id` - The OCID of the compartment that contains the volume. * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` diff --git a/website/docs/r/core_volume_backup_policy_assignment.html.markdown b/website/docs/r/core_volume_backup_policy_assignment.html.markdown index 2933bc2df66..8c0556fc0e0 100644 --- a/website/docs/r/core_volume_backup_policy_assignment.html.markdown +++ b/website/docs/r/core_volume_backup_policy_assignment.html.markdown @@ -22,6 +22,9 @@ resource "oci_core_volume_backup_policy_assignment" "test_volume_backup_policy_a #Required asset_id = oci_core_volume.test_volume.id policy_id = oci_core_volume_backup_policy.test_volume_backup_policy.id + + #Optional + xrc_kms_key_id = oci_kms_key.test_key.id } ``` @@ -31,6 +34,7 @@ The following arguments are supported: * `asset_id` - (Required) The OCID of the volume or volume group to assign the policy to. * `policy_id` - (Required) The OCID of the volume backup policy to assign to the volume. +* `xrc_kms_key_id` - (Optional) The OCID of the Vault service key which is the master encryption key for the block / boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). ** IMPORTANT ** @@ -44,6 +48,7 @@ The following attributes are exported: * `id` - The OCID of the volume backup policy assignment. * `policy_id` - The OCID of the volume backup policy that has been assigned to the volume or volume group. For a volume group, only the **user defined** policy is allowed to use. For more information, see [Policy-Based Backups](https://docs.oracle.com/en-us/iaas/Content/Block/Tasks/schedulingvolumebackups.htm). * `time_created` - The date and time the volume backup policy was assigned to the volume. The format is defined by [RFC3339](https://tools.ietf.org/html/rfc3339). +* `xrc_kms_key_id` - The OCID of the Vault service key which is the master encryption key for the block / boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). ## Timeouts diff --git a/website/docs/r/core_volume_group.html.markdown b/website/docs/r/core_volume_group.html.markdown index ba71091e3fd..6c13d9ba4c6 100644 --- a/website/docs/r/core_volume_group.html.markdown +++ b/website/docs/r/core_volume_group.html.markdown @@ -45,8 +45,10 @@ resource "oci_core_volume_group" "test_volume_group" { #Optional display_name = var.volume_group_volume_group_replicas_display_name + xrr_kms_key_id = oci_kms_key.test_key.id } volume_ids = [var.volume_group_source_id] + xrc_kms_key_id = oci_kms_key.test_key.id } ``` @@ -70,6 +72,9 @@ The following arguments are supported: * `volume_group_replicas` - (Optional) (Updatable) The list of volume group replicas that this volume group will be enabled to have in the specified destination availability domains. * `availability_domain` - (Required) (Updatable) The availability domain of the volume group replica. Example: `Uocm:PHX-AD-1` * `display_name` - (Optional) (Updatable) A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `xrr_kms_key_id` - (Optional) (Updatable) The OCID of the Vault service key which is the master encryption key for the cross region volume group's replicas, which will be used in the destination region to encrypt the volume group's replicas encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). +* `xrc_kms_key_id` - (Optional) The OCID of the Vault service key which is the master encryption key for the volume's cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. For more information about the Vault service and encryption keys, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + * `volume_ids` - (Optional) (Updatable) Use this for update operation only. This field is not supported during creation. For create use `volume_ids` under `source_details`. ** IMPORTANT ** @@ -99,6 +104,7 @@ The following attributes are exported: * `volume_group_replicas` - The list of volume group replicas of this volume group. * `availability_domain` - The availability domain of the boot volume replica replica. Example: `Uocm:PHX-AD-1` * `display_name` - A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information. + * `kms_key_id` - The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see [Overview of Vault service](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and [Using Keys](https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). * `volume_group_replica_id` - The volume group replica's Oracle ID (OCID). * `volume_ids` - OCIDs for the current volumes in this volume group. From 4b75d6698c3da33b5eac167eb1075d62ae6f62f1 Mon Sep 17 00:00:00 2001 From: Mark Mudimba Date: Fri, 19 Jul 2024 10:39:54 +0000 Subject: [PATCH 24/31] Added - Support for OIDC Discovery in OKE --- .../container_engine/oidc_discovery/main.tf | 229 ++++++++++++++++++ .../containerengine_cluster_test.go | 31 ++- .../containerengine_cluster_resource.go | 76 ++++++ .../d/containerengine_clusters.html.markdown | 3 + .../r/containerengine_cluster.html.markdown | 10 + 5 files changed, 339 insertions(+), 10 deletions(-) create mode 100644 examples/container_engine/oidc_discovery/main.tf diff --git a/examples/container_engine/oidc_discovery/main.tf b/examples/container_engine/oidc_discovery/main.tf new file mode 100644 index 00000000000..bd095456012 --- /dev/null +++ b/examples/container_engine/oidc_discovery/main.tf @@ -0,0 +1,229 @@ +// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. +// Licensed under the Mozilla Public License v2.0 + +variable "tenancy_ocid" { +} + +variable "user_ocid" { +} + +variable "compartment_ocid" { +} + +variable "region" { + default = "us-ashburn-1" +} + +variable "kms_vault_id" { +} + +variable "compartment_id" { +} + +variable "cluster_cluster_pod_network_options_cni_type" { + default = "OCI_VCN_IP_NATIVE" +} + +variable "cluster_defined_tags_value" { + default = "value" +} + +variable "cluster_endpoint_config_is_public_ip_enabled" { + default = false +} + +variable "cluster_endpoint_config_nsg_ids" { + default = [] +} + +variable "cluster_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_image_policy_config_is_policy_enabled" { + default = false +} + +variable "cluster_kubernetes_version" { + default = "v1.30.1" +} + +variable "cluster_name" { + default = "oidc-discovery-example" +} + +variable "cluster_options_add_ons_is_kubernetes_dashboard_enabled" { + default = false +} + +variable "cluster_options_add_ons_is_tiller_enabled" { + default = false +} + +variable "cluster_options_admission_controller_options_is_pod_security_policy_enabled" { + default = false +} + +variable "cluster_options_open_id_connect_discovery_is_open_id_connect_discovery_enabled" { + default = false +} + +variable "cluster_options_kubernetes_network_config_pods_cidr" { + default = "10.1.0.0/16" +} + +variable "cluster_options_kubernetes_network_config_services_cidr" { + default = "10.2.0.0/16" +} + +variable "cluster_options_persistent_volume_config_defined_tags_value" { + default = "value" +} + +variable "cluster_options_persistent_volume_config_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_options_service_lb_config_defined_tags_value" { + default = "value" +} + +variable "cluster_options_service_lb_config_freeform_tags" { + default = { "Department" = "Finance" } +} + +variable "cluster_options_service_lb_subnet_ids" { + default = [] +} + +variable "cluster_state" { + default = [] +} + +// enhanced cluster is required for OIDC Discovery to be enabled +variable "cluster_type" { + default = "ENHANCED_CLUSTER" +} + + + +provider "oci" { + region = var.region + auth = "SecurityToken" + config_file_profile = "terraform-federation-test" +} + +variable defined_tag_namespace_name { + default = "test" +} + +resource "oci_core_vcn" "test_vcn" { + cidr_block = "10.0.0.0/16" + compartment_id = var.compartment_ocid + display_name = "tfVcnForClusters" +} + +resource "oci_core_internet_gateway" "test_ig" { + compartment_id = var.compartment_ocid + display_name = "tfClusterInternetGateway" + vcn_id = oci_core_vcn.test_vcn.id +} + +resource "oci_identity_tag_namespace" "tag-namespace1" { + #Required + compartment_id = var.tenancy_ocid + description = "example tag namespace" + name = var.defined_tag_namespace_name != "" ? var.defined_tag_namespace_name : "example-tag-namespace-all" + + is_retired = false +} + +resource "oci_core_route_table" "test_route_table" { + compartment_id = var.compartment_ocid + vcn_id = oci_core_vcn.test_vcn.id + display_name = "tfClustersRouteTable" + + route_rules { + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + network_entity_id = oci_core_internet_gateway.test_ig.id + } +} + +data "oci_identity_availability_domains" "test_availability_domains" { + compartment_id = var.tenancy_ocid +} + +data "oci_identity_availability_domain" "ad1" { + compartment_id = var.tenancy_ocid + ad_number = 1 +} + +data "oci_identity_availability_domain" "ad2" { + compartment_id = var.tenancy_ocid + ad_number = 2 +} + +resource "oci_core_subnet" "clusterSubnet_2" { + #Required + availability_domain = data.oci_identity_availability_domain.ad2.name + cidr_block = "10.0.21.0/24" + compartment_id = var.compartment_ocid + vcn_id = oci_core_vcn.test_vcn.id + display_name = "tfSubNet1ForClusters" + + + # Provider code tries to maintain compatibility with old versions. + security_list_ids = [oci_core_vcn.test_vcn.default_security_list_id] + route_table_id = oci_core_route_table.test_route_table.id +} + +resource "oci_containerengine_cluster" "test_cluster" { + #Required + compartment_id = var.compartment_ocid + kubernetes_version = var.cluster_kubernetes_version + name = "tfTestCluster" + vcn_id = oci_core_vcn.test_vcn.id + type = var.cluster_type + + #Optional + # defined_tags = map(oci_identity_tag_namespace.tag-namespace1.name.oci_identity_tag.tag1.name, var.cluster_defined_tags_value) + + freeform_tags = var.cluster_freeform_tags + + options { + + #Optional + add_ons { + + #Optional + is_kubernetes_dashboard_enabled = var.cluster_options_add_ons_is_kubernetes_dashboard_enabled + is_tiller_enabled = var.cluster_options_add_ons_is_tiller_enabled + } + admission_controller_options { + + #Optional + is_pod_security_policy_enabled = var.cluster_options_admission_controller_options_is_pod_security_policy_enabled + } + kubernetes_network_config { + + #Optional + pods_cidr = var.cluster_options_kubernetes_network_config_pods_cidr + services_cidr = var.cluster_options_kubernetes_network_config_services_cidr + } + + open_id_connect_discovery { + #Optional + is_open_id_connect_discovery_enabled = var.cluster_options_open_id_connect_discovery_is_open_id_connect_discovery_enabled + } + } +} + +data "oci_containerengine_clusters" "test_clusters" { + #Required + compartment_id = var.compartment_id + + #Optional + name = var.cluster_name + state = var.cluster_state +} \ No newline at end of file diff --git a/internal/integrationtest/containerengine_cluster_test.go b/internal/integrationtest/containerengine_cluster_test.go index b31d87f3bce..2b4d4f6f0b4 100644 --- a/internal/integrationtest/containerengine_cluster_test.go +++ b/internal/integrationtest/containerengine_cluster_test.go @@ -63,7 +63,7 @@ var ( "kubernetes_version": acctest.Representation{RepType: acctest.Required, Create: `${data.oci_containerengine_cluster_option.test_cluster_option.kubernetes_versions[length(data.oci_containerengine_cluster_option.test_cluster_option.kubernetes_versions)-2]}`, Update: `${data.oci_containerengine_cluster_option.test_cluster_option.kubernetes_versions[length(data.oci_containerengine_cluster_option.test_cluster_option.kubernetes_versions)-1]}`}, "name": acctest.Representation{RepType: acctest.Required, Create: `name`, Update: `name2`}, "vcn_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_vcn.test_vcn.id}`}, - "cluster_pod_network_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: clusterClusterPodNetworkOptionsRepresentation}, + "cluster_pod_network_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterClusterPodNetworkOptionsRepresentation}, "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")}`}, "endpoint_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterEndpointConfigRepresentation}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, @@ -72,7 +72,7 @@ var ( "type": acctest.Representation{RepType: acctest.Optional, Create: `ENHANCED_CLUSTER`, Update: `ENHANCED_CLUSTER`}, "options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsRepresentation}, } - clusterClusterPodNetworkOptionsRepresentation = map[string]interface{}{ + ContainerengineClusterClusterPodNetworkOptionsRepresentation = map[string]interface{}{ "cni_type": acctest.Representation{RepType: acctest.Required, Create: `OCI_VCN_IP_NATIVE`}, } ContainerengineClusterEndpointConfigRepresentation = map[string]interface{}{ @@ -84,9 +84,11 @@ var ( "key_details": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterImagePolicyConfigKeyDetailsRepresentation}, } ContainerengineClusterOptionsRepresentation = map[string]interface{}{ - "add_ons": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsAddOnsRepresentation}, - "kubernetes_network_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsKubernetesNetworkConfigRepresentation}, + "add_ons": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsAddOnsRepresentation}, + "admission_controller_options": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsAdmissionControllerOptionsRepresentation}, + "kubernetes_network_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsKubernetesNetworkConfigRepresentation}, "open_id_connect_token_authentication_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsOpenIdConnectTokenAuthenticationConfigRepresentation}, + "open_id_connect_discovery": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsOpenIdConnectDiscoveryRepresentation}, "persistent_volume_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsPersistentVolumeConfigRepresentation}, "service_lb_config": acctest.RepresentationGroup{RepType: acctest.Optional, Group: ContainerengineClusterOptionsServiceLbConfigRepresentation}, "service_lb_subnet_ids": acctest.Representation{RepType: acctest.Optional, Create: []string{`${oci_core_subnet.clusterSubnet_1.id}`, `${oci_core_subnet.clusterSubnet_2.id}`}}, @@ -98,6 +100,9 @@ var ( "is_kubernetes_dashboard_enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}, "is_tiller_enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`}, } + ContainerengineClusterOptionsAdmissionControllerOptionsRepresentation = map[string]interface{}{ + "is_pod_security_policy_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `false`}, + } ContainerengineClusterOptionsKubernetesNetworkConfigRepresentation = map[string]interface{}{ "pods_cidr": acctest.Representation{RepType: acctest.Optional, Create: `10.1.0.0/16`}, "services_cidr": acctest.Representation{RepType: acctest.Optional, Create: `10.2.0.0/16`}, @@ -114,6 +119,9 @@ var ( "username_claim": acctest.Representation{RepType: acctest.Optional, Create: `sub`}, "username_prefix": acctest.Representation{RepType: acctest.Optional, Create: `oidc:`}, } + ContainerengineClusterOptionsOpenIdConnectDiscoveryRepresentation = map[string]interface{}{ + "is_open_id_connect_discovery_enabled": acctest.Representation{RepType: acctest.Optional, Create: `false`, Update: `true`}, + } ContainerengineClusterOptionsPersistentVolumeConfigRepresentation = map[string]interface{}{ "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")}`}, "freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}}, @@ -201,8 +209,6 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.0.is_kubernetes_dashboard_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.0.is_tiller_enabled", "true"), - resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.#", "1"), - resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), @@ -219,6 +225,9 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.signing_algorithms.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.username_claim", "RS256"), resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.0.username_prefix", "oidc:"), + resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_discovery.#", "1"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_discovery.0.is_open_id_connect_discovery_enabled", "false"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_config.#", "1"), @@ -263,12 +272,13 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.0.is_kubernetes_dashboard_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "options.0.add_ons.0.is_tiller_enabled", "true"), - resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.#", "1"), - resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(resourceName, "options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_token_authentication_config.#", "0"), + resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_discovery.#", "1"), + resource.TestCheckResourceAttr(resourceName, "options.0.open_id_connect_discovery.0.is_open_id_connect_discovery_enabled", "true"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "options.0.service_lb_config.#", "1"), @@ -317,8 +327,6 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.add_ons.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.add_ons.0.is_kubernetes_dashboard_enabled", "true"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.add_ons.0.is_tiller_enabled", "true"), - resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.admission_controller_options.#", "1"), - resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.0.pods_cidr", "10.1.0.0/16"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.kubernetes_network_config.0.services_cidr", "10.2.0.0/16"), @@ -335,6 +343,9 @@ func TestContainerengineClusterResource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.signing_algorithms.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.username_claim", "usernameClaim2"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_token_authentication_config.0.username_prefix", "usernamePrefix2"), + resource.TestCheckResourceAttr(resourceName, "options.0.admission_controller_options.0.is_pod_security_policy_enabled", "false"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_discovery.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.open_id_connect_discovery.0.is_open_id_connect_discovery_enabled", "true"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.persistent_volume_config.#", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.persistent_volume_config.0.freeform_tags.%", "1"), resource.TestCheckResourceAttr(datasourceName, "clusters.0.options.0.service_lb_config.#", "1"), diff --git a/internal/service/containerengine/containerengine_cluster_resource.go b/internal/service/containerengine/containerengine_cluster_resource.go index 8ee9181dd3a..ee748ebbd79 100644 --- a/internal/service/containerengine/containerengine_cluster_resource.go +++ b/internal/service/containerengine/containerengine_cluster_resource.go @@ -346,6 +346,27 @@ func ContainerengineClusterResource() *schema.Resource { }, }, }, + "open_id_connect_discovery": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + MinItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + // Required + + // Optional + "is_open_id_connect_discovery_enabled": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + + // Computed + }, + }, + }, "persistent_volume_config": { Type: schema.TypeList, Optional: true, @@ -518,6 +539,10 @@ func ContainerengineClusterResource() *schema.Resource { }, }, }, + "open_id_connect_discovery_endpoint": { + Type: schema.TypeString, + Computed: true, + }, "state": { Type: schema.TypeString, Computed: true, @@ -1132,6 +1157,10 @@ func (s *ContainerengineClusterResourceCrud) SetData() error { s.D.Set("name", *s.Res.Name) } + if s.Res.OpenIdConnectDiscoveryEndpoint != nil { + s.D.Set("open_id_connect_discovery_endpoint", *s.Res.OpenIdConnectDiscoveryEndpoint) + } + if s.Res.Options != nil { s.D.Set("options", []interface{}{ClusterCreateOptionsToMap(s.Res.Options)}) } else { @@ -1247,6 +1276,17 @@ func (s *ContainerengineClusterResourceCrud) mapToClusterCreateOptions(fieldKeyF } } + if openIdConnectDiscovery, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "open_id_connect_discovery")); ok { + if tmpList := openIdConnectDiscovery.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "open_id_connect_discovery"), 0) + tmp, err := s.mapToOpenIdConnectDiscovery(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert open_id_connect_discovery, encountered error: %v", err) + } + result.OpenIdConnectDiscovery = &tmp + } + } + if persistentVolumeConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "persistent_volume_config")); ok { if tmpList := persistentVolumeConfig.([]interface{}); len(tmpList) > 0 { fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "persistent_volume_config"), 0) @@ -1310,6 +1350,17 @@ func (s *ContainerengineClusterResourceCrud) mapToUpdateClusterOptionsDetails(fi } } + if openIdConnectDiscovery, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "open_id_connect_discovery")); ok { + if tmpList := openIdConnectDiscovery.([]interface{}); len(tmpList) > 0 { + fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "open_id_connect_discovery"), 0) + tmp, err := s.mapToOpenIdConnectDiscovery(fieldKeyFormatNextLevel) + if err != nil { + return result, fmt.Errorf("unable to convert open_id_connect_discovery, encountered error: %v", err) + } + result.OpenIdConnectDiscovery = &tmp + } + } + if persistentVolumeConfig, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "persistent_volume_config")); ok { if tmpList := persistentVolumeConfig.([]interface{}); len(tmpList) > 0 { fieldKeyFormatNextLevel := fmt.Sprintf("%s.%d.%%s", fmt.Sprintf(fieldKeyFormat, "persistent_volume_config"), 0) @@ -1354,6 +1405,10 @@ func ClusterCreateOptionsToMap(obj *oci_containerengine.ClusterCreateOptions) ma result["open_id_connect_token_authentication_config"] = []interface{}{OpenIdConnectTokenAuthenticationConfigToMap(obj.OpenIdConnectTokenAuthenticationConfig)} } + if obj.OpenIdConnectDiscovery != nil { + result["open_id_connect_discovery"] = []interface{}{OpenIdConnectDiscoveryToMap(obj.OpenIdConnectDiscovery)} + } + if obj.PersistentVolumeConfig != nil { result["persistent_volume_config"] = []interface{}{PersistentVolumeConfigDetailsToMap(obj.PersistentVolumeConfig)} } @@ -1860,6 +1915,27 @@ func OpenIdConnectTokenAuthenticationConfigToMap(obj *oci_containerengine.OpenId return result } +func (s *ContainerengineClusterResourceCrud) mapToOpenIdConnectDiscovery(fieldKeyFormat string) (oci_containerengine.OpenIdConnectDiscovery, error) { + result := oci_containerengine.OpenIdConnectDiscovery{} + + if isOpenIdConnectDiscoveryEnabled, ok := s.D.GetOkExists(fmt.Sprintf(fieldKeyFormat, "is_open_id_connect_discovery_enabled")); ok { + tmp := isOpenIdConnectDiscoveryEnabled.(bool) + result.IsOpenIdConnectDiscoveryEnabled = &tmp + } + + return result, nil +} + +func OpenIdConnectDiscoveryToMap(obj *oci_containerengine.OpenIdConnectDiscovery) map[string]interface{} { + result := map[string]interface{}{} + + if obj.IsOpenIdConnectDiscoveryEnabled != nil { + result["is_open_id_connect_discovery_enabled"] = bool(*obj.IsOpenIdConnectDiscoveryEnabled) + } + + return result +} + func (s *ContainerengineClusterResourceCrud) mapToPersistentVolumeConfigDetails(fieldKeyFormat string) (oci_containerengine.PersistentVolumeConfigDetails, error) { result := oci_containerengine.PersistentVolumeConfigDetails{} diff --git a/website/docs/d/containerengine_clusters.html.markdown b/website/docs/d/containerengine_clusters.html.markdown index e1fc8161ff9..259d33dc2cd 100644 --- a/website/docs/d/containerengine_clusters.html.markdown +++ b/website/docs/d/containerengine_clusters.html.markdown @@ -79,6 +79,7 @@ The following attributes are exported: * `updated_by_user_id` - The user who updated the cluster. * `updated_by_work_request_id` - The OCID of the work request which updated the cluster. * `name` - The name of the cluster. +* `open_id_connect_discovery_endpoint` - The cluster-specific OpenID Connect Discovery endpoint * `options` - Optional attributes for the cluster. * `add_ons` - Configurable cluster add-ons * `is_kubernetes_dashboard_enabled` - Whether or not to enable the Kubernetes Dashboard add-on. @@ -101,6 +102,8 @@ The following attributes are exported: * `signing_algorithms` - The signing algorithms accepted. Default is ["RS256"]. * `username_claim` - JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. * `username_prefix` - Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. + * `open_id_connect_discovery` - The property that define the status of the OIDC Discovery feature for a cluster. + * `is_open_id_connect_discovery_enabled` - Whether the cluster has OIDC Discovery enabled. Defaults to false. If set to true, the cluster will be assigned a public OIDC Discovery endpoint. * `persistent_volume_config` - Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` diff --git a/website/docs/r/containerengine_cluster.html.markdown b/website/docs/r/containerengine_cluster.html.markdown index 5b439f6bd82..a8d023ac7f9 100644 --- a/website/docs/r/containerengine_cluster.html.markdown +++ b/website/docs/r/containerengine_cluster.html.markdown @@ -86,6 +86,11 @@ resource "oci_containerengine_cluster" "test_cluster" { signing_algorithms = var.cluster_options_open_id_connect_token_authentication_config_signing_algorithms username_claim = var.cluster_options_open_id_connect_token_authentication_config_username_claim username_prefix = var.cluster_options_open_id_connect_token_authentication_config_username_prefix + } + open_id_connect_discovery { + + #Optional + is_open_id_connect_discovery_enabled = var.cluster_options_open_id_connect_discovery_is_open_id_connect_discovery_enabled } persistent_volume_config { @@ -147,6 +152,8 @@ The following arguments are supported: * `signing_algorithms` - (Optional) (Updatable) The signing algorithms accepted. Default is ["RS256"]. * `username_claim` - (Optional) (Updatable) JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. * `username_prefix` - (Optional) (Updatable) Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. + * `open_id_connect_discovery` - (Optional) (Updatable) The property that define the status of the OIDC Discovery feature for a cluster. + * `is_open_id_connect_discovery_enabled` - (Optional) (Updatable) Whether the cluster has OIDC Discovery enabled. Defaults to false. If set to true, the cluster will be assigned a public OIDC Discovery endpoint. * `persistent_volume_config` - (Optional) (Updatable) Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - (Optional) (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - (Optional) (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` @@ -200,6 +207,7 @@ The following attributes are exported: * `updated_by_user_id` - The user who updated the cluster. * `updated_by_work_request_id` - The OCID of the work request which updated the cluster. * `name` - The name of the cluster. +* `open_id_connect_discovery_endpoint` - The cluster-specific OpenID Connect Discovery endpoint * `options` - Optional attributes for the cluster. * `add_ons` - Configurable cluster add-ons * `is_kubernetes_dashboard_enabled` - Whether or not to enable the Kubernetes Dashboard add-on. @@ -222,6 +230,8 @@ The following attributes are exported: * `signing_algorithms` - The signing algorithms accepted. Default is ["RS256"]. * `username_claim` - JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end user. Admins can choose other claims, such as email or name, depending on their provider. However, claims other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. * `username_prefix` - Prefix prepended to username claims to prevent clashes with existing names (such as system:users). For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. + * `open_id_connect_discovery` - The property that define the status of the OIDC Discovery feature for a cluster. + * `is_open_id_connect_discovery_enabled` - Whether the cluster has OIDC Discovery enabled. Defaults to false. If set to true, the cluster will be assigned a public OIDC Discovery endpoint. * `persistent_volume_config` - Configuration to be applied to block volumes created by Kubernetes Persistent Volume Claims (PVC) * `defined_tags` - Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Operations.CostCenter": "42"}` * `freeform_tags` - Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm). Example: `{"Department": "Finance"}` From 5e4691ce5eb1d9ae8235b7103030b94e7ba027ce Mon Sep 17 00:00:00 2001 From: Sriniakhil Gujulla Leel Date: Tue, 15 Oct 2024 11:03:18 +0530 Subject: [PATCH 25/31] Vendored - oci-go-sdk v65.76.0 changes for existing & new services --- .../oracle/oci-go-sdk/v65/common/version.go | 4 +- .../oci-go-sdk/v65/containerengine/cluster.go | 44 ++-- .../containerengine/cluster_create_options.go | 4 + .../open_id_connect_discovery.go | 41 ++++ ..._id_connect_token_authentication_config.go | 77 +++++++ .../update_cluster_options_details.go | 4 + .../v65/core/block_volume_replica.go | 5 + .../v65/core/block_volume_replica_details.go | 6 + .../v65/core/block_volume_replica_info.go | 5 + .../v65/core/boot_volume_replica.go | 5 + .../v65/core/boot_volume_replica_details.go | 6 + .../v65/core/boot_volume_replica_info.go | 5 + .../v65/core/boot_volume_source_details.go | 4 + ...e_from_boot_volume_backup_delta_details.go | 66 ++++++ .../v65/core/create_boot_volume_details.go | 9 + ...volume_backup_policy_assignment_details.go | 6 + .../v65/core/create_volume_details.go | 9 + .../v65/core/create_volume_group_details.go | 9 + ...nce_configuration_create_volume_details.go | 9 + .../core/volume_backup_policy_assignment.go | 6 + .../v65/core/volume_group_replica_details.go | 6 + .../v65/core/volume_group_replica_info.go | 5 + .../v65/core/volume_source_details.go | 4 + ...source_from_volume_backup_delta_details.go | 66 ++++++ ...ing_policy_compartment_request_response.go | 4 + ...ring_policy_attachment_request_response.go | 4 + ...create_steering_policy_request_response.go | 4 + .../oci-go-sdk/v65/dns/create_zone_details.go | 24 +++ ...ring_policy_attachment_request_response.go | 4 + ...delete_steering_policy_request_response.go | 4 + .../oracle/oci-go-sdk/v65/dns/dns_client.go | 135 ++++++++++++ .../oci-go-sdk/v65/dns/dnssec_config.go | 44 ++++ .../oci-go-sdk/v65/dns/dnssec_digest_type.go | 53 +++++ .../v65/dns/dnssec_key_version_ds_data.go | 47 ++++ .../v65/dns/dnssec_signing_algorithm.go | 53 +++++ .../v65/dns/ksk_dnssec_key_version.go | 105 +++++++++ .../v65/dns/list_zones_request_response.go | 48 +++++ ...promote_zone_dnssec_key_version_details.go | 40 ++++ ...one_dnssec_key_version_request_response.go | 166 ++++++++++++++ .../stage_zone_dnssec_key_version_details.go | 40 ++++ ...one_dnssec_key_version_request_response.go | 166 ++++++++++++++ ...ring_policy_attachment_request_response.go | 4 + ...update_steering_policy_request_response.go | 4 + .../oci-go-sdk/v65/dns/update_zone_details.go | 24 +++ .../oracle/oci-go-sdk/v65/dns/zone.go | 26 +++ .../oci-go-sdk/v65/dns/zone_dnssec_state.go | 57 +++++ .../oracle/oci-go-sdk/v65/dns/zone_summary.go | 26 +++ .../v65/dns/zsk_dnssec_key_version.go | 101 +++++++++ ...copy_deployment_backup_request_response.go | 6 + .../create_database_registration_details.go | 4 +- ...eate_deployment_backup_request_response.go | 6 + .../goldengate/create_deployment_details.go | 6 + .../create_ogg_deployment_details.go | 2 + .../create_oracle_connection_details.go | 4 +- .../oci-go-sdk/v65/goldengate/deployment.go | 14 ++ .../v65/goldengate/deployment_category.go | 60 ++++++ .../deployment_environment_collection.go | 39 ++++ .../deployment_environment_summary.go | 73 +++++++ .../v65/goldengate/deployment_summary.go | 28 ++- .../v65/goldengate/deployment_type_summary.go | 54 +---- .../v65/goldengate/environment_type.go | 56 +++++ .../v65/goldengate/goldengate_client.go | 58 +++++ .../group_to_roles_mapping_details.go | 57 +++++ ...eployment_environments_request_response.go | 202 ++++++++++++++++++ .../v65/goldengate/ogg_deployment.go | 2 + .../test_connection_assignment_result.go | 4 + .../update_database_registration_details.go | 4 +- .../goldengate/update_deployment_details.go | 6 + .../update_group_to_roles_mapping_details.go | 57 +++++ .../update_ogg_deployment_details.go | 2 + .../update_oracle_connection_details.go | 4 +- .../securityattribute_client.go | 36 ++-- .../oracle/oci-go-sdk/v65/zpr/zpr_client.go | 30 +-- 73 files changed, 2284 insertions(+), 118 deletions(-) create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_discovery.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_token_authentication_config.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_from_boot_volume_backup_delta_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_from_volume_backup_delta_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_config.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_digest_type.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_key_version_ds_data.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_signing_algorithm.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/ksk_dnssec_key_version.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_dnssec_state.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/dns/zsk_dnssec_key_version.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_category.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_collection.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_summary.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/environment_type.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/group_to_roles_mapping_details.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/list_deployment_environments_request_response.go create mode 100644 vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_group_to_roles_mapping_details.go diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go b/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go index 7e36c4cd322..a49bbfdf19a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/common/version.go @@ -12,8 +12,8 @@ import ( const ( major = "65" - minor = "75" - patch = "2" + minor = "76" + patch = "0" tag = "" ) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go index da6f644fca8..65f3d4dd432 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster.go @@ -82,6 +82,9 @@ type Cluster struct { // Type of cluster Type ClusterTypeEnum `mandatory:"false" json:"type,omitempty"` + + // The cluster-specific OpenID Connect Discovery endpoint + OpenIdConnectDiscoveryEndpoint *string `mandatory:"false" json:"openIdConnectDiscoveryEndpoint"` } func (m Cluster) String() string { @@ -109,25 +112,26 @@ func (m Cluster) ValidateEnumValue() (bool, error) { // UnmarshalJSON unmarshals from json func (m *Cluster) UnmarshalJSON(data []byte) (e error) { model := struct { - Id *string `json:"id"` - Name *string `json:"name"` - CompartmentId *string `json:"compartmentId"` - EndpointConfig *ClusterEndpointConfig `json:"endpointConfig"` - VcnId *string `json:"vcnId"` - KubernetesVersion *string `json:"kubernetesVersion"` - KmsKeyId *string `json:"kmsKeyId"` - FreeformTags map[string]string `json:"freeformTags"` - DefinedTags map[string]map[string]interface{} `json:"definedTags"` - SystemTags map[string]map[string]interface{} `json:"systemTags"` - Options *ClusterCreateOptions `json:"options"` - Metadata *ClusterMetadata `json:"metadata"` - LifecycleState ClusterLifecycleStateEnum `json:"lifecycleState"` - LifecycleDetails *string `json:"lifecycleDetails"` - Endpoints *ClusterEndpoints `json:"endpoints"` - AvailableKubernetesUpgrades []string `json:"availableKubernetesUpgrades"` - ImagePolicyConfig *ImagePolicyConfig `json:"imagePolicyConfig"` - ClusterPodNetworkOptions []clusterpodnetworkoptiondetails `json:"clusterPodNetworkOptions"` - Type ClusterTypeEnum `json:"type"` + Id *string `json:"id"` + Name *string `json:"name"` + CompartmentId *string `json:"compartmentId"` + EndpointConfig *ClusterEndpointConfig `json:"endpointConfig"` + VcnId *string `json:"vcnId"` + KubernetesVersion *string `json:"kubernetesVersion"` + KmsKeyId *string `json:"kmsKeyId"` + FreeformTags map[string]string `json:"freeformTags"` + DefinedTags map[string]map[string]interface{} `json:"definedTags"` + SystemTags map[string]map[string]interface{} `json:"systemTags"` + Options *ClusterCreateOptions `json:"options"` + Metadata *ClusterMetadata `json:"metadata"` + LifecycleState ClusterLifecycleStateEnum `json:"lifecycleState"` + LifecycleDetails *string `json:"lifecycleDetails"` + Endpoints *ClusterEndpoints `json:"endpoints"` + AvailableKubernetesUpgrades []string `json:"availableKubernetesUpgrades"` + ImagePolicyConfig *ImagePolicyConfig `json:"imagePolicyConfig"` + ClusterPodNetworkOptions []clusterpodnetworkoptiondetails `json:"clusterPodNetworkOptions"` + Type ClusterTypeEnum `json:"type"` + OpenIdConnectDiscoveryEndpoint *string `json:"openIdConnectDiscoveryEndpoint"` }{} e = json.Unmarshal(data, &model) @@ -183,5 +187,7 @@ func (m *Cluster) UnmarshalJSON(data []byte) (e error) { } m.Type = model.Type + m.OpenIdConnectDiscoveryEndpoint = model.OpenIdConnectDiscoveryEndpoint + return } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go index eafbcf7c206..e9c0a3dac19 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/cluster_create_options.go @@ -35,6 +35,10 @@ type ClusterCreateOptions struct { PersistentVolumeConfig *PersistentVolumeConfigDetails `mandatory:"false" json:"persistentVolumeConfig"` ServiceLbConfig *ServiceLbConfigDetails `mandatory:"false" json:"serviceLbConfig"` + + OpenIdConnectTokenAuthenticationConfig *OpenIdConnectTokenAuthenticationConfig `mandatory:"false" json:"openIdConnectTokenAuthenticationConfig"` + + OpenIdConnectDiscovery *OpenIdConnectDiscovery `mandatory:"false" json:"openIdConnectDiscovery"` } func (m ClusterCreateOptions) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_discovery.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_discovery.go new file mode 100644 index 00000000000..b4a842ea0e3 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_discovery.go @@ -0,0 +1,41 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Kubernetes Engine API +// +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, +// and manage cloud-native applications. For more information, see +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// + +package containerengine + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// OpenIdConnectDiscovery The property that define the status of the OIDC Discovery feature for a cluster. +type OpenIdConnectDiscovery struct { + + // Whether the cluster has OIDC Discovery enabled. Defaults to false. If set to true, the cluster will be assigned a public OIDC Discovery endpoint. + IsOpenIdConnectDiscoveryEnabled *bool `mandatory:"false" json:"isOpenIdConnectDiscoveryEnabled"` +} + +func (m OpenIdConnectDiscovery) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m OpenIdConnectDiscovery) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_token_authentication_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_token_authentication_config.go new file mode 100644 index 00000000000..f8b2c9157b0 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/open_id_connect_token_authentication_config.go @@ -0,0 +1,77 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Kubernetes Engine API +// +// API for the Kubernetes Engine service (also known as the Container Engine for Kubernetes service). Use this API to build, deploy, +// and manage cloud-native applications. For more information, see +// Overview of Kubernetes Engine (https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm). +// + +package containerengine + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// OpenIdConnectTokenAuthenticationConfig The properties that configure OIDC token authentication in kube-apiserver. +// For more information, see Configuring the API Server (https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-flags). +type OpenIdConnectTokenAuthenticationConfig struct { + + // Whether the cluster has OIDC Auth Config enabled. Defaults to false. + IsOpenIdConnectAuthEnabled *bool `mandatory:"true" json:"isOpenIdConnectAuthEnabled"` + + // URL of the provider that allows the API server to discover public signing keys. + // Only URLs that use the https:// scheme are accepted. This is typically the provider's discovery URL, + // changed to have an empty path. + IssuerUrl *string `mandatory:"false" json:"issuerUrl"` + + // A client id that all tokens must be issued for. + ClientId *string `mandatory:"false" json:"clientId"` + + // JWT claim to use as the user name. By default sub, which is expected to be a unique identifier of the end + // user. Admins can choose other claims, such as email or name, depending on their provider. However, claims + // other than email will be prefixed with the issuer URL to prevent naming clashes with other plugins. + UsernameClaim *string `mandatory:"false" json:"usernameClaim"` + + // Prefix prepended to username claims to prevent clashes with existing names (such as system:users). + // For example, the value oidc: will create usernames like oidc:jane.doe. If this flag isn't provided and + // --oidc-username-claim is a value other than email the prefix defaults to ( Issuer URL )# where + // ( Issuer URL ) is the value of --oidc-issuer-url. The value - can be used to disable all prefixing. + UsernamePrefix *string `mandatory:"false" json:"usernamePrefix"` + + // JWT claim to use as the user's group. If the claim is present it must be an array of strings. + GroupsClaim *string `mandatory:"false" json:"groupsClaim"` + + // Prefix prepended to group claims to prevent clashes with existing names (such as system:groups). + GroupsPrefix *string `mandatory:"false" json:"groupsPrefix"` + + // A key=value pair that describes a required claim in the ID Token. If set, the claim is verified to be present + // in the ID Token with a matching value. Repeat this flag to specify multiple claims. + RequiredClaims []KeyValue `mandatory:"false" json:"requiredClaims"` + + // A Base64 encoded public RSA or ECDSA certificates used to signed your identity provider's web certificate. + CaCertificate *string `mandatory:"false" json:"caCertificate"` + + // The signing algorithms accepted. Default is ["RS256"]. + SigningAlgorithms []string `mandatory:"false" json:"signingAlgorithms"` +} + +func (m OpenIdConnectTokenAuthenticationConfig) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m OpenIdConnectTokenAuthenticationConfig) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go index 8351a2c734e..ec8d7ae17f6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/containerengine/update_cluster_options_details.go @@ -26,6 +26,10 @@ type UpdateClusterOptionsDetails struct { PersistentVolumeConfig *PersistentVolumeConfigDetails `mandatory:"false" json:"persistentVolumeConfig"` ServiceLbConfig *ServiceLbConfigDetails `mandatory:"false" json:"serviceLbConfig"` + + OpenIdConnectTokenAuthenticationConfig *OpenIdConnectTokenAuthenticationConfig `mandatory:"false" json:"openIdConnectTokenAuthenticationConfig"` + + OpenIdConnectDiscovery *OpenIdConnectDiscovery `mandatory:"false" json:"openIdConnectDiscovery"` } func (m UpdateClusterOptionsDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica.go index 045fa2636f3..9f1c4932fff 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica.go @@ -78,6 +78,11 @@ type BlockVolumeReplica struct { // The OCID of the volume group replica. VolumeGroupReplicaId *string `mandatory:"false" json:"volumeGroupReplicaId"` + + // The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + KmsKeyId *string `mandatory:"false" json:"kmsKeyId"` } func (m BlockVolumeReplica) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_details.go index 8d1879205a0..331dd5c8c2f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_details.go @@ -31,6 +31,12 @@ type BlockVolumeReplicaDetails struct { // A user-friendly name. Does not have to be unique, and it's changeable. // Avoid entering confidential information. DisplayName *string `mandatory:"false" json:"displayName"` + + // The OCID of the Vault service key which is the master encryption key for the cross region block volume replicas, which will be used in the destination region to encrypt the block volume replica's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrrKmsKeyId *string `mandatory:"false" json:"xrrKmsKeyId"` } func (m BlockVolumeReplicaDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_info.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_info.go index d915126c870..7741877e1db 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_info.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/block_volume_replica_info.go @@ -34,6 +34,11 @@ type BlockVolumeReplicaInfo struct { // The availability domain of the block volume replica. // Example: `Uocm:PHX-AD-1` AvailabilityDomain *string `mandatory:"true" json:"availabilityDomain"` + + // The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + KmsKeyId *string `mandatory:"false" json:"kmsKeyId"` } func (m BlockVolumeReplicaInfo) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica.go index a18af18692e..d8ab97e17fb 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica.go @@ -81,6 +81,11 @@ type BootVolumeReplica struct { // The OCID of the volume group replica. VolumeGroupReplicaId *string `mandatory:"false" json:"volumeGroupReplicaId"` + + // The OCID of the Vault service key to assign as the master encryption key for the boot volume replica, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + KmsKeyId *string `mandatory:"false" json:"kmsKeyId"` } func (m BootVolumeReplica) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_details.go index 566c56d2086..ab139d2d484 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_details.go @@ -31,6 +31,12 @@ type BootVolumeReplicaDetails struct { // A user-friendly name. Does not have to be unique, and it's changeable. // Avoid entering confidential information. DisplayName *string `mandatory:"false" json:"displayName"` + + // The OCID of the Vault service key which is the master encryption key for the cross region boot volume replicas, which will be used in the destination region to encrypt the boot volume replica's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrrKmsKeyId *string `mandatory:"false" json:"xrrKmsKeyId"` } func (m BootVolumeReplicaDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_info.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_info.go index 9aa46150f36..62874afc2e3 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_info.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_replica_info.go @@ -34,6 +34,11 @@ type BootVolumeReplicaInfo struct { // The availability domain of the boot volume replica. // Example: `Uocm:PHX-AD-1` AvailabilityDomain *string `mandatory:"true" json:"availabilityDomain"` + + // The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + KmsKeyId *string `mandatory:"false" json:"kmsKeyId"` } func (m BootVolumeReplicaInfo) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_details.go index ecaaf1e2462..d4ac8635e9a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_details.go @@ -68,6 +68,10 @@ func (m *bootvolumesourcedetails) UnmarshalPolymorphicJSON(data []byte) (interfa mm := BootVolumeSourceFromBootVolumeReplicaDetails{} err = json.Unmarshal(data, &mm) return mm, err + case "bootVolumeBackupDelta": + mm := BootVolumeSourceFromBootVolumeBackupDeltaDetails{} + err = json.Unmarshal(data, &mm) + return mm, err default: common.Logf("Recieved unsupported enum value for BootVolumeSourceDetails: %s.", m.Type) return *m, nil diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_from_boot_volume_backup_delta_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_from_boot_volume_backup_delta_details.go new file mode 100644 index 00000000000..a8b9fc2b1ae --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/boot_volume_source_from_boot_volume_backup_delta_details.go @@ -0,0 +1,66 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Core Services API +// +// Use the Core Services API to manage resources such as virtual cloud networks (VCNs), +// compute instances, and block storage volumes. For more information, see the console +// documentation for the Networking (https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/overview.htm), +// Compute (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm), and +// Block Volume (https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/overview.htm) services. +// The required permissions are documented in the +// Details for the Core Services (https://docs.cloud.oracle.com/iaas/Content/Identity/Reference/corepolicyreference.htm) article. +// + +package core + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// BootVolumeSourceFromBootVolumeBackupDeltaDetails Specifies the boot volume backups (first & second) and block size in bytes. +type BootVolumeSourceFromBootVolumeBackupDeltaDetails struct { + + // The OCID of the first boot volume backup. + FirstBackupId *string `mandatory:"true" json:"firstBackupId"` + + // The OCID of the second boot volume backup. + SecondBackupId *string `mandatory:"true" json:"secondBackupId"` + + // Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + ChangeBlockSizeInBytes *int64 `mandatory:"false" json:"changeBlockSizeInBytes"` +} + +func (m BootVolumeSourceFromBootVolumeBackupDeltaDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m BootVolumeSourceFromBootVolumeBackupDeltaDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m BootVolumeSourceFromBootVolumeBackupDeltaDetails) MarshalJSON() (buff []byte, e error) { + type MarshalTypeBootVolumeSourceFromBootVolumeBackupDeltaDetails BootVolumeSourceFromBootVolumeBackupDeltaDetails + s := struct { + DiscriminatorParam string `json:"type"` + MarshalTypeBootVolumeSourceFromBootVolumeBackupDeltaDetails + }{ + "bootVolumeBackupDelta", + (MarshalTypeBootVolumeSourceFromBootVolumeBackupDeltaDetails)(m), + } + + return json.Marshal(&s) +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_boot_volume_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_boot_volume_details.go index 2cabb02aa04..e29f505e140 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_boot_volume_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_boot_volume_details.go @@ -82,6 +82,12 @@ type CreateBootVolumeDetails struct { // The list of autotune policies to be enabled for this volume. AutotunePolicies []AutotunePolicy `mandatory:"false" json:"autotunePolicies"` + + // The OCID of the Vault service key which is the master encryption key for the boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m CreateBootVolumeDetails) String() string { @@ -115,6 +121,7 @@ func (m *CreateBootVolumeDetails) UnmarshalJSON(data []byte) (e error) { IsAutoTuneEnabled *bool `json:"isAutoTuneEnabled"` BootVolumeReplicas []BootVolumeReplicaDetails `json:"bootVolumeReplicas"` AutotunePolicies []autotunepolicy `json:"autotunePolicies"` + XrcKmsKeyId *string `json:"xrcKmsKeyId"` CompartmentId *string `json:"compartmentId"` SourceDetails bootvolumesourcedetails `json:"sourceDetails"` }{} @@ -158,6 +165,8 @@ func (m *CreateBootVolumeDetails) UnmarshalJSON(data []byte) (e error) { m.AutotunePolicies[i] = nil } } + m.XrcKmsKeyId = model.XrcKmsKeyId + m.CompartmentId = model.CompartmentId nn, e = model.SourceDetails.UnmarshalPolymorphicJSON(model.SourceDetails.JsonData) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_backup_policy_assignment_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_backup_policy_assignment_details.go index fb2fa2471cc..c3fc3f69501 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_backup_policy_assignment_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_backup_policy_assignment_details.go @@ -29,6 +29,12 @@ type CreateVolumeBackupPolicyAssignmentDetails struct { // The OCID of the volume backup policy to assign to the volume. PolicyId *string `mandatory:"true" json:"policyId"` + + // The OCID of the Vault service key which is the master encryption key for the block / boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m CreateVolumeBackupPolicyAssignmentDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_details.go index bbf187fe641..977ac058d24 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_details.go @@ -93,6 +93,12 @@ type CreateVolumeDetails struct { // The list of autotune policies to be enabled for this volume. AutotunePolicies []AutotunePolicy `mandatory:"false" json:"autotunePolicies"` + + // The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m CreateVolumeDetails) String() string { @@ -129,6 +135,7 @@ func (m *CreateVolumeDetails) UnmarshalJSON(data []byte) (e error) { IsAutoTuneEnabled *bool `json:"isAutoTuneEnabled"` BlockVolumeReplicas []BlockVolumeReplicaDetails `json:"blockVolumeReplicas"` AutotunePolicies []autotunepolicy `json:"autotunePolicies"` + XrcKmsKeyId *string `json:"xrcKmsKeyId"` CompartmentId *string `json:"compartmentId"` }{} @@ -185,6 +192,8 @@ func (m *CreateVolumeDetails) UnmarshalJSON(data []byte) (e error) { m.AutotunePolicies[i] = nil } } + m.XrcKmsKeyId = model.XrcKmsKeyId + m.CompartmentId = model.CompartmentId return diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_group_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_group_details.go index 1a2437e9d73..9f2af6b3ce9 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_group_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/create_volume_group_details.go @@ -57,6 +57,12 @@ type CreateVolumeGroupDetails struct { // The clusterPlacementGroup Id of the volume group for volume group placement. ClusterPlacementGroupId *string `mandatory:"false" json:"clusterPlacementGroupId"` + + // The OCID of the Vault service key which is the master encryption key for the volume's cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m CreateVolumeGroupDetails) String() string { @@ -84,6 +90,7 @@ func (m *CreateVolumeGroupDetails) UnmarshalJSON(data []byte) (e error) { FreeformTags map[string]string `json:"freeformTags"` VolumeGroupReplicas []VolumeGroupReplicaDetails `json:"volumeGroupReplicas"` ClusterPlacementGroupId *string `json:"clusterPlacementGroupId"` + XrcKmsKeyId *string `json:"xrcKmsKeyId"` AvailabilityDomain *string `json:"availabilityDomain"` CompartmentId *string `json:"compartmentId"` SourceDetails volumegroupsourcedetails `json:"sourceDetails"` @@ -106,6 +113,8 @@ func (m *CreateVolumeGroupDetails) UnmarshalJSON(data []byte) (e error) { copy(m.VolumeGroupReplicas, model.VolumeGroupReplicas) m.ClusterPlacementGroupId = model.ClusterPlacementGroupId + m.XrcKmsKeyId = model.XrcKmsKeyId + m.AvailabilityDomain = model.AvailabilityDomain m.CompartmentId = model.CompartmentId diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/instance_configuration_create_volume_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/instance_configuration_create_volume_details.go index 8d794531fc8..d14942c873c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/instance_configuration_create_volume_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/instance_configuration_create_volume_details.go @@ -83,6 +83,12 @@ type InstanceConfigurationCreateVolumeDetails struct { // The list of autotune policies enabled for this volume. AutotunePolicies []InstanceConfigurationAutotunePolicy `mandatory:"false" json:"autotunePolicies"` + + // The OCID of the Vault service key which is the master encryption key for the block volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m InstanceConfigurationCreateVolumeDetails) String() string { @@ -118,6 +124,7 @@ func (m *InstanceConfigurationCreateVolumeDetails) UnmarshalJSON(data []byte) (e SizeInGBs *int64 `json:"sizeInGBs"` SourceDetails instanceconfigurationvolumesourcedetails `json:"sourceDetails"` AutotunePolicies []instanceconfigurationautotunepolicy `json:"autotunePolicies"` + XrcKmsKeyId *string `json:"xrcKmsKeyId"` }{} e = json.Unmarshal(data, &model) @@ -171,5 +178,7 @@ func (m *InstanceConfigurationCreateVolumeDetails) UnmarshalJSON(data []byte) (e m.AutotunePolicies[i] = nil } } + m.XrcKmsKeyId = model.XrcKmsKeyId + return } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_backup_policy_assignment.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_backup_policy_assignment.go index 7322b96f8c7..871de28e4fd 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_backup_policy_assignment.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_backup_policy_assignment.go @@ -38,6 +38,12 @@ type VolumeBackupPolicyAssignment struct { // The date and time the volume backup policy was assigned to the volume. The format is // defined by RFC3339 (https://tools.ietf.org/html/rfc3339). TimeCreated *common.SDKTime `mandatory:"true" json:"timeCreated"` + + // The OCID of the Vault service key which is the master encryption key for the block / boot volume cross region backups, which will be used in the destination region to encrypt the backup's encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrcKmsKeyId *string `mandatory:"false" json:"xrcKmsKeyId"` } func (m VolumeBackupPolicyAssignment) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_details.go index 7a98f3ae586..7dfae065a99 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_details.go @@ -31,6 +31,12 @@ type VolumeGroupReplicaDetails struct { // A user-friendly name. Does not have to be unique, and it's changeable. // Avoid entering confidential information. DisplayName *string `mandatory:"false" json:"displayName"` + + // The OCID of the Vault service key which is the master encryption key for the cross region volume group's replicas, which will be used in the destination region to encrypt the volume group's replicas encryption keys. + // For more information about the Vault service and encryption keys, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + XrrKmsKeyId *string `mandatory:"false" json:"xrrKmsKeyId"` } func (m VolumeGroupReplicaDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_info.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_info.go index f730deec9a0..2d5a8cdae2f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_info.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_group_replica_info.go @@ -34,6 +34,11 @@ type VolumeGroupReplicaInfo struct { // The availability domain of the boot volume replica replica. // Example: `Uocm:PHX-AD-1` AvailabilityDomain *string `mandatory:"true" json:"availabilityDomain"` + + // The OCID of the Vault service key to assign as the master encryption key for the block volume replica, see + // Overview of Vault service (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Concepts/keyoverview.htm) and + // Using Keys (https://docs.cloud.oracle.com/iaas/Content/KeyManagement/Tasks/usingkeys.htm). + KmsKeyId *string `mandatory:"false" json:"kmsKeyId"` } func (m VolumeGroupReplicaInfo) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_details.go index bcea6aaf3df..8d8538519a5 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_details.go @@ -70,6 +70,10 @@ func (m *volumesourcedetails) UnmarshalPolymorphicJSON(data []byte) (interface{} mm := VolumeSourceFromVolumeBackupDetails{} err = json.Unmarshal(data, &mm) return mm, err + case "volumeBackupDelta": + mm := VolumeSourceFromVolumeBackupDeltaDetails{} + err = json.Unmarshal(data, &mm) + return mm, err default: common.Logf("Recieved unsupported enum value for VolumeSourceDetails: %s.", m.Type) return *m, nil diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_from_volume_backup_delta_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_from_volume_backup_delta_details.go new file mode 100644 index 00000000000..b3223d6369f --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/core/volume_source_from_volume_backup_delta_details.go @@ -0,0 +1,66 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// Core Services API +// +// Use the Core Services API to manage resources such as virtual cloud networks (VCNs), +// compute instances, and block storage volumes. For more information, see the console +// documentation for the Networking (https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/overview.htm), +// Compute (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm), and +// Block Volume (https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/overview.htm) services. +// The required permissions are documented in the +// Details for the Core Services (https://docs.cloud.oracle.com/iaas/Content/Identity/Reference/corepolicyreference.htm) article. +// + +package core + +import ( + "encoding/json" + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// VolumeSourceFromVolumeBackupDeltaDetails Specifies the volume backups (first & second) and block size in bytes. +type VolumeSourceFromVolumeBackupDeltaDetails struct { + + // The OCID of the first volume backup. + FirstBackupId *string `mandatory:"true" json:"firstBackupId"` + + // The OCID of the second volume backup. + SecondBackupId *string `mandatory:"true" json:"secondBackupId"` + + // Block size in bytes to be considered while performing volume restore. The value must be a power of 2; ranging from 4KB (4096 bytes) to 1MB (1048576 bytes). If omitted, defaults to 4,096 bytes (4 KiB). + ChangeBlockSizeInBytes *int64 `mandatory:"false" json:"changeBlockSizeInBytes"` +} + +func (m VolumeSourceFromVolumeBackupDeltaDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m VolumeSourceFromVolumeBackupDeltaDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// MarshalJSON marshals to json representation +func (m VolumeSourceFromVolumeBackupDeltaDetails) MarshalJSON() (buff []byte, e error) { + type MarshalTypeVolumeSourceFromVolumeBackupDeltaDetails VolumeSourceFromVolumeBackupDeltaDetails + s := struct { + DiscriminatorParam string `json:"type"` + MarshalTypeVolumeSourceFromVolumeBackupDeltaDetails + }{ + "volumeBackupDelta", + (MarshalTypeVolumeSourceFromVolumeBackupDeltaDetails)(m), + } + + return json.Marshal(&s) +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/change_steering_policy_compartment_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/change_steering_policy_compartment_request_response.go index e26a3646637..8980eecce4c 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/change_steering_policy_compartment_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/change_steering_policy_compartment_request_response.go @@ -101,6 +101,10 @@ type ChangeSteeringPolicyCompartmentResponse struct { // Unique Oracle-assigned identifier for the request. If you need to // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` } func (response ChangeSteeringPolicyCompartmentResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_attachment_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_attachment_request_response.go index b17c64ccf07..0b6ad30f19a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_attachment_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_attachment_request_response.go @@ -102,6 +102,10 @@ type CreateSteeringPolicyAttachmentResponse struct { // Unique Oracle-assigned identifier for the request. If you need to // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` } func (response CreateSteeringPolicyAttachmentResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_request_response.go index 8404a04fd30..2ae884166c8 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_steering_policy_request_response.go @@ -102,6 +102,10 @@ type CreateSteeringPolicyResponse struct { // Unique Oracle-assigned identifier for the request. If you need to // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` } func (response CreateSteeringPolicyResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_zone_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_zone_details.go index 113ffe8cabb..c21faa15016 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_zone_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/create_zone_details.go @@ -59,6 +59,27 @@ type CreateZoneDetails struct { // The scope of the zone. Scope ScopeEnum `mandatory:"false" json:"scope,omitempty"` + + // The state of DNSSEC on the zone. + // For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent + // trust anchor) must also have DNSSEC correctly set up. + // After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the + // `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. + // Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + // New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. + // To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old + // `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + // To remove the old DS record without causing service disruption, wait until the old DS record's TTL has + // expired, and the new DS record has propagated. After the DS replacement has been completed, then the + // `PromoteZoneDnssecKeyVersion` operation must be called. + // Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many + // days are left until expiration. + // We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the + // necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + // Enabling DNSSEC results in additional records in DNS responses which increases their size and can + // cause higher response latency. + // For more information, see DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). + DnssecState ZoneDnssecStateEnum `mandatory:"false" json:"dnssecState,omitempty"` } // GetName returns Name @@ -97,6 +118,9 @@ func (m CreateZoneDetails) ValidateEnumValue() (bool, error) { if _, ok := GetMappingScopeEnum(string(m.Scope)); !ok && m.Scope != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", m.Scope, strings.Join(GetScopeEnumStringValues(), ","))) } + if _, ok := GetMappingZoneDnssecStateEnum(string(m.DnssecState)); !ok && m.DnssecState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DnssecState: %s. Supported values are: %s.", m.DnssecState, strings.Join(GetZoneDnssecStateEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_attachment_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_attachment_request_response.go index d64baaaec01..6550d9c3926 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_attachment_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_attachment_request_response.go @@ -97,6 +97,10 @@ type DeleteSteeringPolicyAttachmentResponse struct { // Unique Oracle-assigned identifier for the request. If you need to // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` } func (response DeleteSteeringPolicyAttachmentResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_request_response.go index 27e93e4ca1c..285ede2ce10 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/delete_steering_policy_request_response.go @@ -97,6 +97,10 @@ type DeleteSteeringPolicyResponse struct { // Unique Oracle-assigned identifier for the request. If you need to // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` } func (response DeleteSteeringPolicyResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dns_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dns_client.go index 3621b124eb9..0095d89891d 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dns_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dns_client.go @@ -2657,6 +2657,141 @@ func (client DnsClient) patchZoneRecords(ctx context.Context, request common.OCI return response, err } +// PromoteZoneDnssecKeyVersion Promotes a specified `DnssecKeyVersion` on the zone. +// If the `DnssecKeyVersion` identified in the request body is a key signing key (KSK) that is replacing +// another `DnssecKeyVersion`, then the old `DnssecKeyVersion` is scheduled for removal from the zone. +// For key signing keys (KSKs), you must create the DS record with the new key information **before** promoting +// the new key to establish a chain of trust. To avoid a service disruption, remove the old DS record as soon +// as its TTL (time to live) expires. +// For more information, see DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/dns/PromoteZoneDnssecKeyVersion.go.html to see an example of how to use PromoteZoneDnssecKeyVersion API. +// A default retry strategy applies to this operation PromoteZoneDnssecKeyVersion() +func (client DnsClient) PromoteZoneDnssecKeyVersion(ctx context.Context, request PromoteZoneDnssecKeyVersionRequest) (response PromoteZoneDnssecKeyVersionResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + + if !(request.OpcRetryToken != nil && *request.OpcRetryToken != "") { + request.OpcRetryToken = common.String(common.RetryToken()) + } + + ociResponse, err = common.Retry(ctx, request, client.promoteZoneDnssecKeyVersion, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = PromoteZoneDnssecKeyVersionResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = PromoteZoneDnssecKeyVersionResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(PromoteZoneDnssecKeyVersionResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into PromoteZoneDnssecKeyVersionResponse") + } + return +} + +// promoteZoneDnssecKeyVersion implements the OCIOperation interface (enables retrying operations) +func (client DnsClient) promoteZoneDnssecKeyVersion(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPost, "/zones/{zoneId}/actions/promoteDnssecKeyVersion", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response PromoteZoneDnssecKeyVersionResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/dns/20180115/Zone/PromoteZoneDnssecKeyVersion" + err = common.PostProcessServiceError(err, "Dns", "PromoteZoneDnssecKeyVersion", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + +// StageZoneDnssecKeyVersion Stages a new `DnssecKeyVersion` on the zone. Staging is a process that generates a new "successor" key version +// that replaces an existing "predecessor" key version. +// **Note:** A new key-signing key (KSK) version is inert until you update the parent zone DS records. +// For more information, see the DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm) documentation. +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/dns/StageZoneDnssecKeyVersion.go.html to see an example of how to use StageZoneDnssecKeyVersion API. +// A default retry strategy applies to this operation StageZoneDnssecKeyVersion() +func (client DnsClient) StageZoneDnssecKeyVersion(ctx context.Context, request StageZoneDnssecKeyVersionRequest) (response StageZoneDnssecKeyVersionResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + + if !(request.OpcRetryToken != nil && *request.OpcRetryToken != "") { + request.OpcRetryToken = common.String(common.RetryToken()) + } + + ociResponse, err = common.Retry(ctx, request, client.stageZoneDnssecKeyVersion, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = StageZoneDnssecKeyVersionResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = StageZoneDnssecKeyVersionResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(StageZoneDnssecKeyVersionResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into StageZoneDnssecKeyVersionResponse") + } + return +} + +// stageZoneDnssecKeyVersion implements the OCIOperation interface (enables retrying operations) +func (client DnsClient) stageZoneDnssecKeyVersion(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodPost, "/zones/{zoneId}/actions/stageDnssecKeyVersion", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response StageZoneDnssecKeyVersionResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/dns/20180115/Zone/StageZoneDnssecKeyVersion" + err = common.PostProcessServiceError(err, "Dns", "StageZoneDnssecKeyVersion", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // UpdateDomainRecords Replaces records in the specified zone at a domain with the records specified in the request body. // If a specified record does not exist, it will be created. If the record exists, then it will be updated to // represent the record in the body of the request. If a record in the zone does not exist in the request body, diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_config.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_config.go new file mode 100644 index 00000000000..01b1d535010 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_config.go @@ -0,0 +1,44 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DnssecConfig DNSSEC configuration data. +// A zone may have a maximum of 10 `DnssecKeyVersions`, regardless of signing key type. +type DnssecConfig struct { + + // A read-only array of key signing key (KSK) versions. + KskDnssecKeyVersions []KskDnssecKeyVersion `mandatory:"false" json:"kskDnssecKeyVersions"` + + // A read-only array of zone signing key (ZSK) versions. + ZskDnssecKeyVersions []ZskDnssecKeyVersion `mandatory:"false" json:"zskDnssecKeyVersions"` +} + +func (m DnssecConfig) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DnssecConfig) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_digest_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_digest_type.go new file mode 100644 index 00000000000..2eef9f3a27a --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_digest_type.go @@ -0,0 +1,53 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "strings" +) + +// DnssecDigestTypeEnum Enum with underlying type: string +type DnssecDigestTypeEnum string + +// Set of constants representing the allowable values for DnssecDigestTypeEnum +const ( + DnssecDigestTypeSha256 DnssecDigestTypeEnum = "SHA_256" +) + +var mappingDnssecDigestTypeEnum = map[string]DnssecDigestTypeEnum{ + "SHA_256": DnssecDigestTypeSha256, +} + +var mappingDnssecDigestTypeEnumLowerCase = map[string]DnssecDigestTypeEnum{ + "sha_256": DnssecDigestTypeSha256, +} + +// GetDnssecDigestTypeEnumValues Enumerates the set of values for DnssecDigestTypeEnum +func GetDnssecDigestTypeEnumValues() []DnssecDigestTypeEnum { + values := make([]DnssecDigestTypeEnum, 0) + for _, v := range mappingDnssecDigestTypeEnum { + values = append(values, v) + } + return values +} + +// GetDnssecDigestTypeEnumStringValues Enumerates the set of values in String for DnssecDigestTypeEnum +func GetDnssecDigestTypeEnumStringValues() []string { + return []string{ + "SHA_256", + } +} + +// GetMappingDnssecDigestTypeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDnssecDigestTypeEnum(val string) (DnssecDigestTypeEnum, bool) { + enum, ok := mappingDnssecDigestTypeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_key_version_ds_data.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_key_version_ds_data.go new file mode 100644 index 00000000000..b523b75bc57 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_key_version_ds_data.go @@ -0,0 +1,47 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DnssecKeyVersionDsData Data for a parent zone DS record corresponding to this key-signing key (KSK). +type DnssecKeyVersionDsData struct { + + // Presentation-format DS record data that must be added to the parent zone. For more information about RDATA, + // see Supported DNS Resource Record Types (https://docs.cloud.oracle.com/iaas/Content/DNS/Reference/supporteddnsresource.htm) + Rdata *string `mandatory:"false" json:"rdata"` + + // The type of the digest associated with the rdata. + DigestType DnssecDigestTypeEnum `mandatory:"false" json:"digestType,omitempty"` +} + +func (m DnssecKeyVersionDsData) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DnssecKeyVersionDsData) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingDnssecDigestTypeEnum(string(m.DigestType)); !ok && m.DigestType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DigestType: %s. Supported values are: %s.", m.DigestType, strings.Join(GetDnssecDigestTypeEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_signing_algorithm.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_signing_algorithm.go new file mode 100644 index 00000000000..b75a41181ef --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/dnssec_signing_algorithm.go @@ -0,0 +1,53 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "strings" +) + +// DnssecSigningAlgorithmEnum Enum with underlying type: string +type DnssecSigningAlgorithmEnum string + +// Set of constants representing the allowable values for DnssecSigningAlgorithmEnum +const ( + DnssecSigningAlgorithmRsasha256 DnssecSigningAlgorithmEnum = "RSASHA256" +) + +var mappingDnssecSigningAlgorithmEnum = map[string]DnssecSigningAlgorithmEnum{ + "RSASHA256": DnssecSigningAlgorithmRsasha256, +} + +var mappingDnssecSigningAlgorithmEnumLowerCase = map[string]DnssecSigningAlgorithmEnum{ + "rsasha256": DnssecSigningAlgorithmRsasha256, +} + +// GetDnssecSigningAlgorithmEnumValues Enumerates the set of values for DnssecSigningAlgorithmEnum +func GetDnssecSigningAlgorithmEnumValues() []DnssecSigningAlgorithmEnum { + values := make([]DnssecSigningAlgorithmEnum, 0) + for _, v := range mappingDnssecSigningAlgorithmEnum { + values = append(values, v) + } + return values +} + +// GetDnssecSigningAlgorithmEnumStringValues Enumerates the set of values in String for DnssecSigningAlgorithmEnum +func GetDnssecSigningAlgorithmEnumStringValues() []string { + return []string{ + "RSASHA256", + } +} + +// GetMappingDnssecSigningAlgorithmEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDnssecSigningAlgorithmEnum(val string) (DnssecSigningAlgorithmEnum, bool) { + enum, ok := mappingDnssecSigningAlgorithmEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/ksk_dnssec_key_version.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/ksk_dnssec_key_version.go new file mode 100644 index 00000000000..bb550f9786f --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/ksk_dnssec_key_version.go @@ -0,0 +1,105 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// KskDnssecKeyVersion A key signing key (KSK) version. The version information contains timing and configuration data corresponding to the KSK that is used to +// apply DNSSEC on the zone. +type KskDnssecKeyVersion struct { + + // The UUID of the `DnssecKeyVersion`. + Uuid *string `mandatory:"false" json:"uuid"` + + // The signing algorithm used for the key. + Algorithm DnssecSigningAlgorithmEnum `mandatory:"false" json:"algorithm,omitempty"` + + // The length of the corresponding private key in bytes, expressed as an integer. + LengthInBytes *int `mandatory:"false" json:"lengthInBytes"` + + // The date and time the key version was created, expressed in RFC 3339 timestamp format. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeCreated *common.SDKTime `mandatory:"false" json:"timeCreated"` + + // The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is + // when the zone contents will include a DNSKEY record corresponding to the key material. + // **Example:** `2016-07-22T17:23:59:00Z` + TimePublished *common.SDKTime `mandatory:"false" json:"timePublished"` + + // The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is + // when the key material will be used to generate RRSIGs. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeActivated *common.SDKTime `mandatory:"false" json:"timeActivated"` + + // The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This + // is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is + // populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeInactivated *common.SDKTime `mandatory:"false" json:"timeInactivated"` + + // The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This + // is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is + // populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeUnpublished *common.SDKTime `mandatory:"false" json:"timeUnpublished"` + + // The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC + // 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no + // longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this + // `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. + // This prevents service disruption at the potential increased risk of key compromise. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeExpired *common.SDKTime `mandatory:"false" json:"timeExpired"` + + // The date and time the key version was promoted expressed in RFC 3339 timestamp format. + // **Example:** `2016-07-22T17:23:59:00Z` + TimePromoted *common.SDKTime `mandatory:"false" json:"timePromoted"` + + // When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has + // replaced. + PredecessorDnssecKeyVersionUuid *string `mandatory:"false" json:"predecessorDnssecKeyVersionUuid"` + + // When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this + // `DnssecKeyVersion`. + SuccessorDnssecKeyVersionUuid *string `mandatory:"false" json:"successorDnssecKeyVersionUuid"` + + // The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records + // associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see + // RFC 4034 (https://tools.ietf.org/html/rfc4034). + KeyTag *int `mandatory:"false" json:"keyTag"` + + // An array of data for DS records corresponding with this key version. An entry will exist for each + // supported DS digest algorithm. + DsData []DnssecKeyVersionDsData `mandatory:"false" json:"dsData"` +} + +func (m KskDnssecKeyVersion) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m KskDnssecKeyVersion) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingDnssecSigningAlgorithmEnum(string(m.Algorithm)); !ok && m.Algorithm != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Algorithm: %s. Supported values are: %s.", m.Algorithm, strings.Join(GetDnssecSigningAlgorithmEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/list_zones_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/list_zones_request_response.go index b56b3380a69..bfd691a8e0a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/list_zones_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/list_zones_request_response.go @@ -70,6 +70,9 @@ type ListZonesRequest struct { // Search for zones that are associated with a TSIG key. TsigKeyId *string `mandatory:"false" contributesTo:"query" name:"tsigKeyId"` + // Search for zones that have the given `DnssecState`. + DnssecState ListZonesDnssecStateEnum `mandatory:"false" contributesTo:"query" name:"dnssecState" omitEmpty:"true"` + // Metadata about the request. This information will not be transmitted to the service, but // represents information that the SDK will consume to drive retry behavior. RequestMetadata common.RequestMetadata @@ -121,6 +124,9 @@ func (request ListZonesRequest) ValidateEnumValue() (bool, error) { if _, ok := GetMappingListZonesScopeEnum(string(request.Scope)); !ok && request.Scope != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", request.Scope, strings.Join(GetListZonesScopeEnumStringValues(), ","))) } + if _, ok := GetMappingListZonesDnssecStateEnum(string(request.DnssecState)); !ok && request.DnssecState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DnssecState: %s. Supported values are: %s.", request.DnssecState, strings.Join(GetListZonesDnssecStateEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } @@ -387,3 +393,45 @@ func GetMappingListZonesScopeEnum(val string) (ListZonesScopeEnum, bool) { enum, ok := mappingListZonesScopeEnumLowerCase[strings.ToLower(val)] return enum, ok } + +// ListZonesDnssecStateEnum Enum with underlying type: string +type ListZonesDnssecStateEnum string + +// Set of constants representing the allowable values for ListZonesDnssecStateEnum +const ( + ListZonesDnssecStateEnabled ListZonesDnssecStateEnum = "ENABLED" + ListZonesDnssecStateDisabled ListZonesDnssecStateEnum = "DISABLED" +) + +var mappingListZonesDnssecStateEnum = map[string]ListZonesDnssecStateEnum{ + "ENABLED": ListZonesDnssecStateEnabled, + "DISABLED": ListZonesDnssecStateDisabled, +} + +var mappingListZonesDnssecStateEnumLowerCase = map[string]ListZonesDnssecStateEnum{ + "enabled": ListZonesDnssecStateEnabled, + "disabled": ListZonesDnssecStateDisabled, +} + +// GetListZonesDnssecStateEnumValues Enumerates the set of values for ListZonesDnssecStateEnum +func GetListZonesDnssecStateEnumValues() []ListZonesDnssecStateEnum { + values := make([]ListZonesDnssecStateEnum, 0) + for _, v := range mappingListZonesDnssecStateEnum { + values = append(values, v) + } + return values +} + +// GetListZonesDnssecStateEnumStringValues Enumerates the set of values in String for ListZonesDnssecStateEnum +func GetListZonesDnssecStateEnumStringValues() []string { + return []string{ + "ENABLED", + "DISABLED", + } +} + +// GetMappingListZonesDnssecStateEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListZonesDnssecStateEnum(val string) (ListZonesDnssecStateEnum, bool) { + enum, ok := mappingListZonesDnssecStateEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_details.go new file mode 100644 index 00000000000..d982639b305 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_details.go @@ -0,0 +1,40 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// PromoteZoneDnssecKeyVersionDetails Details for promoting a `DnssecKeyVersion` on a zone. +type PromoteZoneDnssecKeyVersionDetails struct { + + // The UUID of the `DnssecKeyVersion` that is being promoted. + DnssecKeyVersionUuid *string `mandatory:"true" json:"dnssecKeyVersionUuid"` +} + +func (m PromoteZoneDnssecKeyVersionDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m PromoteZoneDnssecKeyVersionDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_request_response.go new file mode 100644 index 00000000000..7f3054c3c1f --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/promote_zone_dnssec_key_version_request_response.go @@ -0,0 +1,166 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// PromoteZoneDnssecKeyVersionRequest wrapper for the PromoteZoneDnssecKeyVersion operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/dns/PromoteZoneDnssecKeyVersion.go.html to see an example of how to use PromoteZoneDnssecKeyVersionRequest. +type PromoteZoneDnssecKeyVersionRequest struct { + + // The OCID of the target zone. + ZoneId *string `mandatory:"true" contributesTo:"path" name:"zoneId"` + + // Details for promoting a `DnssecKeyVersion`. + PromoteZoneDnssecKeyVersionDetails `contributesTo:"body"` + + // The `If-Match` header field makes the request method conditional on the + // existence of at least one current representation of the target resource, + // when the field-value is `*`, or having a current representation of the + // target resource that has an entity-tag matching a member of the list of + // entity-tags provided in the field-value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"If-Match"` + + // The `If-Unmodified-Since` header field makes the request method + // conditional on the selected representation's last modification date being + // earlier than or equal to the date provided in the field-value. This + // field accomplishes the same purpose as If-Match for cases where the user + // agent does not have an entity-tag for the representation. + IfUnmodifiedSince *string `mandatory:"false" contributesTo:"header" name:"If-Unmodified-Since"` + + // A token that uniquely identifies a request so it can be retried in case + // of a timeout or server error without risk of executing that same action + // again. Retry tokens expire after 24 hours, but can be invalidated before + // then due to conflicting operations (for example, if a resource has been + // deleted and purged from the system, then a retry of the original creation + // request may be rejected). + OpcRetryToken *string `mandatory:"false" contributesTo:"header" name:"opc-retry-token"` + + // Unique Oracle-assigned identifier for the request. If you need + // to contact Oracle about a particular request, please provide + // the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Specifies to operate only on resources that have a matching DNS scope. + Scope PromoteZoneDnssecKeyVersionScopeEnum `mandatory:"false" contributesTo:"query" name:"scope" omitEmpty:"true"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request PromoteZoneDnssecKeyVersionRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request PromoteZoneDnssecKeyVersionRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request PromoteZoneDnssecKeyVersionRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request PromoteZoneDnssecKeyVersionRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request PromoteZoneDnssecKeyVersionRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingPromoteZoneDnssecKeyVersionScopeEnum(string(request.Scope)); !ok && request.Scope != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", request.Scope, strings.Join(GetPromoteZoneDnssecKeyVersionScopeEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// PromoteZoneDnssecKeyVersionResponse wrapper for the PromoteZoneDnssecKeyVersion operation +type PromoteZoneDnssecKeyVersionResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the request. If you need to + // contact Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` +} + +func (response PromoteZoneDnssecKeyVersionResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response PromoteZoneDnssecKeyVersionResponse) HTTPResponse() *http.Response { + return response.RawResponse +} + +// PromoteZoneDnssecKeyVersionScopeEnum Enum with underlying type: string +type PromoteZoneDnssecKeyVersionScopeEnum string + +// Set of constants representing the allowable values for PromoteZoneDnssecKeyVersionScopeEnum +const ( + PromoteZoneDnssecKeyVersionScopeGlobal PromoteZoneDnssecKeyVersionScopeEnum = "GLOBAL" + PromoteZoneDnssecKeyVersionScopePrivate PromoteZoneDnssecKeyVersionScopeEnum = "PRIVATE" +) + +var mappingPromoteZoneDnssecKeyVersionScopeEnum = map[string]PromoteZoneDnssecKeyVersionScopeEnum{ + "GLOBAL": PromoteZoneDnssecKeyVersionScopeGlobal, + "PRIVATE": PromoteZoneDnssecKeyVersionScopePrivate, +} + +var mappingPromoteZoneDnssecKeyVersionScopeEnumLowerCase = map[string]PromoteZoneDnssecKeyVersionScopeEnum{ + "global": PromoteZoneDnssecKeyVersionScopeGlobal, + "private": PromoteZoneDnssecKeyVersionScopePrivate, +} + +// GetPromoteZoneDnssecKeyVersionScopeEnumValues Enumerates the set of values for PromoteZoneDnssecKeyVersionScopeEnum +func GetPromoteZoneDnssecKeyVersionScopeEnumValues() []PromoteZoneDnssecKeyVersionScopeEnum { + values := make([]PromoteZoneDnssecKeyVersionScopeEnum, 0) + for _, v := range mappingPromoteZoneDnssecKeyVersionScopeEnum { + values = append(values, v) + } + return values +} + +// GetPromoteZoneDnssecKeyVersionScopeEnumStringValues Enumerates the set of values in String for PromoteZoneDnssecKeyVersionScopeEnum +func GetPromoteZoneDnssecKeyVersionScopeEnumStringValues() []string { + return []string{ + "GLOBAL", + "PRIVATE", + } +} + +// GetMappingPromoteZoneDnssecKeyVersionScopeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingPromoteZoneDnssecKeyVersionScopeEnum(val string) (PromoteZoneDnssecKeyVersionScopeEnum, bool) { + enum, ok := mappingPromoteZoneDnssecKeyVersionScopeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_details.go new file mode 100644 index 00000000000..62a7ee22d07 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_details.go @@ -0,0 +1,40 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// StageZoneDnssecKeyVersionDetails Details for staging a `DnssecKeyVersion` on a zone. +type StageZoneDnssecKeyVersionDetails struct { + + // The UUID of the `DnssecKeyVersion` for which a new successor should be generated. + PredecessorDnssecKeyVersionUuid *string `mandatory:"true" json:"predecessorDnssecKeyVersionUuid"` +} + +func (m StageZoneDnssecKeyVersionDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m StageZoneDnssecKeyVersionDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_request_response.go new file mode 100644 index 00000000000..872a5b7e8a9 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/stage_zone_dnssec_key_version_request_response.go @@ -0,0 +1,166 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// StageZoneDnssecKeyVersionRequest wrapper for the StageZoneDnssecKeyVersion operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/dns/StageZoneDnssecKeyVersion.go.html to see an example of how to use StageZoneDnssecKeyVersionRequest. +type StageZoneDnssecKeyVersionRequest struct { + + // The OCID of the target zone. + ZoneId *string `mandatory:"true" contributesTo:"path" name:"zoneId"` + + // Details for staging a DnssecKeyVersion. + StageZoneDnssecKeyVersionDetails `contributesTo:"body"` + + // The `If-Match` header field makes the request method conditional on the + // existence of at least one current representation of the target resource, + // when the field-value is `*`, or having a current representation of the + // target resource that has an entity-tag matching a member of the list of + // entity-tags provided in the field-value. + IfMatch *string `mandatory:"false" contributesTo:"header" name:"If-Match"` + + // The `If-Unmodified-Since` header field makes the request method + // conditional on the selected representation's last modification date being + // earlier than or equal to the date provided in the field-value. This + // field accomplishes the same purpose as If-Match for cases where the user + // agent does not have an entity-tag for the representation. + IfUnmodifiedSince *string `mandatory:"false" contributesTo:"header" name:"If-Unmodified-Since"` + + // A token that uniquely identifies a request so it can be retried in case + // of a timeout or server error without risk of executing that same action + // again. Retry tokens expire after 24 hours, but can be invalidated before + // then due to conflicting operations (for example, if a resource has been + // deleted and purged from the system, then a retry of the original creation + // request may be rejected). + OpcRetryToken *string `mandatory:"false" contributesTo:"header" name:"opc-retry-token"` + + // Unique Oracle-assigned identifier for the request. If you need + // to contact Oracle about a particular request, please provide + // the request ID. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // Specifies to operate only on resources that have a matching DNS scope. + Scope StageZoneDnssecKeyVersionScopeEnum `mandatory:"false" contributesTo:"query" name:"scope" omitEmpty:"true"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request StageZoneDnssecKeyVersionRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request StageZoneDnssecKeyVersionRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request StageZoneDnssecKeyVersionRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request StageZoneDnssecKeyVersionRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request StageZoneDnssecKeyVersionRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingStageZoneDnssecKeyVersionScopeEnum(string(request.Scope)); !ok && request.Scope != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", request.Scope, strings.Join(GetStageZoneDnssecKeyVersionScopeEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// StageZoneDnssecKeyVersionResponse wrapper for the StageZoneDnssecKeyVersion operation +type StageZoneDnssecKeyVersionResponse struct { + + // The underlying http response + RawResponse *http.Response + + // Unique Oracle-assigned identifier for the request. If you need to + // contact Oracle about a particular request, please provide the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` +} + +func (response StageZoneDnssecKeyVersionResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response StageZoneDnssecKeyVersionResponse) HTTPResponse() *http.Response { + return response.RawResponse +} + +// StageZoneDnssecKeyVersionScopeEnum Enum with underlying type: string +type StageZoneDnssecKeyVersionScopeEnum string + +// Set of constants representing the allowable values for StageZoneDnssecKeyVersionScopeEnum +const ( + StageZoneDnssecKeyVersionScopeGlobal StageZoneDnssecKeyVersionScopeEnum = "GLOBAL" + StageZoneDnssecKeyVersionScopePrivate StageZoneDnssecKeyVersionScopeEnum = "PRIVATE" +) + +var mappingStageZoneDnssecKeyVersionScopeEnum = map[string]StageZoneDnssecKeyVersionScopeEnum{ + "GLOBAL": StageZoneDnssecKeyVersionScopeGlobal, + "PRIVATE": StageZoneDnssecKeyVersionScopePrivate, +} + +var mappingStageZoneDnssecKeyVersionScopeEnumLowerCase = map[string]StageZoneDnssecKeyVersionScopeEnum{ + "global": StageZoneDnssecKeyVersionScopeGlobal, + "private": StageZoneDnssecKeyVersionScopePrivate, +} + +// GetStageZoneDnssecKeyVersionScopeEnumValues Enumerates the set of values for StageZoneDnssecKeyVersionScopeEnum +func GetStageZoneDnssecKeyVersionScopeEnumValues() []StageZoneDnssecKeyVersionScopeEnum { + values := make([]StageZoneDnssecKeyVersionScopeEnum, 0) + for _, v := range mappingStageZoneDnssecKeyVersionScopeEnum { + values = append(values, v) + } + return values +} + +// GetStageZoneDnssecKeyVersionScopeEnumStringValues Enumerates the set of values in String for StageZoneDnssecKeyVersionScopeEnum +func GetStageZoneDnssecKeyVersionScopeEnumStringValues() []string { + return []string{ + "GLOBAL", + "PRIVATE", + } +} + +// GetMappingStageZoneDnssecKeyVersionScopeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingStageZoneDnssecKeyVersionScopeEnum(val string) (StageZoneDnssecKeyVersionScopeEnum, bool) { + enum, ok := mappingStageZoneDnssecKeyVersionScopeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_attachment_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_attachment_request_response.go index 382f5a3e54c..9d1d3f60439 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_attachment_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_attachment_request_response.go @@ -104,6 +104,10 @@ type UpdateSteeringPolicyAttachmentResponse struct { // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + // The current version of the resource, ending with a // representation-specific suffix. This value may be used in If-Match // and If-None-Match headers for later requests of the same resource. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_request_response.go index 4455ca4a2c1..59f4deb260d 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_steering_policy_request_response.go @@ -104,6 +104,10 @@ type UpdateSteeringPolicyResponse struct { // contact Oracle about a particular request, please provide the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + // Unique Oracle-assigned identifier for the asynchronous request. + // You can use this to query status of the asynchronous operation. + OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` + // The current version of the resource, ending with a // representation-specific suffix. This value may be used in If-Match // and If-None-Match headers for later requests of the same resource. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_zone_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_zone_details.go index 4b35f00282a..8e4551312d2 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_zone_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/update_zone_details.go @@ -32,6 +32,27 @@ type UpdateZoneDetails struct { // **Example:** `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"` + // The state of DNSSEC on the zone. + // For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent + // trust anchor) must also have DNSSEC correctly set up. + // After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the + // `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. + // Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + // New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. + // To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old + // `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + // To remove the old DS record without causing service disruption, wait until the old DS record's TTL has + // expired, and the new DS record has propagated. After the DS replacement has been completed, then the + // `PromoteZoneDnssecKeyVersion` operation must be called. + // Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many + // days are left until expiration. + // We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the + // necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + // Enabling DNSSEC results in additional records in DNS responses which increases their size and can + // cause higher response latency. + // For more information, see DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). + DnssecState ZoneDnssecStateEnum `mandatory:"false" json:"dnssecState,omitempty"` + // External master servers for the zone. `externalMasters` becomes a // required parameter when the `zoneType` value is `SECONDARY`. ExternalMasters []ExternalMaster `mandatory:"false" json:"externalMasters"` @@ -51,6 +72,9 @@ func (m UpdateZoneDetails) String() string { func (m UpdateZoneDetails) ValidateEnumValue() (bool, error) { errMessage := []string{} + if _, ok := GetMappingZoneDnssecStateEnum(string(m.DnssecState)); !ok && m.DnssecState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DnssecState: %s. Supported values are: %s.", m.DnssecState, strings.Join(GetZoneDnssecStateEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone.go index 579b49eaec5..3484744980a 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone.go @@ -44,6 +44,27 @@ type Zone struct { // **Example:** `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"true" json:"definedTags"` + // The state of DNSSEC on the zone. + // For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent + // trust anchor) must also have DNSSEC correctly set up. + // After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the + // `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. + // Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + // New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. + // To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old + // `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + // To remove the old DS record without causing service disruption, wait until the old DS record's TTL has + // expired, and the new DS record has propagated. After the DS replacement has been completed, then the + // `PromoteZoneDnssecKeyVersion` operation must be called. + // Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many + // days are left until expiration. + // We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the + // necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + // Enabling DNSSEC results in additional records in DNS responses which increases their size and can + // cause higher response latency. + // For more information, see DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). + DnssecState ZoneDnssecStateEnum `mandatory:"true" json:"dnssecState"` + // External master servers for the zone. `externalMasters` becomes a // required parameter when the `zoneType` value is `SECONDARY`. ExternalMasters []ExternalMaster `mandatory:"true" json:"externalMasters"` @@ -85,6 +106,8 @@ type Zone struct { // not part of a private view. ViewId *string `mandatory:"false" json:"viewId"` + DnssecConfig *DnssecConfig `mandatory:"false" json:"dnssecConfig"` + // The OCI nameservers that transfer the zone data with external nameservers. ZoneTransferServers []ZoneTransferServer `mandatory:"false" json:"zoneTransferServers"` } @@ -104,6 +127,9 @@ func (m Zone) ValidateEnumValue() (bool, error) { if _, ok := GetMappingScopeEnum(string(m.Scope)); !ok && m.Scope != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", m.Scope, strings.Join(GetScopeEnumStringValues(), ","))) } + if _, ok := GetMappingZoneDnssecStateEnum(string(m.DnssecState)); !ok && m.DnssecState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DnssecState: %s. Supported values are: %s.", m.DnssecState, strings.Join(GetZoneDnssecStateEnumStringValues(), ","))) + } if _, ok := GetMappingZoneLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetZoneLifecycleStateEnumStringValues(), ","))) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_dnssec_state.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_dnssec_state.go new file mode 100644 index 00000000000..69012747616 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_dnssec_state.go @@ -0,0 +1,57 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "strings" +) + +// ZoneDnssecStateEnum Enum with underlying type: string +type ZoneDnssecStateEnum string + +// Set of constants representing the allowable values for ZoneDnssecStateEnum +const ( + ZoneDnssecStateEnabled ZoneDnssecStateEnum = "ENABLED" + ZoneDnssecStateDisabled ZoneDnssecStateEnum = "DISABLED" +) + +var mappingZoneDnssecStateEnum = map[string]ZoneDnssecStateEnum{ + "ENABLED": ZoneDnssecStateEnabled, + "DISABLED": ZoneDnssecStateDisabled, +} + +var mappingZoneDnssecStateEnumLowerCase = map[string]ZoneDnssecStateEnum{ + "enabled": ZoneDnssecStateEnabled, + "disabled": ZoneDnssecStateDisabled, +} + +// GetZoneDnssecStateEnumValues Enumerates the set of values for ZoneDnssecStateEnum +func GetZoneDnssecStateEnumValues() []ZoneDnssecStateEnum { + values := make([]ZoneDnssecStateEnum, 0) + for _, v := range mappingZoneDnssecStateEnum { + values = append(values, v) + } + return values +} + +// GetZoneDnssecStateEnumStringValues Enumerates the set of values in String for ZoneDnssecStateEnum +func GetZoneDnssecStateEnumStringValues() []string { + return []string{ + "ENABLED", + "DISABLED", + } +} + +// GetMappingZoneDnssecStateEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingZoneDnssecStateEnum(val string) (ZoneDnssecStateEnum, bool) { + enum, ok := mappingZoneDnssecStateEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_summary.go index f0e1d0be937..d6aae7821b3 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zone_summary.go @@ -44,6 +44,27 @@ type ZoneSummary struct { // **Example:** `{"Operations": {"CostCenter": "42"}}` DefinedTags map[string]map[string]interface{} `mandatory:"true" json:"definedTags"` + // The state of DNSSEC on the zone. + // For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent + // trust anchor) must also have DNSSEC correctly set up. + // After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the + // `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. + // Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`. + // New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. + // To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old + // `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`. + // To remove the old DS record without causing service disruption, wait until the old DS record's TTL has + // expired, and the new DS record has propagated. After the DS replacement has been completed, then the + // `PromoteZoneDnssecKeyVersion` operation must be called. + // Metrics are emitted in the `oci_dns` namespace daily for each `KskDnssecKeyVersion` indicating how many + // days are left until expiration. + // We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the + // necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called. + // Enabling DNSSEC results in additional records in DNS responses which increases their size and can + // cause higher response latency. + // For more information, see DNSSEC (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm). + DnssecState ZoneDnssecStateEnum `mandatory:"true" json:"dnssecState"` + // The canonical absolute URL of the resource. Self *string `mandatory:"true" json:"self"` @@ -73,6 +94,8 @@ type ZoneSummary struct { // be null for zones in the global DNS, which are publicly resolvable and // not part of a private view. ViewId *string `mandatory:"false" json:"viewId"` + + DnssecConfig *DnssecConfig `mandatory:"false" json:"dnssecConfig"` } func (m ZoneSummary) String() string { @@ -90,6 +113,9 @@ func (m ZoneSummary) ValidateEnumValue() (bool, error) { if _, ok := GetMappingScopeEnum(string(m.Scope)); !ok && m.Scope != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Scope: %s. Supported values are: %s.", m.Scope, strings.Join(GetScopeEnumStringValues(), ","))) } + if _, ok := GetMappingZoneDnssecStateEnum(string(m.DnssecState)); !ok && m.DnssecState != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DnssecState: %s. Supported values are: %s.", m.DnssecState, strings.Join(GetZoneDnssecStateEnumStringValues(), ","))) + } if _, ok := GetMappingZoneSummaryLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetZoneSummaryLifecycleStateEnumStringValues(), ","))) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/dns/zsk_dnssec_key_version.go b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zsk_dnssec_key_version.go new file mode 100644 index 00000000000..2e6b70ae8d0 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/dns/zsk_dnssec_key_version.go @@ -0,0 +1,101 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// DNS API +// +// API for the DNS service. Use this API to manage DNS zones, records, and other DNS resources. +// For more information, see Overview of the DNS Service (https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnszonemanagement.htm). +// + +package dns + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// ZskDnssecKeyVersion A zone signing key (ZSK) version. The version information contains timing and configuration data for the ZSK that is used to +// apply DNSSEC on the zone. +type ZskDnssecKeyVersion struct { + + // The UUID of the `DnssecKeyVersion`. + Uuid *string `mandatory:"false" json:"uuid"` + + // The signing algorithm used for the key. + Algorithm DnssecSigningAlgorithmEnum `mandatory:"false" json:"algorithm,omitempty"` + + // The length of the corresponding private key in bytes, expressed as an integer. + LengthInBytes *int `mandatory:"false" json:"lengthInBytes"` + + // The date and time the key version was created, expressed in RFC 3339 timestamp format. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeCreated *common.SDKTime `mandatory:"false" json:"timeCreated"` + + // The date and time the key version was, or will be, published, expressed in RFC 3339 timestamp format. This is + // when the zone contents will include a DNSKEY record corresponding to the key material. + // **Example:** `2016-07-22T17:23:59:00Z` + TimePublished *common.SDKTime `mandatory:"false" json:"timePublished"` + + // The date and time the key version went, or will go, active, expressed in RFC 3339 timestamp format. This is + // when the key material will be used to generate RRSIGs. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeActivated *common.SDKTime `mandatory:"false" json:"timeActivated"` + + // The date and time the key version went, or will go, inactive, expressed in RFC 3339 timestamp format. This + // is when the key material will no longer be used to generate RRSIGs. For a key signing key (KSK) `DnssecKeyVersion`, this is + // populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeInactivated *common.SDKTime `mandatory:"false" json:"timeInactivated"` + + // The date and time the key version was, or will be, unpublished, expressed in RFC 3339 timestamp format. This + // is when the corresponding DNSKEY will be removed from zone contents. For a key signing key (KSK) `DnssecKeyVersion`, this is + // populated after `PromoteZoneDnssecKeyVersion` has been called on its successor `DnssecKeyVersion`. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeUnpublished *common.SDKTime `mandatory:"false" json:"timeUnpublished"` + + // The date and time at which the recommended key version publication/activation lifetime ends, expressed in RFC + // 3339 timestamp format. This is when the corresponding DNSKEY should no longer exist in zone contents and no + // longer be used to generate RRSIGs. For a key sigining key (KSK), if `PromoteZoneDnssecKeyVersion` has not been called on this + // `DnssecKeyVersion`'s successor then it will remain active for arbitrarily long past its recommended lifetime. + // This prevents service disruption at the potential increased risk of key compromise. + // **Example:** `2016-07-22T17:23:59:00Z` + TimeExpired *common.SDKTime `mandatory:"false" json:"timeExpired"` + + // The date and time the key version was promoted expressed in RFC 3339 timestamp format. + // **Example:** `2016-07-22T17:23:59:00Z` + TimePromoted *common.SDKTime `mandatory:"false" json:"timePromoted"` + + // When populated, this is the UUID of the `DnssecKeyVersion` that this `DnssecKeyVersion` will replace or has + // replaced. + PredecessorDnssecKeyVersionUuid *string `mandatory:"false" json:"predecessorDnssecKeyVersionUuid"` + + // When populated, this is the UUID of the `DnssecKeyVersion` that will replace, or has replaced, this + // `DnssecKeyVersion`. + SuccessorDnssecKeyVersionUuid *string `mandatory:"false" json:"successorDnssecKeyVersionUuid"` + + // The key tag associated with the `DnssecKeyVersion`. This key tag will be present in the RRSIG and DS records + // associated with the key material for this `DnssecKeyVersion`. For more information about key tags, see + // RFC 4034 (https://tools.ietf.org/html/rfc4034). + KeyTag *int `mandatory:"false" json:"keyTag"` +} + +func (m ZskDnssecKeyVersion) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m ZskDnssecKeyVersion) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if _, ok := GetMappingDnssecSigningAlgorithmEnum(string(m.Algorithm)); !ok && m.Algorithm != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Algorithm: %s. Supported values are: %s.", m.Algorithm, strings.Join(GetDnssecSigningAlgorithmEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/copy_deployment_backup_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/copy_deployment_backup_request_response.go index 18dae51e791..72df5e67e03 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/copy_deployment_backup_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/copy_deployment_backup_request_response.go @@ -87,6 +87,9 @@ type CopyDeploymentBackupResponse struct { // The underlying http response RawResponse *http.Response + // The DeploymentBackup instance + DeploymentBackup `presentIn:"body"` + // A unique Oracle-assigned identifier for an asynchronous request. You can use this to query // status of the asynchronous operation. OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` @@ -94,6 +97,9 @@ type CopyDeploymentBackupResponse struct { // A unique Oracle-assigned identifier for the request. If you need to contact Oracle about a // particular request, please include the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // For optimistic concurrency control. See `if-match`. + Etag *string `presentIn:"header" name:"etag"` } func (response CopyDeploymentBackupResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_database_registration_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_database_registration_details.go index e1ea7cb45c2..683e5182eb4 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_database_registration_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_database_registration_details.go @@ -70,8 +70,8 @@ type CreateDatabaseRegistrationDetails struct { // to the database node to connect to. By default the mode would be DIRECT. SessionMode CreateDatabaseRegistrationDetailsSessionModeEnum `mandatory:"false" json:"sessionMode,omitempty"` - // The wallet contents Oracle GoldenGate uses to make connections to a database. This - // attribute is expected to be base64 encoded. + // The wallet contents Oracle GoldenGate uses to make connections to a database. + // This attribute is expected to be base64 encoded. Wallet *string `mandatory:"false" json:"wallet"` // Refers to the customer's vault OCID. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_backup_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_backup_request_response.go index f321196f834..588a81d64be 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_backup_request_response.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_backup_request_response.go @@ -78,6 +78,9 @@ type CreateDeploymentBackupResponse struct { // The underlying http response RawResponse *http.Response + // The DeploymentBackup instance + DeploymentBackup `presentIn:"body"` + // A unique Oracle-assigned identifier for an asynchronous request. You can use this to query // status of the asynchronous operation. OpcWorkRequestId *string `presentIn:"header" name:"opc-work-request-id"` @@ -85,6 +88,9 @@ type CreateDeploymentBackupResponse struct { // A unique Oracle-assigned identifier for the request. If you need to contact Oracle about a // particular request, please include the request ID. OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // For optimistic concurrency control. See `if-match`. + Etag *string `presentIn:"header" name:"etag"` } func (response CreateDeploymentBackupResponse) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_details.go index a6219e67397..2fcbd42027f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_deployment_details.go @@ -43,6 +43,9 @@ type CreateDeploymentDetails struct { // Its use is discouraged in favor of 'DATABASE_ORACLE'. DeploymentType DeploymentTypeEnum `mandatory:"true" json:"deploymentType"` + // Specifies whether the deployment is used in a production or development/testing environment. + EnvironmentType EnvironmentTypeEnum `mandatory:"false" json:"environmentType,omitempty"` + // Metadata about this specific object. Description *string `mandatory:"false" json:"description"` @@ -98,6 +101,9 @@ func (m CreateDeploymentDetails) ValidateEnumValue() (bool, error) { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DeploymentType: %s. Supported values are: %s.", m.DeploymentType, strings.Join(GetDeploymentTypeEnumStringValues(), ","))) } + if _, ok := GetMappingEnvironmentTypeEnum(string(m.EnvironmentType)); !ok && m.EnvironmentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for EnvironmentType: %s. Supported values are: %s.", m.EnvironmentType, strings.Join(GetEnvironmentTypeEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_ogg_deployment_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_ogg_deployment_details.go index 2308cf1bded..f081d5daba8 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_ogg_deployment_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_ogg_deployment_details.go @@ -48,6 +48,8 @@ type CreateOggDeploymentDetails struct { // Version of OGG OggVersion *string `mandatory:"false" json:"oggVersion"` + + GroupToRolesMapping *GroupToRolesMappingDetails `mandatory:"false" json:"groupToRolesMapping"` } func (m CreateOggDeploymentDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_oracle_connection_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_oracle_connection_details.go index ed22c18f9e1..4a5fcdb7789 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_oracle_connection_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/create_oracle_connection_details.go @@ -67,8 +67,8 @@ type CreateOracleConnectionDetails struct { // Connect descriptor or Easy Connect Naming method used to connect to a database. ConnectionString *string `mandatory:"false" json:"connectionString"` - // The wallet contents Oracle GoldenGate uses to make connections to a database. This - // attribute is expected to be base64 encoded. + // The wallet contents Oracle GoldenGate uses to make connections to a database. + // This attribute is expected to be base64 encoded. Wallet *string `mandatory:"false" json:"wallet"` // Deprecated: this field will be removed in future versions. Either specify the private IP in the connectionString or host diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment.go index 0cb139c3144..45d0e76b46f 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment.go @@ -32,6 +32,10 @@ type Deployment struct { // The Oracle license model that applies to a Deployment. LicenseModel LicenseModelEnum `mandatory:"true" json:"licenseModel"` + // The deployment category defines the broad separation of the deployment type into three categories. + // Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. + Category DeploymentCategoryEnum `mandatory:"true" json:"category"` + // The Minimum number of OCPUs to be made available for this Deployment. CpuCoreCount *int `mandatory:"true" json:"cpuCoreCount"` @@ -97,6 +101,9 @@ type Deployment struct { // A three-label Fully Qualified Domain Name (FQDN) for a resource. Fqdn *string `mandatory:"false" json:"fqdn"` + // Specifies whether the deployment is used in a production or development/testing environment. + EnvironmentType EnvironmentTypeEnum `mandatory:"false" json:"environmentType,omitempty"` + // An array of Network Security Group OCIDs used to define network access for either Deployments or Connections. NsgIds []string `mandatory:"false" json:"nsgIds"` @@ -134,6 +141,7 @@ type Deployment struct { // The amount of storage being utilized (in bytes) StorageUtilizationInBytes *int64 `mandatory:"false" json:"storageUtilizationInBytes"` + // Deprecated: This field is not updated and will be removed in future versions. If storage utilization exceeds the limit, the respective warning message will appear in deployment messages, which can be accessed through /messages?deploymentId=. // Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. IsStorageUtilizationLimitExceeded *bool `mandatory:"false" json:"isStorageUtilizationLimitExceeded"` @@ -176,6 +184,9 @@ func (m Deployment) ValidateEnumValue() (bool, error) { if _, ok := GetMappingLicenseModelEnum(string(m.LicenseModel)); !ok && m.LicenseModel != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LicenseModel: %s. Supported values are: %s.", m.LicenseModel, strings.Join(GetLicenseModelEnumStringValues(), ","))) } + if _, ok := GetMappingDeploymentCategoryEnum(string(m.Category)); !ok && m.Category != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Category: %s. Supported values are: %s.", m.Category, strings.Join(GetDeploymentCategoryEnumStringValues(), ","))) + } if _, ok := GetMappingDeploymentTypeEnum(string(m.DeploymentType)); !ok && m.DeploymentType != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DeploymentType: %s. Supported values are: %s.", m.DeploymentType, strings.Join(GetDeploymentTypeEnumStringValues(), ","))) } @@ -186,6 +197,9 @@ func (m Deployment) ValidateEnumValue() (bool, error) { if _, ok := GetMappingLifecycleSubStateEnum(string(m.LifecycleSubState)); !ok && m.LifecycleSubState != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleSubState: %s. Supported values are: %s.", m.LifecycleSubState, strings.Join(GetLifecycleSubStateEnumStringValues(), ","))) } + if _, ok := GetMappingEnvironmentTypeEnum(string(m.EnvironmentType)); !ok && m.EnvironmentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for EnvironmentType: %s. Supported values are: %s.", m.EnvironmentType, strings.Join(GetEnvironmentTypeEnumStringValues(), ","))) + } if _, ok := GetMappingMaintenanceActionTypeEnum(string(m.NextMaintenanceActionType)); !ok && m.NextMaintenanceActionType != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for NextMaintenanceActionType: %s. Supported values are: %s.", m.NextMaintenanceActionType, strings.Join(GetMaintenanceActionTypeEnumStringValues(), ","))) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_category.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_category.go new file mode 100644 index 00000000000..93d5208ce2d --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_category.go @@ -0,0 +1,60 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "strings" +) + +// DeploymentCategoryEnum Enum with underlying type: string +type DeploymentCategoryEnum string + +// Set of constants representing the allowable values for DeploymentCategoryEnum +const ( + DeploymentCategoryDataReplication DeploymentCategoryEnum = "DATA_REPLICATION" + DeploymentCategoryStreamAnalytics DeploymentCategoryEnum = "STREAM_ANALYTICS" + DeploymentCategoryDataTransforms DeploymentCategoryEnum = "DATA_TRANSFORMS" +) + +var mappingDeploymentCategoryEnum = map[string]DeploymentCategoryEnum{ + "DATA_REPLICATION": DeploymentCategoryDataReplication, + "STREAM_ANALYTICS": DeploymentCategoryStreamAnalytics, + "DATA_TRANSFORMS": DeploymentCategoryDataTransforms, +} + +var mappingDeploymentCategoryEnumLowerCase = map[string]DeploymentCategoryEnum{ + "data_replication": DeploymentCategoryDataReplication, + "stream_analytics": DeploymentCategoryStreamAnalytics, + "data_transforms": DeploymentCategoryDataTransforms, +} + +// GetDeploymentCategoryEnumValues Enumerates the set of values for DeploymentCategoryEnum +func GetDeploymentCategoryEnumValues() []DeploymentCategoryEnum { + values := make([]DeploymentCategoryEnum, 0) + for _, v := range mappingDeploymentCategoryEnum { + values = append(values, v) + } + return values +} + +// GetDeploymentCategoryEnumStringValues Enumerates the set of values in String for DeploymentCategoryEnum +func GetDeploymentCategoryEnumStringValues() []string { + return []string{ + "DATA_REPLICATION", + "STREAM_ANALYTICS", + "DATA_TRANSFORMS", + } +} + +// GetMappingDeploymentCategoryEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingDeploymentCategoryEnum(val string) (DeploymentCategoryEnum, bool) { + enum, ok := mappingDeploymentCategoryEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_collection.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_collection.go new file mode 100644 index 00000000000..2a22270d740 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_collection.go @@ -0,0 +1,39 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DeploymentEnvironmentCollection The list of DeploymentEnvironmentDescriptor objects. +type DeploymentEnvironmentCollection struct { + + // Array of DeploymentEnvironmentSummary objects. + Items []DeploymentEnvironmentSummary `mandatory:"true" json:"items"` +} + +func (m DeploymentEnvironmentCollection) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DeploymentEnvironmentCollection) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_summary.go new file mode 100644 index 00000000000..5ec0184ec09 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_environment_summary.go @@ -0,0 +1,73 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// DeploymentEnvironmentSummary The metadata specific to a production or development/testing environment. +type DeploymentEnvironmentSummary struct { + + // Specifies whether the deployment is used in a production or development/testing environment. + EnvironmentType EnvironmentTypeEnum `mandatory:"true" json:"environmentType"` + + // The deployment category defines the broad separation of the deployment type into three categories. + // Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. + Category DeploymentCategoryEnum `mandatory:"true" json:"category"` + + // The minimum CPU core count. + MinCpuCoreCount *int `mandatory:"true" json:"minCpuCoreCount"` + + // The default CPU core count. + DefaultCpuCoreCount *int `mandatory:"true" json:"defaultCpuCoreCount"` + + // The maximum CPU core count. + MaxCpuCoreCount *int `mandatory:"true" json:"maxCpuCoreCount"` + + // Specifies whether the "Auto scaling" option should be enabled by default or not. + IsAutoScalingEnabledByDefault *bool `mandatory:"true" json:"isAutoScalingEnabledByDefault"` + + // The multiplier value between CPU core count and network bandwidth. + NetworkBandwidthPerOcpuInGbps *int `mandatory:"true" json:"networkBandwidthPerOcpuInGbps"` + + // The multiplier value between CPU core count and memory size. + MemoryPerOcpuInGBs *int `mandatory:"true" json:"memoryPerOcpuInGBs"` + + // The multiplier value between CPU core count and storage usage limit size. + StorageUsageLimitPerOcpuInGBs *int `mandatory:"true" json:"storageUsageLimitPerOcpuInGBs"` + + // An object's Display Name. + DisplayName *string `mandatory:"false" json:"displayName"` +} + +func (m DeploymentEnvironmentSummary) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m DeploymentEnvironmentSummary) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingEnvironmentTypeEnum(string(m.EnvironmentType)); !ok && m.EnvironmentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for EnvironmentType: %s. Supported values are: %s.", m.EnvironmentType, strings.Join(GetEnvironmentTypeEnumStringValues(), ","))) + } + if _, ok := GetMappingDeploymentCategoryEnum(string(m.Category)); !ok && m.Category != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Category: %s. Supported values are: %s.", m.Category, strings.Join(GetDeploymentCategoryEnumStringValues(), ","))) + } + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_summary.go index 7eb46ad58b0..9eab0b98407 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_summary.go @@ -32,6 +32,15 @@ type DeploymentSummary struct { // The Oracle license model that applies to a Deployment. LicenseModel LicenseModelEnum `mandatory:"true" json:"licenseModel"` + // The deployment category defines the broad separation of the deployment type into three categories. + // Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. + Category DeploymentCategoryEnum `mandatory:"true" json:"category"` + + // The type of deployment, which can be any one of the Allowed values. + // NOTE: Use of the value 'OGG' is maintained for backward compatibility purposes. + // Its use is discouraged in favor of 'DATABASE_ORACLE'. + DeploymentType DeploymentTypeEnum `mandatory:"true" json:"deploymentType"` + // An object's Display Name. DisplayName *string `mandatory:"false" json:"displayName"` @@ -74,6 +83,9 @@ type DeploymentSummary struct { // The loadbalancer of the public deployment created in the customer subnet. LoadBalancerId *string `mandatory:"false" json:"loadBalancerId"` + // Specifies whether the deployment is used in a production or development/testing environment. + EnvironmentType EnvironmentTypeEnum `mandatory:"false" json:"environmentType,omitempty"` + // A three-label Fully Qualified Domain Name (FQDN) for a resource. Fqdn *string `mandatory:"false" json:"fqdn"` @@ -114,14 +126,10 @@ type DeploymentSummary struct { // RFC3339 (https://tools.ietf.org/html/rfc3339), such as `2016-08-25T21:10:29.600Z`. TimeUpgradeRequired *common.SDKTime `mandatory:"false" json:"timeUpgradeRequired"` - // The type of deployment, which can be any one of the Allowed values. - // NOTE: Use of the value 'OGG' is maintained for backward compatibility purposes. - // Its use is discouraged in favor of 'DATABASE_ORACLE'. - DeploymentType DeploymentTypeEnum `mandatory:"false" json:"deploymentType,omitempty"` - // The amount of storage being utilized (in bytes) StorageUtilizationInBytes *int64 `mandatory:"false" json:"storageUtilizationInBytes"` + // Deprecated: This field is not updated and will be removed in future versions. If storage utilization exceeds the limit, the respective warning message will appear in deployment messages, which can be accessed through /messages?deploymentId=. // Indicator will be true if the amount of storage being utilized exceeds the allowable storage utilization limit. Exceeding the limit may be an indication of a misconfiguration of the deployment's GoldenGate service. IsStorageUtilizationLimitExceeded *bool `mandatory:"false" json:"isStorageUtilizationLimitExceeded"` @@ -141,6 +149,12 @@ func (m DeploymentSummary) ValidateEnumValue() (bool, error) { if _, ok := GetMappingLicenseModelEnum(string(m.LicenseModel)); !ok && m.LicenseModel != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LicenseModel: %s. Supported values are: %s.", m.LicenseModel, strings.Join(GetLicenseModelEnumStringValues(), ","))) } + if _, ok := GetMappingDeploymentCategoryEnum(string(m.Category)); !ok && m.Category != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Category: %s. Supported values are: %s.", m.Category, strings.Join(GetDeploymentCategoryEnumStringValues(), ","))) + } + if _, ok := GetMappingDeploymentTypeEnum(string(m.DeploymentType)); !ok && m.DeploymentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DeploymentType: %s. Supported values are: %s.", m.DeploymentType, strings.Join(GetDeploymentTypeEnumStringValues(), ","))) + } if _, ok := GetMappingLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetLifecycleStateEnumStringValues(), ","))) @@ -148,8 +162,8 @@ func (m DeploymentSummary) ValidateEnumValue() (bool, error) { if _, ok := GetMappingLifecycleSubStateEnum(string(m.LifecycleSubState)); !ok && m.LifecycleSubState != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleSubState: %s. Supported values are: %s.", m.LifecycleSubState, strings.Join(GetLifecycleSubStateEnumStringValues(), ","))) } - if _, ok := GetMappingDeploymentTypeEnum(string(m.DeploymentType)); !ok && m.DeploymentType != "" { - errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DeploymentType: %s. Supported values are: %s.", m.DeploymentType, strings.Join(GetDeploymentTypeEnumStringValues(), ","))) + if _, ok := GetMappingEnvironmentTypeEnum(string(m.EnvironmentType)); !ok && m.EnvironmentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for EnvironmentType: %s. Supported values are: %s.", m.EnvironmentType, strings.Join(GetEnvironmentTypeEnumStringValues(), ","))) } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_type_summary.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_type_summary.go index 24914b0e4ed..421719346f6 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_type_summary.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/deployment_type_summary.go @@ -16,11 +16,13 @@ import ( ) // DeploymentTypeSummary The meta-data specific on particular deployment type represented by deploymentType field. +// Deprecated properties: `sourceTechnologies` and `targetTechnologies` are not populated. They will be removed after September 15 2025. +// The list of supported source and target technologies can be accessed using the url provided in `supportedTechnologiesUrl` property. type DeploymentTypeSummary struct { // The deployment category defines the broad separation of the deployment type into three categories. // Currently the separation is 'DATA_REPLICATION', 'STREAM_ANALYTICS' and 'DATA_TRANSFORMS'. - Category DeploymentTypeSummaryCategoryEnum `mandatory:"true" json:"category"` + Category DeploymentCategoryEnum `mandatory:"true" json:"category"` // An object's Display Name. DisplayName *string `mandatory:"true" json:"displayName"` @@ -62,8 +64,8 @@ func (m DeploymentTypeSummary) String() string { // Not recommended for calling this function directly func (m DeploymentTypeSummary) ValidateEnumValue() (bool, error) { errMessage := []string{} - if _, ok := GetMappingDeploymentTypeSummaryCategoryEnum(string(m.Category)); !ok && m.Category != "" { - errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Category: %s. Supported values are: %s.", m.Category, strings.Join(GetDeploymentTypeSummaryCategoryEnumStringValues(), ","))) + if _, ok := GetMappingDeploymentCategoryEnum(string(m.Category)); !ok && m.Category != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Category: %s. Supported values are: %s.", m.Category, strings.Join(GetDeploymentCategoryEnumStringValues(), ","))) } if _, ok := GetMappingDeploymentTypeEnum(string(m.DeploymentType)); !ok && m.DeploymentType != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for DeploymentType: %s. Supported values are: %s.", m.DeploymentType, strings.Join(GetDeploymentTypeEnumStringValues(), ","))) @@ -80,49 +82,3 @@ func (m DeploymentTypeSummary) ValidateEnumValue() (bool, error) { } return false, nil } - -// DeploymentTypeSummaryCategoryEnum Enum with underlying type: string -type DeploymentTypeSummaryCategoryEnum string - -// Set of constants representing the allowable values for DeploymentTypeSummaryCategoryEnum -const ( - DeploymentTypeSummaryCategoryDataReplication DeploymentTypeSummaryCategoryEnum = "DATA_REPLICATION" - DeploymentTypeSummaryCategoryStreamAnalytics DeploymentTypeSummaryCategoryEnum = "STREAM_ANALYTICS" - DeploymentTypeSummaryCategoryDataTransforms DeploymentTypeSummaryCategoryEnum = "DATA_TRANSFORMS" -) - -var mappingDeploymentTypeSummaryCategoryEnum = map[string]DeploymentTypeSummaryCategoryEnum{ - "DATA_REPLICATION": DeploymentTypeSummaryCategoryDataReplication, - "STREAM_ANALYTICS": DeploymentTypeSummaryCategoryStreamAnalytics, - "DATA_TRANSFORMS": DeploymentTypeSummaryCategoryDataTransforms, -} - -var mappingDeploymentTypeSummaryCategoryEnumLowerCase = map[string]DeploymentTypeSummaryCategoryEnum{ - "data_replication": DeploymentTypeSummaryCategoryDataReplication, - "stream_analytics": DeploymentTypeSummaryCategoryStreamAnalytics, - "data_transforms": DeploymentTypeSummaryCategoryDataTransforms, -} - -// GetDeploymentTypeSummaryCategoryEnumValues Enumerates the set of values for DeploymentTypeSummaryCategoryEnum -func GetDeploymentTypeSummaryCategoryEnumValues() []DeploymentTypeSummaryCategoryEnum { - values := make([]DeploymentTypeSummaryCategoryEnum, 0) - for _, v := range mappingDeploymentTypeSummaryCategoryEnum { - values = append(values, v) - } - return values -} - -// GetDeploymentTypeSummaryCategoryEnumStringValues Enumerates the set of values in String for DeploymentTypeSummaryCategoryEnum -func GetDeploymentTypeSummaryCategoryEnumStringValues() []string { - return []string{ - "DATA_REPLICATION", - "STREAM_ANALYTICS", - "DATA_TRANSFORMS", - } -} - -// GetMappingDeploymentTypeSummaryCategoryEnum performs case Insensitive comparison on enum value and return the desired enum -func GetMappingDeploymentTypeSummaryCategoryEnum(val string) (DeploymentTypeSummaryCategoryEnum, bool) { - enum, ok := mappingDeploymentTypeSummaryCategoryEnumLowerCase[strings.ToLower(val)] - return enum, ok -} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/environment_type.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/environment_type.go new file mode 100644 index 00000000000..8889a49162e --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/environment_type.go @@ -0,0 +1,56 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "strings" +) + +// EnvironmentTypeEnum Enum with underlying type: string +type EnvironmentTypeEnum string + +// Set of constants representing the allowable values for EnvironmentTypeEnum +const ( + EnvironmentTypeProduction EnvironmentTypeEnum = "PRODUCTION" + EnvironmentTypeDevelopmentOrTesting EnvironmentTypeEnum = "DEVELOPMENT_OR_TESTING" +) + +var mappingEnvironmentTypeEnum = map[string]EnvironmentTypeEnum{ + "PRODUCTION": EnvironmentTypeProduction, + "DEVELOPMENT_OR_TESTING": EnvironmentTypeDevelopmentOrTesting, +} + +var mappingEnvironmentTypeEnumLowerCase = map[string]EnvironmentTypeEnum{ + "production": EnvironmentTypeProduction, + "development_or_testing": EnvironmentTypeDevelopmentOrTesting, +} + +// GetEnvironmentTypeEnumValues Enumerates the set of values for EnvironmentTypeEnum +func GetEnvironmentTypeEnumValues() []EnvironmentTypeEnum { + values := make([]EnvironmentTypeEnum, 0) + for _, v := range mappingEnvironmentTypeEnum { + values = append(values, v) + } + return values +} + +// GetEnvironmentTypeEnumStringValues Enumerates the set of values in String for EnvironmentTypeEnum +func GetEnvironmentTypeEnumStringValues() []string { + return []string{ + "PRODUCTION", + "DEVELOPMENT_OR_TESTING", + } +} + +// GetMappingEnvironmentTypeEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingEnvironmentTypeEnum(val string) (EnvironmentTypeEnum, bool) { + enum, ok := mappingEnvironmentTypeEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/goldengate_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/goldengate_client.go index 0c0b7c8183d..1d80d8981c2 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/goldengate_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/goldengate_client.go @@ -2576,6 +2576,64 @@ func (client GoldenGateClient) listDeploymentBackups(ctx context.Context, reques return response, err } +// ListDeploymentEnvironments Returns an array of DeploymentEnvironmentDescriptor +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/goldengate/ListDeploymentEnvironments.go.html to see an example of how to use ListDeploymentEnvironments API. +// A default retry strategy applies to this operation ListDeploymentEnvironments() +func (client GoldenGateClient) ListDeploymentEnvironments(ctx context.Context, request ListDeploymentEnvironmentsRequest) (response ListDeploymentEnvironmentsResponse, err error) { + var ociResponse common.OCIResponse + policy := common.DefaultRetryPolicy() + if client.RetryPolicy() != nil { + policy = *client.RetryPolicy() + } + if request.RetryPolicy() != nil { + policy = *request.RetryPolicy() + } + ociResponse, err = common.Retry(ctx, request, client.listDeploymentEnvironments, policy) + if err != nil { + if ociResponse != nil { + if httpResponse := ociResponse.HTTPResponse(); httpResponse != nil { + opcRequestId := httpResponse.Header.Get("opc-request-id") + response = ListDeploymentEnvironmentsResponse{RawResponse: httpResponse, OpcRequestId: &opcRequestId} + } else { + response = ListDeploymentEnvironmentsResponse{} + } + } + return + } + if convertedResponse, ok := ociResponse.(ListDeploymentEnvironmentsResponse); ok { + response = convertedResponse + } else { + err = fmt.Errorf("failed to convert OCIResponse into ListDeploymentEnvironmentsResponse") + } + return +} + +// listDeploymentEnvironments implements the OCIOperation interface (enables retrying operations) +func (client GoldenGateClient) listDeploymentEnvironments(ctx context.Context, request common.OCIRequest, binaryReqBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (common.OCIResponse, error) { + + httpRequest, err := request.HTTPRequest(http.MethodGet, "/deploymentEnvironments", binaryReqBody, extraHeaders) + if err != nil { + return nil, err + } + + var response ListDeploymentEnvironmentsResponse + var httpResponse *http.Response + httpResponse, err = client.Call(ctx, &httpRequest) + defer common.CloseBodyIfValid(httpResponse) + response.RawResponse = httpResponse + if err != nil { + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/goldengate/20200407/DeploymentEnvironmentCollection/ListDeploymentEnvironments" + err = common.PostProcessServiceError(err, "GoldenGate", "ListDeploymentEnvironments", apiReferenceLink) + return response, err + } + + err = common.UnmarshalResponse(httpResponse, &response) + return response, err +} + // ListDeploymentTypes Returns an array of DeploymentTypeDescriptor // // # See also diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/group_to_roles_mapping_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/group_to_roles_mapping_details.go new file mode 100644 index 00000000000..6bf96f48059 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/group_to_roles_mapping_details.go @@ -0,0 +1,57 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// GroupToRolesMappingDetails Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. +// For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. +// User belonging to each group can only perform the actions according to the role the respective group is mapped to. +type GroupToRolesMappingDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. + // It grants administration of security related objects and invoke security related service requests. This role has full privileges. + SecurityGroupId *string `mandatory:"true" json:"securityGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. + // It grants full access to the user, including the ability to alter general, non-security related operational parameters + // and profiles of the server. + AdministratorGroupId *string `mandatory:"false" json:"administratorGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. + // It allows users to perform only operational actions, like starting and stopping resources. + // Operators cannot alter the operational parameters or profiles of the MA server. + OperatorGroupId *string `mandatory:"false" json:"operatorGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. + // It allows information-only service requests, which do not alter or affect the operation of either the MA. + // Examples of query and read-only information include performance metric information and resource status and monitoring information + UserGroupId *string `mandatory:"false" json:"userGroupId"` +} + +func (m GroupToRolesMappingDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m GroupToRolesMappingDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/list_deployment_environments_request_response.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/list_deployment_environments_request_response.go new file mode 100644 index 00000000000..3bfb28cffef --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/list_deployment_environments_request_response.go @@ -0,0 +1,202 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +package goldengate + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "net/http" + "strings" +) + +// ListDeploymentEnvironmentsRequest wrapper for the ListDeploymentEnvironments operation +// +// # See also +// +// Click https://docs.cloud.oracle.com/en-us/iaas/tools/go-sdk-examples/latest/goldengate/ListDeploymentEnvironments.go.html to see an example of how to use ListDeploymentEnvironmentsRequest. +type ListDeploymentEnvironmentsRequest struct { + + // The OCID of the compartment that contains the work request. Work requests should be scoped + // to the same compartment as the resource the work request affects. If the work request concerns + // multiple resources, and those resources are not in the same compartment, it is up to the service team + // to pick the primary resource whose compartment should be used. + CompartmentId *string `mandatory:"true" contributesTo:"query" name:"compartmentId"` + + // The client request ID for tracing. + OpcRequestId *string `mandatory:"false" contributesTo:"header" name:"opc-request-id"` + + // The maximum number of items to return. + Limit *int `mandatory:"false" contributesTo:"query" name:"limit"` + + // The page token representing the page at which to start retrieving results. This is usually + // retrieved from a previous list call. + Page *string `mandatory:"false" contributesTo:"query" name:"page"` + + // The sort order to use, either 'asc' or 'desc'. + SortOrder ListDeploymentEnvironmentsSortOrderEnum `mandatory:"false" contributesTo:"query" name:"sortOrder" omitEmpty:"true"` + + // The field to sort by. Only one sort order can be provided. Default order for 'timeCreated' is + // descending. Default order for 'displayName' is ascending. If no value is specified + // timeCreated is the default. + SortBy ListDeploymentEnvironmentsSortByEnum `mandatory:"false" contributesTo:"query" name:"sortBy" omitEmpty:"true"` + + // Metadata about the request. This information will not be transmitted to the service, but + // represents information that the SDK will consume to drive retry behavior. + RequestMetadata common.RequestMetadata +} + +func (request ListDeploymentEnvironmentsRequest) String() string { + return common.PointerString(request) +} + +// HTTPRequest implements the OCIRequest interface +func (request ListDeploymentEnvironmentsRequest) HTTPRequest(method, path string, binaryRequestBody *common.OCIReadSeekCloser, extraHeaders map[string]string) (http.Request, error) { + + _, err := request.ValidateEnumValue() + if err != nil { + return http.Request{}, err + } + return common.MakeDefaultHTTPRequestWithTaggedStructAndExtraHeaders(method, path, request, extraHeaders) +} + +// BinaryRequestBody implements the OCIRequest interface +func (request ListDeploymentEnvironmentsRequest) BinaryRequestBody() (*common.OCIReadSeekCloser, bool) { + + return nil, false + +} + +// RetryPolicy implements the OCIRetryableRequest interface. This retrieves the specified retry policy. +func (request ListDeploymentEnvironmentsRequest) RetryPolicy() *common.RetryPolicy { + return request.RequestMetadata.RetryPolicy +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (request ListDeploymentEnvironmentsRequest) ValidateEnumValue() (bool, error) { + errMessage := []string{} + if _, ok := GetMappingListDeploymentEnvironmentsSortOrderEnum(string(request.SortOrder)); !ok && request.SortOrder != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for SortOrder: %s. Supported values are: %s.", request.SortOrder, strings.Join(GetListDeploymentEnvironmentsSortOrderEnumStringValues(), ","))) + } + if _, ok := GetMappingListDeploymentEnvironmentsSortByEnum(string(request.SortBy)); !ok && request.SortBy != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for SortBy: %s. Supported values are: %s.", request.SortBy, strings.Join(GetListDeploymentEnvironmentsSortByEnumStringValues(), ","))) + } + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} + +// ListDeploymentEnvironmentsResponse wrapper for the ListDeploymentEnvironments operation +type ListDeploymentEnvironmentsResponse struct { + + // The underlying http response + RawResponse *http.Response + + // A list of DeploymentEnvironmentCollection instances + DeploymentEnvironmentCollection `presentIn:"body"` + + // A unique Oracle-assigned identifier for the request. If you need to contact Oracle about a + // particular request, please include the request ID. + OpcRequestId *string `presentIn:"header" name:"opc-request-id"` + + // The page token represents the page to start retrieving results. This is usually retrieved + // from a previous list call. + OpcNextPage *string `presentIn:"header" name:"opc-next-page"` +} + +func (response ListDeploymentEnvironmentsResponse) String() string { + return common.PointerString(response) +} + +// HTTPResponse implements the OCIResponse interface +func (response ListDeploymentEnvironmentsResponse) HTTPResponse() *http.Response { + return response.RawResponse +} + +// ListDeploymentEnvironmentsSortOrderEnum Enum with underlying type: string +type ListDeploymentEnvironmentsSortOrderEnum string + +// Set of constants representing the allowable values for ListDeploymentEnvironmentsSortOrderEnum +const ( + ListDeploymentEnvironmentsSortOrderAsc ListDeploymentEnvironmentsSortOrderEnum = "ASC" + ListDeploymentEnvironmentsSortOrderDesc ListDeploymentEnvironmentsSortOrderEnum = "DESC" +) + +var mappingListDeploymentEnvironmentsSortOrderEnum = map[string]ListDeploymentEnvironmentsSortOrderEnum{ + "ASC": ListDeploymentEnvironmentsSortOrderAsc, + "DESC": ListDeploymentEnvironmentsSortOrderDesc, +} + +var mappingListDeploymentEnvironmentsSortOrderEnumLowerCase = map[string]ListDeploymentEnvironmentsSortOrderEnum{ + "asc": ListDeploymentEnvironmentsSortOrderAsc, + "desc": ListDeploymentEnvironmentsSortOrderDesc, +} + +// GetListDeploymentEnvironmentsSortOrderEnumValues Enumerates the set of values for ListDeploymentEnvironmentsSortOrderEnum +func GetListDeploymentEnvironmentsSortOrderEnumValues() []ListDeploymentEnvironmentsSortOrderEnum { + values := make([]ListDeploymentEnvironmentsSortOrderEnum, 0) + for _, v := range mappingListDeploymentEnvironmentsSortOrderEnum { + values = append(values, v) + } + return values +} + +// GetListDeploymentEnvironmentsSortOrderEnumStringValues Enumerates the set of values in String for ListDeploymentEnvironmentsSortOrderEnum +func GetListDeploymentEnvironmentsSortOrderEnumStringValues() []string { + return []string{ + "ASC", + "DESC", + } +} + +// GetMappingListDeploymentEnvironmentsSortOrderEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListDeploymentEnvironmentsSortOrderEnum(val string) (ListDeploymentEnvironmentsSortOrderEnum, bool) { + enum, ok := mappingListDeploymentEnvironmentsSortOrderEnumLowerCase[strings.ToLower(val)] + return enum, ok +} + +// ListDeploymentEnvironmentsSortByEnum Enum with underlying type: string +type ListDeploymentEnvironmentsSortByEnum string + +// Set of constants representing the allowable values for ListDeploymentEnvironmentsSortByEnum +const ( + ListDeploymentEnvironmentsSortByTimecreated ListDeploymentEnvironmentsSortByEnum = "timeCreated" + ListDeploymentEnvironmentsSortByDisplayname ListDeploymentEnvironmentsSortByEnum = "displayName" +) + +var mappingListDeploymentEnvironmentsSortByEnum = map[string]ListDeploymentEnvironmentsSortByEnum{ + "timeCreated": ListDeploymentEnvironmentsSortByTimecreated, + "displayName": ListDeploymentEnvironmentsSortByDisplayname, +} + +var mappingListDeploymentEnvironmentsSortByEnumLowerCase = map[string]ListDeploymentEnvironmentsSortByEnum{ + "timecreated": ListDeploymentEnvironmentsSortByTimecreated, + "displayname": ListDeploymentEnvironmentsSortByDisplayname, +} + +// GetListDeploymentEnvironmentsSortByEnumValues Enumerates the set of values for ListDeploymentEnvironmentsSortByEnum +func GetListDeploymentEnvironmentsSortByEnumValues() []ListDeploymentEnvironmentsSortByEnum { + values := make([]ListDeploymentEnvironmentsSortByEnum, 0) + for _, v := range mappingListDeploymentEnvironmentsSortByEnum { + values = append(values, v) + } + return values +} + +// GetListDeploymentEnvironmentsSortByEnumStringValues Enumerates the set of values in String for ListDeploymentEnvironmentsSortByEnum +func GetListDeploymentEnvironmentsSortByEnumStringValues() []string { + return []string{ + "timeCreated", + "displayName", + } +} + +// GetMappingListDeploymentEnvironmentsSortByEnum performs case Insensitive comparison on enum value and return the desired enum +func GetMappingListDeploymentEnvironmentsSortByEnum(val string) (ListDeploymentEnvironmentsSortByEnum, bool) { + enum, ok := mappingListDeploymentEnvironmentsSortByEnumLowerCase[strings.ToLower(val)] + return enum, ok +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/ogg_deployment.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/ogg_deployment.go index ac024c38bac..493c9dcc9c7 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/ogg_deployment.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/ogg_deployment.go @@ -39,6 +39,8 @@ type OggDeployment struct { // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the Secret where the deployment password is stored. PasswordSecretId *string `mandatory:"false" json:"passwordSecretId"` + + GroupToRolesMapping *GroupToRolesMappingDetails `mandatory:"false" json:"groupToRolesMapping"` } func (m OggDeployment) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/test_connection_assignment_result.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/test_connection_assignment_result.go index 4aa432001d3..7824f65b1ae 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/test_connection_assignment_result.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/test_connection_assignment_result.go @@ -16,12 +16,16 @@ import ( ) // TestConnectionAssignmentResult The result of the connectivity test performed between the GoldenGate deployment and the associated database / service. +// The 'error' property is deprecated and will not contain values in the future. So, the error(s) will be returned in just the 'errors' property. type TestConnectionAssignmentResult struct { // Type of the result (i.e. Success, Failure or Timeout). ResultType TestConnectionAssignmentResultResultTypeEnum `mandatory:"true" json:"resultType"` Error *TestConnectionAssignmentError `mandatory:"false" json:"error"` + + // List of test connection assignment error objects. + Errors []TestConnectionAssignmentError `mandatory:"false" json:"errors"` } func (m TestConnectionAssignmentResult) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_database_registration_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_database_registration_details.go index 861659ee8e7..f92f2c143aa 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_database_registration_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_database_registration_details.go @@ -54,8 +54,8 @@ type UpdateDatabaseRegistrationDetails struct { // to the database node to connect to. By default the mode would be DIRECT. SessionMode UpdateDatabaseRegistrationDetailsSessionModeEnum `mandatory:"false" json:"sessionMode,omitempty"` - // The wallet contents Oracle GoldenGate uses to make connections to a database. This - // attribute is expected to be base64 encoded. + // The wallet contents Oracle GoldenGate uses to make connections to a database. + // This attribute is expected to be base64 encoded. Wallet *string `mandatory:"false" json:"wallet"` // Credential store alias. diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_deployment_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_deployment_details.go index ece0698871e..2e9edc63e64 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_deployment_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_deployment_details.go @@ -24,6 +24,9 @@ type UpdateDeploymentDetails struct { // The Oracle license model that applies to a Deployment. LicenseModel LicenseModelEnum `mandatory:"false" json:"licenseModel,omitempty"` + // Specifies whether the deployment is used in a production or development/testing environment. + EnvironmentType EnvironmentTypeEnum `mandatory:"false" json:"environmentType,omitempty"` + // Metadata about this specific object. Description *string `mandatory:"false" json:"description"` @@ -81,6 +84,9 @@ func (m UpdateDeploymentDetails) ValidateEnumValue() (bool, error) { if _, ok := GetMappingLicenseModelEnum(string(m.LicenseModel)); !ok && m.LicenseModel != "" { errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LicenseModel: %s. Supported values are: %s.", m.LicenseModel, strings.Join(GetLicenseModelEnumStringValues(), ","))) } + if _, ok := GetMappingEnvironmentTypeEnum(string(m.EnvironmentType)); !ok && m.EnvironmentType != "" { + errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for EnvironmentType: %s. Supported values are: %s.", m.EnvironmentType, strings.Join(GetEnvironmentTypeEnumStringValues(), ","))) + } if len(errMessage) > 0 { return true, fmt.Errorf(strings.Join(errMessage, "\n")) } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_group_to_roles_mapping_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_group_to_roles_mapping_details.go new file mode 100644 index 00000000000..ceb9893c4b2 --- /dev/null +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_group_to_roles_mapping_details.go @@ -0,0 +1,57 @@ +// Copyright (c) 2016, 2018, 2024, Oracle and/or its affiliates. All rights reserved. +// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. +// Code generated. DO NOT EDIT. + +// GoldenGate API +// +// Use the Oracle Cloud Infrastructure GoldenGate APIs to perform data replication operations. +// + +package goldengate + +import ( + "fmt" + "github.com/oracle/oci-go-sdk/v65/common" + "strings" +) + +// UpdateGroupToRolesMappingDetails Defines the IDP Groups to GoldenGate roles mapping. This field is used only for IAM deployment and does not have any impact on non-IAM deployments. +// For IAM deployment, when user does not specify this mapping, then it has null value and default mapping is used. +// User belonging to each group can only perform the actions according to the role the respective group is mapped to. +type UpdateGroupToRolesMappingDetails struct { + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role securityGroup. + // It grants administration of security related objects and invoke security related service requests. This role has full privileges. + SecurityGroupId *string `mandatory:"false" json:"securityGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role administratorGroup. + // It grants full access to the user, including the ability to alter general, non-security related operational parameters + // and profiles of the server. + AdministratorGroupId *string `mandatory:"false" json:"administratorGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role operatorGroup. + // It allows users to perform only operational actions, like starting and stopping resources. + // Operators cannot alter the operational parameters or profiles of the MA server. + OperatorGroupId *string `mandatory:"false" json:"operatorGroupId"` + + // The OCID (https://docs.cloud.oracle.com/Content/General/Concepts/identifiers.htm) of the IDP group which will be mapped to goldengate role userGroup. + // It allows information-only service requests, which do not alter or affect the operation of either the MA. + // Examples of query and read-only information include performance metric information and resource status and monitoring information + UserGroupId *string `mandatory:"false" json:"userGroupId"` +} + +func (m UpdateGroupToRolesMappingDetails) String() string { + return common.PointerString(m) +} + +// ValidateEnumValue returns an error when providing an unsupported enum value +// This function is being called during constructing API request process +// Not recommended for calling this function directly +func (m UpdateGroupToRolesMappingDetails) ValidateEnumValue() (bool, error) { + errMessage := []string{} + + if len(errMessage) > 0 { + return true, fmt.Errorf(strings.Join(errMessage, "\n")) + } + return false, nil +} diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_ogg_deployment_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_ogg_deployment_details.go index 7951fa55f49..445b26aba13 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_ogg_deployment_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_ogg_deployment_details.go @@ -41,6 +41,8 @@ type UpdateOggDeploymentDetails struct { // The base64 encoded content of the PEM file containing the private key. Key *string `mandatory:"false" json:"key"` + + GroupToRolesMapping *UpdateGroupToRolesMappingDetails `mandatory:"false" json:"groupToRolesMapping"` } func (m UpdateOggDeploymentDetails) String() string { diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_oracle_connection_details.go b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_oracle_connection_details.go index a8d8c075928..3e3252e5d25 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_oracle_connection_details.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/goldengate/update_oracle_connection_details.go @@ -61,8 +61,8 @@ type UpdateOracleConnectionDetails struct { // Connect descriptor or Easy Connect Naming method used to connect to a database. ConnectionString *string `mandatory:"false" json:"connectionString"` - // The wallet contents Oracle GoldenGate uses to make connections to a database. This - // attribute is expected to be base64 encoded. + // The wallet contents Oracle GoldenGate uses to make connections to a database. + // This attribute is expected to be base64 encoded. Wallet *string `mandatory:"false" json:"wallet"` // Deprecated: this field will be removed in future versions. Either specify the private IP in the connectionString or host diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/securityattribute/securityattribute_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/securityattribute/securityattribute_client.go index 911d97a96a2..3ecbd3b5b4b 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/securityattribute/securityattribute_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/securityattribute/securityattribute_client.go @@ -160,7 +160,7 @@ func (client SecurityAttributeClient) bulkDeleteSecurityAttributes(ctx context.C defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/BulkDeleteSecurityAttributes" err = common.PostProcessServiceError(err, "SecurityAttribute", "BulkDeleteSecurityAttributes", apiReferenceLink) return response, err } @@ -231,7 +231,7 @@ func (client SecurityAttributeClient) bulkEditSecurityAttributes(ctx context.Con defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/BulkEditSecurityAttributes" err = common.PostProcessServiceError(err, "SecurityAttribute", "BulkEditSecurityAttributes", apiReferenceLink) return response, err } @@ -307,7 +307,7 @@ func (client SecurityAttributeClient) cascadingDeleteSecurityAttributeNamespace( defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/CascadingDeleteSecurityAttributeNamespace" err = common.PostProcessServiceError(err, "SecurityAttribute", "CascadingDeleteSecurityAttributeNamespace", apiReferenceLink) return response, err } @@ -373,7 +373,7 @@ func (client SecurityAttributeClient) changeSecurityAttributeNamespaceCompartmen defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/ChangeSecurityAttributeNamespaceCompartment" err = common.PostProcessServiceError(err, "SecurityAttribute", "ChangeSecurityAttributeNamespaceCompartment", apiReferenceLink) return response, err } @@ -448,7 +448,7 @@ func (client SecurityAttributeClient) createSecurityAttribute(ctx context.Contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/CreateSecurityAttribute" err = common.PostProcessServiceError(err, "SecurityAttribute", "CreateSecurityAttribute", apiReferenceLink) return response, err } @@ -521,7 +521,7 @@ func (client SecurityAttributeClient) createSecurityAttributeNamespace(ctx conte defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/CreateSecurityAttributeNamespace" err = common.PostProcessServiceError(err, "SecurityAttribute", "CreateSecurityAttributeNamespace", apiReferenceLink) return response, err } @@ -593,7 +593,7 @@ func (client SecurityAttributeClient) deleteSecurityAttribute(ctx context.Contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/DeleteSecurityAttribute" err = common.PostProcessServiceError(err, "SecurityAttribute", "DeleteSecurityAttribute", apiReferenceLink) return response, err } @@ -658,7 +658,7 @@ func (client SecurityAttributeClient) deleteSecurityAttributeNamespace(ctx conte defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/DeleteSecurityAttributeNamespace" err = common.PostProcessServiceError(err, "SecurityAttribute", "DeleteSecurityAttributeNamespace", apiReferenceLink) return response, err } @@ -716,7 +716,7 @@ func (client SecurityAttributeClient) getSecurityAttribute(ctx context.Context, defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/GetSecurityAttribute" err = common.PostProcessServiceError(err, "SecurityAttribute", "GetSecurityAttribute", apiReferenceLink) return response, err } @@ -774,7 +774,7 @@ func (client SecurityAttributeClient) getSecurityAttributeNamespace(ctx context. defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/GetSecurityAttributeNamespace" err = common.PostProcessServiceError(err, "SecurityAttribute", "GetSecurityAttributeNamespace", apiReferenceLink) return response, err } @@ -833,7 +833,7 @@ func (client SecurityAttributeClient) getSecurityAttributeWorkRequest(ctx contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeWorkRequest/GetSecurityAttributeWorkRequest" err = common.PostProcessServiceError(err, "SecurityAttribute", "GetSecurityAttributeWorkRequest", apiReferenceLink) return response, err } @@ -891,7 +891,7 @@ func (client SecurityAttributeClient) listSecurityAttributeNamespaces(ctx contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespaceSummary/ListSecurityAttributeNamespaces" err = common.PostProcessServiceError(err, "SecurityAttribute", "ListSecurityAttributeNamespaces", apiReferenceLink) return response, err } @@ -949,7 +949,7 @@ func (client SecurityAttributeClient) listSecurityAttributeWorkRequestErrors(ctx defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeWorkRequestErrorSummary/ListSecurityAttributeWorkRequestErrors" err = common.PostProcessServiceError(err, "SecurityAttribute", "ListSecurityAttributeWorkRequestErrors", apiReferenceLink) return response, err } @@ -1007,7 +1007,7 @@ func (client SecurityAttributeClient) listSecurityAttributeWorkRequestLogs(ctx c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeWorkRequestLogSummary/ListSecurityAttributeWorkRequestLogs" err = common.PostProcessServiceError(err, "SecurityAttribute", "ListSecurityAttributeWorkRequestLogs", apiReferenceLink) return response, err } @@ -1065,7 +1065,7 @@ func (client SecurityAttributeClient) listSecurityAttributeWorkRequests(ctx cont defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeWorkRequestSummary/ListSecurityAttributeWorkRequests" err = common.PostProcessServiceError(err, "SecurityAttribute", "ListSecurityAttributeWorkRequests", apiReferenceLink) return response, err } @@ -1123,7 +1123,7 @@ func (client SecurityAttributeClient) listSecurityAttributes(ctx context.Context defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeSummary/ListSecurityAttributes" err = common.PostProcessServiceError(err, "SecurityAttribute", "ListSecurityAttributes", apiReferenceLink) return response, err } @@ -1186,7 +1186,7 @@ func (client SecurityAttributeClient) updateSecurityAttribute(ctx context.Contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttribute/UpdateSecurityAttribute" err = common.PostProcessServiceError(err, "SecurityAttribute", "UpdateSecurityAttribute", apiReferenceLink) return response, err } @@ -1255,7 +1255,7 @@ func (client SecurityAttributeClient) updateSecurityAttributeNamespace(ctx conte defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/security-attribute/20240815/SecurityAttributeNamespace/UpdateSecurityAttributeNamespace" err = common.PostProcessServiceError(err, "SecurityAttribute", "UpdateSecurityAttributeNamespace", apiReferenceLink) return response, err } diff --git a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go index a55a979c383..eea4e53e8cc 100644 --- a/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go +++ b/vendor/github.com/oracle/oci-go-sdk/v65/zpr/zpr_client.go @@ -146,7 +146,7 @@ func (client ZprClient) createConfiguration(ctx context.Context, request common. defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/Configuration/CreateConfiguration" err = common.PostProcessServiceError(err, "Zpr", "CreateConfiguration", apiReferenceLink) return response, err } @@ -209,7 +209,7 @@ func (client ZprClient) createZprPolicy(ctx context.Context, request common.OCIR defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/ZprPolicy/CreateZprPolicy" err = common.PostProcessServiceError(err, "Zpr", "CreateZprPolicy", apiReferenceLink) return response, err } @@ -267,7 +267,7 @@ func (client ZprClient) deleteZprPolicy(ctx context.Context, request common.OCIR defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/ZprPolicy/DeleteZprPolicy" err = common.PostProcessServiceError(err, "Zpr", "DeleteZprPolicy", apiReferenceLink) return response, err } @@ -326,7 +326,7 @@ func (client ZprClient) getConfiguration(ctx context.Context, request common.OCI defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/Configuration/GetConfiguration" err = common.PostProcessServiceError(err, "Zpr", "GetConfiguration", apiReferenceLink) return response, err } @@ -384,7 +384,7 @@ func (client ZprClient) getZprConfigurationWorkRequest(ctx context.Context, requ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequest/GetZprConfigurationWorkRequest" err = common.PostProcessServiceError(err, "Zpr", "GetZprConfigurationWorkRequest", apiReferenceLink) return response, err } @@ -442,7 +442,7 @@ func (client ZprClient) getZprPolicy(ctx context.Context, request common.OCIRequ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/ZprPolicy/GetZprPolicy" err = common.PostProcessServiceError(err, "Zpr", "GetZprPolicy", apiReferenceLink) return response, err } @@ -500,7 +500,7 @@ func (client ZprClient) getZprPolicyWorkRequest(ctx context.Context, request com defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequest/GetZprPolicyWorkRequest" err = common.PostProcessServiceError(err, "Zpr", "GetZprPolicyWorkRequest", apiReferenceLink) return response, err } @@ -558,7 +558,7 @@ func (client ZprClient) listZprConfigurationWorkRequestErrors(ctx context.Contex defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequestError/ListZprConfigurationWorkRequestErrors" err = common.PostProcessServiceError(err, "Zpr", "ListZprConfigurationWorkRequestErrors", apiReferenceLink) return response, err } @@ -616,7 +616,7 @@ func (client ZprClient) listZprConfigurationWorkRequestLogs(ctx context.Context, defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequestLogEntry/ListZprConfigurationWorkRequestLogs" err = common.PostProcessServiceError(err, "Zpr", "ListZprConfigurationWorkRequestLogs", apiReferenceLink) return response, err } @@ -674,7 +674,7 @@ func (client ZprClient) listZprConfigurationWorkRequests(ctx context.Context, re defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequest/ListZprConfigurationWorkRequests" err = common.PostProcessServiceError(err, "Zpr", "ListZprConfigurationWorkRequests", apiReferenceLink) return response, err } @@ -732,7 +732,7 @@ func (client ZprClient) listZprPolicies(ctx context.Context, request common.OCIR defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/ZprPolicyCollection/ListZprPolicies" err = common.PostProcessServiceError(err, "Zpr", "ListZprPolicies", apiReferenceLink) return response, err } @@ -790,7 +790,7 @@ func (client ZprClient) listZprPolicyWorkRequestErrors(ctx context.Context, requ defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequestError/ListZprPolicyWorkRequestErrors" err = common.PostProcessServiceError(err, "Zpr", "ListZprPolicyWorkRequestErrors", apiReferenceLink) return response, err } @@ -848,7 +848,7 @@ func (client ZprClient) listZprPolicyWorkRequestLogs(ctx context.Context, reques defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequestLogEntry/ListZprPolicyWorkRequestLogs" err = common.PostProcessServiceError(err, "Zpr", "ListZprPolicyWorkRequestLogs", apiReferenceLink) return response, err } @@ -906,7 +906,7 @@ func (client ZprClient) listZprPolicyWorkRequests(ctx context.Context, request c defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/WorkRequest/ListZprPolicyWorkRequests" err = common.PostProcessServiceError(err, "Zpr", "ListZprPolicyWorkRequests", apiReferenceLink) return response, err } @@ -969,7 +969,7 @@ func (client ZprClient) updateZprPolicy(ctx context.Context, request common.OCIR defer common.CloseBodyIfValid(httpResponse) response.RawResponse = httpResponse if err != nil { - apiReferenceLink := "" + apiReferenceLink := "https://docs.oracle.com/iaas/api/#/en/zero-trust-packet-routing/20240301/ZprPolicy/UpdateZprPolicy" err = common.PostProcessServiceError(err, "Zpr", "UpdateZprPolicy", apiReferenceLink) return response, err } From b898f2e20e1c70c173f9383347839967f4234de7 Mon Sep 17 00:00:00 2001 From: Sriniakhil Gujulla Leel Date: Tue, 15 Oct 2024 11:53:51 +0530 Subject: [PATCH 26/31] Finalize changelog and release for version v6.14.0 --- CHANGELOG.md | 23 +++++++++++++++++++++++ internal/globalvar/version.go | 4 ++-- website/oci.erb | 15 +++++++++------ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 111361c5fc7..6d982191a8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +## 6.14.0 (Unreleased) + +### Added +- Support for OIDC Discovery in OKE +- Support for Support Cross region Backup copy & Replication for volumes encrypted with Customer KMS Keys +- Support for GenerateOnPremConnectorConfiguration resource in Data Safe +- Support for OIDC Auth Terraform +- Support for GoldenGate new deployment creation page and extended connectivity test results +- Support for DNSSEC +- Direct API support for OCI BSS +- Support for Desktop as a Service: Desktop Session Lifecycle Management +- LBCP ppv2 support +- Desktop as a Service: Shape Flexibility +- Support for Operations Insights : Autonomous Database IAM based connections +- Support for Customer Facing Scalable agent upgrade | ExaCC and ExaCS +- 9/24- Support for ZPR v1 +- Support for PV Support for Launch w/Multiple Attachments Support for VMs +- Support for Stack Monitoring Maintenance Windows +- To Support for Depracate old apps admin user creation with password +- Support for Desktop as a Service: Private Access +### Bug Fix +Fixed the timestamp issue to corrected form + ## 6.13.0 (October 09, 2024) ### Added diff --git a/internal/globalvar/version.go b/internal/globalvar/version.go index 76b8c73d713..5449ac4fdf4 100644 --- a/internal/globalvar/version.go +++ b/internal/globalvar/version.go @@ -7,9 +7,9 @@ import ( "log" ) -const Version = "6.13.0" +const Version = "6.14.0" -const ReleaseDate = "2024-10-12" +const ReleaseDate = "2024-10-20" func PrintVersion() { log.Printf("[INFO] terraform-provider-oci %s\n", Version) diff --git a/website/oci.erb b/website/oci.erb index 161b339f547..596e60afdfc 100644 --- a/website/oci.erb +++ b/website/oci.erb @@ -4582,9 +4582,6 @@
  • oci_dns_rrset
  • -
  • - oci_dns_rrsets -
  • oci_dns_steering_policies
  • @@ -4617,9 +4614,6 @@ > Resources @@ -5254,6 +5254,9 @@
  • oci_golden_gate_deployment_certificates
  • +
  • + oci_golden_gate_deployment_environments +
  • oci_golden_gate_deployment_type
  • From 3a3ad02c64c244cd678dd3c3cf99e74e8b34d539 Mon Sep 17 00:00:00 2001 From: Sriniakhil Gujulla Leel Date: Wed, 16 Oct 2024 20:05:32 +0530 Subject: [PATCH 27/31] Vendored - oci-go-sdk for release version v65 --- go.mod | 4 ++-- go.sum | 2 ++ vendor/modules.txt | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5eeb3205e16..9c4142dfdd8 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/oklog/run v1.0.0 // indirect - github.com/oracle/oci-go-sdk/v65 v65.75.0 + github.com/oracle/oci-go-sdk/v65 v65.75.2 github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sony/gobreaker v0.5.0 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect @@ -68,6 +68,6 @@ require ( ) // Uncomment this line to get OCI Go SDK from local source instead of github -replace github.com/oracle/oci-go-sdk/v65 v65.75.0 => ./vendor/github.com/oracle/oci-go-sdk +//replace github.com/oracle/oci-go-sdk => ../../oracle/oci-go-sdk go 1.21 diff --git a/go.sum b/go.sum index 1cccc9418da..f08b44b394f 100644 --- a/go.sum +++ b/go.sum @@ -140,6 +140,8 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/oracle/oci-go-sdk/v65 v65.75.2 h1:Qw3Eotrq7SJ5LquOc//Iq6xzcBJSi8AD3cXps9IBN7g= +github.com/oracle/oci-go-sdk/v65 v65.75.2/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/vendor/modules.txt b/vendor/modules.txt index fb6cdd209f4..a22732e5c73 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -225,7 +225,7 @@ github.com/mitchellh/reflectwalk # github.com/oklog/run v1.0.0 ## explicit github.com/oklog/run -# github.com/oracle/oci-go-sdk/v65 v65.75.0 => ./vendor/github.com/oracle/oci-go-sdk +# github.com/oracle/oci-go-sdk/v65 v65.75.2 ## explicit; go 1.13 github.com/oracle/oci-go-sdk/v65/adm github.com/oracle/oci-go-sdk/v65/aianomalydetection From 14b6a48971879d54fa2c28b78f168c57fc6fba59 Mon Sep 17 00:00:00 2001 From: DevOps Pipeline Date: Wed, 16 Oct 2024 05:34:38 +0000 Subject: [PATCH 28/31] Vendored - oci-go-sdk for release version v65 --- go.mod | 2 +- go.sum | 4 ++-- vendor/modules.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 9c4142dfdd8..b86a75c2ec8 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/oklog/run v1.0.0 // indirect - github.com/oracle/oci-go-sdk/v65 v65.75.2 + github.com/oracle/oci-go-sdk/v65 v65.76.0 github.com/pmezard/go-difflib v1.0.0 // indirect github.com/sony/gobreaker v0.5.0 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect diff --git a/go.sum b/go.sum index f08b44b394f..bffe12df610 100644 --- a/go.sum +++ b/go.sum @@ -140,8 +140,8 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/oracle/oci-go-sdk/v65 v65.75.2 h1:Qw3Eotrq7SJ5LquOc//Iq6xzcBJSi8AD3cXps9IBN7g= -github.com/oracle/oci-go-sdk/v65 v65.75.2/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= +github.com/oracle/oci-go-sdk/v65 v65.76.0 h1:mecdD9at/CMaQNEkcC5aMUR9aBF3brdiEyVkDRu/qVc= +github.com/oracle/oci-go-sdk/v65 v65.76.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/vendor/modules.txt b/vendor/modules.txt index a22732e5c73..e44ea7c14aa 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -225,7 +225,7 @@ github.com/mitchellh/reflectwalk # github.com/oklog/run v1.0.0 ## explicit github.com/oklog/run -# github.com/oracle/oci-go-sdk/v65 v65.75.2 +# github.com/oracle/oci-go-sdk/v65 v65.76.0 ## explicit; go 1.13 github.com/oracle/oci-go-sdk/v65/adm github.com/oracle/oci-go-sdk/v65/aianomalydetection From 96ea121e46ffb64b553d8a2a6fcbd0f9ce7b750b Mon Sep 17 00:00:00 2001 From: Sriniakhil Gujulla Leel Date: Wed, 16 Oct 2024 22:48:16 +0530 Subject: [PATCH 29/31] Added - Release for v6.14.0 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d982191a8b..5df18b25b70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 6.14.0 (Unreleased) +## 6.14.0 (October 16, 2024) ### Added - Support for OIDC Discovery in OKE From 4b2b97737dfe3835559229f6f0252277e76b714a Mon Sep 17 00:00:00 2001 From: tf-oci-pub Date: Wed, 16 Oct 2024 17:18:56 +0000 Subject: [PATCH 30/31] Added - README.md of service examples with magic button --- examples/zips/adm.zip | Bin 3439 -> 3439 bytes examples/zips/aiAnomalyDetection.zip | Bin 3302 -> 3302 bytes examples/zips/aiDocument.zip | Bin 1793 -> 1793 bytes examples/zips/aiLanguage.zip | Bin 1682 -> 1682 bytes examples/zips/aiVision.zip | Bin 1655 -> 1655 bytes examples/zips/always_free.zip | Bin 3850 -> 3850 bytes examples/zips/analytics.zip | Bin 2766 -> 2766 bytes examples/zips/announcements_service.zip | Bin 2718 -> 2718 bytes examples/zips/api_gateway.zip | Bin 27065 -> 27065 bytes examples/zips/apm.zip | Bin 47791 -> 47791 bytes examples/zips/appmgmt_control.zip | Bin 2681 -> 2681 bytes examples/zips/artifacts.zip | Bin 7102 -> 7102 bytes examples/zips/audit.zip | Bin 1804 -> 1804 bytes examples/zips/autoscaling.zip | Bin 5681 -> 5681 bytes examples/zips/bastion.zip | Bin 4998 -> 4998 bytes examples/zips/big_data_service.zip | Bin 13161 -> 13161 bytes examples/zips/blockchain.zip | Bin 1898 -> 1898 bytes examples/zips/budget.zip | Bin 3741 -> 3741 bytes examples/zips/capacity_management.zip | Bin 18114 -> 18114 bytes examples/zips/certificatesManagement.zip | Bin 10431 -> 10431 bytes examples/zips/cloudBridge.zip | Bin 9949 -> 9949 bytes examples/zips/cloudMigrations.zip | Bin 8429 -> 8429 bytes examples/zips/cloudguard.zip | Bin 26197 -> 26197 bytes examples/zips/cluster_placement_groups.zip | Bin 3160 -> 3160 bytes examples/zips/compute.zip | Bin 55516 -> 55516 bytes examples/zips/computecloudatcustomer.zip | Bin 4199 -> 4199 bytes examples/zips/computeinstanceagent.zip | Bin 3311 -> 3311 bytes examples/zips/concepts.zip | Bin 4864 -> 4864 bytes examples/zips/container_engine.zip | Bin 22011 -> 25928 bytes examples/zips/container_instances.zip | Bin 3326 -> 3326 bytes examples/zips/database.zip | Bin 159606 -> 159606 bytes examples/zips/databaseTools.zip | Bin 6461 -> 6461 bytes examples/zips/databasemanagement.zip | Bin 19637 -> 19637 bytes examples/zips/databasemigration.zip | Bin 8500 -> 8500 bytes examples/zips/datacatalog.zip | Bin 3256 -> 3256 bytes examples/zips/dataflow.zip | Bin 3618 -> 3618 bytes examples/zips/dataintegration.zip | Bin 18640 -> 18640 bytes examples/zips/datalabeling.zip | Bin 2175 -> 2175 bytes examples/zips/datasafe.zip | Bin 79797 -> 80723 bytes examples/zips/datascience.zip | Bin 50964 -> 50964 bytes examples/zips/delegation_management.zip | Bin 9452 -> 9452 bytes examples/zips/demand_signal.zip | Bin 2083 -> 2083 bytes examples/zips/desktops.zip | Bin 14766 -> 19178 bytes examples/zips/devops.zip | Bin 46272 -> 46272 bytes examples/zips/disaster_recovery.zip | Bin 12820 -> 12820 bytes examples/zips/dns.zip | Bin 12059 -> 13725 bytes examples/zips/em_warehouse.zip | Bin 1379 -> 1379 bytes examples/zips/email.zip | Bin 5650 -> 5650 bytes examples/zips/events.zip | Bin 1807 -> 1807 bytes examples/zips/fast_connect.zip | Bin 8373 -> 8373 bytes examples/zips/fleet_apps_management.zip | Bin 5676 -> 5676 bytes examples/zips/fleetsoftwareupdate.zip | Bin 5324 -> 5324 bytes examples/zips/functions.zip | Bin 3475 -> 3475 bytes examples/zips/fusionapps.zip | Bin 12261 -> 12261 bytes examples/zips/generative_ai.zip | Bin 4773 -> 4773 bytes .../zips/globally_distributed_database.zip | Bin 9310 -> 9310 bytes examples/zips/goldengate.zip | Bin 7368 -> 7407 bytes examples/zips/health_checks.zip | Bin 8826 -> 8826 bytes examples/zips/id6.zip | Bin 1003 -> 1003 bytes examples/zips/identity.zip | Bin 16317 -> 16317 bytes examples/zips/identity_data_plane.zip | Bin 1948 -> 1948 bytes examples/zips/identity_domains.zip | Bin 69207 -> 69207 bytes examples/zips/integration.zip | Bin 2683 -> 2683 bytes examples/zips/jms.zip | Bin 11220 -> 11220 bytes examples/zips/jms_java_downloads.zip | Bin 6918 -> 6918 bytes examples/zips/kms.zip | Bin 9520 -> 9520 bytes examples/zips/license_manager.zip | Bin 5213 -> 5213 bytes examples/zips/limits.zip | Bin 3707 -> 3707 bytes examples/zips/load_balancer.zip | Bin 6839 -> 6839 bytes examples/zips/log_analytics.zip | Bin 18960 -> 18960 bytes examples/zips/logging.zip | Bin 9908 -> 9687 bytes examples/zips/management_agent.zip | Bin 4134 -> 4134 bytes examples/zips/management_dashboard.zip | Bin 5585 -> 5585 bytes examples/zips/marketplace.zip | Bin 3062 -> 3062 bytes examples/zips/media_services.zip | Bin 9090 -> 9090 bytes examples/zips/metering_computation.zip | Bin 7270 -> 7270 bytes examples/zips/monitoring.zip | Bin 5315 -> 5315 bytes examples/zips/mysql.zip | Bin 7758 -> 7758 bytes examples/zips/network_firewall.zip | Bin 12995 -> 12995 bytes examples/zips/network_load_balancer.zip | Bin 7133 -> 7133 bytes examples/zips/networking.zip | Bin 42171 -> 42171 bytes examples/zips/nosql.zip | Bin 5136 -> 5136 bytes examples/zips/notifications.zip | Bin 6649 -> 6649 bytes examples/zips/object_storage.zip | Bin 11843 -> 11843 bytes examples/zips/ocvp.zip | Bin 4736 -> 4736 bytes examples/zips/onesubscription.zip | Bin 7807 -> 7807 bytes examples/zips/opa.zip | Bin 1703 -> 1703 bytes examples/zips/opensearch.zip | Bin 2613 -> 2613 bytes examples/zips/operator_access_control.zip | Bin 6928 -> 6928 bytes examples/zips/opsi.zip | Bin 35410 -> 35410 bytes examples/zips/optimizer.zip | Bin 2339 -> 2339 bytes .../zips/oracle_cloud_vmware_solution.zip | Bin 3979 -> 3979 bytes examples/zips/oracle_content_experience.zip | Bin 2090 -> 2090 bytes examples/zips/oracle_digital_assistant.zip | Bin 3038 -> 3038 bytes examples/zips/os_management_hub.zip | Bin 15606 -> 15606 bytes examples/zips/osmanagement.zip | Bin 8224 -> 8224 bytes examples/zips/osp_gateway.zip | Bin 3540 -> 3540 bytes examples/zips/osub_billing_schedule.zip | Bin 1704 -> 1704 bytes .../zips/osub_organization_subscription.zip | Bin 1757 -> 1757 bytes examples/zips/osub_subscription.zip | Bin 1795 -> 1795 bytes examples/zips/osub_usage.zip | Bin 1749 -> 1749 bytes examples/zips/pic.zip | Bin 8004 -> 8004 bytes examples/zips/psql.zip | Bin 3454 -> 3454 bytes examples/zips/queue.zip | Bin 2767 -> 2767 bytes examples/zips/recovery.zip | Bin 4365 -> 4365 bytes examples/zips/redis.zip | Bin 2401 -> 2401 bytes examples/zips/resourcemanager.zip | Bin 6565 -> 6565 bytes examples/zips/resourcescheduler.zip | Bin 2123 -> 2123 bytes examples/zips/security_attribute.zip | Bin 2048 -> 2048 bytes examples/zips/serviceManagerProxy.zip | Bin 1691 -> 1691 bytes examples/zips/service_catalog.zip | Bin 3854 -> 3854 bytes examples/zips/service_connector_hub.zip | Bin 2891 -> 2891 bytes examples/zips/service_mesh.zip | Bin 9180 -> 9180 bytes examples/zips/stack_monitoring.zip | Bin 23415 -> 23415 bytes examples/zips/storage.zip | Bin 26726 -> 29943 bytes examples/zips/streaming.zip | Bin 2116 -> 2116 bytes examples/zips/usage_proxy.zip | Bin 3238 -> 3238 bytes examples/zips/vault_secret.zip | Bin 1999 -> 1999 bytes examples/zips/vbs_inst.zip | Bin 1788 -> 1788 bytes examples/zips/visual_builder.zip | Bin 1860 -> 1860 bytes examples/zips/vn_monitoring.zip | Bin 3703 -> 3703 bytes .../zips/vulnerability_scanning_service.zip | Bin 2339 -> 2339 bytes examples/zips/web_app_acceleration.zip | Bin 2374 -> 2374 bytes examples/zips/web_app_firewall.zip | Bin 2909 -> 2909 bytes ..._application_acceleration_and_security.zip | Bin 6483 -> 6483 bytes examples/zips/zpr.zip | Bin 1702 -> 1702 bytes 126 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/zips/adm.zip b/examples/zips/adm.zip index 3f439ea30b68fda1f2a9cf3b4583cc327ae0a1d0..a3250cfb88bac1d94667d78a76e6f3369abb526a 100644 GIT binary patch delta 274 zcmaDa^8OZgU2cJ~LS1ELI~7g&$Zg;R+4d=0g--;xvQ_PUhm;4c2^u%a9pp>*RVK v88Ba(+X~7To1DkZ1{N#lwnb5MjoSr7jSY_jikf*m?kIeAUVAX#lUEG@N0>?} diff --git a/examples/zips/aiAnomalyDetection.zip b/examples/zips/aiAnomalyDetection.zip index 4be727965e321f41dde6e9e70ae728664c40cbb4..9ee9915b9a5edc479f8954b3195cc6862ba334c1 100644 GIT binary patch delta 178 zcmaDR`Am{Gz?+$civa|px&kKh8mUx&2{J{JJJZb>=fi{x> delta 178 zcmaDR`Am{Gz?+$civa}wFndkpHBzZjU{9|D;?fFk21b^b%nS@H^*~vWIuRhv0all6 z%??rr#2c4JGBN|TPG)4Xgo$l-WO~XD7S!Z&fC)}6;5r5tv*dPQ25Oufz#{|Z&*t_- S;j{6$qww>2{J{JJJZb>saV+Wp diff --git a/examples/zips/aiDocument.zip b/examples/zips/aiDocument.zip index 8b87c6632dee82fa975ca0131b643a94a1aa14bf..e4f07238ec91efbf30bf28f5b0ee3a2fc882f5a9 100644 GIT binary patch delta 156 zcmZqVYvkh%@MdP=VgP}tu7HWWTI|(d`P1vZ@=vsrVg`vs8-qoFq8q0MFoJ|8zhE?k ziEUP33Sa^Y7PDBu1SfA|*$);gVYOfeYMi{DRR+vI$Lff}H)OL%;ZI_71M_dQsR00k C3pDir delta 156 zcmZqVYvkh%@MdP=VgP|Z%w7|Dwb*ME*wgD2*eBXaF@r>+jlm*7(T!6B7(qglUoaZN z#5OB11u%gHi&-pSf|EC~><5dLuv#z!HBMg7Dg)-9V|7H~8?xD>@F%gkf%&)D)Buwc BD@*_Y diff --git a/examples/zips/aiLanguage.zip b/examples/zips/aiLanguage.zip index 3e9f629defb5e4675ab5ee7bfa136666b053accf..f6c952f09eeccaadd9d45d5b137f518089731ada 100644 GIT binary patch delta 156 zcmbQlJBgP!z?+$civa|px&kKhYOz;;WIQW#A=ViS7vhq^K;nL07-)= As{jB1 diff --git a/examples/zips/aiVision.zip b/examples/zips/aiVision.zip index a95312e3fc1fe618a838cbaf33f90a5be18f4a54..fc8e12547a4129ca10f514335114fdfa28bf26fb 100644 GIT binary patch delta 156 zcmey)^PPt`z?+$civa|px&kKhYOq&-5 z6Wc7ybOj>#h1m=yIN6Y8A6Vfh7Bgm`#>qXbGGM+Jt33*THLEQOpNq`}%nxK!0{}*j BE0X{K diff --git a/examples/zips/always_free.zip b/examples/zips/always_free.zip index 65a841b15064b475399b86ffad90c3a4f15d2efd..95eb8721e2cbce4eb0198dc88b45d995234dd8c4 100644 GIT binary patch delta 156 zcmeB@>yqOQ@MdP=VgP}tu7HWW+U(U|`P1vZ@=vsvVg`xCn1Drqq8q1&GJ=FAzh^Xp ziEY+k^5OyumhxD_1SfChIS3Z3yqOQ@MdP=VgP|Z%w7|Dwb^SF*wgD2*eBXcF@r>6Ou!;Q(T&qX89_pm-!mG) z#5QX%d2xXSOL;6|f|IxM90ZG1@>((jHBPSPlL7Ou@H(OJE%+Qz__O%j!TcwDY5=*y BD}ew2 diff --git a/examples/zips/analytics.zip b/examples/zips/analytics.zip index eda56c30aee47acc437c5e7c6581251f79c175cf..5262ca4c3e921646c6f2246bd5c9ca565b9d27a0 100644 GIT binary patch delta 192 zcmX>ndQOx#z?+$civa|px&kKhYO+^<ndQOx#z?+$civa}wFndkp)nu@JPd>c*&6#hI^{v<9t O6zK#mS1^ACml^<-@irF# diff --git a/examples/zips/announcements_service.zip b/examples/zips/announcements_service.zip index e7cc861d097b3eae8cdf84c426cee111dcd00091..9bbcd0c47d602491bdd17b05f14c434724f4b30a 100644 GIT binary patch delta 215 zcmbOyI!}~0z?+$civa|px&kKhnyOTPTmUj3Cnz3wajWCI=%PJ~2^4U&WuGf3?oXRr`Z z{bn}CRjhnKu}H8%U}CbMjPm5nIR42W*jUlEPL^c%gz269P)B%k4SN9#$jr&_xvel1 z`|>!#6mOo&!^#F$I9JFHL*aiRZ@9uhVG)RlT?%TG`@{v16@y*6;Od>U7G?&9P_D`E z6{LYmxF_=`a&mDpFoOaB>?w(P%wW5gOIssr2aB=EIKl1mm$87^Wrm^fiGnR$p@!l| zMzC%fWpfOL<;oBrfvn!6Yy~lKu8`Vfc?}5+#nBqBa8s9S%!jzsQ^y!X;Q}2Vo^Dcr=%26LDMLD9Kk(Vgkmj0_BBObiTilMk{I3#-R`& zv6@0636gTa31o7XsR!K1ou;fDV6Pvvb-=J&)y^HRu-HzI8?11NrvG z^FUE05buvgRb#vlimLbVkyun^CAgrdx{%Cqg2|21!DS8KicPGgt_y zelr{6Dpo$ASR~jWFfmzBMtO2(9RK7GY^>;7Crh$>!t_pls3W|&hP{9VWai}e+*TNh zeR&*ViZ@T?VPyj=oGWC9q42+uH(X($un5G&E(Nv8ec}Shioq^jaP>}F3o`>lDA(lo z3erF&+>`keIk`9)m_Y#m_LRgtX0Tn$rLB>*gT>fnoZxo(%UHndGQ&{#M8OuWP($$} zBUrbLvN?vra%G5*KvwTjwt|>AS4eHLyoLmZ;%E(5xT(uE=0n`+sbh?xaDfgaKtZNH z)JcFSbTQD!P&nPd6mH^WgE>rspy=GN=+1O&Mg|5mCI$w%$p_gaCTFE_BZtvi<4}l? zSWO|31W7sI1Ts0x)B|qhPE%G6u-6aTI$+qXYUd7DSZt@q4OY0s(*j-LBrk+IKQC=T zu)3OPOPJ=#d!i44#TsKQLD4w*W1JWw4Ntxk;{_F!0ju(e4aA~qcWeNPD&4qnEUK2p zd7!8gi1){$sxjUNMb-QGNGz(d5?oMJT}bf8qRKYW6GhdEM3_5~{V0`$YF0xMHnZL) zxuTdAk_>YvvRRGs(v$Bd8=|N*ND0Q`wxubKD5^M8VWER;UQwzoimHpL&M17dG$$-( v&q{-ZEF{*r)5EZ+YEJhB*&8Ez=5E@i+}LCp5dbO*~%&Qt>cnU#8$ diff --git a/examples/zips/apm.zip b/examples/zips/apm.zip index 31c421a73f8ad5b21850156ed51a9972035d42c0..244bf68015b06c53ee81eb828c13f772c33e1939 100644 GIT binary patch delta 1948 zcmZ4gm1+G~Cf)#VW)?065Qypun8>TlUj3Cnz3wajZQ>Q6SHdw~V#mT^o zCN*)HHIizP$^O&Xz&cnNoxtKi<(vH&cQJtlxmnDxDo$mwg)3gkasZ+@husFN;xp{d zaK&OA+00;*TewZID!#)FaURGSay(`b#o_!$NQxmoT+8o`B!=*Zj6f>fwhn=xj1b#| ze6TA1B9snSoFr@l@yAS253Gt=#o}R#CkHMT-drap0@3h%w$kMD{M?fjBsq9OLr{Vo z;jYgTh)}SVbYcO!3#4=ZI$_+p9>^keY02$`_~w~B_9%2!aD_Q=^F)Qc>|iSbHQcfK zW{*Z7T(OAeC5U?hHOwZ<>j@%hfCTn)U~&TaaKa|h$#R?6(A^7BbW|@KW+E^hiflI5 zpA!al!nIa}ReEj4tYE>l{JN8RB+*SmgxBTnP?%|(^?Upvni?hsA-N5q_}j!1xZ=V| ziV)9Cou-GR80HaQBr${m5!3VF2ArL~37TrSl_uZc&OTXSJBE)DI&aN{q;C+-85_78i-=g1v+rSngxCk!Lthu zVS`dSIy8v=-G5s_QV-^shrz6Squy zvg~?246}0A2cy_`YlHOUzw50q)J1NHM^hJy!VlaSjlw^-F%`p%&`qdj$gPr|{Be^V zhPuGb$tY%B+nj)*CSpqyvYJUi?}=|!L>8JHxKVm?=~h_OA(GPdtu-j>-mZ|IJYkzU zh7~ur!IBRo8Mto84CeLQQN69R1C~q?_RZUohGDkaPRt-~+G&sCuE#rVG4wg@f+YLS GU1|UU1s4zi delta 1948 zcmZ{kZAep57{{I4yy~=>&XrB)G%^d@vc$-jUREPt%DmNlDbOg)4`mSLmkxm*z&!TkQn%WUymi53IV*lHj^hkA=VR05q{nP4{+6B`pD4|`;z3PrRAoa~Nb z6-t?zt%q>BLKci{&KIT(=6 zB)V0rfr6FZOz>K*0)~|6IO`eY%7t7%HVd~$)x|QKBoz)o%#Tr=3Bb- zE3_CaTtM1pcucS@$n0a1)68d+JgnLA2Ie8N^Fg|CqeuWRdnL3^%!D1jWT5v&h3AFP zGh;R97}`S(z0cHF#YR}VBeXK!-K%7a9`!DJdrG*Ia9?j9SUES^)LsEaw``|G*#!8P z?FJ8DvuD6zI=hS_m>cATs3sWHbYJBS7Q21xTcgSZpZo+!@M9AT%4G-KdS+qMdY(h& zN^gN=8%rN-&%lnp{SbcFZSqnGVGm^`EC%~7HR7Py4io{1yN0qLhwP1mQ--{PiCBhVr9>tiU(Q<^@ z;3~tIn=TSzR$XR{A;-A>Y&7I2z?+$civa|px&kKh>Z??LF_?=wX~1Z`M6(KSzA$r1olxQW#ZqRyAi7A7`% zBHIzLff4Ms%s?9^zvYkt^S84Hg8AG~z7|IW3V#WQ8;W`!&Ttg@R?avSJ}Z|um>7I2z?+$civa}wFndkp)mN!eU{9|D;?fFk21b^b%nS@H^*~uvbqUVwP<4}g zSfrRiT912yg@D4FB^X;7L1L2^Fj>F_?=wX~1Z`M6(KSzA$r1olxQW#ZqRyAi7A7`% zBHIzLff4Ms%s?9^zvYkt^S84Hg8AG~z7|IW3V#WQ8;W`!&Ttg@R?avSJ}Z|um>J}Sz2T-*u>i+=FGrQm~1F5HaS3o4J>9N>IM~)0rTgGMqsEB6LUdP zQzPbw!ha(ch@mH5997ME@eB+#krMtW=A4qqM&XA`wxIC;N;+Ve5ijM9qUMZL5(+;+ L+7-;7A*}`gM{&ls delta 583 zcmdmIzR#RDz?+$civa}wFndkp)nunLWYkI9Z%wVw;0mSRk6C*dPiawu3F1ypJsku27!6 zlo70ZI)@{MEq^#-;R+KtrC7iUYkA9Hf|GyoE(D9s<1>PZZNAPI05MTZz!t;AZh;WE z!e;_sAa1-XYz`BgEG@DZY~pPZb7o*DOg5Ajn;am)1{O0Bb%Tn@fcbMoBQVs6iMgPt zsS)!-;lB|J#LyEjj;iLocm{@=NC|%wb52QQqwvEeTTu9aB^@x#h?nw4QFBHr356dZ L?F#14kX8c#E7qcV diff --git a/examples/zips/audit.zip b/examples/zips/audit.zip index 1ebf243aafdb3ce96aca9b4c9997b36332012193..b2fbe7d1b754b328471b5a935789245fd6310a20 100644 GIT binary patch delta 178 zcmeC->*3=K@MdP=VgP}tu7HWWsw&lA`P1uwxU_l T!gph{Lg6oBa|H9Bv8e$7>*3=K@MdP=VgP|Z%w7|DRaI&f*wgEPxU_l T!gph{Lg6oBa|H9Bv8e$7*ZeOB diff --git a/examples/zips/autoscaling.zip b/examples/zips/autoscaling.zip index 692d72005afbbb6fdab9447aa0edb091c02d2489..dff8e3cd9f7024f9c6e841dc310b977c47907b78 100644 GIT binary patch delta 357 zcmdm}vr&gPz?+$civa|px&kKhYO_~=Vqwr%yQTYc&A?9(5sR01IIC<*; delta 357 zcmdm}vr&gPz?+$civa}wFndkp)n>0zU{9}8V4r9&#S9XOF$0SLMJLXD2ojlG%V-P} z+Ps~ymk})J&TI)6Y-e7@1Qs-5Gl2`{vjs2;0<}kqUfwm!pNWB?l!bvoadINR#N-$3 zf-q&9I5HtxbGS@lVw+cRtzZG07tD_k?C0l(sGKVZw|Vki!Tn%`^Mx##fi9lxC@cf! t{}OUR;U@??qVNw3yQA=RM4V9g6GU85_}@jGQTQ>UsQiPX5c9aj)BxEvWH0~# diff --git a/examples/zips/bastion.zip b/examples/zips/bastion.zip index c9469f9e74fe33b7051f2b550d286298aae35237..9564047446ba08111eda508e63a1ab9fec5c9d21 100644 GIT binary patch delta 303 zcmZouZ&T+D@MdP=VgP}tu7HWW>g?5D`P1vZ@=vsuVg`vs7=lHBq8lgpuz-Xn-)Av^ ziES2R^=AYNX0X8(ZeGClfC((v%&7}gIe9zhVX#;&7ee7yuGbLVi+N1p3h(pm0xO)u zYXlS9e3f@4#KcAcQ)ZxBCjS$X0V}#8V2{GL6tqL(&lE(J|0QURA|Eb8AV=J L*a6H>5LN>KQ1Wi6 delta 303 zcmZouZ&T+D@MdP=VgP|Z%w7|D)!Azl*wgD2*e6;`F@r=R48bBm(Tx*)SU^IP@3R=d z#5Rku`ZIzBGuYq?H!om&zyua-=G29$oV=a$Fj%aX3!!i;*K3IG#XP2Ph4*=Offdf- zHG+w4zRJ52Vq&9!DKpS5lm7|HfEC>kut(ur3fiIYX9}Xq{}QxDkq;L_mER%cj3O^9 L>;UE`2&(}AJT6;U diff --git a/examples/zips/big_data_service.zip b/examples/zips/big_data_service.zip index 856ee36c9e662b188fdb06bbf3971de28998c129..4c6be6b7d4e4a633c68e57b93a070b5d184b5128 100644 GIT binary patch delta 804 zcmaEv_A-q(z?+$civa|px&kKh8n9P?xsu$cT% zLUyu(z5*8~12f3mAQ!Up>2iW~n~OtS2ofw8kA%49vV@L2GJ0;=CE z&d9_B5}Pc;Y>lpNay2tVFG%4L=1CBRk!+S23b(O2z)k$ic9juq;xcLNNt}YnYWaW` zMcV$%zqgv1fkBjWvY?E@RSWJE> zAv;+?UxAC0ff?j&kPF%QbUDGg&BY-u1PPXlM?ze4S;7t3NU%a%Nng0#6D5Tp{#zz( zgQ1X3#u=_KK;{_4k&+7LaKUhe5O%PU>(uRFf|Eb1?*aQ597kXR?BjJtqA+JeVhbE8 zlO;91U^+KvX(~fpJweM3wd7vh delta 156 zcmaFG_ll13 CU@Y?h diff --git a/examples/zips/budget.zip b/examples/zips/budget.zip index 684e826467820744a6cb728f842ee62c473c2618..d2d6c349069b9c7d1a7ce97b66fc175ce7889802 100644 GIT binary patch delta 415 zcmbO$J6D!Bz?+$civa|px&kKhsoT?3ADeLpMgPc;z8lbkJ*J`rfvSq{uE;GQ*IMxpmCFBcx1rFTl2UnfsDs+ pKO>VIGu#K07xVZMqfCg`mKbG)yiO>NxXNoyj5Z@ah_-S*H2`sYZ^8fo delta 415 zcmbO$J6D!Bz?+$civa}wFndkpRb#JFU{9}8V4r9u#S9V&w@`tKq?cB3GcdBeWM*Js zsRybD=@bFd9AKTB?ZG;MYB&D;&J5Bz`7?_?Ol-3zs~;m+u!_wDCOCO3+fJ}pA-k>- zF_uK?n^cyc1lr%r&%huz@u2YJ$Lzu|(>DKQe+sepDYpqT(74GmJThS8t$Ey(K*nRZ ppOHz98SaD0i+OyBQ6|J|ON_EYUMCbsT;;VUMw<~IL|ZwZ8US88UfBQu diff --git a/examples/zips/capacity_management.zip b/examples/zips/capacity_management.zip index c2a644d4b0344eec94f4918ba5d7e1888d0823cc..0a9a99d413e93f6db9bb3543b4f56479c1e7c429 100644 GIT binary patch delta 1153 zcmX@q%Xp}lkvG7bnT3l11fseECh{7ySAXSCulveB*-=D<6Csh}jU*w(3{rbJ4J-sy zzuAFNh!rF@Ig~9LUESm>Y@Kk0DeU!(V1>^(0x%RtaTdW9UgkUmQ8?k6_iI7O~Mv{FSIE&y4FLNG(D4fCVj-im5Cl0PK zgJ%^B*hEo5Ukrt9g4u9|KLo!)O#CS9iJ>q~BnhtYxX5vc!ii$R7z#PW%i#*!#P35C zW=Mu&D10bc16PCx{0z$m6nQJFP!#!%Ryip0_SVrT@_Vc+QRKsI!cpWe*c711PjHo zD~g&PyJQr3LHjNg{$6`86!n@8@hI}E92!yNeH}AV6CyXU+vtC i!dGzdM^Qh~B^X7X%{2o>eu8TvioCE}8<;=GO$`A1++0im diff --git a/examples/zips/certificatesManagement.zip b/examples/zips/certificatesManagement.zip index ec8e16a317e8bcd179375d6059fbfe483005107c..f305ac3585964a4a00a1e960d7033bde1483b164 100644 GIT binary patch delta 710 zcmdlVxId6Lz?+$civa|px&kKhnz2`ZD z&9xM;hZ|Ba5C##vA?Sc^nT?PSTwT9V91~dc2azCjb!nnSaCP@Z(;?=0ihH4}+b*66 zS0^u#3{lrA8H}#(k7Nm4UAa^qMBNK%Pjq#mGVySAyJcb^>ZIgcV1koVX z3Yf{V>M~&dMEO84KSv3|XHkepk#ALqMv-SyEJl%^C@(#ElcE`l8ZIS>889=um3&e3 z{8I8mQJke6B@$FzznwwZ0uw$K7_eVd|Md7 z=2{Ba!wsny2!jaT5OhGd%tpuuuC8AwjtQ*!gGdm%x-`)uxVrnI=@9cg#l6tgZ5L03 ztCN>VhNx?m3`SS?N3sO2u3Rb)qV9#XC%U>&nRvLm-7+x{by9LJFu}>Ga)-fg)|Phx z1!qI@8jpQ8lfvna%)$hRs)qsTKU7Nf{dl$V~oNzn{N4VMzc449eSO1>z1 zeku8(sLxW4LXm%_oPZ*qq0)dN&!rlHBHyB#k0LLsmWU!hL#+u#-bOtfMSiP#E(+g8 LBM8i&si6h{{`}Cd diff --git a/examples/zips/cloudBridge.zip b/examples/zips/cloudBridge.zip index 5c81a4c789be1c2ee823674d8de6d7d2f0488f14..4408b41db2226be43b469ac51b46c4875bc625b0 100644 GIT binary patch delta 776 zcmccXd)JpYz?+$civa|px&kKhYO_~=lVh2K;R?4in=yeEeiTp_N>9xzDb^1S;bdS&SPC|KvKyNfTu(b& z5Jb;f9<|8@Dy);)Ie9TGvEX!vYiQ$CVFp{Wmd64^At$dJTwxe52gKw=eiOLh9R47P zUp@*LVd!=jM7XO%@Gd*l8nwxNl0q1Yk4PfiBqY@bF?F%DCCsYHkEIWQ4Ok{)jiH%U z))%I3bEIrGMDuYuOHfcveyAiid4nPwShJG6D^yGd%(inzsrL zC~Eu_JuuYlRCGg8qo@>$MUC|2%}UzH>Lw|NAaf^|DLY|kd#fNl`Kz)jiaHw=Y)+7# jd{70&_{n^#FlRu5pjFi!!~A!uo+xHVszrnO+tt(n=xh|V delta 776 zcmccXd)JpYz?+$civa}wFndkp)n>0zU{9}8V4v*3EW(M9h%rZ!kYWa@-R=w)0;=E4 z$oQQRBsTdslO4Lc$+67AaE05M&6vOnKMJS|rKjeV6zhkEa569>ECriA*^SK#uBV+X z2%={#kJ{t{71qh@oV*y8Sa7<-HMDW6FoP{w%VU9|kdxO9t}u+317dO_zX@D$4u25D zFCPVrFm$^MBHYy>c$Xb&joRcsNg)iyMkCu2IZ`$oqWQR-B`BySKU5N%yg`u-tXWCk6)GkJ=6A{mVyO8e?}MTyOCb?M&07Tr z6gB>e9vEtND!QSlQB(@WqDFf1W+iQ8b(54skhzn~l$|iNy;YE&{8d>MMV*ZbHYZ3= jKB$6X{A4~=m@^a$mW&ROSz21PfLO zSYhbCCg6rpC};$+CPLT+L*W78Xt+Wp5o4%AF&_+tC&Y5$3T?#KL9Bi&VG9$SY$$mM z?3{0sw#>j_nCvJo1LlWH`9S$%lLcfU{x~cZi=xI!+80C3M(KDIHAXUC7;5IpL}G|Z w%DSQGYn1iCQ1e;M1& delta 596 zcmaFs_|}m(z?+$civa}wFndkp)n~6!U{9}8V4tkOA;O7}NU%eakYWa@J>(A-0;=CE z!MKwdBsTd9i#@u!$>ywqaE1M>-b`SHciC+)6xwolBNTE3v4Isn;j@4XD)R?1f(0uC ztT1$66L3Q)6f}ZZ6Cvz^q40okG+d#Qh%r>5m=A`+6Joh=g*M{rAXdMXu!RXuHk3RB zcFs3RTV`M|Om>u)0rNwpe4u=>$pW$ve;k&IMN#7TeUj3Cnz3waj;W;U=zUquWtEb6=Vi0EYUEA3$D}fVFU~Q)wICS9jWC3SGYn;6{7ost{H|xEj<^w!cx5im_pUb zdI>xjVFC`mUH_fja+w$y0@)cD^d<|cN=(*IkmiC09wJs z+|GTbGa+_HS(+d#1Y5N>`Lu&E8w0~+U}De$S|vWY-jZwbpF}=n>wa4LLW28(uIl7G z2SH?0z|L6g5CFICm%|iDYMJQjjG^#{Dpk+ya#NCNGGT0rQWByF&Ph5WY@C0*d^) zh-4Ib1MP4*H5JkQt85&m5xMNCjN0HA?frbrK{$q+KihN9J1`7XK KD#ZQzX=(t>1?x!w delta 1321 zcmcb5hVkkdM&1B#W)?065ctFFHIY|~y+(mOy-tCB@&#WJPJ~3XIg*4FGf3^WAg~Zn z{bqi~Di)B~gbaj(i*<#=dGuYhO1%V19!8Sq(mB||&Bqqm3@$-a+a569>900aw zvH)KMTz@`aGaJ~VuOfyR7I}%f!4*yyT?A2RBjbgkaFt9TTp^R}Y<94T3smee6f&!Z z!4)Q`3NnKgmS`Bm1=nf#FoFgDYFc3Ej@0siD_o(a3ekN**9=3UmYxe-VX0mMOrh#z zy#yYNFaZbOuK!MMxl9ZUf$R(ndXoiJB_``9NOM604-_M{M(s>chpA51F%`zJGubo* zZs$JJnGidpEKQIVf~{JceA>a7je%h@FfnKWtrDMHZ^ zHHN~1z$m!Y7XxQOtj-IA#23(-$!o)QgWZ@NZUIVslNUtFfcZzmT_OBL2wx{60Y!dY zL^6uJaby;X{QgJ}6nV|4G!*%bQT8bELeU{8@*U9;DDq4(@hI}mF}^7BpJGx__!Y5^ zDC+YQq$hui)kaa{92bV7Mn6e<^0hck6g7(RK^ST_#G|VDjix3)!41WX>j_CHW<)1C zp~&w~^h1%?PjW$#pPCehA}^X8h$7#S3=J!2+%cuNqsV8cK*I(q|1rfAMLs4q1BL%A K72)vf{G7=V zCbn6hIi3+LIFZF3E_j^O)MK`XrW&#OKe$M0w z6WgrM9M1?AoXBDi7rf2_RVm8u1{0i|#C{m8P=f=ZFpt9vqI)-|8#B;~$@jQqz>1W) d+)?;FT>dEhzg)g3{2cBO6#gS_h`bSx8UXQbLQ((# diff --git a/examples/zips/compute.zip b/examples/zips/compute.zip index 985de942dc6b307c0b87d510ef3a5a04a93268f2..3160dcaa7bb8d1b229fba47264a146e7f571a9aa 100644 GIT binary patch delta 2551 zcmZuxZA_C_6n^n-X={ts4wp%%APPj3s`Cp48Ud>Uv#lQ$EpAM{bW7YMZm^7mOg0v` z`Gwc$FX9KmFg_MY#dQcRPz4H<$_8RGml2W${}`7zGnp}4-+OrP+uKWjG&xV6^PF>@ zbME`Njep$6M_6-s*?dm;*}t>aL?kFGUTBY1zR=d(h^(=M^8$D%Ljt2P;>yQJfa+Ko zW}GKrsF>dpLPOoWk?`cQ3t^adRlb9OQ}R9lC!1rDPw`f$fJ$j0+P>|ATpfekMtP~R=%QPNF7&E2wgW1TCzIhJ&?((^lGLH=fJVwAH-?J)BQpta$>JF~ zZo<&G0*!dW=d-fK`VEABO}`K5f5)T|FnReU7{s>{y2frpPw{a!!mEl~E5o&JugWH% zJh3x;LBQ_A71O_eWl(dRaWzWMjYihEH?)RNOURtUY8I~Ft;Pa*savr?P$6gP9-^s9 zO998SGuILDbfy^`Ddtxot4TYjg-IqeNvJYK$QB8mIe)CswaGb7spGf}=(KKeAblCr z+*H;OSkr0&zk-@mSksBD#d!y&g?Vgu5eIS1ZZKrR}6Uyz2~9V*x+iXctlU5pJDN|?H+4r6UaQV0JP z^+N~V<2hooL;qnDEZlp-PQb*E6M%W36rQ25+1k>70TgaLU;}FMtEp2I-!A&+Gm?e2 zmuk$mZy-K37=~tFmr45S_}s5=4>_Gl8`)HeO-xppPZKzTh6~! zV6fpzGEtnq;(=3axd~v9qN+|>m#yw7EaB&R36$Sj2Vio8bQfPXG(qEr#xqr#CIs&~w>mrUYz#Dw8{oL5@^B!%ZVvx4K^3EbmS zg>cm-ssvSe7aD&`%Uzh z3tsBWF6%7zHs*ZfI>B&eTqcV1f%{!59&ztuax%JiQ=I1R_ZZIVo)n66rYDo(Jnh*< zaSryH8BSks2E|GA>}5E$o^2Fo#*Kj4kwej%0PxPOR>llt~E8c%!l zsH<-c#Z&j^QSq66Ba=7d(j$H#k>Xhfj!?00AeYJeV@QvVdgCeH4_*tyiy9Pb!fam* zioHYpY|ut&lnl*Pi}o;Mn7)hFVfqH5e02P^kFN2`cbKYKHgY^TzT_8ARXSh6-gAD@ zUJ3t=aABN159kxV{UD36BziP0xE!h+rB82ql-4l+vXjxcLolej>{r@W6cQ`P*wxf} z^yu$WAZp{=go2Ui7kJaP3fF_m`}wECJs{ZHxqQfuR`LJkKjq%c@+OY Dm9ha` delta 2551 zcmZuxZA_C_6n^n-X={sUhs&f>DhgyMRi|z!&$cKScv_oitDo~(Q6vSj23CY6#m@RS1WNz8|-oty}-d_5n$$9de=bZDL zbKmE!{PR{m%$mi^=5oUCA3n1>EKc#AUU8&cuc*ErQEdt31#n-Q1V&=SnTHWS)xJE$ zI7h%x5&v-z4R!HG!jsF+hhW|n`DOx6%6kEvXo^N&#e2a5Dy4;R^OQ0k3lyspf_eAU z>k03*T94aCxyjM!f=h+Y_oy_sJt~eTli?xIm)cDvsa@L+jg&>K3l{f9q!Zqvh0}7} zgrQ*>8g_@yWo3(WYYF|TZWqx1)TaZpg&fH{h^8hb z2^`BzUroT1>1J@Gh+l@Rrtn!UOfZ>ALWLzwhK z4IIoM;NmJ=e=ttt5%K;g#yHlRkInmR@C?V`WFCRu1x z={nphW^Sllg~5Q`oUMdg5|W21uPHI_i*u4<^SL() z4Ax&xB#Kj)-EfM{HvkM!RMkrBveh1jCH!0`f%2QH0Zgoy?&ACUMrhp7urj#E@&@S% zIvQdid7=qc5>VOLEPY-sH6Mq2RM?Y)^^Vwgl1W^4eF(nCIVE+!CGi|*R&d;h{(D@E zT;m$FsBHnEu4%KumQFjQVa6OY{ruZ5ff@I6V3?a7pDvW@dKdlS zgqQlJ(>jB_k2#+?k1?ESr-|Yma&4#LVb?AuC#`E6#cAsLgyF2{PNF!cy3-lXtM087 zXK#<0;q>;TQJi@9PKHzC-bit#-KkW3;6WCX<9Q(V1Kt=O7En3%hx@2Fp?5c<@v2*g zI(t`AJau0#6`$%eGI`TZ9pd}rDW0YO02O=tvzfe?gF1BB6HD=Kc`OVsazLyJvwb@t z_73sy12#&dcyP8_w1;U!^j)+J(Kit3rQ;vHbd9&({Z!4;;iG}^MW1-8()kMZR{2DG zCHxn{g>iN~qEGnFqYTE9sF9Swa;SWSKE0_CTEqN!3!`zDU{H6-6WUf36e~yB)zr9k z=+bBu)yvqZXtgwB;uvk`jWPC#Eq$6v=~O+EuPxZrKpNJg-rIeRd==E>{Wv)~HlIo2|R6`tpIfeB8Q;yDHud(7j) z476ghBcIr02VSsaCVTS6L&apkYEJQ%pzss;d@=N#=SxIU6U1ME!hgdb1mO#)0RRx! BUq}D| delta 277 zcmaE^@LYj6z?+$civa}wFndkpHDj+)U{9}8V4pmZU1VY$8#72WJrGG$3M_Od4J-sy zyxEh{lLaI;c`BQ1}Uaz8HGW^ChCF3F5Cn;lJSzg75{@0BtBv AUjP6A diff --git a/examples/zips/computeinstanceagent.zip b/examples/zips/computeinstanceagent.zip index 8ad2f02dca1583d64eb846e5dc082173a5e77b89..4da76e2ba8feb7541268e32cac0a7cdafd2996ec 100644 GIT binary patch delta 235 zcmaDa`CgJYz?+$civa|px&kKhny6HNr*lW5$UovPLgAP31c3P`dDH+(UrHkY delta 235 zcmaDa`CgJYz?+$civa}wFndkpHBqTiU{9|D;?fFk21b^b%nS@H^*~vWIuRhv0all4 z%MMZp#2Z&eGBN|TPG)8DCQ9$*5~dWG=FRt+mau_!w{beb1Sg;8JOUP*#^uBev|;jX iE*UWY7ne7f@4*e>r*lW5$UovPLgAP31c3P`dDH+MWfYuXB1WM`TbD%@d7?5{Idd4 fD11*rdng~-?p1>RD5|7|!ch2=gG^oI!c zayfzpLGGI)B?z=Ra^l@>%YHI4FetJzFc?i1_obX_nyqeDoDk=k3CC(p+MO7ESGm5JB{C+6>cmW?2{#k)2 f6uzgRJ(Q1Z_bNeu6jjnfVJQ5`LM~wbEg>}kofUjF diff --git a/examples/zips/container_engine.zip b/examples/zips/container_engine.zip index 29194c6e3753bc398328848f64c3648130b33422..95313b28ddd6a84c82bc8ccbf7081996d02a2a18 100644 GIT binary patch delta 5043 zcma)A1yoe+^S*Saq)W#FQcFvB$kN?NDBZ2V3Ifs~3;3ZfASECrAs~Vvk_zIYlA@F} z(grI3TLv@99Px2C-C z0AQ6C0AR@XY|My1SY8fp-a>&FkI9DuL7^l77VZ)b0N^4p;TkO9KC_aPZTsdm8O+T0Vm_v&1 zT(H%UokRei;$cPfhMxVpi5r=wn48W&kYPfZy%~j8vr-)m7c%avfQd-!8qZ8I7Q|9r z;trjJkoLyvs9nV6QSXk0?kT4$zIrUG%h)V*u}lXW&oX7!p}Nu0s+O@gp`zC!yP`~+ zE3J2ADqy!3pjwkku==1gQQYe(8%0M_CMpMwNs{I_f-4}{dlbYd>Qr358=4?Co5TZS z0|V0@Jy@xS(bdGgu<^S|v|qHtY1)j(6$i~J3PvRf>X;+>TJvnsOA@Vet+%G~G}oR_ zCp^c!n=MG`X60FTMt>qNDS1H~`-j?vfaZMk(Bzl6ekP&o|41D^62@F&2f1;u{#}C zu>}O{-AIaG^ZtlrkSgSb^^W>a$ZKyEy(m6M1GD|qrRbS+*Y*doU+3AopNW=D4E#u) zy2KH&{(`p!=gI??SHc8~m1XbjR+^>SHU;Lse-&Regg{r>f6Q(-nCH0as%n{|CGd8X zMm@;B&F*~H7JGF>W|U+4M8=AsPa2!djDs9ga^&djjQ6^Q(;fd{I0Gw`y@xICRPRWZ zc2Y4R_LPOm-qt~P7|UE(%TVB63hmg%ZwDUd6B(Pn|Fi5SurnL%xY*5cS&8s=s6WSj z+XGuIG8aTXar4bw-Cj#A5=Yt`q8VhNx|PR>%;RrsJO2KW8a(ufsVUUEvn_j7>TZ;F8!8T@a`O#OgxMvdn^S=u(cLR&@NJdY{1R%4P~y>j`P+;86U?x$nkVYCnAE1zLPLO59c5%Hl>~ z7R&IAP9-tF60VxphSS<2!!?%m0@R?C6yf{9K22L~xrbV@e!jN{1T$s!GsZU*iaKEK z=q8RCSLkpZgv&+JM*Q+u$rJ z)=|3_f`V45k9VMz7-kDq$5e=7g6>#6p`;X$mN9zsnXI;(*}?KbvFk8__cKX}slk_Y zChhdoJ^MpFSLC~a$*Ow|Gcs|8?yw)DMz;Kd7Z3_eC>pF7)YY#yo}{{WF&fV@HQ?t{#hKvp6lS+JRDg<_+`qbknZRyRV*o3IQi{g64en?<%J2)`n;)TboNjjrHtmJ024l7P1ndPrdK2>4&k)aI_BxrgR zV)ga4-MbqS<;wPWS8)dy%&W#~UVX_kaUnzOOlHh~Y`JA;;}a(Ibrvd3on_7=fji-} zPJn9yF@ofKglMg58f@I+Z#TVABiB?6vyrT}wVr6WCKQf}!S{srVWRur= z>FwoZJyeK54a(Q9mD(H#S&w_`D#gD?1n5At_;ng$g${qQnWv8+JP{=J3JoY~|lcy_Fno@^@)nH~>y|1qY?yy25Gl z!lm@_VB=t1kgYiIV|kiJL$iw>u-JJPJ6)Brt?y4GpXk&a6DnC(v0NdOvQ zj4FRQW;32UcKpB?g%3Kqv#I^%h-Uk>94>ZST>5`&jsPHf*y*^yPUjF5=<01B=;Lw0 z+uq5?`=Xo6zc2 z;$$Gn8*b%{`DX@{^=h(eu7;d^ckQkpL}(^v?(XorUwJAL_UK(}Xvm|Ngac}bhu1y7 zuW868y;&W_iH z&D3+CAcBYbUZz%SL4r3=dSIWLBO;qBaVgr_rtnkTYP)}-ieE<~N#OoB{-6=RZhQes`*H%{*6vkh&||DJGE9VK21c-X2BL?KlS8ac0tc;&+xscWUi^ zh*Su2ku4&KQ-?y8l27-2D#HV!6!AARRCHSSOQJ6YIK~;#=QVD71?b}Wv<$PJ_Q-%d z8OE9AH6=*AT-|=x z7_uPsM&PRQnXa2T<|;tSf>fBJ-F9(cnNBz*Ls?WY#kKH znB%z;L>7IOvHIe^QWCdRT`HN=pC~TNywdO-5oDTJx3Nr>lUz#6GReb-u+toZSS5b5 z4|pX`96G4Jv-nEH_DRzsb@Kc9Pcg%dKT1VJVOjpQeX+I4J2MK}3PjS+bgLgejeaxv zKrECfGMob<%xNt{WzQDX+2%|6SQa-QpM=5NS}}Wo<`QRYdo#PlQ`|Z3#Z&z2Fh}Hk z&1Z$a;)Bg@(`X^x{*T%#a0KnSiyvbRqawNQ(Qp73g@QCgmVyD~vIVmQ=c)4TKV3)B zDs?83t3C;X0phMLT(31!{Bb5{bQVvG;}OPNeeCH+i;&Ats>`CPy_10ux_65i&p5^O zvS@q8ZB$Fp6Zgm#zDqC=1f9O6CNQu%GfVbkZTt1=i`%`8vqB0L{wRbW%R}B5v^9*P z(3`IulPid3od=t~P$$tkBy44Sy;~9Y<3^Kf;J~Q$$uE%b!Me{qh^9|$oSW0CSR$z@ zVRpzd&&n^wX$;HCk^JbIWYRto&$^COz#UUPb!Fg@)wwF;(1nx|AM09=vZB?;6q@$L z!ZCJNzTPm=KhrlhieSP$Vhee)vQ<2ko6L9C`JpIL*$i{5^&S5-;yh({D-F6 zbuhDXw&Zjp$r9Ys%Z7$emf+DEqYrOeqns}0_R4SAbpHAeSv@Dc|`JKj-`9+wX|kQ z*(vX8^t|J@Dy5qDP*>YVH1f4?ERwyE)WfkF!H%By!WUd|TyJCsz6^YQPzi6*(34o@ zBrvm1UfwC2?v!VEJ)FH#XIy=mx50RUdAMB9PcIjdg}Z)RE(mT-`Y3pG`HEl8tQn&( z^FXEl!=g7-6b2(ACUuCI?f$9`lWP_7scjFL40NU+Rv^$d)kEWH0hbJi#I_5}KX^sN z+dC{8^cOY`QpyKqn|JkIqmy@>BW2d|`cU7B9LT?NPe-bicS6*PALgn4nVccJS~YAh z=Z?tNWvr&YS9eTZ>|~85maf*zWTc_&u4`{@%k?7GW=n`2vdeV^!!;F)-N~|KHppyj zD?W*by)&WhYZwdOGoGmRxVmtFb$C3W!Hj2wheIPWkz4w>h4yos9yMhS9?id6XbR7- z?mfeUMF{rV55iK%Y%bVaV(@tJ+qk(Y%!U+}CH+gxURL3lS0pQQ)VQaWkBvyEN;?=} zN#*QcWOY@=pX9|4ymY*56-Z^@&EunaxNI*`W?y3Ln#L=4UO^B5z zFoY4zG%tCAU`&o7$p3T(V;kr}uyd(EoeC1t-(rJkKL+Kb1<_ObKcj#v22=ZezhVE2 z1OSx4n(`POhQx#%p=9_|vP~a?tx6A~pY%C?FCiFF)&PQS%L>BQj5L3eD=}#2Pm~(@ z*?{zSfxmJRI+4>2C@5=h$arE0ZW=p4g) vs~`zO&0!Y%f(!HVIFWnVPZpKHQ5paI-^&1g_;3OM1oKrP1%M5U!(aagJ#IOu delta 1415 zcmX?cit+bqM&1B#W)?065ctFFHIdhVy+(mOy-tCB@e&_Ut3wmW#JS7h7<=VtS0|9vV@yqZ5#@5)npTQ3^V?jAeEZo){u6wHO zT`sU-sRu+5*-sZd?BEJTJ+0UTfp$ms-?aR_4CoSJMg|6r$qP+nC)fH5!<0>)?tcJm zTvUJshGVt`*u&H<{u2Ok%l`;FW?&>vW{ee^ESC(i0hA(OKx=Ytr1s?dF#;T+A*>8g zr7{X2haB7;RNc-5Oguac4CV|HU>!g=F)V4^!7%w^6wF*1uzL)nrI|J`Pfm=|nOqeu z05br4=L1B*_7mn$5?@hUS2f#+ysUnHd-+ax*ZPpg16f8?5Jj z3_pr-3bE2mFZsYy*`fjnamg?=sziR|8fcfb-?_K zFl=I+G?TI<&^npPHt|B328OQPwkDm8f#IhZ1A{S&`#WK}6v-y`WQ*x&dgx$6QF0$t1vKVqIlNA8EiIps)#126fLdbW?*D_ d2~3z?p*S`G delta 178 zcmew-`A?EJz?+$civa}wFndkpHCCxnU{9|D;?fFk21b^b%nS@H^*~vWIuRhv0alk{ z!wymh#2c4~Gcp6UPG)4Xf{AT*V*0@j7PRGZgb7Y=zukuHq@ diff --git a/examples/zips/database.zip b/examples/zips/database.zip index 5e7ebdc4294d0c78c28ed0d0cece31fef6f5c5d9..6bdad235daa7e50777bbd6f3d068ade9100c978b 100644 GIT binary patch delta 8565 zcmZ`-d2~(J9=^YwnT$vzxd|Bvk&#qPAxV+k3`m4TkVFg-Nsyw(N>RmoD0(bgwNGhR zCqvNC+dits^ch}CsQ1icXoEHs>#4ThK6{_D&)qv%%Rk@w_HUkUo?LNxa>d0hE5pvd zg-QK4^6yz|+`=6ndrYi)?4dkJ^tU4jUUeKoagaCiYT;tCdxL$%UV( zI(!(hqM7)XUdjAXj@McyzOhvz2V+~mXGg`K^f8!i+J3}zeq&D7yylK6fdN&TXEmDx z!d&R%;~kkq5*~vX6_&x(ycrf^?@oe{f9%HUk|QLfnV_7W>4y^okdJbui>FRh7B0U+ zC7z2Iq+>N*B0~@bheR6^H%EW!M#1!iG@Yr$e%Z0+yM!l<{dHnD`oSh=ihEK@Gi-L! zFkOIQd{fd;9jr-9j%U&CyNg8Ivps6BX1rOf?^?3?lm2OC^og=FtBnQi|4~t1gbpoE!33=k6e6ZIF+{l>A zynMarOXqc9sa>^bn2!CtXgKSl~X^Ke!3TG zA9$(#vhqTZlM6DLjysx65lZlSUuDWtXJz$@);hCh%ZgBz$y4tbGM&ynV{!cG<87V5 z&SX04hOfndS$&N+L?Bnaf=Lx?UDJeI+K|R{R;QgZb8T0ypn7cnfSnGZmxn?{P4h7P>1*bA9oFNaTk5MG0DK^4I^sk{7Yj*6lWm+u?&AU$hpcFKMF= z_?kboXfu7>v`LjSrpGiJceH9;KkHOcLYycw(W-fOdrQ1H8u{2d3!4_uv@G7l8dDv- zwVS##5C7V1IFs_xMjBVV>K25)yWK|#`s4-Wp7x1Rc^f{dVXd6C#TZEoms5|h^GR@} zHu@cID8EZ=oW>>~@yZJ)c15jhjI8-_s{=FW^0rK#huG~Ntea*`7_z-9sfqU;=nPdQ zD6@8WbE2{%gH^=!T^0_;eraY^Hh5102iNS;rhn8oM(s@hrXO>>-~nllrZ^*h`go^) z9N%!hHiA^;B3~uAHWF99g4}Ig7`JaA8yQ;<@qs|9S`Eg(X#y@EHX;{&q=EVCQ)^f} zq1KOCyzm$s+G?umjx{jQJ&9I?8&2wlJYO<1gX)YSKBsODd-(V?AJcr>M4#a+K-sdQ zPtB1tcbGlZKN=F$o}!jJ{5MOFpty17UhG9b*lZk3cgE`8DDWjVCS5WztX#@t1$6%! z3xghTsy6@n5M6D}j_ZS+Rq)+LR%rrpawE5|=15~=3;Npeaev)5W2{YnY~*17<8xG` zg8yP$R*>oV+z3R`^LV=U@p@-qv9zUPHy0S88;X-!L5TGo7bvB&@l!8I(!W{Bw>b<} zTMSnYKt3-H5^iUPQvDfTX@&!;OE@b4c%R`-0dSO}rGdaBYTX+M+i22oS$p8VTKBex z)(k!!1S56H)^5QtnGLXw4XuwpB2D@f@ak^htJ>BX-wy$I&PAc%&bWuN;;&)C{nOxf z!tMivX@{qGfL+wQP91F&F6#)hSWn-+Q4yX@dit(2>85bp39C~Cq%$E8rd|9ghzL33s1Ey3{FfwPeH8R&0)C8vzPc;eFBUFQ+bUC`Bi@;c zyl`|^(03)T7M#}=QuXbo-D&vkZZJ~AtPR~@lpUQ7cP@VL?OC$#w>i)`jH^>oYn*Oj z6GAqC>5#{2 zpx53$OTAi}Oy(4vT~F%e)B`EC;U-FBpmG&7!;f)hTU5B$oqKFo(Y za8u8V4h4RXx~YfRn*DyvXu@{z8b3CAMhRcBYLPjQhD_Emc?CALx1#{gvWzS#20o>& zXNn=2vD=Qb>Bh2g5XIOVN`NmMe60k|)1d5|2<1E|(WUSqMNgFiKM<_mlc0%7b}okj zoSah*%P9FuIq>0U?Op*TENvU7Km{jzO@+@WdGAykF3fgU8-=XJ=@$=1r(VGvVz zU?vRLVH_|Eu2C7!XW1ysoegzNVW)XUgIUYxfd}(@eiiWFHP+KraGr_Yz5w_y8|(80 z@C6gH^({j-MvLJ%)ktnuCPU9WMU&o!8M<}Wy>G)Ec3i0kdu6UYj$Hw5@U`X8{Di?S zD{LlG*$OxoOa+pkmhoz53tCoHLtnk!>#M<+*?E5_L{i;^%L|k&K33s^fKPYXm>K*f z{KNv_x*J~Q)(_teJ+!^B5BScrHtd7Nj9sxGdT{oZ{m_oVC%yxIJy`t@z%phXJ!3p~ zfj$05!OKns>~I*ya*)<);S{h7KyBw+r=Wzj8!L~Gm*yV)J+J~9l?)o!g?BIa)z); zBUtv}mW_AG4bYoeR&^Uj>msbzZ^KbmF*~zDalcaJt?w-&inoMwBMfZTQk9J`Q*Wtz zjWB>oC)9X6=^l7ArW@;lK7Un&z82mY`L_EIlN zKhPc)oc#6yr0Z6=J%mzb#q8g}qM^9 ze{F+ORNytU2IP99K?385H%d_dXk$=9e2_&%R`{S45qac;`cs5!%5SS7T-E-zXo&bK z#up6|k&V6@hs*KsLqi0M-}FN(1dAj6Whw9bqkK`Wj~R^+k=152N<`cOG)zR!2cof}m6M`y4q<^T4oDM}(MH5Jt%y@nW6em8d@1U8$iy*C|9QN9d zGN*5tmMk82l43Ki4?}T6;=?+j(L!l_+zCw-fQZg$tnj3|Gny&@{lZbQX!GW9xtu(^ zpiGfd)kQAlU%SY!3L{X4`07LiN~8$)i)c6F)JPO25?4h^;@3sV(x*mgHgQ>`T+&1_ zmS{P$-$l!uE-`Y$MJExPzKTIzMPV+natFN?t91uY?jOxKGrOXZqMV0aWjPhyP_D?i z)eWVKNLHK{0Pe15IWhA>9EuT%5wFO?K7K`xf`50}gtgt}SFZ7LTQAZP?(YBMwYKKS z+#XsJbL3eMc^JIeQ+@@#P$Bh#JGZbGN)-_@FwEGYH|i<6Thv>NFMoQmx9mzzA5edUQ6*H4~wd-};CiBCi&qU8OFXs~D@DMG2`K1f0{ z#aFK+%U*0xma8rNRXNokzluslIZ^%5L=pL_8Im|aesyes9OvYLvZsdz$|E2qMMHSL z=#;mnpcr9rIi;fE0x&-nl?s5P1?39Bd<&`&fEH=&30Fm@O?8?)ZJwmb(Wf>oOqUnR z>2x{Z=^1iw9n3&kVld+}wN=OM_&igdIevrWgJR(zIlNB?$t5vyupIE825Vi*`>$|_ zToM6vgncWEL%2GGld5- zSCkf@O3^afA>M^@hZGdb<#3`RD`;S#%wK;T?iZ_Z-mWbvohL;>NxqlPa7{Er~Aiiha-PQHk28UnSdfi zh1C<}HVG+_vq2AxJtgvi;XF~cb>T!*Cg#Vj6r~HrwPq4ALn%c)g&Mq9iWbYX9D(6b z#uz-}TguP?Q5Pv1TF9L8MmZWG2zgvCjo^w33AkB-@`NX&CZnMOP&XOns{jwIWr|$k P-%mkHsA*YKQP}?h>|U|g delta 8564 zcmZ`-d3cS-8b9x3Co2+3P9hs2vJzqoNs8oTK_VoABw~q3f)ur0DXO>+ihdrW+N;#l zRxPoFp1M@6>9yRHSnjp2p$*zlJXclSIWylk-WzM( zPW14}cFZD4k4}sXP3Laj4-K|;B}vFTaeHO)F_O{@P|i;G!3loIOS#_BT_Y; z2Vaa{!0c8|DB{eR-JUkejs*5$pD{$)nco7>3q|%y!bH2K-b*IxI=`LR3(>0o-L&nW zZeTDx0OeM=k8&o*2{#5KM`k9vq6K$mst5ym;+GqXpWnAN7}j{=jZeW_ce>+UXU;zI zF4)mL)J#v~prH3;yAZsg5}GNK7P%;sXWPp&{L?~GQH_8nwMXt+X~{t91#_B{r}ccv zoVKj8D;5mVuwNDoWkZy-s7S?>&5M$$w8x8Ln7;aSna~sTZi3BaXEU}?VFau@+DK$7T@%RX04`< znKGeb+SKSK+m1Gk^VjXmi%Afr2HG?qZ*PtlMjcJ#`v7Y7?ueb{#A8+?k0>6Aix2JxoH{QB0tJx%HZqYZ={G~J^?06cSsYaip^<@u; z#wlz8lBhgzLMPP1N@Vqgt#(Y%wQU)^4l&!^*f32SH)wk&(i5NB(G_a3pv>6e$%)F2 zbk-5Kc9}RBv)jnJY~bE_4zAj(F8|1Vdhbl#*M|k3|Cr21W2~M(ZM)MrPOiID6HdBv zfwvM=6M-wbAXn=U#vJI+HpbQ?d>@dmwj|@Y0l=R?p(~s?imXtMOrq=buRC zifd2QGtf1Wc7zK~?19|hvN8i}^&LK|b{0GM>@45X{IZEU$8P{-%d%e8$Ijhnda5qy z7A!MGmD~L{Q_~|}IJ2+xpdYL*989l_l|7OFTQnwK)hn!A&1DVr=q5{pmT>Ae@75sA zZS{^@105~k#|^C01meU7uCMx7Lqaop+WuKzO`E>fCO*?^aPZkhYEr>}u}fC4Y5!VJ zMB(c=dh6r0j=*whO~o!wFiaDQ6I(#A`6DMNp|himM>6AXV#0l;bK7Ire!{lHQ`^EW zDzAMzD~C(k!3;Lj_imSmC6Sqa;7Fz^3^)3M9d_?8*f3{xfDvpmcXU(}PqvrYAso_} zk;hZ6{2WM(oU^wq`w;w>WMFM1^kfDuL_=>a6zmfNSE;s&6ljNcrXUX-)d{q#l6MQv z?F1>>?WR7{@Q0mYxQdzUJHrSYx*P6a`Rx1ig37<3}qt#9^-|G%3bck_GyzX{oJUn6h?(rgemp6Y) z7hO%TYQB&}(hpkHO`mA^rxd-p%mF4C#u7I>4fr}U|0@l0Sr7Es-)pf)bA!Q{jI-)U zznqx|&bT52IpAR#z~3w8vJ41sPMv;|3;lTk>T}@_nh4TG{4X5u%7Y+WpMl)0a=?Fl zq~rnnjiAjQP5hDlzDxIz#P6{oZKTS0T>=jHQXcR}mib8@)PjrUdC@lC=V@olyKL1# zA10cx?L5Ygj+$1?uUJcyIgW%3HZi&RR=u|)AI`IiEGh!NrOoGxAc?VCkFlD@(lHRp z*z1acUpV+?Fdg z?v>SeA32@#6?{M`)_dqxG zUN`{!&NJ5^fQ5`*eh|8G_LhUthQX(P027CO55W?qjy_}DcY!VbNB-NM3fS%_jOJ%2 z9R&w^RZY2Ysu^OVzYovoeUFCO;2L&n$57Vlh2)((;Ch%0M>zXi?fYT*@A zv+fM^|0xUz`aT(Syu(j}P1OgCIs zSCnOegk6CP42EmK{^cQfEWD;KL^DZbH%6|%4(u1M#YW#7aGrVey$$@SrC(4pZdz`$h*hqqGPP!qG{7&@3S4)M91ApEK`)QP99_S1UL4N-j(liw=PoRXU znE5-HR20|z4)o!U*F5E*`R-FN(`PZ6zNg1Y+UPw1yvjeSLKPKwU8Md=z^ zYl~hn1GUW&n{`1~k~5mgvwX-Ioo6O+E7T22yl47cz;+GB1=YB2T?gUy5)~d9781yE@n!4H8d9d!qp&vff+ea64{3Xpo@z zeIK+;P#obaTlv%%<%xE^jA)pMtTdt#BI4pFpIYLFaw&(a0e_SzB4hl~5D~fLk4B4@ z^V^_NBIiaMlr3_G1fW8Zb1f1Xabp0A5{Zd{Xy_Y=b%8Q5I7lXb5`@Ny#sY)UR1w)5 zjLJo%Z-|VX4MCGd38YF!Jhv^16_3`nRVDByNNp#ly{4Va=^d&Ti>IBG*of;wQLIq- z(DrDg&>EZCqwxX|-T{pkj#PC(lLeqp7)lZ~Zw!;$$-N`W5IL0{+am3fDw;7x$(j8jO6GKomIp2>k!boh z8g&wlImO5m^g)a|9lW@IHsMU~gocZDo^+D!ly^osBIj;rlqMpXv1$T%xb9^{=H*xv zEfT}K$i_Bxk+b02RhF>2t9;5iP9Ez88p6Z?SXR_q)rdpa&|T zQSjjA_dqEkLKcP*+x0}<#c&IIs`=$duk@5d$?k>nMPqfnKRM4y{pCoH^p{sabh3)@deJR!PDatf;&MnqLj_=N3Mvr* zdlSkLfVn1AE&$C^*%9uFZkwu9dD}csm9tMZ%}~70yvSp@QfJpP?*ql>3JyK0&to+5A_s1&|MZaT;63% zhO1I|LL)}V&9r`my307nerz6Tr5|EJ}~wc%MT34 z@v_$W<58(tAD0r8CN$To2}Ficg1QSm_^<>mlxf)l!>*Juc*eJsqJE+;(loS@IpuF< xXqaH+S(&tg%gZI;PC3dIj*OUy1`9y#M3iR%cw$YHal(0Pp|vRKhaT&86*&A3KtNWe1MM)EV#`PBv|v6 zf8*b!tRRueOWCY3)lFt*_kt?i9L)Zm39QnW%LI$cC0zC}l`pv(nZYV^`7E)hJjv$< zQz^>-5n?8%kU31uO(=vBtb4Ao4ODFMec^*(p~WILOkepYKNOJxaVLp7gLoIk!Mw>S zqW(ydldp(+BFox|MIg&=7jr_El@j+wmhBLCN0$8{9)iqGm2gGoo|fz*rY0~MQmU-%$cXt9V5lLGtXhaxf{?j%uX5bvTmm^V2^ z)E`N5@)c1}WLZ102xQsqVou1iQsTbIvK`{?$g&^ALy)qb|&H4m$(GGg}4*^@)Y@lm9ab zLJim~#=MOkYJxe!9bjuFYjWGcl;v`-V*)Fa;;LF5uoxuvAfa|w z#|37Ky6#?xKcDNHp_}Gl05`4K;6KDPpv9BCSh+A`eDXaLxN1eyOR&HLhDajz5DBn= zhsYF*Nf6UDZ7k3o(PCo{bL&Z)FA(1!uycfpO=h=02o9vv_Kr-z^tsVnY;uA(8(2u! z!382D1LjV0@J3g0(NTJ`q@xzHsuV{bOjWMPD$JcQR4j4wLRP`=9Efg4qq94*ikHrQ z=qf;NDRx0|%RUzjn?S1ETv1d_bj48h&(#yzwhXrbWbREjsB4jfN_ujL?)l-(iO-}Ny1Pr2$YQcQ5R-8hn<1pnJoi@`ou!{$^V%I zp$2RgW8TINHNhO=4zM+oHM#9z%5u5aF@crI@!6m&tL1ZsDLcmJzzJ5yDPf7OELFk* zrfju@2*fm?vnRio;zCy{BMrAWL0W|w>OMXGl41-Gg5@5{!PTqEPlANVE(L3JV9t(Bes6tX!BeKKY&rT(zRK`u*uV#9?A-np5 Qw=Xi+&c`3b?e|dw0LTt^y8r+H diff --git a/examples/zips/databasemigration.zip b/examples/zips/databasemigration.zip index 640566d92737e5695c688afbcdc1b8c04a71a561..e926fde8f3f2ecbd49238818232e9bef69b3c696 100644 GIT binary patch delta 522 zcmdnuw8e=xz?+$civa|px&kKh8X11&Pp<>w(h6<{MwXY%3=AywKuHv3kzn;uLVNN> z7QKn{*w`Q%C*R|eVg?y?JOm_C^Ob+IBIA5!kkI7AED>-qRv#v?SOL2=Ol%{22qRdG zgVPMnw8@E_u25x@*KocCtD3`QgRbf~mj}!+PwqT6u(Dl(&gjY%grZ=|8ibf3Zfg?_ zgNZ#7^0g1CiBikk3HoS}LRw(h6<{MwXY%3=AywKuHv3kzn;uLVNN> z7QKn{*w`Q%C*R|eVg?y?JOm_Cqrkpdk#RmVNNDn5mI$~Qs}B=ctbpAbCbp41gb^&p z!D)tO+T=t|SE#bdYdGJ6Rn6hDL09#g%L8VZCwCqjSlKQ?XLMx>LQybf4MNNix3!6e z!NeYk`munu8cR7q#U@uu9Rv&6N;@zquuq;SFUAQEwaN3O10aGjU^VKx8!=acy~Pp|vRKha)_86*&60TQSI3e36y5}2IJXbKhC zyn=BJBUmh)87?-7IT#}Lg2fo7PLcHv6G+`84s)o`WLu8SV4a^itYAXMoCm-{-#D$9 szVc5_;M1& delta 250 zcmdlXxkHjSz?+$civa}wFndkp)nQX$Pp?y8pJ*?|3=)X3014Cp1!i3U2~5sqG=++6 zUctDA5iAzY3>TZk91IbA!D0+kr^tGT38ZckhdESevMtAEu+GmMRxlxB&I4efZ=6<4 s3ha{;xn;oIKrT0A?hYj@(V@- zsL*CPraDfr*nDntsMzE?-21>nb9u}afjUboxEUB(UNSQk;zBwR delta 217 zcmZ1^vq*+Fz?+$civa}wFndkp)nrp(Pp?y8pJ*e+3=)Vm0twV8uy33g!Uz(X{DRQ{ zDzsUSsg4sYHlN!ZDmM8J_dc-DTpn{ppw7|?ZU#n{m&^R}$7Y82;Sodrm2Xx*4 zc)VfC{CNc#!OD{P!eC^z`PHVaB#V*-o4 zlJ-N_87&hD(~0ciZL&E~;msOyJP_UH3SQ{C=c}1a)>jgkZ0p23d4miK!la*I`+h5? z!c0k1GKH8jPsI`@c2^|`;!AS{lgVqHg}68wn1Swv#uGR`CeK%cc>@?B5L3UY!%a=p zsDhY!Psk!jw^}qoDie6YaozV}6>C`ls57Bwr$POwtncsL1 z*emCZ-O&xRFbRUGf;p|nG#+NyM^h_EI?=PVV*=V|;2?%bc$0fA;~;`EVAFZ5GLgB{ ztm-kfm{}(ytJ!6phs^b~>BQ9X*~Sl9O_FUSGWU*c3Z|Asy8vW0m+YdExqkLgHz51v zl6?%a8h?j$WbSo`DhL-@OSZH0njONwsqp2yg`NqVbV{qeZLh` zVWy-hnLle@uj(f$>g=pLR_2-%s}@-;|Uxeljp0!ya9|5h^gPy;ie{P zR6$I=r)3T^Ra*NeL`+=I86*aYb%<%Tdf)&6MK3Iz&gh53bZQ#Rhv+!G0OLo!7Tt9oL8<72S z$vy^IjlV-WGWWVe6@-hdCEHnga<8K;vbxufDBjC=Dn^!Nc6P^RN(8c+*N)PY|2umi z3uU;VnDWQP71NX?*Fa<~S6oqi6X=$TEPLI}2h#)>_fTXtyWA6yxz--JAnqy;H2`Tx BN?rf} diff --git a/examples/zips/datalabeling.zip b/examples/zips/datalabeling.zip index 26cbc5d072c91cb0fe169d3e294cfdd9a3c99e1f..2fd55903bb3da743d532b3ed8a1d60b50709f057 100644 GIT binary patch delta 183 zcmew_@Lzy8z?+$civa|px&kKh>au<1Pp|vRKhZ&o86*&E3lgaL%D-^|KO;zF@+L+z zsLLb8oSEBXix@U68q} Q*`1KNd>o!2ZX|~q0DoLRdjJ3c delta 183 zcmew_@Lzy8z?+$civa}wFndkp)n!v)Pp?y8pXeaP3=)X71qswBuy0(z&j=Ekyou2a zDzy0>V+cgdmDvO)R?qw$B38+24HcWbi}fH_YaN?4lLGtX_v|uY?kzTNWUd>#3o>^# QyAv{(kHZthjpR@R02IVCS^xk5 diff --git a/examples/zips/datasafe.zip b/examples/zips/datasafe.zip index 725b00f1b823f9272619bd5ffa66ed9d99324709..fc969db24668202ee90574a4dcdcad3378462328 100644 GIT binary patch delta 10289 zcma)Bd0dTIAHUBn?RDF3+fAw)TGTBHiIilNrsM#aj#@Z0s zm)>TKJ!HIkjTw{~${J(I?mg!`_dNG`o_l>h<`187f8XD}KF9tR!z(WhEfWS97@A4& zf5VFsN-TYhUdYDHdm#f)H`tdX7#W}+!Lr+4pm>21nAc=vF*wmwVlbD(xL6^;u)rCw zb8Ms%$*DG=<+ig1>u9DyBJ`g3eo`XJ&mcsrfMp(5l~y!{kx2XuK>7(M5Ex|yDhymO z3NcpI8q8w|r#e{)a@xpw+~ntNZDJ_2waqM6N#jr@D8J`J^|Ri%5cpk_Srk6jbQ@o? z3Al9MR3FPkb56q%^SP{sP^&btA;+xNP|3-%M8*ckg@je}M-WKQbpRh8x`UcbLost( zn+cTpTN^p6e`@~e0( z{r$h$cD7sFN^%V>pBkvkj;xE0DFP0b`wBWvIH(?O)etrKcQE?m4!8Nz?sID@D?gJ_#KzbuyS`yu*8&=bg(x&Sl3!Y^-5wbaE?uxSBe^8pr+nm3<{kyZPyToyJ^uD(@6D~hXP&cr)ze~I2a8vh zsx#l62?0-)9n!LfCRR73)SqkV7d$$qKCeOIf7$(Xz{D{ZUit11G1`C7^_H3M+M0o0 zrBhqV{_Y`lKiwy!bV-QU!PbkNVHvs>= z#BsNBDn_SF`+DIR>t7N&7cLzC!zp#}*9-T`jH-7Id6|=Ew<1eXe{ELD;eTU$3@(2+ zae7S8ea}ADoj#Ot=~cb;=)9g;Ca)_Rn|j!(uYbAj*O5!N&XLCb@bT>i>m@3|R0V~Z zULft2i_Y*Q&7=-Wr?qt`=x4SBEu)m+Nf&4R3>UhLpbVE_=s)1D&C_#jcC3ySJ)@rIw#S+WMgiWG`)Q2h9uD!EG z33lDK05{)%Vpk+j4FZj*%o`0sWrULk>q-YNTa|WIN5Y#~YuBVJLBa=b@FYTKXgWsD zpz6PioK6GR2mhvVj`UUSEW4AN(Q;a2B9Zh%eWd`!#m1mllm*xoNYmlvzv{sh@?X9UvyoDt5CXM0ur7iO%C-u_CM$}rp#%DSlZJ?;T}@h|Q4ZEDb*m~IlEO-C9Gbv` zk_f88WP8(51cMB~QxhkcAZ4s!nhj$NRt)Q{kx_MJ*c_H$o!p(rPyDP%<`(kX?uU(dJeGJ9Uz&d0ZUEA$2Dg%&DKdp>3rZWyYFm^36_1l>GatoO z+0s#Q)F`r=VW0(LtiMW1Hx0hu0qI*N1?5+r@E*rt7n)rh&G};@SZReWUZ5`76kPB( z1CugrbOaJJLNd4|U73-{GNKv-4Gw1TyrurS89$z@vlHWwXq0946?@o}$(2|9L<=^< z_}VJWl8d2-vS{eR+hmt2kL*1x{Ay0J7&<6-CH@I}+MGL+RgRh&r`rXTPqpRYNrtRr z7k;w{MeG*vi1Y-7!;E3EEhC2owu~Pr4kgWxWev<*&&o=1P?p&-avD)hzmNjU?kw}j zMxw^F!51Y$*}-{s40qgNF>9wUWyPFZC_(ww#|`l9C6jr~jISBI#%hp00MHFbi;Lc{`09fJd&BZQyO;1DOxb_nOtqUhSd3;6liRgN>u7G+}u-=!| zCCgWW;w$n`#K5YY%wSy16U+Cp9BA5?xu8KBw@K%dVcsTg+F#maXGoOZ*%F48@>|C- z?|i?r=m0gc#oHOWDH(4X8mwvc*1y?#J8vh+0KX)fcaEbj46blyVY#~_bTq6zc5@wS z&S*ni3FO33RGI?IO0KuMR32pAsVwk<byEpsA`o+E-iE#no2&t0$|P#0rPGs(Kk~Qe=&ar;At)YPwOA>S`9Ua{uu5 z!|TNeJUU^aU-+>Tsg%p(H_ezrqYtL|>)Bvr9$#6!>Rkl#sR0BnR$`pMrH-dG^JLNj zU$ETf!qlB4W>dp@{eQ1tO+B$QFn&e7Kb-0@OZC5|E=F&ESz? zg&i{T%P0T!9Op($j(?HGBbP=X{jDzo z1(5zP(|HhBY>6;;UIqy;-C9R$FnXR(&bBIpKKB&^eT=ptZ;-@9cYNLp-cBS=Wa*+V zk^DG+U=Z+lXg}h!Wq&S^Jf*N^&_;mstr&$gz6-qU%6NjTSC%FMLrJd$yi!Q_a|j$n z$_=U!sWyaV{?Nr-53}mEfGW6fQ0GB zod*r0hWY2h>Qa5J}9K7QLw~_Q32UUGgD#Z z5%<<1$Q&&Mq(=IQrQpQoMuW>A{e?Ltkrlj72vSmyS>iQ5VqLiNq_6wa5Sf8Xg&m}bM6w;p(aD)TlWCLyK5NT~{RdGjXZ1;+pgh;mrdhNOq~Hw-jIfd34|hWF7^2-ofhHQ>!Y3SHkh0;58QVV;@%uuZs$^o=2G6D0FjWrPMbhTVN*V`7E^~zi# z=`1kKI)!8WBUz`=h{r3^NxbOe3|wi-7}1I&S>~Q*bR0Js#j(OirVL*HG@7I}-;c(0 z^zRgM7--Je=!w96GvwXmF??8Wo)mI4NW(Hf`eRq}m;>v~Mb>E_a>TxuacpjUk$A;R zy~iV!4zQgiqts*7LkwBNK@#}vq{b#@0`)UFR9P|hdf4CNGOXnwc+1kTuq)`FNzg{d zsD!K})`=yps((?D?QJ9O&jDGOXCPk|DUDwy!;Lb=2mQ{CV)#IY3~1Gemhd}974yLf*AsX>=`+F6XG@_X_X%6wqp)Z8hJ0mvz3c0zWt;{vq@HO zp=T!=58|@+nMk`GQIOH~(Zq4c;1GL}&Jueh^G-gJX>T(yIGl$>jM#m9>Ve7R{%Ke&SiN z!5@+97NND|3DzyJ;Li!dp6Q6_!HYF?Ghn_@Ar?X67_bD#5se!g9T6j(kcef34p%xc zbj1_#jV_25R)ly-5gEaD&Z31eCEs}Ncog~dXq5C3465}!wiV6{|8jztoRQoG-{QES z*OLx{)H>yix#@zwf}@Njl0<>T$CSYxTqyDq`$=pqTZuy9g5H?)jiv+z()yYrI*A2% z_#*Q8RY-t`XoZnjgu5bgdw|Jst}EApghu+dz7*d9!oF3sMNC0un4kn7ft^?$o}RHm`onh1iOUT_Yosf$|+(5zx=UxQtM54)&svQminTqz_-H` z4g&g>>l83KFTVZ}YtTHknQP3{&PP*EB<40BV+vzE87GZ3I%86Juf}XA=A)-KTRkoM z2+Q8eLGWiFH!3D7vEH8%yBw}lGD<<}8Zj|$7bUiZfnKE6Ic}1&t9$7AXbY>oMD69s zJ>7|O)_t#*&A+{{y~x;6@54?3>%B^Tv`8fWx7ufy3NY$#_FF2tiilEdZLcmsjB_SDcu89UvCd9gN0WWx%XRda#KNH zn7LP5)Nv`oFyG=B(JQV_Ig?dBs*#jDddL-g?!%E?k#om6qA^_8Rgfppcvm59`G>xK p7>O)n1Jn)4=zoX9z!}{b2fQ~{c4M5Zwn(-}1`d=+9yH^t{{OD!2yXxY delta 9828 zcmZ`-d0dp$`kynv05dGZKFqKT4$3AVN+_ZTA(*BFS4DBb4P0^wLow5YG{dc2&efwI zQ^~wtt81p1<$}x4GzypU*1c*jc<-%SZh&<)m*n@HbLPDBzVD3w;pfAg@3VcM<(&8V z`#twhTitz&o_BNCYv{knZiCkPCg`l5Qx;i0aZE<=+9I7B{D>d_Cl()T^uTw1@$?x! z%vSNr?MOiH`6EfoRK3%f5Li)NF>6k$OGTv( z<5!d;jV8$rcQi)fzqy&IJD{N9wA&)YG#Cv@_!SRdhnr^h^G=U}0(#$LJ~vk7RiuXf z|#LLBm3>Ez@tj8g|%klh8KWe;5j&Treu_|E1yf_2Hz(9r@#* zje%7sIPYy2&?W2Y@h87E0aM(0AMoz7{ zPz`H0&lRv4788fnMHQ%FZBdg2Y)tev&es!brW!UX=6M18C?=KrcE!g0<+a3Xv|z|hvCvWQ4J?E zM{(#Cn++Fr#5#q-{G0MeaefZ?cORN`41V3KGald32Y=G+E-V`Q*ww@=rvCZjj*d{# zzjEu}_njd`24q_}CnX=)NF_pnPNvyx7+sZyuY>99?l>mTM1k=_G3{$p?j!EMzTAde zJ`X0fS`>)K<>{yyx#eYf^F-V+(}EgI{U-@RpH)Nuoj+DU`yPpEC@A7752@25ZKT5obyMMe>FhmM-5B&dm@URd zrQsBnf+tVR5GJ=ztl%c~@wEP0LiN}(U5|Ia=&5$~;)_xR zrcXb}McQZdSHnimlE@Qe~kwvNaTis2pO0V^(+nm|4JXxd*%j zOcWMGBElTb(^~eKzl`m^pnxTq=z<-8h8q%4IUazKajR!V{N=3 zD!aCY3&t!SBok!JyuEm)fT1N9Iqb?CxoTMM(oq8T?ouM+?yZJxtdrgeH|s|6BtEwy zM-BUEMXAuHU%8lTTfK_afV>4Ct(q=iGu}!U+HB;LC=@O@l;d@4gj!5z?~*lt;xd-= zwslK=olAqIx>8p%b^vgGUx#bYn*c}5Rum-E(-hU<30x113x0pt!3 z;R#75I(>9FsykjEI$oWfG#XtXyO9rfQQpYjAO4$9+SXkIWTH%4>Bm!q z^QS%z=dkBi#1f-Bg6B?$w{uRo#m$GWZh_9ocgF#1O!oJMH(s=tJ)~%SJNACY?AYfUC%Q){x-+# zOd#Xk{X|dUQtpW*+}6c-dNt{A*(o2_Y$cx(@8gDbr|e@3=44RSq^T7%CpcZ)%us%l zG(0vo*@wrKHxhAlbC^2*(q?us(0C3ukK;bU>vmnN=_x_HepdD@vov&^jp9PqZ$)r; z?6-%Q844FhHuk6?XZCzG5t=6te=^mAbBY5g79YNrBFwj4v)3}c-p^z@Zb&(OUtgCZ z4F6XPr|Kn!KV|24XaXj_r2>Ef#%`(ODxLbAdV|3GkJKauFKxW-mX!z;&EXDEMJAajH z=-XPNINsMfPj*b!T95@#X-igMK5ZKRyKugi}I+@q;+93Q$jTYfy` zK243|_~`wavSV`94IG&Idp8BO!x^M)1;lFAZ zgg-SqUSFpcj39S{krjXNN1!2P&SVj&2mx|t(eCI)X8WQLTwm@FU*f@D0_2D!y2GLk z&Xl8aWSrvTaD1aTc{d&<;?!(!JsnaiLf7{Oszziq5f?MwEgpm5@s zg*^Sny*zhDg|i~k4*@bi+kqqt5wgm4H39-{T;C2MiEnu4m`D~)o<5iH+&0ooc4?6w zf0LKwGRc}eYA=K?6UjL<@*-9@6rf1S>G?q?--B1&^A49uexwo z_PfED(54O+5VAmrV&y*2F``W`Wan)oEyULoc`7LKIGsB9Ae8B5sM(dK2(pup9WI<^|1U!i+IsX}tA0nw=`wLDx~+Ww;%WL%v$ZXN6CZt0sud zcXpxgq;c`8?m+QXNZxpbt4}1k7gRoCO2OBY$ev6TK^H1ymOs)d%E7TrQ4`R)oQaXM z{wPZBD!pj6pH)y=>3)R{H)(#76>x~+$sT{GPQK;UlXFItEmy$G^WhXy+ylXvegHBn zG;F2~K6dE*()r1dh0^R*B)~(6f@_3TCTt7J7a4 zmN~;~qNK`>Gvg1d^<-O!syU29FXt*P2F|pvvAc_O3rDUlh9^|M+=1yXQ^0Qa_iC8#)jd%dX%0t5h4shb zAZ@Ib5P0-rJt;J!1eq4nHw{4J7Avk$lTgEWt$ea@{cDh~_aI++iqKEU#QIqfecOpi z#@@%;#y9M|2Fk}6{Wu^GDevZ`_H!fY6T#9c$=5`|`PX&qoUf2|q%lHON-w|Wxo|4D zwiR4^R^eLmGKFN)0w|Hi)(I`||Pb~a9G`wXF%rkNYN0Z@j)EY%jJYC(am!ko=PX(ka zu`roBHXSM`f4=kiZYrlNf^n`oe^z3sf^gO`@;K7C9K{8UC_OfzRWZJDj@U=P!ji!gR|Km z!C43{yc^*vtQrdWL4uGoaVSo%f+ebaH~lb3Qd(!}3X_&~>U4d{Wa!7QaEDGS)I!qY zQOLTuAX1cog5lIb(LXmPe4GlMjG@~~6ci2FOT)7Z`C8(Kbi!}n?9G6*G>#_ zMRmWf0PAx=4kM(iVr1f^8xiP`XnJ3#D2LFgP%QxrWJNL~QBX|S*w7sj8a(i>WBLs# z?6cNE^sB4CcrY8{oB(kqDB>Kiko3a-#|^Sz**tV?t~DSk|0qr;xhW_VTYq#{MbG4J zRX;aq8f5k`yx^@0qi;%bxa$eIJ+?s_a^IpIc!IT^*kCH_kj>JsQ-PS>3Rt4dbB1Bp z{EH_U|8ULwORG)Qw=g;04U~N;0mo^swtSj+lvlON7{O~ ztvk5=^fqJOdE&=ruEvJIJF=vwQ>ESM^>KI+f(e>w!| XW`rbXA(P(@%??fHV%U-WL@oY5>DV`v diff --git a/examples/zips/datascience.zip b/examples/zips/datascience.zip index 78e2f1757f16bef527bdfcea417dda2382df2b2a..cb64204618890287467981ce58d46a3330349b2e 100644 GIT binary patch delta 995 zcmbQz$2_HvnK!_jnT3l11fseECi3dAedSND`^rCAfKg;}fHfO4NHoS4o9G@tkZ8?U z{>=i6Z0sO~lO;Jkp<+P&Vw>wY3S`0JA5{ZjYTeZgIKX1Plhr0K(Bns#EGEjpzyWea zWM+Eo+z=)Ph7?u?2BXOn!z6$TIVaCLAjZYXzznnyY^kDt9+MzQb^W%(i42?!3?jx1 z44N?2;su!nsX3W>sd^=8p&>}xZWu~&g6;om<%n>r$mRfR18J~$bC?yvP4F<7{25e`jiM}u$Pni{kK>!GBB6}14$0-19Jc~bRNVG|1B1b3=HPLK#~J{dBt>aNP=Qx@AM!>uqtq@LJ3Kb zDuJy0Bz<^jpj(tW(;j9KihHH!z#ITd6u^K&@%fVNW-wh3w%=p{`+UzHa1a6=Gx^V+ z{a~Sed##v&T!mv|lLhuc!a;JMH@Z;kz8G{Nrv2d%AsMhaRr}-6Rs7uVjI1K|0E&jI z2mH`AxE%CH7us^r16@e=PzbWIlMV$SbD0l&qHD-K?1nD%bHDWD_lGr*HCi0;Lgp?$ m0(CqhT-cA=A*)C`>Wgmdm7^$T*dKF2*0AIl*e~ynsQ~~&!zteY diff --git a/examples/zips/delegation_management.zip b/examples/zips/delegation_management.zip index 5ef007ffeeee30364966132d292857453fee63b6..1d894f32b863c40e91a0ca7fd86450dc669adbeb 100644 GIT binary patch delta 728 zcmaFk`Noqsz?+$civa|px&kKhnz4Q5Pp|vRKbcWPgcB}4c@~esAIc)5~=yhzuA@XFC$23vMX~YnySecndiZjm9n%zl>K4#L|2x<76(&yhAovD zY?=vI0=ly8Ts<&lp4@&A(`NDbp)2F&g}beiH;M^t+BJTAm{w_laER7Y!60<4uLKKV z$`XVeAj%dCN1!W{6RCkITOjflqHKbgJG!!8Vo@+r7SHFWq(*b(UoPe#le)FVM}EO zn`Xk5fUayiR}V~?C$}HOv{^iU=*qZx;clzsjbZ|uc8%X2rd3)X9HO;UFbG}iE5QPo zvIHRqh_c1P5$MX~L~3Bl7KprsD4QVWj;`#NSQJcIlsFT_A@PzfP_fA?C69sKRwU)Z z1PpycSs5^QzP$A0Pg0H$A+gC1l-a<-A<|{Ys$NT%qpN6^S%a)1KsFp*#R=IQWEG)u zdFU#h$jw4lF<(9gU4@JS)Ex+?ZC3C_)}*MIfUaqgVjZ#yN2N4$6(^LskW~~bhoY-^ Rshoi>RHPCF5;~@$1^{s7%L@Pi diff --git a/examples/zips/demand_signal.zip b/examples/zips/demand_signal.zip index 0008f3f5ca4af8c999f195b7b9feecfbff1d4960..f22732b8d11131f24f21741163a51418b05b7471 100644 GIT binary patch delta 148 zcmZ21uvmaMz?+$civa|px&kKh>al(0Pp|vRKhaT&86*(r1QMwE%D-`$1v5xw@&@*i?R|5d> C6DH&U diff --git a/examples/zips/desktops.zip b/examples/zips/desktops.zip index b617d8b49bc8ba70c4c88638507d90dbed5cbbf2..daced576eca76d2a422efa57069d84530d9ba0ed 100644 GIT binary patch delta 4656 zcma)92{_bk_x>?s9n+Xn3K>hrZtP3E*2unPZ|uerhM4S3QlZT*XLmd#99w7Z$T``P<@>73< zxrBX##ZxfF8B&8tn5Fa%48DO`k^_E!h!NsgxCrcG`x#74=m1d276A(>nsAij6e)ZI zt@NWfOhLxtD1){zI4JZt1~%EkX2JE8WWPchgDq^G<|l}Ztw4-_V}yR5B*HX9A{h>c zs%*Kcuv%?W^1!UOuqfDpO)P`)59JreN^*jP0%p}MzeVO4%Kwv~0x3a$UyQG>n-|vB z!_67v80hGMvGuga+Ph#pF<2aGSLS4jm0P(6Ya2BxrT~DGBnrtrDZG8W{M?){J|Z~h zKWv*-qo+W`I^ZctH^sEUM@zaXOaGspfpr_qR8#;ENMcvrlidm9>yGpC_7(o^CHyB1 z;lF7Rh?MO3&C7B*7XSe$z|$ZA0OL0{y`G@s{$7;v{QTNME{r|%OpY+dK<{?y14cfr zmIjC=yS&;r(I6+n>bIkhmcvBm0{8=p#o2qg$>-p6jJ*r zWqDaYE3)l2q$SJL~_DQje9+ef&$F~fAsk}1vQ&V&rP z)PK?@Eu+72-+$3SIbUoVBG}7h=aAFS{T|ZV(bfFJita4K(K}g(ghNW>`9ePiM!{L| zNLAyHjK*|7;R9B;-)71juX!EGY!?K@>9nx<*WNTR+( zTZ{yn4o0sxqrn`=AbDaP#!WE9XLgOByDzXL-1HFqEbHDKZK#)^(!%|w*yIs8o36Cs z(B7-;`QKS`Xbr#In`E7Bb6rIllw!ovJd9x@r;O0{ARpB9!yM=5;ZssU6=KQ_#2Ag+ zA6Aw-8Elr&?k=G)<&oBthae=QLp3H~Q+<~VN zR9TJG+@+{BB`!kz4cay9uz8nX4D3rW*w+!!f~Jl?HF*SC^}JADRy~MT31OCGgTvj1fsvICmmm~dnsX4kiqMeCYYNJX!kJwL(baoJi-M48p55*lJv-l;6;LNJNu zk3V*b%P%EjKz7P;LM+pj*Quy8y4_8vrJ?@8FZ7LjxJp4MwXhkde!P5Z9-pMTmlLmS zbztp?_LX8I@5`w4SDcalXnXX9hj%|-P3aCyWs7O4t>8ay{mH!mRdDAm+?=A^=QdpH zWoi-MIrhM}noZ0Hg3ab(Vee;p0c=WH?MHlYQ6z(x?%Sxm^eCL|c+WA=;1l^XuXCAZ zT+>=A$|r4ps&Xv(Qo`{AzCvbWp6UiAt$R_OuP4eAhy{HA==Wh8!)zZdFziQ}ORlo@LXwoJ9Sv#=8-wryws_mNh>}{3Vwrt5$zG$MCcnoBE{FbDIjC^N zOdFiLR4vVsMpa`)$Dg8>+R~7~_*Lj|m8;dn(D*Wo;+6f0>ie#byEc0=Do)Rypr)6?aSj-qtun{Wyg)h~VMbSkEu=hv)(`ejIyR4Yf`d=9?k zj5GRD*M|$B`iP{P9?MCO>dLB}-k{6rDUO$m;S>+iHFuRiPxaT;OnsgbEu?w%NRKieG!2N3a&*ScQT4j(ST>83Xmt%}=z!EKpNRT6SGQ|% zr@ddxp9*d@#p>_B1HYWs27ZUsQhLgoCXYTiC4qur!;Z7`t z1owxjzKpb!DQ>?}aO%uzVA)A?({kuxH`X?}X!ALQk<_5d;$om{a^7q6HZ2{ClV<**y7*B*$~a=E9#hdGlde>Qm*lDo zxIh_vKfg{qO3<@V>loeRXtar`pI!!R3}HOnsm{YI(4&?)WgW~bFTf+C!qGx8O51Aj zv{sAl4cgB!wNkVu3CX+P(A+hEHM2uu(Z=F|*1@EGLFbj3tU8Go`JaQ7bR~yZtwgD>#DA|w59~2dnSX~nS^rX@K6a*C=YxXwLK%}X2*gx}; zvCd?Uyt7m0ka1{KNbc3@kJ!6%5o|rWHOWc3a~9$Gtz+!QGl#qbG@!;jvUscT>Ci4z z%y^Z->YFOxhOVCO^}Mbr+^fD$)gp|VxvMzc!%ACunw9SMfO`EtQzhusxApQ-{?2P1 zOvniTDiML#OSBy;y#Xb+3bXLP{J;1I*JpjN92dag(+bLSYt3E zWZF^jDRd>?f$La7?kDlZ`#;{=z5$+I={qbH{W}K2!D5oF7G?TKxQ-up2!EEC;(?OIIbCrpp=6?kkpI*jybWg#wg`PPd%{l3 z-|zHdhKEDJ*Au?km={yGhOaK0&44SRPgx%7jjf5OPNu&MGE(|kW5-Ox|LfcjQ$I?Y zgc|kI*GkVC9k>-yZYg6(3A8t1_KUmMzL{ziJMlerK5j8M4(7N9?2t3tWD4O1%W=|> zPnI^D%4C+s@HbNVM>1rv8Es*U%+ZvDFvO-rh(zGFBmxD8)~1xuNwBe?0ehWuyCPlb1E(~n0`d263Pem8~0xBQ+7nQX@LiOBrM2pEx8veFSi$xwcS z5n4nK5k^p(r@MeUu^XB~nQcOByj=LN~q~z}@gU z7JzV@k`uL;P}`xhb}{deR6Cg6*~rW)dollS3aeL|{dc*@$?TZMcWn8RoxG*!UR&-Q z&Ua>;Oz}?w5fr$Va| zPFgxZs2754J103(MUE9TDNkBHM9>$33T@VDx0o~3p`s?;1KY;`Cnx|+Dv+%I06~d! A1ONa4 delta 1177 zcmaDgm2q7$Z-6&53l{?j{9*Q*$g9bwz@A>Gz&?plWMTjtGe|7b3`I;3C>9CU03{43 zPn1%g?8hj`6B@$Fz+3|}KnkRLvMggTNIOt;bF4HM_7WYX0X_A?jWexWCeBW$$dN@z`~8ZjxeP>no$rVRrzCKVjcX# z5V3gza3enpYzBLB@=9?hn7WVR{Sd4DG+aSq;Lw10W}8L;NTeR<8MqCZT7fXJkK&z7 z;v&Fc;Q$3@WYgy7q56yr49(0846(pKQkq=g#y|O!yCD}em_UJYM%NSKDhYibm zZ$dokW(;#F)T7ap&sa_cd-kM>ElfF&=|hO}4;Btkr(h^gu`+@wpJNpQvGKFDIaF-2 zfz2VXsb6i(nH1P38#;+`!V|@0Ut1SU!A-Vd5J4HRMoqg!WbSIa4rFeKeG)SFx_vA% zH`E~knS0H_ADQdsn2pT6*0Viz^Q}^#`ciHN1}hXj6J_9fR%r1} zZg6Ko)`yY`Q1n&F!}Wb~H$~PH*Z6$deqgHc6l7p9MbYD+2-Cx#o0yrWSCSSQ!V1oG zz(|t;d#*KUTAU!zHw8cgEKoG(slqf*7Vs2+S_qClM^9;{k7{7qdQVMKpAO0pp5urNgG}rh`#jF3T_5QmX|=6vD5>@ VJHVTj4HWodKv)ZmKWTjs4*&ymGA954 diff --git a/examples/zips/devops.zip b/examples/zips/devops.zip index 5d501c120e3f3038b1982089332db701731fa618..8fd7459cfaa03d19f7c462f6ce2cb8216ae2f8c5 100644 GIT binary patch delta 2658 zcmZ8hZA_b06fV4_6QmS$By4Rq7y@G%NTkgc2Pz1R4@Xx&?y8lnXBc=tu!&6C?*OAP3jw&>ZkvFexkDXwX4Y9r6GY2})upsm&Tv1!k5GrO@ow$}rzX?rVU zJ-g$OGe>?;9-)nBLLuciAL?BDc%GIFPRPlpVcVodJHw0J^?nhBa7;}^8e8i8ZcZ~D zx6xxhj5;7KMZ%*?LD&(UL@hxcX-hcEwE?q^&P(mXHtaRX(+p^$g+d3W~pwh z>@bu92hWvrBkibIU=IAXiqpV>qN#&VX-JGt!E3raR&s*2&HACQ*+XfKQ*Er}u?HDU ziKNm$r#9oAaO<6^;cwt^jW_FHr4HVJgIn*jci-SgGwa1PWI4xiv^DfGBZoC|<)y}D zw)Im@v0UkD`m3hBJj?3sYN93zI*x9l~gwU60X8dm%=5b!K3+r_+Q{Uy_T_7E+1BfG&ylOxG(| zyV#YA!{qKFtX=4S2cwpra*RIdX~UuQgBl!$^wJP^l|QN`U-zbA#@@@varousV>rz2 zqbTTq>N|*0%av*|1oY{Z6F5BEPy2?83A);ZwR2bNaA+JjjkUiG9K~qewGNDi4O%cd zJXnFlsOz*cboIq`$$;56x^XG*A$rHqWb05ZMm58SapfDsEg1D4Qj^jViTf5tB>Mc( zx3K=l(Ppe~9+Q}Hb*u`L-@93W$erU7Kedl{B9Odx>j;)UxOEbTmI-=IFyqq+io$+G zPYg^_PeAIKDM=?iQIGjKicm67qL<5=0cv)yw7%6o6m?RoqDJLh?xbI&>V zx$nId&wDGLN<*d~_mzp?KSG9G8L7~CS2kB9GGEJ+TWDe?NlY|pyl4OX z&qK_RHBTMqa3L`W$vjJy;+JH$%=cV>x8+fcc3EJ%1D7L*zyQ?7g_wIGJ z<-g*OL9QyHn&rMrEaGRdYI#ZLfVGsgmu+fGiouQ5ky7Yn@!j>L@*{i=QzP^$*q0Py6Yhos+0a!b8GZ;rThfHSjlF5omqAG%XU!W!l;~JG- zHHu3AnBIhU!mW3vj=zCNbv~?v)dqM24sN|q-+6-{&8!#Ol;a%7VQK1TMhz-&P`5;Tru!AF zUFuH5VM39t$zk8zyk-H`&e(IR$LLhnV<`FEtfAb^`&6D(+V8$nt6ovhW zo*0~>o`BRd(~?elrzKYvJtMKmM>7(Oq}?jSXMc996o<*TCFE~!CyFSXtD8;5&29Ncfxw+23043l^d}3l8u5gNa56C0 zz!gg|gS4NH0ci({Zq{YI%nTBm%*^T!6N_MFVg!rDvW3CKcCvXffyLN3Lt$cxoTnh_ z^ti2IV)@*m5V7MtE+8?86T!Al*5i$WDU+8u4^fuD?*|jx!Y=`_;=G_QRBW=H;tQ~? zyuu+cWtB>q5M`G|gJH@NIYl-*h;4%y`BOXsrZ!wc2;#dOX)BNzvTIIC2f&oUUGq^E z>}XKHSj%mPSo2lE8Ds3!yF z=4pgLxMGt7^w_{ck2SK;h4M6G(S_b7 z23_cePBgkuh;98zy0T1*%&{cTq$Ds?I(8qA5wLu`dsPp?y8pDf5LA`Tai1S^0N`jZ7&jd(&sI2o90 z;EJV~LE2BpfV2ZeH|sK9W(EmOW@hz=iAAt7F@nWn*}`CAJK4OLz+!Bip)j#T&QlO| zdfe79v3%}Oh}dx+7mygliC|kN>+wdxl*!AShbT+n_k)RT;g^6|abD0DDmK|p@demc zUf~d!vPz{)h_cI~!7ycsoFbbY#I`|<{3#v*QyVTJ1o2&tv=vAU*)=Dn17OPFuK6en zb~GqptmU>ttof?o46_F28ciiHm{z!Jo~n4l#Ngq=sO|vM>aKnm;t>r8CSa@`)RO^o z^E5&rT(QXkdTd~!#~NAaLV238=t6HaQ_zJ9wUW_=zG`_wgdn!XYX_mLxTKwdE)=a3 zgD!MKCmLNSL^lat=(=tqx=^HE8bk=#~cb|r0=>>^9V*g}@XuXrO#sANg#Ew2!I zQwoLbl)cTCt+L(UjJES>)>u6z44^TtFWB@1M07ign*C%QK*hPZsXtXpk>Cs@R9J7iy zWy05{AHU^2$f9YEz7P(eEi4@HUoMt9RJx8AnZbsu{oBuIveC4(@K2%VL!O+Q8Ex!# zet6R<_Tts97j?SR^n>#&1N_U+Gt?9x*^2KfY9*yS5UiwDN9kkAb?a~DBg_@)IQhDz zZx_6EsnK9)V=@!>jpbZ|54={@%T=_!@<>1S2NQRFLEq^zKV&guhw!J+aN(Rkk>gMH zNM3fKW7ZKKww>AS({{t}5$~Q`vbh{^BZD8;RMC-bHa^k>Nv4rtc77zl;5(`d=)TEH zBFvDE=*R156`@+&DMBLBLSY;iXlm-*w{qa*b#xB&} zEtVPcV>_vPWj+LCgDZ)Jn0^oni+j~tIx+HyH0qew|5CENj{YTveW^w9#i+zS%b$m; zV&ogjV|rt(>{m^%?r+iO(MD&-$i!-1dHR`XJ^SkI!Sgd_!wTbEvV<<4>SHQHzWayp zAuSU9L1k(AB68KW2Q+U~=nLAU-hMVPdbdt%zPxV!lqC?w6YY~r=`%-IuobhLA7Y8!D25;Z5bt_zb z7^M0!^NDG8u}WP|R1^W3?b~u%qW_ga)(sH}?E}HCU!&Ciuqi5Y{c!RsvY=lwp1~%smp@YIaWUf7YXi+`y9#-4i;oY}DnsoMq+}P4CA&h9v2l2%3Jf=F#sp_kYr6+I z*pIjDBR%pD4s3njPxbuguwTip0=vnntid3LPS~}pn7toJ z^{(=>+J!NTzAp)O!6TpV5F-Mo3P|dQobM2C&uV{i5-Tq1`7@u*d2vt{A8UXo@{Gd1 zDNyK!fG#qS!Xktk`;BvSd<{xxVp104TsA;Do!En}g3@dk@Ob$Kll8O@6N9lgNR8 z=y>&0Qvm=5Vzj_-0=>LF{haL`y#EKs-4iQ}sij%8gGm2aNW|RowPuiDILIhOVo~bv zY81azS(0%THu(M;hS`vfi_oNYiq!m$_kPxU-HCP{|9Sqor2%JA|7FEGUDr(a1Zk{40 z>u)9INvYNaJ{7C?uRjpiZZyRf>!k)KwqW=xmH@K!Zr%l((cUhRkI>G}!a-IHg5=>t zK8OEDE-j2ayCJz;w2CL@{B=l5Hlf>2@iMbTk{)|*rTHOy_pj1+6uoqY4_5m-CWH}N zh}e4#RGkVp6g>MohwPY*4dots+Xe)rS4GsVESk{G27ezQ0fa(5j_@}&&DNLu!(RC0 z_y&V_l+o+LW~zt27=Y7E19Qgl>2%Ng|Wl?VpZ&%a?{M5v)kH1;N^f9yR~-h`=A4L*tKPYI`L^{v~g z=nX`}Ux70u?j|++sF;V-U#>n5O%2>_?r=y@A>n&e43?TJi$+OPvv68yc*-I!C+K?Z zu0rr2%FK9g>+Lv6*Q zBOf!E&1Y+mepwQ|O8-gETI{VtaOFx6jCdmljyI4G}tf$Ij#f7Q;yf3t= zUy|MKnXRtl+1%OIXRU%~l@of7HKqA4IGUs-WR~%Q!-s#I>lizFp2Z=zxF=>@{$x2! zn9sE4Z}$C#UU`F`e=eO2SdNGw$Z@DAeRnu}P8D^=?QPYJYCnt0qOvM~Muwl?89Y9x z!S0{3r-(^XWBZq9)y=o1Co=uq@O^V_-_m03X_^mXB_*Z*a$d|OgwxBq9ANHEYjAhQ z#c54mak4u4s4sZA{i3*#S_(n$aLJ_p-#JH%X(A_w_O@fQux0?6FDipq!&iJ-i$SP9bZJpDinfPg0Dm4A>TLE){$U1kGk@230_H=AQ zJ$`10Y8kC~M6J>_z_jCpZT<@PX)*n*#^yMWsILhe-(C}H805N~XGgUaOeUTL^aT4a zDy*otE<}k8ooLT+_vA0}`;lmXXUfO-!A@wgzuUXxxdO^@NN$PXw)YAc$wAS*?dsUe zp|MRJS;>ON^%qdy4N=aK4gm0A5-%Doz_BuHy-Z5uxn|cCID&U0xb!8j@|sf9qGYy` zuPN{m)P_)RDsUCwhA5XV^BJ$984GUMzy!g0ikwHGmDj5)eU2_)OAs!M->^LtHeOGP zp(KT#O`tlaf)cufk%2+O0SQi!8B0qsnTRT_nNXBrp6J2tLnblH_2I9Nw98_0>mD?D ze>e**i+)0_LVyN<6|50FZ@FfR={xii2{aC;^g&1BoushTf$I0R9~T zRd4`24o7bbpj1{Mj-(D{Bx7-a@5Q;-l2g_p@N28$TE_zb7GV59H<*Ow1&y(^+v^>n zEAiTBP(nM><5&T(kp=T>`aUd@I+l&>;%45I+RZg>-%q4qHV5#VR=F8~f^W1*ut<~> zH~pK49X)a@SeqQY)dc_mxnl`NT>m-$f2;d|1d=KiT)}a}EzCC)Z7u6MReHGa>!hk|mv(!;G6 zy03Vss-5>C8$+4@baOrhX#zs(5v6#<2~6uq8sxS0*GAuwg-}GHwQ=sKr$hXgV=>h} zaL`Db;BLQd%Tbhabj7saWJ2Z8LO?su_J{=dh9E5d@Bf8}1~jx}+VMhPMdo096u=o9XiKQ}8N2*RXo$7R+Qskhe#nf`; z@~In>*F@K^$;m&(^z(hsbQP7r)my$eiKN=b?VtJm*-gK|12;_PhF`Wi(S@j}5JQ(HgRFGymro2jw3;>dx7C8l3?Fvv0glJuG;%32f3ljdwi*Uv@Rs{1Fo zp9{)T&0N|QD|)d=+iF{l+7+Ao)psr&H@jk(bn}(P`Nt~9tMjCKD<4mNxX*iM@giFp zfyN^{yJDNQnWl$77hk;kee-?qUPs^6_498`j4@JNchuADdhqkmHD|S=b9bC@KKncA z|K+LsFM0KRI-;TOR(WdDDmD?h$5m#5_x=ey`}Tof>iQd<`|IaE-8TOzpZ!bSd+uMR zz4qD_|58EGe4)6(4GWpL6a=YH+%T)8YNA*R*V&sJ$yNxR-V5zc((svdyCmr0&nTKku!AyTkM3 z((7v(e?R7s|5fGBS?zpb`3j!C%xIS>-cvrmJfGP3tEkM@Z^gy0KQw#IOY>)6xbM{+ z`0Aii#nt_DUTh84x_)d~um0}ji`yly>t6aa_44Xxo7jIX6LfU4V+N&t5nw{&0HyuO z)$GR5RJ(Z#y9gvDpXM-yiLr6EFo9EdFSjjB>;kt4D_HEgfF4K;l5xPqKyILp7*gr7QQHzCC<9i*t>c2sEzk*ra`{k8lF6TR zOrbK0AQ`c>Ve5VYqf?%hfkB2r0?1-uUVCdadgPF}#y#l{LQ!GJD+Shh-6 zn%S8HBK?7b2VI&^PnwyP8zQ}lTLdAE?EWe}X{LCA$uatplQ-zGL7k)ka?(@wO$E$A zH>d)OJ|z??J563N?;_L4e_{qlW0@ zMk8^K&=9!ykR2#zD9uz3QlWsXLI%T$nkY^@57sexzo8)1OW@e~2sF!79AwsHJtI+M z&l}56A>2$e$_au<1Pp|vRKhZ&o86*&E0}`kK3e4{U2~5^uG=qw4 z&R`5@1dAPFvWALHW@bJB7COdk&GeOjavqBen5)F%h0N_`aY5#OV(|oVZCTX-#Yiwn delta 147 zcmaFN^_Yt{z?+$civa}wFndkp)n!v)Pp?y8pXeaP3=)X70SVLq1?G2w1Sab+nn6W2 zXE25{g2fIoSwqDpGcz9m3ms#&W>R3EoW~*q<|?sxA#;0KT#&h+SUf>oTUIpy{hTJ0 diff --git a/examples/zips/email.zip b/examples/zips/email.zip index 42d9c65af0818fa5e8f4803b501ae4d9e701e2ce..b91601772229291bf2c75a08f74dc262d6226cea 100644 GIT binary patch delta 466 zcmbQFGf9Uxz?+$civa|px&kKhswscvPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*Q) z22@h>m4D)-Gt5AJlM@*Yp(2}SFxD`F#l)FSVPZkdYawDxta>mpGuGLRyg3oLe9usUSS(#ZkDhUGWV>o9Wqx(#1@&`C1QoleJX;Y*F)4AS$2u28;JWx GR1E+r9-ayS delta 466 zcmbQFGf9Uxz?+$civa}wFndkpRZ~`APp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*Q) z22@g`z&>%(8D^lq$%%}HP?60u7;6~8V&crEFtH%!wGc5TRy~-Q8S89DUZCE{^0g(p zpMXZ+o!r1HHhG4y02e0%Gtg|1`J4IJc_2DvISgPrgE<-?V%IqJVPf1|{t&TPZXK9d zKlc-eSQ)PgRBZAF-d$kFJu-KtkTWuuSJ(!bn*wPQ@MdP=VgP}tu7HWW>TF;6)9b$SPqdO^1_^}gfdp#4@^9>JVgiXw7GO4j z3T<{{_Gbi(&0sNwicP-EvIi_QiPe*wPQ@MdP=VgP|Z%w7|D)!7u-)9V!2Ct67{g9O6$Kms)i>>InAm_Q zLYv)~{TabxGgwTaVv{ek>;Vf+Vl`z_V4r-FRR+v`!D@rdb!D?d<}P7#2611qsR01m Cnau<1Pp|vRKhZ&o86*&E4-%;P%D-_@3NuJ#GAD}# zRA{q13kM?~P%P3uQ->jhnSp_Wcd{b4%;foUe3Sd7xwtqPn1MP$x;M{e&4Xy?;q--R zkLTRN2sToT+Zis#?En#5#Nz@Jd&46J5o6^ugNZrv1w+K9^IO8iuJP}Ih)osrhl)*p zCHN0)#cLryn2^2j8?ca`2;3!&B5V+yU81%y)6R+tF@e=R5_f}X)suJ*7Lt&(h6zPV z?gtA=OIb60<)0)g1Ll=W`6BV2O1UBNe53=Bc>AQIk$6@z$Z~6Bf{^6oWnGYXEwb)N myf?D3NW3h$7$n|vIb<7><-L*Q&dY}&@mv%2EdHE0|o{NGfkT diff --git a/examples/zips/fleet_apps_management.zip b/examples/zips/fleet_apps_management.zip index 70185aad7a5dc79293c79b49f8c2a9d21efb5fc5..6a9bc9febbbedf2f8ce2bf3f9f99b5b4bd19a29d 100644 GIT binary patch delta 351 zcmZ3ZvqpzEz?+$civa|px&kKhnz4Q5Pp|vRKiPp-iWwx5W)Bjn`O3d>bqpg&WHJ|% zH=3f!6--G`Rhu6$ePRJCyUK2ZuFQnP1*WWyqX44pBabJ#vRK|Yn6iVs(#&Af?hC-Q zPSzAW3Kse(=)wea=mudiP7$EVJ}QIRw6;j XYSxN`W2#XV&A}AhBnsBZCZ+}e9%paM delta 351 zcmZ3ZvqpzEz?+$civa}wFndkpHDgm?Pp?y8pX|UZ#S9Wjvj>UPD6nr_9m5C`nasuH zjizXF1yd4K)#e9GpIE@kuCm*pD>LD6fhnuwD1a#Y$m5BwES5J8rtBcEG&9(=`vNen zlQjj8f`vW`x-bD9x XnzbU~m}*o-b1(%riGnqw(h6<{MwXY%3=AywKuM4?5g^S0R+i$! z22@h>m4D;5-%QLvjgz-9!-O`ov3!Gw{bzH5D%w(h6<{MwXY%3=AywKuM4?5g^S0R+i$! z22@g`z`k+YZzg7-#>rclVM3ePSiV8T{&kZ-qE1@C394>#vcNI0aXNxdObYCi3j}4r+ diff --git a/examples/zips/functions.zip b/examples/zips/functions.zip index 2986c98916a76507504797027beaec6593c06eb4..230d21933c5844a87b51dc65600ea1ba181d8112 100644 GIT binary patch delta 183 zcmbO%Jz1JJz?+$civa|px&kKhYO#IgPp|vRKhai-86*&83=*jM%D-`P03%3b@-s#= zsL*C5CLw09m^rHXfH1RfV; S?ol3lWUeZ&8;G0Bs|EldEIX9| delta 183 zcmbO%Jz1JJz?+$civa}wFndkp)nZd%Pp?y8pJ*$^3=)Vk1_{(Cuy33kzz7nV{EX2I zDzsUNNr)LNX3lB|6U$>YV+D&X=dyr`O@7L?7c8`t+k#1feX=8u44C_m+Yy)B+Nz`O3dJ zhS7@=q-e5^h}q=(OuT3+C-XDM!<3dVTSJs?VhKf8rp4L{RW><>QG4?PR(Xh0CUzfm zrG@N8FcV+0Ycqi@=ioJ;yq`;Oay%Csy7CULGMI7}Zbq1LKXhf4yl`b-dHEp9*aS>q zS{(!eAr6`%7=W&oU8owStV3uaEHs?al}!?Xhs1Z0OAs5*h`XUHGnGh#nYK{kBgC|+ zQi15oIHl`g%6g?eAik48Z$+r~`fQ9BMSu%a)pWLV- zHd#T74J`CSDG4GZ1LjsMPeNCrrxJ*)Vu4C7h6>eWWEGoKC!?!KQ;R}Y@ldS+T}6|6 z46=&<>MiIhmS~`;P}GE~fH?e^rW3jbO|3X&BUfm3qN~tTk)E8ZZHBDsh&G1zf^kwK93k_#TfV4- zL00i!y#-yx5)Bj;ikeUr5QiVrbVAplsTGH8S`nz?+$civa|px&kKh>al(0Pp|vRKhaT&86*&A2@S`nz?+$civa}wFndkp)nij&Pp?y8pXeyX3=)X51PRmt1?Ij52~6%~G>3|8 zKE)Wq2o_Uhwt|TzGS7mD{bMnMiCM8;X924d;c|tE#dAG}sPp83*|52T=PX1lg3ku3 zZt^U?gJ7+3{5DJq?33s4%YeDN`Q4GZ$^x#)+)e=xWbP*c7i4a@U@$WGv>=L6#zI~o I*?J*0089-}?EnA( diff --git a/examples/zips/globally_distributed_database.zip b/examples/zips/globally_distributed_database.zip index 76529038e4c1b957b19253bf87ce908fdaa71709..457a52c317e776ba76729371191d25dc93b5ca9e 100644 GIT binary patch delta 392 zcmccTanFM{z?+$civa|px&kKh+Od7*Pp|vRKQT~>86=SB2@cZGWxz^w z<-?J=OXZu8xgH8p$lSvUsmNSUMHIzv6f==!%alTqxo?yrkh!VKC?-Ep4g<+rsHgz| D%506b delta 392 zcmccTanFM{z?+$civa}wFndkpwPRCYPp?y8pBN~`3=+um1PRnAuy5Qe!3YwWe1owB zDzrI>i5nu8!0ZDRo4kqnHCWjKmT;J|zbxu(U@>)WxYmW-0W4s#FZ|Ikb)f<$nZRO- z!tOA!JYijk74t;AU}En?6d`(rB;nSkNVbEuzLWHTDYKDkgeW^8=fkAHKKY=s3|NV- zd^j?9seBVM*Fzx+nR{3v6`AX)h@$w7VkWX|nNlb+_l;5nGB;Hj#pDOdVIWxx6*U0y CX>$eu diff --git a/examples/zips/goldengate.zip b/examples/zips/goldengate.zip index 62fd5f1bd4b294155647317ca070cfc5589aac28..8aca4f72d7ee02125585aa087fc35e2c35935d9c 100644 GIT binary patch delta 1831 zcmZWq3piA17@iA5G!0|SOf$2RTu0Uxxs%E!x6N&eYFSDn_o78=N5a(1lsGg!UEFdD zhWA8Uul-0~t~{;1C=yehxSVSE5N21Fd!GyHcWU*UoHpxbp5njXzqdTPt7g%NeQ$ z@{$4_*4=ESBv(E+7Vz>6uQJR*RfEaOaO1{c!p=z!+OU+AG~Vr_XsOc&>^!pUuO#7~ zcSHv`=<~J9YSh~9r(R=JsX7l8wmul5+(~BED){B-?|Yj08yxFBdEJR~_cBe@C&H;s zFvRK}m*j||ptHx~>`S~|pFcJ6OMR46-rHw25R2oPq-2tb8Qc@KP4)rrBagXz zkyX!aPr2AFk)i2j=j=oHA%kzz&??*?Y}?6Y4N<9+=kH}Eu`AYbs3T;)(gU*Ioi0RY z=yCJv3X^$*hZT=xckZ8+fYE%pg~AxBx`+BXuc7A3x-soMHcKb&ajE+4x19Ot*OG~8 z(SfC1&DV}7225@lzNl?a)+xzUg|9oDZef{}`ckbCL!5Tr$7FTjo}ZP}#_-GcxOFBB z2;Uz$B|O8RvNeVbb2~ahTCJ|Vj`fYPNrEfhe>__G$%JyC1=W`oMW@kC=k%VOqgohy5?H)Ulyg~tv;cOvwdb(p|uxnBfhNIg1@dhw{Pw{gHs(jq= zxnccz#QA>UU01>>(`<~t=0-F_eh}HtscJB@maZDF^oIKv{N$HP=wu-4Z#Vo{FHcPN zyh%*fHE6BC-^$IU#dms#DmNzQsrt-V8Y!+3)Fvg>#p3nVoJP` zfL1Dh^mOBJJnU6Kp-L*Y>_QKE4+l1}SDB>i=B+(oon>H4<5oqExc==~KYtwU6H}Bt z;$nKVG|eJPVB$V~qA$BRjTNN#VX~%ZWU%cnzvQ+QsiE&Yhuvh^KTJeKpH#m&wY@At z%6D_OQ0in_V0DPKs$Eu2fP2%UsQV6U3-P|1MS?Odv*7BVJ3Bp4_|lonfM!0Od_D)W z-o;46XU&#vv;n5d)pqi+H_YFs^38)iq0=9qNhjQV<9&rD|H9K@=9$aq6f2tP6HmJ- zwo{K<#6O4KKA;&wmp`xGOOOox62x+gVsBy~EQ|=#yrbyqxN2@cGrr8SputRF0)MH$ zA$_iHSk}ZUt*yqi?MraxU-9^KVjomy%Rr$0A=|`oy5qxMM>qBqm2OMh-Occ#kHZ`1 zET?o4Xj2Es?5NG|h~oe1g8!%pp}zUm;vlQBXWnd=eUE8C-txn3*z{npey17 z%m6i@L`HTk#dQq?4yMC*Ndf>;Cf`y*lp7OLJC?GX2K^X)hAjIk|!Xy#ofTOHt@o`pS#=4bx2_L delta 1744 zcmaEFdBT!6z?+$civa}wFndkp)n-#*Pp?y8pSVzj6D~YChhKGKgEU-9iW#JKpF2pP zMuB}ZH{%6HkkI5rcGbzU61SscG7c(<3Y!IHjmrDw$hRsa17j`;^hcaoEZkV3ADdsqD++>Rzet|7N-fy03QaZ;%H??}^3FoW# zYRk91x4R#^%W=-4R3`@w&o-kNr?yOyrsvZyE(;WG`e667E6wnsTS;6U=Csp25JXKkyQ`|C%gVS~68IOL}=znSvTqo--x;SIRD%J)_dYx48 zV|MA=(0pp5fPasBfWVovS-PgZSC*~RNjwtdvNaP|XC`vI3 zxTLgpxil3U$o=G5yMEId&*MgO{Fgs$*m_{jvrS!#k~6jc%B?sd9Fmv(V#kizI%4AY zpLI*`aH;s)60*j}Nj3ITy-T~B`sw#IUnOSNR(_o`LG-ca6b-StSLZwKaQQP?DQv~} zO^%)mxBYnZ)s5AqH6Xg>208zO?T2dSS(%e|+YCNwKlJF@InE!`&&- z?|OdKt-kyI+@!C+ZolL&SoUuI&RmVgUzeovzeO(p{Cf4tw_hIR6?GUNQjHBc?rGvw7%-mZ}S*L`~T&HgNF%XH~b-5sl}XI%5xeS+!l9OkEguZU$w1Q$5|4cXwf z#xU&TR>Nr#i|;taERNaO7FH_$W*%2m=hw!13&AxHX3StdI73y-(%@R&njJ4D1w2WN z-B>N6#;4BxDI#EM+~37oH_mOkH*1~lt-p)6WpJ zp3};YzWyKOmo{e9EWLDO<-XRa85cwks)n@~Z{*6DGgIwTLr7LD)Bli`#gd&qt$#RN zG*vub%df3}_0#+I{+_0mhg&byzB-^&b~$}roOZS!-<&U{lP~7A>D{|+I@jh^*$ea1 z23tv)4W&UZGi73(`8S+e68f)QET3^}s`0CaZ=2VOe=|wx2$`LbVK5=`-jz>DV{&{md*GV1t=GXGBVXNqB*?s=P?=K&* zpRFeH{j4Wjh5oK1>;IQ;&}6^oe9v;r$vc0xH_}S^D@5+m-4*y|9DJXzB z-3*??kxPnQ>{f7ba4|7ioWl`TPQ-BpGJ(s9ONLG7xTwcqp>$ZVBnhtP+|~73hUpl!ODCVkTYo$rHsDIQ2tASQ(f>B^=Bi1xab9 zHn8O6SV?YVD?5QQk0CP0B!!S=egb9cxIhL@Hk0Cm%E*IC)^mq9JTPTsU@&1~V31{y z02k#zF2j<>HIo~q)S#|X04W8_K?zN$QU(SAhPRFu{6M3{CjXX_h8hi4ADpneX+6+b zCvFA?0~DiY!_!cz?+$civa|px&kKh>al(0Pp|vRKhaT&86*(r2^SFI6alK@0INF{3lgsR z%D-8c@f#CJ<>cR@Mw9okaPx$Qa569hWgw;?X`0-_5(U*Y`JkA{Ce{gHjT7TEChN=b zOkOX`k4Nu+cDRj699+y`8}qrXu{mz?S#B?cJ<^*kcqT(!c#h8;=4x*KFh-~u8k2hj zgc0V5!#x>!<^72ZlbIM87IH8!7*AfvE(KJ{JNdo5AQ#k!ApZ*qu4NJg`acpJhEPHc ztU6i&t`Z!gB1mS}&zM!1$;iOa%FMuE235^JIZ{Ln=E72uW{3-ai#j7*hlqm7iDIzO z+!cz?+$civa}wFndkp)nij&Pp?y8pXeyX3=)X*gbRppiU3t{fYqIf1qs(E zuy597{Kf=QIr+D!(d2zB+&rNnoD9rB8Hg!JnkM(KL_u{;J}4%#iFE>4u0JmfH(qkMw2>p2-jwp5rrzxtg0lj1g*v#^fFW zVT3v2a8E{Fd4J-%7#gSeR6`L*yIngY+#{pQsEFG88A0bIvZUDucGv1 zQ5iF2RXH*l=&HWTpqP^@i($@BSx;m$lI0?hxp(AT(T)5mD?K?@UJqH-8hNNDga=d= gypdH*RES15hgUHWSw+1f)bS7>b0~R%WJ8qH0MW?JbpQYW diff --git a/examples/zips/id6.zip b/examples/zips/id6.zip index 1ebb638e43e427f45dccfeb4bb5c20759414dd35..e0015eae19a104f83f051caaad039e932a4823c6 100644 GIT binary patch delta 135 zcmaFO{+gXPz?+$civa|px&kKhswjWuPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@h>m49Pw(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@g`z`n6PkdYavaq?|OBdE}1VWxdxp({*AObYCiIhbX@Ty_ z%`1`^85piHF)+wZW>gTJyvLN6i<5yFs0gHRvk!9(BS`P$(=7H-&6@>SxgcV)Y(_A# zP_`t9*e-T|sMutFj;CO)-#H9n%JewbGl9h(a2vqH#CS|u!D4=b0Whsg1aE`g2lfk; zPzAbAgC{fu>N=2j6Uh|^Yyy1?xGB5De8hmM3ZOsrJm z4>MSAiHrwK?2t?*M6aG4+`JaK9EjLwc`ukcXN8LpF>xh$koYSFFoHd?>&e9`A7B8l z;b35p1_$zf8}7*$lv!Z9Zz-oiT;r_f02Av}ONE&DQQZnAW~gBSQJ14-3=>88^2jPlMF0fz&+g)klg{sz4Yvn}$aH%(09*WDv;Y7A delta 981 zcmdm6zqg(@z?+$civa}wFndkp)nrp(Pp?y8pJ*e+3=)WR1PRnAuy0(D&m;&Gi99%K z^NJ)!28L@)3=Fc985Kk)?=j`&;$&b3Dgr6o?898c2+}+GG>bh{^JW27E{K>cn-NSb zlr0G&wu{{#DmIy)<0)9{cMe0CGCj`qOklAG+y*c)F&f&Bs{ zRDtf(;0X|AEcY7lE0zxm837;Yl?Ok4>bB>qYPj9^dfdUCPK2N=L> zI2ahD!GXNrhI{e_Wfqw3Tgqt=*Ep*=z{EP$QXwXORJVeO8ERNS)a7Uy!^DB7bK>)Jx}{?{{ysk71NfvEE~go#b=Fx(CHu$vJ)GHQ%mAj%G#m@_G`PrhIy16Cq! z>W|FrHg!VgzBBbj=Ej&gAanPc#UgX9&Fzu7v(4?0xxdWgAY8G@1r}^zyDKfckX1af z2u0>bSwb~H9D36-2wB$0DiE2w&ngU=Yif<6cZ+odvaGHRiZ}XDx$kZKkQK+-dLVO; c+d3k1HSJKi-FB|XvL8{o;r8GVnQpHJ0Gco$q5uE@ diff --git a/examples/zips/identity_data_plane.zip b/examples/zips/identity_data_plane.zip index 2faba2606a6e3600fce67146f6b15eb1a22874b1..52880caeb2735400dd05704d12fca440c87c6b3e 100644 GIT binary patch delta 170 zcmbQkKZl<;z?+$civa|px&kKhnkawePp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+i$y z22@h>m4D-=3MOWt#>u+OwoswX18Libpmn7;B)p2;Qy<~p*4 TA#-=Ic_VXG*aJY^GIlip@$NH> delta 170 zcmbQkKZl<;z?+$civa}wFndkpHBnYzPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+i$y z22@g`z`k))1rsw+<78cCTd2_H0_Ipou-F9_C#cwD3D(14p?j=OObYCiXR^tFxsGgM T$lM)l-pE`P_5cvKj9m=?0@*3p diff --git a/examples/zips/identity_domains.zip b/examples/zips/identity_domains.zip index ffbc27a857ca2fdbe2aebedd56f34aaab82eecb2..5d86ee79f7c4c51cad262345dd10e6e7fb4ecb86 100644 GIT binary patch delta 2277 zcmZ8he@v8h7=OR_zW0l}gNT-4C6D_MYmC!MSu0b9N)y6_JMrX4ckgrG@1D2Y*zNgzKhKZP z=Xs7Rr=%;VB#YA_N(n;jH{xWGwQm|a(dWJO_bAT5xTNxHMPp2xpiS$B-Wv|Hx-Uk__ z3=3wwq)~Xr%nb}H&de|<*n#Yg3=3rMAqtjmEoWGhwbf{e&bO_s@6D4!RLr=X?0HJw zl$XL7Tl1Df$Njb(hWTs`z?KS`D%o!LD#fSluP|Cx(K#6G4~K(cnI$cd+FQmv@*A9~ zfUT}5V!ZtoUKsYVN*lx6l^cNfMKu>NSKSA^UROTji8Vh0HoTo1w|vK8k{lCy#`av> zIwA;HHG;58Znixse?D(YFbZOHTd|G#$7)L;JFCvlDjupk44B@{?JRP;0qfpXz<7~e zw={{dE*as}b?sU~m|87g>sTo}7gyjG*4+WEV%E$%TUcsgeGgm(*~d+A?n?o|Z#D21 z-!#N8O7G!DJ3JS`=(I+DQMHZlLcNg>`Q9wecOH)QJ#v(LxI{1M;>wOxq(oXK^$xZ_G+Pm^t?#-?- z;Qjn1wmiO@nc(|Gmh2Y`pXXW`It`aJag|?<^{@D` z_FvZ}0`=x@@!p#!&I0fDZSKw5$B=y z>u^|euLOrb-7CQ1i*u@}I_6a5#QWPYx#hk}5s6gcS5KrIhm#T281)Y-@ay#lDuGq= zcKrI?{8k)V7gPeh3$NqXWs53vwi0z_aJ@9WT95p{SZ^TsIH<=!@c!vt1HpTtJB$Qh01X<|^=%0RyG?xw>iJ$U5xgtf kX;SM;HIrIAf16od-)vFqJ7^)Ln19nkV!s=jl}OV61C9HYZvX%Q delta 2277 zcmZ8he@v8h7=OR_zW4i%BwB`*P#PA64L3SWjhF`fJP+vZeeV0+^L87%J)iIA`SJNY z&vE&bborEIb-P5#B*Z^a(b;CrUX`xj-5mRCJZKh(^tUJo(xKR6oc2iU+n~^PI(0Eh zQ@Y;oFBipFqO6lPC!j!?G%YDuo^d_HnvJ=@3tDUp3tMJV72ae<5yNuU6aepo%un`4GMN3XCuRcIeUnLW!TCY)@*AtT4VEVE9-yrq!1G`At!sEk~ih2 zFviyW70_|NJ(ppAy9=4EBf1#jvcBR!HqDV;%(z?o_~5 zR}?ee{t6!q`&gx&VV=qj!27(K3z)C&2VP%I0pp3aKLR$gog24e$6=Bj7kbA2T>CmA z2v;JI~^_i#IlJs!Y%b`>&SWY0PKd`XS$&wdMB1@xDina<5!RTcE`#eVL8&P@125?`-{l*pKLXzMGp{n<^BvtV%5RN?yP%i99!o#s)6oMuvK+fV_w5=; zU)j5fwcgpASmsb4w0gKU0#-P}52kfw z5OPaH{G@3pVfDWkc#n-2e}G)^65Fu6cIxqf=TaWzca8D2gvVy!k|wY4tFir+IM#uy z+%ogEL8uv;a5K#r*GHk={7v3_^W<6J-MYoSSv&P9@CN?LOXSMZ%%Eb;@C^T#W4b*J zw8))2O}bw0j6R`IYG$i(_{;2TI4qbe!r{5O0vx8?t;FFccWZH|4Hx5ZZ`g^$-^2Ad zti4x)!=LUI;_$_J)l{AHDss~OZJ6A8U!{mds_?5fQjWu^h-!?62Nn4B+5?rqs;C3M zeiz+}L)(H%pl{)I{JMNmWsbbK9ltJHQVrR}b!g`PGA$TdrE)wh&T~7$sK+h3^ zr>2i;NDXRD+cX5*N6jMHg5Td037(vWMS^A128onm{+|-T(rAsAU@>%5tDYxUr=BOE zBQ9JoO|RA?|1Z`X2tE$#H4waiddEQUUg!=Z!52V7Ms-=v=J1vA0BqFrXS hzElgT!}GUW)b%Y^wZ4N^Qi}OEtR()sq1j0!<3H$A0d@cY diff --git a/examples/zips/integration.zip b/examples/zips/integration.zip index 11e8b8c4a4282dd9db41ca31785ac800ba746a7b..359d9bdd14dd3aa8da86828f29e1815fd24e7794 100644 GIT binary patch delta 148 zcmew@@>_&Az?+$civa|px&kKh>acy~Pp|vRKha)_86*&63KFRK%D-{C4_&Az?+$civa}wFndkp)nQX$Pp?y8pJ*?|3=)Vj1qswBuy361!w3?Y{EX2U zDzsUi=?p7a>>axmRBW;y$4;=&D-J6r1@_5rIAy?GS59YS?n+KaWG*+C2Z$TWr3L`P C?kN=j diff --git a/examples/zips/jms.zip b/examples/zips/jms.zip index b2027d95b8929cf43084abd0ee346c7ff6c666af..21c79a207485df155682a920192c1038aacc9862 100644 GIT binary patch delta 842 zcmcZ-ekGhYz?+$civa|px&kKhswjWuPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*E$ z22@h>m4D*|Nk(R%#>s0Kt)W7b-!h&A3+-ewg$aFO`VSWR#%v4~+N{rF3DKF&Y6lZr z&pHz#=FM&d)7s4b3#_$)Lm#GWD@PJUnG}~dOe~vg5;I8MBtB=DPEWqKV4aryFxPG_ z?XAeBKBF@3aW0hu?!^S{>#9A+oG46_w%k9kTXp1N&flCa&jc|$M?nYXhItB~A!1XMjF`UiPY%?S0c(4% z>RUDAHUaGdp+!d;k$Xq40KxFO|H56z3RI^8x zjZ{Z*#$I)6WLZfK6q6@w*dfb)(uhUo7HFc_`$*FRS=L(%#S3e+Q2fiMjpB?VZ7Y!8 Hb=qnG$w(h6<{MwXY%3=AywKuM4?5g^S0Ru*E$ z22@g`z`k*UBqK9WX5gZPsV8gy_s>wS$SR zXPpTV^JX`KX>Dfz1=iZYp$}8Gl_LqFOp41JCYH@Li5aAB5}z|nrzhWAuue;Um}@te z@+&}e&JZw!={zqG2oX~jg1a|P=mc1+rm!wdS&XnBMA=#qxTXI@!XRSdVg@jEy<&SI zV!jgoFtJ4v5fHJzk}%h8c9U8K5&JA{1ywiMSOyYu|7GCbH<#VP2lQ5?MEq6dC&2K} zVVum!B0O0@P86m|Tkap&tvd2B=WkAzXM&iWqo4zG!#su05V0vrMobFqlLIwnz}lWG zxgc|Wls%ET+mxM=xl$^Q$lMwgA7t)J6$fOlm#Qr?cZF&sGFM405Scqg4aFHh)$EaF zBh^uyu~*$1Syoa5#pKBvcF3}yG-8pt1)3=KKGO6+mi5*`@xmG{6#w#Rqd22T+X|$2 HowgbP*wyJX diff --git a/examples/zips/jms_java_downloads.zip b/examples/zips/jms_java_downloads.zip index 65b5cd429c4301522dfd208d843c98b39d81de46..f501d2301ab6601e12d266db0bce9d9fc219b904 100644 GIT binary patch delta 582 zcmZoOYct~w@MdP=VgP}tu7HWW#%y2t)9b$SPZs19;Y5fhJ0irTm_aI!2Y^IszVdID zWsG422~DnH3Pw^T2o#F!66-O!!^psJmX(1ac4DFSWNl_^n7$n5ZxDU40=ARw#5lM( z8JL0QL2U=yGWjBF0!+C%TPG9Pn!_9(NY;Rb^f=>S$|iA^K$LOv*uccRdEy{8t>Fzs z*Q&r*08=)N?+DC6p6JR>3cwwrFK7o*Rv-ip6`-3ZZx=cYc1W$TBNLEoC@MBNL4pk| zbYIvXA|wOm`isP&t2if;h^!(&v;<{4oPH7CrLr=gm|N03hb)~QfdIr&b>EF%B+H z24Qbh0{iNLlo|lvO_=Ba diff --git a/examples/zips/kms.zip b/examples/zips/kms.zip index f3c2f4c26df1c1ae71d861059bc3f93fe29df2e4..ffc2b606a51a0f6f330272b56367e5b8c06d01d8 100644 GIT binary patch delta 800 zcmdnswZV%wz?+$civa|px&kKhswjWuPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*E+ z22@h>m49RJZ6;=*#>v^t+EAg*bC~5B!D9PZ^r2#tKeIdp3teZ`f+=HXlYuBxW7iF!L9Pw1b7TMD<|G;zXY?g6%X&Ou73HXy;s@ouZTLmAR1Y+*~0p0kL4R zgdxnZQxXuvLL`k~LOqf@z~;M4!JSqm1&xC_(y%z#d{KG{#Iy=oBc`wXlN4pZx=zbF zBJp(PERlHaa<)jkr*alxo){-Q!A!Q3H$ze}Ro(@O_ew(h6<{MwXY%3=AywKuM4?5g^S0Ru*E+ z22@g`z`n8fHWM>YEuFoGnn4B>~Rpie4M&4D;zoBf~_#*vVbYe=eh<_=D`DV@Z?6GJz!-HyrwXn)x67j zfqsb8ILLKy6VQ*WlLMthCa+iI=Hg^v26__Y(a8~fXTbW@`C&G0j^g)&7{6M;0A}Sw zfi7mSx;zmbnE4At+QC9vqIxi8aiUKc!FC!XrriApv~w=dPSMHr%3MfxZmtlQfLJhD z!VqTIDG7*SA(BQgp&rQ{VDsIj;7+TOg2urdX;>U=z9_u}Vp@f)5t9P@Bt;ppuG6xP zNIYFROC(;qoGlXXshkCvC&md+Fq7@%&5%?~m3Kkn{gSsv;)N-=A@TMqAloXh=!_)S ztca}dJ_^rT$qq^7EF~)>-d80XBwmm*vMKA7?UCg8R2-0a`6|dNPpg3ZJef;X4FD51 B(t`j1 diff --git a/examples/zips/license_manager.zip b/examples/zips/license_manager.zip index 20f8f16fb99c232fa338cbce44c3888b7b2074f7..a1b16e8dae73f0af5d45ebc672e2cfc27178cb45 100644 GIT binary patch delta 444 zcmcbsaaV&kz?+$civa|px&kKh8Yq9|Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+iwv z22@h>m4D*0!^}W^lXDpTp(2wHGEN5zMKf7Lg*MM&n#>3mGh%UqDXU`X2Mh7A#=(RN zSdW5*EZCx9LNnP;fQ3@nEn$W&W)FZE_Km|4CT7c70}3%%g8WBSTJ`GbHAnCs5(hs@o^AB)U25%5Ij&Jzeg=JE^XAamyk iW+HRdgxrz2eM0`o+w(h6<{MwXY%3=AywKuM4?5g^S0R+iwv z22@g`z&>%=VP>Gd$vKSvP?5<88K;AVqM59rLYwC>O=bj(8L>FQlvT0xgN1ll<6uGs ztVh8@7HrWlp_yzaz(OhPmN3H>vj;#7`^Mo26SL*4fr#zlf?2Sch5HFa>@|-!%s3m~ zWnkl;^4h_KH2L;`gCUCc6XSnH|#}BV4aCvFw-W_ z;o1!risCk9QedAvky{4L-N0=F;(p|XaCv!Lkhw)X&dA(rJa))>O?goi&*BY5RxH2= J)*H&F1^|7UPh0>1 diff --git a/examples/zips/load_balancer.zip b/examples/zips/load_balancer.zip index 8d1a6adec6a3ed83a3a2a3604216ff59fa8d5d08..993208b0af5dd6ce8bb838b8ec79667904c031e4 100644 GIT binary patch delta 266 zcmdmPy4{pFz?+$civa|px&kKh>al(0Pp|vRKhaT&86*&A1{V;SxQ-1hw%q|FR`ZpA z<6kR&kjP{!0ZR;Jlcx!|LDg-3BoNF3R%jt=4ihUC4PgX}oe{HvicRJdKL8fGC~m{_ zm4EU9Nij~i+a~KtxIhGDz-lH-_+hGHl5|H_lO-8~%)Kw^ip+JD@&a)uN~r+=++0}T delta 266 zcmdmPy4{pFz?+$civa}wFndkp)nij&Pp?y8pXeyX3=)VlgA0gET*n3$+wK4ot5IOz z_}7XbBr@4bz!F2*k|ZM&1B#W)?065Qypun8>Tg_LV=q?koR9M=55IK%6y5pyn(8#`&U5Ad$&u z#5E?_@=t!p#D=PLvN*FFRPE+u=ARJ7@oc7Osw`OEuuwr6h zPyjo|!Ic{pbim--Y_A#02)2H@mIK^ia12lWr4b2B!g}cnCL1fN9)oVhvIC+sqQp_;7Q0+F5M=3ZiO)l?_zq z82R3E~F2Lb!1@-pI12Y(kJ_?QNZrWf$9qB6B6}e2^6% z^pKvs&`t+g#XGxTWEDyFU=1**oVQ1jb$0MT*1N_b3|ViSjr3$YM+0OP{f;rnDtMg0 z#=%T)aLPfJ<#i51*4yBmg)GbM5`oNZaY;p1%;oBeEL-5}hb(*FH4#}h(JcU3_L5r~ qGB?s49HOw`-|G$zZk|ZM&1B#W)?065ctFFHIY}3O@TeVPJw-*qZBhpAkG>jP@}-UalR-MNM!OE zag9l~{FC1?v7suREY9o(Rl7Nv`6oniJew(+s_ksbCqEE?tI`&H4>40#)C$ctRiYj+ zvrdRI!aQh;rb`6$jHdPb!)f?5{ua zE@-Nf6=Gnjjw;AN-0(!n3$99p6COX41C_&}Y9~61Z9bxG%?ftRyodketr-~@te6-W z6u^#gaOH*t9WeMd+iQk0f~}vf~9>Pr$U>f(DSVL6(HnT)CKHMChb{3nzf~cBcWdqeY z`I6Nki0iFwm=xG2CpyW1xnHb3LEJ!B2sh5g8(H?0O$f5Ay{$8{>|)zcWUi#053=He z9@3K++UX#xcxM-ktRl%CtO4ef^Y$pR&JG^Pde=CFA?uB^k)CYlXn?Gu-!TSR1&`MLlhSLd)>j|4Rf=RM;@|K2R+=8^=f*eD4yr(1(JQ`sRjVajZM!0 diff --git a/examples/zips/logging.zip b/examples/zips/logging.zip index 0462c329235e829f0c4ce4c92fda41843e2878ae..112d44eb9f869d9ce3ab3296ff11c653e2479a66 100644 GIT binary patch delta 6830 zcmaJ`bzD^4+8tm(8l;;crBg>51ZkveKoF4bmJp7#bPOro-JME{lz?t69NMLl(ua8cMax@kb$`Ov4_Yn@<0GI6k z?G;$p`^Q-hh#*iS7zCn#-$x~Y>p`#pG!WA3+rVF67dH$L0(b)n1OfxMC|>IQwzFKg zEnBQaeYse8-0>!?3{eszR-wmHX;?Zs!8OdPjLg%HBf#FMqG~sSxR?N&nVBgyNN=JZubLoN{iwL|HFTsTCby99|)=xvjxPVgI%fO4Hq=3&53BGUE)%QF(c zy`rZpmA(t=-yt&o)W-!iMEk`rtTfsn1|LT+=nWsE&3%BYQ|&`$A_!!`?efhhVxp)- za#oh(huBK5>(oE<3l_lN1VEnqA%NXX$mCq6n5A63l<#*|12et0FNT%3W zg;N=ZD;t(#x)T|9V15E%V_9f$0?Rk`t*mI-n9R9g!7~MYE_=eysA>_cRa$!O>0sK@ z?=Eko8$#M)=a{lK{PJo)UOT4Cs@XcqPu1!BzZ9AHUT*}8q_wLXH(E({pWigqa!$2+ zUa8ewylTf2y=wuY-srig&$4Z%u&K1LuNZ8Xo6p!XUXPzKw3`7YW)0PBOlIvA-uHRr zV`Dfl%dv;T6qEK9UF%j~fH|%7*IV2c58jm{m$SC9x#|6+T|e;DH>RNGBYF*OHeej` zsk5%_b{G$ad>yI&svcz~9c)SvuVN80QjeD!B5M(}gUs-(8K0x8()&vR+P2Mms7AJj zr@g23`hoRE+*~10k=*Q&)W`T@uc}*|O1^RSVuePK;(!ji+|l9A{uS-yx(rSfE-;sR zvEMW^GDhmH7;v-By=&@$J$B`M#CS5sm8oC9%HD642!SUl(!jZVIC>8-n=tWzk{P3> zu7^n$i!?+F@jtNKno)-xs}|)GGm1bR-YWFoW32cTFVaYfLh@aJNU2mO$H{}&2!4(5 z2aDlyi2T3N80!~}HN#|C;Rqm*FuVd$9QePfo2n{rHOGb9wxxx+nH$ihm>{mi@9&?c z8UyWB9e7G*bFL0NxIqKAaZSW-VOvnXm(oh?H*4;Pq8~y-?2q4_Q zH=V%Sfd4Q8KHAuzS}goS!8Cm>^m(<|x=tK)H?XTcJGm!P%1wZH zd&0qYm#x3&`cR56ekEd{s^rWged-+YC6S-sLtgS5vGtAPX)BCv+^Ay=K~0E=yZa=d zh4|wvzGy>wiXzsJCjGc%SRwG|(S8PV|8}(4zm7KeDfI~MZH2->hL2zn!|fTta5-e6 zUs1Q^32ur^1<>d`D#XWO&UvW%25VGqUI3QX_$HTr$od|k#-(R@YE(yjsn?X+D%^8e z_~ewnl~T?3YTyIi^KT4lj6ogBm9z^7nUkJg&Azov29j8_=1nhQ$l4p^@1sRG54s7A_w9n`~*w_Tjg>S*Gpz^kovyNOrtc1E`4dxe{H^A0x1q0A}X zo2p*k?`2y?rM{Kb%3HEl#n&Sa#xaFQNqQCTa6|U&%>o-rby?rksyE6b5$QChN%z=) zk+OdEu@NXi_mi_8&UEPIkf}Ayt4cMd;OyL@C!58C`5H;FgenoKBuZgm+!TrJu;=+O zw;fUS1+9y=@(IP%C9*8WsVdvsOV|>POfEf4o6lAGxzC?Q^TR6<6X~WFiI7=BJ_)VO z?wCJdMjop?;Q;JzPNqcHq|hlT_kIBGb}057ejnghrXz3D^uRq$=eTSSpw98@XT4d8 z1I~87qld)t+g2JK(-!zVIO$I9WX{@+c(^TwwxVsf(pTC&K!j8mmxKi(J%u_>bvKRW z0g=hq>C`6V_oGRb!{NO~mj?~i7r<2V*#biakcaJekvf_PHh`gSAd#_L zh{KeNhsQ*ytY5@3Q_?%sVLG{8CLs|A?3L^_f}$(Hm99f6)BH{j6rIZJ7<5&IeqP=n zzZLj_#JMP+pntUCb6T#ru9-LXMB4ArnG+?*+XG^i&tU+U`N#lwurFVrRl5pIAwwCB z%wEl({E8*Vc)vPPrkxx-aBsu`cOdD$wYYx+~giYDq~`mxB!nE=7-SxL!BKz8Q6v~tH75@zz^wugT^srN7E@x zN-|x&ObmeNSV1r*T4${vCGJs&Vk+M|f=jgdGG~2{%7AA|RMCQ4HHM_S3Yu4L!H-d; zJByq9XM>8D*2u^W{X2}ewM~1S7(<`ENTAXP)ENE($(tEia40Pz^_Iq)8B}ikd~k&u z!WZ#m1VB#>tvV5ua(( zueQ#aYJDl2-Sh*d*%I7#2pPU*^!au;E(!C-4BiA%!n&(pg$@UBCAujZI`t8m5YXnG zj>sAN9&$EfTMSug!=N|n72bN;MNDmBp4oFJT<}9G0JgE!RB=VFnpE7vGS(Dbq-U2r z-T>@z8~&~&%H>@^r>rmhO@h(>n7^Fld-yhIx;pQ>M+M%ABiex?3HTL z-SnyNsDyN-=(Mdq243)r%EB8@vc!96;Bsrl;97v2b9=mSvXONto#$ftDYV*5^=F@W z)^nMQZIqvfvT0^vah+!j$3L`=F%BQjSGfVG9NQ#u)Cu5sL1l?N7X3JHGcVPXoJVVj zlawOm5prdsIWJGDHd&*YZ3-mv6imLaU0_`aqXF*-W4L;urUS=;1Gb9OigYzlQdamh zdZi8DY@z3?{TXko=GM+Kn1J={Jo(hja%Myxdd3Ui(50(!iKFR}fPRe0S+lh~x_Yvz zw_ts>szEMV+4%PVsKT^xW;zV?zhvNFdhxCrYaQ3R4BzTNK7`w9%>7^fL@p7-a$Q`w zJ$vpUktv$mGqtE`LLWo&3BCMyk`lA$6MW9DFHJYedLMch9VYmu zHcL1)0CVNl?o%szeaI-1FCGNMVr~kci3d0Ztm9T3@x=0O4YcvNgv0qFl7xZ0?=TgP zu=+y=8eEY)C)`)^2DU|h+`NUK-CJMkkx7m6*t37@ldFC`ewSByG$(8Pm1xsR zP%Y7Ikj!A*0v%bYB6&vp04G!J8^=Zk&2@Y^xxtIm=;7{W!l$3&HKC zQGbbOSVusy0mf||(E@|uy;ux?J&CG+Vlf~h-HyY_aK(NrJ$EYGQQq-v=NT^DP7kz6Y^6RFwo%^4T_*GJ&PC zY@lD{WmpPzSKsf+$P$_KmCeamgicdm(o*e3yy|TZl71!doeR}0MKKTWYWXtc*tMB6 z?Zd^wHU7iJDMPT~S6~NBp~8$y70H~fjW;57FN{W538DyIs_(L?7oc>OqFlyU&ieQY zP1;fJv-^G$PvD58b9Vt;HDk8**tU4QsXJwv71x;GhuDZicv(KViRj$XE<#F#Qf+z0 zEvqN>1NE3}S7nZmU9+)*7YW>rc3XFV7O`3vwcUw=J6NBF74V+X@yoU6!x}$9LxwR|3&RwY*f$hC=s6ryCI*w;^PHIRfLQsOdd@zPvn?VdAY6W zEgDYN=N@q|_M>zzmes7TllY@d0W+5EmMxpjS=y$UiUP@@mjhr}=%XKmNzET+ewt&6 zuzaAgCQkbX^Z_t!=dJ0*)zuoHDv-5bG8nRqjUe%?at~i~|A*&R4B!2H$GV6$t$vnp zwW|sav_&V#o7SEJX@(^RL3YYQ82uT6_za#&^DIdbjA_6$DyKkt+lq%3b)u7w#0$&M zB{XpLP3T2UopxWaPkyST5g1*;^PqrXPzWsSYOol*CS-f4v&L8p4E$ zRAyTJ!7Pe7!$>$ScdsC2h9=)<=qM6`PoYx+by>&489;?6R7?4=%?( zThgbE1bB`kp?%Su##ts3iyZ6&TPms`NxnicP6)9i!5=RPU63Fn>%>QMsnfBe*YW886On@env%38oRO2&%`=khM7-Nb z6p13Rj+cP!J*CicP=e% zp?oBdXgJ>H2y}bIwx1<}8g-en=I5K%I?ypxOHM7kvQ}%J@Zka+!g90Oeq+@x6SN4p z#KoVMz8~7y`Gn8lI7nn$@>*0L(INQEk|yW)Y4D^S*Db~tCWMxJ$h0&@giPpHQn4CV z0WnVtn;y|WzQ5KLuy;0rZjM7%dw}D^VigNH3Mnjd(KK)^RI6ol*NcUQvcu7!qI3hEpi&;p{s zLLE!sHG8rZX>QSgp={(7EIGncaj>a@n8U)gnc3{@w5#+i&^9LmGgfIMjqZ;bxm^YhGSz&O`)oT6mRwv_(cdYpq&bhFaaQb|`b7|Vw&+4jE z8Cuohq3`6Xu{;vfn!^gYgr#u~Fo4JG2I-pIWK~~+?wMhB1wkxX) zc4ZxJm5xQ_uD1hN^C#WX^#;rAy0NZLN0QIFGShb%jf8@aMMS;4A1}O5n=`Mr^y3j= z98#FS*VC4TFS__N=%c^69R&YzrW>t-OJ!FaLPWtE`>y&YDVhtf-HAC{CXNBOkW=&& z9$RE*62G!s;uqtPsnLy65;&VmVMeT`boLs5x9|Mv4J3y7J<*+G%`{Jgi+$FXyI-;*gil3oFM9 zD~o+2?R#L~u5I<{pvS8jQ8J*VxyIAZ^C}t(o8?D%Tt?Zc@3SCnITNw+llVl0{UgU2 z5FZBZRG}rdBP~t)E=?#zbciq&PcaG;@!5O4N6L&?Rvo4eA-+ofj@HBv50g}nRYHgzhW$H@U>xPfE$_Ya;l zoZnBmIv=ENHGKbgQx6LI#&Y52H$x_Eqra#|TF`%X@8Z&vuJPc>jq^hiQv>WEnruZ` zPM%`unv4ZyN~}?(K)Y)&oX@f3Bp4U+}bD(moCaS%+Yvi87v@v_m2 zW7Dq`-iT8`EqpZS4_-KhU^;o97{S`wA0yXHQ^};dAGOyy%c5F)z4V#4tn0A#k_a9& z@n59}#b?^Kls;-0zb^m2d|W?W^K70kr*5%%<3WiR_FV5(*K1N>YF38>|c z7QHT8xw0*LV7T`#sI$ZC^QSs-%6d`4WDL_}Gf6+gk#o_&;O4DFw<*DmD=))$To(t; z*L12s^E+8wH;6C~vJqmxERdVWJb~wp-6StDUWmFLYe8>j_&JxYQ<3y--!bySQG_)7 z)R;RHQnAncTchsR@^qPE8&tIAKH$t2shhPd4|Ppo;G;7^vR)? zq5fj)Ved&(f8e9V8$6`15kov(Oh@x2CkcXuQ0*t7n$TxRm>?SF(QMcmBgo+3JFwLh z=O?w7PV^l=HAw@0KAp-$$mzp=^U+^2Rfy2m|I5G}>OiC6CnpF0Ipp@)w-lGpG~j`f zf|E4nf*e~Y{nLwm<%F_X>Jw3R#*|l~R_r7$9@AxT{1056`7@5=#-c!dw;vfv<8+96m4OF7(U3*_&2TD2erQ`ra~!A^fra6Mw8WaHVe7D5e0*p(^xSj-92_gJlhp-qu< z?ss@SbE(ZMEEzNA{LH z5AL*Q9VO|1Ay2C6v&beQa_dv{(NjJ>&<6CrClp-D~yuZy2Y;jbslZ5J1^p7 z%bd?2bYB{LL*6FU!Ubrd>@ISUCp({WLM{6xH?mKjwjQjA7M$T^0NzUY=X^2YE)y3Yh)Nl` zYzvU>nM`WQBh9;0nTYB;RQz69H0hjv&DxvW=Uy=#8x>Ay5rPR0$~{D>^AoTb7msZi z!l~M=E1 zhfh#L5pO**8b*q{-tBL%AI=B)YlH~CPm6L#ok$2dA|4X_3H`0dhKPfLeD@0A*IdXS z2J0=09)U=1n;{VBmQ)U%2d}3j`1hI-j1ZJfs$YBm EAA@~ delta 7072 zcmaKR1z1$w_Wsa0q=0m{#L$g&NhmEX-2ze)gLKyrN=q|@G}0g~NH+{!N=btV{DIH! z-jDnL-Fu#Ao-@xmd#%0Bde>g--D^)NRVxG4ln@Zn0e9DL1jRTY6EYQwr7sl<#1Mf5 z_x6cyVk+n`4GsWcM*slGAaRc$LHsCzU^D=N_wB&DpQ{H301ol{?Q2Bvtrq(i%8uil zIL({dBK90=HBOCwv9WKT>Px)d@>zFf=tJ#^?pB%gJKv9VpP|3{*&f30xY6uMV)~Ol zI^y+|Ws{R*MRWa?N8Zip6+ugcYlg9uX||t>zrEh69d{l{W^>O+4hg0>@WA+ZBIx{U zv}882x|Mva*O$8Uh~~O;(5`4BKEhFLOA(8U?lRt)DC2MrxvZuJuH=tZDSzKyT=w9k zMuja-4xw%)r;UK8(zT<{gJo8Rt&7!qK;uGF8eOA4sxpJTAp#e&mRM4lzU>*q zYW)(Tdc3$6Nsp1yJtwl^z_|ip>R2e6&_uVNy6FPbX6SsM%?nObfWF#bsHW3ssNttV zXE`qPkl)$)TP05WzN3|-_IpM+Z^A|t*&U2BeFw7JnDl1*EawS?r%WlCf3BYF=D$fh zn%{a)do>+?vtNezg3_e))0x4?;aP;HQ zSYB5KL#62S*}?FDNsmeP(6>P(Yw*c$m67rSEqs-joDXoHne zsbV&kBayq}z+F$51+hoz>v{Xog7HTtOOPUUFEu`PTcq!+FZ_U`iZCJFjC#L3x0?prEpOobxe0rDVj6V-f>NhDU3+hZ2%NLnF z0{cshznaC8vS@XB2^|~q0q2I(%(F1MO_r`(O0AZnq6okxGFYtPNGW?dFK5FuHmL`{ zj(a4h(~GXDWtkTVILotJvG9||Iqq=4m~;sdQ~mjr+YW0tpT12PbquI&9G3Zds#1~Y zM;E~rv?kSBe0 z$yvTq&q)thc_ojJ%SEm+cakRNFr_ZEt2SygPE|FjfmS@kw^6w zIl9RGR#|Sk7L1ktk2lWn1k6$xAJAJqZCFdX+W8l+i^x)>NRP#`LyY5w9ghS^VEFF6 zp_qkn1V(H=0>`as7XjSh_n3nmzlVsfFJd69Oj;HKUEwnkS;!QyREG|mU;ETSz67vYnbC!TA@+Ay zNkZNvtt>g5ZdO)*K(90)xvemf zXpmSk638Ak+W)9Pd78?qtM?U1#{}Dt>SGW=foK*xEA_hu_@sUt&H6z)UIDlA^h&m` z;2yV@RQSYD#3&KRZf?g7nVySi|RLZ+y+JV}_!KHC}xIm{0^s(m)Bm zI6WioBGK>zvp<#^RHa5kU&G68!;pHTjP@D{_p2u&-gl%d(u({@lVjmbZbci!m(cxmq5zSVY~$1`O@rY1EKXGT<7&1ZEWi1uYjwk%!8+iNePT78G=z% z-GXD?#vs&Yc_`a}J4cH!#E;f&XeUCHrRh}xBG(fqFgi&ti@FuZk#IhF0CDYnKUG4! z1{;rP#^xH@aoO^dlQ&8{ATVNfA|W1Qxl8$B&kGS$fpmSC!Gf5+GCO}ZG3GkXHy)L7 zyD(j`n*QtJSsx2tG1e*{2P4C5h0{9AJToI_4oKs^JCqAS>4QXxut#xSM-ul zFA`;}2Y&>)Lbxwn+{K$cHwQWR&oS6|Q^w1-q{Bs0M|wSo=62>Iw`;H4z-bnkWo$X3 za{9jtG4UTy?2(2#dF@TCr+TB+Xfp&mUT)XvCZO%WzPPB+OY;#!xq`LXqx*WLvEMS2 z%GWh0%ljC%>$mQze`!F#O@LKjEv8zyorAdd!OJG9I1|!uxOtAAPim&{MOi$9@=mm# zbwm+<-qkqQ3=D1>}bXj<^2qkIvWSy2;n4!=!`0@4L<4z7gMt2s(fyP9A*`B> zCf!nj{aY&VSN<=dA^aZ;uT))Gsq=Q>ooQnpWE<=8qh^SNu1GxU5?6aA1Ow(OeCt_Z zxprrSLFcYwHFrKfV?0`D@`NPO>(4qYkG~;YQlo$q|ByyLmYPY?(Tx9s7F9iY@*O&b z^cYjA^i!j@pvmD?5drY=)`kv|uI`u8cq@@f9OWpiFPO`NEi9!-BAtw-YnDg@o=)-R zF3SlX*<#OTYw_8utt9hokRA7n3uaY{i>fM$ZR`@-8_-|rD6owK^N~T@AN2*`sJY_% z0N~7wjK!UDtq{mkMBol&s?%jN@#${-kKa@ylcv)Nu@VT%k80{@&^k<>{X$kr^1-4w z5M&AA?ONqkvyIn{gfv%v5`-A^L({czsMeP+XOQJbh60|fJK{Dopd>}NFA>sh93v1@wJe_+NG{yG`WZ=YXk@WvXQREnr$b~mj=f9RV3lHj0xgeM_3lZGavv-{1!@1rwqGrM<2S$)v&S0P)OC<^D)^=i%)xoqd;b}+s zNPpzfC62QlF1pjvN4%|I<$qCIb{aBG7~|g4xC-mY8Qa$FF{w5-<0G1!+T)*W_q{3D zU)pb9cApHTPJV@fWXNF#Cd8eW9Ao~7h&IqTiJO;{(!&-kXyHD+?esPYFwXb!x&yIPCQBY3itvx|t-8~NrA;xbgp-hlo<9pZnXfz<0}moUsqdGk6HoRa zHbqG-rxVGxT1M>U*k;W4vKg#M;X;hRMlLD9T($1?Hh)L6kDcV>uiiiVVwxFEZOI=G z`$T3y=dm2tipZO=i$FZ~a6F^A)5Q}({Jk}U{n)nUgD5{40zp;Wbr0G}fmk!cxH#hj zWN$NXsd2)Ljn*(34Y1pG*VfLCw@2+e)?%3hP78Kqsc+A5j9(re*j|z}f@oh=gso5Y zLnGBs%9+uYT&Vn-Wy4evEeM3!$gOqge2F9`S2P>v9^2?J4dln>hQ_4pH8G)Sb>Kg~ zB1cXo1oputo>`k##N#7inCq*__pS4?_>Zl7bR1IC!-UkOt-u3N`zL5BCmtADS}W^V zy3BeEr-X?8B0bdQSvv;%PGTxI*@4Fcf!^V z1;Qm6EXO#rVwtmEiKgf6hrJiZrTzHzM3oAk>}46B@+OdS02QL0%k1U-_P5VXPe;DH zGE0q36@w|;jwYCr4oA*HJX8-Liq*kgC}<9(gCWHlC_yV2Y;=ffLLTu1Gs6F{t0z;8 zPmW(dg39o#HMsuL;;3Z&LAPy`2JI@gauZF2M+p1 zw3kPyiY%0jr;X%0uF_OhblI`ozT8l#BtIJ=+_J=zRtko_oq{+)Hj^~QQ#2zclZtb- z$_|fTz2UKz(tnKM8GeEmbOb_n{-hy&d8ynVM39s_{ma@VyR%6~AZt;ZA}_sfYv$8 zZdbwjEgPp`un5?hh4I?5D>~n^@K@NhyExh?3HoH?5)yyqg~uEiaAK#J!bh)v1biJ?x49Vx8(`66@0fLMm&?du@Rudn5P!`|u8K;{ zdszj1`#z&l6bcfR!#+~dmNG6@5k#-Lq*+I#I{jtf2&agn9px%jx44_VM!&Ei4N4_% z!QBbT6alr$gdAHqdG#!2^E>{Q@iREw^X)FEI$ydv6JJopcC>U%6i%dN{_x73dY_{P zyx98$m00VeUHdnsbn#L5!S9LP4YDwmi?36YY z6{B2fsq9-lsg}%(f1yZ@w68rprNHO>wt!w__gGv>I^96Wf%Xf|lACokJ&pq&1T+Q=svU?6%2>#uERYRlF3M3=X|AmT{%b)3BA=5CA+U{-vh zKKA-$!-*nZ-wg1xP-EouqP=TlB>U(x!U%bF*_i9I z1DwF*=>Z{iZ8XjmClyUXtG-9|(2f1LhagFYs_ZJJKsHl$XX#d*MPeyQqP>6Li+OEq z={(&gH3{I@CMst7XcL%p@u_DU_|=SapCXEx<|8=uP79qiiT>RoBp^L0BXg}_!e_xI zy+H+S7ha)0iJ|d|b$T<6u7yctnI?^HZd<}|&pd*YwaCuGbFOtuBYd^&4hFW3c(V(8 zg}CK84k)KKBgDSKp{{Ps3=8}QW{3+foT)S5K3lpWoT)bGGQ%ji>}MVdE>I7h1%JKa zHJHERNp%Y=kg_Qd3>*>aR6{vq`|R=ZwTYWjIOFBv%ykYh`FDjc{{ERuGoj_8$Z^u% z)MTwv%4g-`86MD_wk-*x%=Qicv-!o&&eisrr5M(+z!@-g@4*^lcFoQx2l0jyvQ&{{ z9Vb(Ogne=f(W-r(=MP0%HT&y|Bin&329&9J9vKS;CJz>rO-bpYx1ztXE^xb?!*QkuIXO^|5)9ir5HmV#9r z;&Hn;UPvuUFg}mRo0vc)wqadHSE?*hyi7No*f#=r7$4I`pHU1j5m>95fe#@WugCbe zta1^AQ04^)1c}T1bekpVfSB6vDLC4xqhG18VQ9%t0_o8iJzyf5S8&85d ziovMQ`=@FxZ{hkfbEX_a7V@|5S;OkH-mXh-ar{d72GUh^wx-OxF?j35F?4IV>X)Nj1?Blo zA9s|T1xhQTZA->TAm3K>Ft>yfSd!kP^ZQ#FKU-~fR{R`P7#pdse-9d3iUS@*4g^ZVcSlt3 z$m<448r(g34I<B)jNSJOBH>YDYx^96 zsu{6R5%FGDhq6jej(^Ba(ic9@$u2ouBxan$uKP~WORc!$IpnxNI>qZ^~0FsIQ1NDoC7@qnJ+H7FB!=|uNM7pMbI} z9_kHZe%>Y?Q7iBji?`t8jvbt@Eam@23U&SVF3hW6JTP}B| zOc{NZ-p3?Q`2d_^_^&Lu;@wJL#y7rMWB@_AC*xvmdC2Lb#9c;OPdi48+gPtJBLKf| z=wI*IQ^;Kp1b19{#6i%_17nKY+;aV1j{7!9^973qyR455aE)v|rnL|*b5`q`4OzL( zKXC9E6bS!1>402N@WJ06bATwx?mJBXKIVYvQQp6ipeCcf>pk5ajr@Jl03QGOiv!q| z5QPUomXQb{DpWvJO%0^`Bau6W_hJwF=zqj+0}_z??!&*t815{%o##G^$!JIsIuP$P zl0pWlkpCD*d1u0dM(hJ!L=aqR_J3+IrY1!wK)KUGfX4Cv8TIcz8UR50K+)-6GPkWY z;6K&f8U<$#5ul;{V-D4wIS={*546-{Kt9m0{TX}jhA%;M1& diff --git a/examples/zips/management_agent.zip b/examples/zips/management_agent.zip index 8ba33eeb00ca8db7d5a2068935041c7943c65c48..c6d49a3864cec3a0dff8c931d94ff01eb9b99851 100644 GIT binary patch delta 272 zcmZ3cuuOqBz?+$civa|px&kKh8Y+L~Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+bpZ z22@h>m4D)nN6bKdljkx9Kt(oxW-MX^i)Apoz{EB&XR(6Cw(h6<{MwXY%3=AywKuM4?5g^S0R+bpZ z22@g`z&>%uBW9q!$#WS4pdy<;GZry|#WI*(U}Bq?vsl4m@|;#Mv3Sm4h`Oy@Fw-XU za6bSmd(UkTRW{j#XFpiz8;?Dc0{i5Zd@^8e7;ii>_Zn{;GB=bj2$_3=&jXoj$d96T MBfl?Dc9MV^06o)5i~s-t diff --git a/examples/zips/management_dashboard.zip b/examples/zips/management_dashboard.zip index 4ba05777cc98bae0af5e54dde67abc5ea08d2000..5a84d50b19c68a46a6dbfe1436cfbb05fa740d3f 100644 GIT binary patch delta 259 zcmcbpeNme?z?+$civa|px&kKhnks+gPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+ehV z22@h>m4D;Pa7I3$#zw(h6<{MwXY%3=AywKuM4?5g^S0R+ehV z22@g`z`k*1I3piWW2CM(>uqj!1_o>O$@~H;lLJIJxi}e^fhs_%HoG#ZvNHpfP0rW0~2!-c+ChFGZAuzicPK+Is_JS5_V=%V4oZ>A_L|w6ZS#o3X6Cl VbL&L>khyPBWg|obL9(kw)c~vNKn(x@ diff --git a/examples/zips/marketplace.zip b/examples/zips/marketplace.zip index 208c6cf85ccadff613f3c124bc82ff4347f4ad00..c4757c9c2cfea65a707cad8af83823aae0dcf803 100644 GIT binary patch delta 222 zcmew+{!N@Wz?+$civa|px&kKh>acy~Pp|vRKha)_86*&60TY-75!mhq5~%sgznPiQ zni-^KvLlNrOss~*pAjr}j@1|@#?Ds91QzSyu!4$BKEbgMEY!(q#q^bb@@Z1- delta 222 zcmew+{!N@Wz?+$civa}wFndkp)nQX$Pp?y8pJ*?|3=)X3fCO0}v9r}NfyFvFte|3(PjKu53w3f@F)6T5UdScJ33tTg jC!B5&K^d?bZ>|tz?g1`mWUdOgBQm#*+XKYCz^w)VN{~AJ diff --git a/examples/zips/media_services.zip b/examples/zips/media_services.zip index 4f68bc8144021e04f8b705949db85783c2b93111..cde8e58171ab3b6826ac2e0f0b64653025902b62 100644 GIT binary patch delta 519 zcmZp2Z*u1i@MdP=VgP}tu7HWW`pRGV)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$mBqWW z0hQEz<)66bH#1P*I>W@C3TiQf?G+OBg^8t# z?t-XO5{H|YAZ`M&W4fd#Ox-g{cZisQ49tC#i)D6!jWdw7W%|lLIZ$2(%HaKpXFkZxdrmx$lN>fLC9Qx1vg~wHic|tu9IRQGIxt&G&0vf2}SR8rEp|f Ler2$|G0JKHI{~d; delta 519 zcmZp2Z*u1i@MdP=VgP|Z%w7|D^_3Oa)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$mBqWW z0hQD!uuoj`n;EEY@+w9LsL19IjHj8vV*6MEVPc}Jx{P2kS2jPG*i1GKh`J>lwlJ~h z9G@U!ceq_(Vro2v5V2W&7BI0Jd_fTNbOmBzViN>7A!2g`onc~61+|#L_6mvm!o*TV zcR|!CiNnoH5I2F?F=kGAXc64wRPxbNggNk-02# ze#qQnxp-vmXSo<;Zh^cvGWU*r5Hi!cWn%-y0Gjm$MrLeV>2DI8gr LUm0v~jItU4jqrw(h6<{MwXY%3=AywKuJ_(sn%=|Ws_}% zq?kb(4?BTGYQFMs=4Nzf1_@0LWr;ykHTeolGEA8*s~#g*Ssq&uy0XV?kuYUW>$Ye64$w?zpB!<20nnhSA9u!u8MZ1NnD!(itoi8?a@4ZkQQ1LhtR z^#pMR#UNY*u>fS*g<@IAvO400$g=yy6Od)?CDM_($0dA_6`M$+STs)(#Ug$wuws}q cYNUdZ^?s0wLN+;DIuV)sRyq*Gb&yd50I)f@-2eap delta 568 zcmaE6@yvoZz?+$civa}wFndkpHC0w%Pp<>w(h6<{MwXY%3=AywKuJ_(sn%=|Ws_}% zq?kb(4?BTGY82Qvb2GX#gM=oBvc#aNntX*N8K%sZRgV#@ERQV+UD;!{NSHDw_JvGf zWzRV6U}9Qa5fH7d-01F@{Foc=5N)0CMJL6RGI7}#m&XZzzlRN$fGbH zOm^mXg;~(Y9|f`WwV)5W+oFVmVahfO&4sulSi~7BHhGT7VX$+PM4g#{hF_GD0dtRu zdV;uuVi2x@SOBu@La{7lSsn30WZ8Y<3CObc66wg?;}Sl|icKU@ESe{YViCU-STW2Q cHB!OIdOt`-A)A~noruhRD;)^pI>@L20LOxqdH?_b diff --git a/examples/zips/monitoring.zip b/examples/zips/monitoring.zip index 9e118620265a3aae2bd7254cfcee951c7420804b..5d9a4d7292dce54847d05f0a9e4648da88e01426 100644 GIT binary patch delta 434 zcmX@Cd03M-z?+$civa|px&kKhYO{UiPp|vRKhaK#86*&GtPBxIFRkEaU}Sm8%)r1> z4^$1(Cjz87!1^}Yg7npV<=^5o3d(@F1%i$cuGl1DHn7MgL2qOQc0vwl3g!!W eqKR+{J0WYy5%xh-a8o!6O(aCb9V9YWL=6CK(tAn( delta 434 zcmX@Cd03M-z?+$civa}wFndkp)n-#*Pp?y8pJ*q=3=)VoR)z?qmsW5yFtWU4W?*2c z2dW0?69Lj3V0{~HLHcSG*f)MDV*+WMoXc!vNQBPFbtglFm$5Q16i6^Is7yY{Ej#%w zvjEhv&CDzZSizX@-VyGB5+(0CGQG=T6?t?E|xd zm4}Z7Y=xMBB~)y3sK7pmkf0@#0{i4ZK^ZW&K+qAw6`Lf?1{S#_=#8wvPRIdG!F(Z4 eG!af=CuA)-!aisUZVE@CiG+x_gGAn6lj* z=b6FEdU^C=VuyHw7{OxVe7Z0(FFpfSsQr5A#+?&}+sY|2A7blj2@|N+$xkKrf^{yH zG+_dISx{OG;pNG{Bt0O4GGH~yQvR4~E=$=Ut1*yv##A#!+6`IFZ)sm-Zl;VaGWWQQ aHKqy5vM9DR$U<#_IP8h66G)4OoEiZ6hLUvv delta 464 zcmX?SbIyi0z?+$civa}wFndkpRbx|NPp?y8pS)36gcBhiW`z)!Vg{+)>SSfH6Yxs1aerffII zd1kP(ULJjz*dd-EMzEMTpDs+yi_d@+YQG-3ap#2LwsMNhhuFGW!UU>y@>7YuV4X`P zO_+dQ7L*o4czNw(h6<{MwXY%3=AywKuJ_(iB5Qwi2#*z zfK5B*$p$p3<}3eZQN|c%W}pR=OIWO6Vp~|k8Np(FZ1zyG$-!(#z(P{&p2XNNxsAOP zW*j3&EyTD+&N7(TU(Q!dVDnz_6vM=ld4(WOsSwDAiM10uFfA{izoF9{XPk}iaaJ(TW%*pVZj0~5O^{~Th+3B@9qn1hls#Jn_>0+`qx zmHQBN`_$lKChDaSu{9d@OkepYf7BD>gh$$B9?bxVpbXfrwVL6`+^?D*$lN$BUrZCu zXrX9v(QZc8@ncJ(=h|Ja3twrXZ)$Ks$mg!X@a|QGZk-3ZX>yf!m235%1y9N!& R+&aTLWUj0cm^;@<4FJ_h^~nGL delta 712 zcmX?{dN`Fgz?+$civa}wFndkpHB?q$Pp<>w(h6<{MwXY%3=AywKuJ_(iB5Qwi2#*z zfK5B*$p$p3MuB~^C}RvWGth#`B`j7ju`Mj&j9@W7HhZYp7B-Ce%G8gz?+$civa|px&kKhnz4Q5Pp|vRKUtAagcBj27Kjj+Vg{+a6$28f`O3f9 zhH(-PNNDm!UN1CNlkNBtV9J*8$+3f#9Tl~QiE)X=F@nXi#a*CcledZ=1q;e%G8gz?+$civa}wFndkpHDgm?Pp?y8pRC9y!if-13q*)ZF@sdziUEn#D6ns~ zVVuMR5}JIG*9%S6WIMhDn6f2&a_nGbM@8*nVq9Wzj9{^BaTloAL%3p`B0$G-fSfxyNiqvr&0EO`Of_jzd6G7iXavWj8RY~t^AmAQP^-AB4!xdp*A5D zu$F5}sVG!X+^pJ+~;`}O)xp%`ObIF z{myy4dQ*1wrYz1}%|Wv3&7 z`6Gg1W?59~;M_e*WOFK&3Whz*i|~Kb|2~Rfc_Mlss}X8>C}?26XA_0ujq-@Db{WH@ z#xTs=?ocXvi;Y41`=da8uyENi85RgB@E{4qXG`UQ`Agx7HOKCyPWzuZ# znhz)zTGLH1L&p0Qb7d3|k7jftrpfFlExyhYYoBM86U>w&^87g&1iPMF2u8uXNw*%n z7SA%wloI{Ci$fQO)u-pM461@w8K5-niH$txhpk(1K5mCZhX8#rkmFXcHb>XkTV}NGud~ zI5Ql(wC-S)xWYSCQ*wNR`0f|~OGDH4H&KZ%f%*g&`&XUlNqT*i3_JX?7=35sP|t{J z>BhIVRniBgG~^K5Ya8_x>uWTV>E|u)g+DUiDth6t&JxegBsKiY$_0+Lkj+zB{x^U?O|#a;oBOO(utWX_xrnMt_`0u;ezen|Qom zwo?pgGSh;ZPd*}x>*)~dfA6R#m~J2C2D|rl(!%7V23+gKq!c->-OPtj({KmNhhPwVbSo`Oo8eQsN2N**G zxSWc2kdTVs8E64qw0&^5RLuypTaIsq*(=9!Ybv$Q)eOlOTum_4p0L7jTpFs~60*;Y z$#mwVp-Nb58^R9I?0laZtw1`+XhyX{NEyGP5}3_7iREavXiSZQC-Wdf;c18U$Wsop z|9cu>cE8sEv%h)q_NcnBkeXq*5ab({*cj_G!TK(rWcGW$3Ye`K*$%@SBb$YgHq-ef zgSz~ZL1TStwE9#wtpDtk1=b5zu%i+yETfXm+#Z!&U;SxZPfuW08kV1tkbgN7*31k? z`F5-ohS}qi6x$>;!6X_UGquXb5AtPe~_onqz6Cc8C M%4C-idM49f0CyH?F8}}l delta 2391 zcmZ`(ZA@Eb6u$KG)dCg9bb3n(j1|fdhNg%N%3!Qeib!F@QO1X6W&=gHkYQw5E4n6x zuhnwaQaU#1VB%*SHgiiBjdl8C0o@OiITE5IYO*Yu$zo!rA(_4J%X@cjhf7#;p7WgN zocB5B_Ud)T)$58RYaJi0;>3Szyv3cA7n>1x*pU$jmDg!f; zTxJ5tJ?#!4^}*7(lL{gbQWm4;1k$LCOtV8Z&l4B>#f`ybiDDxyF?P%V&{s62pEtpuv9U+0vbU&?1#4xQx+rVf+?Pc2R zjjb;-EVQ+sV#b^o80N|;p&l*jB}|(;LR);2C)Ga4tEQN_K;roeawzs)VJRAg>?XVQ zt!t0*95=6mZw?A@aeNy#w(pr->R7-~ger*>{}?LSa1})ts5`eypN*s$%Scagr;f5t zI>&1H?ns(x*8!&X!7d?&bXc+JAm5vmxS`eQrW#i8y2(s+zpU92sT*%5gNyB}%y+4U z;tm%l5;xWzvq&qvWtop9H%RV&{l6?&a6AbWzGUVTUhJ=pk|)_s76ozmVKIDe7hqsg zy>a6k`)b*P(whsY?F}skh7Gk?>GUhM=OZ6k+$wqDY+a(Xy=^-qX&2k-m|9f(GNrAS z>)^rJEsu;u-hKOq|B51-w9eaN}Q1p;%g%)J;0x zkGdHK+T5(5_O+Mk;s$!8`k#85D5gKcxWWD-z3gywusZ$dw8ZGuYkwVD2>;AzVj$oY z!aP09^hUE;Kki+mFMj)&bZN`S9;cUfufGtPMbs|%+OuNAA4ZiDtbzdD$E8=ldpv_~ zXU<--t`5K1zal3)>v#?c5opapzJKuoP4E0ky@^+guBZIZuZY*#$fmyQG|-oC8#G4> zy9N(4+S=er`ndOoN)+K=eT-ZN$NUmnW**&NB;_Q`Eq&1V;?rO*64_$3I)V<$|!x?#~am&a) zHzBi`Q^#v@t$mz0z_Ket8rTea%xH%OF=UJ%paN$LP7^tnEt}Rr@N^MoC_UY{9z4}J z`>&@NXODV~IQyfQY>%mn3#p&L3jyDR%*I5Y8Q1suWV8R_tHIg&$^AI|esZ@MvSxa} zY*3e9HfW+x0~u%Xas8WTY`9*uf}fIEVVja|=H`^_`kKy?dUgU!^04}xjQs7nh-Owi z%4gG^ILx1st>E%ZInF*2kR9fU05OT#@OxknCfA;qeIh-h8n}7B5HoUSNpDs^Kl>8S MrqA_>p=U1pKP+$6CjbBd diff --git a/examples/zips/nosql.zip b/examples/zips/nosql.zip index 193c9fb35f9d01a59b65573eaf6fad458a185e07..eb3c3536edb2c5816422a4db41ed9a89b198cf0e 100644 GIT binary patch delta 411 zcmbQBF+qbjz?+$civa|px&kKhsN{$I#2SOFabT4ARspRfe;&5NKU{3A|wOm)(g0! xt9UNpjI6?2&i delta 411 zcmbQBF+qbjz?+$civa}wFndkpRbx|NPp?y8pB%s!53W&20=*royulqV)ow2~=z{7yllx&XfEmOh8X12#8I7AjAe1k`r)%2+4rC^#bnb xDxM2CBdhQh^g>s$P0$Tlg{+V-GPhgE7G1+jAuD7RF2at;+-1T}Anq$+H2{noY)b$D diff --git a/examples/zips/notifications.zip b/examples/zips/notifications.zip index c3b79863a312d99e9b4db83993756c30bbf9c575..eadd6bebab564a43ae7c3681cdd4bc1b7d4c7b36 100644 GIT binary patch delta 479 zcmexq{L`2>z?+$civa|px&kKh>al(0Pp|vRKhaT&86*&A4HpoZyq=d0EV#!FBv|v6 ze=`T;UnY>yWDXX%SO|+CL@a~N3#M)d+fGKXx)Kg2nAjc;Er{4l&H$L0Jy$>{^0 zOpK2w03w#iYXTAjyAJM{$vb%MVJiRfGC^!+5&%0J9f>lP3%B z13NH8#D?iB|KvhZF-~}}Ox`Hs2@#Y5tC1EBLFP_C<+6%JAj{T?1t4?Zi^U;x^Tb^t jTx9F6h&v&xF_-W~<}Q^$aSXp?II?WJq!);LSyBxENXefj delta 479 zcmexq{L`2>z?+$civa}wFndkp)nij&Pp?y8pXeyX3=)X5h6{*HUeC)07Tn_o60A{R z-^{`ImkA^^nS%u`7Q!M35zAonf~niVwv!R8u7tx0Cbow|3nKQCGXN%L&(#kRyU1-0 z6XW9vfQTjXnt;T>u7f*f@(x~mn99GrOc0xy1i;P)xe#tkfuJW$9o&{cVH>E}cb2x@Kz?+$civa|px&kKh>a%_2Pp|vRKiN@CiWwvlZx0fw`O3d>$zn#3$Yd`j zE2z-sE~YIIF-H~$m{>c@Ylv7Wn?IUilb^Gt!<2=vyE1`|o5Ps~6XW1I0};Evx22^E{XRm>ACG(pH3rtG3nC&boR5xCabB4H4*FQV=sbx7Wt948itZW^Pw zAI!8+@ls~64QHiH(RHdy+rX5iOUFRmdrTH?DT~}~h^3F@ZDBU3Dl7+^c3uG-O33ao zQVfEb)}`nL^}RA&r=Gv(GB6C-%dLVO!)%-x*gE|n!O=_`7 zvXj(Hk$97*sh1#gwKd$3xsx>9k-5J#JdwF6nqb8+droVHBFj2z#UpbMYQ=!KFvWJ- p&d9Qhw7rnIygDe(DADmo*84yQ>_1pw`0FMh>%E{0RxGQh1^@}53W@*# delta 736 zcmX>cb2x@Kz?+$civa}wFndkp)n`*+Pp?y8pX?|m#S9XOw+D&TD6nr_vX~JhGTDpC z3M#a@i)jl)%#p?qNEk%yi>NzD9g?>u$B6}^o5m>a z2Qw{Hyp$Pi!&xa)be*cwHZW!B(lHSC9+QPz$|83gV(BA!TbK>13d_N!omT*d60$pt z6oX)`o_H9rvdpbkWFlUgj2 z>?HM4B;Mp{>LtirZ4EbM?j#L&WbQ8wPh@V2CRj1dp3|D4$g+-F@yOhRS}`ClOtGD| pGqUU=Z7*aluMUbcN_4!D^*+!6`wtcv{<;asdN1gL70c?W0RVF{*NOlD diff --git a/examples/zips/ocvp.zip b/examples/zips/ocvp.zip index c5a7e13e0ef50a9f3aa30fe459c4b7c65756e8bc..e04e070da531c06286da3ce5b6912fe3a8e69aa9 100644 GIT binary patch delta 170 zcmZorZBXS6@MdP=VgP}tu7HWWs>)ya)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$m4)iD z0hQEz<=@!p&&UkaIQcfC4pe9}FB1zNSWHB~7%Dc|S70|-h+EK@=_~(a2SFJyH(t;N TnY%~O3YjY|w>b0|QGvP!gm}1W0p$m4)iD z0hQD!uy5@2XJiIyoP3*62P(9gmx+ZBEG8mg3>BN~E3g|Z#4Tvdq`*GeK~M(FjTf{* S=I#-+LgtDKIfA%RLTUg@ye7~9 diff --git a/examples/zips/onesubscription.zip b/examples/zips/onesubscription.zip index c39512ea86ec6fae54dc4d9ef07e6874f753cedb..422f8a57a04faf5e8906dc6715b2343532501333 100644 GIT binary patch delta 724 zcmexw^WTOyz?+$civa|px&kKh8nAukPp|vRKUt7lgcBj2;Dr#EVg{)^8we7q`O3dp zg)yHIBs6&%lLwlr$&AeYFlAxPr4VK3SfbFCd9xrA#0mOwYFTsRVD)-~Zoh?Q2Nc1*xnYLt)x8$DAr0>u3&4&e%k#Usm35(`6?a{1tdMjxvTUC;*kqU&1Z6^y cW!q#>6f?>CARCo0n}DqNgKRp88!4v-0EAlU#Q*>R delta 724 zcmexw^WTOyz?+$civa}wFndkpHDFUO8PBCTFon!*rfzkA_&F$!Q4_%is)wi0$X{LAO+oI~b;{ojV%C(uMr` zljV7Z(RGFLhQM^K=dFequFLO+u522=FHG4>etsr!`1}^MgNjYI7djw_>PZF$>&cAl zI+JaLCD6?(7mkFPbxk-CVx^U+9TPB?8YN`FM$Z(D0C7KxL%2d>@yN21#KMqeImKg< zW!uFwkYxoV@{wg1NF*W4DobV}bJt3`BP$k_ib9s1AeD$LD2M#`xH08O*It^fc4 diff --git a/examples/zips/opa.zip b/examples/zips/opa.zip index 6be8dabe8f4ffec0d58e9754c6746fdeed8f5b8b..b802cbaad53d95ae7e77f834b613d14f7448a442 100644 GIT binary patch delta 170 zcmZ3^yPTIdz?+$civa|px&kKhswjWuPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@h>m49QqKO-|xw(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@g`z`n8FpOG1;aq>+@ZK%*@E+!);u$VoI5man)Im;ffkQu8HlLGr>1vVKlx0BTx TnfsL05}9ky<^bY0vZ(<8b#y0A diff --git a/examples/zips/opensearch.zip b/examples/zips/opensearch.zip index b549154d7abb1a75959e54385e751ec59b25bd48..5e3e9b171043cda7a429d2815b084977047c9bb9 100644 GIT binary patch delta 199 zcmdlgvQ>mPz?+$civa|px&kKhYO{UiPp|vRKhaK#86*&G0ureC%D-`HAR|a*@=Hcb zsL*5$ru|@{S4?)O+9rE5yFwLhp2pnI0#>ELVafEBf3hB@7^eu(Iu4M9lbbl4Fa@7- YxI+YGz#4ryeK6JR;tU1}@^h&H0A%z#O8@`> delta 199 zcmdlgvQ>mPz?+$civa}wFndkp)n-#*Pp?y8pJ*q=3=)Vo0SVM7uy33i$Osad{F2cU zDl}PxX+K!#6_XvRw#nYiu24mrr!n`lfK_R5STZTFPuAlU;}ii}#{sf%aubIWrr=W! XcZi@2Sfeke52l)3oWUSLel9ftPgyT2 diff --git a/examples/zips/operator_access_control.zip b/examples/zips/operator_access_control.zip index 597a7ff7d5752969bf98cd5b8d9d02dbc9b6797d..a00dbf99e2f7bd9525f6d690d9df4cf5dbd22696 100644 GIT binary patch delta 479 zcmbPWHo=THz?+$civa|px&kKhTCjcPPp|vRKhax?86=S50Tq~R%M1~@90d}o`O3f9 zm~ky5NYUiSOd)8hCPy(B!IWKMe!&7(wwJ>nU70>-229ypPJ4)H_qp8Bm3eYUz?3cL z{sd7rhu0A%_Lw&wBIe5PiLP}ce+*2Sus|d;*dh7CZcwqwyM>Q|g<3@1n7;B){vaj; z=DrpQgK)(rNwI-Nl0-956o@9FDaaFRKvuvn9*d@+SG){afr>;Znu1vpX=oyflK#kA XCQ62*Dd3dKLKB%H6#^1@C8Y)cX>zG9 delta 479 zcmbPWHo=THz?+$civa}wFndkpwO~_VPp?y8pXe>c3=+ujfC@~uWrm1cjsl6)D6nrf zW?ah%QZ)H7QwW->$x+NjFlCpRU$B6c?d9-CSEkRI0aG@Y(;i~leJ*!&WuDv-FlEcR zKS7ku;dO+GJ?4#vh`I86qHEpA9|Kb+ED*^Ic1XUk8&quaZsB8Kp%xK0CI$A%AH-z9 z+}9#u5U$uHDK@Z3l4u5s0?{Ni1$kl($O`zyW6>1!ikBfPP>~2lQ!q;+4NXK*(jQsN WM9FY81)Ne@Xd+XjLO>#~q|^Yyn2DtT diff --git a/examples/zips/opsi.zip b/examples/zips/opsi.zip index fec3b94e56e1c6568cdaa7e2632f5f4563f2d191..b47e2c971168c19f9aa3f5943227f81e0685a5a2 100644 GIT binary patch delta 1858 zcmZXUNla5w6oy+0RoaxsSeXiFT80I*mPvycK!GsWhEj$C0#XJm5a`HII#4K3iZzj3 zHYSo7;}kJrpdHhDFf7ysI7Jt@(Zp1v3z5Fd?K^#Tch3L)XSy%lT!`3Qh!CjH zaUyxF;ICy)JugV(284Q7K#0^D5&ACRa)Q~0QaYPRWmda_8Am|)FqJKe45md36Lc@Z=b~Avi%}bd%qLCOVCqSYsT-{WHdb zM|8z2(1)QEUNnodH~RjX82@Q-jNN<_ciWj|=UJHs+CyLJ)B$z+Lk1=s3 zbtC*>c$4`|Gr^*>#j3NH7&uab%7^oQ<$yZ;5o%!b_k4rs}+N^Re3%#GOlhp4qCQQ?}gHW+3* zaCqEgg6cC<2@EA>HH4A56RNQm4OD#=9aQ<&G8h`I7a{!1ItSGayBMtvl|w>0>|zqz z!(l|}NEq>HL=XLaqkb61*|e}+iA#*`+o%c2DTHGVNIV#$)*-6g?uP1yy#rQPJ1kID zdcMs@4fFRFfuqpn7xC z2UVp<1=Yu%u$jxITA=!5$^*S!(@jv_njVL$W2O+QZ)cP+Ecb>z?2`91^d6iohVZ3X ZYDn@yzn*P`s>&C3oE_hppqe$8{tp|QvPJ*^ delta 1858 zcmZXUTS${(7{@oKE*(>%aL%)-Idv@+ojZ7#J2;&>XA6?o zn;;>g6B&3>c#%kT6%=TAQC(;!>cVacqN0e*eXsAnXJ5N}p8xOvoZgRZE`)6^gz+_J zIN{N(!0!*IYM!4SDdHMjA}-Qs1?Ve3k`u_*E9h(zm09fyWE>*y{WP{9Jdi>~5xF!K z^rFiVr|C3hM&Bdqh`TznjYGMYqm)c6F1nUr#%LMFuJMo27~SL-zll!cCe|1SasP<1 z;1OL3a`bK}H9CsL*&BU-O^m-kG)VA9K^noe%&OlKf>=*t6~JRQYT8t93YrK(~mJ> z7Ih>1V0e@HEHlBPvSnlwIeIHkMlbl0%&NsuehCxX%|A=9j)FTF;}sUr z82uPsh5wEIs?bQ>suN;7lc`ukyYc8Bi~9-ISki*A2a0l%V=JAw@kDt8)B3yIMlf5& z0JeTsH8QbowVhy})Dny><{v>RIxcd14wL7B_w3gOH(%GbvZ<$#)~T44uhtEb%JKD= z@SL}ss+gFd*+j65%{+`0}Sp#8Y?u2TbMGIA*MF&-$RSCmE>v;(Ow9Y|w!!AT?LuHVV47-@b z_HYQH7zrUhj2NK5chnEVcv~YZSLza?yEbY&S(K*4YDzEvEv8rLJ=je(Z8WwSBxDs@vms7~0(R5dPxshN^YK3)SRFJyfqx z`k<=vsG<7M6Ed@Mss*Z#raaKwHQfZ&t?6;7I%bNX`g%qM!!mEk!!CJGLhpgu5(rsH%M-$Jz0n3aHt08UFyT5;l(j diff --git a/examples/zips/optimizer.zip b/examples/zips/optimizer.zip index b542a07ad4e239f64155bcbdc14280f5e76d7af6..4e084d458ef26918b9f1b28d049e0976906b4cbe 100644 GIT binary patch delta 217 zcmZ21v{;BYz?+$civa|px&kKhYO#IgPp|vRKhai-86*&83=*jM%D-`PAR|a*@^eN* zsL*CPrYaV&*lacnsMzG2Z2Q1Mv)C;ZfjUboxEUB(UNSQ>GE+GlE1WOEbAZ zg*K-$nR9`~=JR+%#U_8?ISdxs#_P?bz&`mkpA49*#213hoz548%;n;b1aVXO)c{0w BC}#iw diff --git a/examples/zips/oracle_content_experience.zip b/examples/zips/oracle_content_experience.zip index 01913b236f5b5361e940587ddede0969c3e1044d..46ae9de5b263095e2c32993d480d99c7b462ccd5 100644 GIT binary patch delta 148 zcmZ1_uu6b8z?+$civa|px&kKhTCsiQPp|vRKhal;86=S93=*jM%D-`QG$Tl4vLKTq zRA_Sq(?=$-m=CK5RBZAr)+1n{L^cnmul$o`*=4}oQ*43ATpMt z71|uZ^pOcH=ELd%6`MSZ^$1ufk_pjhP1o3-ZLObiVA91ILPlNWNRPB!4?;o@Xq25JOp-ki;*$^_OunZq5b td-4O0BVeKBobF6t`6nlG$w18K3P9#IaQPu~-*W{ba}&8kLEIhOY5*)2LMQ+L delta 205 zcmca7eove?z?+$civa}wFndkpwPaIZPp?y8pXejS3=+t60twV8uy5QL%?J{i%+KTi z71|uibc$IJC>DA1X016l69a=j2Lpr7w(h6<{MwXY%3=AywKuJ_(Nv>=VWfRv* zF@yA-@&O6deC6LP!?=tYBs6)opw47JRt}!f5KabWpbW@VsPf55td21CnXHc(!Rr0k zJx~puyp!D@rizclg9WTAlE)cM)qWl?m@0nWnGjX01+CCjaR|X}^cUIzQN<;04b$l@ z9szO1G6@GXot%>HFjZlaDXd^u?3MFGQ>7^%08>>jzYk)*g9_Lzpx-CAsT>4r^is7z z)3{XC9;We?>K-Prs+AgcXsWn0!66O`;84w2h*P&}IiabN(gr&Vq$*R}mmO@@P9p~< zpaTr8WWZc0<6sC^Y;u4p8(65%I0{(>r-=u;iXsz#WEGE0!q8Pjn#LllxNaJVuENtS z0$By8iS*>VX1eIAw9TP5A)Ghc+!I+NtA!uBrV@)#WEHP0!qHVES;nCYJ+y?H0|}P^ mD>rl%+pT<&ja9YwL02)!8XA}oGuUhb&{dS%fZcMzMhyTSd??QV delta 877 zcmexX`K^*Sz?+$civa}wFndkpHBwe!Pp<>w(h6<{MwXY%3=AywKuJ_(Nv>=VWfRv* zF@yA-@&O6dD6nsqVO+)x5}LePP-n6qD+f<#2qyzGPzGcwRQY5jR!5lnOx8z?VD*0N z9;k*+-pTF{Q^m*O!2(tl$>WTsYCn$`Ocg)xOo*!0f>vm%IE3If`U~xVsNxd0hUxSc zkAS#hnS=wHPEJX8n5r4GGMNhaWI4{HaWnQ4J_1W9EGfc)5HT^MUja=vWiD0VdyF%O=FQ&TsI9wSK(?N+|X#;RKTpsSc<4Gm0)8EiHI=qk!>z;3x! diff --git a/examples/zips/osmanagement.zip b/examples/zips/osmanagement.zip index 3bce6187b30ab7d3f5b9f9028e59ef80b271f739..f3bbd6f541ef86a12ca719d89d27213a2ba546c3 100644 GIT binary patch delta 635 zcmZ4Bu)u*gz?+$civa|px&kKh>au<1Pp|vRKhZ&o86*&E1`??G%D-`DAR|a*@>@o4 zR5g>MnS!8-Hg9IS08!P(;)AB@D@!m;l^^SBh^jwqzG$j)*h65djnBY?GfRG2h?P1aeJt3lN-cMz)spOZVeOqA-)eR zv{S;G=_~)_i&8RRuBfC7ge!(*Qk7&RvYIcF37Bf`%Sun4AZ3rN?t@e!rn(~OXk<0- zq?3@jg)&Z*MpdqginTf>BYi0=an z?Ub-)QedBaQA!5P6_s>>aK(^Js*;RER`W$N0aML=S?S3Wr0kK^eUM7TR97S&jjZOK zbP_VRP{s*U%M}@@IS?m?$!1`xxi1@qY)+IM7OU^bVey-zyf3oG_41w|?k{;Y0GUOv AjQ{`u diff --git a/examples/zips/osp_gateway.zip b/examples/zips/osp_gateway.zip index 2020702268dc47542facbf6dae7efcab90a39079..4e84655a59e8deea94406d262b091ad524b68614 100644 GIT binary patch delta 344 zcmca2eMOo#z?+$civa|px&kKh>acy~Pp|vRKha)_86*&62@{wN5!m4X5~%sgzwuul zBS^{Qd?r(<(B@T4ArLV}786u`lOtHHVX9`b^uSc9P4;8sLsMDL23L82Etd&whXJP* zRQKcp&Vyhf6D}*Jul$n>xMaZGelB+iS8Vb-E;g{xcP>A4p)_u1WKE~IozPY2@_3@E Zkejll|EE&{Wp5!Brk$%Vh%FVZdnx z)jhd@^B`Ergv*LafqilTmkgNO&*cu`icNmU#ReAo&gF+Ll*a9htmzcD6S@jr9#2#i Z(vvswsH3a;1yhBvErr(uq-q_n8URsoU@HIs diff --git a/examples/zips/osub_billing_schedule.zip b/examples/zips/osub_billing_schedule.zip index ede4513aa007b6c590ea6653221aa8cd805c949b..df9c27ae4171f7e159950996e162475037dae00c 100644 GIT binary patch delta 170 zcmZ3%yMmWDz?+$civa|px&kKhnkj$fPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+eVZ z22@h>m4D;vct&QR#>u=)woswX0Zg3`u{+EzP_fBsEXTmg-m|zcedV9b&n5%rhOqh~ Sa}Tk4BXjlGfw(h6<{MwXY%3=AywKuM4?5g^S0R+eVZ z22@g`z`k*HJR>tu<78eYTd2_H0H#ie*d1mUsMusRmSbRL?^#@!6xb*8v&n$DA*{a0 S+(WG1$Xq?PAP~2SO$`9iN+@Xn diff --git a/examples/zips/osub_organization_subscription.zip b/examples/zips/osub_organization_subscription.zip index 5920a5dfc83fde3f08b9835007f42c9fb845b0a9..df86242e848a9ddf9fc19318c5d94d7c1b03aff2 100644 GIT binary patch delta 169 zcmcc1dzY6tz?+$civa|px&kKh+ADwMPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+jI< z22@h>m4D;jL`G(y#>t9IZcw4kxlF|nvB%85P_fBoEXP60Cb9Z5edV9*&ng4fl*bx| T%zerlg3OI#iw1GGv#9|90qHY~ delta 169 zcmcc1dzY6tz?+$civa}wFndkpwO3YPPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+jI< z22@g`z`k*BA|o?U<77o9H>l9&T&7}(*kfj2sMusPmg690lURM36xb*Gv&w)q<*|k# SbDy$?AakSGqCwp4Y-#`*L@Cz* diff --git a/examples/zips/osub_subscription.zip b/examples/zips/osub_subscription.zip index ebe73eba4eef149b2a100d3006f7f9d48b8fd417..94e38b5c1c5e79b8a6334ed0a3349f681a701612 100644 GIT binary patch delta 188 zcmZqXYv$t(@MdP=VgP}tu7HWWMuuPc)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$ltos( zJd|d`$iU#l#K533Igv$fVjn*nP*crU{*8;n7@2`;CjViygbHo8W)furiv_bdK*c7{ mWZ4H6iehzO`pQ2!k4*;5-OcKW%vEJ`N9Ojj`GL51+0+2XxHqH# delta 188 zcmZqXYv$t(@MdP=VgP|Z%w7|DjSLmo)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$ltos( zJd|d`$iU#l#K533Igv$fVjn*nP*aTp`^Lp#jLbkalm9SULWMS4Gl?>R#e!KJpkk9} mvg`v3MX@?CDX>q@W0L`Mce8pTb5+^gk-5EWejx5$HZ=gebS>}z diff --git a/examples/zips/osub_usage.zip b/examples/zips/osub_usage.zip index e80e5e61acebc3847c58b48fa6bb189d6fee80f0..b0a39258004d8290fa5503d123207e2a8ec6ecb3 100644 GIT binary patch delta 217 zcmcc0dzF_rz?+$civa|px&kKhYO{UiPp|vRKhaK#86*&G0ureC%D-`H7$Znz@;gQ& zsL*CLCOIasm^+IlRBUn^%YLws2dkwbP-kfcHv=QfOJ)WJmU^Ha0p5&Ea?Bz?76-__ b$%|N>h)~7K=0Jq1G&Xmpul$qOv#9|9HK8}B delta 217 zcmcc0dzF_rz?+$civa}wFndkp)n-#*Pp?y8pJ*q=3=)Vo0SVM7uy33i#t0Ib{EpEG zDzsURNsb9D=FVaX6`S0~vL7tu!D^`p)LB}=&A`a=l9_>lr5Ljm@1&fqn9NHZ=e^*)8(` diff --git a/examples/zips/pic.zip b/examples/zips/pic.zip index b3e3fc8873b52079b82b02037e716b4e075c5279..69bb53ab84f93ea86b860d776b1c14721559f176 100644 GIT binary patch delta 663 zcmX?Ncf^i2z?+$civa|px&kKhswjWuPp<>w(h6<{MwXY%3=AywKuJ_(A=YdVWs~Rg zNil;oZVCg5)O_XN%*XhS1tc{2KdT{{s>#7@J}_lV*{qlZfyyEe&f2^piIIWf8WRJ9 z>f}T=*~z?|f-qH%++~cMaOX{4%w>vh5oN{dZykYxi4Wk`5Jgk-?nOA;yQD#9i0kyUJ$j6&ubNqM1b zm@DOstb$S651CsaorSL9x3m?qiZB^hWbPiB0A#MNtTnp+PFWjd70+bdk-2_yxyal* Latw(h6<{MwXY%3=AywKuJ_(A=YdVWs~Rg zNil;oZVCg5)F`lT=3{)v0uq}1pVbge)#P9{ADFVGY*tKyKxL5!XKh}Q#K^#KjfsIl zb#fw`>||a}L6|B>?lMMBxbr42<}yV$@;8?QLU9cv*yaN~F)%SDUJr;^E}ss%);)aY zFlCP1P^}dLPB5_p0$dQSX9abkVw;3~AVU7adg!Jt5VnNrgqs#88V?gYEE)~bswi#* z6`LF>z7yRYmKhIQ`QDq#WPuVWUilFE;9Fy LoCAm}C$9zo5I3)P diff --git a/examples/zips/psql.zip b/examples/zips/psql.zip index 43b317fb12b6f1caaadf1db8c074c29329f90892..4bf4d2a23acd2f1f9b55730efc6dcb6e8673b18f 100644 GIT binary patch delta 284 zcmew-^-qd7z?+$civa|px&kKhsw#iwPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru-zq z22@h>m49PrAtN(T@K|E1;o|iH2}ba$0RW>* BPR#%S delta 284 zcmew-^-qd7z?+$civa}wFndkpRaI7CPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru-zq z22@g`z`n7wkdYavaq?eA9jMS|eWnl0U@;{&W2o5VXtrBmAq#eGVl0^4#%>2Q?i70| z#5gBzVgtJdN81Q}8pl6{esck0V4-2JDgzJeHVhxOja)f)TuG08XYr AKL7v# diff --git a/examples/zips/queue.zip b/examples/zips/queue.zip index 96ab6bf49e20bb07ea34b91af376d9fb17b18355..08f385fcb8918b72158dea496d9f9a8a0423328b 100644 GIT binary patch delta 239 zcmX>vdR~+_z?+$civa|px&kKhswscvPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*Q+ z22@h>m49MyJu^_>WPV0{sK{m)#z01}*bF8knAioTT!@$hi!My8m_>ydtZo*&2~=$I x7505#p{X1uOkepYpXQJOb6;`TBXhktZIQVvI319=oLtt(+*B?n5O*b)8UUq>OhfvdR~+_z?+$civa}wFndkpRZ~`APp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*Q+ z22@g`z&^3Jo*AfbGC!j}RAjRYV<00~YzC7NOzZ+vE=0_MMHePk%%Z{!RyT{?1S&T9 x3j02=&{Pf+CI$A%r#WQ6+*cg-$XqW@TV(DEP6uQzCzmxcHQ&+m@MdP=VgP}tu7HWWnrvVB)9b$SPqdL@1_?x3Lj@+!XNHJucLIsjeC6Nx zKbi@oW^ydE4Vt3KdzhV}sy4H-1Tce@MX)*JWmVL$-h%6hy?~g2dfQ&+m@MdP=VgP|Z%w7|DHQ5x{)9V!2C)!9cg9IY2p#qcVGebnSJAp)M6xcWZ zk7fd?nHo!0QR-3P8AAd;!R^)qGyavd{Pek!2(J{gGu)@P{FD R?FAf=xeEkbLEPs8Y5-VcR}TOH diff --git a/examples/zips/redis.zip b/examples/zips/redis.zip index b02b6bc388b6f6f2372e376cd67d17d1cbb1aa22..c1f8aa8ded9276d0a03a01d096caa4f3ca179281 100644 GIT binary patch delta 192 zcmaDT^iYU5z?+$civa|px&kKhs~O&IlzjoIn@A^EIYse delta 192 zcmaDT^iYU5z?+$civa}wFndkpRbx|NPp?y8pEyB;6CoUC0vDEI2B}+X4HBqPVBh$T zi3KDw`7?_?RA{pXYak<7tcDG&52$SNHnx3Wp>lQ;CLmXULkwa3w(h6<{MwXY%3=AywKuM4?5g^S0R+iw- z22@h>m4D;fLoCcdjgyO5y`Vyi53#a=g^qGtLWMT7@OUtS#r%1lVPZ3Qr!axV^aTQ7 zVyyyk5OvQ4&0%87LjNJ^R7LHeVv{pPcYw93h}kiH<)5r8Ap_<%i-jU{e~LvQbBn~? dk-4|T1ChBt5^>1f(-N-8Tti785Vu}Z4FF@~V=Vvx delta 309 zcmZ2#ywsRCz?+$civa}wFndkpHBeSyPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+iw- z22@g`z`k+qAr@w!#>qvjUQnUMhgjLbLPxnRp+cKkcsv-vV*b3&FtHiDQ<%VF`T_wk zu~vaNh`MKj<}fj3q5lwds-kvKvB{aDJHT31#O#<9*eB~s$bh-cVxh>~pJEZn+#+#z dWbQ5TKxD3uL>w~rw1g`%*HF?2#I2W90|3V_PsIQL diff --git a/examples/zips/resourcescheduler.zip b/examples/zips/resourcescheduler.zip index 2387625103da2321b1c1fa253da6bafa2db24bab..b675a1dbe2d2e458b2cb708b97bc209babaa8cf5 100644 GIT binary patch delta 210 zcmX>ta9V&jz?+$civa|px&kKh8X11&Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0QWiPY zZs9#+Mg|54CI$wT$&5^L6Z`ntfSPK)@^4)1%g78=Gx;;4B~)m$5mPR+AV?n@o07?F zpeaH?y_z6>lleIWxHuV@ff_-YC%<6b4%WPg&4CHX^<$R-bD7yak-53-?#SG$?0z7w HDu)^Xa;rI; delta 210 zcmX>ta9V&jz?+$civa}wFndkpH8NCSPp<>w(h6<{MwXY%3=AywKuM4?5g^S0QWiPY zZs9#+Mg|54CI$wT$&5^L6Z`ntfSPI)*f%crWn>1bnf#g25-POWh$)v@5TuWdP03_7 z&=et{UQLj`$^0AwT$~KdK#d^HlV7lI2Wwu$=D-Bx`mxJ^xy!v$)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$l_lG- z0hQEz<=?n8oRJx*aq@pgE2z+BdnP7ku$T+0BUEg1H|tTbP%xV#(^vkw>b0|QGvP!gm}1W0p$l_lG- z0hQD!uy0%%&d3bZIQc)L6;x=mJrff%Sj>gh5h^yhoAoGID45NWNr8PbBfAWkyOqrg TnXAC=fz0h>_Xlxrv8w?9hqNcw diff --git a/examples/zips/serviceManagerProxy.zip b/examples/zips/serviceManagerProxy.zip index b39a9059c44d3908a044308f91ef812e7735e60a..de2490f78d475265d9732f120f641245f2b69e71 100644 GIT binary patch delta 170 zcmbQuJDZm`z?+$civa|px&kKhnkawePp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+eJR z22@h>m4D;%U`A%3#>syft)W7j?U?36#2zp^LB%F(u&xnm S%-zZAiOf}I3jlFT+0+08voiny delta 170 zcmbQuJDZm`z?+$civa}wFndkpHBnYzPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+eJR z22@g`z`k*LFe5Wi Sb9b_OB6F450zlkSHZ=ehk10$5 diff --git a/examples/zips/service_catalog.zip b/examples/zips/service_catalog.zip index 5563f7da1b10ca6d589f2b16bdec7774f08f8f7b..8c392ce5d788edd28cbacbb8a587553e5336910b 100644 GIT binary patch delta 310 zcmeB^>yzUR@MdP=VgP}tu7HWW2FhRg)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$l_fZ_ z0hQEz<=?m>gpnDjaq@pgKd8{=V5U%r*lK3D*nehqh?pj;B}`ogYY;?iFPk|`>=&CA zM9iGS4JOvi!NLT#ql?Q9DmM8X*B-D?FSi}jSN_QhcxAxcH{1cp+*qC%WbQ3gZaA+y Yvh03dS7fd#UkEaH7M~A@`+`pm00(7eGynhq delta 310 zcmeB^>yzUR@MdP=VgP|Z%w7|D4U`qw)9Zk^w1S&~k>w>b0|QGvP!gm}1W0p$l_fZ_ z0hQD!uy0%u!pIENIQc)LA5>^_FjFW*Y&A1n>_4+QL`;*_5~ePLH3%ZMm(3g|_KVF5 zB4*Cv1`})MU||B=(Zyv46`OpHYY$kcm)nj>fqn74#peU!zTi^>0A<2b%m4rY diff --git a/examples/zips/service_connector_hub.zip b/examples/zips/service_connector_hub.zip index 5577643038cb39667022e882889df37b9d693363..333866dfbe0b19e97ce709f8b764d21c6fe49ff6 100644 GIT binary patch delta 170 zcmX>tc3O-#z?+$civa|px&kKhnkj$fPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+eVZ z22@h>m4D;vC`M+W#>pH^woswX-b|)!V6kQn7pU0evmA%OLX$XMn7;B)zQHL2=6>h& TMdqe*c_VW#as`37s@!S-Kf5&) delta 170 zcmX>tc3O-#z?+$civa}wFndkpHB(k#Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+eVZ z22@g`z`k*H6eBZG<75sdTd2@xZzfYVuvjyP3sh|KS&lau<1Pp|vRKhZ&o86*&E0}`kK3e5Kg3%s?33T!rD zv|s`WP0nVvhly=qe#8hCo67106T8c51yLu(VF?wR9LdoLR(6*Iu2qRsff+33%3}u8 z+Q<_GG42{KT&pNw16bJ%J{Op>M|^A9z+#g`O<-bYL}MUYwZ*Mrw&sZM0V~s%@P;X? zk??~!?yMACOiubVMC^^MHPcuAN%AsaT^@2?NW9H*-bg%od0!-6uY3R!@1MLo5-&{w rS>+W47bH1LMP!u=6@!rEM3kJ6c;!l-NW6zikx0B~We{)jHf1#cIdrDR delta 481 zcmccPe#f0Rz?+$civa}wFndkp)n!v)Pp?y8pXeaP3=)X70SVLq1?GE$1>V|11vVQn zS}=ixCTBC-!^Ac)KVk%nO=We0iQQ$jf~b??u!M?Dj^tBoZ%L8N{2sO<4^9JFA4y diff --git a/examples/zips/stack_monitoring.zip b/examples/zips/stack_monitoring.zip index d36253ed820a25ac0eede1930b88471443a00ce4..1cbbe5ee5c8f8baca4afdf604f6c774393550f90 100644 GIT binary patch delta 1528 zcmeyqjq&?7M&1B#W)?065Qypun8<6$_LV=q?koS~1NtJI2=PQ0gt!zlNacwLkVwr} z{>^HP>zP18llK_vOrGE_#l^|M3>1f&0#-fQl_dqHd_9XZBUt%Y)?hS4Cug%|!<5}& z`^XAbc7ewqNtqzfqDc3&WwD7&3=HzZ3=9#I4{FO!&gBI=5agWgywworm#NzB?{m>B9 zVBiBe{PQ!H_NQ_Jt#E_G64(N92$OpibHOc>nC~Hx& zKv#BO$q}YZP5B}uoc$%VC-UQ@#iZXMYLp$-Sx~Jm@Y02W6*!pmPi(0|OH?1A_}VD0@{6U`8BPErS?g zqizKgt5FYy8LKl%Qxe?)Hk$A-nWHHJapz|3By?pKI#XZ>tlsWZ79>fylBv z-YLkk6TQ=sWhH$kAj|#_l%D+5#{yY}oo@!RisQa0?so7)arb3EKV-d5{&C295Bj?y z%W4GpBg=y9-W-5pH&0+DvW97a9;h0Ek!6d6P#pRvr~p~EH+T`U-hhxSWZByx(~xB+ zg`#+pI}F8>^TMK#^-6}9BkSE5?t?5V7XelbOB6FB5|Cx3BAbx)?v2bxmi3LAg3M)# K_62bRqtyVpHoxO5qG95^x(v*P*MN@Y@~yjj$>#_bq=fabiR)-< z1_8hp2mmOP$YL-O7eNBvTih^{kNZEveeO9)l`%_n4j~lK^qVqr+S`40nh6A0Kt*K7MSQAI;*EIWs(lSRf z(LyuCg<4Vc+zIH>Hb@uKX;FH+7&Nlpb~C2lA)F-pkd4e)c5_yxtJ6`|43Ax?5Rlk<4S3LsVeOX!NzhqF z#CK0nbObH{tKsIl_O#Z5(q2}1gsr7NBv--dGf^rPD^~f@B7OvYK-(|9#(Vb z(_$b47I>@hATPK%#hM(CWC_iDg2Gzd}MG(DG^SN29jHd1;#EIf3Y zx50iM4#qe2fnEJ)xOl3xT>76FbGR% z%89-y?Pus~^m4Q*v4CuC63Nwh_9@5vHv}+VKSCV7Am5DU$vC(J@>OYzc3FjTLV*2^ zt>8mC!ZOpGL%+6p<;)oBo?4Iw;XGcPw1vSWpD4*0#vQ0^33j=k_in7!R1WW;KY2^I z@xHpxa|`<#{4dLZLF@nqlzMA&@ML9DKQ>eC&Y2A5LxRNuWx;Tr+<;?TZ~fsdkMjt# zYBg^}5*pa@C96~QkXC1Ry25npCEr;+MHJ|%UanMMdgyY$T z++OfhKfyS(N@B-0uc|40RplXyoP(cL?F_2jI_@kwht?Xka~O3(g{|_id~sN+O%9L( zf)Yrg&LUy~QG0^u)$^~SqgA@K&_1vhrD`s4lk!lT2uyVUsHiw!y7WJC_Z-!M@7EM) zo=_2eTDBo48N2yDr?^tUL_|6q{K}(f{*LOFy$^zCZYavk zsKT&^agdk9S(ve%!U++nu(rdX+rrUh(t%En4L9b^YBE!TPuUYkdGV)Tr7c-@aPJGS zT3RwO&AON$K2_9ZiQzsYi7A0u*iMvsrnvSxwOJ5#dywbg+ZP~&G>G=;b_CHS-q+ni z=ZQlUx_V6RPCnjJbL7f~ayH|ci9;p#K$Dq-GA!e)l)6U%6GR9Xz;y0^hV8~a%x z#J4TaQ-a)z;anvoP9}>7cEnw?mC=d&ctZ_hOhB~MUB^0NJ}8=In@jDiuPQ*CTOKC{ z+)c(o)h`*j)CqIgWgCm1c-{{td%vqFQW?1e2o^LhD`sx8tcGjE_hfIfPg+44FG&zB z@x_l4la6l=dvt#qv#q(ZbzUIUd;%VoQ@>pzwf&Uq2iPd#aPZ=m?C0*uc#RKOI8%oDpNo$h$grp4a=fRW)6kWY;Q?Fz%?jm%P|pcZ?Wu z?f9)1C*L3?cDXh6zHnW<7ydZcWZ=iU_t+p*a-MEVdHtSZq{wcpoC?IyC8z3EPw#$h za&}gUPQ}dFqynMk%ApL?MNNGpDI$(gHuiXjHSXwCpiPVmGK?#PolQmcCa$+30`1WWOLs>8;3|u#bZ~>lQSp zOs91&{xxZ|13!Kq)s5fti+4&QeXB)e^9i#Rn@{>FcNY$l2yHI{y`SMQ1~v98zpsF^ z$OqsxI*Nzv!Q`TwokhPR?|#EHxPQw3$Ws%Tz=_%&R=G>;(;XQvsVE*^uh;l_P|a^e zbe>gC)paci&z@xNcf|(Cw17U}mU9kEp>J^y{H|@*+`gcrIFSpk?2ck>pOPIudv9}6 z`sY05^QS`TpAyW)`2W?R3z<@fye(rYkPC>S7-C6(RV)8s{P0%Jx`zg4K~M5S!9)23 zY56M``a{wC&O`N8jfvlO9B;a?Byq&>-L%Ds)jgqoKU*JpB@Yh{XMZCI)|rEbCe4IT z5mP>PA$ZcS3PN9G5l>q@Oph_^j!?)H_1sNN-`rg2*4c}kjg1|uOw)Yz<*OqHq3*&6 zfB6yE+#uZOjjWnJ_{V6}yn zWW_DgpLJwwoM*o-t2X!$NO0cr^1FbtV7ta-_=eNS&)AfrXvb&mq%sdOq}R0L_M@E& z-~HZ#xPq~Fe!M(q*RsGDEN``39py1tHYR&}9kRl|MlESt+Ec9~-5U65)=E4lQ-e$~ZxHpUTwYLNFswKvp*}RIeVm1YQSOUfSAemQ(eOR>SzP8M(H+(Ia zO(DPC%x0P&i|28_ozzvvY)IZJx>Opm{$V= zotVwnfh=0bAeO6Z45E=4DN_wbGi%F&S#E{k_D2DLt(gMA zl&LP7R2(8L$QYO@pZ*QBf90qzg(hX0wb!JS-UF1To}ft;)}{Yr^!|rGmf?@ZU$`fA zE3kEc>$BjR2THd7br?C8!+^ah9>j&1Mw5RX=g$-a0Gce}eQ9D@Ch!dwZFWE1tL@P$aqp~BRpnS{dll>ueol^_5>1E{(B8xoR; A5dZ)H delta 1405 zcmezVlJVIEM&1B#W)?065ctFFHIY|?O@TeVPJw;0g1g8>e>P^2V1y1rPzo%v+!`cO zqrkrL#a?ER$mA6)o=~C9-&ypTz+#&0FlC#w*rgz1?VRRNb(4>9K7?rHvV>`U&ZW-? z7L(*Lfr$n4SU|-3c;UvK=M7*M1X>&ES#tX59!3TR6&3~tt;q+)B__X46X)V&Up_-a;B;cOl-C4B8XUkh8aw(M?(-Iwm{1PCiYCr z6=I&A4&2^soyib&jQWN!br$;m5OrM!dLS{>h?{)dzzHD=j=9MWh7mB$^9=JLaVKC3 zb|6GEL|MM64@}uXQ)`H_{}y2XA}for^nfW_W$DZV4yq5X&In6kX=rko8_dATE8I-L z3h%pt;}h9DTX(QtP{bYdDPi9H%c}(9zd|1`m_-MDoD}CyR;B6 zl6MJBPIObAtX?RE9K)eOIuM;LVeT-~E{3Hua*6;`KL;rNPgYKX#mnUQq&;9~$|ajI z0rSJgWUWVDelT^)s@G2(?T}5gxiXYD9hM}u)%?m^q+Mb7Dj!`~J zu+GVcYJx;3UqJ-A8SMoqq4l}|Y9vHMT45+e1BBaMBF$tHF}X2Ic=GNN5s=Kq5(z#P Q1{DTneg+2JNKjb|02;HYW&i*H diff --git a/examples/zips/streaming.zip b/examples/zips/streaming.zip index 29dfbba18aea56609c9a31794e7c6e2bcf1d0cd8..e7c64035c987ce2c507e1d05466883c0212baf6e 100644 GIT binary patch delta 217 zcmX>ia72JNz?+$civa|px&kKhYO#IgPp|vRKhai-86*&83=*jM%D-`P03%3b@-s$5 zsL*Cvrn$^uvAwJoP_fCsS@(j4cC%S10(F*Fa5FHnykurzV5tY%5#Y_pB*!cQWO0D( bn=HcaNQ9~~c6%aJU1N7+`pQ39jzbLq^QAct delta 217 zcmX>ia72JNz?+$civa}wFndkp)nZd%Pp?y8pJ*$^3=)Vk1_{(Cuy33kzz7nV{EX2M zDzsUaX)ZHZY%i+?RBZBZ*1ce%-E0<$K%J!(+zgB?FPRw_Sn7dx1b8zt$uWxnSsWny bCX28;5}~S$-JS?l*Vx^d6xb)rai{?R_T4XA diff --git a/examples/zips/usage_proxy.zip b/examples/zips/usage_proxy.zip index e4ff959ec78c0b61642df84a8a29f3287c55a062..eea0ade28ff01fc61b57a8bb9ee9372f9c540872 100644 GIT binary patch delta 340 zcmZ1`xlEEbz?+$civa|px&kKh>acy~Pp|vRKha)_86*(nq6`s8FRkEaU}Sm8%)r1> z4^$1(Cjz87!1@k*gY?yW<=-sASiuO=Ik}(76ef0xDFh;>$l^qdag*CvJYjmTvNS^U zMzR^h#3r#Vhlts5SV6@m*KiyFTWim0#q^bb@;gp3PPn%w&*BV%2+Dxf@Nz{WbKAL` dF}1wr3P4s9!yS&yy~6E?%r)cj0C5|5)Bu7EXZ!#F delta 340 zcmZ1`xlEEbz?+$civa}wFndkp)nQX$Pp?y8pJ*?|3=)WOQHBVlmsW5yFtWU4W?*2c z2dW0?69Lj3V10+ZLHcSG*f)zXRxpBePVQ$ig^8VF3W10zvN#cA+~hVEPnh1TER7Jo zk!;2=u}N&pA!0ThR#36YH5>=P*4lGgF)6T5e#a@s3HR3IS)4%-K^d?bUam-FZabGV drk2-S0my1%xWkdTSGXOKxn?{bAZ`PX8USeLRFnV! diff --git a/examples/zips/vault_secret.zip b/examples/zips/vault_secret.zip index d433c99f591d3b3a4804b5e442842f3fef7808c2..01b06d383c725203dd5fd4aa16636a04a2fdc171 100644 GIT binary patch delta 148 zcmX@lf1aN=z?+$civa|px&kKh>au<1Pp|vRKhZ&o86*&E1`??G%D-`D2qQ>j@&`r} zsL*CDCN5^Mm^rI8RBUnu>wd716`M8FSN_TN>@r~PG&UDx?r%0HWNsY0Cy2X}T@3)S CQ7_*B delta 148 zcmX@lf1aN=z?+$civa}wFndkp)n!v)Pp?y8pXeaP3=)Vn0}0e9uy33h!Uz(X{DIK~ zDzsUPiHjL5X3lC26`Neax*sfL#b(W|{mtft%#CCB1aVigs{sJ! CTP7<2 diff --git a/examples/zips/vbs_inst.zip b/examples/zips/vbs_inst.zip index 56a3a174aa9291ca79685a793321f7a6c96d9f3d..3e7e6680d87205a1de0084574b7ae58b6211870e 100644 GIT binary patch delta 148 zcmeyv`-hh|z?+$civa|px&kKhYO;OhPp|vRKhZ{t86*&C1QMwE%D-`9AR|a*@>50w zsL*CtPaRr12#KkZaMMWcPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*r; z22@h>m4D;hFh*ve#>w9p&7eY?jhJ$nz+wwoY@uS4pRgPN3oU20W%|lL*_TZQ%w=VB TL+0kNxgc{dvU!8Ja_njVBsDWV delta 170 zcmX@YcZ82Oz?+$civa}wFndkp)mK(vPp<>w(h6<{MwXY%3=AywKuM4?5g^S0Ru*r; z22@g`z`k*A7$Y-KBHcMoc+OV6lZPwotLjPgo9sg_g70GAXc6_GOa+b6MHk TkhwW*F38-AY~CQQ9J?9-H4!O^ diff --git a/examples/zips/vn_monitoring.zip b/examples/zips/vn_monitoring.zip index aff4d28b71b5935ba73e28dc600cf593f33e68f7..024120fab0bc6648207bc8141e2305f6e776a6e4 100644 GIT binary patch delta 257 zcmew^^Ie8Fz?+$civa|px&kKh>al(0Pp|vRKhaT&86*&A0~ZjPe1MG&EV$PhBv|v6 ze={57ab}Rvw(h6<{MwXY%3=AywKuM4?5g^S0R+jI< z22@h>m4D;jL`G(y#>t9IZcw4kxlFs5!D3o$zEH8rwQR@0LT>E7OkepYH*&~;xm(!7 Tkh$6%A;{bX9MK@|Uk)_@^Q<%l delta 170 zcmZ21v{;BYz?+$civa}wFndkpwO3YPPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+jI< z22@g`z`k*BA|o?U<77o9H>l9&T&7*jU@L50mqQHz1eYpN diff --git a/examples/zips/web_app_acceleration.zip b/examples/zips/web_app_acceleration.zip index 2b463a0b4431def43f850a8e5b8d931896574448..a8e087cea4c5d00ab3945aa4c84b318472377c4f 100644 GIT binary patch delta 170 zcmX>mbWDghz?+$civa|px&kKhnks+gPp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+ehV z22@h>m4D;PXhvqB#>wnVHc+9>o=j#eV6i4PXQmbWDghz?+$civa}wFndkpHC0w%Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+ehV z22@g`z`k*1G$S)m<79Rw8>rA`PbM=KuvinDGgNHyX|}^)p^5CyObYCi*Kx>zxnJ3R Tkhw`5UdY_D9DyLN0;d`PEHEmd diff --git a/examples/zips/web_app_firewall.zip b/examples/zips/web_app_firewall.zip index a7c033ac2822f7df48bf7d470fed756e24c940b9..2938e0f8e6d9ae855281ac93d2f8ddb6d81a8d87 100644 GIT binary patch delta 170 zcmcaBc2|ryz?+$civa|px&kKh8Y+L~Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+ebP z22@h>m4D;nL^fui#>wpLR#2hM?(8v)V6kN!_E53OuQ`r^g|=|oGkxWsoWLam=8AB6 TA#>}wJdn9BxO_oeb8a;NCeAaV delta 170 zcmcaBc2|ryz?+$civa}wFndkpHB?q$Pp<>w(h6<{MwXY%3=AywKuM4?5g^S0R+ebP z22@g`z`k*DA{#SM<79SrE2z+BclH=Yu-GyVd#Kpt*Br;dLR&cPnH1P3CveGtxguO% T$lQ7^4`l8OE?*GWoLdb5H>xS^ diff --git a/examples/zips/web_application_acceleration_and_security.zip b/examples/zips/web_application_acceleration_and_security.zip index 48cecb2247e5ade309dd91255aae7a39bdb1ed5e..de799a08641743eeffc53703bcfbccb30c995989 100644 GIT binary patch delta 148 zcmca?blHeEz?+$civa|px&kKhda-@wPp|vRKQUH{86;2@3=*jM%D?e)79&VxvIA2X zRA}=YrYd2un50+)RBUp&*lDnkt9S&{SN_S05;9=!KJi3ku7gAhGWV!N8i=basRjUH C=rN7} delta 148 zcmca?blHeEz?+$civa}wFndkp^w(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@h>m49QqKO-|xw(h6<{MwXY%3=AywKuM4?5g^S0Ru-bm z22@g`z`n8FpOG1;aq>+@ZK%*@E+%~@u$T>t5man)3CljPkSVJXlLGr>c{Uj^w}aIh Tnfrv*5}9kq<^bY0u&Dt6aV94{ From 9e5682d2e90c069e8fed0d446fd8986d17aac5c4 Mon Sep 17 00:00:00 2001 From: Sriniakhil Gujulla Leel Date: Wed, 16 Oct 2024 22:53:05 +0530 Subject: [PATCH 31/31] Update CHANGELOG.md --- CHANGELOG.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5df18b25b70..b3ada88123d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,15 +9,6 @@ - Support for DNSSEC - Direct API support for OCI BSS - Support for Desktop as a Service: Desktop Session Lifecycle Management -- LBCP ppv2 support -- Desktop as a Service: Shape Flexibility -- Support for Operations Insights : Autonomous Database IAM based connections -- Support for Customer Facing Scalable agent upgrade | ExaCC and ExaCS -- 9/24- Support for ZPR v1 -- Support for PV Support for Launch w/Multiple Attachments Support for VMs -- Support for Stack Monitoring Maintenance Windows -- To Support for Depracate old apps admin user creation with password -- Support for Desktop as a Service: Private Access ### Bug Fix Fixed the timestamp issue to corrected form