diff --git a/_states/jenkins_approval.py b/_states/jenkins_approval.py
index e4b21b4..2764745 100644
--- a/_states/jenkins_approval.py
+++ b/_states/jenkins_approval.py
@@ -1,51 +1,52 @@
 import logging
+
 logger = logging.getLogger(__name__)
 
 approve_signature_groovy = """\
 import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval
 import org.jenkinsci.plugins.scriptsecurity.scripts.languages.GroovyLanguage
 import org.jenkinsci.plugins.scriptsecurity.scripts.ApprovalContext
-def signature = '{signature}'
+def signature = '${signature}'
 def scriptApproval = ScriptApproval.get()
 def approvedSignatures = Arrays.asList(scriptApproval.approvedSignatures)
-if(approvedSignatures.contains(signature)){{
+if(approvedSignatures.contains(signature)){
     print("EXISTS")
-}}else{{
-    try{{
+}else{
+    try{
         scriptApproval.pendingSignatures.add(new ScriptApproval.PendingSignature(signature, false, ApprovalContext.create()))
         scriptApproval.approveSignature(signature)
-        if(Arrays.asList(scriptApproval.approvedSignatures).contains(signature)){{
+        if(Arrays.asList(scriptApproval.approvedSignatures).contains(signature)){
             print("SUCCESS")
-        }}else{{
+        }else{
             print("FAILED")
-        }}
-    }}catch(e){{
+        }
+    }catch(e){
         print(e)
-    }}
-}}
-""" # noqa
+    }
+}
+"""  # noqa
 
 deny_signature_groovy = """\
 import org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval
 import org.jenkinsci.plugins.scriptsecurity.scripts.languages.GroovyLanguage
 import org.jenkinsci.plugins.scriptsecurity.scripts.ApprovalContext
-def signature = '{signature}'
+def signature = '${signature}'
 def scriptApproval = ScriptApproval.get()
 def approvedSignatures = Arrays.asList(scriptApproval.approvedSignatures)
-if(approvedSignatures.contains(signature)){{
-    try{{
+if(approvedSignatures.contains(signature)){
+    try{
         scriptApproval.denySignature(signature)
-        if(!scriptApproval.approvedSignatures.contains(signature)){{
+        if(!scriptApproval.approvedSignatures.contains(signature)){
             print("SUCCESS")
-        }}else{{
+        }else{
             print("FAILED")
-        }}
-    }}catch(e){{
+        }
+    }catch(e){
         print(e)
-    }}
-}}else{{
+    }
+}else{
     print("NOT PRESENT")
-}}
+}
 
 
 """
@@ -81,22 +82,25 @@
     if test:
         status = "SUCCESS"
         ret['changes'][name] = status
-        ret['comment'] = 'Jenkins script approval config %s %s' % (name, status.lower())
+        ret['comment'] = 'Jenkins script approval config %s %s' % (
+            name, status.lower())
     else:
         call_result = __salt__['jenkins_common.call_groovy_script'](
-            approve_signature_groovy, {"signature":name})
-        if call_result["code"] == 200 and call_result["msg"] in ["SUCCESS", "EXISTS"]:
+            approve_signature_groovy, {"signature": name})
+        if call_result["code"] == 200 and call_result["msg"] in [
+                "SUCCESS", "EXISTS"]:
             status = call_result["msg"]
             if status == "SUCCESS":
                 ret['changes'][name] = status
-            ret['comment'] = 'Jenkins script approval config %s %s' % (name, status.lower())
+            ret['comment'] = 'Jenkins script approval config %s %s' % (
+                name, status.lower())
             result = True
         else:
             status = 'FAILED'
             logger.error(
                 "Jenkins script approval API call failure: %s", call_result["msg"])
             ret['comment'] = 'Jenkins script approval API call failure: %s' % (call_result[
-                                                                           "msg"])
+                "msg"])
     ret['result'] = None if test else result
     return ret
 
@@ -119,21 +123,24 @@
     if test:
         status = "SUCCESS"
         ret['changes'][name] = status
-        ret['comment'] = 'Jenkins script approval config %s %s' % (name, status.lower())
+        ret['comment'] = 'Jenkins script approval config %s %s' % (
+            name, status.lower())
     else:
         call_result = __salt__['jenkins_common.call_groovy_script'](
-            deny_signature_groovy, {"signature":name})
-        if call_result["code"] == 200 and call_result["msg"] in ["SUCCESS", "NOT PRESENT"]:
+            deny_signature_groovy, {"signature": name})
+        if call_result["code"] == 200 and call_result["msg"] in [
+                "SUCCESS", "NOT PRESENT"]:
             status = call_result["msg"]
             if status == "SUCCESS":
                 ret['changes'][name] = status
-            ret['comment'] = 'Jenkins script approval config %s %s' % (name, status.lower())
+            ret['comment'] = 'Jenkins script approval config %s %s' % (
+                name, status.lower())
             result = True
         else:
             status = 'FAILED'
             logger.error(
                 "Jenkins script approval API call failure: %s", call_result["msg"])
             ret['comment'] = 'Jenkins script approval lib API call failure: %s' % (call_result[
-                                                                           "msg"])
+                "msg"])
     ret['result'] = None if test else result
     return ret
