2017-04-19 6 views
0

저는 여기서 내가 할 수있는 역할에 익숙하지 않습니다.인수가 확실한 역할에 전달 될 때 변수가 정의되지 않았습니다.

더 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

,210

내가

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

이미 정의한 변수에 다른 이름을 사용할 필요는 없습니다.

당신은 당신이 include 작업에서 통과 diskname을 사용하도록 작업을 변경할 수 있습니다

이 전체 코드의 경우

- 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

예제에서 "독서 변수"에 대해서만 dn을 정의합니다.
다른 작업은 dn에 대해 모릅니다. 후속 작업에 사용할 수 dn를 원하는 경우에

, 당신은 사용할 수 있습니다

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

대신 변수 이나 파일의 시작 부분에서 dn 사용 disknamespeed_manager/tasks/check.yml에서 추가

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