首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有jinja2模板的不可串接的2个文件

问带有jinja2模板的不可串接的2个文件
EN

Stack Overflow用户
提问于 2018-07-30 05:02:12
回答 1查看 6.4K关注 0票数 4

我正在尝试垂直连接2个文件。

第一个文件是roles/myrolename/files/requirements.dat

代码语言:javascript
复制
numpy
matplotlib
dask

第二个文件是~/myprojects/myprojectname/requirements.txt

代码语言:javascript
复制
django
pywinrm
scipy

下面是我试图组合这两个文件的尝试,基于

这是我正在使用的任务

代码语言:javascript
复制
- 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

代码语言:javascript
复制
{% include 'roles/myrolename/files/requirements.dat' %}
{% include myprojects_path + "/" + my_proj_name + "/" + "requirements.txt" %}

此任务提供错误消息(与来自roles/myrolename/templates/requirements.dat.j2的第二个roles/myrolename/templates/requirements.dat.j2语句相关)

代码语言:javascript
复制
fatal: [my_local_machine]: FAILED! => {"changed": false, 
"msg": "TemplateNotFound: /home/wr/myprojects/myprojectname/requirements.txt"}

这似乎表明Ansible希望/home/wr/myprojects/myprojectname/requirements.txt是一个模板,而不是一个文件。但是,第一个include行不会抛出错误。这让我很困惑。

我是否可以使用include将这2个文件与jinja2模板连接,或者是否有另一种方法将这2个文件连接起来?

编辑1:

我将{# a comment #}添加到requirements.txt的第一行。这是新的~/myprojects/myprojectname/requirements.txt

代码语言:javascript
复制
{# a comment #}
django
pywinrm
scipy

然后,我重新运行了游戏手册ansible-playbook test.yml -vvv。这是输出

代码语言:javascript
复制
<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,并重新运行了剧本。它提供了这个输出

代码语言:javascript
复制
<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"
}

它似乎仍然没有找到模板文件,即使我已经检查它确实存在于我指定的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 06:42:24

通常,包括语句将文件视为模板。另外,示例中的文件requirements.txt通常是一个模板,没有变量,只包含文本。

文件/home/wr/myprojects/myprojectname/requirements.txt存在吗?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51587225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档