基本上,我想修改一个现有的hostvars。我有一个动态生成的名为"flash_hosts“的主机数组
flash_hosts = ['host1', 'host2'] 以及查找每个主机的值的shell脚本。在下面的非工作代码中,我尝试将脚本的特定结果分配给每个主机
- name: Assign values to to host var
shell: "get-assigned-value.sh {{ item }}"
register: "{{ hostvars[item].mac=stdout }}"
with_items: "{{ flash_hosts }}"我怎样才能在ansible中工作呢?基本上我知道register不允许我直接给hostvar赋值,但是这个问题怎么解决呢,因为我需要遍历主机?
发布于 2019-12-25 22:13:00
使用set_fact在主机上调试register结果。
- 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是在第一台主机上运行的外壳脚本的全部结果,而firstHost.stdout给出了相应主机外壳脚本结果的输出。
发布于 2019-12-25 22:14:09
这是可能的set_facts和delegate_to的flash_hosts与。
但是,要在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 }}"给出
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 0https://stackoverflow.com/questions/59476689
复制相似问题