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  }