So Ansible 2.8.0 was just released and it comes with a few really nice new features. I haven’t had time to use it much, since I just upgraded like 10 minutes ago, but reading through the Release Notes I found some really cool new things that I know I’ll enjoy in 2.8.
Automatic detection of Python path
This is a really nice feature. It used to be that Ansible always looked for /usr/bin/python
on the target system. If you wanted to use anything else you needed to adjust ansible_python_interpreter
. No more! Now Ansible will do a much smarter lookup where it will not only look for Python in several locations before giving up, it will adapt to the system it is executing on. So for example on Ubuntu we always had to explicitly tell Ansible to use /usr/bin/python3
since there is no /usr/bin/python
by default. Now Ansible will know this out of the box.
Better SSH on macOS
Ansible moved away from the Paramiko library in favor of SSH a long time ago. Except when executed on macOS. With 2.8 those of us using a MacBook will finally get some of those sweet performance improvements that SSH has over Paramiko which will mean a lot since the biggest downside to Ansible is its slow execution.
Accessing undefined variables is fine
So when you had a large structure with nested objects and wanted to access one and give it a default if it, or any parent, was undefined you needed to do this:
{{ ((foo | default({})).bar | \ default({})).baz | default('DEFAULT') }} or {{ foo.bar.baz if (foo is defined and \ foo.bar is defined and foo.bar.baz is defined) \ else 'DEFAULT' }}
Ansible 2.8 will no longer throw an error if you try to access an object of an undefined variable but instead just give you undefined back. So now you can just do this:
{{ foo.bar.baz | default('DEFAULT') }}
A lot more elegant!
Tons of new modules
Of course as with any new release of Ansible there is also a long list of new modules. For example the one that I am currently most interested in are the Foreman modules. Ansible comes with just a single module for Foreman / Satellite but I have been using the foreman-ansible-modules for a while now and 2.8 deprecates the old foreman plugin in favor of this collection. Hopefully they will soon be incorporated into Ansible Core so I don’t have to fetch them from GitHub and put inside my role.
There are also a ton of fact-gathering modules for Docker such as docker_volume_info
, docker_network_info
, docker_container_info
and docker_host_info
that will be great when checking and manipulating Docker objects. Although, with RHEL 8 we will hopefully be moving away from Docker so these may come a little too late to the party, to be honest.
There’s a bunch of new KubeVirt modules which may be really cool once we move over to OpenShift 4 and run some virtual machines in it.
Other noteworthy modules are:
- OpenSSL fact gathering for certificates, keys and CSRs
- A whole bunch of VMware modules
- A few Ansible Tower modules
- A bunch of Windows modules