如何检查文件中的目录列表,但有些条目有多个目录,目录之间用逗号分隔

  • 本文关键字:之间 分隔 文件 何检查 列表 ansible
  • 更新时间 :
  • 英文 :


我有一个文本文件,看起来像这样:

hints_directory: /opt/cassandra/hints
data_file_directory: /opt/cassandra/data,/opt/cassandra/data2
commitlog_directory: /opt/cassandra/commitlog
cdc_raw_directory: /opt/cassandra/cdc_raw
saved_caches_directory: /opt/cassandra/saved_caches
tmp_directory: /opt/cassandra/tmp
jna_directory: /opt/cassandra/jna
dump_directory: /opt/cassandra/dump

我想读取该文件,并使用ansible检查每个目录是否存在。棘手的部分出现在第二行,这一行包含两个目录路径。我怎样才能像下面的例子那样读取文件的每一行,并检查每个目录是否存在呢?

这是我到目前为止所得到的,但是由于单行有多个路径值,它在data_file_目录上出错了。我试过拆分行条目,但这不能解决问题。

想法吗?

- name: Ensure the directories exist
file:
path: "{{item.split(':')[1].split(' ')[1].split(',')}}"
state: directory
with_lines: cat <<pathtofile>>/directories.txt

将文件中的变量读入字典并将字符串转换为列表,例如

- include_vars:
file: directories.txt
name: dirs_str
- set_fact:
dirs_list: "{{ dict(_keys|zip(_vals)) }}"
vars:
_keys: "{{ dirs_str.keys()|list }}"
_vals: "{{ dirs_str.values()|map('split', ',')|list }}"

dirs_list:
cdc_raw_directory:
- /opt/cassandra/cdc_raw
commitlog_directory:
- /opt/cassandra/commitlog
data_file_directory:
- /opt/cassandra/data
- /opt/cassandra/data2
dump_directory:
- /opt/cassandra/dump
hints_directory:
- /opt/cassandra/hints
jna_directory:
- /opt/cassandra/jna
saved_caches_directory:
- /opt/cassandra/saved_caches
tmp_directory:
- /opt/cassandra/tmp

选择并平坦化值,例如

- set_fact:
allDirectories: "{{ dirs_list.values()|flatten }}"

allDirectories:
- /opt/cassandra/hints
- /opt/cassandra/data
- /opt/cassandra/data2
- /opt/cassandra/commitlog
- /opt/cassandra/cdc_raw
- /opt/cassandra/saved_caches
- /opt/cassandra/tmp
- /opt/cassandra/jna
- /opt/cassandra/dump

,或者直接在循环

中使用表达式
- name: Ensure the directories exist
file:
path: "{{ item }}"
state: directory
loop: "{{ dirs_list.values()|flatten }}"

对于其他可能有类似练习的人,我已经想出了如何做到这一点:

- set_fact:
allDirectories: []
- set_fact:
allDirectories: "{{ item.split(':')[1].split(' ')[1].split(',')  + allDirectories}}"
with_lines: cat <<pathtofile>>/directories.txt
- name: Ensure the directories exist
file:
path: "{{item}}"
state: directory
with_items: "{{allDirectories}}"

相关内容

  • 没有找到相关文章

最新更新