Skip to content

Commit fae3421

Browse files
committed
[Feat] SWR: Add data sources swr_domain_v2 and swr_domains_v2
1 parent 24ba784 commit fae3421

File tree

2 files changed

+239
-0
lines changed

2 files changed

+239
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package swr
2+
3+
import (
4+
"context"
5+
"strings"
6+
"time"
7+
8+
"github.com/hashicorp/go-multierror"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/swr/v2/domains"
12+
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
13+
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr"
14+
)
15+
16+
func DataSourceSwrDomainV2() *schema.Resource {
17+
return &schema.Resource{
18+
ReadContext: dataSourceSwrDomainRead,
19+
20+
Timeouts: &schema.ResourceTimeout{
21+
Default: schema.DefaultTimeout(2 * time.Minute),
22+
},
23+
24+
Schema: map[string]*schema.Schema{
25+
"organization": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
},
29+
"repository": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
},
33+
"access_domain": {
34+
Type: schema.TypeString,
35+
Required: true,
36+
},
37+
"permission": {
38+
Type: schema.TypeString,
39+
Computed: true,
40+
},
41+
"deadline": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
"description": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
},
49+
"creator_id": {
50+
Type: schema.TypeString,
51+
Computed: true,
52+
},
53+
"creator_name": {
54+
Type: schema.TypeString,
55+
Computed: true,
56+
},
57+
"created": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
},
61+
"updated": {
62+
Type: schema.TypeString,
63+
Computed: true,
64+
},
65+
"status": {
66+
Type: schema.TypeBool,
67+
Computed: true,
68+
},
69+
},
70+
}
71+
}
72+
73+
func dataSourceSwrDomainRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
74+
config := meta.(*cfg.Config)
75+
client, err := config.SwrV2Client(config.GetRegion(d))
76+
if err != nil {
77+
return fmterr.Errorf(ClientError, err)
78+
}
79+
80+
opts := domains.GetOpts{
81+
Namespace: d.Get("organization").(string),
82+
Repository: repository(d.Get("repository").(string)),
83+
AccessDomain: d.Get("access_domain").(string),
84+
}
85+
domain, err := domains.Get(client, opts)
86+
if err != nil {
87+
return fmterr.Errorf("error reading domain: %w", err)
88+
}
89+
d.SetId(opts.AccessDomain)
90+
91+
mErr := multierror.Append(
92+
d.Set("access_domain", strings.ToUpper(domain.AccessDomain)),
93+
d.Set("repository", domain.Repository),
94+
d.Set("organization", domain.Namespace),
95+
d.Set("description", domain.Description),
96+
d.Set("status", domain.Status),
97+
d.Set("permission", domain.Permit),
98+
d.Set("deadline", domain.Deadline),
99+
d.Set("created", domain.Created),
100+
d.Set("updated", domain.Updated),
101+
d.Set("creator_id", domain.CreatorID),
102+
d.Set("creator_name", domain.CreatorName),
103+
)
104+
if err := mErr.ErrorOrNil(); err != nil {
105+
return fmterr.Errorf("error setting resource fields: %w", err)
106+
}
107+
108+
return nil
109+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package swr
2+
3+
import (
4+
"context"
5+
"strings"
6+
"time"
7+
8+
"github.com/hashicorp/go-multierror"
9+
"github.com/hashicorp/go-uuid"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/swr/v2/domains"
13+
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
14+
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr"
15+
)
16+
17+
func DataSourceSwrDomainsV2() *schema.Resource {
18+
return &schema.Resource{
19+
ReadContext: dataSourceSwrDomainRead,
20+
21+
Timeouts: &schema.ResourceTimeout{
22+
Default: schema.DefaultTimeout(2 * time.Minute),
23+
},
24+
25+
Schema: map[string]*schema.Schema{
26+
"organization": {
27+
Type: schema.TypeString,
28+
Required: true,
29+
},
30+
"repository": {
31+
Type: schema.TypeString,
32+
Required: true,
33+
},
34+
"access_domains": {
35+
Type: schema.TypeList,
36+
Computed: true,
37+
Elem: &schema.Resource{
38+
Schema: map[string]*schema.Schema{
39+
"access_domain": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
},
43+
"permission": {
44+
Type: schema.TypeString,
45+
Computed: true,
46+
},
47+
"deadline": {
48+
Type: schema.TypeString,
49+
Computed: true,
50+
},
51+
"description": {
52+
Type: schema.TypeString,
53+
Computed: true,
54+
},
55+
"creator_id": {
56+
Type: schema.TypeString,
57+
Computed: true,
58+
},
59+
"creator_name": {
60+
Type: schema.TypeString,
61+
Computed: true,
62+
},
63+
"created": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
},
67+
"updated": {
68+
Type: schema.TypeString,
69+
Computed: true,
70+
},
71+
"status": {
72+
Type: schema.TypeBool,
73+
Computed: true,
74+
},
75+
},
76+
},
77+
},
78+
},
79+
}
80+
}
81+
82+
func dataSourceSwrDomainsRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
83+
config := meta.(*cfg.Config)
84+
client, err := config.SwrV2Client(config.GetRegion(d))
85+
if err != nil {
86+
return fmterr.Errorf(ClientError, err)
87+
}
88+
89+
opts := domains.ListOpts{
90+
Namespace: d.Get("organization").(string),
91+
Repository: repository(d.Get("repository").(string)),
92+
}
93+
accessDomains, err := domains.List(client, opts)
94+
if err != nil {
95+
return fmterr.Errorf("error reading domain: %w", err)
96+
}
97+
id, err := uuid.GenerateUUID()
98+
if err != nil {
99+
return diag.Errorf("unable to generate ID: %s", err)
100+
}
101+
d.SetId(id)
102+
103+
mErr := multierror.Append(
104+
d.Set("access_domains", setAccessDomains(accessDomains)),
105+
)
106+
if err := mErr.ErrorOrNil(); err != nil {
107+
return fmterr.Errorf("error setting resource fields: %w", err)
108+
}
109+
110+
return nil
111+
}
112+
113+
func setAccessDomains(domainsInResp []domains.AccessDomain) []map[string]interface{} {
114+
var accessDomains []map[string]interface{}
115+
for _, accessDomainInResp := range domainsInResp {
116+
accessDomain := map[string]interface{}{
117+
"access_domain": strings.ToUpper(accessDomainInResp.AccessDomain),
118+
"description": accessDomainInResp.Description,
119+
"permission": accessDomainInResp.Permit,
120+
"deadline": accessDomainInResp.Deadline,
121+
"created": accessDomainInResp.Created,
122+
"updated": accessDomainInResp.Updated,
123+
"creator_id": accessDomainInResp.CreatorID,
124+
"creator_name": accessDomainInResp.CreatorName,
125+
"status": accessDomainInResp.Status,
126+
}
127+
accessDomains = append(accessDomains, accessDomain)
128+
}
129+
return accessDomains
130+
}

0 commit comments

Comments
 (0)