如何使用通配符包含多个文件以在 Ansible 中使用环境变量?
How can I use a wildcard to include multiple files for using environment variables in Ansible?
我正在尝试自定义安装 openedx,我有一堆 .yml
文件,其中包含环境变量,路径如下所示
playbooks/roles/<component-name>/defaults/main.yml
然后,虽然 运行 一个安装所有这些组件的剧本,但我正在使用这样的命令
ansible-playbook ./openedx_native.yml -e"@roles/<component-name-1>/defaults/main.yml" -e"@roles/<component-name-2>/defaults/main.yml"
现在我希望能够使用来自所有组件的 main.yml 文件,它们大约有 20-25 个,所以我正在寻找一种使用通配符来包含它们的方法,比如这个
ansible-playbook ./openedx_native.yml -e"@roles/*/defaults/main.yml"
这当然行不通,Ansible 会抛出这样的错误
ERROR! the file_name
'/var/tmp/configuration/playbooks/roles/*/defaults/main.yml' does not
exist, or is not readable
我该如何实现?请帮忙!
一个选项是找到文件和include_vars。
tasks:
- command: "sh -c 'find {{ playbook_dir }}/roles/*/defaults/main.yml'"
register: result
- include_vars:
file: "{{ item }}"
loop: "{{ result.stdout_lines }}"
如果您可以灵活地更改 & re-arrange 环境变量及其在 /group/all.yaml 中的值,例如 environments:
- { name: ‘development’, profile: 'small' }
- { name: ‘staging’, profile: ‘medium’ }
- { name: ‘production’, profile: ‘complex’ }
然后您可以将此变量用于任何任务,例如您要创建环境名称为
的文件夹
- name: create folders for Environment
file:
path: "{{ target }}/{{ item.name }}"
state: directory
mode: 0755
with_items: "{{ environments }}"
我正在尝试自定义安装 openedx,我有一堆 .yml
文件,其中包含环境变量,路径如下所示
playbooks/roles/<component-name>/defaults/main.yml
然后,虽然 运行 一个安装所有这些组件的剧本,但我正在使用这样的命令
ansible-playbook ./openedx_native.yml -e"@roles/<component-name-1>/defaults/main.yml" -e"@roles/<component-name-2>/defaults/main.yml"
现在我希望能够使用来自所有组件的 main.yml 文件,它们大约有 20-25 个,所以我正在寻找一种使用通配符来包含它们的方法,比如这个
ansible-playbook ./openedx_native.yml -e"@roles/*/defaults/main.yml"
这当然行不通,Ansible 会抛出这样的错误
ERROR! the file_name '/var/tmp/configuration/playbooks/roles/*/defaults/main.yml' does not exist, or is not readable
我该如何实现?请帮忙!
一个选项是找到文件和include_vars。
tasks:
- command: "sh -c 'find {{ playbook_dir }}/roles/*/defaults/main.yml'"
register: result
- include_vars:
file: "{{ item }}"
loop: "{{ result.stdout_lines }}"
如果您可以灵活地更改 & re-arrange 环境变量及其在 /group/all.yaml 中的值,例如 environments:
- { name: ‘development’, profile: 'small' }
- { name: ‘staging’, profile: ‘medium’ }
- { name: ‘production’, profile: ‘complex’ }
然后您可以将此变量用于任何任务,例如您要创建环境名称为
的文件夹 - name: create folders for Environment
file:
path: "{{ target }}/{{ item.name }}"
state: directory
mode: 0755
with_items: "{{ environments }}"