ansible - 更改 Ansible 查找文件的位置
问题描述
我的目录结构看起来像这样
playbooks/
Foo.yml
tasks/
Task1.yml
Task2.yml
AllTasks.yml
剧本Foo.yml
有一个- import_tasks: tasks/AllTasks.yml
任务。AllTasks.yml
有
- import_tasks: tasks/Task1.yml
- import_tasks: tasks/Task2.yml
当我执行 playbook 时,这工作得很好Foo.yml
。但是当我执行位于其他地方的剧本时(所以不是直接在这个playbooks
目录中),导入不再起作用。这样做的原因是它们相对于导入的 playbook 的位置导入。
使用其他模块的任务也会发生同样的情况,例如复制。他们寻找与剧本位置相关的文件。
有没有办法让我的任务适用于位于不同目录中的剧本?
我知道有一个playbook_dir
变量很遗憾我无法覆盖。我也遇到过inventory_dir
,但无论出于何种原因,没有定义一个。
一种引用与引用文件相关的文件的方法会起作用。例子:
- import_tasks: "{{ current_dir }}/Task1.yml"
- import_tasks: "{{ current_dir }}/Task2.yml"
与该项目的清单文件相关的东西也可以工作。例子:
- import_tasks: "{{ inventory_dir }}/playbooks/tasks/Task1.yml"
- import_tasks: "{{ inventory_dir }}/playbooks/tasks/Task2.yml"
后一种方法将迫使我在整个项目中添加这些路径。
解决方案
问:“很遗憾我无法覆盖 playbook_dir 变量”
A:变量playbook_dir可以按预期工作(但在这种情况下不需要它;请参阅该行下的第二部分)
shell> cd /scratch/tmp
shell> cat Foo.yml
- hosts: localhost
tasks:
- import_tasks: "{{ playbook_dir }}/tasks/AllTasks.yml"
shell> cat tasks/AllTasks.yml
- import_tasks: "{{ playbook_dir }}/tasks/Task1.yml"
- import_tasks: "{{ playbook_dir }}/tasks/Task2.yml"
shell> cat tasks/Task1.yml
- debug:
msg: Task1.yml
shell> cat tasks/Task2.yml
- debug:
msg: Task2.yml
shell> cd /tmp
shell> pwd
/tmp
shell> ansible-playbook /scratch/tmp/Foo.yml
PLAY [localhost] ****
TASK [debug] ****
ok: [localhost] => {
"msg": "Task1.yml"
}
TASK [debug] ****
ok: [localhost] => {
"msg": "Task2.yml"
}
PLAY RECAP ****
localhost: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
问:“更改 Ansible 查找文件的位置”
答:无需更改。默认值工作正常。请参阅Ansible 中的搜索路径。下面的变量ansible_search_path的值解释了路径为何起作用
shell> cat Foo.yml
- hosts: localhost
tasks:
- debug:
var: ansible_search_path
- import_tasks: tasks/AllTasks.yml
shell> cat tasks/AllTasks.yml
- debug:
var: ansible_search_path
- import_tasks: Task1.yml
- import_tasks: Task2.yml
shell> cat tasks/Task1.yml
- debug:
msg: Task1.yml
shell> cat tasks/Task2.yml
- debug:
msg: Task2.yml
给
"ansible_search_path": [
"/scratch/tmp"
]
"ansible_search_path": [
"/scratch/tmp/tasks",
"/scratch/tmp"
]
"msg": "Task1.yml"
"msg": "Task2.yml"
推荐阅读
- php - 具有基本身份验证的用户的 Laravel 速率限制 api
- jmeter - Jmeter 结果不一致,取决于正在运行的机器
- flutter - 如何在颤动中改变 SfSlider 的高度和宽度?
- python - folium 地图上 CircleMarkers 的数量有限制吗?
- docker - 从 Dockerfile 运行时在 Docker 中找不到命令
- jaxb - cxf-codegen-plugin:3.4.2:wsdl2java 不生成正确的 Javadoc
- php - Laravel HTTP 客户端发布响应保存文件
- libreoffice - CALC BASIC 宏 - 求解线性方程组矩阵
- sql - 在 id 上为第一行可用的 SQL BigQuery 加入两个表
- css - 如何自定义 CSS Dark 叠加层的渐变