Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VPC] Use client from ctx in vpc_2 #1853

Merged
merged 2 commits into from Aug 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -51,15 +51,17 @@ func ResourceNetworkingFloatingIPAssociateV2() *schema.Resource {

func resourceNetworkingFloatingIPAssociateV2Create(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

floatingIP := d.Get("floating_ip").(string)
portID := d.Get("port_id").(string)

floatingIPID, err := resourceNetworkingFloatingIPAssociateV2IP2ID(networkingClient, floatingIP)
floatingIPID, err := resourceNetworkingFloatingIPAssociateV2IP2ID(client, floatingIP)
if err != nil {
return fmterr.Errorf("unable to get ID of floating IP: %s", err)
}
Expand All @@ -70,25 +72,27 @@ func resourceNetworkingFloatingIPAssociateV2Create(ctx context.Context, d *schem

log.Printf("[DEBUG] Floating IP Associate Create Options: %#v", updateOpts)

_, err = floatingips.Update(networkingClient, floatingIPID, updateOpts).Extract()
_, err = floatingips.Update(client, floatingIPID, updateOpts).Extract()
if err != nil {
return fmterr.Errorf("error associating floating IP %s to port %s: %s",
floatingIPID, portID, err)
return fmterr.Errorf("error associating floating IP %s to port %s: %s", floatingIPID, portID, err)
}

d.SetId(floatingIPID)

return resourceNetworkingFloatingIPAssociateV2Read(ctx, d, meta)
clientCtx := common.CtxWithClient(ctx, client, keyClientV2)
return resourceNetworkingFloatingIPAssociateV2Read(clientCtx, d, meta)
}

func resourceNetworkingFloatingIPAssociateV2Read(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceNetworkingFloatingIPAssociateV2Read(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

floatingIP, err := floatingips.Get(networkingClient, d.Id()).Extract()
floatingIP, err := floatingips.Get(client, d.Id()).Extract()
if err != nil {
return common.CheckDeletedDiag(d, err, "floating IP")
}
Expand All @@ -105,11 +109,13 @@ func resourceNetworkingFloatingIPAssociateV2Read(_ context.Context, d *schema.Re
return nil
}

func resourceNetworkingFloatingIPAssociateV2Delete(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceNetworkingFloatingIPAssociateV2Delete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

portID := d.Get("port_id").(string)
Expand All @@ -119,10 +125,9 @@ func resourceNetworkingFloatingIPAssociateV2Delete(_ context.Context, d *schema.

log.Printf("[DEBUG] Floating IP Delete Options: %#v", updateOpts)

_, err = floatingips.Update(networkingClient, d.Id(), updateOpts).Extract()
_, err = floatingips.Update(client, d.Id(), updateOpts).Extract()
if err != nil {
return fmterr.Errorf("error disassociating floating IP %s from port %s: %s",
d.Id(), portID, err)
return fmterr.Errorf("error disassociating floating IP %s from port %s: %s", d.Id(), portID, err)
}

return nil
Expand Down
Expand Up @@ -86,9 +86,11 @@ func ResourceNetworkingFloatingIPV2() *schema.Resource {

func resourceNetworkFloatingIPV2Create(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

createOpts := FloatingIPCreateOpts{
Expand All @@ -102,19 +104,20 @@ func resourceNetworkFloatingIPV2Create(ctx context.Context, d *schema.ResourceDa
}

log.Printf("[DEBUG] Create Options: %#v", createOpts)
floatingIP, err := floatingips.Create(networkingClient, createOpts).Extract()
floatingIP, err := floatingips.Create(client, createOpts).Extract()
if err != nil {
return fmterr.Errorf("error allocating floating IP: %s", err)
}

log.Printf("[DEBUG] Waiting for OpenTelekomCloud Neutron Floating IP (%s) to become available.", floatingIP.ID)

stateConf := &resource.StateChangeConf{
Target: []string{"ACTIVE"},
Refresh: waitForFloatingIPActive(networkingClient, floatingIP.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
Target: []string{"ACTIVE"},
Refresh: waitForFloatingIPActive(client, floatingIP.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand All @@ -124,17 +127,20 @@ func resourceNetworkFloatingIPV2Create(ctx context.Context, d *schema.ResourceDa

d.SetId(floatingIP.ID)

return resourceNetworkFloatingIPV2Read(ctx, d, meta)
clientCtx := common.CtxWithClient(ctx, client, keyClientV2)
return resourceNetworkFloatingIPV2Read(clientCtx, d, meta)
}

func resourceNetworkFloatingIPV2Read(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceNetworkFloatingIPV2Read(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

floatingIP, err := floatingips.Get(networkingClient, d.Id()).Extract()
floatingIP, err := floatingips.Get(client, d.Id()).Extract()
if err != nil {
return common.CheckDeletedDiag(d, err, "floating IP")
}
Expand All @@ -157,9 +163,11 @@ func resourceNetworkFloatingIPV2Read(_ context.Context, d *schema.ResourceData,

func resourceNetworkFloatingIPV2Update(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

var updateOpts floatingips.UpdateOpts
Expand All @@ -171,28 +179,32 @@ func resourceNetworkFloatingIPV2Update(ctx context.Context, d *schema.ResourceDa

log.Printf("[DEBUG] Update Options: %#v", updateOpts)

_, err = floatingips.Update(networkingClient, d.Id(), updateOpts).Extract()
_, err = floatingips.Update(client, d.Id(), updateOpts).Extract()
if err != nil {
return fmterr.Errorf("error updating floating IP: %s", err)
}

return resourceNetworkFloatingIPV2Read(ctx, d, meta)
clientCtx := common.CtxWithClient(ctx, client, keyClientV2)
return resourceNetworkFloatingIPV2Read(clientCtx, d, meta)
}

func resourceNetworkFloatingIPV2Delete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
networkingClient, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud network client: %s", err)
return fmterr.Errorf(errCreationV2Client, err)
}

stateConf := &resource.StateChangeConf{
Pending: []string{"ACTIVE"},
Target: []string{"DELETED"},
Refresh: waitForFloatingIPDelete(networkingClient, d.Id()),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
Pending: []string{"ACTIVE"},
Target: []string{"DELETED"},
Refresh: waitForFloatingIPDelete(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand All @@ -204,9 +216,9 @@ func resourceNetworkFloatingIPV2Delete(ctx context.Context, d *schema.ResourceDa
return nil
}

func waitForFloatingIPActive(networkingClient *golangsdk.ServiceClient, fId string) resource.StateRefreshFunc {
func waitForFloatingIPActive(client *golangsdk.ServiceClient, fId string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
f, err := floatingips.Get(networkingClient, fId).Extract()
f, err := floatingips.Get(client, fId).Extract()
if err != nil {
return nil, "", err
}
Expand All @@ -220,11 +232,11 @@ func waitForFloatingIPActive(networkingClient *golangsdk.ServiceClient, fId stri
}
}

func waitForFloatingIPDelete(networkingClient *golangsdk.ServiceClient, fId string) resource.StateRefreshFunc {
func waitForFloatingIPDelete(client *golangsdk.ServiceClient, fId string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
log.Printf("[DEBUG] Attempting to delete OpenTelekomCloud Floating IP %s.\n", fId)

f, err := floatingips.Get(networkingClient, fId).Extract()
f, err := floatingips.Get(client, fId).Extract()
if err != nil {
if _, ok := err.(golangsdk.ErrDefault404); ok {
log.Printf("[DEBUG] Successfully deleted OpenTelekomCloud Floating IP %s", fId)
Expand All @@ -233,7 +245,7 @@ func waitForFloatingIPDelete(networkingClient *golangsdk.ServiceClient, fId stri
return f, "ACTIVE", err
}

err = floatingips.Delete(networkingClient, fId).ExtractErr()
err = floatingips.Delete(client, fId).ExtractErr()
if err != nil {
if _, ok := err.(golangsdk.ErrDefault404); ok {
log.Printf("[DEBUG] Successfully deleted OpenTelekomCloud Floating IP %s", fId)
Expand Down
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/networking/v2/extensions/portsecurity"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/helper/hashcode"
Expand Down Expand Up @@ -126,9 +127,10 @@ func ResourceNetworkingPortV2() *schema.Resource {
Required: true,
},
"mac_address": {
Type: schema.TypeString,
Optional: true,
Computed: true,
Type: schema.TypeString,
Optional: true,
Computed: true,
ValidateFunc: validation.IsMACAddress,
},
},
},
Expand All @@ -154,9 +156,11 @@ func ResourceNetworkingPortV2() *schema.Resource {

func resourceNetworkingPortV2Create(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud NetworkingV2 client: %w", err)
return fmterr.Errorf(errCreationV2Client, err)
}

asu, id := ExtractValFromNid(d.Get("network_id").(string))
Expand Down Expand Up @@ -224,11 +228,12 @@ func resourceNetworkingPortV2Create(ctx context.Context, d *schema.ResourceData,
log.Printf("[DEBUG] Waiting for OpenTelekomCloud Neutron Port (%s) to become available.", p.ID)

stateConf := &resource.StateChangeConf{
Target: []string{"ACTIVE"},
Refresh: waitForNetworkPortActive(client, p.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
Target: []string{"ACTIVE"},
Refresh: waitForNetworkPortActive(client, p.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand All @@ -238,14 +243,17 @@ func resourceNetworkingPortV2Create(ctx context.Context, d *schema.ResourceData,

d.SetId(p.ID)

return resourceNetworkingPortV2Read(ctx, d, meta)
clientCtx := common.CtxWithClient(ctx, client, keyClientV2)
return resourceNetworkingPortV2Read(clientCtx, d, meta)
}

func resourceNetworkingPortV2Read(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceNetworkingPortV2Read(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud NetworkingV2 client: %w", err)
return fmterr.Errorf(errCreationV2Client, err)
}

var port portWithPortSecurityExtensions
Expand Down Expand Up @@ -283,9 +291,10 @@ func resourceNetworkingPortV2Read(_ context.Context, d *schema.ResourceData, met
// Convert AllowedAddressPairs to list of map
var pairs []map[string]interface{}
for _, pairObject := range port.AllowedAddressPairs {
pair := make(map[string]interface{})
pair["ip_address"] = pairObject.IPAddress
pair["mac_address"] = pairObject.MACAddress
pair := map[string]interface{}{
"ip_address": pairObject.IPAddress,
"mac_address": pairObject.MACAddress,
}
pairs = append(pairs, pair)
}

Expand All @@ -303,9 +312,11 @@ func resourceNetworkingPortV2Read(_ context.Context, d *schema.ResourceData, met

func resourceNetworkingPortV2Update(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud NetworkingV2 client: %w", err)
return fmterr.Errorf(errCreationV2Client, err)
}

noSecurityGroups := d.Get("no_security_groups").(bool)
Expand Down Expand Up @@ -387,23 +398,28 @@ func resourceNetworkingPortV2Update(ctx context.Context, d *schema.ResourceData,
return fmterr.Errorf("error updating OpenTelekomCloud Neutron port: %w", err)
}
}
return resourceNetworkingPortV2Read(ctx, d, meta)

clientCtx := common.CtxWithClient(ctx, client, keyClientV2)
return resourceNetworkingPortV2Read(clientCtx, d, meta)
}

func resourceNetworkingPortV2Delete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*cfg.Config)
client, err := config.NetworkingV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.NetworkingV2Client(config.GetRegion(d))
})
if err != nil {
return fmterr.Errorf("error creating OpenTelekomCloud NetworkingV2 client: %w", err)
return fmterr.Errorf(errCreationV2Client, err)
}

stateConf := &resource.StateChangeConf{
Pending: []string{"ACTIVE"},
Target: []string{"DELETED"},
Refresh: waitForNetworkPortDelete(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
Pending: []string{"ACTIVE"},
Target: []string{"DELETED"},
Refresh: waitForNetworkPortDelete(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 5 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand Down