| # -*- coding: utf-8 -*- |
| ''' |
| Management of Open vSwitch configuration |
| ======================================== |
| |
| The OVS config can be managed with the ovs_config state module: |
| |
| .. code-block:: yaml |
| |
| other_config:dpdk-init: |
| ovs_config.present: |
| - value: True |
| |
| other_config:dpdk-extra: |
| ovs_config.present: |
| - value: -n 12 --vhost-owner libvirt-qemu:kvm --vhost-perm 0664 |
| |
| external_ids: |
| ovs_config.absent |
| ''' |
| |
| |
| def __virtual__(): |
| ''' |
| Only make these states available if Open vSwitch is installed. |
| ''' |
| return 'ovs_config.list' in __salt__ |
| |
| |
| def present(name, value, wait=True): |
| ''' |
| Ensures that the named config exists, eventually creates it. |
| |
| Args: |
| name/value: The name/value of the config entry. |
| wait: Whether wait for ovs-vswitchd to reconfigure itself according to the modified database. |
| ''' |
| ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} |
| ovs_config = __salt__['ovs_config.list']() |
| |
| if name in ovs_config and ovs_config[name] == str(value).lower(): |
| ret['result'] = True |
| ret['comment'] = '{0} is already set to {1}.'.format(name, value) |
| else: |
| config_updated = __salt__['ovs_config.set'](name, value, wait) |
| if config_updated: |
| ret['result'] = True |
| ret['comment'] = '{0} is updated.'.format(name) |
| ret['changes'] = { name: 'Updated to {0}'.format(value) } |
| else: |
| ret['result'] = False |
| ret['comment'] = 'Unable to update config of {0}.'.format(name) |
| |
| return ret |
| |
| |
| def absent(name): |
| ''' |
| Ensures that the named config does not exist, eventually deletes it. |
| |
| Args: |
| name: The name of the config entry. |
| |
| ''' |
| ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} |
| ovs_config = __salt__['ovs_config.list']() |
| |
| if ':' in name and name not in ovs_config: |
| ret['result'] = True |
| ret['comment'] = '{0} does not exist.'.format(name) |
| else: |
| config_removed = __salt__['ovs_config.remove'](name) |
| if config_removed: |
| ret['result'] = True |
| ret['comment'] = '{0} is removed.'.format(name) |
| ret['changes'] = { name: '{0} removed'.format(name) } |
| else: |
| ret['result'] = False |
| ret['comment'] = 'Unable to delete config of {0}.'.format(name) |
| |
| return ret |