ansible에서는 whitespace와 indent가 중요하다. 


하나의 indent는 2개의 whitespace 이고 탭은 허용하지 않는다.  만약 이 rule이 어긋나면 다음과 같은 에러가 발생한다. 


$ ansible-playbook -i hosts playbook.yml 

ERROR: Syntax Error while loading YAML script, playbook.yml

Note: The error may actually appear before this position: line 5, column 2


  tasks:

 - name : test

 ^



$ ansible-playbook -i hosts playbook.yml 

ERROR: Syntax Error while loading YAML script, playbook.yml

Note: The error may actually appear before this position: line 6, column 1


  - name : test

action:  command ls -al /home

^



 ansible-playbook -i hosts playbook.yml 

ERROR: Syntax Error while loading YAML script, playbook.yml

Note: The error may actually appear before this position: line 6, column 5


   - name: test

    action:  command ls -al /home

    ^




때로는 vars, tasks, handlers 등을 사용하면서 공통화할 때도 있는데. whitespace를 잘 못 사용하면 정확히 어디서 문제가 발생했는지 찾기 힘들 수 있으니. whitespace와 indent는 잘 유념해야 한다. 


TASK: [common | install packages] ********************************************* 

failed: [192.168.1.50] => (item=zip - git - maven - ant - mysql-server) => {"failed": true, "item": "zip - git - maven - ant - mysql-server"}

msg: this module requires key=value arguments (['pkg=zip', '-', 'git', '-', 'maven', '-', 'ant', '-', 'mysql-server', 'state=latest', 'update_cache=yes'])


FATAL: all hosts have already failed -- aborting




참고로 task 급의 token에서 ':'를 사용할 때는 편하게 사용가능하다. 아래의 예 모두 잘 동작한다. 


예)

  - name  :   1. install Apache

    apt: name=apache2 state=present


  - name: 1. install Apache

    apt: name=apache2 state=present

Posted by '김용환'
,