ansible使用with_项在HostVar中为特定主机分配shell结果
基本上我想修改现有的hostvars。 我有一个动态生成的主机数组,名为“flash_hosts” 以及一个shell脚本,用于查找每个主机的值。 在下面的非工作代码中,我尝试为每个主机分配脚本的特定结果ansible使用with_项在HostVar中为特定主机分配shell结果,ansible,Ansible,基本上我想修改现有的hostvars。 我有一个动态生成的主机数组,名为“flash_hosts” 以及一个shell脚本,用于查找每个主机的值。 在下面的非工作代码中,我尝试为每个主机分配脚本的特定结果 - name: Assign values to to host var shell: "get-assigned-value.sh {{ item }}" register: "{{ hostvars[item].mac=stdout }}" with_items
- name: Assign values to to host var
shell: "get-assigned-value.sh {{ item }}"
register: "{{ hostvars[item].mac=stdout }}"
with_items: "{{ flash_hosts }}"
如何在ansible中实现此功能?基本上,我知道寄存器不允许我直接将值分配给hostvars,但是如何解决这个问题,因为我需要在主机上迭代?使用
set\u fact
在主机上调试寄存器
结果
- name: Assign values to to host var
shell: "/path/to/get-assigned-value.sh {{ item }}"
register: fileout
with_items:
- host1
- host2
- set_fact:
firstHost: "{{ fileout.results[0] }}"
secondHost: "{{ fileout.results[1] }}"
- debug:
var: firstHost.stdout
- debug:
var: secondHost.stdout
在上面的示例中,firstHost
是第一台主机上运行的shell脚本的全部结果,而firstHost.stdout
给出了相应主机shell脚本结果的输出。可以使用设置事实并将其委托给flash\u主机
但是,要在hostvars
中创建变量,必须在资源清册中声明主机(静态或动态)。主机不必是可访问的。比如说
$ cat hosts
host1
host2
下面的剧本
- hosts: localhost
vars:
flash_hosts: ['host1', 'host2']
tasks:
- name: Assign values to to host var
command: "{{ playbook_dir }}/get-assigned-value.sh {{ item }}"
register: result
loop: "{{ flash_hosts }}"
- set_fact:
mac: "{{ item.stdout }}"
loop: "{{ result.results }}"
delegate_to: "{{ item.item }}"
delegate_facts: true
- debug:
msg: "{{ hostvars[item].mac }}"
loop: "{{ flash_hosts }}"
给予
用剧本
$ cat get-assigned-value.sh
#!/bin/sh
case $1 in
host1)
printf "mac address of host1"
;;
host2)
printf "mac address of host2"
;;
*)
printf "unknown host"
exit 1
;;
esac
exit 0
我明白了,所以我认为我的描述不完整,主机没有运行(它们需要在虚拟主机上刷新)。因此,如果计算机处于活动状态,此解决方案将起作用-对于清单中不存在的主机,没有hostvars
。是的,这更接近于此,但是现在(为了方便和以后使用),我们如何将结果带入每个主机的hostvars(hostvars[项目])-我不喜欢保留全局变量,因为结果实际上应该是每个主机的一部分
ok: [localhost] => (item=host1) =>
msg: mac address of host1
ok: [localhost] => (item=host2) =>
msg: mac address of host2
$ cat get-assigned-value.sh
#!/bin/sh
case $1 in
host1)
printf "mac address of host1"
;;
host2)
printf "mac address of host2"
;;
*)
printf "unknown host"
exit 1
;;
esac
exit 0