github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/autoscaling/v1/instances_test.go (about) 1 package v1 2 3 import ( 4 "testing" 5 6 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients" 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack" 9 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack/autoscaling" 10 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" 11 "github.com/opentelekomcloud/gophertelekomcloud/openstack/autoscaling/v1/groups" 12 "github.com/opentelekomcloud/gophertelekomcloud/openstack/autoscaling/v1/instances" 13 "github.com/opentelekomcloud/gophertelekomcloud/openstack/autoscaling/v1/quotas" 14 "github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto" 15 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 16 ) 17 18 func TestInstances(t *testing.T) { 19 client, err := clients.NewAutoscalingV1Client() 20 th.AssertNoErr(t, err) 21 22 asGroupCreateName := tools.RandomString("as-ins-", 3) 23 networkID := clients.EnvOS.GetEnv("NETWORK_ID") 24 vpcID := clients.EnvOS.GetEnv("VPC_ID") 25 if networkID == "" { 26 t.Skip("OS_NETWORK_ID or OS_VPC_ID env vars are missing but AS Group test requires") 27 } 28 29 asCreateName := tools.RandomString("as-ins-", 3) 30 keyPairName := clients.EnvOS.GetEnv("KEYPAIR_NAME") 31 imageID := clients.EnvOS.GetEnv("IMAGE_ID") 32 if keyPairName == "" || imageID == "" { 33 t.Skip("OS_KEYPAIR_NAME or OS_IMAGE_ID env vars is missing but AS Configuration test requires") 34 } 35 36 configID := autoscaling.CreateASConfig(t, client, asCreateName, imageID, keyPairName) 37 t.Cleanup(func() { 38 autoscaling.DeleteASConfig(t, client, configID) 39 }) 40 41 createOpts := groups.CreateOpts{ 42 Name: asGroupCreateName, 43 Networks: []groups.ID{ 44 { 45 ID: networkID, 46 }, 47 }, 48 SecurityGroup: []groups.ID{ 49 { 50 ID: openstack.DefaultSecurityGroup(t), 51 }, 52 }, 53 VpcID: vpcID, 54 IsDeletePublicip: pointerto.Bool(true), 55 DesireInstanceNumber: 1, 56 MinInstanceNumber: 0, 57 MaxInstanceNumber: 5, 58 ConfigurationID: configID, 59 } 60 t.Logf("Attempting to create AutoScaling Group") 61 groupID, err2 := groups.Create(client, createOpts) 62 th.AssertNoErr(t, err2) 63 t.Logf("Created AutoScaling Group: %s", groupID) 64 65 t.Cleanup(func() { 66 autoscaling.DeleteAutoScalingGroup(t, client, groupID) 67 }) 68 69 err = groups.Enable(client, groupID) 70 th.AssertNoErr(t, err) 71 72 err = golangsdk.WaitFor(1000, func() (bool, error) { 73 n, err := groups.Get(client, groupID) 74 if err != nil { 75 return false, err 76 } 77 78 if n.ActualInstanceNumber == 1 { 79 return true, nil 80 } 81 82 return false, nil 83 }) 84 th.AssertNoErr(t, err) 85 86 err = groups.Disable(client, groupID) 87 th.AssertNoErr(t, err) 88 89 inst, err := instances.List(client, instances.ListOpts{ 90 ScalingGroupId: groupID, 91 }) 92 th.AssertNoErr(t, err) 93 tools.PrintResource(t, inst) 94 95 t.Cleanup(func() { 96 err = instances.Delete(client, instances.DeleteOpts{ 97 InstanceId: inst.ScalingGroupInstances[0].ID, 98 DeleteInstance: "yes", 99 }) 100 th.AssertNoErr(t, err) 101 102 err = golangsdk.WaitFor(1000, func() (bool, error) { 103 n, err := groups.Get(client, groupID) 104 if err != nil { 105 return false, err 106 } 107 108 if n.ActualInstanceNumber == 0 { 109 return true, nil 110 } 111 112 return false, nil 113 }) 114 th.AssertNoErr(t, err) 115 }) 116 117 quota, err := quotas.ShowPolicyAndInstanceQuota(client, groupID) 118 th.AssertNoErr(t, err) 119 tools.PrintResource(t, quota) 120 }