diff --git a/Vagrantfile b/Vagrantfile index efe6e7a..3ebbaae 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -5,20 +5,23 @@ test -d /srv/pillar || mkdir /srv/pillar test -f /tmp/travis/top.sls && cp /{tmp/travis,srv/salt}/top.sls cp {/tmp/travis,/srv/salt}/top.sls cp /tmp/travis/top_pillar.sls /srv/pillar/top.sls -cp /srv/{salt/pillar.example,pillar/monit.sls} +ln -s /srv/salt/pillar.example /srv/pillar/monit.sls SCRIPT Vagrant.configure(2) do |config| - config.vm.define "xenial" do |xenial| - xenial.vm.box = "xenial" + config.vm.provider 'virtualbox' do |v| + v.linked_clone = true if Vagrant::VERSION =~ /^1.8/ + end + + config.vm.define "monit" do |monit| + monit.vm.box = "ubuntu/xenial64" - xenial.vm.synced_folder ".", "/vagrant", disabled: true - xenial.vm.synced_folder ".", "/srv/salt" - xenial.vm.synced_folder ".travis", "/tmp/travis" + monit.vm.synced_folder ".", "/vagrant", disabled: true + monit.vm.synced_folder ".", "/srv/salt" + monit.vm.synced_folder ".travis", "/tmp/travis" - xenial.vm.provision "shell", inline: $script - xenial.vm.provision :salt do |salt| - salt.bootstrap_script = "../salt-bootstrap/bootstrap-salt.sh" + monit.vm.provision "shell", inline: $script + monit.vm.provision :salt do |salt| salt.masterless = true salt.minion_config = ".travis/minion" salt.run_highstate = false diff --git a/monit/config.sls b/monit/config.sls index 0d6b6d0..1da97c7 100644 --- a/monit/config.sls +++ b/monit/config.sls @@ -7,9 +7,10 @@ - template: jinja - makedirs: True - mode: '0700' - - context: - config_includes: {{ monit.config_includes }} - http_access: {{ monit.http_access }} +{%- if monit.service.status == 'running' %} + - watch_in: + - service: {{ monit.service.name }} +{%- endif %} {#- This is the mail alert configuration #} {% if monit.mail_alert is defined %} @@ -18,8 +19,10 @@ - source: salt://monit/files/mail - template: jinja - makedirs: True - - context: - mail_alert: {{ monit.mail_alert }} +{%- if monit.service.status == 'running' %} + - watch_in: + - service: {{ monit.service.name }} +{%- endif %} {% endif %} {#- This is populated by modules configuration @@ -28,5 +31,8 @@ file.managed: - source: salt://monit/files/modules - template: jinja - - context: - modules: {{ monit.modules }} + - makedirs: True +{%- if monit.service.status == 'running' %} + - watch_in: + - service: {{ monit.service.name }} +{%- endif %} \ No newline at end of file diff --git a/monit/defaults.yaml b/monit/defaults.yaml index 85172c5..fb1e0fe 100644 --- a/monit/defaults.yaml +++ b/monit/defaults.yaml @@ -6,6 +6,10 @@ monit: config_includes: '/etc/monit/conf.d' service: name: monit + enable: True + status: running + daemon_interval: 10 + logfile: syslog http_access: port: 2812 bind: 127.0.0.1 diff --git a/monit/files/mail b/monit/files/mail index ae53046..77ecd02 100644 --- a/monit/files/mail +++ b/monit/files/mail @@ -1,15 +1,16 @@ -{%- for email in mail_alert.users -%} -set alert {{email}} ON { invalid, timeout, resource, size, timestamp } +{%- from "monit/map.jinja" import monit with context -%} +{%- for email in monit.mail_alert.users -%} +set alert {{ email }} ON { invalid, timeout, resource, size, timestamp } {% endfor %} -{%- if mail_alert.account.email -%} -set mail-format { from: {{mail_alert.account.email}} } +{%- if monit.mail_alert.account.email -%} +set mail-format { from: {{ monit.mail_alert.account.email }} } {%- endif -%} -{%- if mail_alert.account.server and mail_alert.account.port %} -set mailserver {{mail_alert.account.server}} port {{mail_alert.account.port}} - {%- if mail_alert.account.email and 'password' in mail_alert.account and mail_alert.account.password %} - username "{{mail_alert.account.email}}" password "{{mail_alert.account.password}}" +{%- if monit.mail_alert.account.server and monit.mail_alert.account.port %} +set mailserver {{ monit.mail_alert.account.server }} port {{ monit.mail_alert.account.port }} + {%- if monit.mail_alert.account.email and 'password' in monit.mail_alert.account and monit.mail_alert.account.password %} + username "{{ monit.mail_alert.account.email }}" password "{{ monit.mail_alert.account.password }}" using tlsv1 {%- endif %} with timeout 30 seconds diff --git a/monit/files/modules b/monit/files/modules index ea0c0cd..c6fefe5 100644 --- a/monit/files/modules +++ b/monit/files/modules @@ -1,3 +1,4 @@ +{%- from "monit/map.jinja" import monit with context -%} # -*- coding: utf-8 -*- # vim: ft=jinja @@ -22,7 +23,7 @@ -#} {#- module = nginx_init, module_v = {'process': {'with': {'pidfile':... #} -{%- for module, module_v in modules.iteritems() -%} +{%- for module, module_v in monit.modules.iteritems() -%} {#- mod_name = process mod_name_v = {'custom': {'name': 'nginx'}, 'with': {'pidfile':... #} @@ -46,10 +47,10 @@ {#- if it has 'pidfile' or 'path' then this is the 'check' line #} {%- if 'pidfile' in kind_v or 'path' in kind_v %} -check {{ mod_name }} {{ name }} with {{ element }} {{ element_v }} +check {{ mod_name|replace('\\n', '\n') }} {{ name|replace('\\n', '\n') }} with {{ element|replace('\\n', '\n') }} "{{ element_v|replace('\\n', '\n') }}" {%- endif -%} - {% endfor %} - {% endfor %} + {%- endfor -%} + {%- endfor -%} {%- for kind, kind_v in mod_name_v.iteritems() -%} {%- for element, element_v in kind_v.iteritems() -%} @@ -58,9 +59,9 @@ check {{ mod_name }} {{ name }} with {{ element }} {{ element_v }} {#- filter 'start' to add 'program =' into this line #} {%- if 'start' in element or 'stop' in element %} - {{ element }} program = "{{ element_v }}" + {{ element|replace('\\n', '\n') }} program = "{{ element_v|replace('\\n', '\n') }}" {%- else %} - {{ element }} {{ element_v }} + {{ element|replace('\\n', '\n') }} {{ element_v|replace('\\n', '\n') }} {%- endif %} {%- endif -%} @@ -69,7 +70,11 @@ check {{ mod_name }} {{ name }} with {{ element }} {{ element_v }} {#- 'action' is appended to the 'if failed' line #} {%- if 'action' not in element %} - if {{ element }} {{ element_v }} then {{ kind_v.action }} + if {{ element|replace('\\n', '\n') }} + {%- if element_v is not none %} + {{ element_v|replace('\\n', '\n')| indent(4) }} + {%- endif %} + then {{ kind_v.action|replace('\\n', '\n') }} {%- endif %} {%- endif %} {%- endfor %} diff --git a/monit/files/monitrc b/monit/files/monitrc index 0440002..4e07508 100644 --- a/monit/files/monitrc +++ b/monit/files/monitrc @@ -1,12 +1,17 @@ -set daemon 10 +{%- from "monit/map.jinja" import monit with context -%} +set daemon {{ monit.daemon_interval }} +{%- if monit.daemon_start_delay %} + with start delay {{ monit.daemon_start_delay }} +{%- endif %} +set logfile {{ monit.logfile }} -set httpd port {{ http_access.port }} and - use address {{ http_access.bind }} -{%- for host in http_access.allowed.hosts %} +set httpd port {{ monit.http_access.port }} and + use address {{ monit.http_access.bind }} +{%- for host in monit.http_access.allowed.hosts %} allow {{ host }} {%- endfor %} -{%- for userdata in http_access.allowed.users %} +{%- for userdata in monit.http_access.allowed.users %} allow {{ userdata[0] }}:{{ userdata[1] }} {%- endfor %} -include {{ config_includes }}/* +include {{ monit.config_includes }}/* diff --git a/monit/map.jinja b/monit/map.jinja index 85c18b3..f963887 100644 --- a/monit/map.jinja +++ b/monit/map.jinja @@ -11,6 +11,10 @@ that differ from whats in defaults.yaml {% set os_family_map = salt['grains.filter_by']({ 'Debian': {}, 'Kali': {}, + 'FreeBSD': { + 'config': '/usr/local/etc/monitrc', + 'config_includes': '/usr/local/etc/monit/conf.d' + }, 'Gentoo': { 'pkg': 'app-admin/monit', 'config': '/etc/monitrc', diff --git a/monit/service.sls b/monit/service.sls index 0737955..e8e5cb1 100644 --- a/monit/service.sls +++ b/monit/service.sls @@ -4,10 +4,6 @@ {% from "monit/map.jinja" import monit with context %} {{ monit.service.name }}: - service.running: - - enable: True + service.{{ monit.service.status }}: + - enable: {{ monit.service.enable }} - restart: True - - watch: - - file: {{ monit.config }} - - file: {{ monit.config_includes }}/mail - - file: {{ monit.config_includes }}/modules diff --git a/pillar.example b/pillar.example index 33c51b4..eba9702 100644 --- a/pillar.example +++ b/pillar.example @@ -1,4 +1,9 @@ monit: + service: + enable: True + status: running + daemon_interval: 30 + daemon_start_delay: 60 mail_alert: account: server: smtp.gmail.com