diff --git a/README.rst b/README.rst
index f9bfbe9..4d9b9a2 100644
--- a/README.rst
+++ b/README.rst
@@ -648,6 +648,18 @@
             branch: master # optional, default master
             implicit: true # optional default true
 
+Artifactory server enforcing
+
+.. code-block:: yaml
+
+    jenkins:
+      client:
+        artifactory:
+          my-artifactory-server:
+            enabled: true
+            url: https://path-to-my-library
+            credential_id: github
+
 Usage
 =====
 
diff --git a/_states/jenkins_artifactory.py b/_states/jenkins_artifactory.py
new file mode 100644
index 0000000..03a015c
--- /dev/null
+++ b/_states/jenkins_artifactory.py
@@ -0,0 +1,97 @@
+import logging
+logger = logging.getLogger(__name__)
+
+add_artifactory_groovy = u"""\
+import jenkins.model.*
+import org.jfrog.*
+import org.jfrog.hudson.*
+def inst = Jenkins.getInstance()
+def desc = inst.getDescriptor("org.jfrog.hudson.ArtifactoryBuilder")
+def server =  desc.getArtifactoryServers().find{{it -> it.name.equals("{name}")}}
+if(server &&
+   server.getName().equals("{name}") &&
+   server.getUrl().equals("{serverUrl}") &&
+   server.getDeployerCredentialsConfig().getCredentialsId().equals("{credentialsId}") &&
+   server.getResolverCredentialsConfig().getCredentialsId().equals("{credentialsId}")){{
+        print("EXISTS")
+}}else{{
+    desc.getArtifactoryServers().removeIf{{it -> it.name.equals("{name}")}}
+    def newServer = new ArtifactoryServer(
+      "{name}",
+      "{serverUrl}",
+      new CredentialsConfig("", "", "{credentialsId}"),
+      new CredentialsConfig("", "", "{credentialsId}"),
+      300,
+      false,
+      null)
+    desc.getArtifactoryServers().add(newServer)
+    desc.save()
+    print("ADDED/CHANGED")
+}}
+"""  # noqa
+
+delete_artifactory_groovy = u"""\
+def inst = Jenkins.getInstance()
+def desc = inst.getDescriptor("org.jfrog.hudson.ArtifactoryBuilder")
+if(desc.getArtifactoryServers().removeIf{{it -> it.name.equals("{name}")}}){{
+    print("REMOVED")
+}}else{{
+    print("NOT PRESENT")
+}}
+"""  # noqa
+
+
+def present(name, url, credential_id, **kwargs):
+    """
+    Jenkins artifactory present state method
+
+    :param name: artifactory server name
+    :param url: artifactory server url
+    :param credential_id: artifactory server credential id
+    :returns: salt-specified state dict
+    """
+    return _plugin_call(name, url, credential_id, add_artifactory_groovy, ["ADDED/CHANGED", "EXISTS"], **kwargs)
+
+
+def absent(name, **kwargs):
+    """
+    Jenkins artifactory present state method
+
+    :param name: artifactory server name
+    :returns: salt-specified state dict
+    """
+    return _plugin_call(name, None, None, delete_artifactory_groovy, ["REMOVED", "NOT PRESENT"], **kwargs)
+
+
+def _plugin_call(name, url, credentialsId, template, success_msgs, **kwargs):
+    test = __opts__['test']  # noqa
+    ret = {
+        'name': name,
+        'changes': {},
+        'result': False,
+        'comment': '',
+    }
+    result = False
+    if test:
+        status = success_msgs[0]
+        ret['changes'][name] = status
+        ret['comment'] = 'Jenkins artifactory server %s %s' % (
+            name, status.lower())
+    else:
+        call_result = __salt__['jenkins_common.call_groovy_script'](
+            template, {"name": name, "serverUrl": url, "credentialsId": credentialsId})
+        if call_result["code"] == 200 and call_result["msg"] in success_msgs:
+            status = call_result["msg"]
+            if status == success_msgs[0]:
+                ret['changes'][name] = status
+            ret['comment'] = 'Jenkins artifactory server %s %s' % (
+                name, status.lower())
+            result = True
+        else:
+            status = 'FAILED'
+            logger.error(
+                "Jenkins artifactory API call failure: %s", call_result["msg"])
+            ret['comment'] = 'Jenkins artifactory API call failure: %s' % (call_result[
+                "msg"])
+    ret['result'] = None if test else result
+    return ret
diff --git a/jenkins/client/artifactory.sls b/jenkins/client/artifactory.sls
new file mode 100644
index 0000000..7f06e20
--- /dev/null
+++ b/jenkins/client/artifactory.sls
@@ -0,0 +1,14 @@
+{% from "jenkins/map.jinja" import client with context %}
+{% for name, artifactory in client.get('artifactory',{}).iteritems() %}
+{% if artifactory.get('enabled', True) %}
+jenkins_artifactory_server_{{ name }}:
+  jenkins_artifactory.present:
+  - name: {{ artifactory.get('name', name) }}
+  - url: {{ artifactory.get('url', '') }}
+  - credential_id: {{ artifactory.get('credential_id', '') }}
+{% else %}
+jenkins_artifactory_server_{{ name }}_disable:
+   jenkins_artifactory.absent:
+   - name: {{ artifactory.get('name', name) }}
+{% endif %}
+{% endfor %}
\ No newline at end of file
diff --git a/jenkins/client/init.sls b/jenkins/client/init.sls
index 553fe6b..8578af9 100644
--- a/jenkins/client/init.sls
+++ b/jenkins/client/init.sls
@@ -44,6 +44,9 @@
 {%- if client.approved_scripts is defined %}
   - jenkins.client.approval
 {%- endif %}
+{%- if client.artifactory is defined %}
+  - jenkins.client.artifactory
+{%- endif %}
 
 
 jenkins_client_install:
