Skip to content

Commit 10b8cc3

Browse files
committed
ansible: add support for // runs of scenarios to molecule
1 parent 79cf4e0 commit 10b8cc3

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

ansible/molecule/common.sh

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ export ERIS_HOME
99

1010
MOLECULE_DEBUG=${MOLECULE_DEBUG:-'--no-debug'}
1111
MOLECULE_KEEP_CACHE=${MOLECULE_KEEP_CACHE:-''}
12+
MOLECULE_CONFIG_FILE_HOME=${MOLECULE_CONFIG_FILE_HOME:-'.config/molecule/'}
13+
MOLECULE_CONFIG_FILE=${MOLECULE_CONFIG_FILE:-"${MOLECULE_CONFIG_FILE_HOME}/config.yml"}
14+
MOLECULE_RUN_SCENARIOS_IN_PARRALEL=${MOLECULE_RUN_SCENARIOS_IN_PARRALEL:-''}
1215

1316
determineMoleculeVersion() {
1417
echo "$(molecule --version | head -1 | sed -e 's/using python .*$//' -e 's/^molecule *//' -e 's/ //g' | grep -e '4' | wc -l )"
@@ -20,7 +23,6 @@ determineMoleculeSlaveImage() {
2023
else
2124
echo "localhost/molecule-slave-9"
2225
fi
23-
2426
}
2527

2628
determineMoleculeDriverName() {
@@ -90,6 +92,19 @@ printScenariosThatFailed() {
9092
done
9193
}
9294

95+
configMolForParralelRuns() {
96+
if [ -n "${MOLECULE_RUN_SCENARIOS_IN_PARRALEL}" ]; then
97+
if [ -e "${MOLECULE_CONFIG_FILE}" ] ; then
98+
echo "Molecule configuration file already exists: ${MOLECULE_CONFIG_FILE}."
99+
echo "Skipping creation and configuration for parallel runs, it is assumed that configuration allow parralel execution of the projet scenarios."
100+
else
101+
# see https://www.die-welt.net/2024/04/running-ansible-molecule-tests-in-parallel/
102+
mkdir -p "${MOLECULE_CONFIG_FILE_HOME}"
103+
echo 'prerun: false' >> "${MOLECULE_CONFIG_FILE}"
104+
fi
105+
fi
106+
}
107+
93108
runAllMoleculeScenarios() {
94109
local scenario_name=${1:-"${SCENARIO_NAME}"}
95110
local scenario_driver_name=${2:-"${HARMONIA_MOLECULE_DEFAULT_DRIVER_NAME}"}
@@ -101,6 +116,40 @@ runAllMoleculeScenarios() {
101116
echo "${?}"
102117
}
103118

119+
listAllScenarios() {
120+
for molecule_xml in $(find molecule/*/molecule.yml -maxdepth 1 -print)
121+
do
122+
echo $(basename $(dirname "${molecule_xml}"))
123+
done
124+
}
125+
126+
runAllMoleculeScenariosInParralel() {
127+
declare -A pids
128+
local scenario_driver_name=${1:-"${HARMONIA_MOLECULE_DEFAULT_DRIVER_NAME}"}
129+
local extra_args=${2:-"${EXTRA_ARGS}"}
130+
131+
configMolForParralelRuns
132+
for scenario_name in $(listAllScenarios)
133+
do
134+
echo "DEBUG> molecule ${MOLECULE_DEBUG} test --parallel -s "${scenario_name}" -d "${scenario_driver_name}" -- ${extra_args}" -e wildfly_node_id=${scenario_name} ${extra_args} "${@}" '&>' "${scenario_name}.log '&'"
135+
# shellcheck disable=SC2086
136+
molecule ${MOLECULE_DEBUG} test --parallel -s "${scenario_name}" -d "${scenario_driver_name}" -- -e wildfly_node_id=${scenario_name} ${extra_args} "${@}" &> "${scenario_name}.log" &
137+
pids["${scenario_name}"]="${!}"
138+
echo PID:${pids[${scenario_name}]} for scenario ${scenario_name}
139+
done
140+
141+
MOLECULE_RUN_STATUS=0
142+
for pid in ${pids[@]}
143+
do
144+
wait "${pid}"
145+
echo "PID(${pid}) returned: $?"
146+
if [ "${pid}" -ne 0 ]; then
147+
MOLECULE_RUN_STATUS="${pid}"
148+
fi
149+
done
150+
export MOLECULE_RUN_STATUS
151+
}
152+
104153
runMoleculeScenario() {
105154
local scenario_name=${1:-"${SCENARIO_NAME}"}
106155
local scenario_driver_name=${2:-"${HARMONIA_MOLECULE_DEFAULT_DRIVER_NAME}"}
@@ -111,7 +160,11 @@ runMoleculeScenario() {
111160
if [ "${scenario_name}" != '--all' ]; then
112161
executeRequestedScenarios "${scenario_name}" "${scenario_driver_name}" "${extra_args}"
113162
else
114-
MOLECULE_RUN_STATUS="$(runAllMoleculeScenarios "${scenario_name}" "${scenario_driver_name}" ${extra_args})"
163+
if [ -z "${MOLECULE_RUN_SCENARIOS_IN_PARRALEL}" ]; then
164+
MOLECULE_RUN_STATUS="$(runAllMoleculeScenarios '--all' "${scenario_driver_name}" ${extra_args})"
165+
else
166+
runAllMoleculeScenariosInParralel "${scenario_driver_name}" ${extra_args}
167+
fi
115168
fi
116169
readonly MOLECULE_RUN_STATUS
117170

ansible/molecule/molecule-downstream.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ else
3737
fi
3838

3939
# shellcheck disable=SC2155
40-
readonly EXTRA_ARGS="$(loadJBossNetworkAPISecrets)"
40+
readonly EXTRA_ARGS="${EXTRA_ARGS} $(loadJBossNetworkAPISecrets)"
4141
export EXTRA_ARGS
4242
"${HARMONIA_HOME}/ansible/molecule/molecule.sh"

0 commit comments

Comments
 (0)