mirror of
https://github.com/hackacad/bastille.git
synced 2026-01-06 04:34:19 +01:00
Initial commit for subshell parallel mode
This commit is contained in:
@@ -91,6 +91,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate jail state
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
@@ -123,7 +125,12 @@ for _jail in ${JAILS}; do
|
||||
RETURN=$(($RETURN+$ERROR_CODE))
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
# Check when a command is executed in all running jails. (bastille cmd ALL ...)
|
||||
if [ "${COUNT}" -gt 1 ] && [ "${RETURN}" -gt 0 ]; then
|
||||
|
||||
@@ -93,6 +93,23 @@ warn() {
|
||||
echo -e "${COLOR_YELLOW}$*${COLOR_RESET}"
|
||||
}
|
||||
|
||||
# Parallel mode, don't exceed process limit
|
||||
bastille_running_jobs() {
|
||||
|
||||
_process_limit="${1}"
|
||||
_running_jobs=$((_running_jobs + 1))
|
||||
|
||||
if [ "${_running_jobs}" -ge "${_process_limit}" ]; then
|
||||
|
||||
# Wait for at least one process to finish
|
||||
wait -n 2>/dev/null || wait
|
||||
|
||||
_running_jobs=$((_running_jobs - 1))
|
||||
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
check_target_exists() {
|
||||
local _TARGET="${1}"
|
||||
local _jaillist="$(bastille list jails)"
|
||||
|
||||
@@ -116,6 +116,8 @@ print_jail_conf() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Handle Bastille specific properties
|
||||
# Currently only 'depend' 'priority' and 'boot'
|
||||
if [ "${PROPERTY}" = "priority" ] || [ "${PROPERTY}" = "prio" ]; then
|
||||
@@ -290,7 +292,13 @@ for _jail in ${JAILS}; do
|
||||
rm "${_tmpfile}"
|
||||
fi
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
# Only display this message once at the end (not for every jail). -- cwells
|
||||
if { [ "${ACTION}" = "set" ] || [ "${ACTION}" = "remove" ]; } && [ -z "${BASTILLE_PROPERTY}" ]; then
|
||||
|
||||
@@ -89,6 +89,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
host_path="${HOST_PATH}"
|
||||
@@ -97,5 +99,10 @@ for _jail in ${JAILS}; do
|
||||
if ! cp "${OPTION}" "${host_path}" "${jail_path}"; then
|
||||
error_continue "[ERROR]: CP failed: ${host_path} -> ${jail_path}"
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
@@ -53,6 +53,8 @@ destroy_jail() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
bastille_jail_base="${bastille_jailsdir}/${_jail}"
|
||||
bastille_jail_log="${bastille_logsdir}/${_jail}_console.log"
|
||||
|
||||
@@ -117,8 +119,14 @@ destroy_jail() {
|
||||
pfctl -a "rdr/${_jail}" -Fn
|
||||
fi
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
done
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
}
|
||||
|
||||
destroy_rel() {
|
||||
|
||||
@@ -91,6 +91,8 @@ set_target "${DEST_TARGET}" && DEST_TARGET="${JAILS}"
|
||||
|
||||
for _jail in ${DEST_TARGET}; do
|
||||
|
||||
(
|
||||
|
||||
if [ "${_jail}" = "${SOURCE_TARGET}" ]; then
|
||||
continue
|
||||
else
|
||||
@@ -105,6 +107,10 @@ for _jail in ${DEST_TARGET}; do
|
||||
fi
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
echo
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -131,6 +131,8 @@ add_cpuset() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
else
|
||||
@@ -284,4 +286,10 @@ for _jail in ${JAILS}; do
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
@@ -139,6 +139,8 @@ fi
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
else
|
||||
@@ -196,4 +198,9 @@ for _jail in ${JAILS}; do
|
||||
mount -F "${bastille_jailsdir}/${_jail}/fstab" -a || error_continue "Failed to mount volume: ${_fullpath}"
|
||||
echo "Added: ${_fstab_entry}"
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -97,6 +97,8 @@ errors=0
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate jail state
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
@@ -128,7 +130,12 @@ for _jail in ${JAILS}; do
|
||||
fi
|
||||
fi
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
if [ $errors -ne 0 ]; then
|
||||
error_exit "[ERROR]: Failed to apply on some jails, please check logs"
|
||||
|
||||
@@ -88,6 +88,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate jail state
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
@@ -101,4 +103,9 @@ for _jail in ${JAILS}; do
|
||||
|
||||
jexec -l "${_jail}" /usr/sbin/service "$@"
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -104,6 +104,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Continue if '-b|--boot' is set and 'boot=off'
|
||||
if [ "${BOOT}" -eq 1 ]; then
|
||||
BOOT_ENABLED="$(sysrc -f ${bastille_jailsdir}/${_jail}/settings.conf -n boot)"
|
||||
@@ -208,4 +210,9 @@ for _jail in ${JAILS}; do
|
||||
# Delay between jail action
|
||||
sleep "${DELAY_TIME}"
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
|
||||
@@ -87,6 +87,8 @@ set_target "${TARGET}" "reverse"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate that all jails that 'depend' on this one are stopped
|
||||
for _depend_jail in $(ls --color=never ${bastille_jailsdir} | sed -e 's/\n//g'); do
|
||||
if ! grep -hoqsw "depend=" ${bastille_jailsdir}/${_depend_jail}/settings.conf; then
|
||||
@@ -149,4 +151,9 @@ for _jail in ${JAILS}; do
|
||||
done
|
||||
fi
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -88,6 +88,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate jail state
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
@@ -101,4 +103,9 @@ for _jail in ${JAILS}; do
|
||||
|
||||
jexec -l "${_jail}" /usr/sbin/sysrc "$@"
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -77,6 +77,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
bastille_jail_tags="${bastille_jailsdir}/${_jail}/tags"
|
||||
case ${ACTION} in
|
||||
add)
|
||||
@@ -118,4 +120,9 @@ for _jail in ${JAILS}; do
|
||||
;;
|
||||
esac
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -272,6 +272,8 @@ fi
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
else
|
||||
@@ -474,4 +476,9 @@ for _jail in ${JAILS}; do
|
||||
|
||||
info "\nTemplate applied: ${TEMPLATE}"
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -88,6 +88,8 @@ set_target "${TARGET}"
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
# Validate jail state
|
||||
check_target_is_running "${_jail}" || if [ "${AUTO}" -eq 1 ]; then
|
||||
bastille start "${_jail}"
|
||||
@@ -128,4 +130,9 @@ for _jail in ${JAILS}; do
|
||||
|
||||
echo "Unmounted: ${_jailpath}"
|
||||
|
||||
done
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
@@ -45,65 +45,25 @@ EOF
|
||||
}
|
||||
|
||||
zfs_snapshot() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
# shellcheck disable=SC2140
|
||||
zfs snapshot -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"@"${TAG}"
|
||||
|
||||
done
|
||||
|
||||
# shellcheck disable=SC2140
|
||||
zfs snapshot -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"@"${TAG}"
|
||||
}
|
||||
|
||||
zfs_destroy_snapshot() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
# shellcheck disable=SC2140
|
||||
zfs destroy -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"@"${TAG}"
|
||||
|
||||
done
|
||||
|
||||
# shellcheck disable=SC2140
|
||||
zfs destroy -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"@"${TAG}"
|
||||
}
|
||||
|
||||
zfs_set_value() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
zfs "${ATTRIBUTE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
|
||||
done
|
||||
|
||||
zfs "${ATTRIBUTE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
}
|
||||
|
||||
zfs_get_value() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
zfs get "${ATTRIBUTE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
|
||||
done
|
||||
|
||||
zfs get "${ATTRIBUTE}" "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
}
|
||||
|
||||
zfs_disk_usage() {
|
||||
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
zfs list -t all -o name,used,avail,refer,mountpoint,compress,ratio -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
|
||||
done
|
||||
|
||||
zfs list -t all -o name,used,avail,refer,mountpoint,compress,ratio -r "${bastille_zfs_zpool}/${bastille_zfs_prefix}/jails/${_jail}"
|
||||
}
|
||||
|
||||
|
||||
@@ -147,27 +107,40 @@ if [ -z "${bastille_zfs_zpool}" ]; then
|
||||
error_exit "[ERROR]: ZFS zpool not defined."
|
||||
fi
|
||||
|
||||
case "${ACTION}" in
|
||||
set)
|
||||
ATTRIBUTE="${3}"
|
||||
zfs_set_value
|
||||
;;
|
||||
get)
|
||||
ATTRIBUTE="${3}"
|
||||
zfs_get_value
|
||||
;;
|
||||
snap|snapshot)
|
||||
TAG="${3}"
|
||||
zfs_snapshot
|
||||
;;
|
||||
destroy_snap|destroy_snapshot)
|
||||
TAG="${3}"
|
||||
zfs_destroy_snapshot
|
||||
;;
|
||||
df|usage)
|
||||
zfs_disk_usage
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
for _jail in ${JAILS}; do
|
||||
|
||||
(
|
||||
|
||||
info "\n[${_jail}]:"
|
||||
|
||||
case "${ACTION}" in
|
||||
set)
|
||||
ATTRIBUTE="${3}"
|
||||
zfs_set_value
|
||||
;;
|
||||
get)
|
||||
ATTRIBUTE="${3}"
|
||||
zfs_get_value
|
||||
;;
|
||||
snap|snapshot)
|
||||
TAG="${3}"
|
||||
zfs_snapshot
|
||||
;;
|
||||
destroy_snap|destroy_snapshot)
|
||||
TAG="${3}"
|
||||
zfs_destroy_snapshot
|
||||
;;
|
||||
df|usage)
|
||||
zfs_disk_usage
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
|
||||
)
|
||||
|
||||
bastille_running_jobs "${bastille_process_limit}"
|
||||
|
||||
done
|
||||
wait
|
||||
Reference in New Issue
Block a user