Skip to content

Commit 3fdc576

Browse files
Terraform Team Automationsagarp337
authored andcommitted
Added - Support for BDS - Resource Principal Support in BDS
1 parent fe48d9a commit 3fdc576

11 files changed

+1220
-0
lines changed
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"strconv"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
11+
"github.com/oracle/terraform-provider-oci/internal/resourcediscovery"
12+
13+
//"strconv"
14+
"testing"
15+
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
17+
"github.com/oracle/terraform-provider-oci/httpreplay"
18+
"github.com/oracle/terraform-provider-oci/internal/acctest"
19+
20+
//"github.com/oracle/terraform-provider-oci/internal/resourcediscovery"
21+
22+
"github.com/oracle/terraform-provider-oci/internal/utils"
23+
)
24+
25+
var (
26+
BdsBdsInstanceResourcePrincipalConfigurationRequiredOnlyResource = BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
27+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Required, acctest.Create, BdsBdsInstanceResourcePrincipalConfigurationRepresentation)
28+
29+
BdsBdsInstanceResourcePrincipalConfigurationResourceConfig = BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
30+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Optional, acctest.Update, BdsBdsInstanceResourcePrincipalConfigurationRepresentation)
31+
32+
BdsBdsInstanceResourcePrincipalConfigurationSingularDataSourceRepresentation = map[string]interface{}{
33+
"bds_instance_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_bds_bds_instance.test_bds_instance.id}`},
34+
"resource_principal_configuration_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_bds_bds_instance_resource_principal_configuration.test_bds_instance_resource_principal_configuration.id}`},
35+
}
36+
37+
BdsBdsInstanceResourcePrincipalConfigurationDataSourceRepresentation = map[string]interface{}{
38+
"bds_instance_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_bds_bds_instance.test_bds_instance.id}`},
39+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
40+
"state": acctest.Representation{RepType: acctest.Optional, Create: `ACTIVE`},
41+
"filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: BdsBdsInstanceResourcePrincipalConfigurationDataSourceFilterRepresentation}}
42+
BdsBdsInstanceResourcePrincipalConfigurationDataSourceFilterRepresentation = map[string]interface{}{
43+
"name": acctest.Representation{RepType: acctest.Required, Create: `id`},
44+
"values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_bds_bds_instance_resource_principal_configuration.test_bds_instance_resource_principal_configuration.id}`}},
45+
}
46+
47+
BdsBdsInstanceResourcePrincipalConfigurationRepresentation = map[string]interface{}{
48+
"bds_instance_id": acctest.Representation{RepType: acctest.Required, Create: `${oci_bds_bds_instance.test_bds_instance.id}`},
49+
"cluster_admin_password": acctest.Representation{RepType: acctest.Required, Create: `clusterAdminPassword`},
50+
"display_name": acctest.Representation{RepType: acctest.Required, Create: `displayName`, Update: `displayName2`},
51+
"session_token_life_span_duration_in_hours": acctest.Representation{RepType: acctest.Required, Create: `1`, Update: `11`},
52+
"force_refresh_resource_principal_trigger": acctest.Representation{RepType: acctest.Required, Create: `0`, Update: `1`},
53+
}
54+
55+
//bdsinstanceId = utils.GetEnvSettingWithBlankDefault("bdsinstance_ocid")
56+
//bdsinstanceIdVariableStr = fmt.Sprintf("variable \"bdsinstance_id\" { default = \"%s\" }\n", bdsinstanceId)
57+
58+
BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies = acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance", "test_bds_instance", acctest.Required, acctest.Create, bdsInstanceOdhRepresentation) +
59+
acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) +
60+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation)
61+
)
62+
63+
// issue-routing-tag: bds/default
64+
func TestBdsBdsInstanceResourcePrincipalConfigurationResource_basic(t *testing.T) {
65+
httpreplay.SetScenario("TestBdsBdsInstanceResourcePrincipalConfigurationResource_basic")
66+
defer httpreplay.SaveScenario()
67+
68+
config := acctest.ProviderTestConfig()
69+
70+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
71+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
72+
73+
subnetId := utils.GetEnvSettingWithBlankDefault("subnet_ocid")
74+
subnetIdVariableStr := fmt.Sprintf("variable \"subnet_id\" { default = \"%s\" }\n", subnetId)
75+
76+
//bdsinstanceId := utils.GetEnvSettingWithBlankDefault("bdsinstance_ocid")
77+
//bdsinstanceIdVariableStr := fmt.Sprintf("variable \"bdsinstance_id\" { default = \"%s\" }\n", bdsinstanceId)
78+
79+
resourceName := "oci_bds_bds_instance_resource_principal_configuration.test_bds_instance_resource_principal_configuration"
80+
datasourceName := "data.oci_bds_bds_instance_resource_principal_configurations.test_bds_instance_resource_principal_configurations"
81+
singularDatasourceName := "data.oci_bds_bds_instance_resource_principal_configuration.test_bds_instance_resource_principal_configuration"
82+
83+
var resId, resId2 string
84+
// 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.
85+
acctest.SaveConfigContent(config+compartmentIdVariableStr+subnetIdVariableStr+BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies+
86+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Optional, acctest.Create, BdsBdsInstanceResourcePrincipalConfigurationRepresentation), "bds", "bdsInstanceResourcePrincipalConfiguration", t)
87+
88+
acctest.ResourceTest(t, nil, []resource.TestStep{
89+
// verify Create
90+
{
91+
Config: config + compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
92+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Required, acctest.Create, BdsBdsInstanceResourcePrincipalConfigurationRepresentation),
93+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
94+
resource.TestCheckResourceAttrSet(resourceName, "bds_instance_id"),
95+
resource.TestCheckResourceAttr(resourceName, "cluster_admin_password", "clusterAdminPassword"),
96+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
97+
98+
func(s *terraform.State) (err error) {
99+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
100+
return err
101+
},
102+
),
103+
},
104+
105+
// delete before next Create
106+
{
107+
Config: config + compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies,
108+
},
109+
// verify Create with optionals
110+
{
111+
Config: config + compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
112+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Optional, acctest.Create, BdsBdsInstanceResourcePrincipalConfigurationRepresentation),
113+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
114+
resource.TestCheckResourceAttrSet(resourceName, "bds_instance_id"),
115+
resource.TestCheckResourceAttr(resourceName, "cluster_admin_password", "clusterAdminPassword"),
116+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
117+
resource.TestCheckResourceAttrSet(resourceName, "id"),
118+
resource.TestCheckResourceAttr(resourceName, "session_token_life_span_duration_in_hours", "1"),
119+
resource.TestCheckResourceAttrSet(resourceName, "state"),
120+
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
121+
resource.TestCheckResourceAttrSet(resourceName, "time_updated"),
122+
123+
func(s *terraform.State) (err error) {
124+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
125+
if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment {
126+
if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil {
127+
return errExport
128+
}
129+
}
130+
return err
131+
},
132+
),
133+
},
134+
135+
// verify updates to updatable parameters
136+
{
137+
Config: config + compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
138+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Optional, acctest.Update, BdsBdsInstanceResourcePrincipalConfigurationRepresentation),
139+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
140+
resource.TestCheckResourceAttrSet(resourceName, "bds_instance_id"),
141+
resource.TestCheckResourceAttr(resourceName, "cluster_admin_password", "clusterAdminPassword"),
142+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
143+
resource.TestCheckResourceAttrSet(resourceName, "id"),
144+
resource.TestCheckResourceAttr(resourceName, "session_token_life_span_duration_in_hours", "11"),
145+
resource.TestCheckResourceAttrSet(resourceName, "state"),
146+
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
147+
resource.TestCheckResourceAttrSet(resourceName, "time_updated"),
148+
149+
func(s *terraform.State) (err error) {
150+
resId2, err = acctest.FromInstanceState(s, resourceName, "id")
151+
if resId != resId2 {
152+
return fmt.Errorf("Resource recreated when it was supposed to be updated.")
153+
}
154+
return err
155+
},
156+
),
157+
},
158+
// verify datasource
159+
{
160+
Config: config +
161+
acctest.GenerateDataSourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configurations", "test_bds_instance_resource_principal_configurations", acctest.Optional, acctest.Update, BdsBdsInstanceResourcePrincipalConfigurationDataSourceRepresentation) +
162+
compartmentIdVariableStr + subnetIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceDependencies +
163+
acctest.GenerateResourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Optional, acctest.Update, BdsBdsInstanceResourcePrincipalConfigurationRepresentation),
164+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
165+
resource.TestCheckResourceAttrSet(datasourceName, "bds_instance_id"),
166+
resource.TestCheckResourceAttr(datasourceName, "display_name", "displayName2"),
167+
resource.TestCheckResourceAttr(datasourceName, "state", "ACTIVE"),
168+
169+
resource.TestCheckResourceAttr(datasourceName, "resource_principal_configurations.#", "1"),
170+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.bds_instance_id"),
171+
resource.TestCheckResourceAttr(datasourceName, "resource_principal_configurations.0.display_name", "displayName2"),
172+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.id"),
173+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.state"),
174+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.time_created"),
175+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.time_token_expiry"),
176+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.time_token_refreshed"),
177+
resource.TestCheckResourceAttrSet(datasourceName, "resource_principal_configurations.0.time_updated"),
178+
),
179+
},
180+
// verify singular datasource
181+
{
182+
Config: config +
183+
acctest.GenerateDataSourceFromRepresentationMap("oci_bds_bds_instance_resource_principal_configuration", "test_bds_instance_resource_principal_configuration", acctest.Required, acctest.Create, BdsBdsInstanceResourcePrincipalConfigurationSingularDataSourceRepresentation) +
184+
compartmentIdVariableStr + BdsBdsInstanceResourcePrincipalConfigurationResourceConfig,
185+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
186+
resource.TestCheckResourceAttrSet(singularDatasourceName, "bds_instance_id"),
187+
resource.TestCheckResourceAttrSet(singularDatasourceName, "resource_principal_configuration_id"),
188+
189+
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
190+
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
191+
resource.TestCheckResourceAttr(singularDatasourceName, "session_token_life_span_duration_in_hours", "11"),
192+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
193+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
194+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_token_expiry"),
195+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_token_refreshed"),
196+
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_updated"),
197+
),
198+
},
199+
// verify resource import
200+
{
201+
Config: config + BdsBdsInstanceResourcePrincipalConfigurationRequiredOnlyResource,
202+
ImportState: true,
203+
ImportStateVerify: true,
204+
ImportStateIdFunc: getBdsResourcePrincipalConfigurationCompositeId(resourceName),
205+
ImportStateVerifyIgnore: []string{
206+
"cluster_admin_password",
207+
"force_refresh_resource_principal_trigger",
208+
},
209+
ResourceName: resourceName,
210+
},
211+
})
212+
}
213+
214+
func getBdsResourcePrincipalConfigurationCompositeId(resourceName string) resource.ImportStateIdFunc {
215+
216+
return func(s *terraform.State) (string, error) {
217+
rs, ok := s.RootModule().Resources[resourceName]
218+
if !ok {
219+
return "", fmt.Errorf("not found: %s", resourceName)
220+
}
221+
222+
return fmt.Sprintf("bdsInstances/%s/resourcePrincipalConfigurations/%s", rs.Primary.Attributes["bds_instance_id"], rs.Primary.Attributes["id"]), nil
223+
}
224+
225+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package bds
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_bds "github.com/oracle/oci-go-sdk/v65/bds"
11+
12+
"github.com/oracle/terraform-provider-oci/internal/client"
13+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func BdsBdsInstanceResourcePrincipalConfigurationDataSource() *schema.Resource {
17+
fieldMap := make(map[string]*schema.Schema)
18+
fieldMap["bds_instance_id"] = &schema.Schema{
19+
Type: schema.TypeString,
20+
Required: true,
21+
}
22+
fieldMap["resource_principal_configuration_id"] = &schema.Schema{
23+
Type: schema.TypeString,
24+
Required: true,
25+
}
26+
return tfresource.GetSingularDataSourceItemSchema(BdsBdsInstanceResourcePrincipalConfigurationResource(), fieldMap, readSingularBdsBdsInstanceResourcePrincipalConfiguration)
27+
}
28+
29+
func readSingularBdsBdsInstanceResourcePrincipalConfiguration(d *schema.ResourceData, m interface{}) error {
30+
sync := &BdsBdsInstanceResourcePrincipalConfigurationDataSourceCrud{}
31+
sync.D = d
32+
sync.Client = m.(*client.OracleClients).BdsClient()
33+
34+
return tfresource.ReadResource(sync)
35+
}
36+
37+
type BdsBdsInstanceResourcePrincipalConfigurationDataSourceCrud struct {
38+
D *schema.ResourceData
39+
Client *oci_bds.BdsClient
40+
Res *oci_bds.GetResourcePrincipalConfigurationResponse
41+
}
42+
43+
func (s *BdsBdsInstanceResourcePrincipalConfigurationDataSourceCrud) VoidState() {
44+
s.D.SetId("")
45+
}
46+
47+
func (s *BdsBdsInstanceResourcePrincipalConfigurationDataSourceCrud) Get() error {
48+
request := oci_bds.GetResourcePrincipalConfigurationRequest{}
49+
50+
if bdsInstanceId, ok := s.D.GetOkExists("bds_instance_id"); ok {
51+
tmp := bdsInstanceId.(string)
52+
request.BdsInstanceId = &tmp
53+
}
54+
55+
if resourcePrincipalConfigurationId, ok := s.D.GetOkExists("resource_principal_configuration_id"); ok {
56+
tmp := resourcePrincipalConfigurationId.(string)
57+
request.ResourcePrincipalConfigurationId = &tmp
58+
}
59+
60+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "bds")
61+
62+
response, err := s.Client.GetResourcePrincipalConfiguration(context.Background(), request)
63+
if err != nil {
64+
return err
65+
}
66+
67+
s.Res = &response
68+
return nil
69+
}
70+
71+
func (s *BdsBdsInstanceResourcePrincipalConfigurationDataSourceCrud) SetData() error {
72+
if s.Res == nil {
73+
return nil
74+
}
75+
76+
s.D.SetId(*s.Res.Id)
77+
78+
if s.Res.DisplayName != nil {
79+
s.D.Set("display_name", *s.Res.DisplayName)
80+
}
81+
82+
if s.Res.SessionTokenLifeSpanDurationInHours != nil {
83+
s.D.Set("session_token_life_span_duration_in_hours", *s.Res.SessionTokenLifeSpanDurationInHours)
84+
}
85+
86+
s.D.Set("state", s.Res.LifecycleState)
87+
88+
if s.Res.TimeCreated != nil {
89+
s.D.Set("time_created", s.Res.TimeCreated.String())
90+
}
91+
92+
if s.Res.TimeTokenExpiry != nil {
93+
s.D.Set("time_token_expiry", s.Res.TimeTokenExpiry.String())
94+
}
95+
96+
if s.Res.TimeTokenRefreshed != nil {
97+
s.D.Set("time_token_refreshed", s.Res.TimeTokenRefreshed.String())
98+
}
99+
100+
if s.Res.TimeUpdated != nil {
101+
s.D.Set("time_updated", s.Res.TimeUpdated.String())
102+
}
103+
104+
return nil
105+
}

0 commit comments

Comments
 (0)