Source code for zenossapi.routers.properties

# -*- coding: utf-8 -*-

"""
Zenoss properties_router
"""

from zenossapi.apiclient import ZenossAPIClientError
from zenossapi.routers import ZenossRouter


[docs]class PropertiesRouter(ZenossRouter): """ Class for interacting with Zenoss properties. """ def __init__(self, url, headers, ssl_verify): super(PropertiesRouter, self).__init__(url, headers, ssl_verify, 'properties_router', 'PropertiesRouter') self.id = None def __repr__(self): if self.id: identifier = "id {0}".format(self.id) else: identifier = "at {0}".format(hex(id(self))) return '<{0} object {1}>'.format( type(self).__name__, identifier ) def _refresh(self, property_data): """ Refresh the attributes of the object, e.g. after deleting a local copy. Arguments: property_data (dict): New attribute values """ skip = ['api_action', 'api_endpoint', 'api_headers', 'api_url', 'ssl_verify'] for pd in property_data: if pd in skip: continue setattr(self, pd, property_data[pd])
[docs] def list_properties(self, uid, params=None, sort=None, sort_dir='ASC'): """ Get a list of ZenProperties for the uid context. Arguments: uid (str): UID of the object to list properties for. params (dict): Search parameters to filter the properties list on. sort (str): Sort key for the properties list. sort_dir (str): Sort direction, either ASC or DESC Returns: dict(int, list(dict)): :: { 'total': Total count of properties returned. 'properties': List of properties found. } """ properties_data = self._router_request( self._make_request_data( 'getZenProperties', dict( uid=uid, params=params, sort=sort, dir=sort_dir, ) ) ) return dict( total=properties_data['totalCount'], properties=properties_data['data'], )
[docs] def get_properties(self, uid, params=None): """ Get ZenossProperties objects for the properties of a uid context. Arguments: uid (str): UID of the object to get properties for. params (dict): Search parameters for filter the properties on. Returns: dict(int, list(ZenossProperty)): :: { 'total': Total count of properties returned. 'properties': List of ZenossProperty objects. } """ properties_data = self.list_properties(uid, params=params) props = dict( total=properties_data['total'], properties=[] ) for prop in properties_data['properties']: props['properties'].append( ZenossProperty( self.api_url, self.api_headers, self.ssl_verify, prop, ) ) return props
[docs] def list_local_properties(self, uid): """ Get a list of properties set locally to the specified UID. Arguments: uid (str): UID to get local properties for. Returns: dict(int, list(dict)): :: { 'total': Total count of properties returned. 'properties': List of properties found. } """ return self.list_properties(uid, params=dict(islocal='1'))
[docs] def get_local_properties(self, uid): """ Get ZenossProperty objects for the local properties of a specified uid. Arguments: uid (str): UID to get local properties for. Returns: dict(int, list(ZenossProperty)): :: { 'total': Total count of properties returned. 'properties': List of ZenossProperty objects. } """ properties_data = self.list_local_properties(uid) props = dict( total=properties_data['total'], properties=[] ) for prop in properties_data['properties']: props['properties'].append( ZenossProperty( self.api_url, self.api_headers, self.ssl_verify, prop, ) ) return props
[docs] def get_property(self, uid, zproperty): """ Get a single ZenossProperty Arguments: uid (str): UID to get the property of. zproperty (str): ID of the property to get. Returns: ZenossProperty: """ prop_data = self._router_request( self._make_request_data( 'getZenProperties', dict( uid=uid, params=dict( id=zproperty, ) ) ) ) return ZenossProperty( self.api_url, self.api_headers, self.ssl_verify, prop_data['data'][0] )
[docs] def list_custom_properties(self, uid, params=None, sort=None, sort_dir='ASC'): """ Get a list of cProperties for the uid context. Arguments: uid (str): UID of the object to list properties for. params (dict): Search parameters to filter the properties list on. sort (str): Sort key for the properties list. sort_dir (str): Sort direction, either ASC or DESC Returns: dict(int, list(dict)): :: { 'total': Total count of properties returned. 'properties': List of properties found. } """ properties_data = self._router_request( self._make_request_data( 'getCustomProperties', dict( uid=uid, params=params, sort=sort, dir=sort_dir, ) ) ) return dict( total=properties_data['totalCount'], properties=properties_data['data'], )
[docs] def get_custom_properties(self, uid, params=None): """ Get ZenossCustomProperties objects for the cProperties of a uid context. Arguments: uid (str): UID of the object to get properties for. params (dict): Search parameters for filter the properties on. Returns: dict(int, list(ZenossCustomProperty)): :: { 'total': Total count of properties returned. 'properties': List of ZenossCustomProperty objects. } """ properties_data = self.list_custom_properties(uid, params=params) props = dict( total=properties_data['total'], properties=[] ) for prop in properties_data['properties']: props['properties'].append( ZenossCustomProperty( self.api_url, self.api_headers, self.ssl_verify, prop, ) ) return props
[docs] def get_custom_property(self, uid, cproperty): """ Get a single ZenossCustomProperty Arguments: uid (str): UID to get the property of. cproperty (str): ID of the property to get. Returns: ZenossCustomProperty: """ prop_data = self._router_request( self._make_request_data( 'getCustomProperties', dict( uid=uid, params=dict( id=cproperty, ) ) ) ) return ZenossCustomProperty( self.api_url, self.api_headers, self.ssl_verify, prop_data['data'][0] )
[docs] def set_property_value(self, uid, zproperty, value=None): """ Sets (or updates) the local value of a property Arguments: value: The new value for the property, type varies by property. Returns: bool: """ property_data = self._router_request( self._make_request_data( 'setZenProperty', dict( uid=uid, zProperty=zproperty, value=value, ) ) ) return property_data['data']
[docs] def delete_property(self, uid, zproperty): """ Delete a ZenProperty. Arguments: uid (str): UID to delete the property from zproperty (str): ID of the property to delete. Returns: bool: """ self._router_request( self._make_request_data( 'deleteZenProperty', dict( uid=uid, zProperty=zproperty ) ) ) return True
[docs]class ZenossProperty(PropertiesRouter): """ Class for ZenProperties """ def __init__(self, url, headers, ssl_verify, property_data): super(ZenossProperty, self).__init__(url, headers, ssl_verify) self.id = property_data['id'] self.category = property_data['category'] self.description = property_data['description'] self.islocal = property_data['islocal'] self.label = property_data['label'] self.value = property_data['value'] self.valueAsString = property_data['valueAsString'] self.path = 'Devices{0}'.format(property_data['path']) self.type = property_data['type'] self.options = []
[docs] def set_value(self, path=None, value=None): """ Sets (or updates) the local value of a property Arguments: path (str): UID of the node to set the property for. value (str): The new value for the property, type varies by property. Returns: bool: """ if path: self.path = path property_data = self.set_property_value(self.path, self.id, value=value) self.value = property_data['value'] self.valueAsString = property_data['valueAsString'] self.islocal = '1' return True
[docs] def delete(self): """ Delete the local instance of a property. Returns: bool: """ if self.islocal: self.delete_property(self.path, self.id) defprop = self.list_properties(self.path, params=dict(id=self.id)) self._refresh(defprop['properties'][0]) return True return False
[docs]class ZenossCustomProperty(PropertiesRouter): """ Class for Zenoss CustomProperties """ def __init__(self, url, headers, ssl_verify, property_data): super(ZenossCustomProperty, self).__init__(url, headers, ssl_verify) self.id = property_data['id'] self.islocal = property_data['islocal'] self.label = property_data['label'] self.value = property_data['value'] self.valueAsString = property_data['valueAsString'] self.path = 'Devices{0}'.format(property_data['path']) self.type = property_data['type'] self.options = property_data['options']
[docs] def set_value(self, path=None, value=None): """ Sets (or updates) the local value of a custom property Arguments: path (str): UID of the node to set the property for. value (str): The new value for the property, type varies by property. Returns: bool: """ if path: self.path = path property_data = self.set_property_value(self.path, self.id, value=value) self.value = property_data['value'] self.valueAsString = property_data['valueAsString'] self.islocal = '1' return True
[docs] def delete(self): """ Delete the local instance of a property. Returns: bool: """ if self.islocal: self.delete_property(self.path, self.id) defprop = self.list_custom_properties(self.path, params=dict(id=self.id)) self._refresh(defprop['properties'][0]) return True return False