我需要帮助从 /etc/hosts 文件中提取主机信息并将该内容导出到预定义文件。我为此任务创建了一个 Ansible 的 Playbook,但内容未写入输出文件中。你们能帮帮我吗?
遵循剧本:
- hosts: sigt-temp
become: yes
become_user: root
gather_facts: yes
tasks:
- name: Collecting Data
shell:
cmd: grep -P -i '^10\.129\.' /etc/hosts
register: etc_hosts
- name: Collecting Data
debug: var=ansible_hostname,ansible_default_ipv4['address'],etc_hosts
- name: Output info
local_action: lineinfile path=./etc-hosts.txt line={{ansible_hostname}};{{ansible_default_ipv4['address']}};{{etc_hosts}}; create=yes
- name: Validation
debug: var=etc_hosts.stdout_lines
答案1
您唯一的错误是您{{etc_hosts}}
在lineinfile
操作中使用了将有关 hosts 文件的完整信息转储到 .txt 文件中的操作。{{etc_hosts.stdout_lines}}
如果您确定只返回一行,则应该这样做。
如果主机文件可能包含多个与正则表达式匹配的条目,则应该循环遍历结果。
- name: Output info
local_action: lineinfile path=./etc-hosts.txt line={{ansible_hostname}};{{ansible_default_ipv4['address']}};{{item}}; create=yes
loop: "{{ etc_hosts.stdout_lines }}"