2017-04-19 43 views
0

我是新角色,這是我正在做的事情。當將參數傳遞給Ansible角色時,變量是未定義的錯誤

更site.yml

--- 

- hosts: user1_checkserverlist 
    user: user1 
    roles: 
    - { role: speed_manager, DNAME: "/u" } 

- hosts: oracle_checkserverlist 
    user: oracle 
    roles: 
    - { role: speed_manager, DNAME: "/tmp" } 

更speed_manager /默認/ main.yml

DNAME: "" 

更speed_manager /任務/ main.yml

--- 

- include: check.yml diskname={{DNAME}} 

更speed_manager /任務/ check.yml

--- 

    - name: ==== Reading Variable ==== 
    ping: 
    vars: 
     dn: "{{ diskname }}" 

    - name: ====Sync to remote hosts ==== 

    synchronize: src="/web/roles/speed_manager/files/" dest="/tmp/mohtt/" 

    - name: ====Execute shell============= 

    shell: /tmp/mohtt/fixwebserver.sh {{ dn }} chdir=/tmp/mohtt 

這是

ansible-playbook -vvv site.yml -i /web/hostfiles/myhost.txt 

錯誤我是如何執行的角色:

TASK [check_bk_speed_manager : ====Execute shell=============] ***************** 
task path: /web/roles/speed_manager/tasks/check.yml:25 
fatal: [myserver.com]: FAILED! => {"failed": true, "msg": "'dn' is undefined"} 
fatal: [myserver.com]: FAILED! => {"failed": true, "msg": "'dn' is undefined"} 
     to retry, use: --limit @check_bk_speed.retry 

我期待DN是價值 「/ U」

你能指出我在哪裏我錯了,如果這是一個錯誤?

回答

0

您實際上不需要爲您已經定義的變量使用不同的名稱。

你可以改變你的任務使用diskname,您在include任務傳遞:

- name: ====Execute shell============= 
    shell: /tmp/mohtt/fixwebserver.sh {{ diskname }} chdir=/tmp/mohtt 

其實,如果這是整個代碼,你可以用DNAME去:

- name: ====Execute shell============= 
    shell: /tmp/mohtt/fixwebserver.sh {{ DNAME }} chdir=/tmp/mohtt 

並僅包括:

- include: check.yml 
1

在您的示例中,您只能爲「Reading Variable」定義dn
其他任務對dn一無所知。

如果你想dn爲可供後續任務,你可以使用:

- set_fact: 
    dn: "{{ diskname }}" 
0

speed_manager/tasks/check.yml代替dn使用diskname作爲變量 或文件的開頭添加

- set_fact: 
    dn: "{{ diskname }}"