我如何传递一个变量从一个主机到另一个主机在Ansible剧本



我需要在GCP实例上创建一个比当前数据磁盘大50%的新磁盘。到目前为止我的剧本:

- hosts: testserver
become: yes
become_user: root
tasks:
- name: get disk size
ansible.builtin.shell: /bin/df -l | /bin/grep "/mnt/data" | /usr/bin/awk '{print $3}'
register: disk_space_reg
- debug:
var: disk_space_reg.stdout_lines[0]

- hosts: localhost
connection: local
tasks:
- debug: var=hostvars['testserver']['disk_space_reg.stdout_lines[0]']
when: hostvars['testserver']['disk_space_reg.stdout_lines[0]'] is defined

我想在测试服务器上使用df -l来获取磁盘大小,然后在本地主机上使用google.cloud。Gcp_compute_disk模块用于下一步创建新磁盘。在创建磁盘之前,我想查看原始磁盘大小,但是ansible跳过了第二次调试,结果如下:

PLAY [testserver] *********************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************************
Tuesday 27 July 2021  16:42:55 +0000 (0:00:00.055)       0:00:01.422 **********
ok: [wag-ppc]
TASK [get disk size] *****************************************************************************************************************************************************************************************************************
Tuesday 27 July 2021  16:42:57 +0000 (0:00:01.737)       0:00:03.160 **********
changed: [wag-ppc]
TASK [debug] *************************************************************************************************************************************************************************************************************************
Tuesday 27 July 2021  16:42:58 +0000 (0:00:00.353)       0:00:03.513 **********
ok: [wag-ppc] => {
"disk_space_reg.stdout_lines[0]": "106975872"
}
PLAY [localhost] *********************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************************
Tuesday 27 July 2021  16:42:58 +0000 (0:00:00.068)       0:00:03.582 **********
ok: [localhost]
TASK [debug] *************************************************************************************************************************************************************************************************************************
Tuesday 27 July 2021  16:42:58 +0000 (0:00:00.700)       0:00:04.283 **********
skipping: [localhost]

这里漏掉了什么?

Hostvars:hostvars变量只能访问可见的事实收集的数据。

问题:在你的调试中,你试图访问的数据不是你的事实。

解决方案:将变量赋值给set_fact

Ref:缓存事实

与注册变量一样,事实默认存储在内存中。然而,与注册变量不同,事实可以独立收集并缓存以供重复使用。有了缓存的事实,你可以在配置第二个系统时引用一个系统中的事实,即使Ansible先在第二个系统上执行当前的剧本。

相关内容