1515package _import
1616
1717import (
18- "encoding/json"
1918 "fmt"
2019 "os"
2120 "strings"
2221 "time"
2322
24- "github.com/IBM/go-sdk-core/v4/core"
25- rcv2 "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2"
23+ "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev1/controller"
24+ "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev2/controllerv2"
25+ "github.com/IBM-Cloud/bluemix-go/crn"
26+ "github.com/IBM-Cloud/bluemix-go/models"
2627 "github.com/spf13/cobra"
2728 "k8s.io/apimachinery/pkg/util/wait"
2829 "k8s.io/klog/v2"
@@ -85,37 +86,30 @@ pvsadm image import -n upstream-core-lon04 -b <BUCKETNAME> --object rhel-83-1003
8586 }
8687
8788 bxCli , err := client .NewClientWithEnv (apikey , pkg .Options .Environment , pkg .Options .Debug )
88-
89- if err != nil {
90- return err
91- }
92-
93- auth , err := core .NewIamAuthenticator (apikey , "" , "" , "" , false , nil )
9489 if err != nil {
9590 return err
9691 }
9792
98- resourceController , err := client .NewResourceControllerV2 (& rcv2.ResourceControllerV2Options {
99- Authenticator : auth ,
100- })
101- if err != nil {
102- return err
103- }
104-
105- serviceListOptions := resourceController .ResourceControllerV2 .NewListResourceInstancesOptions ().SetType ("service_instance" )
93+ var svcs []models.ServiceInstanceV2
10694 if opt .COSInstanceName != "" {
107- serviceListOptions .SetName (opt .COSInstanceName )
95+ svcs , err = bxCli .ResourceClientV2 .ListInstances (controllerv2.ServiceInstanceQuery {
96+ Type : "service_instance" ,
97+ Name : opt .COSInstanceName ,
98+ })
99+ } else {
100+ svcs , err = bxCli .ResourceClientV2 .ListInstances (controllerv2.ServiceInstanceQuery {
101+ Type : "service_instance" ,
102+ })
108103 }
109- instances , _ , err := resourceController .ResourceControllerV2 .ListResourceInstances (serviceListOptions )
110104 if err != nil {
111105 return err
112106 }
113107
114108 // Step 1: Find where COS for the bucket
115- cosOfBucket := func (resources []rcv2. ResourceInstance ) * rcv2. ResourceInstance {
109+ cosOfBucket , id , crn := func (resources []models. ServiceInstanceV2 ) ( string , string , crn. CRN ) {
116110 for _ , resource := range resources {
117- if strings . Contains ( * resource .Crn , "cloud-object-storage" ) {
118- s3client , err = client .NewS3Client (bxCli , * resource .Name , opt .Region )
111+ if resource .Crn . ServiceName == "cloud-object-storage" {
112+ s3client , err = client .NewS3Client (bxCli , resource .Name , opt .Region )
119113 if err != nil {
120114 continue
121115 }
@@ -125,18 +119,18 @@ pvsadm image import -n upstream-core-lon04 -b <BUCKETNAME> --object rhel-83-1003
125119 }
126120 for _ , bucket := range buckets .Buckets {
127121 if * bucket .Name == opt .BucketName {
128- return & resource
122+ return resource . Name , resource . Guid , resource . Crn
129123 }
130124 }
131125 }
132126 }
133- return nil
134- }(instances . Resources )
127+ return "" , "" , crn. CRN {}
128+ }(svcs )
135129
136- if cosOfBucket == nil {
130+ if cosOfBucket == "" {
137131 return fmt .Errorf ("failed to find the COS instance for the bucket mentioned: %s" , opt .BucketName )
138132 }
139- klog .Infof ("%s bucket found in the %s[ID:%s] COS instance" , opt .BucketName , * cosOfBucket . Name , * cosOfBucket . ID )
133+ klog .Infof ("%s bucket found in the %s[ID:%s] COS instance" , opt .BucketName , cosOfBucket , id )
140134
141135 //Step 2: Check if s3 object exists
142136 objectExists := s3client .CheckIfObjectExists (opt .BucketName , opt .ImageFilename )
@@ -150,51 +144,42 @@ pvsadm image import -n upstream-core-lon04 -b <BUCKETNAME> --object rhel-83-1003
150144
151145 // frame the unique name for the service credential
152146 if opt .ServiceCredName == "" {
153- opt .ServiceCredName = serviceCredPrefix + "-" + * cosOfBucket . Name
147+ opt .ServiceCredName = serviceCredPrefix + "-" + cosOfBucket
154148 }
155149
156- keys , err := resourceController . ListResourceKeysBySourceCrn ( opt . ServiceCredName , * cosOfBucket . Crn )
150+ keys , err := bxCli . GetResourceKeys ( id )
157151 if err != nil {
158152 return fmt .Errorf ("failed to list the service credentials: %v" , err )
159153 }
160154
161- cred := new (rcv2.Credentials )
155+ var cred map [string ]interface {}
156+ var ok bool
162157 if len (keys ) == 0 {
163158 // Create the service credential if does not exist
164159 klog .Infof ("Auto Generating the COS Service credential for importing the image with name: %s" , opt .ServiceCredName )
165- createResourceKeyOptions := & client.CreateResourceKeyOptions {
166- CreateResourceKeyOptions : resourceController .ResourceControllerV2 .NewCreateResourceKeyOptions (opt .ServiceCredName , * cosOfBucket .ID ),
167- Parameters : map [string ]interface {}{"HMAC" : true },
160+ CreateServiceKeyRequest := controller.CreateServiceKeyRequest {
161+ Name : opt .ServiceCredName ,
162+ SourceCRN : crn ,
163+ Parameters : map [string ]interface {}{"HMAC" : true },
168164 }
169-
170- key , _ , err := resourceController .CreateResourceKey (createResourceKeyOptions )
165+ newKey , err := bxCli .ResourceServiceKey .CreateKey (CreateServiceKeyRequest )
171166 if err != nil {
172167 return err
173168 }
174- cred = key .Credentials
169+ cred , ok = newKey .Credentials [ "cos_hmac_keys" ].( map [ string ] interface {})
175170 } else {
176171 // Use the service credential already created
177172 klog .Infof ("Reading the existing service credential: %s" , opt .ServiceCredName )
178- cred = keys [0 ].Credentials
173+ cred , ok = keys [0 ].Credentials [ "cos_hmac_keys" ].( map [ string ] interface {})
179174 }
180175
181- jsonString , err := json .Marshal (cred .GetProperty ("cos_hmac_keys" ))
182- if err != nil {
183- return err
184- }
185- h := struct {
186- AccessKeyID string `json:"access_key_id"`
187- SecretKeyID string `json:"secret_access_key"`
188- }{}
189- err = json .Unmarshal (jsonString , & h )
190- if err != nil {
191- klog .Errorf ("failed to unmarshal the access credentials from the auto generated service credential" )
192- return err
176+ if ! ok {
177+ return fmt .Errorf ("failed to get the accessKey and secretKey from service credential" )
193178 }
194179
195180 // Step 4: Assign the Access Key and Secret Key for further operation
196- opt .AccessKey = h . AccessKeyID
197- opt .SecretKey = h . SecretKeyID
181+ opt .AccessKey = cred [ "access_key_id" ].( string )
182+ opt .SecretKey = cred [ "secret_access_key" ].( string )
198183
199184 }
200185
0 commit comments