github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/css/v1/snapshots_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/tools"
    10  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/css/v1/clusters"
    11  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/css/v1/snapshots"
    12  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/obs"
    13  	th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
    14  )
    15  
    16  func TestSnapshotWorkflow(t *testing.T) {
    17  	agencyID := clients.EnvOS.GetEnv("AGENCY_ID")
    18  	if agencyID == "" {
    19  		t.Skipf("OS_AGENCY_ID is required for this test")
    20  	}
    21  
    22  	client, err := clients.NewCssV1Client()
    23  	th.AssertNoErr(t, err)
    24  
    25  	clusterID := createCluster(t, client)
    26  	defer deleteCluster(t, client, clusterID)
    27  	bucketName := createBucket(t)
    28  	defer deleteBucket(t, bucketName)
    29  
    30  	basicOpts := snapshots.UpdateConfigurationOpts{
    31  		Bucket: bucketName,
    32  		Agency: agencyID,
    33  	}
    34  	err = snapshots.UpdateConfiguration(client, clusterID, basicOpts)
    35  	th.AssertNoErr(t, err)
    36  
    37  	policyOpts := snapshots.PolicyCreateOpts{
    38  		Prefix:     "snap",
    39  		Period:     "00:00 GMT+03:00",
    40  		KeepDay:    1,
    41  		Enable:     "true",
    42  		DeleteAuto: "true",
    43  	}
    44  	th.AssertNoErr(t, snapshots.PolicyCreate(client, policyOpts, clusterID))
    45  
    46  	policy, err := snapshots.PolicyGet(client, clusterID)
    47  	th.AssertNoErr(t, err)
    48  	th.AssertEquals(t, basicOpts.Bucket, policy.Bucket)
    49  	th.AssertEquals(t, basicOpts.SnapshotCmkID, policy.SnapshotCmkID)
    50  	th.AssertEquals(t, policyOpts.Prefix, policy.Prefix)
    51  	tools.PrintResource(t, policy)
    52  
    53  	th.AssertNoErr(t, snapshots.Disable(client, clusterID))
    54  }
    55  
    56  func createBucket(t *testing.T) string {
    57  	bucketName := "snapshot-sdk-test-bucket"
    58  	createOpts := &obs.CreateBucketInput{
    59  		Bucket: bucketName,
    60  	}
    61  	obsClient, err := clients.NewOBSClient()
    62  	th.AssertNoErr(t, err)
    63  
    64  	_, err = obsClient.CreateBucket(createOpts)
    65  	th.AssertNoErr(t, err)
    66  	return bucketName
    67  }
    68  
    69  func deleteBucket(t *testing.T, bucket string) {
    70  	obsClient, err := clients.NewOBSClient()
    71  	th.AssertNoErr(t, err)
    72  
    73  	objects, err := obsClient.ListObjects(&obs.ListObjectsInput{Bucket: bucket})
    74  	th.AssertNoErr(t, err)
    75  
    76  	objectsToDelete := make([]obs.ObjectToDelete, len(objects.Contents))
    77  	for i, obj := range objects.Contents {
    78  		objectsToDelete[i] = obs.ObjectToDelete{
    79  			Key: obj.Key,
    80  		}
    81  	}
    82  	_, err = obsClient.DeleteObjects(&obs.DeleteObjectsInput{
    83  		Bucket:  bucket,
    84  		Quiet:   true,
    85  		Objects: objectsToDelete,
    86  	})
    87  	th.AssertNoErr(t, err)
    88  }
    89  
    90  func createCluster(t *testing.T, client *golangsdk.ServiceClient) string {
    91  	vpcID := clients.EnvOS.GetEnv("VPC_ID")
    92  	subnetID := clients.EnvOS.GetEnv("NETWORK_ID")
    93  
    94  	if vpcID == "" || subnetID == "" {
    95  		t.Skip("Both `OS_VPC_ID`, `OS_NETWORK_ID` need to be defined")
    96  	}
    97  
    98  	sgID := openstack.DefaultSecurityGroup(t)
    99  
   100  	opts := clusters.CreateOpts{
   101  		Name: tools.RandomString("snap-cluster-", 4),
   102  		Instance: &clusters.InstanceSpec{
   103  			Flavor: "css.medium.8",
   104  
   105  			Volume: &clusters.Volume{
   106  				Type: "COMMON",
   107  				Size: 40,
   108  			},
   109  			Nics: &clusters.Nics{
   110  				VpcID:           vpcID,
   111  				SubnetID:        subnetID,
   112  				SecurityGroupID: sgID,
   113  			},
   114  			AvailabilityZone: "eu-de-02",
   115  		},
   116  		InstanceNum: 1,
   117  		DiskEncryption: &clusters.DiskEncryption{
   118  			Encrypted: "0",
   119  		},
   120  	}
   121  	created, err := clusters.Create(client, opts)
   122  	th.AssertNoErr(t, err)
   123  
   124  	th.AssertNoErr(t, clusters.WaitForClusterOperationSucces(client, created.ID, timeout))
   125  	return created.ID
   126  }
   127  
   128  func deleteCluster(t *testing.T, client *golangsdk.ServiceClient, id string) {
   129  	err := clusters.Delete(client, id)
   130  	th.AssertNoErr(t, err)
   131  }