Fix multiple role paths
Due to a bug in the equality check of the ZuulRoles class, we were unable to add more than one roles path. This corrects that and adds a test of role inheritance which exercises this. Change-Id: Icf6daa312405ed56d2fecb89fc6aee69b4b80e41
This commit is contained in:
parent
41efa8827a
commit
1b27f6afe0
|
@ -0,0 +1,2 @@
|
||||||
|
- hosts: all
|
||||||
|
tasks: []
|
|
@ -0,0 +1,2 @@
|
||||||
|
- hosts: all
|
||||||
|
tasks: []
|
|
@ -673,6 +673,25 @@ class TestProjectKeys(ZuulTestCase):
|
||||||
class TestRoles(ZuulTestCase):
|
class TestRoles(ZuulTestCase):
|
||||||
tenant_config_file = 'config/roles/main.yaml'
|
tenant_config_file = 'config/roles/main.yaml'
|
||||||
|
|
||||||
|
def _assertRolePath(self, build, playbook, content):
|
||||||
|
path = os.path.join(self.test_root, build.uuid,
|
||||||
|
'ansible', playbook, 'ansible.cfg')
|
||||||
|
roles_paths = []
|
||||||
|
with open(path) as f:
|
||||||
|
for line in f:
|
||||||
|
if line.startswith('roles_path'):
|
||||||
|
roles_paths.append(line)
|
||||||
|
print(roles_paths)
|
||||||
|
if content:
|
||||||
|
self.assertEqual(len(roles_paths), 1,
|
||||||
|
"Should have one roles_path line in %s" %
|
||||||
|
(playbook,))
|
||||||
|
self.assertIn(content, roles_paths[0])
|
||||||
|
else:
|
||||||
|
self.assertEqual(len(roles_paths), 0,
|
||||||
|
"Should have no roles_path line in %s" %
|
||||||
|
(playbook,))
|
||||||
|
|
||||||
def test_role(self):
|
def test_role(self):
|
||||||
# This exercises a proposed change to a role being checked out
|
# This exercises a proposed change to a role being checked out
|
||||||
# and used.
|
# and used.
|
||||||
|
@ -687,6 +706,51 @@ class TestRoles(ZuulTestCase):
|
||||||
dict(name='project-test', result='SUCCESS', changes='1,1 2,1'),
|
dict(name='project-test', result='SUCCESS', changes='1,1 2,1'),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def test_role_inheritance(self):
|
||||||
|
self.executor_server.hold_jobs_in_build = True
|
||||||
|
conf = textwrap.dedent(
|
||||||
|
"""
|
||||||
|
- job:
|
||||||
|
name: parent
|
||||||
|
roles:
|
||||||
|
- zuul: bare-role
|
||||||
|
pre-run: playbooks/parent-pre
|
||||||
|
post-run: playbooks/parent-post
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: project-test
|
||||||
|
parent: parent
|
||||||
|
roles:
|
||||||
|
- zuul: org/project
|
||||||
|
|
||||||
|
- project:
|
||||||
|
name: org/project
|
||||||
|
check:
|
||||||
|
jobs:
|
||||||
|
- project-test
|
||||||
|
""")
|
||||||
|
|
||||||
|
file_dict = {'.zuul.yaml': conf}
|
||||||
|
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
|
||||||
|
files=file_dict)
|
||||||
|
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
self.assertEqual(len(self.builds), 1)
|
||||||
|
build = self.getBuildByName('project-test')
|
||||||
|
self._assertRolePath(build, 'pre_playbook_0', 'role_0')
|
||||||
|
self._assertRolePath(build, 'playbook_0', 'role_0')
|
||||||
|
self._assertRolePath(build, 'playbook_0', 'role_1')
|
||||||
|
self._assertRolePath(build, 'post_playbook_0', 'role_0')
|
||||||
|
|
||||||
|
self.executor_server.hold_jobs_in_build = False
|
||||||
|
self.executor_server.release()
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
self.assertHistory([
|
||||||
|
dict(name='project-test', result='SUCCESS', changes='1,1'),
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
class TestShadow(ZuulTestCase):
|
class TestShadow(ZuulTestCase):
|
||||||
tenant_config_file = 'config/shadow/main.yaml'
|
tenant_config_file = 'config/shadow/main.yaml'
|
||||||
|
|
|
@ -1120,7 +1120,8 @@ class AnsibleJob(object):
|
||||||
# This repo has a collection of roles
|
# This repo has a collection of roles
|
||||||
if not trusted:
|
if not trusted:
|
||||||
for entry in os.listdir(d):
|
for entry in os.listdir(d):
|
||||||
self._blockPluginDirs(os.path.join(d, entry))
|
if os.path.isdir(os.path.join(d, entry)):
|
||||||
|
self._blockPluginDirs(os.path.join(d, entry))
|
||||||
return d
|
return d
|
||||||
# It is neither a bare role, nor a collection of roles
|
# It is neither a bare role, nor a collection of roles
|
||||||
raise Exception("Unable to find role in %s" % (path,))
|
raise Exception("Unable to find role in %s" % (path,))
|
||||||
|
|
|
@ -712,7 +712,7 @@ class ZuulRole(Role):
|
||||||
if not isinstance(other, ZuulRole):
|
if not isinstance(other, ZuulRole):
|
||||||
return False
|
return False
|
||||||
return (super(ZuulRole, self).__eq__(other) and
|
return (super(ZuulRole, self).__eq__(other) and
|
||||||
self.connection_name == other.connection_name,
|
self.connection_name == other.connection_name and
|
||||||
self.project_name == other.project_name)
|
self.project_name == other.project_name)
|
||||||
|
|
||||||
def toDict(self):
|
def toDict(self):
|
||||||
|
|
Loading…
Reference in New Issue