diff --git a/lib/ansible/cli/galaxy.py b/lib/ansible/cli/galaxy.py index 17f06409bb..c44df5a343 100644 --- a/lib/ansible/cli/galaxy.py +++ b/lib/ansible/cli/galaxy.py @@ -368,11 +368,23 @@ class GalaxyCLI(CLI): raise AnsibleError("No roles found in file: %s" % role_file) for role in required_roles: - role = RoleRequirement.role_yaml_parse(role) - display.vvv('found role %s in yaml file' % str(role)) - if 'name' not in role and 'scm' not in role: - raise AnsibleError("Must specify name or src for role") - roles_left.append(GalaxyRole(self.galaxy, **role)) + if "include" not in role: + role = RoleRequirement.role_yaml_parse(role) + display.vvv("found role %s in yaml file" % str(role)) + if "name" not in role and "scm" not in role: + raise AnsibleError("Must specify name or src for role") + roles_left.append(GalaxyRole(self.galaxy, **role)) + else: + with open(role["include"]) as f_include: + try: + roles_left += [ + GalaxyRole(self.galaxy, **r) for r in + map(RoleRequirement.role_yaml_parse, + yaml.safe_load(f_include)) + ] + except Exception as e: + msg = "Unable to load data from the include requirements file: %s %s" + raise AnsibleError(msg % (role_file, e)) else: display.deprecated("going forward only the yaml format will be supported") # roles listed in a file, one per line