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 }