Ansible 无法访问任务中的寄存器变量
我正在使用Ansible 2.4创建剧本。但是,我的一个任务中遇到了服务器未定义错误,我不确定如何解决该问题 我在playbook.yml中有一个任务,在digital ocean上启动一个服务器。我创建了一个名为server的变量,其中包含响应Ansible 无法访问任务中的寄存器变量,ansible,ansible-2.x,Ansible,Ansible 2.x,我正在使用Ansible 2.4创建剧本。但是,我的一个任务中遇到了服务器未定义错误,我不确定如何解决该问题 我在playbook.yml中有一个任务,在digital ocean上启动一个服务器。我创建了一个名为server的变量,其中包含响应 - hosts: localhost tasks: - name: Spinning up a new droplet digital_ocean: state: present command: droplet
- 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
如果我尝试访问playbook中的服务器,它将正常工作。但是,如果我试图访问包含它的任务中的变量,则报告服务器是未定义的。我使用角色来分隔我的任务/处理者等
目录结构为:
/
- 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
---
- 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
在roles/node servers/tasks/main.yml中,我有以下内容:
- hosts: node-servers
remote_user: root
gather_facts: false
roles:
- node-servers
handlers:
- name: Restarting haproxy
service:
name: haproxy
state: restarted
---
- 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
服务器返回为未定义
如何从roles/node servers/tasks/main.yml中访问服务器?使用register时,在您的情况下,仅为当前主机localhost注册数据。这样,您可以在每个主机上具有不同的值
如果要访问本例中组节点服务器的另一台主机的变量,必须使用hostvars:
在这种情况下,您需要将新创建的服务器添加到您的资源清册中。您可以使用add_主机模块执行此操作,请参见 现在,您可以通过引用节点服务器组来配置服务器 并在您的角色中访问您的液滴详细信息:
---
- debug:
var: "{{ droplet_details }}"
hostvars变量是否在任务中自动可用?例如在haproxy.yml中?还是必须在节点服务器中定义变量?在haproxy.yml中调试时,我得到了未定义的hostvars。hostvars在任何地方都可以随时使用。但它的内容取决于任务的顺序:在localhost.Works上设置var/fact foo之前,您不能访问hostvars.localhost.foo。我在做var={{hostvars}}而不是var=hostvars。嗨,埃里克,我已经做过了。我没有发布整个剧本。上面的答案解决了这个问题。好的,那么您想访问节点服务器角色中的digital_ocean模块返回的液滴详细信息,对吗?查看我的编辑,我相应地更新了答案。
---
- debug:
var: "{{ droplet_details }}"