Переменная - неопределенная ошибка при передаче аргумента ролям 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 / defaults / main.yml

DNAME: ""

подробнее speed_manager / tasks / main.yml

---

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

подробнее speed_manager / tasks / 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"

Можете ли вы указать, где я ошибаюсь и это ошибка?


person Know Your Tech    schedule 19.04.2017    source источник


Ответы (3)


На самом деле вам не нужно использовать другое имя для переменной, которую вы уже определили.

Вы можете изменить свои задачи на использование 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
person techraf    schedule 19.04.2017

В вашем примере вы определяете dn только для задачи «Чтение переменной».
Другие задачи ничего не знают о dn.

Если вы хотите, чтобы dn был доступен для последующих задач, вы можете использовать:

- set_fact:
    dn: "{{ diskname }}"
person Konstantin Suvorov    schedule 19.04.2017

В speed_manager/tasks/check.yml вместо dn используйте diskname в качестве переменной или в начале файла добавьте

- set_fact:
  dn: "{{ diskname }}"
person Rishabh    schedule 19.04.2017