Ansible Collection is a great way of getting content contributions from various Ansible Developers. Earlier there was a tagline for Ansible – โBatteries includedโ, but now the battery is a bit small I will say as default Ansible installation will still include the necessary libraries and modules needed for your automation kickstart but not the entire Ansible module and libraries. This is good in a way that Ansible developers don’t need to wait for a specific release cycle of Ansible to include their latest version of module or library; instead they can distribute their content and make available latest versions via Ansible Collections separately.
Image : unsplash.com/@bright
Find Ansible Guides to start your Ansible Automation journey
Before I go to a demo, let me explain some important directories inside the Ansible Collections.
docs/
this is the local documentation about th collection. modules/
– ansible modules for this collectiongalaxy.yml
– this is the source dataplaybooks/
– playbooks part of collection lookups/
– lookup plugins roles/
– ansible roles for this collectiontasks/
task list files for include_tasks/import_tasks
plugins/
– ansible plugins and modules for this collectionfilters/
– Jinja2 filter pluginsconnection/
– connection plugins (if not using default)tests/
– tests for the collection’s contentSo basically, Ansible Collections are like Ansible Roles but much more than that. In Ansible Role you have items like variables, handlers, tasks, templates, files etc. But in Ansible Collection you have more items like modules, plugins, filters and Ansible Roles. (It is not mandatory that, every collection will have each and every items explained above; it depends on collection purpose and content type.)
Letโs say I need to implement some automation for kubernete clusters in our organization and I know there are several k8s modules I can use in my playbooks. So I simply developed a playbook based on k8s modules and tried to run it.
ERROR! couldn't resolve module/action 'community.kubernetes.k8s_scale'. This often indicates a misspelling, missing collection, or incorrect module path.
The error appears to be in '/home/devops/ansible-collections-demo/k8s-test.yaml': line 6, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Scale deployment up, and extend timeout
^ here
Upon checking I found that k8s modules are not part of default Ansible installation, instead k8s modules and plugins are part of an Ansible Collection called community.kubernetes
.
So I visited Ansible Galaxy and searched for kubernetes and I can see there are several results. But I already knew that, I need to install the kubernetes collections by community.
So I scroll down and find the community author and the kubernetes collection under that.
Click on the Kubernetes collections by Community and see the details like version, how to install this collection etc.
Now I know how to install this collection but hold on. I cannot blindly run the ansible-galaxy
command to install this collection as I need to know where this collection will be installed, right ? Okay, by default, Ansible collections will be installed under ~/.ansible/collections
, means in your home directory. It is fine if you are the only developer managing and running the project and only from your machine. But if you want other developers to use your ansible playbook, then they need to do the same collection installation on their machine as well ! So, if you want to deploy the collection as part of your project, install it in your project directory itself, under a specific directory.
So, I have created a directory called collections
in my project directory as below.
$ pwd
/home/devops/ansible-collections-demo
$ mkdir collections
$ ls -l
total 8
drwxrwxr-x 2 devops devops 4096 Dec 22 22:28 collections
-rw-rw-r-- 1 devops devops 288 Dec 22 22:09 k8s-test.yaml
Then I install Ansible Collection by mentioning the path to be installed.
$ ansible-galaxy collection install community.kubernetes -p ./collections
[WARNING]: The specified collections path '/home/devops/ansible-collections-
demo/collections' is not part of the configured Ansible collections paths
'/home/devops/.ansible/collections:/usr/share/ansible/collections'. The installed collection won't be picked
up in an Ansible run.
Process install dependency map
Starting collection install process
Installing 'community.kubernetes:1.1.1' to '/home/devops/ansible-collections-demo/collections/ansible_collections/community/kubernetes'
You should notice two main items from the above output.
The installed path – /home/devops/ansible-collections-demo/collections
– is not part of ansible configuration and even if you have installed collections in your project directory, ansible will not detect it. So you need to configure your COLLECTIONS_PATHS
in your ansible.cfg
(for specific project).
COLLECTIONS_PATHS = ./collections
Ansible will search for collections in ~/.ansible/collections:/usr/share/ansible/collections
, which is the default value for COLLECTIONS_PATHS
.
Ansible will automatically create a subdirectory called ansible_collections
under the directory you mentioned. (And additional sub-directories based on the author name like community
, fortinet
, ansible
etc)
$ ls -l
total 12
drwxrwxr-x 3 devops devops 4096 Sep 22 10:40 ansible
drwxrwxr-x 3 devops devops 4096 Dec 22 22:22 community
drwxr-xr-x 3 devops devops 4096 Sep 22 10:40 fortinet
Great! I have installed an ansible collection called and let me verify the same.
$ ansible-galaxy collection list
# /home/devops/ansible-collections-demo/collections/ansible_collections
Collection Version
-------------------- -------
community.kubernetes 1.1.1
Thatโs it, you can install any ansible collection in the same way and use the modules and plugins in your playbook.
There are several cases where you want to use a specific version of an Ansible collection due to compatibility issue or something. Do not need to worry as you can simply mention the collection version as below.
ansible-galaxy collection install author.newcollection:==1.0.0
What if your collection is not in Ansible Galaxy but it is stored in a git repository ? Again, you can deploy an Ansible Collection from a git repository as below.
ansible-galaxy collection install git+https://github.com/mycompany/mycollection.git
You may refer official documentation for more details.
Disclaimer:
The views expressed and the content shared in all published articles on this website are solely those of the respective authors, and they do not necessarily reflect the views of the author’s employer or the techbeatly platform. We strive to ensure the accuracy and validity of the content published on our website. However, we cannot guarantee the absolute correctness or completeness of the information provided. It is the responsibility of the readers and users of this website to verify the accuracy and appropriateness of any information or opinions expressed within the articles. If you come across any content that you believe to be incorrect or invalid, please contact us immediately so that we can address the issue promptly.
Tags: ansible collection use · ansible collections · ansible galaxy · Ansible Learning · getting started with ansible collections · how to install ansible collection · how to learn ansible · how to use ansible collection · install ansible collection from ansible galaxy · install ansible collection from git · installing ansible collection
Gineesh Madapparambath
Gineesh Madapparambath is the founder of techbeatly and he is the co-author of The Kubernetes Bible, Second Edition. and the author of ๐๐ป๐๐ถ๐ฏ๐น๐ฒ ๐ณ๐ผ๐ฟ ๐ฅ๐ฒ๐ฎ๐น-๐๐ถ๐ณ๐ฒ ๐๐๐๐ผ๐บ๐ฎ๐๐ถ๐ผ๐ป.
He has worked as a Systems Engineer, Automation Specialist, and content author. His primary focus is on Ansible Automation, Containerisation (OpenShift & Kubernetes), and Infrastructure as Code (Terraform).
(aka Gini Gangadharan - iamgini.com)
This site uses Akismet to reduce spam. Learn how your comment data is processed.2 Responses
Leave a Reply Cancel reply
[…] to the Ansible documentation or this how-to guide for more […]
[…] One of the strengths of Ansible is its ability to modularize and distribute content using collections. These collections can include playbooks, roles, modules, and plugins, making it easier to manage […]