diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/main/Test_Resources.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/main/Test_Resources.go index 89dfeb2d6..4c53afef6 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/main/Test_Resources.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/main/Test_Resources.go @@ -308,7 +308,8 @@ func testSecurityHandlerListPrint() { cblogger.Info("4. DeleteSecurity()") cblogger.Info("5. AddRules()") cblogger.Info("6. RemoveRules()") - cblogger.Info("7. Exit") + cblogger.Info("7. ListIID()") + cblogger.Info("8. Exit") } // SecurityGroup @@ -428,6 +429,14 @@ Loop: } fmt.Println("Finish RemoveRules()") case 7: + fmt.Println("Start ListIID() ...") + if result, err := securityHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(result) + } + cblogger.Info("Finish ListIID()") + case 8: fmt.Println("Exit") break Loop } @@ -444,7 +453,8 @@ func testVPCHandlerListPrint() { cblogger.Info("4. DeleteVPC()") cblogger.Info("5. AddSubnet()") cblogger.Info("6. RemoveSubnet()") - cblogger.Info("7. Exit") + cblogger.Info("7. ListIID()") + cblogger.Info("8. Exit") } func testVPCHandler(config Config) { @@ -546,6 +556,14 @@ Loop: } cblogger.Info("Finish RemoveSubnet()") case 7: + cblogger.Info("Start ListIID() ...") + if result, err := vpcHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(result) + } + cblogger.Info("Finish ListIID()") + case 8: cblogger.Info("Exit") break Loop } @@ -560,7 +578,8 @@ func testKeyPairHandlerListPrint() { cblogger.Info("2. GetKey()") cblogger.Info("3. CreateKey()") cblogger.Info("4. DeleteKey()") - cblogger.Info("5. Exit") + cblogger.Info("5. ListIID()") + cblogger.Info("6. Exit") } func testKeyPairHandler(config Config) { resourceHandler, err := getResourceHandler("keypair", config) @@ -624,6 +643,14 @@ Loop: } cblogger.Info("Finish DeleteKey()") case 5: + cblogger.Info("Start ListIID() ...") + if info, err := keyPairHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(info) + } + cblogger.Info("Finish ListIID()") + case 6: cblogger.Info("Exit") break Loop } @@ -716,7 +743,8 @@ func testVMHandlerListPrint() { cblogger.Info("7. SuspendVM()") cblogger.Info("8. ResumeVM()") cblogger.Info("9. TerminateVM()") - cblogger.Info("10. Exit") + cblogger.Info("10. ListIID()") + cblogger.Info("11. Exit") } func testVMHandler(config Config) { @@ -852,6 +880,14 @@ Loop: } cblogger.Info("Finish TerminateVM()") case 10: + cblogger.Info("Start ListIID() ...") + if info, err := vmHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(info) + } + cblogger.Info("Finish ListIID()") + case 11: cblogger.Info("Exit") break Loop } @@ -872,7 +908,8 @@ func testNLBHandlerListPrint() { cblogger.Info("8. RemoveVMs()") cblogger.Info("9. GetVMGroupHealthInfo()") cblogger.Info("10. ChangeHealthCheckerInfo()") - cblogger.Info("11. Exit") + cblogger.Info("11. ListIID()") + cblogger.Info("12. Exit") } func testNLBHandler(config Config) { @@ -1038,8 +1075,16 @@ Loop: } else { spew.Dump(info) } - cblogger.Info("Finish ChangeHealthCheckerInfo()") + case 11: + cblogger.Info("Start ListIID() ...") + if info, err := nlbHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(info) + } + cblogger.Info("Finish ChangeHealthCheckerInfo()") + case 12: cblogger.Info("Exit") break Loop } @@ -1056,7 +1101,8 @@ func testDiskHandlerListPrint() { cblogger.Info("5. ChangeDiskSize()") cblogger.Info("6. AttachDisk()") cblogger.Info("7. DetachDisk()") - cblogger.Info("8. Exit") + cblogger.Info("8. ListIID()") + cblogger.Info("9. Exit") } func testDiskHandler(config Config) { @@ -1158,6 +1204,14 @@ Loop: } cblogger.Info("Finish DetachDisk()") case 8: + cblogger.Info("Start ListIID() ...") + if info, err := diskHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(info) + } + cblogger.Info("Finish ListIID()") + case 9: cblogger.Info("Exit") break Loop } @@ -1172,7 +1226,8 @@ func testMyImageHandlerListPrint() { cblogger.Info("2. GetMyImage()") cblogger.Info("3. SnapshotVM()") cblogger.Info("4. DeleteMyImage()") - cblogger.Info("5. Exit") + cblogger.Info("5. ListIID()") + cblogger.Info("6. Exit") } func testMyImageHandler(config Config) { @@ -1235,6 +1290,13 @@ Loop: } cblogger.Info("Finish DeleteMyImage()") case 5: + fmt.Println("Start ListIID() ...") + if result, err := myimageHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(result) + } + case 6: cblogger.Info("Exit") break Loop } @@ -1434,7 +1496,8 @@ func testClusterHandlerListPrint() { cblogger.Info("8. ChangeNodeGroupScaling()") cblogger.Info("9. UpgradeCluster()") cblogger.Info("10. Create->GET->List->AddNodeGroup->RemoveNodeGroup->SetNodeGroupAutoScaling(Change)->SetNodeGroupAutoScaling(restore)->ChangeNodeGroupScaling->Upgrade->Delete") - cblogger.Info("11. Exit") + cblogger.Info("11. ListIID()") + cblogger.Info("12. Exit") } func testClusterHandler(config Config) { @@ -1933,6 +1996,13 @@ Loop: } cblogger.Info(fmt.Sprintf("Finish %s =====", falowStr)) case 11: + fmt.Println("Start ListIID() ...") + if result, err := clusterHandler.ListIID(); err != nil { + cblogger.Error(err) + } else { + spew.Dump(result) + } + case 12: cblogger.Info("Exit") break Loop } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/ClusterHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/ClusterHandler.go index de1bc9d21..bf58810b3 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/ClusterHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/ClusterHandler.go @@ -2329,6 +2329,43 @@ func validateAtChangeNodeGroupScaling(minNodeSize int, maxNodeSize int) error { } func (nch *NhnCloudClusterHandler) ListIID() ([]*irs.IID, error) { - cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + defer func() { + if r := recover(); r != nil { + err := fmt.Errorf("PANIC!!\n%v\n%v", r, string(debug.Stack())) + cblogger.Error(err) + } + }() + + cblogger.Debug("NHN Cloud Driver: called ListCluster()") + hiscallInfo := getCallLogScheme(nch.RegionInfo.Region, call.CLUSTER, "ListCluster()", "ListIID()") // HisCall logging + + start := call.Start() + + var iidList []*irs.IID + + var listErr error + defer func() { + if listErr != nil { + cblogger.Error(listErr) + LoggingError(hiscallInfo, listErr) + } + }() + + clusterList, err := nhnGetClusterList(nch.ClusterClient) + if err != nil { + listErr = fmt.Errorf("Failed to List Cluster: %v", err) + return nil, listErr + } + + for _, cluster := range clusterList { + var iid irs.IID + iid.SystemId = cluster.UUID + iid.NameId = cluster.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(hiscallInfo, start) + + return iidList, nil } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go index df5495ebc..587de494e 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/DiskHandler.go @@ -660,7 +660,41 @@ func (diskHandler *NhnCloudDiskHandler) getNhnVolumeList() ([]volumes.Volume, er return nhnVolumeList, nil } -func (DiskHandler *NhnCloudDiskHandler) ListIID() ([]*irs.IID, error) { +func (diskHandler *NhnCloudDiskHandler) ListIID() ([]*irs.IID, error) { cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + callLogInfo := getCallLogScheme(diskHandler.RegionInfo.Zone, call.DISK, "diskId", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := volumes.ListOpts{} + + allPages, err := volumes.List(diskHandler.VolumeClient, listOpts).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get disk information from NhnCloud!! : [%v]", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + allDisks, err := volumes.ExtractVolumes(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get disk List from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, disk := range allDisks { + var iid irs.IID + iid.SystemId = disk.ID + iid.NameId = disk.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/KeyPairHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/KeyPairHandler.go index c589d5608..73a5504af 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/KeyPairHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/KeyPairHandler.go @@ -12,7 +12,6 @@ package resources import ( - "errors" "fmt" nhnsdk "github.com/cloud-barista/nhncloud-sdk-go" @@ -32,6 +31,8 @@ func (keyPairHandler *NhnCloudKeyPairHandler) CreateKey(keyPairReqInfo irs.KeyPa cblogger.Info("NHN Cloud Driver: called CreateKey()") callLogInfo := getCallLogScheme(keyPairHandler.RegionInfo.Region, call.VMKEYPAIR, keyPairReqInfo.IId.NameId, "CreateKey()") + fmt.Println(keyPairReqInfo) + if keyPairReqInfo.IId.NameId == "" { newErr := fmt.Errorf("Invalid KeyPair NameId.") cblogger.Error(newErr.Error()) @@ -234,5 +235,39 @@ func mappingKeypairInfo(keypair keypairs.KeyPair) *irs.KeyPairInfo { func (keyPairHandler *NhnCloudKeyPairHandler) ListIID() ([]*irs.IID, error) { cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + callLogInfo := getCallLogScheme(keyPairHandler.RegionInfo.Zone, call.VMKEYPAIR, "keyId", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := keypairs.ListOpts{} + + allPages, err := keypairs.List(keyPairHandler.VMClient, listOpts).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get kypairs information from NhnCloud!! : [%v]", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + allKeypairs, err := keypairs.ExtractKeyPairs(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get kypairs List from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, keypair := range allKeypairs { + var iid irs.IID + iid.NameId = keypair.Name + iid.SystemId = keypair.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/MyImageHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/MyImageHandler.go index e84e10423..fbfddcfa3 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/MyImageHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/MyImageHandler.go @@ -487,7 +487,41 @@ func (myImageHandler *NhnCloudMyImageHandler) isPublicImage(myImageIID irs.IID) return isPublicImage, nil } -func (ImageHandler *NhnCloudMyImageHandler) ListIID() ([]*irs.IID, error) { - cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") +func (myImageHandler *NhnCloudMyImageHandler) ListIID() ([]*irs.IID, error) { + cblogger.Info("NHN Cloud Driver: called ListIID()") + callLogInfo := getCallLogScheme(myImageHandler.RegionInfo.Region, call.MYIMAGE, "ListMyImage()", "ListMyImage()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := images.ListOpts{ + Visibility: images.ImageVisibilityPrivate, // Note : Private image only + } + allPages, err := images.List(myImageHandler.ImageClient, listOpts).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get NHN Cloud Image pages. [%v]", err.Error()) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + nhnImageList, err := images.ExtractImages(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get NHN Cloud Image List. [%v]", err.Error()) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, nhnImage := range nhnImageList { + var iid irs.IID + iid.SystemId = nhnImage.ID + iid.NameId = nhnImage.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/NLBHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/NLBHandler.go index 096f0a3ea..da73e1aa3 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/NLBHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/NLBHandler.go @@ -1875,5 +1875,40 @@ func (nlbHandler *NhnCloudNLBHandler) getVPCIdWithVpcsubnetId(vpcsubnetId string func (NLBHandler *NhnCloudNLBHandler) ListIID() ([]*irs.IID, error) { cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + callLogInfo := getCallLogScheme(NLBHandler.RegionInfo.Zone, call.NLB, "nlbId", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := loadbalancers.ListOpts{} + + allPages, err := loadbalancers.List(NLBHandler.NetworkClient, listOpts).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get disk information from NhnCloud!! : [%v]", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + allNlbs, err := loadbalancers.ExtractLoadBalancers(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get disk List from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, nlb := range allNlbs { + var iid irs.IID + iid.SystemId = nlb.ID + iid.NameId = nlb.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil + } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/SecurityHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/SecurityHandler.go index ed5586876..2130255df 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/SecurityHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/SecurityHandler.go @@ -666,6 +666,38 @@ func (securityHandler *NhnCloudSecurityHandler) getRuleIdFromRuleInfo(systemId s func (securityHandler *NhnCloudSecurityHandler) ListIID() ([]*irs.IID, error) { cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") -} + callLogInfo := getCallLogScheme(securityHandler.RegionInfo.Zone, call.SECURITYGROUP, "secId", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + allPages, err := secgroups.List(securityHandler.VMClient).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get securitygroups information from NhnCloud!! : [%v]", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + + } + allSecugroups, err := secgroups.ExtractSecurityGroups(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get securitygroups List from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, secgroups := range allSecugroups { + var iid irs.IID + iid.SystemId = secgroups.ID + iid.NameId = secgroups.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil +} diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VMHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VMHandler.go index 6de9c7eb4..e49710160 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VMHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VMHandler.go @@ -1314,6 +1314,38 @@ func (vmHandler *NhnCloudVMHandler) createWinInitUserData(passWord string) (*str } func (vmHandler *NhnCloudVMHandler) ListIID() ([]*irs.IID, error) { - cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + cblogger.Info("NHN Cloud Driver: called ListIID()") + callLogInfo := getCallLogScheme(vmHandler.RegionInfo.Region, call.VM, "ListIID()", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := servers.ListOpts{ + Limit: 100, + } + allPages, err := servers.List(vmHandler.VMClient, listOpts).AllPages() + if err != nil { + cblogger.Error(err.Error()) + LoggingError(callLogInfo, err) + return nil, err + } + serverList, err := servers.ExtractServers(allPages) + if err != nil { + cblogger.Error(err.Error()) + LoggingError(callLogInfo, err) + return nil, err + } + + for _, server := range serverList { + var iid irs.IID + iid.SystemId = server.ID + iid.NameId = server.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil } diff --git a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go index a064c6d14..56005c451 100644 --- a/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go +++ b/cloud-control-manager/cloud-driver/drivers/nhncloud/resources/VPCHandler.go @@ -730,5 +730,39 @@ func (vpcHandler *NhnCloudVPCHandler) isConnectedToGateway(vpcId string) (bool, func (vpcHandler *NhnCloudVPCHandler) ListIID() ([]*irs.IID, error) { cblogger.Info("Cloud driver: called ListIID()!!") - return nil, errors.New("Does not support ListIID() yet!!") + callLogInfo := getCallLogScheme(vpcHandler.RegionInfo.Zone, call.VPCSUBNET, "vpdId", "ListIID()") + + start := call.Start() + + var iidList []*irs.IID + + listOpts := vpcs.ListOpts{} + + allPages, err := vpcs.List(vpcHandler.NetworkClient, listOpts).AllPages() + if err != nil { + newErr := fmt.Errorf("Failed to Get VPC information from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + allVpcs, err := vpcs.ExtractVPCs(allPages) + if err != nil { + newErr := fmt.Errorf("Failed to Get VPC List from NhnCloud!! : [%v] ", err) + cblogger.Error(newErr.Error()) + LoggingError(callLogInfo, newErr) + return make([]*irs.IID, 0), newErr + } + + for _, vpc := range allVpcs { + var iid irs.IID + iid.SystemId = vpc.ID + iid.NameId = vpc.Name + + iidList = append(iidList, &iid) + } + + LoggingInfo(callLogInfo, start) + + return iidList, nil }