您好,我有一个要求,需要读取特定目录下所有文件的内容,并通过 变量的内容。
- name: Generate logs
hosts: appserver
vars:
logs_dir: /properties
logs: {}
tasks:
- name: Read log config files
set_fact:
log_files: "{{ lookup('fileglob', logs_dir + '/*.properties')|split(',') }}"
- name: check values
debug:
var: log_files
- name: Generate list
set_fact:
logs: "{{ item }}"
with_items: "{{ query('file', log_files[1], wantlist=True) }}"
当我只传递一个文件时它是否有效我想逐个文件传递给查询模块?任何建议,这些都是 yaml 文件,请让我帮助从文件中获取特定标签。
Q:“读取特定目录的所有(yaml)文件并将内容传递给变量。”
A:有更多选择。例如,给定用于测试的树
shell> tree /tmp/properties
/tmp/properties
├── 01.properties
├── 02.properties
└── 03.properties
0 directories, 3 files
shell> cat /tmp/properties/01.properties
var_01: '01'
shell> cat /tmp/properties/02.properties
var_02: '02'
shell> cat /tmp/properties/03.properties
var_03: '03'
- hosts: localhost
vars:
log_dir: /tmp/properties
log_files_glob: "{{ log_dir }}/*.properties"
log_files: "{{ query('fileglob', log_files_glob) }}"
log_files_dict: "{{ lookup('vars', *q('varnames', 'log_file_\\d+'))|combine }}"
tasks:
- block:
- debug:
var: log_files
- include_vars:
file: "{{ item }}"
name: "log_file_{{ ansible_loop.index }}"
loop: "{{ log_files }}"
loop_control:
extended: true
- debug:
var: log_files_dict
run_once: true
给(删节)
log_files_dict:
var_01: '01'
var_02: '02'
var_03: '03'
- include_vars: "{{ item }}"
loop: "{{ log_files }}"
- debug:
msg: |
var_01: {{ var_01 }}
var_02: {{ var_02 }}
var_03: {{ var_03 }}
给予
msg: |-
var_01: 01
var_02: 02
var_03: 03
- assemble:
src: "{{ log_dir }}"
regexp: '.*\.properties'
dest: /tmp/properties.yml
给文件
shell> cat /tmp/properties.yml
var_01: '01'
var_02: '02'
var_03: '03'
根据需要包含此文件。
完整的测试剧本示例
- hosts: localhost
vars:
log_dir: /tmp/properties
tasks:
- block:
- assemble:
src: "{{ log_dir }}"
regexp: '.*\.properties'
dest: /tmp/properties.yml
- include_vars:
file: /tmp/properties.yml
name: log_files_dict
- debug:
var: log_files_dict
run_once: true
• Ansible:循环 2 个 json 并根据某些条件执行任务
• 如何为所有用户共享 ansible-galaxy 集合模块?
• 如何为所有用户共享 ansible-galaxy 集合模块?
• 循环遍历 jinja 中 ansible 主机组中主机的 host_vars
• 使用 Vagrant + Ansible 设置 Windows 虚拟机。将 Ansible 连接到 VM 时出现问题
• 错误!找不到角色 Users/xxxx/ansible/roles/basic_install'
• 变量在ansible playbook的处理程序中不起作用
• 如何设置 Ansible 以使用操作系统上的任何包管理器?