Add verify_ssl to OpenStack credential type

To avoid verification failures when using a self-signed certificate file,
 Added "Verify SSL" check box to the openstack credential type edit page.

Signed-off-by: Hideki Saito <saito@fgrep.org>
This commit is contained in:
Hideki Saito
2019-02-08 11:56:28 +09:00
committed by Ryan Petrello
parent 1ece764547
commit 9f04fbe4a4
3 changed files with 18 additions and 2 deletions

View File

@@ -970,6 +970,10 @@ ManagedCredentialType(
'It is only needed for Keystone v3 authentication ' 'It is only needed for Keystone v3 authentication '
'URLs. Refer to Ansible Tower documentation for ' 'URLs. Refer to Ansible Tower documentation for '
'common scenarios.') 'common scenarios.')
}, {
'id': 'verify_ssl',
'label': ugettext_noop('Verify SSL'),
'type': 'boolean'
}], }],
'required': ['username', 'password', 'host', 'project'] 'required': ['username', 'password', 'host', 'project']
} }

View File

@@ -1167,10 +1167,12 @@ class RunJob(BaseTask):
project_name=credential.get_input('project', default='')) project_name=credential.get_input('project', default=''))
if credential.has_input('domain'): if credential.has_input('domain'):
openstack_auth['domain_name'] = credential.get_input('domain', default='') openstack_auth['domain_name'] = credential.get_input('domain', default='')
verify_state = credential.get_input('verify_ssl', default=True)
openstack_data = { openstack_data = {
'clouds': { 'clouds': {
'devstack': { 'devstack': {
'auth': openstack_auth, 'auth': openstack_auth,
'verify': verify_state,
}, },
}, },
} }
@@ -1875,6 +1877,7 @@ class RunInventoryUpdate(BaseTask):
openstack_auth['domain_name'] = credential.get_input('domain', default='') openstack_auth['domain_name'] = credential.get_input('domain', default='')
private_state = inventory_update.source_vars_dict.get('private', True) private_state = inventory_update.source_vars_dict.get('private', True)
verify_state = credential.get_input('verify_ssl', default=True)
# Retrieve cache path from inventory update vars if available, # Retrieve cache path from inventory update vars if available,
# otherwise create a temporary cache path only for this update. # otherwise create a temporary cache path only for this update.
cache = inventory_update.source_vars_dict.get('cache', {}) cache = inventory_update.source_vars_dict.get('cache', {})
@@ -1887,6 +1890,7 @@ class RunInventoryUpdate(BaseTask):
'clouds': { 'clouds': {
'devstack': { 'devstack': {
'private': private_state, 'private': private_state,
'verify': verify_state,
'auth': openstack_auth, 'auth': openstack_auth,
}, },
}, },

View File

@@ -105,7 +105,10 @@ def test_safe_env_returns_new_copy():
assert build_safe_env(env) is not env assert build_safe_env(env) is not env
def test_openstack_client_config_generation(mocker): @pytest.mark.parametrize("source,expected", [
(False, False), (True, True)
])
def test_openstack_client_config_generation(mocker, source, expected):
update = tasks.RunInventoryUpdate() update = tasks.RunInventoryUpdate()
credential_type = CredentialType.defaults['openstack']() credential_type = CredentialType.defaults['openstack']()
inputs = { inputs = {
@@ -114,6 +117,7 @@ def test_openstack_client_config_generation(mocker):
'password': 'secrete', 'password': 'secrete',
'project': 'demo-project', 'project': 'demo-project',
'domain': 'my-demo-domain', 'domain': 'my-demo-domain',
'verify_ssl': source,
} }
credential = Credential(pk=1, credential_type=credential_type, inputs=inputs) credential = Credential(pk=1, credential_type=credential_type, inputs=inputs)
@@ -136,7 +140,8 @@ def test_openstack_client_config_generation(mocker):
'username': 'demo', 'username': 'demo',
'domain_name': 'my-demo-domain', 'domain_name': 'my-demo-domain',
}, },
'private': True 'verify': expected,
'private': True,
} }
} }
@@ -153,6 +158,7 @@ def test_openstack_client_config_generation_with_private_source_vars(mocker, sou
'password': 'secrete', 'password': 'secrete',
'project': 'demo-project', 'project': 'demo-project',
'domain': None, 'domain': None,
'verify_ssl': True,
} }
credential = Credential(pk=1, credential_type=credential_type, inputs=inputs) credential = Credential(pk=1, credential_type=credential_type, inputs=inputs)
@@ -174,6 +180,7 @@ def test_openstack_client_config_generation_with_private_source_vars(mocker, sou
'project_name': 'demo-project', 'project_name': 'demo-project',
'username': 'demo' 'username': 'demo'
}, },
'verify': True,
'private': expected 'private': expected
} }
} }
@@ -1145,6 +1152,7 @@ class TestJobCredentials(TestJobExecution):
' password: secret', ' password: secret',
' project_name: tenant-name', ' project_name: tenant-name',
' username: bob', ' username: bob',
' verify: true',
'' ''
]) ])
return ['successful', 0] return ['successful', 0]