diff --git a/roles/xymon/handlers/main.yml b/roles/xymon/handlers/main.yml new file mode 100644 index 0000000..a7e32f3 --- /dev/null +++ b/roles/xymon/handlers/main.yml @@ -0,0 +1,16 @@ +--- + +- name: restart xymon-hobbit-service + service: name={{ client_name }}-client state=restarted + +- name: reload xymon-hobbit-service + service: name={{ client_name }}-client state=reloaded + +- name: restart hobbit-client + service: name=hobbit-client state=restarted + +- name: restart xymon-client + service: name=xymon-client state=restarted + +- name: restart apache + service: name=apache2 state=restarted diff --git a/roles/xymon/tasks/client.yml b/roles/xymon/tasks/client.yml new file mode 100644 index 0000000..4e66c13 --- /dev/null +++ b/roles/xymon/tasks/client.yml @@ -0,0 +1,137 @@ +--- + +## Install and configure xymon client ## + +# Binaries +- name: install xymon client debian + apt: pkg={{item}} state=present update_cache=yes + tags: + - client-packages + - xymon-client + with_items: + - xymon-client + - hobbit-plugins + when: ansible_distribution == 'Debian' + +- name: Install xymon client CentOS + tags: + - xymon-client + - client-packages + yum: pkg=xymon-client state=installed + when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +# Configuration +- name: Configure Xymon ip on old Debian + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/default/hobbit-client regexp='^HOBBITSERVERS=' line='HOBBITSERVERS="{{xymon_server}}"' + notify: restart hobbit-client + when: ansible_distribution == 'Debian' and ansible_distribution_release != 'jessie' + +- name: Configure Xymon ip on Jessie + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/default/xymon-client regexp='^XYMONSERVERS=' line='XYMONSERVERS="{{xymon_server}}"' + notify: restart xymon-client + when: ansible_distribution == 'Debian' and ansible_distribution_release == 'jessie' + +- name: Configure Xymon ip on CentOS + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/sysconfig/xymon-client regexp='^XYMONSERVERS=' line='XYMONSERVERS="{{xymon_server}}"' + notify: restart xymon-client + when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +- name: Configure local Xymon name on old debian + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/default/hobbit-client regexp='^CLIENTHOSTNAME=' line='CLIENTHOSTNAME="{{ansible_fqdn}}"' + notify: restart hobbit-client + when: ansible_distribution == 'Debian' and ansible_distribution_release != 'jessie' # and ansible_distribution_version < '7' + +- name: Configure local Xymon name on Jessie + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/default/xymon-client regexp='^CLIENTHOSTNAME=' line='CLIENTHOSTNAME="{{ansible_fqdn}}"' + notify: restart hobbit-client + when: ansible_distribution == 'Debian' and ansible_distribution_release == 'jessie' + +- name: Configure local Xymon name on Centos + tags: + - xymon-client + - client-configuration + lineinfile: name=/etc/sysconfig/xymon-client regexp='^CLIENTHOSTNAME=' line='CLIENTHOSTNAME="{{ansible_fqdn}}"' + notify: restart xymon-client + when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +- name: Set xymon cron for APT + tags: + - xymon-client + - client-configuration + cron: + name="check update for Xymon" + minute="45" + hour="*/4" + job="apt-get update -qq > /var/lib/apt/update_output 2>&1 && [ ! -s /var/lib/apt/update_output ] && date -u > /var/lib/apt/update_success" + cron_file="xymon-apt" + state=present + user=root + when: ansible_distribution == 'Debian' + +## Add the client to xymon server +- name: Ensure /etc/xymon/hosts.d exists + tags: + - xymon-client + - client-configuration + file: path=/etc/xymon/hosts.d state=directory + delegate_to: "{{ xymon_server }}" + +- name: Ensure the monitoring section file is included + tags: + - xymon-client + - client-configuration + lineinfile: dest=/etc/xymon/hosts.cfg + insertafter='^page (?i){{monitoring_section}}' + line="include hosts.d/{{monitoring_file}}" + delegate_to: "{{ xymon_server }}" + when: monitoring_file is defined and monitoring_section is defined + +- name: Ensure /etc/xymon/hosts.d/SECTION exists if used + tags: + - xymon-client + - client-configuration + lineinfile: dest="/etc/xymon/hosts.d/{{monitoring_file}}" + regexp="^group\s+{{monitoring_section}}$" + line="group {{monitoring_section}}" + state=present + create="yes" + mode="0644" + delegate_to: "{{ xymon_server }}" + when: monitoring_file is defined and monitoring_section is defined + +- name: Add the host to the monitoring section file if used + tags: + - xymon-client + - client-configuration + lineinfile: dest="/etc/xymon/hosts.d/{{monitoring_file}}" + insertafter="^group {{monitoring_section}}" + regexp="^{{monitoring_ip}}\s+{{ansible_fqdn}} .*$" + line="{{monitoring_ip}} {{ansible_fqdn}} {{xymon_checks}}" + delegate_to: "{{ xymon_server }}" + when: monitoring_file is defined and monitoring_section is defined + +- name: Add the host to the cfg file without section if needed + tags: + - xymon-client + - client-configuration + lineinfile: dest=/etc/xymon/hosts.cfg + insertafter='^group Servers' + regexp="^{{monitoring_ip}}\s+{{ansible_fqdn}} .*$" + line="{{monitoring_ip}} {{ansible_fqdn}} {{xymon_checks}}" + delegate_to: "{{ xymon_server }}" + when: monitoring_file is not defined and monitoring_section is not defined diff --git a/roles/xymon/tasks/main.yml b/roles/xymon/tasks/main.yml new file mode 100644 index 0000000..6d908ee --- /dev/null +++ b/roles/xymon/tasks/main.yml @@ -0,0 +1,86 @@ +--- +## +## +## Role to install xymon client or xymon server on host depending what is needed +## +## Tags : +## - xymon-server : binaries and configuration server side +## - xymon-client : binaries and configuration client side (need a working server) +## - client-configuration : used to configure client only (no binaries) +## - client-packages : used only install client binaries (no configuration) +## - server-configuration : used to configure server only (no binaries) +## - server-packages : used to only install server binaries (no configuration) +######## + +##Check vars +- name: check xymon_server + fail: msg="Missing variable xymon_server" + tags: + - xymon-client + - xymon-server + when: xymon_server is not defined + +- name: check xymon_checks + fail: msg="Missing variable xymon_checks" + tags: + - xymon-client + - client-configuration + when: xymon_checks is not defined + +- name: check monitoring_ip + fail: msg="Missing variable monitoring_ip" + tags: + - xymon-client + - client-configuration + when: monitoring_ip is not defined + +- name: check server htpasswd name + fail: msg="Missing variable xymon_htname" + tags: + - xymon-server + - server-configuration + when: xymon_htname is not defined + +- name: check server htpasswd password + fail: msg="Missing variable xymon_htpasswd" + tags: + - xymon-server + - server-configuration + when: xymon_htpasswd is not defined + +## Custom Facts + +- name: Set Facts Debian + set_fact: + xymon_cfg_path: "/usr/lib/hobbit/client/etc/clientlaunch.d" + xymon_ext_path: "/usr/lib/hobbit/client/ext" + xymon_binary: "/usr/lib/hobbit/client/bin/bb" + client_name: "hobbit" + client_name_cfg: "$HOBBITCLIENTHOME" + client_name_logs: "$BBCLIENTLOGS" + tags: + - xymon-client + - xymon-server + - configuration + when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu' + +- name: Set Facts CentOs + set_fact: + xymon_cfg_path: "/etc/xymon-client/client.d" + xymon_ext_path: "/etc/xymon-client/ext" + xymon_binary: "/usr/share/xymon-client/bin/xymon" + client_name: "xymon" + client_name_cfg: "$XYMONCLIENTHOME" + client_name_logs: "$XYMONCLIENTLOGS" + tags: + - xymon-client + - xymon-server + - configuration + when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +##Main tasks +- include: server.yml +- include: client.yml + + + diff --git a/roles/xymon/tasks/server.yml b/roles/xymon/tasks/server.yml new file mode 100644 index 0000000..fc21ca4 --- /dev/null +++ b/roles/xymon/tasks/server.yml @@ -0,0 +1,189 @@ +--- + + +## Installation and configuration for Xymon server ## + +# Binaries + +- name: install xymon server binaries - download + get_url: url=http://sourceforge.net/projects/xymon/files/latest/download?source=directory dest=/tmp/xymon_server.tar.gz + tags: + - xymon-server + - server-packages + +- name: install xymon server binaries - untar + unarchive: src=/tmp/xymon_server.tar.gz dest=/tmp/ copy=no + tags: + - xymon-server + - server-packages + +- name: install xymon server binaries - register release + shell: ls -d /tmp/xymon-* | awk -F'-' '{print $2}' + register: xymon_release + tags: + - xymon-server + - server-packages + +- name: install xymon server binaries - display release + fail: msg="Using xymon server version {{ xymon_release.stdout }}." + ignore_errors: yes + tags: + - xymon-server + - server-packages + +- name: install xymon server binaries - display warning + fail: msg="Now building packages. WARN! It may take some time." + ignore_errors: yes + tags: + - xymon-server + - server-packages + +## Debian +- name: Debian, install xymon server dependencies + apt: pkg={{item}} state=present update_cache=yes + tags: + - server-packages + - server-configuration + - xymon-server + with_items: + - apache2 + - rrdtool + - librrd-dev + - libpcre3-dev + - libssl-dev + - ldap-utils + - libldap2-dev + - fping + - libc-ares-dev + - python-passlib + when: ansible_distribution == 'Debian' + +- name: Debian, install xymon server binaries - make deb + shell: ./build/makedeb.sh {{ xymon_release.stdout }} + args: + executable: /bin/bash + chdir: /tmp/xymon-{{ xymon_release.stdout }}/ + tags: + - xymon-server + - server-packages + when: ansible_distribution == 'Debian' + +- name: Debian, install xymon server binaries - create pid directory + file: + path=/var/run/xymon + state=directory mode=0755 + owner=xymon + group=xymon + tags: + - xymon-server + - server-packages + +- name: Debian, install xymon server binaries - install deb server + apt: deb=/tmp/xymon-{{ xymon_release.stdout }}/debbuild/xymon_{{ xymon_release.stdout }}_amd64.deb + tags: + - xymon-server + - server-packages + when: ansible_distribution == 'Debian' + notify: restart apache + +- name: Debian, install xymon server binaries - install deb client + apt: deb=/tmp/xymon-{{ xymon_release.stdout }}/debbuild/xymon-client_{{ xymon_release.stdout }}_amd64.deb + tags: + - xymon-server + - server-packages + when: ansible_distribution == 'Debian' + +## Centos NOT READY YET +#- name: Centos, add xymon group + #group: + #name=xymon + #state=present + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +#- name: Centos, add xymon user + #user: + #name=xymon + #group=xymon + #createhome=yes + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +#- name: Centos, install xymon server dependencies + #yum: pkg={{item}} state=installed + #with_items: + #- gcc + #- make + #- fping + #- pcre-devel + #- openssl-devel + #- openldap-devel + #- rrdtool-devel + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +#- name: Centos, install xymon server binaries - configure + #shell: ./configure --server + #args: + #executable: /bin/bash + #chdir: /tmp/xymon-{{ xymon_release.stdout }}/ + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +#- name: Centos, install xymon server binaries - make & make install + #shell: make && make install + #args: + #executable: /bin/bash + #chdir: /tmp/xymon-{{ xymon_release.stdout }}/ + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + +#- name: Centos, install xymon server binaries - init file + #shell: mv /tmp/xymon-{{ xymon_release.stdout }}/rpm/xymon-init.d /etc/init.d/xymon + #args: + #executable: /bin/bash + #tags: + #- xymon-server + #- server-packages + #when: ansible_distribution == 'CentOS' or ansible_distribution == 'CloudLinux' + + +## Xymon server configuration +- name: enable global group Server in conf + lineinfile: dest=/etc/xymon/hosts.cfg + regexp="^#group Servers$" + line="group Servers" + backrefs=yes + tags: + - xymon-server + - server-configuration + +## Apache for xymon server +- name: generate htpasswd file for xymon-server + htpasswd: + path="/usr/local/xymon/server/etc/xymonpasswd" + name={{xymon_htname}} + password={{xymon_htpasswd}} + create=yes + state=present + tags: + - xymon-server + - server-configuration + when: ansible_distribution == 'Debian' + +- name: Apache configuration done + fail: msg="You can now connect to http://yourserver/xymon/" + ignore_errors: yes + tags: + - xymon-server + - server-configuration diff --git a/xymon.yml b/xymon.yml new file mode 100644 index 0000000..81e1b31 --- /dev/null +++ b/xymon.yml @@ -0,0 +1,8 @@ +--- + +- name: Install and configure xymon-client or xymon-server + hosts: all + user: root + gather_facts: yes + roles: + - xymon