Skip to content

Commit bfd06ed

Browse files
sleungcysleungcy-sap
andauthored
service-keys-v3 (#541)
Co-authored-by: sleungcy-sap <[email protected]>
1 parent 267ce3d commit bfd06ed

File tree

2 files changed

+90
-6
lines changed

2 files changed

+90
-6
lines changed

cloudfoundry/data_source_cf_service_key.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package cloudfoundry
22

33
import (
4-
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
5-
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
64
"context"
5+
6+
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
7+
"code.cloudfoundry.org/cli/resources"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
89
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
910
"github.com/terraform-providers/terraform-provider-cloudfoundry/cloudfoundry/managers"
@@ -36,22 +37,35 @@ func dataSourceServiceKey() *schema.Resource {
3637

3738
func dataSourceServiceKeyRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
3839
session := meta.(*managers.Session)
40+
var serviceKeys []resources.ServiceCredentialBinding
41+
var err error
3942

40-
serviceKeys, _, err := session.ClientV2.GetServiceKeys(
41-
ccv2.FilterByName(d.Get("name").(string)),
42-
ccv2.FilterEqual(constant.ServiceInstanceGUIDFilter, d.Get("service_instance").(string)),
43+
serviceKeys, _, err = session.ClientV3.GetServiceCredentialBindings(
44+
ccv3.Query{
45+
Key: ccv3.QueryKey("service_instance_guids"),
46+
Values: []string{d.Get("service_instance").(string)},
47+
}, ccv3.Query{
48+
Key: ccv3.NameFilter,
49+
Values: []string{d.Get("name").(string)},
50+
},
4351
)
52+
4453
if err != nil {
4554
return diag.FromErr(err)
4655
}
4756
if len(serviceKeys) == 0 {
4857
return diag.FromErr(NotFound)
4958
}
5059
serviceKey := serviceKeys[0]
60+
serviceKeyDetails, _, err := session.ClientV3.GetServiceCredentialBindingDetails(serviceKey.GUID)
61+
if err != nil {
62+
return diag.FromErr(err)
63+
}
64+
5165
d.SetId(serviceKey.GUID)
5266
d.Set("name", serviceKey.Name)
5367
d.Set("service_instance", serviceKey.ServiceInstanceGUID)
54-
d.Set("credentials", normalizeMap(serviceKey.Credentials, make(map[string]interface{}), "", "_"))
68+
d.Set("credentials", normalizeMap(serviceKeyDetails.Credentials, make(map[string]interface{}), "", "_"))
5569

5670
return nil
5771
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package cloudfoundry
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
9+
)
10+
11+
const serviceKeyDataResource = `
12+
13+
data "cf_org" "org" {
14+
name = "%s"
15+
}
16+
data "cf_space" "space" {
17+
name = "%s"
18+
org = "${data.cf_org.org.id}"
19+
}
20+
21+
data "cf_service" "s1" {
22+
name = "%s"
23+
}
24+
resource "cf_service_instance" "db" {
25+
name = "db-update"
26+
space = "${data.cf_space.space.id}"
27+
service_plan = "${data.cf_service.s1.service_plans.%s}"
28+
}
29+
resource "cf_service_key" "test" {
30+
name = "test-key-name"
31+
service_instance = "${cf_service_instance.db.id}"
32+
}
33+
data "cf_service_key" "test" {
34+
name = "${cf_service_key.test.name}"
35+
service_instance = "${cf_service_instance.db.id}"
36+
depends_on = [ cf_service_key.test ]
37+
}
38+
`
39+
40+
func TestAccDataSourceServiceKey_normal(t *testing.T) {
41+
42+
serviceName1, _, servicePlan := getTestServiceBrokers(t)
43+
_, orgName := defaultTestOrg(t)
44+
_, spaceName := defaultTestSpace(t)
45+
46+
ref := "data.cf_service_key.test"
47+
48+
resource.ParallelTest(t,
49+
resource.TestCase{
50+
PreCheck: func() { testAccPreCheck(t) },
51+
ProviderFactories: testAccProvidersFactories,
52+
Steps: []resource.TestStep{
53+
54+
resource.TestStep{
55+
Config: fmt.Sprintf(serviceKeyDataResource, orgName, spaceName,
56+
serviceName1, servicePlan),
57+
Check: func(s *terraform.State) error {
58+
rs, ok := s.RootModule().Resources[ref]
59+
if !ok {
60+
return fmt.Errorf("service key '%s' not found in terraform state", ref)
61+
}
62+
if rs.Primary.Attributes["name"] != "test-key-name" {
63+
return fmt.Errorf("service key name is incorrect!")
64+
}
65+
return nil
66+
},
67+
},
68+
},
69+
})
70+
}

0 commit comments

Comments
 (0)