繁体   English   中英

如何在 Ansible Jinja2 (.j2) 模板中指定“if else”语句?

[英]How to specify “if else” statements in Ansible Jinja2 (.j2) templates?

我在 bash 脚本中运行if语句。 而且我需要在不同的服务器上部署 bash 脚本。 下面是我的 if else 语句。

DIR="/backup/db"
first_time=true
{% if [ -d "$DIR" ]; then %}
  first_time=false
  sudo -u tomcat ln -s /backup/app /opt/tomcat/latest/webapps/msales
  sudo -u tomcat ln -s /backup/store/logs /opt/tomcat/latest/logs
  .....etc
{% fi %}

我正在使用 Ansible 将此script.sh.j2部署到另一台服务器。 但它说

""msg": "AnsibleError: 模板化字符串时出现模板错误:预期的标记 ',',得到了 'string'。"

如何在 j2 模板中使用 if 语句?

如何在 j2 模板中使用 if 语句?

您应该阅读文档 这是一个简单的例子:

{% if my_var == 1 %}
some text here with an actual variable: {{ my_other_var }}
{% else %}
some other text here with nothing
{% endif %}

你在这里混合概念。

  1. Ansible 可以将文件发送到远程服务器。
  2. 目前 Ansible 将文件发送到服务器,Jinja 模板将被解释

在这里,您正在测试一个目录的存在,但是您真的希望在 Ansible 将 bash 脚本发送到远程服务器时对其进行测试吗? 或者您是否希望您的 bash 脚本在每次运行时测试上述文件夹是否存在?

  • 如果答案是:

    当时 Ansible 发布了 bash 脚本

    那么使用 Jinja 模板很合适,但我怀疑这不是你想要的答案。

     first_time=true {% if '/backup/db' is directory %} first_time=false sudo -u tomcat ln -s /backup/app /opt/tomcat/latest/webapps/msales sudo -u tomcat ln -s /backup/store/logs /opt/tomcat/latest/logs #... {% endif %}

    请注意,在这种情况下,如果在将脚本发送到远程主机时该文件夹不存在,则生成的 bash 将如下所示:

     first_time=true
  • 如果答案是:

    每次我们执行脚本

    那么您的条件应该是脚本本身中的 bash 条件。

     DIR="/backup/db" first_time=true if [ -d "$DIR" ]; then first_time=false sudo -u tomcat ln -s /backup/app /opt/tomcat/latest/webapps/msales sudo -u tomcat ln -s /backup/store/logs /opt/tomcat/latest/logs #... fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM