Skip to content

Commit 0e4379d

Browse files
authored
Ensure all callers of readEntity() properly handle errEntityNotFound (#1361)
1 parent 58d06a5 commit 0e4379d

5 files changed

Lines changed: 38 additions & 32 deletions

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
## 3.3.1 (Unreleased)
22
BUGS:
33
* `resource/identity_group`: Report an error upon duplicate resource creation failure. Document group name caveats. ([#1352](https://github.com/hashicorp/terraform-provider-vault/pull/1352))
4-
* `resource/pki_secret_backend_root_sign_intermediate`: Fix panic when reading `ca_chain` from Vault ([#1357](https://github.com/hashicorp/terraform-provider-vault/issues/1357)
4+
* `resource/pki_secret_backend_root_sign_intermediate`: Fix panic when reading `ca_chain` from Vault ([#1357](https://github.com/hashicorp/terraform-provider-vault/issues/1357))
55
* `resource/raft_snapshot_agent_config`: Properly handle nil response on read ([#1360](https://github.com/hashicorp/terraform-provider-vault/pull/1360))
6+
* `resource/identity_*`: Ensure non-existent entities are handled properly ([#1361](https://github.com/hashicorp/terraform-provider-vault/pull/1361))
67

78
## 3.3.0 (February 17, 2022)
89
FEATURES:

vault/resource_identity_entity.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -170,20 +170,20 @@ func identityEntityRead(d *schema.ResourceData, meta interface{}) error {
170170
client := meta.(*api.Client)
171171
id := d.Id()
172172

173+
log.Printf("[DEBUG] Read IdentityEntity %s", id)
173174
resp, err := readIdentityEntity(client, id, d.IsNewResource())
174175
if err != nil {
175176
// We need to check if the secret_id has expired
176-
if resp == nil && util.IsExpiredTokenErr(err) {
177+
if util.IsExpiredTokenErr(err) {
177178
return nil
178179
}
179-
return fmt.Errorf("error reading IdentityEntity %q: %s", id, err)
180-
}
181180

182-
log.Printf("[DEBUG] Read IdentityEntity %s", id)
183-
if resp == nil {
184-
log.Printf("[WARN] IdentityEntity %q not found, removing from state", id)
185-
d.SetId("")
186-
return nil
181+
if isIdentityNotFoundError(err) {
182+
log.Printf("[WARN] IdentityEntity %q not found, removing from state", id)
183+
d.SetId("")
184+
return nil
185+
}
186+
return fmt.Errorf("error reading IdentityEntity %q: %w", id, err)
187187
}
188188

189189
for _, k := range []string{"name", "metadata", "disabled", "policies"} {

vault/resource_identity_entity_policies.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,16 @@ func identityEntityPoliciesRead(d *schema.ResourceData, meta interface{}) error
9797
client := meta.(*api.Client)
9898
id := d.Id()
9999

100+
log.Printf("[DEBUG] Read IdentityEntityPolicies %s", id)
100101
resp, err := readIdentityEntity(client, id, d.IsNewResource())
101102
if err != nil {
103+
if isIdentityNotFoundError(err) {
104+
log.Printf("[WARN] IdentityEntityPolicies %q not found, removing from state", id)
105+
d.SetId("")
106+
return nil
107+
}
102108
return err
103109
}
104-
log.Printf("[DEBUG] Read IdentityEntityPolicies %s", id)
105-
if resp == nil {
106-
log.Printf("[WARN] IdentityEntityPolicies %q not found, removing from state", id)
107-
d.SetId("")
108-
return nil
109-
}
110110

111111
d.Set("entity_id", id)
112112
d.Set("entity_name", resp.Data["name"])
@@ -149,6 +149,9 @@ func identityEntityPoliciesDelete(d *schema.ResourceData, meta interface{}) erro
149149
} else {
150150
apiPolicies, err := readIdentityEntityPolicies(client, id)
151151
if err != nil {
152+
if isIdentityNotFoundError(err) {
153+
return nil
154+
}
152155
return err
153156
}
154157
for _, policy := range d.Get("policies").(*schema.Set).List() {

vault/resource_identity_group.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -230,20 +230,21 @@ func identityGroupRead(d *schema.ResourceData, meta interface{}) error {
230230
client := meta.(*api.Client)
231231
id := d.Id()
232232

233+
log.Printf("[DEBUG] Read IdentityGroup %s", id)
233234
resp, err := readIdentityGroup(client, id, d.IsNewResource())
234235
if err != nil {
235236
// We need to check if the secret_id has expired
236237
if util.IsExpiredTokenErr(err) {
237238
return nil
238239
}
240+
241+
if isIdentityNotFoundError(err) {
242+
log.Printf("[WARN] IdentityGroup %q not found, removing from state", id)
243+
d.SetId("")
244+
return nil
245+
}
239246
return fmt.Errorf("error reading IdentityGroup %q: %s", id, err)
240247
}
241-
log.Printf("[DEBUG] Read IdentityGroup %s", id)
242-
if resp == nil {
243-
log.Printf("[WARN] IdentityGroup %q not found, removing from state", id)
244-
d.SetId("")
245-
return nil
246-
}
247248

248249
readFields := []string{"name", "type", "metadata", "member_entity_ids", "member_group_ids", "policies"}
249250

@@ -319,9 +320,6 @@ func readIdentityGroupMemberEntityIds(client *api.Client, groupID string, retry
319320
if err != nil {
320321
return nil, err
321322
}
322-
if resp == nil {
323-
return nil, fmt.Errorf("error IdentityGroup %s does not exist", groupID)
324-
}
325323

326324
if v, ok := resp.Data["member_entity_ids"]; ok && v != nil {
327325
return v.([]interface{}), nil

vault/resource_identity_group_policies.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,23 @@ func identityGroupPoliciesRead(d *schema.ResourceData, meta interface{}) error {
9797
client := meta.(*api.Client)
9898
id := d.Id()
9999

100+
log.Printf("[DEBUG] Read IdentityGroupPolicies %s", id)
100101
resp, err := readIdentityGroup(client, id, d.IsNewResource())
101102
if err != nil {
103+
if isIdentityNotFoundError(err) {
104+
log.Printf("[WARN] IdentityGroupPolicies %q not found, removing from state", id)
105+
d.SetId("")
106+
return nil
107+
}
102108
return err
103109
}
104-
log.Printf("[DEBUG] Read IdentityGroupPolicies %s", id)
105-
if resp == nil {
106-
log.Printf("[WARN] IdentityGroupPolicies %q not found, removing from state", id)
107-
d.SetId("")
108-
return nil
109-
}
110110

111-
d.Set("group_id", id)
112-
d.Set("group_name", resp.Data["name"])
111+
if err := d.Set("group_id", id); err != nil {
112+
return err
113+
}
114+
if err := d.Set("group_name", resp.Data["name"]); err != nil {
115+
return err
116+
}
113117

114118
if d.Get("exclusive").(bool) {
115119
if err = d.Set("policies", resp.Data["policies"]); err != nil {

0 commit comments

Comments
 (0)