From 786dc897f416063bddb4fac9141a4d5bfafcc976 Mon Sep 17 00:00:00 2001 From: tjeom-inno Date: Thu, 10 Mar 2022 16:53:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[VMInfo]=20RootDeviceName=20/=20VMBlockDisk?= =?UTF-8?q?=20=EA=B0=92=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cloudit, Ibm-vpc, Azure - "Not visible in Azure" 설정 - Openstack - RootDeviceName mount path 설정 --- .../cloud-driver/drivers/azure/resources/VMHandler.go | 2 ++ .../cloud-driver/drivers/cloudit/resources/VMHandler.go | 2 ++ .../cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go | 2 ++ .../cloud-driver/drivers/openstack/resources/VMHandler.go | 3 ++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cloud-control-manager/cloud-driver/drivers/azure/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/azure/resources/VMHandler.go index 191384552..7bed0d29b 100644 --- a/cloud-control-manager/cloud-driver/drivers/azure/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/azure/resources/VMHandler.go @@ -764,6 +764,8 @@ func (vmHandler *AzureVMHandler) mappingServerInfo(server compute.VirtualMachine Region: *server.Location, }, VMSpecName: string(server.VirtualMachineProperties.HardwareProfile.VMSize), + RootDeviceName: "Not visible in Azure", + VMBlockDisk: "Not visible in Azure", } // Set VM Zone diff --git a/cloud-control-manager/cloud-driver/drivers/cloudit/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/cloudit/resources/VMHandler.go index b983dd1ee..7534f0ffa 100644 --- a/cloud-control-manager/cloud-driver/drivers/cloudit/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/cloudit/resources/VMHandler.go @@ -738,6 +738,8 @@ func (vmHandler *ClouditVMHandler) mappingServerInfo(server server.ServerInfo) i PrivateIP: server.PrivateIp, SSHAccessPoint: fmt.Sprintf("%s:%d", server.AdaptiveIp, SSHDefaultPort), RootDiskSize: strconv.Itoa(server.VolumeSize), + RootDeviceName: "Not visible in Cloudit", + VMBlockDisk: "Not visible in Cloudit", } if server.CreatedAt != "" { timeArr := strings.Split(server.CreatedAt, " ") diff --git a/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go index cea4701f4..21457346c 100644 --- a/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go @@ -905,6 +905,8 @@ func (vmHandler *IbmVMHandler) setVmInfo(instance vpcv1.Instance) (irs.VMInfo, e }, PrivateIP: *instance.PrimaryNetworkInterface.PrimaryIpv4Address, VMUserId: CBDefaultVmUserName, + RootDeviceName: "Not visible in IBMCloud-VPC", + VMBlockDisk: "Not visible in IBMCloud-VPC", } // KeyGet instanceInitializationOptions := &vpcv1.GetInstanceInitializationOptions{} diff --git a/cloud-control-manager/cloud-driver/drivers/openstack/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/openstack/resources/VMHandler.go index 3bc221317..eb3062f36 100644 --- a/cloud-control-manager/cloud-driver/drivers/openstack/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/openstack/resources/VMHandler.go @@ -696,11 +696,12 @@ func (vmHandler *OpenStackVMHandler) mappingServerInfo(server servers.Server) ir // Volume Disk 조회 pages, _ := volumes.List(vmHandler.VolumeClient, volumes.ListOpts{}).AllPages() volList, _ := volumes.ExtractVolumes(pages) - for _, vol := range volList { for _, attach := range vol.Attachments { if attach.ServerID == vmInfo.IId.SystemId { vmInfo.VMBlockDisk = attach.Device + vmInfo.RootDeviceName = attach.Device + break } } } From 618152b658544d4b5fd4bbc50401537ed321c8c9 Mon Sep 17 00:00:00 2001 From: tjeom-inno Date: Mon, 14 Mar 2022 15:11:41 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[VMInfo]=20Ibm-vpc=20RootDiskSize=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 누락된 정보 추가 --- .../ibmcloud-vpc/resources/VMHandler.go | 69 ++++++++++++++++++- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go index 21457346c..a9d22c6d3 100644 --- a/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/ibmcloud-vpc/resources/VMHandler.go @@ -13,6 +13,7 @@ import ( "io/ioutil" "net/url" "os" + "strconv" "strings" "time" ) @@ -681,6 +682,23 @@ func getVMNextHref(next *vpcv1.InstanceCollectionNext) (string, error) { } return "", errors.New("NOT NEXT") } +func getVolumeNextHref(next *vpcv1.VolumeCollectionNext) (string, error) { + if next != nil { + href := *next.Href + u, err := url.Parse(href) + if err != nil { + return "", err + } + paramMap, _ := url.ParseQuery(u.RawQuery) + if paramMap != nil { + safe := paramMap["start"] + if safe != nil && len(safe) > 0 { + return safe[0], nil + } + } + } + return "", errors.New("NOT NEXT") +} func checkVmIID(vmIID irs.IID) error { if vmIID.SystemId == "" && vmIID.NameId == "" { return errors.New("invalid IID") @@ -736,6 +754,46 @@ func existInstance(vmIID irs.IID, vpcService *vpcv1.VpcV1, ctx context.Context) } return false, nil } + +func getRawVolume(volumeIId irs.IID, vpcService *vpcv1.VpcV1, ctx context.Context) (vpcv1.Volume, error) { + if volumeIId.SystemId == "" { + options := &vpcv1.ListVolumesOptions{} + volumes, _, err := vpcService.ListVolumesWithContext(ctx, options) + if err != nil { + return vpcv1.Volume{}, err + } + for { + for _, volume := range volumes.Volumes { + if *volume.Name == volumeIId.NameId { + return volume, nil + } + } + nextstr, _ := getVolumeNextHref(volumes.Next) + if nextstr != "" { + listVolumeOptionsNext := &vpcv1.ListVolumesOptions{ + Start: core.StringPtr(nextstr), + } + volumes, _, err = vpcService.ListVolumesWithContext(ctx, listVolumeOptionsNext) + if err != nil { + return vpcv1.Volume{}, err + } + } else { + break + } + } + err = errors.New(fmt.Sprintf("not found Volume %s", volumeIId.NameId)) + return vpcv1.Volume{}, err + } else { + options := &vpcv1.GetVolumeOptions{} + options.SetID(volumeIId.SystemId) + volume, _, err := vpcService.GetVolumeWithContext(ctx, options) + if err != nil { + return vpcv1.Volume{}, err + } + return *volume, err + } +} + func getRawInstance(vmIID irs.IID, vpcService *vpcv1.VpcV1, ctx context.Context) (vpcv1.Instance, error) { if vmIID.SystemId == "" { options := &vpcv1.ListInstancesOptions{} @@ -903,10 +961,10 @@ func (vmHandler *IbmVMHandler) setVmInfo(instance vpcv1.Instance) (irs.VMInfo, e NameId: *instance.PrimaryNetworkInterface.Subnet.Name, SystemId: *instance.PrimaryNetworkInterface.Subnet.ID, }, - PrivateIP: *instance.PrimaryNetworkInterface.PrimaryIpv4Address, - VMUserId: CBDefaultVmUserName, + PrivateIP: *instance.PrimaryNetworkInterface.PrimaryIpv4Address, + VMUserId: CBDefaultVmUserName, RootDeviceName: "Not visible in IBMCloud-VPC", - VMBlockDisk: "Not visible in IBMCloud-VPC", + VMBlockDisk: "Not visible in IBMCloud-VPC", } // KeyGet instanceInitializationOptions := &vpcv1.GetInstanceInitializationOptions{} @@ -938,5 +996,10 @@ func (vmHandler *IbmVMHandler) setVmInfo(instance vpcv1.Instance) (irs.VMInfo, e vmInfo.SSHAccessPoint = vmInfo.PublicIP + ":22" } } + volumeIId := irs.IID{SystemId: *instance.BootVolumeAttachment.Volume.ID} + rawVolume, err := getRawVolume(volumeIId, vmHandler.VpcService, vmHandler.Ctx) + if err == nil { + vmInfo.RootDiskSize = strconv.Itoa(int(*rawVolume.Capacity)) + } return vmInfo, nil }