From 2e5d23fd745e3bcfddfcb1a8c0751e5e5b53fa1b Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Fri, 24 May 2024 10:36:19 -0400 Subject: [PATCH] Switch to dynamic /etc/issue generator --- roles/base/tasks/main.yml | 17 ++--- .../base/templates/etc/cron.d/update-issue.j2 | 5 ++ .../base/templates/etc/cron.d/update-motd.j2 | 2 +- roles/base/templates/etc/issue.j2 | 20 ------ .../usr/local/sbin/update-issue.sh.j2 | 63 +++++++++++++++++++ .../usr/local/sbin/update-motd.sh.j2 | 12 ++-- 6 files changed, 86 insertions(+), 33 deletions(-) create mode 100644 roles/base/templates/etc/cron.d/update-issue.j2 delete mode 100644 roles/base/templates/etc/issue.j2 create mode 100755 roles/base/templates/usr/local/sbin/update-issue.sh.j2 diff --git a/roles/base/tasks/main.yml b/roles/base/tasks/main.yml index bc78400..f9e5de1 100644 --- a/roles/base/tasks/main.yml +++ b/roles/base/tasks/main.yml @@ -468,12 +468,6 @@ - name: set PVC Plymouth theme as the default command: plymouth-set-default-theme -R pvc -# issue prompt -- name: install PVC /etc/issue file - template: - src: etc/issue.j2 - dest: /etc/issue - # syslog - name: install rsyslog and logrotate configs template: @@ -638,24 +632,26 @@ tags: base-shell # motd -- name: ensure update-motd and profile.d scripts are present +- name: ensure update-issue, update-motd and profile.d scripts are present template: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0755 with_items: + - { src: "usr/local/sbin/update-issue.sh.j2", dest: "/usr/local/sbin/update-issue.sh" } - { src: "usr/local/sbin/update-motd.sh.j2", dest: "/usr/local/sbin/update-motd.sh" } - { src: "etc/profile.d/w.sh.j2", dest: "/etc/profile.d/w.sh" } - { src: "etc/profile.d/pvc.sh.j2", dest: "/etc/profile.d/zzz_pvc.sh" } register: profile_scripts tags: base-shell -- name: install update-motd crontab +- name: install banner update crontabs template: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0644 with_items: + - { src: "etc/cron.d/update-issue.j2", dest: "/etc/cron.d/update-issue" } - { src: "etc/cron.d/update-motd.j2", dest: "/etc/cron.d/update-motd" } tags: base-shell @@ -670,6 +666,11 @@ when: profile_scripts.changed tags: base-shell +- name: run update-issue on change + command: /usr/local/sbin/update-issue.sh + when: profile_scripts.changed + tags: base-shell + # htop - name: install htop configuration template: diff --git a/roles/base/templates/etc/cron.d/update-issue.j2 b/roles/base/templates/etc/cron.d/update-issue.j2 new file mode 100644 index 0000000..6041c71 --- /dev/null +++ b/roles/base/templates/etc/cron.d/update-issue.j2 @@ -0,0 +1,5 @@ +# cron file for update-issue +# {{ ansible_managed }} + +PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +@reboot root /usr/local/sbin/update-issue.sh &>/dev/null diff --git a/roles/base/templates/etc/cron.d/update-motd.j2 b/roles/base/templates/etc/cron.d/update-motd.j2 index a4d40d5..9c8d7d9 100644 --- a/roles/base/templates/etc/cron.d/update-motd.j2 +++ b/roles/base/templates/etc/cron.d/update-motd.j2 @@ -1,4 +1,4 @@ -# cron file for motd +# cron file for update-motd # {{ ansible_managed }} PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" diff --git a/roles/base/templates/etc/issue.j2 b/roles/base/templates/etc/issue.j2 deleted file mode 100644 index 542cc54..0000000 --- a/roles/base/templates/etc/issue.j2 +++ /dev/null @@ -1,20 +0,0 @@ - - ███████████████████████ █████ █████ ███████████ ██ ██ ██ - ███████████████████████ █████ █████ ███████████ ██ ██ ██ - ████ █████ █████ ████ - ████ █████ █████ ████ - ███████████████████████ █████ █████ ████ - ███████████████████████ █████ █████ ████ - ███ █████████ ███████████████████████ - ███ ███████ ███████████████████████ - - - Parallel Virtual Cluster (PVC) Node - - Node name: {{ ansible_fqdn }} - Cluster name: {{ cluster_group }} - Managed by: {{ manager_email }} - Base System: {{ ansible_lsb.description }} - - UNAUTHORIZED ACCESS IS PROHIBITED. ALL LOGIN ATTEMPTS WILL BE LOGGED. - diff --git a/roles/base/templates/usr/local/sbin/update-issue.sh.j2 b/roles/base/templates/usr/local/sbin/update-issue.sh.j2 new file mode 100755 index 0000000..438b6b8 --- /dev/null +++ b/roles/base/templates/usr/local/sbin/update-issue.sh.j2 @@ -0,0 +1,63 @@ +#!/bin/bash + +# Update dynamic ISSUE file +# {{ ansible_managed }} + +set -o errexit + +# Title-case generator +tc() { set ${*,,} ; echo ${*^} ; } + +TMPFILE=$(mktemp) +TGTFILE=/etc/issue + +VERSION_ID="$( cat /etc/debian_version )" +VERSION_CODENAME="$( grep '^VERSION_CODENAME=' /etc/os-release | awk -F'=' '{ print $2 }' )" +DEBVER="${NAME} ${VERSION_ID} \"$(tc ${VERSION_CODENAME} )\"" +PVCVER="$( /usr/share/pvc/pvcnoded.py --version )" + +echo >> $TMPFILE +echo " ███████████████████████ █████ █████ ███████████ ██ ██ ██ " >> $TMPFILE +echo " ███████████████████████ █████ █████ ███████████ ██ ██ ██ " >> $TMPFILE +echo " ████ █████ █████ ████ " >> $TMPFILE +echo " ████ █████ █████ ████ " >> $TMPFILE +echo " ███████████████████████ █████ █████ ████ " >> $TMPFILE +echo " ███████████████████████ █████ █████ ████ " >> $TMPFILE +echo " ███ █████████ ███████████████████████ " >> $TMPFILE +echo " ███ ███████ ███████████████████████ " >> $TMPFILE +echo >> $TMPFILE +echo >> $TMPFILE +echo -e " \033[01;34mParallel Virtual Cluster (PVC) Node\033[0m" >> $TMPFILE +echo >> $TMPFILE +echo -e " > \033[1;34mNode name:\033[0m \033[01;36m$(hostname)\033[0m" >> $TMPFILE +echo -e " > \033[1;34mCluster name:\033[0m \033[01;36m{{ cluster_group }}\033[0m" >> $TMPFILE +echo -e " > \033[1;34mSystem type:\033[0m PVC \033[1;36m{% if is_coordinator %}coordinator{% else %}hypervisor{% endif %}\033[0m node" >> $TMPFILE +echo -e " > \033[1;34mManaged by:\033[0m {{ manager_email }}" >> $TMPFILE +echo -e " > \033[1;34mPVC version:\033[0m ${PVCVER}" >> $TMPFILE +echo -e " > \033[1;34mBase system:\033[0m {{ ansible_lsb.description }}" >> $TMPFILE +echo -e " > \033[1;34mKernel:\033[0m $(/bin/uname -vm)" >> $TMPFILE + +# Get machine information +HARDWARE_DETAIL="$( /usr/sbin/dmidecode | grep -A7 'System Information' )" +HARDWARE_VENDOR="$( grep 'Manufacturer:' <<<"${HARDWARE_DETAIL}" | sed 's/Manufacturer: //; s/\s*$//g; s/^\s*//g' )" +if [[ -z ${HARDWARE_VENDOR} ]]; then + HARDWARE_VENDOR="Unknown" +fi +HARDWARE_MODEL="$( grep 'Product Name:' <<<"${HARDWARE_DETAIL}" | sed 's/Product Name: //; s/\s*$//g; s/^\s*//g' )" +if [[ -z ${HARDWARE_MODEL} ]]; then + HARDWARE_MODEL="Unknown" +fi +HARDWARE_SERIAL="$( grep 'Serial Number:' <<<"${HARDWARE_DETAIL}" | sed 's/Serial Number: //; s/\s*$//g; s/^\s*//g' )" +if [[ -z ${HARDWARE_SERIAL} ]]; then + HARDWARE_SERIAL="Unknown" +fi +echo -e -n " > \033[1;34mHardware Vendor:\033[0m ${HARDWARE_VENDOR}" >> $TMPFILE +echo -e -n " \033[1;34mModel:\033[0m ${HARDWARE_MODEL}" >> $TMPFILE +echo -e -n " \033[1;34mSerial:\033[0m ${HARDWARE_SERIAL}" >> $TMPFILE +echo >> $TMPFILE +echo >> $TMPFILE +echo " UNAUTHORIZED ACCESS IS PROHIBITED. ALL LOGIN ATTEMPTS WILL BE LOGGED." >> $TMPFILE +echo >> $TMPFILE + +mv $TMPFILE $TGTFILE || rm $TMPFILE +chmod 644 $TGTFILE diff --git a/roles/base/templates/usr/local/sbin/update-motd.sh.j2 b/roles/base/templates/usr/local/sbin/update-motd.sh.j2 index 0010ceb..df82256 100755 --- a/roles/base/templates/usr/local/sbin/update-motd.sh.j2 +++ b/roles/base/templates/usr/local/sbin/update-motd.sh.j2 @@ -15,11 +15,16 @@ NAME="$( grep '^NAME=' /etc/os-release | awk -F'"' '{ print $2 }' )" VERSION_ID="$( cat /etc/debian_version )" VERSION_CODENAME="$( grep '^VERSION_CODENAME=' /etc/os-release | awk -F'=' '{ print $2 }' )" DEBVER="${NAME} ${VERSION_ID} \"$(tc ${VERSION_CODENAME} )\"" +PVCVER="$( /usr/share/pvc/pvcnoded.py --version )" echo >> $TMPFILE -echo -e "\033[01;34mParallel Virtual Cluster \033[01;36m(${DEBVER})\033[0m" >> $TMPFILE -echo -e "> \033[1;34mHostname:\033[0m \033[01;36m$(hostname)\033[0m" >> $TMPFILE -echo -e "> \033[1;34mSystem Type:\033[0m: PVC \033[1;36m{% if is_coordinator %}coordinator{% else %}hypervisor{% endif %}\033[0m node" >> $TMPFILE +echo -e "\033[01;34mParallel Virtual Cluster (PVC) Node\033[0m" >> $TMPFILE +echo -e "> \033[1;34mNode name:\033[0m \033[01;36m$(hostname)\033[0m" >> $TMPFILE +echo -e "> \033[1;34mCluster name:\033[0m \033[01;36m{{ cluster_group }}\033[0m" >> $TMPFILE +echo -e "> \033[1;34mSystem type:\033[0m PVC \033[1;36m{% if is_coordinator %}coordinator{% else %}hypervisor{% endif %}\033[0m node" >> $TMPFILE +echo -e "> \033[1;34mPVC version:\033[0m ${PVCVER}" >> $TMPFILE +echo -e "> \033[1;34mBase system:\033[0m {{ ansible_lsb.description }}" >> $TMPFILE +echo -e "> \033[1;34mKernel:\033[0m $(/bin/uname -vm)" >> $TMPFILE # Get machine information HARDWARE_DETAIL="$( /usr/sbin/dmidecode | grep -A7 'System Information' )" @@ -39,7 +44,6 @@ echo -e -n "> \033[1;34mHardware Vendor:\033[0m ${HARDWARE_VENDOR}" >> $TMPFILE echo -e -n " \033[1;34mModel:\033[0m ${HARDWARE_MODEL}" >> $TMPFILE echo -e -n " \033[1;34mSerial:\033[0m ${HARDWARE_SERIAL}" >> $TMPFILE echo >> $TMPFILE -echo -e "> \033[1;34mKernel:\033[0m $(/bin/uname -srvmo)" >> $TMPFILE mv $TMPFILE $TGTFILE || rm $TMPFILE chmod 644 $TGTFILE