mirror of
https://github.com/ansible/awx.git
synced 2026-03-02 17:28:51 -03:30
Merge pull request #8880 from vguillard/issue_5080_openstack_region_field_missing
Related #5080 openstack region field missing Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
@@ -3354,6 +3354,15 @@ msgid ""
|
|||||||
"common scenarios."
|
"common scenarios."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:824
|
||||||
|
msgid "Region Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:826
|
||||||
|
msgid ""
|
||||||
|
"For some cloud providers, like OVH, region must be specified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: awx/main/models/credential/__init__.py:824
|
#: awx/main/models/credential/__init__.py:824
|
||||||
#: awx/main/models/credential/__init__.py:1131
|
#: awx/main/models/credential/__init__.py:1131
|
||||||
#: awx/main/models/credential/__init__.py:1166
|
#: awx/main/models/credential/__init__.py:1166
|
||||||
|
|||||||
@@ -3354,6 +3354,15 @@ msgid ""
|
|||||||
"common scenarios."
|
"common scenarios."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:824
|
||||||
|
msgid "Region Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:826
|
||||||
|
msgid ""
|
||||||
|
"For some cloud providers, like OVH, region must be specified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: awx/main/models/credential/__init__.py:824
|
#: awx/main/models/credential/__init__.py:824
|
||||||
#: awx/main/models/credential/__init__.py:1131
|
#: awx/main/models/credential/__init__.py:1131
|
||||||
#: awx/main/models/credential/__init__.py:1166
|
#: awx/main/models/credential/__init__.py:1166
|
||||||
|
|||||||
@@ -3294,6 +3294,16 @@ msgid ""
|
|||||||
"common scenarios."
|
"common scenarios."
|
||||||
msgstr "Les domaines OpenStack définissent les limites administratives. Ils sont nécessaires uniquement pour les URL d’authentification Keystone v3. Voir la documentation Ansible Tower pour les scénarios courants."
|
msgstr "Les domaines OpenStack définissent les limites administratives. Ils sont nécessaires uniquement pour les URL d’authentification Keystone v3. Voir la documentation Ansible Tower pour les scénarios courants."
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:824
|
||||||
|
msgid "Region Name"
|
||||||
|
msgstr "Nom de la region"
|
||||||
|
|
||||||
|
#: awx/main/models/credential/__init__.py:826
|
||||||
|
msgid ""
|
||||||
|
"For some cloud providers, like OVH, region must be specified."
|
||||||
|
msgstr ""
|
||||||
|
"Chez certains fournisseurs, comme OVH, vous devez spécifier le nom de la région"
|
||||||
|
|
||||||
#: awx/main/models/credential/__init__.py:812
|
#: awx/main/models/credential/__init__.py:812
|
||||||
#: awx/main/models/credential/__init__.py:1110
|
#: awx/main/models/credential/__init__.py:1110
|
||||||
#: awx/main/models/credential/__init__.py:1144
|
#: awx/main/models/credential/__init__.py:1144
|
||||||
|
|||||||
@@ -819,6 +819,11 @@ 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': 'region',
|
||||||
|
'label': ugettext_noop('Region Name'),
|
||||||
|
'type': 'string',
|
||||||
|
'help_text': ugettext_noop('For some cloud providers, like OVH, region must be specified'),
|
||||||
}, {
|
}, {
|
||||||
'id': 'verify_ssl',
|
'id': 'verify_ssl',
|
||||||
'label': ugettext_noop('Verify SSL'),
|
'label': ugettext_noop('Verify SSL'),
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ def _openstack_data(cred):
|
|||||||
if cred.has_input('domain'):
|
if cred.has_input('domain'):
|
||||||
openstack_auth['domain_name'] = cred.get_input('domain', default='')
|
openstack_auth['domain_name'] = cred.get_input('domain', default='')
|
||||||
verify_state = cred.get_input('verify_ssl', default=True)
|
verify_state = cred.get_input('verify_ssl', default=True)
|
||||||
|
|
||||||
openstack_data = {
|
openstack_data = {
|
||||||
'clouds': {
|
'clouds': {
|
||||||
'devstack': {
|
'devstack': {
|
||||||
@@ -90,6 +91,10 @@ def _openstack_data(cred):
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cred.has_input('project_region_name'):
|
||||||
|
openstack_data['clouds']['devstack']['region_name'] = cred.get_input('project_region_name', default='')
|
||||||
|
|
||||||
return openstack_data
|
return openstack_data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -246,6 +246,53 @@ def test_openstack_client_config_generation_with_project_domain_name(mocker, sou
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("source,expected", [
|
||||||
|
(None, True), (False, False), (True, True)
|
||||||
|
])
|
||||||
|
def test_openstack_client_config_generation_with_project_region_name(mocker, source, expected, private_data_dir):
|
||||||
|
update = tasks.RunInventoryUpdate()
|
||||||
|
credential_type = CredentialType.defaults['openstack']()
|
||||||
|
inputs = {
|
||||||
|
'host': 'https://keystone.openstack.example.org',
|
||||||
|
'username': 'demo',
|
||||||
|
'password': 'secrete',
|
||||||
|
'project': 'demo-project',
|
||||||
|
'domain': 'my-demo-domain',
|
||||||
|
'project_domain_name': 'project-domain',
|
||||||
|
'project_region_name': 'region-name',
|
||||||
|
}
|
||||||
|
if source is not None:
|
||||||
|
inputs['verify_ssl'] = source
|
||||||
|
credential = Credential(pk=1, credential_type=credential_type, inputs=inputs)
|
||||||
|
|
||||||
|
inventory_update = mocker.Mock(**{
|
||||||
|
'source': 'openstack',
|
||||||
|
'source_vars_dict': {},
|
||||||
|
'get_cloud_credential': mocker.Mock(return_value=credential),
|
||||||
|
'get_extra_credentials': lambda x: [],
|
||||||
|
'ansible_virtualenv_path': '/venv/foo'
|
||||||
|
})
|
||||||
|
cloud_config = update.build_private_data(inventory_update, private_data_dir)
|
||||||
|
cloud_credential = yaml.safe_load(
|
||||||
|
cloud_config.get('credentials')[credential]
|
||||||
|
)
|
||||||
|
assert cloud_credential['clouds'] == {
|
||||||
|
'devstack': {
|
||||||
|
'auth': {
|
||||||
|
'auth_url': 'https://keystone.openstack.example.org',
|
||||||
|
'password': 'secrete',
|
||||||
|
'project_name': 'demo-project',
|
||||||
|
'username': 'demo',
|
||||||
|
'domain_name': 'my-demo-domain',
|
||||||
|
'project_domain_name': 'project-domain',
|
||||||
|
},
|
||||||
|
'verify': expected,
|
||||||
|
'private': True,
|
||||||
|
'region_name': 'region-name',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("source,expected", [
|
@pytest.mark.parametrize("source,expected", [
|
||||||
(False, False), (True, True)
|
(False, False), (True, True)
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -275,6 +275,11 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"help_text": "OpenStack domains define administrative boundaries. It is only needed for Keystone v3 authentication URLs. Refer to Ansible Tower documentation for common scenarios."
|
"help_text": "OpenStack domains define administrative boundaries. It is only needed for Keystone v3 authentication URLs. Refer to Ansible Tower documentation for common scenarios."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "project_region_name",
|
||||||
|
"label": "Region Name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "verify_ssl",
|
"id": "verify_ssl",
|
||||||
"label": "Verify SSL",
|
"label": "Verify SSL",
|
||||||
|
|||||||
Reference in New Issue
Block a user