Skip to content

Commit baf4600

Browse files
johnrengelmanstack72
authored andcommitted
[Rancher] - allow for importing resources using environment ID to target (hashicorp#11688)
1 parent d9a08bf commit baf4600

18 files changed

Lines changed: 256 additions & 61 deletions

builtin/providers/rancher/config.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,30 @@ import (
77
"github.com/raphink/go-rancher/catalog"
88
)
99

10+
// Config is the configuration parameters for a Rancher API
1011
type Config struct {
11-
*rancherClient.RancherClient
1212
APIURL string
1313
AccessKey string
1414
SecretKey string
1515
}
1616

17-
// Create creates a generic Rancher client
18-
func (c *Config) CreateClient() error {
17+
// GlobalClient creates a Rancher client scoped to the global API
18+
func (c *Config) GlobalClient() (*rancherClient.RancherClient, error) {
1919
client, err := rancherClient.NewRancherClient(&rancherClient.ClientOpts{
2020
Url: c.APIURL,
2121
AccessKey: c.AccessKey,
2222
SecretKey: c.SecretKey,
2323
})
2424
if err != nil {
25-
return err
25+
return nil, err
2626
}
2727

2828
log.Printf("[INFO] Rancher Client configured for url: %s", c.APIURL)
2929

30-
c.RancherClient = client
31-
32-
return nil
30+
return client, nil
3331
}
3432

33+
// EnvironmentClient creates a Rancher client scoped to an Environment's API
3534
func (c *Config) EnvironmentClient(env string) (*rancherClient.RancherClient, error) {
3635

3736
url := c.APIURL + "/projects/" + env + "/schemas"
@@ -49,15 +48,21 @@ func (c *Config) EnvironmentClient(env string) (*rancherClient.RancherClient, er
4948
return client, nil
5049
}
5150

51+
// RegistryClient creates a Rancher client scoped to a Registry's API
5252
func (c *Config) RegistryClient(id string) (*rancherClient.RancherClient, error) {
53-
reg, err := c.Registry.ById(id)
53+
client, err := c.GlobalClient()
54+
if err != nil {
55+
return nil, err
56+
}
57+
reg, err := client.Registry.ById(id)
5458
if err != nil {
5559
return nil, err
5660
}
5761

5862
return c.EnvironmentClient(reg.AccountId)
5963
}
6064

65+
// CatalogClient creates a Rancher client scoped to a Catalog's API
6166
func (c *Config) CatalogClient() (*catalog.RancherClient, error) {
6267

6368
url := c.APIURL + "-catalog/schemas"

builtin/providers/rancher/provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
6060
SecretKey: d.Get("secret_key").(string),
6161
}
6262

63-
err := config.CreateClient()
63+
_, err := config.GlobalClient()
6464

6565
return config, err
6666
}

builtin/providers/rancher/resource_rancher_environment.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ func resourceRancherEnvironment() *schema.Resource {
4747

4848
func resourceRancherEnvironmentCreate(d *schema.ResourceData, meta interface{}) error {
4949
log.Printf("[INFO] Creating Environment: %s", d.Id())
50-
client := meta.(*Config)
50+
client, err := meta.(*Config).GlobalClient()
51+
if err != nil {
52+
return err
53+
}
5154

5255
name := d.Get("name").(string)
5356
description := d.Get("description").(string)
@@ -87,7 +90,10 @@ func resourceRancherEnvironmentCreate(d *schema.ResourceData, meta interface{})
8790

8891
func resourceRancherEnvironmentRead(d *schema.ResourceData, meta interface{}) error {
8992
log.Printf("[INFO] Refreshing Environment: %s", d.Id())
90-
client := meta.(*Config)
93+
client, err := meta.(*Config).GlobalClient()
94+
if err != nil {
95+
return err
96+
}
9197

9298
env, err := client.Project.ById(d.Id())
9399
if err != nil {
@@ -110,13 +116,16 @@ func resourceRancherEnvironmentRead(d *schema.ResourceData, meta interface{}) er
110116

111117
d.Set("description", env.Description)
112118
d.Set("name", env.Name)
113-
d.Set("orchestration", GetActiveOrchestration(env))
119+
d.Set("orchestration", getActiveOrchestration(env))
114120

115121
return nil
116122
}
117123

118124
func resourceRancherEnvironmentUpdate(d *schema.ResourceData, meta interface{}) error {
119-
client := meta.(*Config)
125+
client, err := meta.(*Config).GlobalClient()
126+
if err != nil {
127+
return err
128+
}
120129

121130
name := d.Get("name").(string)
122131
description := d.Get("description").(string)
@@ -145,7 +154,10 @@ func resourceRancherEnvironmentUpdate(d *schema.ResourceData, meta interface{})
145154
func resourceRancherEnvironmentDelete(d *schema.ResourceData, meta interface{}) error {
146155
log.Printf("[INFO] Deleting Environment: %s", d.Id())
147156
id := d.Id()
148-
client := meta.(*Config)
157+
client, err := meta.(*Config).GlobalClient()
158+
if err != nil {
159+
return err
160+
}
149161

150162
env, err := client.Project.ById(id)
151163
if err != nil {
@@ -193,7 +205,7 @@ func setOrchestrationFields(orchestration string, data map[string]interface{}) {
193205

194206
// EnvironmentStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch
195207
// a Rancher Environment.
196-
func EnvironmentStateRefreshFunc(client *Config, environmentID string) resource.StateRefreshFunc {
208+
func EnvironmentStateRefreshFunc(client *rancherClient.RancherClient, environmentID string) resource.StateRefreshFunc {
197209
return func() (interface{}, string, error) {
198210
env, err := client.Project.ById(environmentID)
199211

builtin/providers/rancher/resource_rancher_environment_test.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ func TestAccRancherEnvironment_disappears(t *testing.T) {
6262

6363
func testAccRancherEnvironmentDisappears(env *rancherClient.Project) resource.TestCheckFunc {
6464
return func(s *terraform.State) error {
65-
client := testAccProvider.Meta().(*Config)
65+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
66+
if err != nil {
67+
return err
68+
}
6669
if err := client.Project.Delete(env); err != nil {
6770
return fmt.Errorf("Error deleting Environment: %s", err)
6871
}
@@ -96,7 +99,10 @@ func testAccCheckRancherEnvironmentExists(n string, env *rancherClient.Project)
9699
return fmt.Errorf("No App Name is set")
97100
}
98101

99-
client := testAccProvider.Meta().(*Config)
102+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
103+
if err != nil {
104+
return err
105+
}
100106

101107
foundEnv, err := client.Project.ById(rs.Primary.ID)
102108
if err != nil {
@@ -114,7 +120,10 @@ func testAccCheckRancherEnvironmentExists(n string, env *rancherClient.Project)
114120
}
115121

116122
func testAccCheckRancherEnvironmentDestroy(s *terraform.State) error {
117-
client := testAccProvider.Meta().(*Config)
123+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
124+
if err != nil {
125+
return err
126+
}
118127

119128
for _, rs := range s.RootModule().Resources {
120129
if rs.Type != "rancher_environment" {

builtin/providers/rancher/resource_rancher_registration_token.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,21 @@ func resourceRancherRegistrationTokenDelete(d *schema.ResourceData, meta interfa
205205
}
206206

207207
func resourceRancherRegistrationTokenImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
208-
client := meta.(*Config)
209-
regT, err := client.RegistrationToken.ById(d.Id())
210-
if err != nil {
211-
return []*schema.ResourceData{}, err
208+
envID, resourceID := splitID(d.Id())
209+
d.SetId(resourceID)
210+
if envID != "" {
211+
d.Set("environment_id", envID)
212+
} else {
213+
client, err := meta.(*Config).GlobalClient()
214+
if err != nil {
215+
return []*schema.ResourceData{}, err
216+
}
217+
token, err := client.RegistrationToken.ById(d.Id())
218+
if err != nil {
219+
return []*schema.ResourceData{}, err
220+
}
221+
d.Set("environment_id", token.AccountId)
212222
}
213-
d.Set("environment_id", regT.AccountId)
214223
return []*schema.ResourceData{d}, nil
215224
}
216225

builtin/providers/rancher/resource_rancher_registration_token_test.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,10 @@ func testAccCheckRancherRegistrationTokenExists(n string, regT *rancherClient.Re
136136
return fmt.Errorf("No App Name is set")
137137
}
138138

139-
client, _ := testAccProvider.Meta().(*Config).EnvironmentClient(rs.Primary.Attributes["environment_id"])
139+
client, err := testAccProvider.Meta().(*Config).EnvironmentClient(rs.Primary.Attributes["environment_id"])
140+
if err != nil {
141+
return err
142+
}
140143

141144
foundRegT, err := client.RegistrationToken.ById(rs.Primary.ID)
142145
if err != nil {
@@ -154,12 +157,16 @@ func testAccCheckRancherRegistrationTokenExists(n string, regT *rancherClient.Re
154157
}
155158

156159
func testAccCheckRancherRegistrationTokenDestroy(s *terraform.State) error {
157-
client := testAccProvider.Meta().(*Config)
158160

159161
for _, rs := range s.RootModule().Resources {
160162
if rs.Type != "rancher_registration_token" {
161163
continue
162164
}
165+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
166+
if err != nil {
167+
return err
168+
}
169+
163170
regT, err := client.RegistrationToken.ById(rs.Primary.ID)
164171

165172
if err == nil {

builtin/providers/rancher/resource_rancher_registry.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,21 @@ func resourceRancherRegistryDelete(d *schema.ResourceData, meta interface{}) err
211211
}
212212

213213
func resourceRancherRegistryImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
214-
client := meta.(*Config)
215-
reg, err := client.Registry.ById(d.Id())
216-
if err != nil {
217-
return []*schema.ResourceData{}, err
214+
envID, resourceID := splitID(d.Id())
215+
d.SetId(resourceID)
216+
if envID != "" {
217+
d.Set("environment_id", envID)
218+
} else {
219+
client, err := meta.(*Config).GlobalClient()
220+
if err != nil {
221+
return []*schema.ResourceData{}, err
222+
}
223+
registry, err := client.Registry.ById(d.Id())
224+
if err != nil {
225+
return []*schema.ResourceData{}, err
226+
}
227+
d.Set("environment_id", registry.AccountId)
218228
}
219-
d.Set("environment_id", reg.AccountId)
220229
return []*schema.ResourceData{d}, nil
221230
}
222231

builtin/providers/rancher/resource_rancher_registry_credential.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,12 +233,21 @@ func resourceRancherRegistryCredentialDelete(d *schema.ResourceData, meta interf
233233
}
234234

235235
func resourceRancherRegistryCredentialImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
236-
client := meta.(*Config)
237-
regC, err := client.RegistryCredential.ById(d.Id())
238-
if err != nil {
239-
return []*schema.ResourceData{}, err
236+
regID, resourceID := splitID(d.Id())
237+
d.SetId(resourceID)
238+
if regID != "" {
239+
d.Set("registry_id", regID)
240+
} else {
241+
client, err := meta.(*Config).GlobalClient()
242+
if err != nil {
243+
return []*schema.ResourceData{}, err
244+
}
245+
cred, err := client.RegistryCredential.ById(d.Id())
246+
if err != nil {
247+
return []*schema.ResourceData{}, err
248+
}
249+
d.Set("registry_id", cred.RegistryId)
240250
}
241-
d.Set("environment_id", regC.AccountId)
242251
return []*schema.ResourceData{d}, nil
243252
}
244253

builtin/providers/rancher/resource_rancher_registry_credential_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ func testAccCheckRancherRegistryCredentialExists(n string, reg *rancherClient.Re
129129
return fmt.Errorf("No App Name is set")
130130
}
131131

132-
client, _ := testAccProvider.Meta().(*Config).RegistryClient(rs.Primary.Attributes["registry_id"])
132+
client, err := testAccProvider.Meta().(*Config).RegistryClient(rs.Primary.Attributes["registry_id"])
133+
if err != nil {
134+
return err
135+
}
133136

134137
foundReg, err := client.RegistryCredential.ById(rs.Primary.ID)
135138
if err != nil {
@@ -147,12 +150,15 @@ func testAccCheckRancherRegistryCredentialExists(n string, reg *rancherClient.Re
147150
}
148151

149152
func testAccCheckRancherRegistryCredentialDestroy(s *terraform.State) error {
150-
client := testAccProvider.Meta().(*Config)
151-
152153
for _, rs := range s.RootModule().Resources {
153154
if rs.Type != "rancher_registry_credential" {
154155
continue
155156
}
157+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
158+
if err != nil {
159+
return err
160+
}
161+
156162
reg, err := client.RegistryCredential.ById(rs.Primary.ID)
157163

158164
if err == nil {

builtin/providers/rancher/resource_rancher_registry_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,10 @@ func testAccCheckRancherRegistryExists(n string, reg *rancherClient.Registry) re
138138
return fmt.Errorf("No App Name is set")
139139
}
140140

141-
client, _ := testAccProvider.Meta().(*Config).EnvironmentClient(rs.Primary.Attributes["environment_id"])
141+
client, err := testAccProvider.Meta().(*Config).EnvironmentClient(rs.Primary.Attributes["environment_id"])
142+
if err != nil {
143+
return err
144+
}
142145

143146
foundReg, err := client.Registry.ById(rs.Primary.ID)
144147
if err != nil {
@@ -156,12 +159,15 @@ func testAccCheckRancherRegistryExists(n string, reg *rancherClient.Registry) re
156159
}
157160

158161
func testAccCheckRancherRegistryDestroy(s *terraform.State) error {
159-
client := testAccProvider.Meta().(*Config)
160-
161162
for _, rs := range s.RootModule().Resources {
162163
if rs.Type != "rancher_registry" {
163164
continue
164165
}
166+
client, err := testAccProvider.Meta().(*Config).GlobalClient()
167+
if err != nil {
168+
return err
169+
}
170+
165171
reg, err := client.Registry.ById(rs.Primary.ID)
166172

167173
if err == nil {

0 commit comments

Comments
 (0)