ansible - Ansible 使用 jinja2 模板连接 2 个文件
问题描述
我正在尝试垂直连接 2 个文件
第一个文件是roles/myrolename/files/requirements.dat
numpy
matplotlib
dask
第二个文件是~/myprojects/myprojectname/requirements.txt
django
pywinrm
scipy
这是我尝试结合这两个文件,基于
这是我正在使用的任务
- name: Play to combine 2 files
hosts: localhost
connection: local
vars:
myprojects_path: myprojects
my_proj_name: myprojectname
tasks:
- name: Concatenate 2 files
template:
src: "roles/myrolename/templates/requirements.dat.j2"
dest: "{{ myprojects_path }}/{{ my_proj_name }}/requirements.dat"
这是roles/myrolename/templates/requirements.dat.j2
{% include 'roles/myrolename/files/requirements.dat' %}
{% include myprojects_path + "/" + my_proj_name + "/" + "requirements.txt" %}
此任务给出错误消息(与来自的第二条include
语句有关roles/myrolename/templates/requirements.dat.j2
)
fatal: [my_local_machine]: FAILED! => {"changed": false,
"msg": "TemplateNotFound: /home/wr/myprojects/myprojectname/requirements.txt"}
这似乎表明 Ansible 期望这/home/wr/myprojects/myprojectname/requirements.txt
是一个模板而不是文件。但是,第一include
行不会引发错误。这让我很困惑。
有没有一种方法可以include
将这两个文件与jinja2
模板连接起来,还是有另一种方法来连接这两个文件?
编辑1:
我添加{# a comment #}
到requirements.txt
. 这是新的~/myprojects/myprojectname/requirements.txt
{# a comment #}
django
pywinrm
scipy
然后,我重新运行了剧本ansible-playbook test.yml -vvv
。这是输出
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: wr
<127.0.0.1> EXEC /bin/sh -c 'echo ~wr && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/wr/.ansible/tmp/ansible-tmp-1532962816.77-184726406959930 `" && echo ansible-tmp-1532962816.77-184726406959930="` echo /home/wr/.ansible/tmp/ansible-tmp-1532962816.77-184726406959930 `" ) && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/wr/.ansible/tmp/ansible-tmp-1532962816.77-184726406959930/ > /dev/null 2>&1 && sleep 0'
fatal: [wr-box]: FAILED! => {
"changed": false,
"msg": "TemplateNotFound: /home/wr/myprojects/myprojectname/requirements.txt"
}
编辑2:
我试图通过重命名文件来要求 Ansible 将上述内容requirements.txt
({# a comment #}
第一行)视为模板。jinja2
我将文件重命名requirements.txt
为requirements.txt.j2
并重新运行剧本。它给出了这个输出
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: wr
<127.0.0.1> EXEC /bin/sh -c 'echo ~wr && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/wr/.ansible/tmp/ansible-tmp-1532963056.03-76693523230507 `" && echo ansible-tmp-1532963056.03-76693523230507="` echo /home/wr/.ansible/tmp/ansible-tmp-1532963056.03-76693523230507 `" ) && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/wr/.ansible/tmp/ansible-tmp-1532963056.03-76693523230507/ > /dev/null 2>&1 && sleep 0'
fatal: [wr-box]: FAILED! => {
"changed": false,
"msg": "TemplateNotFound: /home/wr/myprojects/myprojectname/requirements.txt.j2"
}
它似乎仍然找不到模板文件,即使我已经检查过它确实存在于我指定的位置。
解决方案
通常,include语句将文件视为模板。此外,您示例中的文件 requirements.txt 通常是一个模板,没有变量,只有文本。
文件/home/wr/myprojects/myprojectname/requirements.txt是否存在?
推荐阅读
- c++ - 在 Boost 序列化中展平嵌套命名值对
- javascript - 如何在找到一组 id 的 api 中等待循环完成?SailsJs
- vue.js - 计算函数运行而不调用它
- android - 在 Manifest [Android] 中找不到权限
- android - 从改造中调用 API 时出现未知错误
- wordpress - WordPress last_modified 改变了什么
- svn - Tortoise SVN 无法与 Netbeans 11 一起使用
- html - HTML5 视频 webOS
- javascript - 将 PNG 图像从后端保存到前端到本地 Angular 项目文件夹
- python - Python:从与其他元素同名的自闭合元素中提取属性