From ac6430df513364105c160a0a6760174038950c39 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Sat, 2 Sep 2023 12:08:08 +0200 Subject: [PATCH] Add announce script to script servers --- manifests/script.pp | 22 +++++- templates/script/announce.erb.sh | 75 +++++++++++++++++++++ templates/script/multinodeannounce.erb.sh | 81 +++++++++++++++++++++++ 3 files changed, 176 insertions(+), 2 deletions(-) create mode 100755 templates/script/announce.erb.sh create mode 100755 templates/script/multinodeannounce.erb.sh diff --git a/manifests/script.pp b/manifests/script.pp index ccb03ad..9f3b38a 100644 --- a/manifests/script.pp +++ b/manifests/script.pp @@ -18,7 +18,8 @@ class sunetdrive::script ( $backup_server = $config['backup_server'] $rclone_url = 'https://downloads.rclone.org/rclone-current-linux-amd64.deb' $local_path = '/tmp/rclone-current-linux-amd64.deb' - $singlenodes = hiera('singlenodes') + $singlenodes = lookup('singlenodes') + $multinodes = keys(lookup('multinode_mapping')) if $customer == 'mdu' { $eppn_suffix = 'mdh.se' @@ -297,6 +298,16 @@ class sunetdrive::script ( } } if $customer == 'common' { + $multinode_passwords = $multinodes.map | $index, $customer | { + safe_hiera("${customer}_admin_app_password") + } + file { '/root/tasks/announce.sh': + ensure => file, + content => template('sunetdrive/script/multinodeannounce.erb.sh'), + owner => 'root', + group => 'root', + mode => '0700', + } file { '/root/tasks/backupmultinodedb.sh': ensure => file, content => template('sunetdrive/script/backupmultinodedb.erb.sh'), @@ -326,7 +337,7 @@ class sunetdrive::script ( ok_criteria => ['exit_status=0','max_age=2d'], warn_criteria => ['exit_status=1','max_age=3d'], } - } + } $singlenodes.each | $singlenode| { $multinode = hiera_hash('multinode_mapping')[$singlenode]['server'] $multinodeserver = "${multinode}.${site_name}" @@ -377,6 +388,13 @@ class sunetdrive::script ( warn_criteria => ['exit_status=1','max_age=3d'], } } else { + file { '/root/tasks/announce.sh': + ensure => file, + content => template('sunetdrive/script/announce.erb.sh'), + owner => 'root', + group => 'root', + mode => '0700', + } file { '/root/tasks/backupmultinodedb.sh': ensure => absent, } diff --git a/templates/script/announce.erb.sh b/templates/script/announce.erb.sh new file mode 100755 index 0000000..d9ae874 --- /dev/null +++ b/templates/script/announce.erb.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +VALID_ARGS=$(getopt -o cdghi:m:s: --long create,delete,get,help,id:,message:,subject: -- "$@") +# shellcheck disable=SC2181 +if [[ ${?} -ne 0 ]]; then + exit 1; +fi + +usage () { + echo "${0}: -c|--create -m|--message <'Your announcement goes here'> -s|--subject " + echo "${0}: -d|--delete -i|--id " + echo "${0}: -g|--get" + exit 1 +} + +eval set -- "${VALID_ARGS}" +# shellcheck disable=SC2078 +while [ : ]; do + case "$1" in + -c | --create) + method='POST' + shift + ;; + -d | --delete) + method='DELETE' + shift + ;; + -g | --get) + method='GET' + shift + ;; + -h | --help) + usage + ;; + -i | --id) + argument="${2}" + shift 2 + ;; + -m | --message) + message="${2}" + shift 2 + ;; + -s | --subject) + subject="${2}" + shift 2 + ;; + *) + break + ;; + esac +done + +if [[ ${method} == 'DELETE' ]] && [[ -z ${argument} ]]; then + usage +fi +if [[ ${method} == 'POST' ]]; then + if [[ -z ${message} ]] || [[ -z ${subject} ]]; then + usage + fi + argument='{"subject":"'${subject}'","message":"'${message}'", "plainMessage":"'${message}'", "groups": [], "userId": "admin", "activities": false, "notifications": true, "emails": false, "comments": false }' +fi + +curl_cmd(){ + local method="${1}" + if [[ ${method} == 'POST' ]] && [[ -n ${2} ]]; then + local payload=(-d "${2}" -H "Content-Type: application/json") + elif [[ ${method} == 'DELETE' ]] && [[ -n ${2} ]]; then + local id="/${2}" + fi + local admin_app_password="<%= @admin_app_password %>" + domain="$(hostname -d)" + curl -X "${method}" -u "admin:${admin_app_password}" "${payload[@]}" -H 'OCS-APIRequest: true' "https://${domain}/ocs/v2.php/apps/announcementcenter/api/v1/announcements${id}" +} +curl_cmd "${method}" "${argument}" + diff --git a/templates/script/multinodeannounce.erb.sh b/templates/script/multinodeannounce.erb.sh new file mode 100755 index 0000000..a04d0fc --- /dev/null +++ b/templates/script/multinodeannounce.erb.sh @@ -0,0 +1,81 @@ +#!/bin/bash + +VALID_ARGS=$(getopt -o cdghi:m:s: --long create,delete,get,help,id:,message:,subject: -- "$@") +# shellcheck disable=SC2181 +if [[ ${?} -ne 0 ]]; then + exit 1; +fi + +usage () { + echo "${0}: -c|--create -m|--message <'Your announcement goes here'> -s|--subject " + echo "${0}: -d|--delete -i|--id " + echo "${0}: -g|--get" + exit 1 +} + +eval set -- "${VALID_ARGS}" +# shellcheck disable=SC2078 +while [ : ]; do + case "$1" in + -c | --create) + method='POST' + shift + ;; + -d | --delete) + method='DELETE' + shift + ;; + -g | --get) + method='GET' + shift + ;; + -h | --help) + usage + ;; + -i | --id) + argument="${2}" + shift 2 + ;; + -m | --message) + message="${2}" + shift 2 + ;; + -s | --subject) + subject="${2}" + shift 2 + ;; + *) + break + ;; + esac +done + +if [[ ${method} == 'DELETE' ]] && [[ -z ${argument} ]]; then + usage +fi +if [[ ${method} == 'POST' ]]; then + if [[ -z ${message} ]] || [[ -z ${subject} ]]; then + usage + fi + argument='{"subject":"'${subject}'","message":"'${message}'", "plainMessage":"'${message}'", "groups": [], "userId": "admin", "activities": false, "notifications": true, "emails": false, "comments": false }' +fi + +curl_cmd(){ + local admin_app_password="${1}" + local customer="${2}" + local method="${3}" + if [[ ${method} == 'POST' ]] && [[ -n ${4} ]]; then + local payload=(-d "${4}" -H "Content-Type: application/json") + elif [[ ${method} == 'DELETE' ]] && [[ -n ${4} ]]; then + local id="/${4}" + fi + domain="$(hostname -d)" + curl -X "${method}" -u "admin:${admin_app_password}" "${payload[@]}" -H 'OCS-APIRequest: true' "https://${customer}.${domain}/ocs/v2.php/apps/announcementcenter/api/v1/announcements${id}" +} + +#<%- index = 0 -%> +#<%- @multinodes.each do |customer| -%> +curl_cmd "<%= @multinode_passwords[index] %>" "<%= customer %>" "${method}" "${argument}" +#<%- index += 1 -%> +#<%- end -%> +