feat(tests): Install salt-minion for integration tests
This commit is contained in:
committed by
Carlos Álvaro
parent
e59c3c082a
commit
468580a0a5
9
.github/workflows/build-and-test.yml
vendored
9
.github/workflows/build-and-test.yml
vendored
@@ -130,6 +130,15 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
|
|
||||||
|
- name: Install and configure salt-minion
|
||||||
|
run: |
|
||||||
|
# Install salt-minion from salt repos
|
||||||
|
curl -o bootstrap-salt.sh -L https://bootstrap.saltproject.io
|
||||||
|
chmod +x bootstrap-salt.sh
|
||||||
|
sudo ./bootstrap-salt.sh -dXP stable $(cat VERSION)
|
||||||
|
sudo systemctl stop salt-minion
|
||||||
|
sudo systemctl disable salt-minion
|
||||||
|
|
||||||
- name: Execute basic tests
|
- name: Execute basic tests
|
||||||
if: always()
|
if: always()
|
||||||
run: tests/basic/test.sh
|
run: tests/basic/test.sh
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ for the list of changes in SaltStack.
|
|||||||
|
|
||||||
**3005.1_2**
|
**3005.1_2**
|
||||||
|
|
||||||
|
- CI(tests): Install `salt-minion` for integration tests.
|
||||||
- CI(tests): Improve log support.
|
- CI(tests): Improve log support.
|
||||||
- CI(tests): Always run tests.
|
- CI(tests): Always run tests.
|
||||||
- CI: Always perform cleanup tasks.
|
- CI: Always perform cleanup tasks.
|
||||||
|
|||||||
@@ -25,3 +25,10 @@ ok "salt-master version"
|
|||||||
echo "==> Executing healthcheck ..."
|
echo "==> Executing healthcheck ..."
|
||||||
docker-exec /usr/local/sbin/healthcheck | grep -i true || error "healthcheck"
|
docker-exec /usr/local/sbin/healthcheck | grep -i true || error "healthcheck"
|
||||||
ok "healthcheck"
|
ok "healthcheck"
|
||||||
|
|
||||||
|
# Test minion connection
|
||||||
|
setup_and_start_salt_minion || error "salt-minion started"
|
||||||
|
ok "salt-minion started"
|
||||||
|
|
||||||
|
salt "${TEST_MINION_ID}" test.ping || error "${TEST_MINION_ID} ping"
|
||||||
|
ok "${TEST_MINION_ID} ping"
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ trap cleanup EXIT
|
|||||||
echo "==> Starting docker-salt-master (${PLATFORM}) ..."
|
echo "==> Starting docker-salt-master (${PLATFORM}) ..."
|
||||||
start_container_and_wait \
|
start_container_and_wait \
|
||||||
--env SALT_RESTART_MASTER_ON_CONFIG_CHANGE=True \
|
--env SALT_RESTART_MASTER_ON_CONFIG_CHANGE=True \
|
||||||
--volume "${SCRIPT_PATH}/config":/home/salt/data/config:ro \
|
|
||||||
|| error "container started"
|
|| error "container started"
|
||||||
ok "container started"
|
ok "container started"
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ ok "gitfs keys"
|
|||||||
# Run test instance
|
# Run test instance
|
||||||
echo "==> Starting docker-salt-master (${PLATFORM}) with ed25519 ssh key ..."
|
echo "==> Starting docker-salt-master (${PLATFORM}) with ed25519 ssh key ..."
|
||||||
start_container_and_wait \
|
start_container_and_wait \
|
||||||
--volume "${SCRIPT_PATH}/config":/home/salt/data/config:ro \
|
|
||||||
--volume "$(pwd)/${GITFS_KEYS_DIR%%/gitfs}":/home/salt/data/keys \
|
--volume "$(pwd)/${GITFS_KEYS_DIR%%/gitfs}":/home/salt/data/keys \
|
||||||
|| error "container started"
|
|| error "container started"
|
||||||
ok "container started"
|
ok "container started"
|
||||||
|
|||||||
@@ -20,6 +20,12 @@ export IMAGE_NAME=${IMAGE_NAME:-'cdalvaro/docker-salt-master:latest'}
|
|||||||
#----------------------------------------------------------------------------------------------------------------------
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
export CONTAINER_NAME=salt-master
|
export CONTAINER_NAME=salt-master
|
||||||
|
|
||||||
|
#--- ENV VARIABLE ---------------------------------------------------------------------------------------------------
|
||||||
|
# NAME: TEST_MINION_ID
|
||||||
|
# DESCRIPTION: The id of the salt-minion for testing. Default: 'test.minion'.
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
export TEST_MINION_ID=test.minion
|
||||||
|
|
||||||
#--- ENV VARIABLE ---------------------------------------------------------------------------------------------------
|
#--- ENV VARIABLE ---------------------------------------------------------------------------------------------------
|
||||||
# NAME: PLATFORM
|
# NAME: PLATFORM
|
||||||
# DESCRIPTION: The platform to run the tests on. Default: the current platform.
|
# DESCRIPTION: The platform to run the tests on. Default: the current platform.
|
||||||
@@ -38,8 +44,21 @@ export BOOTUP_WAIT_SECONDS=${BOOTUP_WAIT_SECONDS:-60}
|
|||||||
#----------------------------------------------------------------------------------------------------------------------
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
function cleanup()
|
function cleanup()
|
||||||
{
|
{
|
||||||
echo "🧹 Removing ${CONTAINER_NAME} ..."
|
echo "🧹 Running cleanup tasks ..."
|
||||||
docker container rm --force "${CONTAINER_NAME}"
|
|
||||||
|
local salt_master_container="$(docker container ls --filter NAME="${CONTAINER_NAME}" --quiet)"
|
||||||
|
if [ -n "${salt_master_container}" ]; then
|
||||||
|
echo " - Removing ${CONTAINER_NAME} docker container ..."
|
||||||
|
docker container rm --force --volumes "${salt_master_container}" > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$(pgrep -f salt-minion)" ]; then
|
||||||
|
echo " - Stopping salt-minion ..."
|
||||||
|
sudo killall salt-minion
|
||||||
|
sudo rm -f /var/log/salt/minion
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🧹 All cleanup tasks done!"
|
||||||
}
|
}
|
||||||
|
|
||||||
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
@@ -78,6 +97,15 @@ function salt-call()
|
|||||||
docker-exec salt-call "$@"
|
docker-exec salt-call "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
|
# NAME: salt
|
||||||
|
# DESCRIPTION: Execute the salt command inside the container.
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
function salt()
|
||||||
|
{
|
||||||
|
docker-exec salt "$@"
|
||||||
|
}
|
||||||
|
|
||||||
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
# NAME: container_log
|
# NAME: container_log
|
||||||
# DESCRIPTION: Print container log.
|
# DESCRIPTION: Print container log.
|
||||||
@@ -105,6 +133,19 @@ function master_log()
|
|||||||
sudo cat "${SALT_MASTER_LOG}"
|
sudo cat "${SALT_MASTER_LOG}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
|
# NAME: minion_log
|
||||||
|
# DESCRIPTION: Print salt-minion log.
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
function minion_log()
|
||||||
|
{
|
||||||
|
local SALT_MINION_LOG='/var/log/salt/minion'
|
||||||
|
|
||||||
|
[ -f "${SALT_MINION_LOG}" ] || return 0
|
||||||
|
echo "📝 salt-minion log (${SALT_MINION_LOG})"
|
||||||
|
sudo cat "${SALT_MINION_LOG}"
|
||||||
|
}
|
||||||
|
|
||||||
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
# NAME: wait_container
|
# NAME: wait_container
|
||||||
# DESCRIPTION: Wait for the container to boot up.
|
# DESCRIPTION: Wait for the container to boot up.
|
||||||
@@ -116,18 +157,58 @@ function start_container_and_wait()
|
|||||||
local LOGS_DIR="${SCRIPT_PATH}/logs"
|
local LOGS_DIR="${SCRIPT_PATH}/logs"
|
||||||
mkdir -p "${LOGS_DIR}"
|
mkdir -p "${LOGS_DIR}"
|
||||||
|
|
||||||
|
# Common config
|
||||||
|
mkdir -p "${SCRIPT_PATH}/config/autosign_grains"
|
||||||
|
cat > "${SCRIPT_PATH}"/config/autosign_grains.conf <<EOF
|
||||||
|
autosign_grains_dir: /home/salt/data/config/autosign_grains
|
||||||
|
EOF
|
||||||
|
cat > "${SCRIPT_PATH}"/config/autosign_grains/id <<EOF
|
||||||
|
${TEST_MINION_ID}
|
||||||
|
EOF
|
||||||
|
|
||||||
docker run --detach --name "${CONTAINER_NAME}" \
|
docker run --detach --name "${CONTAINER_NAME}" \
|
||||||
--publish 4505:4505 --publish 4506:4506 \
|
--publish 4505:4505 --publish 4506:4506 \
|
||||||
--env PUID="$(id -u)" --env PGID="$(id -g)" \
|
--env PUID="$(id -u)" --env PGID="$(id -g)" \
|
||||||
--env SALT_LOG_LEVEL='info' \
|
--env SALT_LOG_LEVEL='info' \
|
||||||
--platform "${PLATFORM}" ${DOCKER_ARGS[@]} \
|
--platform "${PLATFORM}" ${DOCKER_ARGS[@]} \
|
||||||
--volume "${LOGS_DIR}/":/home/salt/data/logs/ \
|
--volume "${LOGS_DIR}/":/home/salt/data/logs/ \
|
||||||
|
--volume "${SCRIPT_PATH}/config/":/home/salt/data/config/:ro \
|
||||||
"${IMAGE_NAME}" || return 1
|
"${IMAGE_NAME}" || return 1
|
||||||
|
|
||||||
echo "==> Waiting ${BOOTUP_WAIT_SECONDS} seconds for the container to be ready ..."
|
echo "==> Waiting ${BOOTUP_WAIT_SECONDS} seconds for the container to be ready ..."
|
||||||
sleep "${BOOTUP_WAIT_SECONDS}"
|
sleep "${BOOTUP_WAIT_SECONDS}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
|
# NAME: setup_and_start_salt_minion
|
||||||
|
# DESCRIPTION: Setup and start salt-minion.
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
function setup_and_start_salt_minion()
|
||||||
|
{
|
||||||
|
local SALT_MINION_CONF_DIR=/etc/salt/minion.d
|
||||||
|
|
||||||
|
sudo rm -rf "${SALT_MINION_CONF_DIR}"
|
||||||
|
sudo mkdir -p "${SALT_MINION_CONF_DIR}"
|
||||||
|
|
||||||
|
sudo tee "${SALT_MINION_CONF_DIR}/minion.conf" > /dev/null <<EOF
|
||||||
|
id: ${TEST_MINION_ID}
|
||||||
|
master: localhost
|
||||||
|
verify_master_pubkey_sign: False
|
||||||
|
master_alive_interval: 10
|
||||||
|
retry_dns: 5
|
||||||
|
retry_dns_count: 4
|
||||||
|
autosign_grains:
|
||||||
|
- uuid
|
||||||
|
- id
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "==> Starting salt-minion ..."
|
||||||
|
sudo salt-minion --log-file-level=info --daemon &
|
||||||
|
sleep 40
|
||||||
|
|
||||||
|
test -n "$(pgrep -f salt-minion)"
|
||||||
|
}
|
||||||
|
|
||||||
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||||
# NAME: ok
|
# NAME: ok
|
||||||
# DESCRIPTION: Print a success message.
|
# DESCRIPTION: Print a success message.
|
||||||
@@ -146,6 +227,7 @@ function error()
|
|||||||
echo "🔥 $*" >&2
|
echo "🔥 $*" >&2
|
||||||
container_log >&2
|
container_log >&2
|
||||||
master_log >&2
|
master_log >&2
|
||||||
|
minion_log >&2
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,11 @@ export SALTAPI_URL="https://localhost:8000/"
|
|||||||
export SALTAPI_USER=salt_api
|
export SALTAPI_USER=salt_api
|
||||||
export SALTAPI_PASS=4wesome-Pass0rd
|
export SALTAPI_PASS=4wesome-Pass0rd
|
||||||
export SALTAPI_EAUTH=pam
|
export SALTAPI_EAUTH=pam
|
||||||
export SALTAPI_TMP_DIR=${SALTAPI_TMP_DIR:-/tmp/salt-api}
|
|
||||||
|
|
||||||
# Create configuration files
|
# Create configuration files
|
||||||
echo "==> Creating salt-api configuration file ..."
|
echo "==> Creating salt-api configuration file ..."
|
||||||
mkdir -p "${SALTAPI_TMP_DIR}/config/"
|
mkdir -p "${SCRIPT_PATH}/config"
|
||||||
cat > "${SALTAPI_TMP_DIR}/config/salt-api.conf" <<EOF
|
cat > "${SCRIPT_PATH}/config/salt-api.conf" <<EOF
|
||||||
external_auth:
|
external_auth:
|
||||||
${SALTAPI_EAUTH}:
|
${SALTAPI_EAUTH}:
|
||||||
${SALTAPI_USER}:
|
${SALTAPI_USER}:
|
||||||
@@ -36,7 +35,6 @@ start_container_and_wait \
|
|||||||
--publish 8000:8000 \
|
--publish 8000:8000 \
|
||||||
--env SALT_API_SERVICE_ENABLED=True \
|
--env SALT_API_SERVICE_ENABLED=True \
|
||||||
--env SALT_API_USER_PASS="${SALTAPI_PASS}" \
|
--env SALT_API_USER_PASS="${SALTAPI_PASS}" \
|
||||||
--volume "${SALTAPI_TMP_DIR}/config":/home/salt/data/config:ro \
|
|
||||||
|| error "container started"
|
|| error "container started"
|
||||||
ok "container started"
|
ok "container started"
|
||||||
|
|
||||||
@@ -82,7 +80,6 @@ start_container_and_wait \
|
|||||||
--publish 8000:8000 \
|
--publish 8000:8000 \
|
||||||
--env SALT_API_SERVICE_ENABLED=True \
|
--env SALT_API_SERVICE_ENABLED=True \
|
||||||
--env SALT_API_USER_PASS_FILE="/run/secrets/${SALT_API_USER_PASS_FILE}" \
|
--env SALT_API_USER_PASS_FILE="/run/secrets/${SALT_API_USER_PASS_FILE}" \
|
||||||
--volume "${SALTAPI_TMP_DIR}/config":/home/salt/data/config:ro \
|
|
||||||
--volume "$(pwd)/${SALT_API_USER_PASS_FILE}":/run/secrets/${SALT_API_USER_PASS_FILE}:ro \
|
--volume "$(pwd)/${SALT_API_USER_PASS_FILE}":/run/secrets/${SALT_API_USER_PASS_FILE}:ro \
|
||||||
|| error "container started"
|
|| error "container started"
|
||||||
ok "container started"
|
ok "container started"
|
||||||
|
|||||||
Reference in New Issue
Block a user