-
Notifications
You must be signed in to change notification settings - Fork 93
Description
/kind feature
/area provider/ibmcloud
Describe the solution you'd like
[A clear and concise description of what you want to happen.]
Currently in any Power VS service reconcilation are broadly classified into 3 different functionalities
-
Fetch service instance id from either spec or status
Ref:cluster-api-provider-ibmcloud/cloud/scope/powervs_cluster.go
Lines 703 to 722 in 01e1771
serviceInstanceID := s.GetServiceInstanceID() if serviceInstanceID != "" { s.V(3).Info("PowerVS service instance ID is set, fetching details", "id", serviceInstanceID) // if serviceInstanceID is set, verify that it exist and in active state. serviceInstance, _, err := s.ResourceClient.GetResourceInstance(&resourcecontrollerv2.GetResourceInstanceOptions{ ID: &serviceInstanceID, }) if err != nil { return false, err } if serviceInstance == nil { return false, fmt.Errorf("failed to get PowerVS service instance with ID %s", serviceInstanceID) } requeue, err := s.checkServiceInstanceState(*serviceInstance) if err != nil { return false, err } return requeue, nil } -
Check for existing resources in cloud
Ref:cluster-api-provider-ibmcloud/cloud/scope/powervs_cluster.go
Lines 725 to 733 in 01e1771
serviceInstanceID, requeue, err := s.isServiceInstanceExists() if err != nil { return false, err } // Set the status of IBMPowerVSCluster object with serviceInstanceID and ControllerCreated to false as PowerVS service instance is already exist in cloud. if serviceInstanceID != "" { s.SetStatus(infrav1beta2.ResourceTypeServiceInstance, infrav1beta2.ResourceReference{ID: &serviceInstanceID, ControllerCreated: ptr.To(false)}) return requeue, nil } -
Create the service
Ref:cluster-api-provider-ibmcloud/cloud/scope/powervs_cluster.go
Lines 736 to 747 in 01e1771
serviceInstance, err := s.createServiceInstance() if err != nil { return false, fmt.Errorf("failed to create PowerVS service instance: %w", err) } if serviceInstance == nil { return false, fmt.Errorf("created PowerVS service instance is nil") } s.Info("Created PowerVS service instance", "id", serviceInstance.GUID) // Set the status of IBMPowerVSCluster object with serviceInstanceID and ControllerCreated to true as new PowerVS service instance is created. s.SetStatus(infrav1beta2.ResourceTypeServiceInstance, infrav1beta2.ResourceReference{ID: serviceInstance.GUID, ControllerCreated: ptr.To(true)}) return true, nil
Though its working as expected, since we are adding more complex logic as the feature requests, it would be better to refactor to have particular function names rather than generic in most of the cases.
Anything else you would like to add:
[Miscellaneous information that will assist in solving the issue.]
Since we are relaying more on controllerCreated variable to decide upon user passed vs controller created resources, Eventually we are moving agaist K8s generic princile of level triggered events. IT has its own drawbacks against advantages, We also need to think of better way to avoid this.