Ansible playbook yaml syntax errors

1,220 views
Skip to first unread message

Veera Mani

unread,
Nov 11, 2017, 6:14:30 PM11/11/17
to Ansible Project
Hi all,

I am new to Ansible learning  and I   start practicing  yaml playbook writings. 
Though I am able to have a program with  correct indent, ansible-playbook  still pointing errors. I have no programming experience than bash scripting.

Could someone highlight, what I am missing.
Any  guidance to  do a search here before posting   will be much appreciated.

Thanks



[student@mgmvm1 ~]$ ansible --version
ansible
2.3.1.0
  config file
= /home/student/ansible.cfg
  configured
module search path = Default w/o overrides
  python version
= 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
[student@mgmvm1 ~]$ python -c 'import yaml, sys; print yaml.load(sys.stdin)' < test.yml
[{'become': True, 'tasks': [{'block': [{'state': 'latest', 'yum': None, 'name': 'httpd'}, {'state': 'latest', 'yum': None, 'name': 'firewalld'}]}, {'block': [{'state': 'enabled', 'permanent': True, 'name': 'firewalld permits http service', 'service': 'http', 'firewalld': None, 'immediate': True}]}, {'block': [{'state': 'started', 'enabled': True, 'name': 'httpd', 'service': None}, {'state': 'started', 'enabled': True, 'name': 'firewalld', 'service': None}]}, {'block': [{'content': 'Welcome to the example.com intranet!\n', 'dest': '/var/www/html/index.html', 'copy': None, 'name': 'test html page'}]}], 'hosts': 'ctlvm.example.com', 'name': 'intranet services'}, {'tasks': [{'url': 'http://ctlvm.example.com', 'status_code': 200, 'name': 'connect to intranet', 'uri': None}], 'hosts': 'localhost', 'name': 'test'}]
[student@mgmvm1 ~]$ ansible-playbook --syntax-check test.yml
 
[WARNING]: While constructing a mapping from /home/student/test.yml, line 7, column 9, found a duplicate dict key (name).
Using last defined value only.


 
[WARNING]: While constructing a mapping from /home/student/test.yml, line 13, column 9, found a duplicate dict key (name).
Using last defined value only.


 
[WARNING]: While constructing a mapping from /home/student/test.yml, line 28, column 9, found a duplicate dict key (name).
Using last defined value only.


 
[WARNING]: While constructing a mapping from /home/student/test.yml, line 34, column 9, found a duplicate dict key (name).
Using last defined value only.


ERROR
! 'state' is not a valid attribute for a Task


The error appears to have been in '/home/student/test.yml': line 7, column 9, but may
be elsewhere
in the file depending on the exact syntax problem.


The offending line appears to be:


 
- block:
     
- name: latest httpd version installed
       
^ here


[student@mgmvm1 ~]$ cat test.yml
---
- name: intranet services
  hosts
: ctlvm.example.com
  become
: yes
  tasks
:
 
- block:
     
- name: latest httpd version installed
        yum
:
        name
: httpd
        state
: latest




     
- name: latest firewalld version is present
        yum
:
        name
: firewalld
        state
: latest


 
- block:


     
- name: firewalld permits http service
        firewalld
:
        service
: http
        permanent
: yes
        state
: enabled
        immediate
: yes


 
- block:
     
- name: httpd enabled and running
        service
:
        name
: httpd
        enabled
: yes
        state
: started


     
- name: firewalld is enabled and running
        service
:
        name
: firewalld
        enabled
: yes
        state
: started


 
- block:
     
- name: test html page
        copy
:
        content
: "Welcome to the example.com intranet!\n"
        dest
: /var/www/html/index.html


- name: test
  hosts
: localhost
  tasks
:
   
- name: connect to intranet
     uri
:
     url
: http://ctlvm.example.com
     status_code
: 200
[student@mgmvm1 ~]$

Kai Stian Olstad

unread,
Nov 12, 2017, 9:55:33 AM11/12/17
to ansible...@googlegroups.com
On søndag 12. november 2017 00.14.30 CET Veera Mani wrote:
> Hi all,
>
> I am new to Ansible learning and I start practicing yaml playbook
> writings.
> Though I am able to have a program with correct indent, ansible-playbook
> still pointing errors. I have no programming experience than bash scripting.

It's a valid YAML, but not a valid Ansible syntax.
You need to study the multiple examples in the documentation and pay attention to the indentation level used in them.


> Could someone highlight, what I am missing.
> Any guidance to do a search here before posting will be much
> appreciated.

Instead of just giving the answer I going to explain the process of checking it yourself.
All you task have the same error so I'm only going to take the first two ones.


> - block:
> - name: latest httpd version installed
> yum:
> name: httpd
> state: latest
>
>
>
>
> - name: latest firewalld version is present
> yum:
> name: firewalld
> state: latest

You don't need the block here, block is to grouping task that you need common directives on or you need error handling.

If you check the documentation of the yum module you'll find examples in the bottom[1]
Look closely at the indentation and you'll see that yours don't match.

Do that for all you task, since they all have incorrect indentation.


[1] https://docs.ansible.com/ansible/latest/yum_module.html#examples


--
Kai Stian Olstad

Veera

unread,
Nov 12, 2017, 7:10:46 PM11/12/17
to Ansible Project
Thanks a Lot.

  What I  did is   ,indent the lines  as in the exact examples  of per  the examples of modules  yum, copy and  uri  and it worked .
  This program is an  example  given for me to learn block and I continue with that . when I learn block completely , I will do the changes as you suggested.

 So , was indent was the only  problem I had?
if so , the service module indent is  not  the exact one in my  program  but still it works ?

[student@mgmvm1 ~]$ cat test.yml
---
- name: intranet services
  hosts: ctlvm.example.com
  become: yes
  tasks:
  - block:
      - name: latest httpd version installed
        yum:
          name: httpd
          state: latest

      - name: latest firewalld version is installed
[student@mgmvm1 ~]$ ansible-playbook --syntax-check test.yml
playbook: test.yml
[student@mgmvm1 ~]$




I  am  assuming that I will follow the below steps of   yaml writing  .  Will it be ok?



write yaml with exact syntax
indent as exactly as given(example) in each module
 validate the yaml format
validate the ansible format.

Kai Stian Olstad

unread,
Nov 13, 2017, 10:37:47 AM11/13/17
to ansible...@googlegroups.com
On Monday, 13 November 2017 01.10.46 CET Veera wrote:
> So , was indent was the only problem I had?
> if so , the service module indent is not the exact one in my program
> but still it works ?

The order of the lines on the same indentation doesn't matter and some directive is optional like the name.
So these three is correct syntax:

- yum:
name: httpd
state: latest

- name: latest httpd version installed
yum:
name: httpd
state: latest

- yum:
name: httpd
state: latest
name: latest httpd version installed


> I am assuming that I will follow the below steps of yaml writing .
> Will it be ok?
>
> write yaml with exact syntax
> indent as exactly as given(example) in each module
> validate the yaml format
> validate the ansible format.

Pretty much, when the syntax is correct you have some leeway in the order the lines in the task is written.
My suggestion is to look at the code of other and you'll see what you think is more readable and stick to that form.


--
Kai Stian Olstad

Veera

unread,
Nov 14, 2017, 11:40:03 AM11/14/17
to Ansible Project
Thanks a Lot.
Will continue to learn  writing yaml .. 



On Sunday, November 12, 2017 at 4:44:30 AM UTC+5:30, Veera wrote:
Reply all
Reply to author
Forward
0 new messages