@@ -9,6 +9,9 @@ export ERIS_HOME
99
1010MOLECULE_DEBUG=${MOLECULE_DEBUG:- ' --no-debug' }
1111MOLECULE_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
1316determineMoleculeVersion () {
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
2628determineMoleculeDriverName () {
@@ -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+
93108runAllMoleculeScenarios () {
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+
104153runMoleculeScenario () {
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
0 commit comments