从 /etc/hosts 中提取主机的剧本

从 /etc/hosts 中提取主机的剧本

我需要帮助从 /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 }}"

相关内容