Hello team,
I am getting started with ansible but I have a number of questions.
Apologies in advance for the rather noob questions:
1. In my inventory, is there anyway I can specify a single domain for all
the hosts e.g.
[myhosts]
hostA
hostB
rather than
[myhosts]
hostA.example.com
hostB.example.com
Given the requirement that I might be run tests from outside the domain?
There is not a way to set the domain name suffix on a group all together.
OS mechanisms on short filenames (i.e. resolv.conf) will apply
2. Many of my roles need to call supervisor when they have finished so
they all use the same handler:
---
- name: restart supervisor
service: name=supervisor state=restarted
However at the moment I have the same duplicated handler file for each
role - how can I avoid this and have a single handler file?
Yes, you can define the handler in a common role and just use it once.
It's ok if the role doesn't have a tasks file too.
3. Is it possible to create strings from list?
I need to create a classpath variable - this is how I do it currently:
classpath: "{{ dest }}jarA.jar:{{ dest }}jarB.jar:{{ dest }}jarC.jar:{{
dest }}jarD.jar"
Yes! See the "set_fact" module in the module docs, or just define a
variable like so anywhere else in Ansible.
Variables are lazy-evaluated at the time of use.
In Python I could use a loop to do this. Is there any way to do this in
Ansible?
4. Do map style structures exist?
Similarly, when I am getting these jars I use a list like this - ideally
it would be better to use a map, then generate the list from the map to
avoid configuration duplication. Is there any way to achieve this?
- name: my service | Get jars
action: get_url url={{ build_url }}lastSuccessfulBuild/artifact/{{ item
}} dest={{ dest }} mode=0440
with_items:
- pathA/jarA
- pathB/jarB
- pathC/jarC
- pathD/jarD
So what you have above works.
What would be in your map/dictionary? You can definitely iterate across a
list of dictionaries and hopefully I can help explain further -- just need
a bit more context.
Thanks!