Merge pull request #12807 from Lujeni/devel

Ansible-galaxy requirements support a include directive
This commit is contained in:
James Cammarata 2016-06-18 07:50:59 -05:00 committed by GitHub
commit 4bc85e150a
2 changed files with 39 additions and 21 deletions

View file

@ -68,6 +68,28 @@ To request specific versions (tags) of a role, use this syntax in the roles file
Available versions will be listed on the Ansible Galaxy webpage for that role. Available versions will be listed on the Ansible Galaxy webpage for that role.
Installing Multiple Roles From Multiple Files
=============================================
At a basic level, including requirements files allows you to break up bits of configuration policy into smaller files. Role includes pull in roles from other files.
ansible-galaxy install -r requirements.yml
# from galaxy
- src: yatesr.timezone
- include: webserver.yml
Content of the webserver.yml file.
# from github
- src: https://github.com/bennojoy/nginx
# from github installing to a relative path
- src: https://github.com/bennojoy/nginx
path: vagrant/roles/
Advanced Control over Role Requirements Files Advanced Control over Role Requirements Files
============================================= =============================================
@ -385,19 +407,3 @@ Use the --remove option to disable and remove a Travis integration:
Provide the ID of the integration you want disabled. Use the --list option to get the ID. Provide the ID of the integration you want disabled. Use the --list option to get the ID.

View file

@ -348,11 +348,23 @@ class GalaxyCLI(CLI):
raise AnsibleError("No roles found in file: %s" % role_file) raise AnsibleError("No roles found in file: %s" % role_file)
for role in required_roles: for role in required_roles:
role = RoleRequirement.role_yaml_parse(role) if "include" not in role:
display.vvv('found role %s in yaml file' % str(role)) role = RoleRequirement.role_yaml_parse(role)
if 'name' not in role and 'scm' not in role: display.vvv("found role %s in yaml file" % str(role))
raise AnsibleError("Must specify name or src for role") if "name" not in role and "scm" not in role:
roles_left.append(GalaxyRole(self.galaxy, **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: else:
display.deprecated("going forward only the yaml format will be supported") display.deprecated("going forward only the yaml format will be supported")
# roles listed in a file, one per line # roles listed in a file, one per line