github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/examples/container/V2containers/AttachStorageV2/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"time"
     9  
    10  	bluemix "github.com/IBM-Cloud/bluemix-go"
    11  	"github.com/IBM-Cloud/bluemix-go/session"
    12  	"github.com/IBM-Cloud/bluemix-go/trace"
    13  
    14  	v2 "github.com/IBM-Cloud/bluemix-go/api/container/containerv2"
    15  )
    16  
    17  func main() {
    18  
    19  	var clusterID string
    20  	flag.StringVar(&clusterID, "clusterID", "", "Cluster ID or Name")
    21  
    22  	var workerID string
    23  	flag.StringVar(&workerID, "workerID", "", "worker ID of the worker node in the cluster")
    24  
    25  	var volumeID string
    26  	flag.StringVar(&volumeID, "volumeID", "", "volumeID of the volume to be attched to the worker")
    27  
    28  	flag.Parse()
    29  
    30  	if clusterID == "" || workerID == "" || volumeID == "" {
    31  		flag.Usage()
    32  		os.Exit(1)
    33  	}
    34  	c := new(bluemix.Config)
    35  
    36  	trace.Logger = trace.NewLogger("true")
    37  
    38  	sess, err := session.New(c)
    39  	if err != nil {
    40  		log.Fatal(err)
    41  	}
    42  
    43  	if err != nil {
    44  		log.Fatal(err)
    45  	}
    46  
    47  	target := v2.ClusterTargetHeader{}
    48  
    49  	clusterClient, err := v2.New(sess)
    50  	if err != nil {
    51  		log.Fatal(err)
    52  	}
    53  	workersAPI := clusterClient.Workers()
    54  
    55  	attachVolumeRequest := v2.VolumeRequest{
    56  		Cluster:  clusterID,
    57  		VolumeID: volumeID,
    58  		Worker:   workerID,
    59  	}
    60  	volumeattached, errC := workersAPI.CreateStorageAttachment(attachVolumeRequest, target)
    61  	if errC != nil {
    62  		fmt.Println(errC)
    63  		return
    64  	}
    65  	fmt.Println("Volume attached: ", volumeattached)
    66  	volumeAttachmentID := volumeattached.Id
    67  	time.Sleep(10 * time.Second)
    68  
    69  	volumeAttachment, errG := workersAPI.GetStorageAttachment(clusterID, workerID, volumeAttachmentID, target)
    70  	if errG != nil {
    71  		fmt.Println(errG)
    72  		return
    73  	}
    74  	fmt.Println("Volume attachment with worker nodes: ", volumeAttachment)
    75  	time.Sleep(5 * time.Second)
    76  
    77  	detachVolumeRequest := v2.VolumeRequest{
    78  		Cluster:            clusterID,
    79  		VolumeAttachmentID: volumeAttachmentID,
    80  		Worker:             workerID,
    81  	}
    82  	out, errD := workersAPI.DeleteStorageAttachment(detachVolumeRequest, target)
    83  	if errD != nil {
    84  		fmt.Println(errD)
    85  		return
    86  	}
    87  	fmt.Println("Volume attachment removed", out)
    88  }