|
- # -*- coding: utf-8 -*-
- '''
- Support for Open vSwitch database configuration.
-
- '''
- from __future__ import absolute_import
-
- import logging
- import salt.utils.path
-
- log = logging.getLogger(__name__)
-
-
- def __virtual__():
- '''
- Only load the module if Open vSwitch is installed
- '''
- if salt.utils.path.which('ovs-vsctl'):
- return 'ovs_config'
- return False
-
-
- def _retcode_to_bool(retcode):
- '''
- Evaulates ovs-vsctl command`s retcode value.
-
- Args:
- retcode: Value of retcode field from response.
- '''
- return True if retcode == 0 else False
-
-
- def set(cfg, value, wait=True):
- '''
- Updates a specified configuration entry.
-
- Args:
- cfg/value: a config entry to update
- wait: wait or not for ovs-vswitchd to reconfigure itself before it exits.
-
- CLI Example:
- .. code-block:: bash
-
- salt '*' ovs_config.set other_config:dpdk-init true
- '''
- wait = '' if wait else '--no-wait '
-
- cmd = 'ovs-vsctl {0}set Open_vSwitch . {1}="{2}"'.format(wait, cfg, str(value).lower())
- result = __salt__['cmd.run_all'](cmd)
- return _retcode_to_bool(result['retcode'])
-
-
- def remove(cfg):
- '''
- Removes a specified configuration entry.
-
- Args:
- cfg: a config entry to remove
-
- CLI Example:
- .. code-block:: bash
-
- salt '*' ovs_config.remove other_config
- '''
- if ':' in cfg:
- section, key = cfg.split(':')
- cmd = 'ovs-vsctl remove Open_vSwitch . {} {}'.format(section, key)
- else:
- cmd = 'ovs-vsctl clear Open_vSwitch . ' + cfg
-
- result = __salt__['cmd.run_all'](cmd)
- return _retcode_to_bool(result['retcode'])
-
-
- def list():
- '''
- Return a current config of Open vSwitch
-
- CLI Example:
-
- .. code-block:: bash
-
- salt '*' ovs_config.list
- '''
- cmd = 'ovs-vsctl list Open_vSwitch .'
- result = __salt__['cmd.run_all'](cmd)
-
- if result['retcode'] == 0:
- config = {}
- for l in result['stdout'].splitlines():
- cfg, value = map((lambda x: x.strip()), l.split(' : '))
- if value.startswith('{') and len(value) > 2:
- for i in value[1:-1].replace('"', '').split(', '):
- _k, _v = i.split('=')
- config['{}:{}'.format(cfg,_k)] = _v
- else:
- config[cfg] = value
-
- return config
- else:
- return False
|