我正在使用Ansible 2.4来创建一个剧本。但是,我在其中一项任务中遇到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
,它将正常工作。但是,如果我尝试在我包含的任务中访问变量,则报告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
?
答案 0 :(得分:1)
使用register
时,仅为当前主机(在您的情况下为localhost
)注册数据。这样,您可以在每个主机上拥有不同的值。
如果您想访问其他主机(您的案例中为node-servers
组)的变量,则必须使用hostvars
:
{{ hostvars.localhost.server }}
Magic Variables, and How To Access Information About Other Hosts
答案 1 :(得分:0)
在这种特殊情况下,您希望将新创建的服务器添加到清单中。您可以使用add_host
模块执行此操作(请参阅documentation)。
- hosts: localhost
tasks:
- name: Spinning up a new droplet
digital_ocean:
state: present
# ...
register: result
- add_host:
name: "{{ result.droplet.ip_address }}"
groups: node-servers
droplet_details: "{{ result.droplet }}"
现在,您可以通过引用node-servers
组来配置服务器。
- hosts: node-servers
remote_user: root
gather_facts: false
roles:
- node-servers
在您的角色中访问您的Droplet详细信息:
---
- debug:
var: "{{ droplet_details }}"