github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/compute/v2/servers_test.go (about)

     1  package v2
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/opentelekomcloud/gophertelekomcloud"
     8  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
     9  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack"
    10  	"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
    11  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/compute/v2/flavors"
    12  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/compute/v2/servers"
    13  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/ims/v2/images"
    14  	th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
    15  )
    16  
    17  func TestServerList(t *testing.T) {
    18  	client, err := clients.NewComputeV2Client()
    19  	th.AssertNoErr(t, err)
    20  
    21  	listOpts := servers.ListOpts{}
    22  	allServerPages, err := servers.List(client, listOpts).AllPages()
    23  	th.AssertNoErr(t, err)
    24  
    25  	serversList, err := servers.ExtractServers(allServerPages)
    26  	th.AssertNoErr(t, err)
    27  
    28  	for _, server := range serversList {
    29  		tools.PrintResource(t, server)
    30  	}
    31  }
    32  
    33  func TestServerLifecycle(t *testing.T) {
    34  	client, err := clients.NewComputeV2Client()
    35  	th.AssertNoErr(t, err)
    36  
    37  	t.Logf("Attempting to create ECSv2")
    38  	ecsName := tools.RandomString("create-ecs-", 3)
    39  
    40  	az := clients.EnvOS.GetEnv("AVAILABILITY_ZONE")
    41  	if az == "" {
    42  		az = "eu-de-01"
    43  	}
    44  
    45  	networkID := clients.EnvOS.GetEnv("NETWORK_ID")
    46  	if networkID == "" {
    47  		t.Skip("OS_NETWORK_ID env var is missing but ECS test requires using existing network")
    48  	}
    49  
    50  	imageV2Client, err := clients.NewIMSV2Client()
    51  	th.AssertNoErr(t, err)
    52  
    53  	image, err := images.ListImages(imageV2Client, images.ListImagesOpts{
    54  		Name: "Standard_Debian_10_latest",
    55  	})
    56  	th.AssertNoErr(t, err)
    57  
    58  	flavorID, err := flavors.IDFromName(client, "s2.large.2")
    59  	th.AssertNoErr(t, err)
    60  
    61  	createOpts := servers.CreateOpts{
    62  		Name:      ecsName,
    63  		ImageRef:  image[0].Id,
    64  		FlavorRef: flavorID,
    65  		SecurityGroups: []string{
    66  			openstack.DefaultSecurityGroup(t),
    67  		},
    68  		AvailabilityZone: az,
    69  		Networks: []servers.Network{
    70  			{
    71  				UUID: networkID,
    72  			},
    73  		},
    74  	}
    75  
    76  	ecs, err := servers.Create(client, createOpts).Extract()
    77  	th.AssertNoErr(t, err)
    78  
    79  	err = servers.WaitForStatus(client, ecs.ID, "ACTIVE", 1200)
    80  	th.AssertNoErr(t, err)
    81  	t.Logf("Created ECSv2: %s", ecs.ID)
    82  
    83  	ecs, err = servers.Get(client, ecs.ID).Extract()
    84  	th.AssertNoErr(t, err)
    85  	th.AssertEquals(t, ecsName, ecs.Name)
    86  
    87  	nicInfo, err := servers.GetNICs(client, ecs.ID).Extract()
    88  	th.AssertNoErr(t, err)
    89  	tools.PrintResource(t, nicInfo)
    90  
    91  	defer func() {
    92  		t.Logf("Attempting to delete ECSv2: %s", ecs.ID)
    93  
    94  		_, err := servers.Delete(client, ecs.ID).ExtractJobResponse()
    95  		th.AssertNoErr(t, err)
    96  
    97  		err = golangsdk.WaitFor(1200, func() (bool, error) {
    98  			_, err := servers.Get(client, ecs.ID).Extract()
    99  			if err != nil {
   100  				if _, ok := err.(golangsdk.ErrDefault400); ok {
   101  					time.Sleep(10 * time.Second)
   102  					return false, nil
   103  				}
   104  				return false, err
   105  			}
   106  			return true, nil
   107  		})
   108  		th.AssertNoErr(t, err)
   109  
   110  		t.Logf("ECSv2 instance deleted: %s", ecs.ID)
   111  	}()
   112  
   113  	t.Logf("Attempting to update ECSv2: %s", ecs.ID)
   114  
   115  	ecsName = tools.RandomString("update-ecs-", 3)
   116  	updateOpts := servers.UpdateOpts{
   117  		Name: ecsName,
   118  	}
   119  
   120  	_, err = servers.Update(client, ecs.ID, updateOpts).Extract()
   121  	th.AssertNoErr(t, err)
   122  
   123  	t.Logf("ECSv2 successfully updated: %s", ecs.ID)
   124  	th.AssertNoErr(t, err)
   125  
   126  	newECS, err := servers.Get(client, ecs.ID).Extract()
   127  	th.AssertNoErr(t, err)
   128  	th.AssertEquals(t, ecsName, newECS.Name)
   129  }