Skip to content

General OCI Client? #800

@hdonati-CFU

Description

@hdonati-CFU

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 needed

I 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions