Skip to content

Commit bcc0576

Browse files
fix: address PR review feedback and CI failures
- Domain: add Computed+ForceNew to domain_id and parent_domain_id to fix perpetual diffs causing 19 acceptance test failures - Account: remove unnecessary ForceNew from email/first_name/last_name/ password; implement user-level updates via updateUser API; add Sensitive to password field - Disk offering: mark disk_size as ForceNew since updateDiskOffering does not support size changes - User: mark account and username as ForceNew to prevent silent drift; add Sensitive to password; wrap Update error with resource context - Remove tests/ directory (manual TF configs, not Go acceptance tests) which also fixes Apache RAT check failures from missing headers
1 parent 17fcf46 commit bcc0576

13 files changed

Lines changed: 65 additions & 743 deletions

cloudstack/resource_cloudstack_account.go

Lines changed: 54 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,19 @@ func resourceCloudStackAccount() *schema.Resource {
3737
"email": {
3838
Type: schema.TypeString,
3939
Required: true,
40-
ForceNew: true,
4140
},
4241
"first_name": {
4342
Type: schema.TypeString,
4443
Required: true,
45-
ForceNew: true,
4644
},
4745
"last_name": {
4846
Type: schema.TypeString,
4947
Required: true,
50-
ForceNew: true,
5148
},
5249
"password": {
53-
Type: schema.TypeString,
54-
Required: true,
55-
ForceNew: true,
50+
Type: schema.TypeString,
51+
Required: true,
52+
Sensitive: true,
5653
},
5754
"username": {
5855
Type: schema.TypeString,
@@ -159,22 +156,59 @@ func resourceCloudStackAccountUpdate(d *schema.ResourceData, meta interface{}) e
159156

160157
log.Printf("[DEBUG] Updating Account %s", d.Id())
161158

162-
p := cs.Account.NewUpdateAccountParams()
163-
p.SetId(d.Id())
164-
165-
if d.HasChange("role_id") {
166-
p.SetRoleid(d.Get("role_id").(string))
167-
}
168-
if d.HasChange("account") {
169-
p.SetNewname(d.Get("account").(string))
170-
}
171-
if d.HasChange("domain_id") {
172-
p.SetDomainid(d.Get("domain_id").(string))
159+
// Handle account-level changes
160+
if d.HasChange("role_id") || d.HasChange("account") || d.HasChange("domain_id") {
161+
p := cs.Account.NewUpdateAccountParams()
162+
p.SetId(d.Id())
163+
164+
if d.HasChange("role_id") {
165+
p.SetRoleid(d.Get("role_id").(string))
166+
}
167+
if d.HasChange("account") {
168+
p.SetNewname(d.Get("account").(string))
169+
}
170+
if d.HasChange("domain_id") {
171+
p.SetDomainid(d.Get("domain_id").(string))
172+
}
173+
174+
_, err := cs.Account.UpdateAccount(p)
175+
if err != nil {
176+
return fmt.Errorf("Error updating Account %s: %s", d.Id(), err)
177+
}
173178
}
174179

175-
_, err := cs.Account.UpdateAccount(p)
176-
if err != nil {
177-
return fmt.Errorf("Error updating Account %s: %s", d.Id(), err)
180+
// Handle user-level changes via updateUser API
181+
if d.HasChange("email") || d.HasChange("first_name") || d.HasChange("last_name") || d.HasChange("password") {
182+
lp := cs.Account.NewListAccountsParams()
183+
lp.SetId(d.Id())
184+
accounts, err := cs.Account.ListAccounts(lp)
185+
if err != nil {
186+
return fmt.Errorf("Error retrieving Account %s for user update: %s", d.Id(), err)
187+
}
188+
if accounts.Count == 0 || len(accounts.Accounts[0].User) == 0 {
189+
return fmt.Errorf("Account %s has no users to update", d.Id())
190+
}
191+
192+
userID := accounts.Accounts[0].User[0].Id
193+
up := cs.User.NewUpdateUserParams(userID)
194+
195+
if d.HasChange("email") {
196+
up.SetEmail(d.Get("email").(string))
197+
}
198+
if d.HasChange("first_name") {
199+
up.SetFirstname(d.Get("first_name").(string))
200+
}
201+
if d.HasChange("last_name") {
202+
up.SetLastname(d.Get("last_name").(string))
203+
}
204+
if d.HasChange("password") {
205+
up.SetPassword(d.Get("password").(string))
206+
}
207+
208+
_, err = cs.User.UpdateUser(up)
209+
if err != nil {
210+
return fmt.Errorf("Error updating user for Account %s: %s", d.Id(), err)
211+
}
178212
}
179213

180214
log.Printf("[DEBUG] Account %s successfully updated", d.Id())

cloudstack/resource_cloudstack_disk_offering.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func resourceCloudStackDiskOffering() *schema.Resource {
4545
"disk_size": {
4646
Type: schema.TypeInt,
4747
Required: true,
48+
ForceNew: true,
4849
},
4950
},
5051
}

cloudstack/resource_cloudstack_domain.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ func resourceCloudStackDomain() *schema.Resource {
4141
"domain_id": {
4242
Type: schema.TypeString,
4343
Optional: true,
44+
Computed: true,
45+
ForceNew: true,
4446
},
4547
"network_domain": {
4648
Type: schema.TypeString,
@@ -49,6 +51,8 @@ func resourceCloudStackDomain() *schema.Resource {
4951
"parent_domain_id": {
5052
Type: schema.TypeString,
5153
Optional: true,
54+
Computed: true,
55+
ForceNew: true,
5256
},
5357
},
5458
}

cloudstack/resource_cloudstack_user.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func resourceCloudStackUser() *schema.Resource {
3737
"account": {
3838
Type: schema.TypeString,
3939
Optional: true,
40+
ForceNew: true,
4041
},
4142
"email": {
4243
Type: schema.TypeString,
@@ -51,12 +52,14 @@ func resourceCloudStackUser() *schema.Resource {
5152
Required: true,
5253
},
5354
"password": {
54-
Type: schema.TypeString,
55-
Required: true,
55+
Type: schema.TypeString,
56+
Required: true,
57+
Sensitive: true,
5658
},
5759
"username": {
5860
Type: schema.TypeString,
5961
Required: true,
62+
ForceNew: true,
6063
},
6164
},
6265
}
@@ -107,7 +110,7 @@ func resourceCloudStackUserUpdate(d *schema.ResourceData, meta interface{}) erro
107110

108111
_, err := cs.User.UpdateUser(p)
109112
if err != nil {
110-
return err
113+
return fmt.Errorf("Error updating User %s: %s", d.Id(), err)
111114
}
112115

113116
return resourceCloudStackUserRead(d, meta)

tests/README.md

Lines changed: 0 additions & 42 deletions
This file was deleted.

tests/comprehensive/README.md

Lines changed: 0 additions & 45 deletions
This file was deleted.

0 commit comments

Comments
 (0)