@@ -929,29 +929,45 @@ func (m *PowerVSMachineScope) GetZone() string {
929
929
}
930
930
931
931
// GetServiceInstanceID returns the service instance id.
932
- func (m * PowerVSMachineScope ) GetServiceInstanceID () string {
932
+ func (m * PowerVSMachineScope ) GetServiceInstanceID () ( string , error ) {
933
933
if m .IBMPowerVSCluster .Status .ServiceInstance != nil && m .IBMPowerVSCluster .Status .ServiceInstance .ID != nil {
934
- return * m .IBMPowerVSCluster .Status .ServiceInstance .ID
934
+ return * m .IBMPowerVSCluster .Status .ServiceInstance .ID , nil
935
935
}
936
936
if m .IBMPowerVSCluster .Spec .ServiceInstanceID != "" {
937
- return m .IBMPowerVSCluster .Spec .ServiceInstanceID
937
+ return m .IBMPowerVSCluster .Spec .ServiceInstanceID , nil
938
938
}
939
939
if m .IBMPowerVSCluster .Spec .ServiceInstance != nil && m .IBMPowerVSCluster .Spec .ServiceInstance .ID != nil {
940
- return * m .IBMPowerVSCluster .Spec .ServiceInstance .ID
940
+ return * m .IBMPowerVSCluster .Spec .ServiceInstance .ID , nil
941
941
}
942
- return ""
942
+ // If we are not able to find service instance id, derive it from name if defined.
943
+ if m .IBMPowerVSCluster .Spec .ServiceInstance != nil && m .IBMPowerVSCluster .Spec .ServiceInstance .Name == nil {
944
+ return "" , fmt .Errorf ("failed to find service instance id as both name and id are not set" )
945
+ }
946
+ serviceInstance , err := m .ResourceClient .GetServiceInstance ("" , * m .IBMPowerVSCluster .Spec .ServiceInstance .Name , ptr .To (m .GetZone ()))
947
+ if err != nil {
948
+ m .Error (err , "failed to get Power VS service instance id" , "serviceInstanceName" , * m .IBMPowerVSCluster .Spec .ServiceInstance .Name )
949
+ return "" , err
950
+ }
951
+ // It's safe to directly dereference GUID as its already done in NewPowerVSMachineScope
952
+ return * serviceInstance .GUID , nil
943
953
}
944
954
945
955
// SetProviderID will set the provider id for the machine.
946
- func (m * PowerVSMachineScope ) SetProviderID (id * string ) {
956
+ func (m * PowerVSMachineScope ) SetProviderID (instanceID string ) error {
947
957
// Based on the ProviderIDFormat version the providerID format will be decided.
948
- if options .ProviderIDFormatType (options .ProviderIDFormat ) == options .ProviderIDFormatV2 {
949
- if id != nil {
950
- m .IBMPowerVSMachine .Spec .ProviderID = ptr .To (fmt .Sprintf ("ibmpowervs://%s/%s/%s/%s" , m .GetRegion (), m .GetZone (), m .GetServiceInstanceID (), * id ))
951
- }
952
- } else {
958
+ if options .ProviderIDFormatType (options .ProviderIDFormat ) == options .ProviderIDFormatV1 {
953
959
m .IBMPowerVSMachine .Spec .ProviderID = ptr .To (fmt .Sprintf ("ibmpowervs://%s/%s" , m .Machine .Spec .ClusterName , m .IBMPowerVSMachine .Name ))
960
+ return nil
961
+ }
962
+ m .V (3 ).Info ("setting provider id in v2 format" )
963
+
964
+ serviceInstanceID , err := m .GetServiceInstanceID ()
965
+ if err != nil {
966
+ m .Error (err , "failed to get service instance ID" )
967
+ return err
954
968
}
969
+ m .IBMPowerVSMachine .Spec .ProviderID = ptr .To (fmt .Sprintf ("ibmpowervs://%s/%s/%s/%s" , m .GetRegion (), m .GetZone (), serviceInstanceID , instanceID ))
970
+ return nil
955
971
}
956
972
957
973
// GetMachineInternalIP returns the machine's internal IP.
0 commit comments