Ansible:有没有一种方法可以查看文件,根据特定条件分割文件中的内容,然后将该内容复制到另一个文件中?

时间:2020-06-22 21:06:41

标签: ansible

我是Ansible的新手,我一直在尝试读取文件的内容,并根据特定条件对其进行拆分,然后我想复制该内容或返回该内容。

例如,文件sample.txt包含:

userid =“ abc”

我想读取sample.txt中的内容并在有'='符号的地方进行拆分,以便提取凭证(用户ID和abc),然后进一步使用。

我要放下我尝试过的代码片段的草稿。

---

- name: extracting creds

  hosts: servers

  tasks:

    - name: read secure value

      lineinfile:

        path: /home/usr/Desktop/sample.txt

      register: creds

      debug:

        msg: "{{ creds.split('=') }}"

我尝试过的另一个代码:

---

- name: Creds

  hosts: servers

  vars:

    test: /home/usr/Desktop/sample.txt

  tasks:

    - debug:

         msg: "{{lookup('file', test).split('=') }}"

它们都不起作用:(要完成它应该遵循什么?

2 个答案:

答案 0 :(得分:2)

您还可以尝试以下方法从文件中读取内容并将其拆分。

---
- hosts: localhost
  tasks: 
  - name: add host
    add_host:
      hostname: "{{ server1 }}"
      groups: host1

- hosts: host1
  become: yes
  tasks:
  - name: Fetch the sample file
    slurp:
      src: /tmp/sample.txt
    register: var1
  
  - name: extract content for matching pattern
    set_fact:
      sample_var1: "{{ var1['content'] | b64decode | regex_findall ('(.+=.+)', multiline=True, ignorecase=True) }}"

  - debug:
      msg: "{{ item.split('=')[1] }}"
    loop: "{{ sample_var1 }}"

答案 1 :(得分:1)

根据ansible文档,lineinfile就是这样做的。因此,如果您要修改一个文件中的某些内容并写入另一个文件中,那么该模块将无济于事。

此模块确保文件中包含特定行,或替换
现有行,使用反向引用的正则表达式。这是
当您要更改文件中的单行时特别有用

另一方面,

lookup在控制机上工作。从添加的代码来看,可能是您正在尝试在目标主机上使用该文件。因此,查找也无济于事。

如果文件在本地/控制主机上可用,则读取文件,分割内容并复制到控制计算机上的另一个文件,然后使用{{1}将最终文件复制到目标主机}模块。这是一个从控制主机读取文件并使用copy作为分隔符分割每一行的示例。

=

如果文件位于远程/托管主机上,则可以使用以下内容:

- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item.split('=') }}"
      with_lines: "cat /home/usr/Desktop/sample.txt"