Bring in ovs_config module/state
Change-Id: I32463501947d6f60e41351102365f435b63651d5
diff --git a/_states/ovs_config.py b/_states/ovs_config.py
new file mode 100644
index 0000000..bcc8ad6
--- /dev/null
+++ b/_states/ovs_config.py
@@ -0,0 +1,81 @@
+# -*- 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