基本上,我想修改现有的hostvar。 我有一个动态生成的名为“ 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 }}"
我如何才能使这项工作顺利进行?基本上我知道寄存器不允许我直接将值分配给hostvars,但是当我需要遍历主机时,如何解决呢?
答案 0 :(得分:0)
使用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
是在第一台主机上运行的Shell脚本的全部结果,而firstHost.stdout
给出了相应主机Shell脚本结果的输出。
答案 1 :(得分:0)
<{> set_facts 和 delegate_to delegate_facts和mapmyindia-angular-sample-webSDK-REST都是可能的。
但是,要在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