Skip to content

Commit b2417ce

Browse files
committed
provider/openstack: 409 Response on Member Create
This commit accounts for a 409 response when a LBaaS v2 member is being created. Rather than error out, this should be considered a pending state.
1 parent a45d2e5 commit b2417ce

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

builtin/providers/openstack/resource_openstack_lb_member_v2.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,25 @@ func resourceMemberV2Create(d *schema.ResourceData, meta interface{}) error {
117117
poolID := d.Get("pool_id").(string)
118118

119119
log.Printf("[DEBUG] Create Options: %#v", createOpts)
120-
member, err := pools.CreateMember(networkingClient, poolID, createOpts).Extract()
120+
121+
var member *pools.Member
122+
err = resource.Retry(10*time.Minute, func() *resource.RetryError {
123+
var err error
124+
log.Printf("[DEBUG] Attempting to create LBaaSV2 member")
125+
member, err = pools.CreateMember(networkingClient, poolID, createOpts).Extract()
126+
if err != nil {
127+
if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok {
128+
if errCode.Actual == 409 || errCode.Actual == 500 {
129+
log.Printf("[DEBUG] OpenStack LBaaSV2 member is still creating.")
130+
return resource.RetryableError(err)
131+
}
132+
}
133+
return resource.NonRetryableError(err)
134+
}
135+
136+
return nil
137+
})
138+
121139
if err != nil {
122140
return fmt.Errorf("Error creating OpenStack LBaaSV2 member: %s", err)
123141
}
@@ -261,7 +279,7 @@ func waitForMemberDelete(networkingClient *gophercloud.ServiceClient, poolID str
261279
if errCode, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok {
262280
if errCode.Actual == 409 {
263281
log.Printf("[DEBUG] OpenStack LBaaSV2 Member (%s) is still in use.", memberID)
264-
return member, "ACTIVE", nil
282+
return member, "PENDING_DELETE", nil
265283
}
266284
}
267285

0 commit comments

Comments
 (0)