我是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('=') }}"
它们都不起作用:(要完成它应该遵循什么?
答案 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"