Module netapp_ontap.resource

Copyright © 2021 NetApp Inc. All rights reserved.

This module defines the base Resource class. This class is implemented by each resource object for the system. The methods here allow the client application to perform actions against the host (GET, POST, PATCH, DELETE) via its REST interface.

Classes

class Resource (*args, **kwargs)

An abstract class which is the base of all resources.

A resource represents a moment in time snapshot of an object which exists on the connected host. This object can be fetched, updated, and returned to the host in order to perform meaningful work.

Initialize the instance of the resource.

Any keyword arguments are set on the instance as properties. For example, if the class was named 'MyResource', then this statement would be true:

MyResource(name='foo').name == 'foo'

Args

*args
Each positional argument represents a parent key as used in the URL of the object. That is, each value will be used to fill in a segment of the URL which refers to some parent object. The order of these arguments must match the order they are specified in the URL, from left to right.
**kwargs
each entry will have its key set as an attribute name on the instance and its value will be the value of that attribute.

Static methods

def from_dict(input_dict: dict, *args, strict: bool = False) -> Resource

Construct a resource from a dictionary.

This is essentially a named constructor that returns a Resource object from the values provided. It will verify that all required parent keys are present in the input.

Args

input_dict
A set of key/value pairs which are set on the returned instance as attributes.
*args
Each positional argument represents a parent key as used in the URL of the object. That is, each value will be used to fill in a segment of the URL which refers to some parent object. The order of these arguments must match the order they are specified in the URL, from left to right.
strict
If set to True, any value in the input dictionary that is not part of the defined schema will cause an exception to be raised. If set to False, any value in the input schema will be accepted and set as a member of the object.

Returns

A resource object that can be used to interact with the host and contains the data from the input dictionary.

Raises

NetAppRestError: If not all required parent keys are present in the input or extra input is provided and strict is set to True.

Instance variables

instance_location

Calculate this instance's location based on its key.

For example:

snapshot = Snapshot(volume=Volume(uuid='1234'), uuid='5678')
assert snapshot._keys == ['volume.uuid', 'uuid']
assert snapshot.volume.uuid == '1234'
assert snapshot.uuid == '5678'
assert snapshot.instance_location == '/api/storage/volumes/1234/snapshots/5678'

Returns

A string representing the full path to this resource. When interacting with the host, this location is used as the URL.

path_keys

All keys that are not native to the object (foreign keys).

In terms of URL, this would typically be all of the keys except for the last key. For example, if the path to the object was /api/storage/volumes/55be2443/snapshots/005056bb3fd7, then this value would be ['volume.uuid']

Returns

A list of strings. Entries in the list are dotted which represent the object they belong to and the attribute on that object.

Methods

def get_collection_url(self, connection: HostConnection = None) -> str

Return the URL for collection-based actions (GET, PATCH, DELETE).

Args

connection
The HostConnection object to use for this API call. If unset, tries to use the connection which is set globally for the library or from the current context.

Returns

A URL to perform the action on in the form of a string.

def get_connection(self) -> HostConnection

Returns the HostConnection for this object.

If there is a HostConnection active as the current context (i.e. using a with statement), then that connection will be returned. Second, if a connection has been associated with this resource (by calling Resource.set_connection()), then that connection will be returned. Finally, it will return the connection that is associated with CONNECTION.

Returns

A connection to be used for API calls.

Raises

NetAppRestError: If there is no connection available to use either set on the object or on the library.

def poll(self, hydrate: bool = False, timeout: int = None, interval: int = None) -> NetAppResponse

Wait for a job which is running for this resource is complete.

This function may be called when the client knows there was a job started after a previous API call was made for this object. It will go get the state of that job and then block until it is complete. If hydrate is set to True, this function will continue to block until a subsequent GET call on the resource completes and refreshes the attributes of the resource.

Args

hydrate
If set to True, after the response is received from the call, a GET call will be made to refresh all fields of the object.
timeout
Seconds to wait before timing out of poll request. If set, the value overrides the timeout set in the active HostConnection. Otherwise, the timeout set in the active HostConnection is used.
interval
How long to wait between making REST API calls to check the job status. If set, the value overrides the interval set in the active HostConnection. Otherwise, the interval set in the active HostConnection is used.

Returns

A NetAppResponse object containing the details of the HTTP response.

Raises

NetAppRestError: If the API call returned a status code >= 400

def set_connection(self, connection: HostConnection)

Sets a HostConnection object on the resource.

This connection will be used for all host operation (GET, PATCH, etc.) and overrides any connection that might be set at the library level.

Args

connection
The HostConnection object to use for all future API calls on this object.
def to_dict(self, only: tuple = None) -> dict

Return a dictionary representing the object (and its sub-objects).

Args

only
If a subset of fields are desired instead of all fields belonging to this object, only may be passed as a tuple of strings.

Returns

A dictionary representing the state of this object and any child objects it may contain.

Raises

NetAppRestError: If the current values stored in the resource don't match the schema defined for the resource, then an error will be raised. For example, if a field is supposed to be an integer and a non-integer value is set on it.