Question:
I am learning Ansible but I am getting confused when to use hyphen and when not to use hyphen in playbook. As I know, hyphen is used for list in Ansible.
For example,
1 2 3 4 5 6 |
--- # my first playbook - hosts: webservers ( why did we use hyphen here it is not a list) tasks: - name: installing httpd yum: name=httpd state=installed ( why we shouldn't use hyphen here). |
From Ansible documentation, it is said that hyphen is for list, for example:
1 2 3 4 5 |
fruits: - apple - grapes - orange |
So, I am confused when to use hyphens and when not to use.
Answer:
Hyphen -
is used to specify list items, and colon :
is used to specify dictionary items or key-value pair. I think a comparable example with another language (e.g. Python) will make this clear. Let’s say you have a list my_list
like this:
1 2 |
my_list = ['foo', 'bar'] |
In Ansible you will specify this list items with hyphen:
1 2 3 4 |
my_list: - foo - bar |
Now let’s say you have a key-value pair or dictionary like this:
1 2 3 4 5 |
my_dict = { 'key_foo': 'value_foo', 'key_bar': 'value_bar' } |
In Ansible, you will use colon instead of hyphen for key-value pair or dictionary:
1 2 3 4 |
my_dict: key_foo: value_foo key_bar: value_bar |
Inside a playbook you have a list of plays and inside each play you have a list of tasks. Since tasks
is a list, each task item is started with a hyphen like this:
1 2 3 4 5 |
tasks: - task_1 - task_2 |
Now each task itself is a dictionary or key value pair. Your example task contains two keys, name
and yum
. yum
itself is another dictionary with keys name
, state
etc.
So to specify task list you use hyphen, but since every task is dictionary they contain colon.