- Notifications
You must be signed in to change notification settings - Fork 304
Open
Description
If you guys don't already have it, it would be awesome if there was a general OCI Client with at least the common methods in it, and maybe a way to expose the specific client.
I have a function app that runs on a schedule turning resources on and off based on tags. I created a class like this:
import oci #Main Class class OCIInstance: def __init__(self, resource, oci_client): self.resource = resource self.oci_client = oci_client def start(self): raise NotImplementedError("Start not implemented for base class.") def stop(self): raise NotImplementedError("Stop not implemented for base class.") #Implementations of it class ComputeInstance(OCIInstance): def start(self): self.oci_client.instance_action(self.resource.identifier, 'START') def stop(self): self.oci_client.instance_action(self.resource.identifier, 'SOFTSTOP') class AnalyticsInstance(OCIInstance): def start(self): self.oci_client.start_analytics_instance(self.resource.identifier) def stop(self): self.oci_client.stop_analytics_instance(self.resource.identifier) #Factory for it def instanceFactory(resource, signer): resource_type = resource.resource_type if resource_type == "Instance": oci_client = oci.core.ComputeClient(config={}, signer=signer) return ComputeInstance(resource, oci_client) elif resource_type == "AnalyticsInstance": oci_client = oci.analytics.AnalyticsClient(config={}, signer=signer) return AnalyticsInstance(resource, oci_client) # Add more types as neededI then run a query like this query all resources where (definedTags.namespace = 'Schedule') and loop through the results adding them to a List of OCIInstance. I can then start and stop them from that list with a simple call to .start() or .stop().
This feels like a lot to do... it'd be way nicer if I could just call the client from the search results or if I could use a generic client for basic operations.
Metadata
Metadata
Assignees
Labels
No labels