Skip to content

Commit

Permalink
add monkeyble_global_extra_vars to the cli config
Browse files Browse the repository at this point in the history
  • Loading branch information
Sispheor committed Dec 2, 2022
1 parent b3eb7fd commit 39c1993
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 15 deletions.
9 changes: 9 additions & 0 deletions docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ The CLI expect to find monkeyble configuration file. The file will be searched f
- `MONKEYBLE_CONFIG` placed as an environment variable
- `monkeyble.yml` from the current directory

### monkeyble_global_extra_vars

This flag contains a list of extra var files that will be loaded in all test.
```yaml
monkeyble_global_extra_vars:
- "mocks.yml"
- "common_test_input.yml"
```
### monkeyble_test_suite
The `monkeyble_test_suite` contains a list of Monkeyble test definition.
Expand Down
3 changes: 2 additions & 1 deletion monkeyble/cli/monkeyble.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
monkeyble_global_extra_vars:
- "../../tests/mocks.yml"
monkeyble_test_suite:
- playbook: "../../tests/test_playbook.yml"
# inventory: "inventory"
extra_vars:
- "../../tests/mocks.yml"
- "../../tests/monkeyble_scenarios.yml"
scenarios:
- validate_test_1
Expand Down
7 changes: 6 additions & 1 deletion monkeyble/cli/monkeyble_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import subprocess
import sys
import time
from copy import copy
from datetime import timedelta

import yaml
Expand Down Expand Up @@ -64,14 +65,18 @@ def run_monkeyble_test(monkeyble_config):
if "monkeyble_test_suite" not in monkeyble_config:
raise MonkeybleCLIException(message="No 'monkeyble_test_suite' variable defined")
list_result = list()
global_extra_vars = list()
if "monkeyble_global_extra_vars" in monkeyble_config:
global_extra_vars.extend(monkeyble_config["monkeyble_global_extra_vars"])
for test_config in monkeyble_config["monkeyble_test_suite"]:
extra_vars = copy(global_extra_vars)
Utils.print_info(f"Monkeyble - ansible cmd: {ansible_cmd}")
playbook = test_config.get("playbook", None)
new_result = MonkeybleResult(playbook)
if playbook is None:
raise MonkeybleCLIException(message="Missing 'playbook' key in a test")
inventory = test_config.get("inventory", None)
extra_vars = test_config.get("extra_vars", None)
extra_vars.extend(test_config.get("extra_vars", []))
scenarios = test_config.get("scenarios", None)
if scenarios is None:
raise MonkeybleCLIException(message=f"No scenarios for playbook {playbook}")
Expand Down
37 changes: 25 additions & 12 deletions tests/units/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,10 @@ def test_load_monkeyble_config(self):
test_monkeyble_path = str(current_path) + "/test_config/monkeyble.yml"
with mock.patch("monkeyble.cli.monkeyble_cli.MONKEYBLE_DEFAULT_CONFIG_PATH", test_monkeyble_path):
data = load_monkeyble_config(None)
expected = {'monkeyble_test_suite': [{'playbook': 'test_playbook.yml',
expected = {'monkeyble_global_extra_vars': ['mocks.yml'],
'monkeyble_test_suite': [{'playbook': 'test_playbook.yml',
'inventory': 'inventory',
'extra_vars': ['mocks.yml', 'monkeyble_scenarios.yml'],
'extra_vars': ['monkeyble_scenarios.yml'],
'scenarios': ['validate_test_1', 'validate_test_2']}]}

self.assertDictEqual(data, expected)
Expand Down Expand Up @@ -95,30 +96,42 @@ def test_run_monkeyble_test_no_scenario_defined(self, mock_exit):

def test_run_monkeyble_test_run_ansible_called(self):
monkeyble_config = {
"monkeyble_global_extra_vars": ['mocks.yml'],
"monkeyble_test_suite": [
{
"playbook": "playbook.yml",
"inventory": "my_inventory",
"playbook": "playbook1.yml",
"inventory": "my_inventory1",
"extra_vars": ["extra_vars1.yml", "extra_vars2.yml"],
"scenarios": ["scenario1", "scenario2"]
},
{
"playbook": "playbook2.yml",
"inventory": "my_inventory2",
"extra_vars": ["extra_vars3.yml"],
"scenarios": ["scenario3"]
}
]
}

with mock.patch("monkeyble.cli.monkeyble_cli.run_ansible") as mock_run_ansible:
run_monkeyble_test(monkeyble_config)
self.assertEqual(mock_run_ansible.call_count, 2)
self.assertEqual(mock_run_ansible.call_count, 3)
call_1 = call(MONKEYBLE_DEFAULT_ANSIBLE_CMD,
"playbook.yml",
"my_inventory",
["extra_vars1.yml", "extra_vars2.yml"],
"playbook1.yml",
"my_inventory1",
["mocks.yml", "extra_vars1.yml", "extra_vars2.yml"],
"scenario1")
call_2 = call(MONKEYBLE_DEFAULT_ANSIBLE_CMD,
"playbook.yml",
"my_inventory",
["extra_vars1.yml", "extra_vars2.yml"],
"playbook1.yml",
"my_inventory1",
["mocks.yml", "extra_vars1.yml", "extra_vars2.yml"],
"scenario2")
mock_run_ansible.assert_has_calls([call_1, call_2])
call_3 = call(MONKEYBLE_DEFAULT_ANSIBLE_CMD,
"playbook2.yml",
"my_inventory2",
["mocks.yml", "extra_vars3.yml"],
"scenario3")
mock_run_ansible.assert_has_calls([call_1, call_2, call_3])

@patch("subprocess.Popen")
def test_run_ansible(self, mock_subproc_popen):
Expand Down
3 changes: 2 additions & 1 deletion tests/units/test_config/monkeyble.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
monkeyble_global_extra_vars:
- "mocks.yml"
monkeyble_test_suite:
- playbook: "test_playbook.yml"
inventory: "inventory"
extra_vars:
- "mocks.yml"
- "monkeyble_scenarios.yml"
scenarios:
- "validate_test_1"
Expand Down

0 comments on commit 39c1993

Please sign in to comment.