Я использую Ansible 2.4 для создания playbook. Но у меня возникла ошибка server not defined
в одной из моих задач, и я не знаю, как решить эту проблему.
У меня есть следующая задача в playbook.yml
, которая запускает сервер в цифровом океане. Я создаю переменную с именем server
, содержащую ответ.
- hosts: localhost
tasks:
- name: Spinning up a new droplet
digital_ocean:
state: present
command: droplet
name: "{{ domain }}"
ssh_key_ids:
- "{{ ssh_key_id }}"
size_id: 512mb
region_id: lon1
image_id: debian-9-x64
api_token: "{{ api_token }}"
backups_enabled: no
register: server
Если я попытаюсь получить доступ к server
в playbook, он будет работать нормально. Но если я попытаюсь получить доступ к переменной в задачах, которые я включаю, она сообщает, что server
не определено. Я использую роли для разделения своих задач/обработчиков и т. д.
Структура каталогов:
/
- group_vars
- all.yml
- roles
- node-servers
- tasks
- main.yml
- haproxy.yml
...
В playbook.yml
у меня есть следующее:
- hosts: node-servers
remote_user: root
gather_facts: false
roles:
- node-servers
handlers:
- name: Restarting haproxy
service:
name: haproxy
state: restarted
В roles/node-servers/tasks/main.yml
у меня есть следующее:
---
- debug:
var: "{{server}}"
- name: Creating unprivileged user
user:
name: "{{ user }}"
state: present
password: "{{ user_pass }}"
- name: Updating packages
shell: apt-get update
- name: Installing Required packages
apt: name={{ item }} state=latest
with_items:
- build-essential
- iptables-persistent
- apt-transport-https
- python-openssl
- include: nodejs.yml
- include: haproxy.yml
- include: letsencrypt-dns.yml
- include: deploy.yml
- include: daemonize-nodeapp.yml
servers
возвращается как неопределенное.
Как я могу получить доступ к server
из roles/node-servers/tasks/main.yml
?
hostvars
в задачах? Например, вhaproxy.yml
? Или мне нужно определить переменную вnode-servers
? Я получаюhostvars
undefined при отладке вhaproxy.yml
. 27.06.2017hostvars
доступен везде в любое время. НО его содержимое зависит от порядка задач: вы не можете получить доступ кhostvars.localhost.foo
до установки var/factfoo
наlocalhost
. 27.06.2017var={{ hostvars }}
вместоvar=hostvars
. 27.06.2017