Co-authored-by: Matt Davis <nitzmahone@users.noreply.github.com> Co-authored-by: Sandra McCann <samccann@redhat.com>
4.6 KiB
Using collections
Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. You can install and use collections through Ansible Galaxy.
Installing collections
Installing
collections with ansible-galaxy
Installing an older version of a collection
Install multiple collections with a requirements file
Configuring the
ansible-galaxy
client
Using collections in a Playbook
Once installed, you can reference a collection content by its fully qualified collection name (FQCN):
- hosts: all
tasks:
- my_namespace.my_collection.mymodule:
option1: value
This works for roles or any type of plugin distributed within the collection:
- hosts: all
tasks:
- import_role:
name: my_namespace.my_collection.role1
- my_namespace.mycollection.mymodule:
option1: value
- debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
Simplifying
module names with the collections
keyword
The collections
keyword lets you define a list of
collections that your role or playbook should search for unqualified
module and action names. So you can use the collections
keyword, then simply refer to modules and action plugins by their
short-form names throughout that role or playbook.
Warning
If your playbook uses both the collections
keyword and
one or more roles, the roles do not inherit the collections set by the
playbook. See below for details.
Using collections
in
roles
Within a role, you can control which collections Ansible searches for
the tasks inside the role using the collections
keyword in
the role's metadata/main.yml
. Ansible will use the
collections list defined inside the role even if the playbook that calls
the role defines different collections in a separate
collections
keyword entry. Roles defined inside a
collection always implicitly search their own collection first, so you
don't need to use the collections
keyword to access
modules, actions, or other roles contained in the same collection.
# myrole/metadata/main.yml
collections:
- my_namespace.first_collection
- my_namespace.second_collection
- other_namespace.other_collection
Using collections
in playbooks
In a playbook, you can control the collections Ansible searches for
modules and action plugins to execute. However, any roles you call in
your playbook define their own collections search order; they do not
inherit the calling playbook's settings. This is true even if the role
does not define its own collections
keyword.
- hosts: all
collections:
- my_namespace.my_collection
tasks:
- import_role:
name: role1
- mymodule:
option1: value
- debug:
msg: '{{ lookup("my_namespace.my_collection.lookup1", 'param1')| my_namespace.my_collection.filter1 }}'
The collections
keyword merely creates an ordered
'search path' for non-namespaced plugin and role references. It does not
install content or otherwise change Ansible's behavior around the
loading of plugins or roles. Note that an FQCN is still required for
non-action or module plugins (e.g., lookups, filters, tests).
developing_collections
-
Develop or modify a collection.
collections_galaxy_meta
-
Understand the collections metadata structure.
- Mailing List
-
The development mailing list
- irc.freenode.net
-
#ansible IRC chat channel