2014-12-03 69 views
0

此代碼在1.7中正常工作。我更新到1.8,現在我得到一個語法錯誤。任務中的Ansible語法錯誤

這是nagios_iptables.yml代碼

--- 
- name: get iptables rules 
    shell: iptables -L 
    register: iptablesrules 
    always_run: yes 
    changed_when: false 

- name: add nagios iptables port 5666 
    command: /sbin/iptables -I INPUT 1 -p tcp --dport 5666 --source 192.168.1.59 -j ACCEPT -m comment --comment "nagios" 
    when: iptablesrules.stdout.find("nagios") == -1 

- name: add nagios iptables port 5666 localhost 
    command:/sbin/iptables -I INPUT 1 -p tcp --dport 5666 --source 127.0.0.1 -j ACCEPT -m comment --comment "nagios" 
    when: iptablesrules.stdout.find("nagios") == -1 

- name: save iptables 
    command: service iptables save 

- name: restart iptables 
    service: name=iptables state=restarted 

這是我怎麼稱呼它:

- include: tasks/nagios_iptables.yml 

這是語法錯誤,我得到:

ERROR: Syntax Error while loading YAML script,

.../playbooks/tasks/nagios_iptables.yml

Note: The error may actually appear before this position: line 14, column 3

command:/sbin/iptables -I INPUT 1 -p tcp --dport 5666 --source 127.0.0.1 -j ACCEPT -m comment --comment "nagios" when: iptablesrules.stdout.find("nagios") == -1

我不知道問題是什麼,希望它是明顯的。

回答

0

那麼,這原來是明顯的。

然而,這是相當陰險。

的問題是在這條線上缺少空間:

command:/sbin/iptables -I INPUT 1 -p tcp --dport 5666 --source 127.0.0.1 -j ACCEPT -m comment --comment "nagios" 

缺乏command:/sbin/iptables之間的空間引起的問題。

這似乎是1.8的新限制,或者我可能會瘋了。

+1

根據維基百科,YAML格式*需要*冒號後的空格:「鍵與冒號+空格分隔。」所以如果它以前有效,那就是錯誤,而不是現在的表現。資料來源:http://en.wikipedia.org/wiki/YAML#Associative_arrays – fukawi2 2014-12-04 03:12:43

+0

看起來像一個「我們修正了錯誤」,這就是爲什麼它不再工作,情況。很公平。 – jgritty 2014-12-04 08:06:51