如何通过本地主机上的 运行 剧本获取 inventory_hostanme 和 ansible_ssh_hosts 信息
how to get inventory_hostanme and ansible_ssh_hosts info by running playbook on localhost
我想将清单文件中特定组下的主机名和 ssh_host 写入本地主机中的文件。
我试过这个:
my_role
set_fact:
hosts: "{{ hosts_list|default({}) | combine( {inventory_hostname: ansible_ssh_host} ) }}"
when: "'my_group' in group_names"
剧本
become: no
gather_facts: no
roles:
- my_role
但现在如果我尝试将其写入另一个任务中的文件,它将在清单文件中为主机创建一个文件。
你能否建议是否有更好的方法来创建一个包含字典的文件,其中 inventory_hostname 和 ansible_ssh_host 分别作为键和值,通过本地主机上的 运行 剧本。
一个选项是使用 lineinfile and delegate_to 本地主机。
- hosts: test_01
tasks:
- set_fact:
my_inventory_hostname: "{{ ansible_host }}"
- tempfile:
delegate_to: localhost
register: result
- lineinfile:
path: "{{ result.path }}"
line: "inventory_hostname: {{ my_inventory_hostname }}"
delegate_to: localhost
- debug:
msg: "inventory_hostname: {{ ansible_host }}
stored in {{ result.path }}"
注意:不需要引用条件。默认展开条件。
when: my_group in group_names
非常感谢您的回答@Vladimir Botka
我提出了另一个要求,将属于某个组的主机写入文件,下面的代码可以帮助解决这个问题(添加到@Vladimir 的解决方案)。
- hosts: all
become: no
gather_facts: no
tasks:
- set_fact:
my_inventory_hostname: "{{ ansible_host }}"
- lineinfile:
path: temp/hosts
line: "inventory_hostname: {{ my_inventory_hostname }}"
when: inventory_hostname in groups['my_group']
delegate_to: localhost
- debug:
msg: "inventory_hostname: {{ ansible_host }}"
我想将清单文件中特定组下的主机名和 ssh_host 写入本地主机中的文件。 我试过这个:
my_role
set_fact:
hosts: "{{ hosts_list|default({}) | combine( {inventory_hostname: ansible_ssh_host} ) }}"
when: "'my_group' in group_names"
剧本
become: no
gather_facts: no
roles:
- my_role
但现在如果我尝试将其写入另一个任务中的文件,它将在清单文件中为主机创建一个文件。
你能否建议是否有更好的方法来创建一个包含字典的文件,其中 inventory_hostname 和 ansible_ssh_host 分别作为键和值,通过本地主机上的 运行 剧本。
一个选项是使用 lineinfile and delegate_to 本地主机。
- hosts: test_01
tasks:
- set_fact:
my_inventory_hostname: "{{ ansible_host }}"
- tempfile:
delegate_to: localhost
register: result
- lineinfile:
path: "{{ result.path }}"
line: "inventory_hostname: {{ my_inventory_hostname }}"
delegate_to: localhost
- debug:
msg: "inventory_hostname: {{ ansible_host }}
stored in {{ result.path }}"
注意:不需要引用条件。默认展开条件。
when: my_group in group_names
非常感谢您的回答@Vladimir Botka
我提出了另一个要求,将属于某个组的主机写入文件,下面的代码可以帮助解决这个问题(添加到@Vladimir 的解决方案)。
- hosts: all
become: no
gather_facts: no
tasks:
- set_fact:
my_inventory_hostname: "{{ ansible_host }}"
- lineinfile:
path: temp/hosts
line: "inventory_hostname: {{ my_inventory_hostname }}"
when: inventory_hostname in groups['my_group']
delegate_to: localhost
- debug:
msg: "inventory_hostname: {{ ansible_host }}"