Merge pull request #10 from salt-formulas/pr_track_script

add track_script option
diff --git a/README.rst b/README.rst
index 9ae28f3..e984b98 100644
--- a/README.rst
+++ b/README.rst
@@ -95,6 +95,40 @@
             - 192.168.10.2
             interface: eth0
 
+Track/vrrp scripts for keepalived instance:
+
+.. code-block:: yaml
+
+    keepalived:
+      cluster:
+        enabled: True
+        instance:
+          VIP2:
+            priority: 100
+            virtual_router_id: 10
+            password: pass
+            addresses:
+            - 192.168.11.1
+            - 192.168.11.2
+            interface: eth0
+            track_script: haproxy_check
+          VIP3:
+            priority: 100
+            virtual_router_id: 11
+            password: pass
+            addresses:
+            - 192.168.10.1
+            - 192.168.10.2
+            interface: eth0
+            track_script: random_check
+        vrrp_scripts:
+          random_check:
+            interval: 10
+            content: |
+              #!/bin/bash
+              exit $(($RANDOM%2))
+
+
 Read more
 =========
 
diff --git a/keepalived/cluster.sls b/keepalived/cluster.sls
index e6559c5..0747411 100644
--- a/keepalived/cluster.sls
+++ b/keepalived/cluster.sls
@@ -41,6 +41,21 @@
 
 {% endfor %}
 
+{%- for name, script in cluster.get('vrrp_scripts', {}).iteritems() %}
+keepalived_vrrp_script_{{ name }}:
+    file.managed:
+    - name: /usr/local/bin/vrrp_script_{{ name }}.sh
+    - mode: 755
+    - source:
+      - salt://keepalived/files/vrrp_script_{{ name }}.sh
+      - salt://keepalived/files/vrrp_script.sh
+    - template: jinja
+    - defaults:
+          script: {{ script|yaml }}
+    - require_in:
+      - service: keepalived_service
+{% endfor %}
+
 keepalived_service:
   service.running:
   - name: {{ cluster.service }}
diff --git a/keepalived/files/keepalived.conf b/keepalived/files/keepalived.conf
index d183bae..7767963 100644
--- a/keepalived/files/keepalived.conf
+++ b/keepalived/files/keepalived.conf
@@ -2,6 +2,16 @@
 
 ! Configuration File for keepalived
 
+{%- for name, script in cluster.get('vrrp_scripts', {}).iteritems() %}
+vrrp_script {{ name }} {
+  script "/usr/local/bin/vrrp_script_{{ name }}.sh"
+  interval {{ script.get('interval', 2) }} # check every Ns
+  weight {{ script.get('weight', 2) }}
+  fall {{ script.get('fall', 2) }}   # require N failures for KO
+  rise {{ script.get('rise', 2) }}   # require N successes for OK
+}
+{%- endfor %}
+
 {%- for instance_name, instance in cluster.instance.iteritems() %}
 {%- if instance.get('enabled', True) %}
 vrrp_instance {{ instance_name }} {
@@ -34,6 +44,11 @@
         {{ instance.address }}
         {%- endif %}
     }
+    {%- if instance.track_script is defined %}
+    track_script {
+      {{ instance.track_script }}
+    }
+    {%- endif %}
 }
 {%- endif %}
 {%- endfor %}
diff --git a/keepalived/files/vrrp_script.sh b/keepalived/files/vrrp_script.sh
new file mode 100644
index 0000000..d1fca94
--- /dev/null
+++ b/keepalived/files/vrrp_script.sh
@@ -0,0 +1 @@
+{{ script.content }}
diff --git a/tests/pillar/keepalived_cluster.sls b/tests/pillar/keepalived_cluster.sls
index 724a0e0..8dbb4ae 100644
--- a/tests/pillar/keepalived_cluster.sls
+++ b/tests/pillar/keepalived_cluster.sls
@@ -2,12 +2,27 @@
   cluster:
     enabled: True
     instance:
+      VIP0:
+        priority: 100
+        virtual_router_id: 10
+        password: pass
+        addresses:
+        - 192.168.11.1
+        - 192.168.11.2
+        interface: eth0
       VIP1:
-        priority: 100 
-        virtual_router_id: 51
+        priority: 100
+        virtual_router_id: 11
         password: pass
         addresses:
         - 192.168.10.1
         - 192.168.10.2
         interface: eth0
+        track_script: random_check
+    vrrp_scripts:
+      random_check:
+        interval: 10
+        content: |
+          #!/bin/bash
+          exit $(($RANDOM%2))