diff --git a/awx/main/conf.py b/awx/main/conf.py index 99f1f95d18..f528821b8e 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -298,6 +298,16 @@ register( category_slug='jobs', ) +register( + 'AWX_ISOLATED_HOST_KEY_CHECKING', + field_class=fields.BooleanField, + label=_('Isolated host key checking'), + help_text=_('When set to True, AWX will enforce strict host key checking for communication with isolated nodes.'), + category=_('Jobs'), + category_slug='jobs', + default=False +) + register( 'AWX_ISOLATED_KEY_GENERATION', field_class=fields.BooleanField, diff --git a/awx/main/isolated/manager.py b/awx/main/isolated/manager.py index 5ed2f50e40..322cf2a95f 100644 --- a/awx/main/isolated/manager.py +++ b/awx/main/isolated/manager.py @@ -44,7 +44,7 @@ class IsolatedManager(object): def build_runner_params(self, hosts, verbosity=1): env = dict(os.environ.items()) env['ANSIBLE_RETRY_FILES_ENABLED'] = 'False' - env['ANSIBLE_HOST_KEY_CHECKING'] = 'False' + env['ANSIBLE_HOST_KEY_CHECKING'] = str(settings.AWX_ISOLATED_HOST_KEY_CHECKING) env['ANSIBLE_LIBRARY'] = os.path.join(os.path.dirname(awx.__file__), 'plugins', 'isolated') set_pythonpath(os.path.join(settings.ANSIBLE_VENV_PATH, 'lib'), env) diff --git a/awx/main/management/commands/test_isolated_connection.py b/awx/main/management/commands/test_isolated_connection.py index dd4151e79a..1c6ecc5393 100644 --- a/awx/main/management/commands/test_isolated_connection.py +++ b/awx/main/management/commands/test_isolated_connection.py @@ -33,6 +33,7 @@ class Command(BaseCommand): ]): ssh_key = settings.AWX_ISOLATED_PRIVATE_KEY env = dict(os.environ.items()) + env['ANSIBLE_HOST_KEY_CHECKING'] = str(settings.AWX_ISOLATED_HOST_KEY_CHECKING) set_pythonpath(os.path.join(settings.ANSIBLE_VENV_PATH, 'lib'), env) res = ansible_runner.interface.run( private_data_dir=path, diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 443219217a..9c5e06747c 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -403,6 +403,11 @@ EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_USE_TLS = False +# Default to skipping isolated host key checking (the initial connection will +# hang on an interactive "The authenticity of host example.org can't be +# established" message) +AWX_ISOLATED_HOST_KEY_CHECKING = False + # The number of seconds to sleep between status checks for jobs running on isolated nodes AWX_ISOLATED_CHECK_INTERVAL = 30 diff --git a/awx/ui/client/src/configuration/forms/jobs-form/configuration-jobs.form.js b/awx/ui/client/src/configuration/forms/jobs-form/configuration-jobs.form.js index 021e4c4387..d84c5bf9a6 100644 --- a/awx/ui/client/src/configuration/forms/jobs-form/configuration-jobs.form.js +++ b/awx/ui/client/src/configuration/forms/jobs-form/configuration-jobs.form.js @@ -71,6 +71,9 @@ export default ['i18n', function(i18n) { codeMirror: true, class: 'Form-textAreaLabel Form-formGroup--fullWidth' }, + AWX_ISOLATED_HOST_KEY_CHECKING: { + type: 'toggleSwitch', + }, AWX_ISOLATED_CHECK_INTERVAL: { type: 'text', reset: 'AWX_ISOLATED_CHECK_INTERVAL'