summaryrefslogtreecommitdiff
path: root/test/lib/ansible_test
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2019-08-14 15:53:30 -0700
committerMatt Clay <matt@mystile.com>2019-08-14 20:40:59 -0700
commit7968dc4c00fba27f67b00f8dc569ac0660624a88 (patch)
tree56807075d39bc990c670a692e5dd190fe95b79f6 /test/lib/ansible_test
parent4ebac7d5b76e352d838d4a4ca6987229a47b2171 (diff)
downloadansible-7968dc4c00fba27f67b00f8dc569ac0660624a88.tar.gz
Load integration config test vars from content.
The `test/integration/integration_config.yml` vars file will now be loaded from the content under test and is now optional. The `output_dir` and `win_output_dir` vars are now provided by ansible-test.
Diffstat (limited to 'test/lib/ansible_test')
-rw-r--r--test/lib/ansible_test/_internal/executor.py34
-rw-r--r--test/lib/ansible_test/_internal/integration/__init__.py26
-rw-r--r--test/lib/ansible_test/_internal/payload.py2
3 files changed, 47 insertions, 15 deletions
diff --git a/test/lib/ansible_test/_internal/executor.py b/test/lib/ansible_test/_internal/executor.py
index 15256b3e8d..23579ceebe 100644
--- a/test/lib/ansible_test/_internal/executor.py
+++ b/test/lib/ansible_test/_internal/executor.py
@@ -129,6 +129,7 @@ from .integration import (
integration_test_environment,
integration_test_config_file,
setup_common_temp_dir,
+ VARS_FILE_RELATIVE,
)
from .data import (
@@ -817,6 +818,23 @@ def command_integration_filter(args, # type: TIntegrationConfig
cloud_init(args, internal_targets)
+ vars_file_src = os.path.join(data_context().content.root, VARS_FILE_RELATIVE)
+
+ if os.path.exists(vars_file_src):
+ def integration_config_callback(files): # type: (t.List[t.Tuple[str, str]]) -> None
+ """
+ Add the integration config vars file to the payload file list.
+ This will preserve the file during delegation even if the file is ignored by source control.
+ """
+ if data_context().content.collection:
+ working_path = data_context().content.collection.directory
+ else:
+ working_path = ''
+
+ files.append((vars_file_src, os.path.join(working_path, VARS_FILE_RELATIVE)))
+
+ data_context().register_payload_callback(integration_config_callback)
+
if args.delegate:
raise Delegate(require=require, exclude=exclude, integration_targets=internal_targets)
@@ -1273,9 +1291,17 @@ def command_integration_role(args, target, start_at_task, test_dir, inventory_pa
env_config = None
+ vars_files = []
+ variables = dict(
+ output_dir=test_dir,
+ )
+
if isinstance(args, WindowsIntegrationConfig):
hosts = 'windows'
gather_facts = False
+ variables.update(dict(
+ win_output_dir=r'C:\ansible_testing',
+ ))
elif isinstance(args, NetworkIntegrationConfig):
hosts = target.name[:target.name.find('_')]
gather_facts = False
@@ -1289,12 +1315,14 @@ def command_integration_role(args, target, start_at_task, test_dir, inventory_pa
env_config = cloud_environment.get_environment_config()
with integration_test_environment(args, target, inventory_path) as test_env:
+ if os.path.exists(test_env.vars_file):
+ vars_files.append(os.path.relpath(test_env.vars_file, test_env.integration_dir))
+
play = dict(
hosts=hosts,
gather_facts=gather_facts,
- vars_files=[
- os.path.relpath(test_env.vars_file, test_env.integration_dir),
- ],
+ vars_files=vars_files,
+ vars=variables,
roles=[
target.name,
],
diff --git a/test/lib/ansible_test/_internal/integration/__init__.py b/test/lib/ansible_test/_internal/integration/__init__.py
index f0ae9ed567..a7054b330e 100644
--- a/test/lib/ansible_test/_internal/integration/__init__.py
+++ b/test/lib/ansible_test/_internal/integration/__init__.py
@@ -53,6 +53,9 @@ from ..data import (
data_context,
)
+INTEGRATION_DIR_RELATIVE = 'test/integration'
+VARS_FILE_RELATIVE = os.path.join(INTEGRATION_DIR_RELATIVE, 'integration_config.yml')
+
def setup_common_temp_dir(args, path):
"""
@@ -138,9 +141,7 @@ def integration_test_environment(args, target, inventory_path):
:type target: IntegrationTarget
:type inventory_path: str
"""
- vars_file = 'integration_config.yml'
-
- ansible_config_relative = os.path.join('test', 'integration', '%s.cfg' % args.command)
+ ansible_config_relative = os.path.join(INTEGRATION_DIR_RELATIVE, '%s.cfg' % args.command)
ansible_config_src = os.path.join(data_context().content.root, ansible_config_relative)
if not os.path.exists(ansible_config_src):
@@ -150,10 +151,10 @@ def integration_test_environment(args, target, inventory_path):
if args.no_temp_workdir or 'no/temp_workdir/' in target.aliases:
display.warning('Disabling the temp work dir is a temporary debugging feature that may be removed in the future without notice.')
- integration_dir = os.path.abspath('test/integration')
- inventory_path = os.path.abspath(inventory_path)
+ integration_dir = os.path.join(data_context().content.root, INTEGRATION_DIR_RELATIVE)
+ inventory_path = os.path.join(data_context().content.root, inventory_path)
ansible_config = ansible_config_src
- vars_file = os.path.join(integration_dir, vars_file)
+ vars_file = os.path.join(data_context().content.root, VARS_FILE_RELATIVE)
yield IntegrationEnvironment(integration_dir, inventory_path, ansible_config, vars_file)
return
@@ -190,19 +191,25 @@ def integration_test_environment(args, target, inventory_path):
files_needed = get_files_needed(target_dependencies)
- integration_dir = os.path.join(temp_dir, 'test/integration')
+ integration_dir = os.path.join(temp_dir, INTEGRATION_DIR_RELATIVE)
ansible_config = os.path.join(temp_dir, ansible_config_relative)
+ vars_file_src = os.path.join(data_context().content.root, VARS_FILE_RELATIVE)
+ vars_file = os.path.join(temp_dir, VARS_FILE_RELATIVE)
+
file_copies = [
(ansible_config_src, ansible_config),
- (os.path.join(ANSIBLE_ROOT, 'test/integration/integration_config.yml'), os.path.join(integration_dir, vars_file)),
(os.path.join(ANSIBLE_ROOT, inventory_path), os.path.join(integration_dir, inventory_name)),
]
+ if os.path.exists(vars_file_src):
+ file_copies.append((vars_file_src, vars_file))
+
file_copies += [(path, os.path.join(temp_dir, path)) for path in files_needed]
directory_copies = [
- (os.path.join('test/integration/targets', target.name), os.path.join(integration_dir, 'targets', target.name)) for target in target_dependencies
+ (os.path.join(INTEGRATION_DIR_RELATIVE, 'targets', target.name), os.path.join(integration_dir, 'targets', target.name))
+ for target in target_dependencies
]
inventory_dir = os.path.dirname(inventory_path)
@@ -236,7 +243,6 @@ def integration_test_environment(args, target, inventory_path):
shutil.copy2(file_src, file_dst)
inventory_path = os.path.join(integration_dir, inventory_name)
- vars_file = os.path.join(integration_dir, vars_file)
yield IntegrationEnvironment(integration_dir, inventory_path, ansible_config, vars_file)
finally:
diff --git a/test/lib/ansible_test/_internal/payload.py b/test/lib/ansible_test/_internal/payload.py
index 3adb46f7ef..4cc9f7b5fa 100644
--- a/test/lib/ansible_test/_internal/payload.py
+++ b/test/lib/ansible_test/_internal/payload.py
@@ -81,9 +81,7 @@ def create_payload(args, dst_path): # type: (CommonConfig, str) -> None
# these files need to be migrated to the ansible-test data directory
hack_files_to_keep = (
- 'test/integration/integration_config.yml',
'test/integration/inventory',
- 'test/integration/target-prefixes.network',
)
# temporary solution to include files not yet present in the ansible-test data directory