mirror of
https://github.com/m8tin/cis.git
synced 2026-08-01 11:47:31 +02:00
Module composition improved
This commit is contained in:
@@ -3,6 +3,42 @@ source /cis/core/base.module.sh
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function composition.isRunningOnThisHost() {
|
||||||
|
local _COMPOSITION _COMPOSITIONS _COMPOSITION_PATH _CURRENTHOST_FILE
|
||||||
|
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
||||||
|
_COMPOSITION="${1:?"Missing first parameter COMPOSITION"}"
|
||||||
|
_COMPOSITION_PATH="${_COMPOSITIONS}${_COMPOSITION}/"
|
||||||
|
_CURRENTHOST_FILE="current-host"
|
||||||
|
readonly _COMPOSITION _COMPOSITIONS _COMPOSITION_PATH _CURRENTHOST_FILE
|
||||||
|
|
||||||
|
[ -n "${CIS[HOST]}" ] \
|
||||||
|
&& [ -f "${_COMPOSITION_PATH}${_CURRENTHOST_FILE}" ] \
|
||||||
|
&& head -n 1 -- "${_COMPOSITION_PATH}${_CURRENTHOST_FILE}" | grep -q -E -- "^${CIS[HOST]}" \
|
||||||
|
&& return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function composition.isSyncedByThisHost() {
|
||||||
|
local _COMPOSITION _COMPOSITIONS _COMPOSITION_PATH _CURRENTHOST_FILE _SYNCHOSTS_FILE
|
||||||
|
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
||||||
|
_COMPOSITION="${1:?"Missing first parameter COMPOSITION"}"
|
||||||
|
_COMPOSITION_PATH="${_COMPOSITIONS}${_COMPOSITION}/"
|
||||||
|
_CURRENTHOST_FILE="current-host"
|
||||||
|
_SYNCHOSTS_FILE="composition-sync-hosts"
|
||||||
|
readonly _COMPOSITION _COMPOSITIONS _COMPOSITION_PATH _CURRENTHOST_FILE _SYNCHOSTS_FILE
|
||||||
|
|
||||||
|
# This host either runs the composition or syncs it.
|
||||||
|
# If there is no CURRENTHOST_FILE than the definition is invalid and should not be synced.
|
||||||
|
[ -n "${CIS[HOST]}" ] \
|
||||||
|
&& [ -f "${_COMPOSITION_PATH}${_CURRENTHOST_FILE}" ] \
|
||||||
|
&& head -n 1 -- "${_COMPOSITION_PATH}${_CURRENTHOST_FILE}" | grep -q -v -E -- "^${CIS[HOST]}" \
|
||||||
|
&& grep -q -E -- "^${CIS[HOST]}" "${_COMPOSITION_PATH}${_SYNCHOSTS_FILE}" \
|
||||||
|
&& return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
function composition.printAll() {
|
function composition.printAll() {
|
||||||
local _COMPOSITIONS _CURRENTHOST_FILE
|
local _COMPOSITIONS _CURRENTHOST_FILE
|
||||||
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
||||||
@@ -23,31 +59,28 @@ function composition.printAllRunningOnThisHost() {
|
|||||||
_CURRENTHOST_FILE="current-host"
|
_CURRENTHOST_FILE="current-host"
|
||||||
readonly _COMPOSITIONS _CURRENTHOST_FILE
|
readonly _COMPOSITIONS _CURRENTHOST_FILE
|
||||||
|
|
||||||
grep -l -F "${CIS[HOST]}" "${_COMPOSITIONS}"*/"${_CURRENTHOST_FILE}" | while read -r _CURRENTHOST_FILE_PATH; do
|
for _COMPOSITION_DIR in "${_COMPOSITIONS}"*; do
|
||||||
# Like dirname: removes tailing '/${_CURRENTHOST_FILE}'
|
|
||||||
local _COMPOSITION="${_CURRENTHOST_FILE_PATH%/${_CURRENTHOST_FILE}}"
|
|
||||||
# Like basename
|
# Like basename
|
||||||
echo "${_COMPOSITION##*/}"
|
local _COMPOSITION="${_COMPOSITION_DIR##*/}"
|
||||||
|
|
||||||
|
composition.isRunningOnThisHost "${_COMPOSITION}" \
|
||||||
|
&& echo "${_COMPOSITION}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function composition.printAllWhereThisHostSyncs() {
|
function composition.printAllSyncedByThisHost() {
|
||||||
local _COMPOSITIONS _CURRENTHOST_FILE _SYNCHOSTS_FILE
|
local _COMPOSITIONS
|
||||||
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
_COMPOSITIONS="${CIS[DOMAINDEFINITIONS]:?"Missing CIS_DOMAINDEFINITIONS"}compositions/"
|
||||||
_CURRENTHOST_FILE="current-host"
|
readonly _COMPOSITIONS
|
||||||
_SYNCHOSTS_FILE="composition-sync-hosts"
|
|
||||||
readonly _COMPOSITIONS _CURRENTHOST_FILE _SYNCHOSTS_FILE
|
|
||||||
|
|
||||||
grep -lF "${CIS[HOST]}" "${_COMPOSITIONS}"*/"${_SYNCHOSTS_FILE}" | while read -r _SYNCHOSTS_FILE_PATH; do
|
for _COMPOSITION_DIR in "${_COMPOSITIONS}"*; do
|
||||||
|
|
||||||
# Like dirname: removes tailing '/${_SYNCHOSTS_FILE}'
|
# Like basename
|
||||||
local _COMPOSITION="${_SYNCHOSTS_FILE_PATH%/${_SYNCHOSTS_FILE}}"
|
local _COMPOSITION="${_COMPOSITION_DIR##*/}"
|
||||||
|
|
||||||
# This host either runs the composition or syncs it.
|
composition.isSyncedByThisHost "${_COMPOSITION}" \
|
||||||
# If there is no CURRENTHOST_FILE than the definition is invalid and should not be synced.
|
&& echo "${_COMPOSITION}"
|
||||||
[ -f "${_COMPOSITION}/${_CURRENTHOST_FILE}" ] \
|
|
||||||
&& grep -q -v -F "${CIS[HOST]}" "${_COMPOSITION}/${_CURRENTHOST_FILE}" \
|
|
||||||
&& echo "${_COMPOSITION##*/}"
|
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user