Add ability to configure secret keys
Change-Id: I119e00a4b7feaec9d93401ef9e825ee46d304be4
diff --git a/_states/rundeck_secret.py b/_states/rundeck_secret.py
new file mode 100644
index 0000000..c162a75
--- /dev/null
+++ b/_states/rundeck_secret.py
@@ -0,0 +1,72 @@
+import logging
+
+LOG = logging.getLogger(__name__)
+
+
+def __virtual__():
+ if 'rundeck.get_project' not in __salt__:
+ return (
+ False,
+ 'The rundeck_project state module cannot be loaded: rundeck is '
+ 'unavailable',
+ )
+ return True
+
+
+def present(name, type, content):
+ result = {
+ 'name': name,
+ 'changes': {},
+ 'result': False,
+ 'comment': '',
+ 'pchanges': {},
+ }
+ if __opts__['test'] == True:
+ result['comment'] = 'Nothing to create in the test mode.'
+ result['result'] = None
+ return result
+ ok, secret = __salt__['rundeck.get_secret_metadata'](name)
+ if ok:
+ do_update = secret is not None
+ ok, msg = __salt__['rundeck.upload_secret'](name, type, content,
+ update=do_update)
+ if ok:
+ result['changes'][name] = 'UPLOADED'
+ result['comment'] = (
+ "The {} secret key with the {} type was successfully uploaded."
+ .format(name, type))
+ result['result'] = True
+ else:
+ result['comment'] = msg
+ else:
+ result['comment'] = secret
+ return result
+
+
+def absent(name):
+ result = {
+ 'name': name,
+ 'changes': {},
+ 'result': False,
+ 'comment': '',
+ 'pchanges': {},
+ }
+ if __opts__['test'] == True:
+ result['comment'] = 'Nothing to remove in the test mode.'
+ result['result'] = None
+ return result
+ ok, secret = __salt__['rundeck.get_secret_metadata'](name)
+ if ok:
+ if not secret:
+ result['result'] = True
+ return result
+ ok, msg = __salt__['rundeck.delete_secret'](name)
+ if ok:
+ result['changes'][name] = 'DELETED'
+ result['comment'] = "Secret key {} was removed.".format(name)
+ result['result'] = True
+ else:
+ result['comment'] = msg
+ else:
+ result['comment'] = secret
+ return result