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
