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

[ECS] Use client from ctx in ecs_v2 #1857

Merged
merged 3 commits into from Aug 2, 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 @@ -872,58 +872,7 @@ resource "opentelekomcloud_networking_subnet_v2" "subnet_1" {
enable_dhcp = true
no_gateway = true
}
resource "opentelekomcloud_networking_network_v2" "network_2" {
name = "network_2"
}
resource "opentelekomcloud_networking_subnet_v2" "subnet_2" {
name = "subnet_2"
network_id = opentelekomcloud_networking_network_v2.network_2.id
cidr = "192.168.2.0/24"
ip_version = 4
enable_dhcp = true
no_gateway = true
}
resource "opentelekomcloud_networking_port_v2" "port_1" {
name = "port_1"
network_id = opentelekomcloud_networking_network_v2.network_1.id
admin_state_up = "true"
fixed_ip {
subnet_id = opentelekomcloud_networking_subnet_v2.subnet_1.id
ip_address = "192.168.1.103"
}
}
resource "opentelekomcloud_networking_port_v2" "port_2" {
name = "port_2"
network_id = opentelekomcloud_networking_network_v2.network_2.id
admin_state_up = "true"
fixed_ip {
subnet_id = opentelekomcloud_networking_subnet_v2.subnet_2.id
ip_address = "192.168.2.103"
}
}
resource "opentelekomcloud_networking_port_v2" "port_3" {
name = "port_3"
network_id = opentelekomcloud_networking_network_v2.network_1.id
admin_state_up = "true"
fixed_ip {
subnet_id = opentelekomcloud_networking_subnet_v2.subnet_1.id
ip_address = "192.168.1.104"
}
}
resource "opentelekomcloud_networking_port_v2" "port_4" {
name = "port_4"
network_id = opentelekomcloud_networking_network_v2.network_2.id
admin_state_up = "true"
fixed_ip {
subnet_id = opentelekomcloud_networking_subnet_v2.subnet_2.id
ip_address = "192.168.2.104"
}
}
resource "opentelekomcloud_compute_instance_v2" "instance_1" {
depends_on = [
"opentelekomcloud_networking_subnet_v2.subnet_1",
"opentelekomcloud_networking_subnet_v2.subnet_2",
]
name = "instance_1"
security_groups = ["default"]

Expand All @@ -934,30 +883,6 @@ resource "opentelekomcloud_compute_instance_v2" "instance_1" {
uuid = opentelekomcloud_networking_network_v2.network_1.id
fixed_ip_v4 = "192.168.1.100"
}
network {
uuid = opentelekomcloud_networking_network_v2.network_2.id
fixed_ip_v4 = "192.168.2.100"
}
network {
uuid = opentelekomcloud_networking_network_v2.network_1.id
fixed_ip_v4 = "192.168.1.101"
}
network {
uuid = opentelekomcloud_networking_network_v2.network_2.id
fixed_ip_v4 = "192.168.2.101"
}
network {
port = opentelekomcloud_networking_port_v2.port_1.id
}
network {
port = opentelekomcloud_networking_port_v2.port_2.id
}
network {
port = opentelekomcloud_networking_port_v2.port_3.id
}
network {
port = opentelekomcloud_networking_port_v2.port_4.id
}
}
`, common.DataSourceSubnet)

Expand Down
2 changes: 2 additions & 0 deletions opentelekomcloud/services/ecs/common.go
Expand Up @@ -3,4 +3,6 @@ package ecs
const (
errCreateClient = "error creating OpenTelekomCloud ComputeV1 client: %w"
errCreateV2Client = "error creating OpenTelekomCloud ComputeV2 client: %w"

keyClientV2 = "ecs-v2-client"
)
Expand Up @@ -347,9 +347,11 @@ func ResourceComputeInstanceV2() *schema.Resource {

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

var createOpts servers.CreateOptsBuilder
Expand Down Expand Up @@ -449,12 +451,13 @@ func resourceComputeInstanceV2Create(ctx context.Context, d *schema.ResourceData
log.Printf("[DEBUG] Waiting for instance (%s) to become running", server.ID)

stateConf := &resource.StateChangeConf{
Pending: []string{"BUILD"},
Target: []string{"ACTIVE"},
Refresh: ServerV2StateRefreshFunc(client, server.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
Pending: []string{"BUILD"},
Target: []string{"ACTIVE"},
Refresh: ServerV2StateRefreshFunc(client, server.ID),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 10 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand All @@ -472,11 +475,12 @@ func resourceComputeInstanceV2Create(ctx context.Context, d *schema.ResourceData
return fmterr.Errorf("error stopping server instance: %w", err)
}
stopStateConf := &resource.StateChangeConf{
Target: []string{"SHUTOFF"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
Target: []string{"SHUTOFF"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutCreate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

log.Printf("[DEBUG] Waiting for instance (%s) to stop", d.Id())
Expand Down Expand Up @@ -508,14 +512,17 @@ func resourceComputeInstanceV2Create(ctx context.Context, d *schema.ResourceData
}
}

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

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

server, err := servers.Get(client, d.Id()).Extract()
Expand Down Expand Up @@ -671,9 +678,11 @@ func resourceComputeInstanceV2Read(ctx context.Context, d *schema.ResourceData,

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

var updateOpts servers.UpdateOpts
Expand All @@ -696,11 +705,12 @@ func resourceComputeInstanceV2Update(ctx context.Context, d *schema.ResourceData
return fmterr.Errorf("error stopping compute instance: %w", err)
}
stopStateConf := &resource.StateChangeConf{
Target: []string{"SHUTOFF"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
Target: []string{"SHUTOFF"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

log.Printf("[DEBUG] Waiting for instance (%s) to stop", d.Id())
Expand All @@ -715,11 +725,12 @@ func resourceComputeInstanceV2Update(ctx context.Context, d *schema.ResourceData
return fmterr.Errorf("error starting compute instance: %w", err)
}
startStateConf := &resource.StateChangeConf{
Target: []string{"ACTIVE"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
Target: []string{"ACTIVE"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 2 * time.Second,
}

log.Printf("[DEBUG] Waiting for instance (%s) to start/unshelve", d.Id())
Expand Down Expand Up @@ -836,12 +847,13 @@ func resourceComputeInstanceV2Update(ctx context.Context, d *schema.ResourceData
log.Printf("[DEBUG] Waiting for instance (%s) to finish resizing", d.Id())

stateConf := &resource.StateChangeConf{
Pending: []string{"RESIZE"},
Target: []string{"VERIFY_RESIZE"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
Pending: []string{"RESIZE"},
Target: []string{"VERIFY_RESIZE"},
Refresh: ServerV2StateRefreshFunc(client, d.Id()),
Timeout: d.Timeout(schema.TimeoutUpdate),
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,
PollInterval: 10 * time.Second,
}

_, err = stateConf.WaitForStateContext(ctx)
Expand All @@ -857,12 +869,13 @@ func resourceComputeInstanceV2Update(ctx context.Context, d *schema.ResourceData
}

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

_, err = stateConf.WaitForStateContext(ctx)
Expand Down Expand Up @@ -891,14 +904,17 @@ func resourceComputeInstanceV2Update(ctx context.Context, d *schema.ResourceData
}
}

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

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

if d.Get("stop_before_destroy").(bool) {
Expand All @@ -916,12 +932,13 @@ func resourceComputeInstanceV2Delete(ctx context.Context, d *schema.ResourceData
log.Printf("[DEBUG] Waiting for instance (%s) to delete", d.Id())

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

_, err = stateConf.WaitForStateContext(ctx)
Expand Down
Expand Up @@ -64,9 +64,11 @@ func ResourceComputeKeypairV2() *schema.Resource {

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

opts := KeyPairCreateOpts{
Expand Down Expand Up @@ -94,14 +96,17 @@ func resourceComputeKeypairV2Create(ctx context.Context, d *schema.ResourceData,
}
d.SetId(opts.Name)

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

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

kp, err := keypairs.Get(client, d.Id()).Extract()
Expand All @@ -121,11 +126,13 @@ func resourceComputeKeypairV2Read(_ context.Context, d *schema.ResourceData, met
return nil
}

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

shared := d.Get("shared").(bool)
Expand All @@ -141,7 +148,7 @@ func resourceComputeKeypairV2Delete(_ context.Context, d *schema.ResourceData, m
return nil
}

func useSharedKeypair(_ context.Context, d *schema.ResourceDiff, meta interface{}) error {
func useSharedKeypair(ctx context.Context, d *schema.ResourceDiff, meta interface{}) error {
if d.Id() != "" { // skip if not new resource
return nil
}
Expand All @@ -151,10 +158,13 @@ func useSharedKeypair(_ context.Context, d *schema.ResourceDiff, meta interface{
}

config := meta.(*cfg.Config)
client, err := config.ComputeV2Client(config.GetRegion(d))
client, err := common.ClientFromCtx(ctx, keyClientV2, func() (*golangsdk.ServiceClient, error) {
return config.ComputeV2Client(config.GetRegion(d))
})
if err != nil {
return fmt.Errorf("error creating OpenTelekomCloud ComputeV2 client: %s", err)
return fmt.Errorf(errCreateV2Client, err)
}

name := d.Get("name").(string)
publicKey := d.Get("public_key").(string)
exists, err := keyPairExist(client, name, publicKey)
Expand Down
@@ -0,0 +1,6 @@
---
enhancements:
- |
**[ECS]** Reduce amount of init client requests in ``resource/opentelekomcloud_compute_instance_v2`` (`#1857 <https://github.com/opentelekomcloud/terraform-provider-opentelekomcloud/pull/1857>`_)
- |
**[ECS]** Reduce amount of init client requests in ``resource/opentelekomcloud_compute_keypair_v2`` (`#1857 <https://github.com/opentelekomcloud/terraform-provider-opentelekomcloud/pull/1857>`_)