diff --git a/.gitignore b/.gitignore index f71c7f0..99c4055 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ .vscode/ +venv .vault-pass .vault.yml .passbolt.yml inventories/local -venv +inventories/local.yml +inventories/local.yaml +inventories/host_vars/*/local.yml +inventories/host_vars/*/local.yaml +inventories/group_vars/*/local.yml +inventories/group_vars/*/local.yaml diff --git a/README.md b/README.md index 3aeee33..7d0991d 100644 --- a/README.md +++ b/README.md @@ -40,10 +40,7 @@ ansible-galaxy collection install -r collections/requirements.yml ## Run playbook -Before merging changes into protected branches, playbooks should be tested -locally to ensure they work properly. The *inventories/local* inventory is not -uploaded to the repository and can be used for local testing. In any case, it -is advisable to use a different repository to store inventories. +It is advisable to use a different repository to store inventories. Run playbook on inventory host. ``` @@ -62,6 +59,14 @@ List available tags for playbook. ansible-playbook playbooks/<playbook_name>.yml --list-tags ``` +## Playbook testing + +Before merging changes into protected branches, playbooks should be tested +locally to ensure they work properly. Take a look to *.gitignore* to known +the *inventories* file patterns that are excluded from remote. + +* https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#organizing-host-and-group-variables + ## Manage secrets Secrets can be managed by using Ansible vault or an external keystore, Passbolt diff --git a/playbooks/ceph.yml b/playbooks/ceph.yml index f8189a7..0e9e56c 100644 --- a/playbooks/ceph.yml +++ b/playbooks/ceph.yml @@ -1,5 +1,7 @@ - name: Configure Ceph hosts: all tasks: + - import_role: + name: debian - import_role: name: ceph diff --git a/playbooks/clean.yml b/playbooks/clean.yml index c19a4c5..68958a6 100644 --- a/playbooks/clean.yml +++ b/playbooks/clean.yml @@ -2,35 +2,59 @@ hosts: all gather_facts: no tasks: - - name: Delete awx-user - user: - name: awx-user - state: absent - remove: yes - tags: awx - - name: Delete awx-user sudoers file - file: - path: /etc/sudoers.d/awx-user - state: absent - tags: awx + + - name: Delete old awx-user and it's configuration + block: + - name: Delete awx-user + tags: awx + user: + name: awx-user + state: absent + remove: yes + - name: Delete awx-user sudoers file + tags: awx + file: + path: /etc/sudoers.d/awx-user + state: absent + - name: Delete old MOTD configuration + tags: motd file: path: /etc/profile.d/mymotd.sh state: absent - tags: motd - - name: Delete old Ansible bashrc configuration - blockinfile: - path: /root/.bashrc - marker_begin: 'BEGIN ANSIBLE MANAGED BLOCK' - marker_end: 'END ANSIBLE MANAGED BLOCK' - marker: "# {mark}" - state: absent - tags: bashrc - - name: Delete old custom bashrc configuration - replace: - path: /root/.bashrc - regexp: '{{ start_delimiter }}\\s\\S*?{{ end_delimiter }}' - replace: '' - vars: - start_delimiter: '### 4Loo' - end_delimiter: 'esac' + + - name: Delete old profile configuration + tags: profile + block: + - name: Delete old Ansible bashrc configuration + blockinfile: + path: /root/.bashrc + marker_begin: 'BEGIN ANSIBLE MANAGED BLOCK' + marker_end: 'END ANSIBLE MANAGED BLOCK' + marker: "# {mark}" + state: absent + - name: Delete old custom bashrc configuration + replace: + path: /root/.bashrc + regexp: '{{ start_delimiter }}\\s\\S*?{{ end_delimiter }}' + replace: '' + vars: + start_delimiter: '### 4Loo' + end_delimiter: 'esac' + + - name: Delete old vn-host package + tags: vn-host + block: + - name: Get vn-host package version + shell: "dpkg-query -W -f='${Version}' vn-host 2>/dev/null || echo '0'" + register: vn_host_version + changed_when: false + - name: Display vn-host version + debug: + msg: "Version: {{ vn_host_version.stdout }}" + - name: Uninstall vn-host if old version + apt: + name: vn-host + state: absent + when: > + vn_host_version.stdout is version('3.0.0', '<') diff --git a/playbooks/db.yml b/playbooks/db.yml index b0436c5..2f83f93 100644 --- a/playbooks/db.yml +++ b/playbooks/db.yml @@ -1,5 +1,7 @@ - name: Configure DB hosts: all tasks: + - import_role: + name: debian - import_role: name: db diff --git a/playbooks/debian.yml b/playbooks/debian.yml index 1180f9d..0e337af 100644 --- a/playbooks/debian.yml +++ b/playbooks/debian.yml @@ -1,18 +1,5 @@ - name: Configure base Debian host hosts: all tasks: - - name: Configure virtual machine or host (not LXC) - import_role: - name: debian-host - when: ansible_virtualization_role == 'host' or ansible_virtualization_type == 'kvm' - - name: Configure base system (all) - import_role: - name: debian-base - - name: Configure guest - import_role: - name: debian-guest - when: ansible_virtualization_role == 'guest' - - name: Configure virtual machine - import_role: - name: debian-qemu - when: ansible_virtualization_role == 'guest' and ansible_virtualization_type == 'kvm' + - import_role: + name: debian diff --git a/playbooks/debug.yml b/playbooks/debug.yml new file mode 100644 index 0000000..9efe37e --- /dev/null +++ b/playbooks/debug.yml @@ -0,0 +1,35 @@ +- name: Gather facts from host and debug + hosts: all + gather_facts: yes + tasks: + + - name: Print ansible facts + tags: facts + debug: + var: ansible_facts + + - name: Print all variables + tags: vars + debug: + var: vars + + - name: Print variable value + tags: var + when: var_name is defined + debug: + msg: "{{ var_name }}: {{ lookup('vars', var_name, default='undefined') }}" + + - name: Check whether host is alive and reachable + tags: ping + ping: + + - name: Fetch or create passbolt password + tags: passbolt + debug: + msg: "{{ lookup(passbolt, 'test', password=passbolt_password) }}" + vars: + passbolt_password: 'S3cR3tP4$$w0rd' + environment: + PASSBOLT_CREATE_NEW_RESOURCE: true + PASSBOLT_NEW_RESOURCE_PASSWORD_LENGTH: 18 + PASSBOLT_NEW_RESOURCE_PASSWORD_SPECIAL_CHARS: false diff --git a/playbooks/delete.yml b/playbooks/delete.yml deleted file mode 100644 index b4e8215..0000000 --- a/playbooks/delete.yml +++ /dev/null @@ -1,24 +0,0 @@ -- name: List all disks - hosts: all - tasks: - - name: Get info disk information 2 - shell: blkid | grep LABEL | awk {'print $2'} - register: blkid - - - name: Print valid labels - debug: - var: blkid - - - name: Parsear stdout_lines para buscar etiquetas específicas - set_fact: - found_labels: >- - {{ - blkid.stdout_lines - | map('regex_search', 'LABEL="(?P<label>[^"]+)"') - | select('defined') - | list - }} - - - name: Print valid labels - debug: - var: found_labels diff --git a/playbooks/facts.yml b/playbooks/facts.yml deleted file mode 100644 index 0ccd652..0000000 --- a/playbooks/facts.yml +++ /dev/null @@ -1,10 +0,0 @@ -- name: Gather facts from host - hosts: all - gather_facts: yes - tasks: - - name: Print all available facts - debug: - var: ansible_facts - - name: Print variable value - debug: - msg: "Variable: {{ ansible_fqdn }}" diff --git a/playbooks/kube.yml b/playbooks/kube.yml index 0b7d9bf..8628eb1 100644 --- a/playbooks/kube.yml +++ b/playbooks/kube.yml @@ -1,5 +1,7 @@ - name: Configure Kubernetes hosts: all tasks: + - import_role: + name: debian - import_role: name: kube diff --git a/playbooks/passbolt.yml b/playbooks/passbolt.yml deleted file mode 100644 index 146a2b5..0000000 --- a/playbooks/passbolt.yml +++ /dev/null @@ -1,12 +0,0 @@ -- name: Fetch or create passbolt password - hosts: all - gather_facts: no - tasks: - - debug: - msg: "{{ lookup(passbolt, 'test', password=passbolt_password) }}" - vars: - passbolt_password: 'S3cR3tP4$$w0rd' - environment: - PASSBOLT_CREATE_NEW_RESOURCE: true - PASSBOLT_NEW_RESOURCE_PASSWORD_LENGTH: 18 - PASSBOLT_NEW_RESOURCE_PASSWORD_SPECIAL_CHARS: false diff --git a/playbooks/ping.yml b/playbooks/ping.yml deleted file mode 100644 index b7061eb..0000000 --- a/playbooks/ping.yml +++ /dev/null @@ -1,6 +0,0 @@ -- name: Check whether host is alive and reachable - hosts: all - gather_facts: no - become: no - tasks: - - ping: \ No newline at end of file diff --git a/playbooks/pve.yml b/playbooks/pve.yml index ab7c817..a351148 100644 --- a/playbooks/pve.yml +++ b/playbooks/pve.yml @@ -1,5 +1,7 @@ - name: Configure PVE hosts: all tasks: + - import_role: + name: debian - import_role: name: pve diff --git a/roles/db/defaults/main.yaml b/roles/db/defaults/main.yaml index 85bc205..0144754 100644 --- a/roles/db/defaults/main.yaml +++ b/roles/db/defaults/main.yaml @@ -32,7 +32,12 @@ required_files_and_mariabackup_files_and_root_scripts: - { src: "files/scripts/promote-slave.sh", dest: "/root/scripts/promote-slave.sh", mode: "u=rwx,g=rx,o=rx" } - { src: "files/scripts/README.md", dest: "/root/scripts/README.md", mode: "u=rw,g=r,o=r" } - { src: "files/scripts/scheduler-log.sh", dest: "/root/scripts/scheduler-log.sh", mode: "u=rwx,g=rx,o=rx" } - - { src: "files/marianrpe/95-mariadb.cfg", dest: "/etc/nagios/nrpe.d/95-mariadb.cfg", mode: "u=rw,g=r,o=r" } + - { src: "files/marianrpe/95-mariadb.cfg", dest: "/etc/nagios/nrpe.d/95-mariadb.cfg", mode: "u=rw,g=r,o=r" } + +mariabackup_test_dev_files: + - { src: "mariabackuptest/apply.sql", dest: "/root/mariabackup/", mode: "u=rw,g=r,o=r" } + - { src: "mariabackuptest/bacula-after.sh", dest: "/root/mariabackup/", mode: "u=rwx,g=rx,o=rx" } + downloads: - { url: "https://r.mariadb.com/downloads/mariadb_repo_setup", dest: "/tmp/mariadb_repo_setup", mode: "u=rwx,g=rx,o=rx" } - { url: "https://repo.percona.com/apt/percona-release_latest.generic_all.deb", dest: "/tmp/percona-release_latest.generic_all.deb", mode: "u=rw,g=r,o=r" } diff --git a/roles/db/files/scheduler-log.cron b/roles/db/files/scheduler-log.cron new file mode 100644 index 0000000..c11daec --- /dev/null +++ b/roles/db/files/scheduler-log.cron @@ -0,0 +1 @@ +*/30 * * * * root /root/scripts/scheduler-log.sh diff --git a/roles/db/files/scripts/scheduler-log.sh b/roles/db/files/scripts/scheduler-log.sh index 9cb0b37..8cb0db0 100755 --- a/roles/db/files/scripts/scheduler-log.sh +++ b/roles/db/files/scripts/scheduler-log.sh @@ -3,7 +3,9 @@ set -e logFile="/var/log/mysql/error.log" dateFile="/tmp/mysql_scheduler_log-lastdate" -logTable="util.eventLog" +logSchema="util" +logTable="eventLog" +pattern='^\d{4}-\d{2}-\d{2}\s+\d{1,2}:\d{2}:\d{2}\s+\d+\s+\[ERROR\] Event Scheduler:' purgeDays=30 quote() { @@ -17,33 +19,55 @@ if [ "$?" -ne "0" ]; then exit fi -if [ -f "$dateFile" ]; then - fromDate=$(cat "$dateFile") -else - fromDate=0 +tableExists=$(mysql -Ns -e "SHOW TABLES FROM $logSchema LIKE '$logTable'") + +if [ -z "$tableExists" ]; then + mysql <<-EOF + CREATE SCHEMA IF NOT EXISTS $logSchema; + CREATE TABLE $logSchema.$logTable ( + id int(11) NOT NULL AUTO_INCREMENT, + date datetime NOT NULL, + event varchar(512) NOT NULL, + error varchar(1024) NOT NULL, + PRIMARY KEY (id), + KEY date (date) + ) ENGINE=InnoDB COMMENT='Event scheduler error log'; + EOF fi -lastDate=$(tail -n1 "$logFile" | awk '{print $1" "$2}') -toDate=$(date +%s -d "$lastDate") +if [ -f "$dateFile" ]; then + read -r fromDate < "$dateFile" +else + fromDate=$(date -d "-$purgeDays days" +%s) +fi -awk -v fromDate="$fromDate" -v toDate="$toDate" '{ +toDate=$(date +%s) + +grep -P "$pattern" "$logFile" | awk -v fromDate="$fromDate" -v toDate="$toDate" '{ split($1, date, "-"); split($2, time, ":"); timestamp = mktime(date[1]" "date[2]" "date[3]" "time[1]" "time[2]" "time[3]) - if (timestamp >= fromDate && timestamp < toDate && $4" "$5" "$6 == "[ERROR] Event Scheduler:") { + if (timestamp >= fromDate && timestamp < toDate) { printf $1" "$2" "$7; for (i=8; i<=NF; i++) printf FS $i ; print ""; } -}' "$logFile" | \ -\ +}' | \ while read line; do date="$(echo "$line" | cut -d' ' -f1,2)" event="$(echo "$line" | cut -d' ' -f3)" error="$(echo "$line" | cut -d' ' -f4-)" - echo "INSERT INTO $logTable (date, event, error)" \ - "VALUES ($(quote "$date"), $(quote "$event"), $(quote "$error"))" | mysql + + mysql <<-EOF + INSERT INTO $logSchema.$logTable SET + date = $(quote "$date"), + event = $(quote "$event"), + error = $(quote "$error") + EOF done -echo -n "$toDate" > "$dateFile" -echo "DELETE FROM $logTable WHERE date < TIMESTAMPADD(DAY, -$purgeDays, NOW())" | mysql +echo "$toDate" > "$dateFile" +mysql <<-EOF + DELETE FROM $logSchema.$logTable + WHERE date < TIMESTAMPADD(DAY, -$purgeDays, NOW()) +EOF diff --git a/roles/db/tasks/mariadb.yml b/roles/db/tasks/mariadb.yml index a8709fa..9182a91 100644 --- a/roles/db/tasks/mariadb.yml +++ b/roles/db/tasks/mariadb.yml @@ -62,10 +62,18 @@ command: mount -a when: fstab.changed -- name: Set MariaDB Cron to /etc/cron.d +- name: Configure MariaDB check memory CRON template: - src: templates/cron_mariadb - dest: /etc/cron.d/vn + src: check-memory.cron + dest: /etc/cron.d/vn-check-memory + owner: root + group: root + mode: u=rw,g=r,o=r + +- name: Configure MariaDB scheduler log CRON + copy: + src: scheduler-log.cron + dest: /etc/cron.d/vn-scheduler-log owner: root group: root mode: u=rw,g=r,o=r @@ -127,17 +135,6 @@ group: root mode: u=rw,g=,o= - - name: Set MariaDB local configuration file for TestDB - copy: - src: "{{ item }}" - dest: /root/mariabackup/ - owner: root - group: root - mode: u=rw,g=r,o=r - with_items: - - "mariabackuptest/apply.sql" - - "mariabackuptest/bacula-after.sh" - - name: Reminder to check mount points environment TestDB debug: msg: | @@ -168,17 +165,6 @@ group: root mode: u=rw,g=,o= - - name: Set MariaDB local configuration file for DevDB - copy: - src: "{{ item }}" - dest: /root/mariabackup/ - owner: root - group: root - mode: u=rw,g=r,o=r - with_items: - - "mariabackupdev/apply.sql" - - "mariabackupdev/bacula-after.sh" - - name: Reminder to check mount points environment DevDB debug: msg: | @@ -186,6 +172,18 @@ - /mnt/mysqltmp Make sure they are correctly configured and accessible. +- when: db.branch == 'dev' or db.branch == 'test' + + block: + - name: Set Mariabackup files for TestDB or DevDB + copy: + src: "{{ item.src }}" + dest: "{{ item.dest }}" + owner: root + group: root + mode: "{{ item.mode }}" + loop: "{{ mariabackup_test_dev_files }}" + - name: Set Custom Configuration local template all Environment template: src: z99-local.cnf @@ -207,7 +205,6 @@ path: /var/lib/mysql/ register: mysql_dir - - when: mysql_dir.stat.exists block: diff --git a/roles/db/templates/cron_mariadb b/roles/db/templates/check-memory.cron similarity index 60% rename from roles/db/templates/cron_mariadb rename to roles/db/templates/check-memory.cron index bc281bd..a6cfa3e 100644 --- a/roles/db/templates/cron_mariadb +++ b/roles/db/templates/check-memory.cron @@ -1,4 +1,3 @@ MAILTO="{{ sysadmin_mail }}" */15 * * * * root /root/scripts/check-memory.sh -*/30 * * * * root /root/scripts/scheduler-log.sh diff --git a/roles/debian-base/files/profile.sh b/roles/debian-base/files/profile.sh deleted file mode 100644 index ab1ac12..0000000 --- a/roles/debian-base/files/profile.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -# Prompt - -FQDN=$(hostname --fqdn) - -if [[ $FQDN == *.verdnatura.es ]]; then - SHORT_HOST=${FQDN%.verdnatura.es} - - case "$SHORT_HOST" in - *.dc) - ENVIRONMENT="\[\033[01;31m\]PRO\[\033[00m\]" - ;; - *.lab) - ENVIRONMENT="\[\033[01;35m\]LAB\[\033[00m\]" - ;; - *) - ENVIRONMENT="\[\033[01;32m\]VN\[\033[00m\]" - ;; - esac - - PS1="\u@$SHORT_HOST[$ENVIRONMENT]:\w" - - if [ "$(id -u)" -eq 0 ]; then - PS1="$PS1# " - else - PS1="$PS1\$ " - fi -fi - -# History - -HISTSIZE=10000 -HISTFILESIZE=50000 -HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " - -# Security - -TMOUT=3600 - -# Aliases - -#export LS_OPTIONS='--color=auto' -#eval "$(dircolors)" -#alias ls='ls $LS_OPTIONS' -#alias ll='ls $LS_OPTIONS -l' -#alias la='ls $LS_OPTIONS -la' diff --git a/roles/debian-base/tasks/main.yml b/roles/debian-base/tasks/main.yml deleted file mode 100644 index dcd5f94..0000000 --- a/roles/debian-base/tasks/main.yml +++ /dev/null @@ -1,34 +0,0 @@ -- import_tasks: witness.yml - tags: witness -- import_tasks: root.yml - tags: root -- import_tasks: resolv.yml - tags: resolv -- import_tasks: timesync.yml - tags: timesync -- import_tasks: sshd_configure.yml - tags: sshd_configure -- import_tasks: defuser.yml - tags: defuser -- import_tasks: install.yml - tags: install -- import_tasks: locale.yml - tags: locale -- import_tasks: tzdata.yml - tags: tzdata -- import_tasks: relayhost.yml - tags: relayhost -- import_tasks: motd.yml - tags: motd -- import_tasks: profile.yml - tags: profile -- import_tasks: vim.yml - tags: vim -- import_tasks: nrpe.yml - tags: nrpe -- import_tasks: fail2ban.yml - tags: fail2ban -- import_tasks: bacula.yml - tags: bacula -- import_tasks: vn-repo.yml - tags: vn-repo diff --git a/roles/debian-base/tasks/vn-repo.yml b/roles/debian-base/tasks/vn-repo.yml deleted file mode 100644 index bd85ca4..0000000 --- a/roles/debian-base/tasks/vn-repo.yml +++ /dev/null @@ -1,3 +0,0 @@ -- name: Install package - apt: - deb: "{{ vn_host_url }}" diff --git a/roles/debian-guest/handlers/main.yml b/roles/debian-guest/handlers/main.yml deleted file mode 100644 index dd3e923..0000000 --- a/roles/debian-guest/handlers/main.yml +++ /dev/null @@ -1,8 +0,0 @@ -- name: restart-nslcd - service: - name: nslcd - state: restarted -- name: restart-ssh - systemd: - name: ssh - state: restarted diff --git a/roles/debian-guest/tasks/main.yml b/roles/debian-guest/tasks/main.yml deleted file mode 100644 index bb9b76f..0000000 --- a/roles/debian-guest/tasks/main.yml +++ /dev/null @@ -1,6 +0,0 @@ -- import_tasks: auth.yml - tags: auth -- import_tasks: sudoers.yml - tags: sudoers -- import_tasks: ssh_keys.yml - tags: ssh_keys \ No newline at end of file diff --git a/roles/debian-host/handlers/main.yml b/roles/debian-host/handlers/main.yml deleted file mode 100644 index 45b25b1..0000000 --- a/roles/debian-host/handlers/main.yml +++ /dev/null @@ -1,4 +0,0 @@ -- name: restart-sysctl - systemd: - name: systemd-sysctl - state: restarted \ No newline at end of file diff --git a/roles/debian-host/tasks/main.yml b/roles/debian-host/tasks/main.yml deleted file mode 100644 index e4f179a..0000000 --- a/roles/debian-host/tasks/main.yml +++ /dev/null @@ -1,6 +0,0 @@ -- import_tasks: hostname.yml - tags: hostname -- import_tasks: sysctl.yml - tags: sysctl -- import_tasks: apparmor.yml - tags: apparmor diff --git a/roles/debian-qemu/defaults/main.yml b/roles/debian-qemu/defaults/main.yml deleted file mode 100644 index dc2a884..0000000 --- a/roles/debian-qemu/defaults/main.yml +++ /dev/null @@ -1,8 +0,0 @@ -homes_path: /mnt/homes -autofs_packages: - - nfs-common - - autofs - - libnfs-utils - - autofs-ldap -blacklist_module_kernel: | - blacklist snd_hda_intel diff --git a/roles/debian-qemu/handlers/main.yml b/roles/debian-qemu/handlers/main.yml deleted file mode 100644 index 0bca163..0000000 --- a/roles/debian-qemu/handlers/main.yml +++ /dev/null @@ -1,4 +0,0 @@ -- name: restart-autofs - service: - name: autofs - state: restarted \ No newline at end of file diff --git a/roles/debian-qemu/tasks/main.yml b/roles/debian-qemu/tasks/main.yml deleted file mode 100644 index 1b49a8d..0000000 --- a/roles/debian-qemu/tasks/main.yml +++ /dev/null @@ -1,10 +0,0 @@ -- import_tasks: agent.yml - tags: agent -- import_tasks: hotplug.yml - tags: hotplug -- import_tasks: autofs.yml - tags: autofs -- import_tasks: blacklist.yml - tags: blacklist -- import_tasks: grub_startup.yml - tags: grub_startup diff --git a/roles/debian-base/defaults/main.yaml b/roles/debian/defaults/main.yaml similarity index 65% rename from roles/debian-base/defaults/main.yaml rename to roles/debian/defaults/main.yaml index 6b4f9bf..740257e 100644 --- a/roles/debian-base/defaults/main.yaml +++ b/roles/debian/defaults/main.yaml @@ -1,5 +1,10 @@ +vn_env: lab vn_first_time: false vn_witness_checked: false +send_test_email: true +deb_packages: + - https://apt.verdnatura.es/pool/main/v/vn-host/vn-apt-source_3.0.1_all.deb + - https://apt.verdnatura.es/pool/main/v/vn-host/vn-host_3.0.1_all.deb grub_user: admin default_user: user fail2ban: @@ -36,3 +41,11 @@ base_packages: locales_present: - en_US.UTF-8 - es_ES.UTF-8 +homes_path: /mnt/homes +autofs_packages: + - nfs-common + - autofs + - libnfs-utils + - autofs-ldap +blacklist_module_kernel: | + blacklist snd_hda_intel diff --git a/roles/debian-qemu/files/80-hotplug-cpu-mem.rules b/roles/debian/files/80-hotplug-cpu-mem.rules similarity index 100% rename from roles/debian-qemu/files/80-hotplug-cpu-mem.rules rename to roles/debian/files/80-hotplug-cpu-mem.rules diff --git a/roles/debian-qemu/files/hotplug.cfg b/roles/debian/files/hotplug.cfg similarity index 100% rename from roles/debian-qemu/files/hotplug.cfg rename to roles/debian/files/hotplug.cfg diff --git a/roles/debian-base/files/motd b/roles/debian/files/motd similarity index 76% rename from roles/debian-base/files/motd rename to roles/debian/files/motd index 1a11bc4..b0fe752 100644 --- a/roles/debian-base/files/motd +++ b/roles/debian/files/motd @@ -9,26 +9,39 @@ BLINK="\033[5m" # Environment -PRO="\033[1;5;31m" -LAB="\033[0;35m" -VN="\033[0;32m" -UNKNOWN="\033[0;33m" - FQDN=$(hostname --fqdn) -case "$FQDN" in - *.dc.verdnatura.es) - ENVIRONMENT="${PRO}Production${RESET}" - ;; - *.lab.verdnatura.es) - ENVIRONMENT="${LAB}Laboratory${RESET}" - ;; - *.verdnatura.es) - ENVIRONMENT="${VN}Verdnatura${RESET}" - ;; - *) - ENVIRONMENT="${UNKNOWN}Unknown${RESET}" - ;; -esac + +if [ -f "/etc/vn/env" ]; then + read -r VN_ENV < /etc/vn/env + case "$VN_ENV" in + lab) + ENV_COLOR="\033[0;32m" + ENV_TEXT="Laboratory" + ;; + pre) + ENV_COLOR="\033[0;35m" + ENV_TEXT="Pre-production" + ;; + test) + ENV_COLOR="\033[0;33m" + ENV_TEXT="Testing" + ;; + pro) + ENV_COLOR="\033[1;5;31m" + ENV_TEXT="Production" + ;; + *) + ENV_COLOR="\033[0;36m" + ENV_TEXT="$VN_ENV" + ;; + esac +fi +if [ -z "$ENV_TEXT" ]; then + ENV_COLOR="\033[0;37m" + ENV_TEXT="Undefined" +fi + +ENV_TEXT="${ENV_COLOR}${ENV_TEXT}${RESET}" # Last login @@ -57,7 +70,7 @@ if [ $SHOW_UPGRADEABLE -eq 1 ] ; then UPGRADEABLE="$(apt list --upgradable 2>/dev/null | tail -n +2 | wc -l)" if [ "$UPGRADEABLE" -gt 0 ]; then - UPGRADEABLE_ALERT="${BLINK}($UPGRADEABLE upgradeable)${RESET}" + UPGRADEABLE_ALERT="($UPGRADEABLE upgradeable)" fi fi @@ -97,6 +110,6 @@ echo -e "${LABEL}Packages :${RESET} $PACKAGES $UPGRADEABLE_ALERT" echo -e "${LABEL}IP :${RESET}" echo -e "$NET_IPS" echo -e "${LABEL}Last Login :${RESET} $LAST_LOGIN" -echo -e "${LABEL}Environment :${RESET} $ENVIRONMENT" +echo -e "${LABEL}Environment :${RESET} $ENV_TEXT" echo -e "${LABEL}Connected users :${RESET}" echo -e "$CONNECTED_USERS" diff --git a/roles/debian/files/profile.sh b/roles/debian/files/profile.sh new file mode 100644 index 0000000..874e3f6 --- /dev/null +++ b/roles/debian/files/profile.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Prompt + +FQDN=$(hostname --fqdn) + +if [ -f "/etc/vn/env" ]; then + SHORT_HOST=${FQDN%.*.*} + if [ -z "$SHORT_HOST" ]; then + read -r SHORT_HOST < /etc/hostname + fi + + read -r VN_ENV < /etc/vn/env + ENV_TEXT="$VN_ENV" + + case "$VN_ENV" in + lab) + ENV_COLOR="\033[01;32m" + ;; + pre) + ENV_COLOR="\033[01;35m" + ;; + test) + ENV_COLOR="\033[01;33m" + ;; + pro) + ENV_COLOR="\033[01;31m" + ;; + *) + ENV_COLOR="\033[01;36m" + ENV_TEXT="${VN_ENV:0:3}" + ;; + esac + + if [ -z "$ENV_TEXT" ]; then + ENV_TEXT="???" + ENV_COLOR="\033[01;37m" + fi + + ENV_TEXT="\[${ENV_COLOR}\]${ENV_TEXT^^}\[\033[00m\]" + PS1="\u@$SHORT_HOST[$ENV_TEXT]:\w" + + if [ "$(id -u)" -eq 0 ]; then + PS1="$PS1# " + else + PS1="$PS1\$ " + fi +fi + +# History + +HISTSIZE=10000 +HISTFILESIZE=50000 +HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " + +# Security + +TMOUT=3600 + +# Aliases + +export LS_OPTIONS='--color=auto' +eval "$(dircolors)" +alias ls='ls $LS_OPTIONS' +alias ll='ls $LS_OPTIONS -l' +alias la='ls $LS_OPTIONS -la' diff --git a/roles/debian-base/files/sendmail-common.local b/roles/debian/files/sendmail-common.local similarity index 100% rename from roles/debian-base/files/sendmail-common.local rename to roles/debian/files/sendmail-common.local diff --git a/roles/debian-host/files/sysctl/30-basic.conf b/roles/debian/files/sysctl/30-basic.conf similarity index 100% rename from roles/debian-host/files/sysctl/30-basic.conf rename to roles/debian/files/sysctl/30-basic.conf diff --git a/roles/debian-host/files/sysctl/40-network.conf b/roles/debian/files/sysctl/40-network.conf similarity index 100% rename from roles/debian-host/files/sysctl/40-network.conf rename to roles/debian/files/sysctl/40-network.conf diff --git a/roles/debian-host/files/sysctl/42-noipv6.conf b/roles/debian/files/sysctl/42-noipv6.conf similarity index 100% rename from roles/debian-host/files/sysctl/42-noipv6.conf rename to roles/debian/files/sysctl/42-noipv6.conf diff --git a/roles/debian-base/files/vimrc.local b/roles/debian/files/vimrc.local similarity index 100% rename from roles/debian-base/files/vimrc.local rename to roles/debian/files/vimrc.local diff --git a/roles/debian-base/handlers/main.yml b/roles/debian/handlers/main.yml similarity index 67% rename from roles/debian-base/handlers/main.yml rename to roles/debian/handlers/main.yml index e2ee81e..cc20d9c 100644 --- a/roles/debian-base/handlers/main.yml +++ b/roles/debian/handlers/main.yml @@ -18,6 +18,22 @@ systemd: name: sshd state: restarted +- name: restart-sysctl + systemd: + name: systemd-sysctl + state: restarted +- name: restart-nslcd + service: + name: nslcd + state: restarted +- name: restart-ssh + systemd: + name: ssh + state: restarted +- name: restart-autofs + service: + name: autofs + state: restarted - name: generate locales command: /usr/sbin/locale-gen - name: reconfigure tzdata diff --git a/roles/debian-qemu/tasks/agent.yml b/roles/debian/tasks/agent.yml similarity index 100% rename from roles/debian-qemu/tasks/agent.yml rename to roles/debian/tasks/agent.yml diff --git a/roles/debian-host/tasks/apparmor.yml b/roles/debian/tasks/apparmor.yml similarity index 100% rename from roles/debian-host/tasks/apparmor.yml rename to roles/debian/tasks/apparmor.yml diff --git a/roles/debian-guest/tasks/auth.yml b/roles/debian/tasks/auth.yml similarity index 100% rename from roles/debian-guest/tasks/auth.yml rename to roles/debian/tasks/auth.yml diff --git a/roles/debian-qemu/tasks/autofs.yml b/roles/debian/tasks/autofs.yml similarity index 100% rename from roles/debian-qemu/tasks/autofs.yml rename to roles/debian/tasks/autofs.yml diff --git a/roles/debian-base/tasks/bacula.yml b/roles/debian/tasks/bacula.yml similarity index 100% rename from roles/debian-base/tasks/bacula.yml rename to roles/debian/tasks/bacula.yml diff --git a/roles/debian-qemu/tasks/blacklist.yml b/roles/debian/tasks/blacklist.yml similarity index 100% rename from roles/debian-qemu/tasks/blacklist.yml rename to roles/debian/tasks/blacklist.yml diff --git a/roles/debian/tasks/config.yml b/roles/debian/tasks/config.yml new file mode 100644 index 0000000..b0152d2 --- /dev/null +++ b/roles/debian/tasks/config.yml @@ -0,0 +1,9 @@ +- name: Create company configuration directory + file: + path: /etc/vn + state: directory + +- name: Set environment file + copy: + dest: /etc/vn/env + content: "{{vn_env}}\n" diff --git a/roles/debian-base/tasks/defuser.yml b/roles/debian/tasks/defuser.yml similarity index 100% rename from roles/debian-base/tasks/defuser.yml rename to roles/debian/tasks/defuser.yml diff --git a/roles/debian-base/tasks/fail2ban.yml b/roles/debian/tasks/fail2ban.yml similarity index 100% rename from roles/debian-base/tasks/fail2ban.yml rename to roles/debian/tasks/fail2ban.yml diff --git a/roles/debian-qemu/tasks/grub_startup.yml b/roles/debian/tasks/grub_startup.yml similarity index 100% rename from roles/debian-qemu/tasks/grub_startup.yml rename to roles/debian/tasks/grub_startup.yml diff --git a/roles/debian-host/tasks/hostname.yml b/roles/debian/tasks/hostname.yml similarity index 100% rename from roles/debian-host/tasks/hostname.yml rename to roles/debian/tasks/hostname.yml diff --git a/roles/debian-qemu/tasks/hotplug.yml b/roles/debian/tasks/hotplug.yml similarity index 100% rename from roles/debian-qemu/tasks/hotplug.yml rename to roles/debian/tasks/hotplug.yml diff --git a/roles/debian-base/tasks/install.yml b/roles/debian/tasks/install.yml similarity index 100% rename from roles/debian-base/tasks/install.yml rename to roles/debian/tasks/install.yml diff --git a/roles/debian-base/tasks/locale.yml b/roles/debian/tasks/locale.yml similarity index 100% rename from roles/debian-base/tasks/locale.yml rename to roles/debian/tasks/locale.yml diff --git a/roles/debian/tasks/main.yml b/roles/debian/tasks/main.yml new file mode 100644 index 0000000..1734f70 --- /dev/null +++ b/roles/debian/tasks/main.yml @@ -0,0 +1,73 @@ + +- name: Configure virtual machine or host (not LXC) + when: ansible_virtualization_role == 'host' or ansible_virtualization_type == 'kvm' + block: + - import_tasks: hostname.yml + tags: hostname + - import_tasks: sysctl.yml + tags: sysctl + - import_tasks: apparmor.yml + tags: apparmor + +- name: Configure base system (all) + block: + - import_tasks: witness.yml + tags: witness + - import_tasks: config.yml + tags: config + - import_tasks: root.yml + tags: root + - import_tasks: resolv.yml + tags: resolv + - import_tasks: timesync.yml + tags: timesync + - import_tasks: sshd_configure.yml + tags: sshd_configure + - import_tasks: defuser.yml + tags: defuser + - import_tasks: install.yml + tags: install + - import_tasks: locale.yml + tags: locale + - import_tasks: tzdata.yml + tags: tzdata + - import_tasks: relayhost.yml + tags: relayhost + - import_tasks: motd.yml + tags: motd + - import_tasks: profile.yml + tags: profile + - import_tasks: vim.yml + tags: vim + - import_tasks: nrpe.yml + tags: nrpe + - import_tasks: fail2ban.yml + tags: fail2ban + - import_tasks: bacula.yml + tags: bacula + - import_tasks: vn-host.yml + tags: vn-host + +- name: Configure guest + when: ansible_virtualization_role == 'guest' + block: + - import_tasks: auth.yml + tags: auth + - import_tasks: sudoers.yml + tags: sudoers + - import_tasks: ssh_keys.yml + tags: ssh_keys + +- name: Configure virtual machine + when: ansible_virtualization_role == 'guest' and ansible_virtualization_type == 'kvm' + block: + - import_tasks: agent.yml + tags: agent + - import_tasks: hotplug.yml + tags: hotplug + - import_tasks: autofs.yml + tags: autofs + - import_tasks: blacklist.yml + tags: blacklist + - import_tasks: grub_startup.yml + tags: grub_startup diff --git a/roles/debian-base/tasks/motd.yml b/roles/debian/tasks/motd.yml similarity index 100% rename from roles/debian-base/tasks/motd.yml rename to roles/debian/tasks/motd.yml diff --git a/roles/debian-base/tasks/nrpe.yml b/roles/debian/tasks/nrpe.yml similarity index 100% rename from roles/debian-base/tasks/nrpe.yml rename to roles/debian/tasks/nrpe.yml diff --git a/roles/debian-base/tasks/profile.yml b/roles/debian/tasks/profile.yml similarity index 100% rename from roles/debian-base/tasks/profile.yml rename to roles/debian/tasks/profile.yml diff --git a/roles/debian-base/tasks/relayhost.yml b/roles/debian/tasks/relayhost.yml similarity index 82% rename from roles/debian-base/tasks/relayhost.yml rename to roles/debian/tasks/relayhost.yml index f912812..1aeaebd 100644 --- a/roles/debian-base/tasks/relayhost.yml +++ b/roles/debian/tasks/relayhost.yml @@ -27,7 +27,11 @@ - name: Force execution of handlers immediately meta: flush_handlers - name: Sending mail to verify relay host configuration works + when: > + exim_config.changed + and send_test_email + and awx_user_email is defined + and awx_user_email | length > 0 shell: > sleep 2; echo "If you see this message, relayhost on {{ ansible_fqdn }} has been configured correctly." \ - | mailx -s "Relayhost test for {{ ansible_fqdn }}" "{{ sysadmin_mail }}" - when: exim_config.changed + | mailx -s "Relayhost test for {{ ansible_fqdn }}" "{{ awx_user_email }}" diff --git a/roles/debian-base/tasks/resolv.yml b/roles/debian/tasks/resolv.yml similarity index 100% rename from roles/debian-base/tasks/resolv.yml rename to roles/debian/tasks/resolv.yml diff --git a/roles/debian-base/tasks/root.yml b/roles/debian/tasks/root.yml similarity index 100% rename from roles/debian-base/tasks/root.yml rename to roles/debian/tasks/root.yml diff --git a/roles/debian-guest/tasks/ssh_keys.yml b/roles/debian/tasks/ssh_keys.yml similarity index 100% rename from roles/debian-guest/tasks/ssh_keys.yml rename to roles/debian/tasks/ssh_keys.yml diff --git a/roles/debian-base/tasks/sshd_configure.yml b/roles/debian/tasks/sshd_configure.yml similarity index 100% rename from roles/debian-base/tasks/sshd_configure.yml rename to roles/debian/tasks/sshd_configure.yml diff --git a/roles/debian-guest/tasks/sudoers.yml b/roles/debian/tasks/sudoers.yml similarity index 100% rename from roles/debian-guest/tasks/sudoers.yml rename to roles/debian/tasks/sudoers.yml diff --git a/roles/debian-host/tasks/sysctl.yml b/roles/debian/tasks/sysctl.yml similarity index 100% rename from roles/debian-host/tasks/sysctl.yml rename to roles/debian/tasks/sysctl.yml diff --git a/roles/debian-base/tasks/timesync.yml b/roles/debian/tasks/timesync.yml similarity index 100% rename from roles/debian-base/tasks/timesync.yml rename to roles/debian/tasks/timesync.yml diff --git a/roles/debian-base/tasks/tzdata.yml b/roles/debian/tasks/tzdata.yml similarity index 100% rename from roles/debian-base/tasks/tzdata.yml rename to roles/debian/tasks/tzdata.yml diff --git a/roles/debian-base/tasks/vim.yml b/roles/debian/tasks/vim.yml similarity index 100% rename from roles/debian-base/tasks/vim.yml rename to roles/debian/tasks/vim.yml diff --git a/roles/debian/tasks/vn-host.yml b/roles/debian/tasks/vn-host.yml new file mode 100644 index 0000000..c3db0ca --- /dev/null +++ b/roles/debian/tasks/vn-host.yml @@ -0,0 +1,4 @@ +- name: Install package + apt: + deb: "{{ item }}" + with_items: "{{ deb_packages }}" diff --git a/roles/debian-base/tasks/witness.yml b/roles/debian/tasks/witness.yml similarity index 100% rename from roles/debian-base/tasks/witness.yml rename to roles/debian/tasks/witness.yml diff --git a/roles/debian-qemu/templates/auto.homes b/roles/debian/templates/auto.homes similarity index 100% rename from roles/debian-qemu/templates/auto.homes rename to roles/debian/templates/auto.homes diff --git a/roles/debian-base/templates/bacula-fd.conf b/roles/debian/templates/bacula-fd.conf similarity index 100% rename from roles/debian-base/templates/bacula-fd.conf rename to roles/debian/templates/bacula-fd.conf diff --git a/roles/debian-qemu/templates/homes.autofs b/roles/debian/templates/homes.autofs similarity index 100% rename from roles/debian-qemu/templates/homes.autofs rename to roles/debian/templates/homes.autofs diff --git a/roles/debian-base/templates/jail.local b/roles/debian/templates/jail.local similarity index 100% rename from roles/debian-base/templates/jail.local rename to roles/debian/templates/jail.local diff --git a/roles/debian-base/templates/nrpe.cfg b/roles/debian/templates/nrpe.cfg similarity index 100% rename from roles/debian-base/templates/nrpe.cfg rename to roles/debian/templates/nrpe.cfg diff --git a/roles/debian-guest/templates/nslcd.conf b/roles/debian/templates/nslcd.conf similarity index 100% rename from roles/debian-guest/templates/nslcd.conf rename to roles/debian/templates/nslcd.conf diff --git a/roles/debian-base/templates/resolv.conf b/roles/debian/templates/resolv.conf similarity index 100% rename from roles/debian-base/templates/resolv.conf rename to roles/debian/templates/resolv.conf diff --git a/roles/debian-guest/templates/sudoers b/roles/debian/templates/sudoers similarity index 100% rename from roles/debian-guest/templates/sudoers rename to roles/debian/templates/sudoers diff --git a/scripts/backup_pve.sh b/roles/pve/files/backup_pve.sh similarity index 100% rename from scripts/backup_pve.sh rename to roles/pve/files/backup_pve.sh