mirror of
https://github.com/m8tin/cis.git
synced 2026-06-02 14:56:58 +02:00
Composition Sync Setup and Snapshot
This commit is contained in:
@@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
[ "$(id -u)" != "0" ] \
|
||||
&& sudo "${0}" \
|
||||
&& exit 0
|
||||
|
||||
|
||||
|
||||
_SETUP="$(readlink -f "${0}" 2> /dev/null)"
|
||||
|
||||
# Folders always ends with an tailing '/'
|
||||
_CIS_ROOT="${_SETUP%%/script/host/zfs/composition-sync/*}/" #Removes longest matching pattern '/script/host/zfs/composition-sync/*' from the end
|
||||
_DOMAIN="$("${_CIS_ROOT:?"Missing CIS_ROOT"}core/printOwnDomain.sh")"
|
||||
_DEFINITIONS="${_CIS_ROOT:?"Missing CIS_ROOT"}definitions/${_DOMAIN:?"Missing DOMAIN"}/"
|
||||
|
||||
|
||||
|
||||
function checkPreconditions() {
|
||||
[ -d "${_DEFINITIONS:?"Missing DEFINITIONS"}compositions" ] \
|
||||
&& return 0
|
||||
|
||||
echo "No folder for your defined composition settings found: ${_DEFINITIONS:?"Missing DEFINITIONS"}compositions"
|
||||
echo "Please create it and add your custom composition settings in there, following this convention:"
|
||||
echo " 1.) './NAME_OF_THE_COMPOSITION/current-host' containing one line with the FQDN of the host running the composition."
|
||||
echo " 2.) './NAME_OF_THE_COMPOSITION/composition-sync-hosts' containing a list of hosts receiving the composition, one host with its FQDN per line."
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
|
||||
echo "Setup the host that receives the composition of others ... " \
|
||||
&& checkPreconditions \
|
||||
&& exit 0
|
||||
|
||||
exit 1
|
||||
@@ -4,24 +4,16 @@
|
||||
&& sudo "${0}" \
|
||||
&& exit 0
|
||||
|
||||
|
||||
|
||||
_SETUP="$(readlink -f "${0}" 2> /dev/null)"
|
||||
|
||||
# Folders always ends with an tailing '/'
|
||||
_CIS_ROOT="${_SETUP%%/script/host/zfs/composition-sync/*}/" #Removes longest matching pattern '/script/host/zfs/composition-sync/*' from the end
|
||||
_CORE_SCRIPTS="${_CIS_ROOT:?"Missing CIS_ROOT"}core/"
|
||||
_DOMAIN="$("${_CIS_ROOT:?"Missing CIS_ROOT"}core/printOwnDomain.sh")"
|
||||
_DEFINITIONS="${_CIS_ROOT:?"Missing CIS_ROOT"}definitions/${_DOMAIN:?"Missing DOMAIN"}/"
|
||||
source /cis/core/base.module.sh
|
||||
|
||||
|
||||
|
||||
echo "Setup the user and permission to enable syncing compositions of this host ... " \
|
||||
&& "${_CORE_SCRIPTS:?"Missing CORE_SCRIPTS"}addNormalUser.sh" composition-sync \
|
||||
&& "${CIS[COREROOT]:?"Missing CORE_SCRIPTS"}addNormalUser.sh" composition-sync \
|
||||
&& echo \
|
||||
&& "${_CORE_SCRIPTS:?"Missing CORE_SCRIPTS"}defineAuthorizedKeysOfUser.sh" "${_DEFINITIONS}" composition-sync \
|
||||
&& "${CIS[COREROOT]:?"Missing CORE_SCRIPTS"}defineAuthorizedKeysOfUser.sh" "${CIS[DOMAINDEFINITIONS]}" composition-sync \
|
||||
&& echo \
|
||||
&& "${_CORE_SCRIPTS:?"Missing CORE_SCRIPTS"}ensureUsageOfDefinitions.sh" "${_DEFINITIONS}" /etc/sudoers.d/allow-composition-sync-send \
|
||||
&& "${CIS[COREROOT]:?"Missing CORE_SCRIPTS"}ensureUsageOfDefinitions.sh" "${CIS[DOMAINDEFINITIONS]}" /etc/sudoers.d/allow-composition-sync-send \
|
||||
&& exit 0
|
||||
|
||||
exit 1
|
||||
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
[ "$(id -u)" != "0" ] \
|
||||
&& sudo "${0}" \
|
||||
&& exit 0
|
||||
|
||||
source /cis/core/base.module.sh
|
||||
|
||||
|
||||
|
||||
function setup() {
|
||||
local _COMPOSITION _COMPOSITIONS_FOLDER _CURRENT_HOST_FILE _SYNC_HOSTS_FILE
|
||||
_COMPOSITION="${1}"
|
||||
_COMPOSITIONS_FOLDER="${CIS[DOMAINDEFINITIONS]}compositions/"
|
||||
_CURRENT_HOST_FILE="${_COMPOSITIONS_FOLDER}${_COMPOSITION}/current-host"
|
||||
_SYNC_HOSTS_FILE="${_COMPOSITIONS_FOLDER}${_COMPOSITION}/composition-sync-hosts"
|
||||
readonly _COMPOSITION _COMPOSITIONS_FOLDER
|
||||
|
||||
echo "Setup the host that receives the composition of others ..."
|
||||
echo
|
||||
echo "No folder for your defined composition settings found: ${_COMPOSITIONS_FOLDER}"
|
||||
echo "Please create it and add your custom composition settings in there, following this convention:"
|
||||
echo " 1.) './NAME_OF_THE_COMPOSITION/current-host' containing one line with the FQDN of the host running the composition."
|
||||
echo " 2.) './NAME_OF_THE_COMPOSITION/composition-sync-hosts' containing a list of hosts receiving the composition, one host with its FQDN per line."
|
||||
echo
|
||||
|
||||
[ -d "${_COMPOSITIONS_FOLDER}" ] \
|
||||
&& echo "Definiton folder for compositions found: ${_COMPOSITIONS_FOLDER}" \
|
||||
&& echo
|
||||
|
||||
[ -n "${_COMPOSITION}" ] \
|
||||
&& [ -f "${_CURRENT_HOST_FILE}" ] \
|
||||
&& echo "Current defined host to run composition '${_COMPOSITION}' is:" \
|
||||
&& cat "${_CURRENT_HOST_FILE}" \
|
||||
&& echo
|
||||
|
||||
[ -n "${_COMPOSITION}" ] \
|
||||
&& [ -f "${_SYNC_HOSTS_FILE}" ] \
|
||||
&& echo "Following hosts should sync the ZFS of this composition '${COMPOSITION}':" \
|
||||
&& cat "${_SYNC_HOSTS_FILE}" \
|
||||
&& echo
|
||||
|
||||
echo "Optionally you can create following file:"
|
||||
echo " - rollback (e.g.: date +%F > rollback) : allows the removal of the newest @SYNC snapshots of this day,"
|
||||
echo " as long as no normal snapshot is reached."
|
||||
echo " - ssh-port (e.g.: echo 22 > ssh-port) : allows to use a custom port for the SSH connection."
|
||||
echo ' - zfs-branch (e.g.: echo zpool1/persistent > zfs-branch) : allows to use a custom zfs prefix like: ${zfs-branch}/${composition}.'
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
base.set COMPOSITION "${1}" '^([a-zA-Z0-9][a-zA-Z0-9_-]*)?$' || exit 1
|
||||
setup "${COMPOSITION}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user