mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Allow both old-style and new-style role dependencies to be valid.
Fixes #9173
This commit is contained in:
parent
98ed69213b
commit
48a308a87c
2 changed files with 94 additions and 8 deletions
|
@ -416,14 +416,36 @@ def role_spec_parse(role_spec):
|
||||||
|
|
||||||
|
|
||||||
def role_yaml_parse(role):
|
def role_yaml_parse(role):
|
||||||
if 'github.com' in role["src"] and 'http' in role["src"] and '+' not in role["src"] and not role["src"].endswith('.tar.gz'):
|
if 'role' in role:
|
||||||
role["src"] = "git+" + role["src"]
|
# Old style: {role: "galaxy.role,version,name", other_vars: "here" }
|
||||||
if '+' in role["src"]:
|
role_info = role_spec_parse(role['role'])
|
||||||
(scm, src) = role["src"].split('+')
|
if isinstance(role_info, dict):
|
||||||
role["scm"] = scm
|
# Warning: Slight change in behaviour here. name may be being
|
||||||
role["src"] = src
|
# overloaded. Previously, name was only a parameter to the role.
|
||||||
if 'name' not in role:
|
# Now it is both a parameter to the role and the name that
|
||||||
role["name"] = repo_url_to_role_name(role["src"])
|
# ansible-galaxy will install under on the local system.
|
||||||
|
if 'name' in role and 'name' in role_info:
|
||||||
|
del role_info['name']
|
||||||
|
role.update(role_info)
|
||||||
|
else:
|
||||||
|
# New style: { src: 'galaxy.role,version,name', other_vars: "here" }
|
||||||
|
if 'github.com' in role["src"] and 'http' in role["src"] and '+' not in role["src"] and not role["src"].endswith('.tar.gz'):
|
||||||
|
role["src"] = "git+" + role["src"]
|
||||||
|
|
||||||
|
if '+' in role["src"]:
|
||||||
|
(scm, src) = role["src"].split('+')
|
||||||
|
role["scm"] = scm
|
||||||
|
role["src"] = src
|
||||||
|
|
||||||
|
if 'name' not in role:
|
||||||
|
role["name"] = repo_url_to_role_name(role["src"])
|
||||||
|
|
||||||
|
if 'version' not in role:
|
||||||
|
role['version'] = ''
|
||||||
|
|
||||||
|
if 'scm' not in role:
|
||||||
|
role['scm'] = None
|
||||||
|
|
||||||
return role
|
return role
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -841,3 +841,67 @@ class TestUtils(unittest.TestCase):
|
||||||
for (spec, result) in tests:
|
for (spec, result) in tests:
|
||||||
self.assertEqual(ansible.utils.role_spec_parse(spec), result)
|
self.assertEqual(ansible.utils.role_spec_parse(spec), result)
|
||||||
|
|
||||||
|
def test_role_yaml_parse(self):
|
||||||
|
tests = (
|
||||||
|
(
|
||||||
|
# Old style
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch',
|
||||||
|
'name': 'elks'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch',
|
||||||
|
'name': 'elks',
|
||||||
|
'scm': None,
|
||||||
|
'src': 'debops.elasticsearch',
|
||||||
|
'version': '',
|
||||||
|
}
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch,1.0,elks',
|
||||||
|
'my_param': 'foo'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch,1.0,elks',
|
||||||
|
'name': 'elks',
|
||||||
|
'scm': None,
|
||||||
|
'src': 'debops.elasticsearch',
|
||||||
|
'version': '1.0',
|
||||||
|
'my_param': 'foo',
|
||||||
|
}
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch,1.0',
|
||||||
|
'my_param': 'foo'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'role': 'debops.elasticsearch,1.0',
|
||||||
|
'name': 'debops.elasticsearch',
|
||||||
|
'scm': None,
|
||||||
|
'src': 'debops.elasticsearch',
|
||||||
|
'version': '1.0',
|
||||||
|
'my_param': 'foo',
|
||||||
|
}
|
||||||
|
),
|
||||||
|
# New style
|
||||||
|
(
|
||||||
|
{
|
||||||
|
'src': 'debops.elasticsearch',
|
||||||
|
'name': 'elks',
|
||||||
|
'my_param': 'foo'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'elks',
|
||||||
|
'scm': None,
|
||||||
|
'src': 'debops.elasticsearch',
|
||||||
|
'version': '',
|
||||||
|
'my_param': 'foo'
|
||||||
|
}
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
for (role, result) in tests:
|
||||||
|
self.assertEqual(ansible.utils.role_yaml_parse(role), result)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue