# #
###############################################################################
-zone_dir() {
- local zone=${1}
-
- echo "${NETWORK_ZONE_DIR}/zones/${zone}"
-}
-
zone_exists() {
local zone=${1}
assert isset zone
- [ -d "$(zone_dir ${zone})" ]
+ [ -d "${NETWORK_ZONES_DIR}/${zone}" ]
}
zone_match() {
local zone=${1}
assert isset zone
- config_get_hook $(zone_dir ${zone})/settings
+ config_get_hook "${NETWORK_ZONES_DIR}/${zone}/settings"
}
zone_start() {
local hook="$(zone_get_hook ${zone})"
assert isset hook
- hook_exec zone "${hook}" "${cmd}" "${zone}" $@
+ hook_exec zone "${hook}" "${cmd}" "${zone}" "$@"
}
zone_new() {
return ${EXIT_ERROR}
fi
- mkdir -p $(zone_dir ${zone})
-
# Create directories for configs and ports
- mkdir -p $(zone_dir ${zone})/{configs,ports}
+ local what
+ for what in configs ports; do
+ make_directory "${NETWORK_ZONES_DIR}/${zone}/${what}"
+ done
- hook_zone_exec "${hook}" "new" "${zone}" $@
+ hook_zone_exec "${hook}" "new" "${zone}" "$@"
local ret=$?
# Maybe the zone new hook did not exit correctly.
# If this is the case we remove the created zone immediately.
if [ "${ret}" != "${EXIT_OK}" ]; then
- zone_destroy_now "${zone}"
+ zone_destroy "${zone}"
return ${EXIT_ERROR}
fi
return ${EXIT_ERROR}
fi
- # Check if the zone is tagged for removal.
- if zone_has_destroy_tag ${zone}; then
- error "You cannot edit a zone that is tagged for removal."
- return ${EXIT_ERROR}
- fi
-
local hook="$(zone_get_hook "${zone}")"
if [ -z "${hook}" ]; then
error "Config file did not provide any hook."
return ${EXIT_ERROR}
fi
- hook_zone_exec ${hook} edit ${zone} $@
+ hook_zone_exec ${hook} edit ${zone} "$@"
}
zone_rename() {
local name="${2}"
assert zone_exists "${zone}"
- assert not zone_has_destroy_tag "${zone}"
assert not zone_exists "${name}"
# The zone must be shut down before, is then renamed and
zone_disable "${zone}"
# Rename the configuration files
- mv -f "$(zone_dir "${zone}")" "$(zone_dir "${name}")"
+ mv -f "${NETWORK_ZONES_DIR}/${zone}" "${NETWORK_ZONES_DIR}/${name}"
# Enable the zone if it was enabled before
[ ${zone_was_enabled} -eq ${EXIT_TRUE} ] && zone_enable "${name}"
zone_destroy() {
local zone="${1}"
- assert zone_exists "${zone}"
-
- # Make the zone for removal.
- touch "$(zone_dir "${zone}")/.destroy"
-
- log INFO "Zone '${zone}' has been tagged for removal."
-}
-
-zone_has_destroy_tag() {
- local zone="${1}"
- assert zone_exists "${zone}"
-
- [ -e "$(zone_dir "${zone}")/.destroy" ]
-}
-
-# This function will remove the given zone
-# RIGHT NOW. Use zone_destroy to remove it
-# at the next status change.
-zone_destroy_now() {
- local zone="${1}"
- assert zone_exists "${zone}"
- log INFO "Removing zone '${zone}' right now."
+ # Cannot delete a zone that does not exist
+ if ! zone_exists "${zone}"; then
+ log ERROR "Zone ${zone} does not exist"
+ return ${EXIT_ERROR}
+ fi
# Force the zone down.
zone_is_active "${zone}" && zone_stop "${zone}"
- # Disable zone.
+ # Disable zone auto-start
zone_disable "${zone}"
- rm -rf "$(zone_dir "${zone}")"
+ if ! rm -rf "${NETWORK_ZONES_DIR}/${zone}"; then
+ log ERROR "Could not destroy zone ${zone}"
+ return ${EXIT_ERROR}
+ fi
+
+ log INFO "Destroyed zone ${zone}"
+ return ${EXIT_OK}
}
zone_up() {
return ${EXIT_ERROR}
fi
- # Check if a zone has got the remove tag.
- if zone_has_destroy_tag ${zone}; then
- error "Cannot bring up any zone which is to be removed."
- return ${EXIT_ERROR}
- fi
-
local hook="$(zone_get_hook "${zone}")"
if [ -z "${hook}" ]; then
error "Config file did not provide any hook."
zone_db ${zone} starting
- hook_zone_exec ${hook} up ${zone} $@
+ hook_zone_exec ${hook} up ${zone} "$@"
zone_db ${zone} started
zone_db ${zone} stopping
- hook_zone_exec ${hook} down ${zone} $@
+ hook_zone_exec ${hook} down ${zone} "$@"
zone_db ${zone} stopped
# Execute all triggers after the zone went down
triggers_execute_all "down" ZONE="${zone}"
-
- # Remove the zone, if it has got a remove tag.
- if zone_has_destroy_tag "${zone}"; then
- zone_destroy_now "${zone}"
- fi
}
zone_status() {
fi
hook_zone_exec "${hook}" "status" "${zone}" "$@"
-
- # Show that the zone it to be removed soon.
- if zone_has_destroy_tag ${zone}; then
- warning "This zone is tagged for removal."
- fi
}
zone_identify() {
local port
for port in $(zone_get_ports "${zone}"); do
# Identify all the ports
- port_identify "${port}" --background $@
+ port_identify "${port}" --background "$@"
# Save the PIDs of the subprocesses
list_append pids "$(cmd_background_get_pid)"
assert isset zone
local port
- for port in $(zone_dir ${zone})/ports/*; do
- port=$(basename ${port})
-
- if port_exists ${port}; then
+ for port in $(list_directory "${NETWORK_ZONES_DIR}/${zone}/ports"); do
+ if port_exists "${port}"; then
echo "${port}"
fi
done
local counter=0
local port
- for port in $(zone_dir "${zone}")/ports/*; do
- port="$(basename "${port}")"
-
+ for port in $(list_directory "${NETWORK_ZONES_DIR}/${zone}/ports"); do
if port_exists "${port}"; then
counter=$(( ${counter} + 1 ))
fi
assert isset zone
assert isset port
- [ -e "$(zone_dir ${zone})/ports/${port}" ]
+ [ -e "${NETWORK_ZONES_DIR}/${zone}/ports/${port}" ]
}
zone_config() {
return ${EXIT_FALSE}
}
-zone_show() {
- local zone=${1}
-
- echo "${zone}"
- echo " Type: $(zone_get_hook ${zone})"
- echo
-}
-
-zones_show() {
- local zone
-
- for zone in $(zones_get $@); do
- zone_show ${zone}
- done
-}
-
zones_get_all() {
local zone
- for zone in $(zone_dir)/*; do
- zone=$(basename ${zone})
- zone_exists ${zone} || continue
-
- echo "${zone}"
+ for zone in $(list_directory "${NETWORK_ZONES_DIR}"); do
+ if zone_exists ${zone}; then
+ echo "${zone}"
+ fi
done
}
zone_ports_list() {
local zone=${1}
- local port
- for port in $(zone_dir ${zone})/ports/*; do
- [ -e "${port}" ] || continue
-
- echo $(basename ${port})
- done
+ list_directory "${NETWORK_ZONES_DIR}/${zone}/ports"
}
zone_port_attach() {
assert isset hook
# Dispatch command to hook
- hook_zone_exec "${hook}" "${cmd}" "${zone}" "${port}" $@
+ hook_zone_exec "${hook}" "${cmd}" "${zone}" "${port}" "$@"
}
zone_port_create() {
- zone_port_cmd "port_create" $@
+ zone_port_cmd "port_create" "$@"
}
zone_port_remove() {
- zone_port_cmd "port_remove" $@
+ zone_port_cmd "port_remove" "$@"
}
zone_port_up() {
- zone_port_cmd "port_up" $@
+ zone_port_cmd "port_up" "$@"
}
zone_port_down() {
- zone_port_cmd "port_down" $@
+ zone_port_cmd "port_down" "$@"
}
# The next two functions automagically bring up and down
}
zone_port_status() {
- zone_port_cmd "port_status" $@
+ zone_port_cmd "port_status" "$@"
}
zone_ports_cmd() {
local port
for port in $(zone_get_ports ${zone}); do
- hook_zone_exec "${hook}" "${cmd}" "${zone}" "${port}" $@
+ hook_zone_exec "${hook}" "${cmd}" "${zone}" "${port}" "$@"
done
}
zone_ports_create() {
- zone_ports_cmd "port_create" $@
+ zone_ports_cmd "port_create" "$@"
}
zone_ports_remove() {
- zone_ports_cmd "port_remove" $@
+ zone_ports_cmd "port_remove" "$@"
}
zone_ports_up() {
- zone_ports_cmd "port_up" $@
+ zone_ports_cmd "port_up" "$@"
}
zone_ports_down() {
- zone_ports_cmd "port_down" $@
+ zone_ports_cmd "port_down" "$@"
}
zone_ports_status() {
- zone_ports_cmd "port_status" $@
+ zone_ports_cmd "port_status" "$@"
}
zone_configs_cmd() {
local config_hook="$(zone_config_get_hook "${zone}" "${config}")"
assert isset config_hook
- hook_config_exec "${config_hook}" "${cmd}" "${zone}" "${config}" $@
+ hook_config_exec "${config_hook}" "${cmd}" "${zone}" "${config}" "$@"
done
}
zone_configs_up() {
- zone_configs_cmd "up" $@
+ zone_configs_cmd "up" "$@"
}
zone_configs_down() {
- zone_configs_cmd "down" $@
+ zone_configs_cmd "down" "$@"
}
zone_configs_status() {
- zone_configs_cmd "status" $@
+ zone_configs_cmd "status" "$@"
}
zone_configs_list() {
local zone=${1}
- local config
- for config in $(zone_dir ${zone})/configs/*; do
- [ -e "${config}" ] || continue
-
- basename ${config}
- done
+ list_directory "${NETWORK_ZONES_DIR}/${zone}/configs"
}
zone_config_get_new_id() {
assert [ $# -eq 1 ]
local zone=${1}
- local zone_path=$(zone_dir ${zone})
+ local zone_path="${NETWORK_ZONES_DIR}/${zone}"
local i=0
while true; do
# with the same setting is already configured for this zone.
# Returns True when yes and False when no.
- assert [ $# -eq 4 ]
+ assert [ $# -eq 5 ]
local zone=${1}
local hook=${2}
- local key=${3}
- local value=${4}
+ local id=${3}
+ local key=${4}
+ local value=${5}
# The key should be local for this function
local ${key}
local config
for config in $(zone_configs_list ${zone}); do
+ # Check if the config is eqal with the config we want to edit, when continue
+ if [[ "${config}" = "${hook}.${id}" ]]; then
+ continue
+ fi
+
# Check if the config is from the given hook, when not continue
if [[ $(zone_config_get_hook "${zone}" "${config}") != ${hook} ]]; then
continue
fi
+
# Get the value of the key for a given function
zone_config_settings_read "${zone}" "${config}" \
--ignore-superfluous-settings "${key}"
local zone=${1}
local id=${2}
- local zone_path=$(zone_dir ${zone})
+ local zone_path="${NETWORK_ZONES_DIR}/${zone}"
[ -f ${zone_path}/configs/*.${id} ];
}
}
zone_has_ip() {
- device_has_ip $@
+ device_has_ip "$@"
}
zone_db() {
}
zone_is_down() {
- ! zone_is_up $@
+ ! zone_is_up "$@"
}
zone_get_supported_port_hooks() {
hook_config_get_all
}
-zone_file() {
- local zone=${1}
-
- assert isset zone
-
- echo "$(zone_dir ${zone})/settings"
-}
-
zone_settings_read() {
local zone=${1}
assert isset zone
if [ $# -eq 0 ] && [ -n "${HOOK_SETTINGS}" ]; then
list_append args ${HOOK_SETTINGS}
else
- list_append args $@
+ list_append args "$@"
fi
# Save the HOOK variable.
local hook="${HOOK}"
- settings_read "$(zone_file "${zone}")" ${args}
+ settings_read "${NETWORK_ZONES_DIR}/${zone}/settings" ${args}
# Restore hook.
HOOK="${hook}"
fi
list_append args ${HOOK_SETTINGS}
- settings_write "$(zone_file ${zone})" ${args}
+ settings_write "${NETWORK_ZONES_DIR}/${zone}/settings" ${args}
}
zone_settings_set() {
if [ $# -eq 0 ] && [ -n "${HOOK_CONFIG_SETTINGS}" ]; then
list_append args ${HOOK_CONFIG_SETTINGS}
else
- list_append args $@
+ list_append args "$@"
fi
- local path="$(zone_dir "${zone}")/configs/${config}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/configs/${config}"
settings_read "${path}" ${args}
}
local hook="${2}"
local id=${3}
- if ! isset id; then
- id=$(zone_config_get_new_id ${zone})
- log DEBUG "ID for the config is: ${id}"
- fi
+ assert isset id
local args
if function_exists "hook_check_config_settings"; then
fi
list_append args ${HOOK_CONFIG_SETTINGS}
- local path="$(zone_dir "${zone}")/configs/${hook}.${id}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/configs/${hook}.${id}"
settings_write "${path}" ${args}
}
local zone="${1}"
local config="${2}"
- local path="$(zone_dir "${zone}")/configs/${config}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/configs/${config}"
# Check if path is valid
if [ ! -f ${path} ]; then
rm -f "${path}"
}
+
+zone_config_find_by_hook() {
+ local zone="${1}"
+ assert isset zone
+
+ local hook="${2}"
+ assert isset hook
+
+ local config
+ for config in $(zone_configs_list "${zone}"); do
+ local h="$(zone_config_get_hook "${zone}" "${config}")"
+
+ [[ "${hook}" = "${h}" ]] && echo "${config}"
+ done
+
+ return ${EXIT_OK}
+}
+
+zone_config_settings_read_by_hook() {
+ local zone="${1}"
+ assert isset zone
+
+ local hook="${2}"
+ assert isset hook
+
+ local config
+ for config in $(zone_config_find_by_hook "${zone}" "${hook}"); do
+ zone_config_settings_read "${zone}" "${config}"
+ done
+
+ return ${EXIT_OK}
+}
+
zone_port_settings_read() {
assert [ $# -ge 2 ]
if [ $# -eq 0 ] && [ -n "${HOOK_PORT_SETTINGS}" ]; then
list_append args ${HOOK_PORT_SETTINGS}
else
- list_append args $@
+ list_append args "$@"
fi
- local path="$(zone_dir "${zone}")/ports/${port}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/ports/${port}"
settings_read "${path}" ${args}
}
fi
list_append args ${HOOK_PORT_SETTINGS}
- local path="$(zone_dir "${zone}")/ports/${port}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/ports/${port}"
settings_write "${path}" ${args}
}
local zone="${1}"
local port="${2}"
- local path="$(zone_dir "${zone}")/ports/${port}"
+ local path="${NETWORK_ZONES_DIR}/${zone}/ports/${port}"
settings_remove "${path}"
}