我需要在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先在第二个系统上执行当前的剧本。