File: //proc/self/root/usr/lib/python2.7/site-packages/salt/modules/mdata.py
# -*- coding: utf-8 -*-
'''
Module for managaging metadata in SmartOS Zones
.. versionadded:: 2016.3.0
:maintainer: Jorge Schrauwen <sjorge@blackdot.be>
:maturity: new
:platform: smartos
'''
# Import Python libs
from __future__ import absolute_import, print_function, unicode_literals
import logging
# Import Salt libs
import salt.utils.path
import salt.utils.platform
import salt.utils.decorators as decorators
log = logging.getLogger(__name__)
# Function aliases
__func_alias__ = {
'list_': 'list',
'get_': 'get',
'put_': 'put',
'delete_': 'delete',
}
# Define the module's virtual name
__virtualname__ = 'mdata'
@decorators.memoize
def _check_mdata_list():
'''
looks to see if mdata-list is present on the system
'''
return salt.utils.path.which('mdata-list')
@decorators.memoize
def _check_mdata_get():
'''
looks to see if mdata-get is present on the system
'''
return salt.utils.path.which('mdata-get')
@decorators.memoize
def _check_mdata_put():
'''
looks to see if mdata-put is present on the system
'''
return salt.utils.path.which('mdata-put')
@decorators.memoize
def _check_mdata_delete():
'''
looks to see if mdata-delete is present on the system
'''
return salt.utils.path.which('mdata-delete')
def __virtual__():
'''
Provides mdata only on SmartOS
'''
if _check_mdata_list() and not salt.utils.platform.is_smartos_globalzone():
return __virtualname__
return (
False,
'{0} module can only be loaded on SmartOS zones'.format(
__virtualname__
)
)
def list_():
'''
List available metadata
CLI Example:
.. code-block:: bash
salt '*' mdata.list
'''
mdata = _check_mdata_list()
if mdata:
cmd = '{0}'.format(mdata)
return __salt__['cmd.run'](cmd, ignore_retcode=True).splitlines()
return {}
def get_(*keyname):
'''
Get metadata
keyname : string
name of key
.. note::
If no keynames are specified, we get all (public) properties
CLI Example:
.. code-block:: bash
salt '*' mdata.get salt:role
salt '*' mdata.get user-script salt:role
'''
mdata = _check_mdata_get()
ret = {}
if len(keyname) == 0:
keyname = list_()
for k in keyname:
if mdata:
cmd = '{0} {1}'.format(mdata, k)
res = __salt__['cmd.run_all'](cmd, ignore_retcode=True)
ret[k] = res['stdout'] if res['retcode'] == 0 else ''
else:
ret[k] = ''
return ret
def put_(keyname, val):
'''
Put metadata
prop : string
name of property
val : string
value to set
CLI Example:
.. code-block:: bash
salt '*' mdata.list
'''
mdata = _check_mdata_put()
ret = {}
if mdata:
cmd = 'echo {2} | {0} {1}'.format(mdata, keyname, val)
ret = __salt__['cmd.run_all'](cmd, python_shell=True, ignore_retcode=True)
return ret['retcode'] == 0
def delete_(*keyname):
'''
Delete metadata
prop : string
name of property
CLI Example:
.. code-block:: bash
salt '*' mdata.get salt:role
salt '*' mdata.get user-script salt:role
'''
mdata = _check_mdata_delete()
valid_keynames = list_()
ret = {}
for k in keyname:
if mdata and k in valid_keynames:
cmd = '{0} {1}'.format(mdata, k)
ret[k] = __salt__['cmd.run_all'](cmd, ignore_retcode=True)['retcode'] == 0
else:
ret[k] = True
return ret
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4