github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/cce/v1/nodes_test.go (about)

     1  package v1
     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/cce"
    10  	nodesv1 "github.com/opentelekomcloud/gophertelekomcloud/openstack/cce/v1/nodes"
    11  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/cce/v3/nodes"
    12  	th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
    13  	"github.com/stretchr/testify/suite"
    14  )
    15  
    16  type testNodes struct {
    17  	suite.Suite
    18  
    19  	vpcID     string
    20  	subnetID  string
    21  	clusterID string
    22  }
    23  
    24  func TestNodes(t *testing.T) {
    25  	suite.Run(t, new(testNodes))
    26  }
    27  
    28  func (s *testNodes) SetupSuite() {
    29  	t := s.T()
    30  	s.vpcID = clients.EnvOS.GetEnv("VPC_ID")
    31  	s.subnetID = clients.EnvOS.GetEnv("NETWORK_ID")
    32  	if s.vpcID == "" || s.subnetID == "" {
    33  		t.Skip("OS_VPC_ID and OS_NETWORK_ID are required for this test")
    34  	}
    35  	s.clusterID = cce.CreateCluster(t, s.vpcID, s.subnetID)
    36  }
    37  
    38  func (s *testNodes) TearDownSuite() {
    39  	t := s.T()
    40  	if s.clusterID != "" {
    41  		cce.DeleteCluster(t, s.clusterID)
    42  		s.clusterID = ""
    43  	}
    44  }
    45  
    46  func (s *testNodes) TestNodeLifecycle() {
    47  	t := s.T()
    48  	client, err := clients.NewCceV3Client()
    49  	th.AssertNoErr(t, err)
    50  
    51  	privateIP := "192.168.1.12" // suppose used subnet is 192.168.0.0/16
    52  
    53  	kp := cce.CreateKeypair(t)
    54  	defer cce.DeleteKeypair(t, kp)
    55  
    56  	opts := nodes.CreateOpts{
    57  		Kind:       "Node",
    58  		ApiVersion: "v3",
    59  		Metadata: nodes.CreateMetaData{
    60  			Name: "nodes-test",
    61  		},
    62  		Spec: nodes.Spec{
    63  			Flavor: "s2.xlarge.2",
    64  			Az:     "eu-de-01",
    65  			Os:     "EulerOS 2.5",
    66  			Login: nodes.LoginSpec{
    67  				SshKey: kp,
    68  			},
    69  			RootVolume: nodes.VolumeSpec{
    70  				Size:       40,
    71  				VolumeType: "SSD",
    72  			},
    73  			DataVolumes: []nodes.VolumeSpec{
    74  				{
    75  					Size:       100,
    76  					VolumeType: "SSD",
    77  				},
    78  			},
    79  			Count: 1,
    80  			NodeNicSpec: nodes.NodeNicSpec{
    81  				PrimaryNic: nodes.PrimaryNic{
    82  					SubnetId: s.subnetID,
    83  					FixedIPs: []string{privateIP},
    84  				},
    85  			},
    86  			K8sTags: map[string]string{
    87  				"app": "sometag",
    88  			},
    89  			Taints: []nodes.TaintSpec{
    90  				{
    91  					Key:    "dedicated",
    92  					Value:  "database",
    93  					Effect: "NoSchedule",
    94  				},
    95  			},
    96  		},
    97  	}
    98  
    99  	node, err := nodes.Create(client, s.clusterID, opts).Extract()
   100  	th.AssertNoErr(t, err)
   101  
   102  	nodeID := node.Metadata.Id
   103  
   104  	th.AssertNoErr(t, golangsdk.WaitFor(1800, func() (bool, error) {
   105  		n, err := nodes.Get(client, s.clusterID, nodeID).Extract()
   106  		if err != nil {
   107  			return false, err
   108  		}
   109  		if n.Status.Phase == "Active" {
   110  			return true, nil
   111  		}
   112  		time.Sleep(10 * time.Second)
   113  		return false, nil
   114  	}))
   115  
   116  	state, err := nodes.Get(client, s.clusterID, nodeID).Extract()
   117  	th.AssertNoErr(t, err)
   118  	th.AssertEquals(t, privateIP, state.Status.PrivateIP)
   119  
   120  	defer func() {
   121  		th.AssertNoErr(t, nodes.Delete(client, s.clusterID, nodeID).ExtractErr())
   122  		err = golangsdk.WaitFor(1800, func() (bool, error) {
   123  			_, err := nodes.Get(client, s.clusterID, nodeID).Extract()
   124  			if err != nil {
   125  				if _, ok := err.(golangsdk.ErrDefault404); ok {
   126  					return true, nil
   127  				}
   128  				return false, err
   129  			}
   130  			return false, nil
   131  		})
   132  		th.AssertNoErr(t, err)
   133  	}()
   134  
   135  	clientV1, err := clients.NewCceV1Client()
   136  	th.AssertNoErr(t, err)
   137  
   138  	k8Name := state.Status.PrivateIP
   139  	k8Node, err := nodesv1.Get(clientV1, s.clusterID, k8Name).Extract()
   140  	th.AssertNoErr(t, err)
   141  	val, ok := k8Node.Metadata.Labels["app"]
   142  	th.AssertEquals(t, true, ok)
   143  	th.AssertEquals(t, val, opts.Spec.K8sTags["app"])
   144  }