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))