【问题标题】:How to specify "if else" statements in Ansible Jinja2 (.j2) templates?如何在 Ansible Jinja2 (.j2) 模板中指定“if else”语句?
【发布时间】:2021-02-02 07:57:44
【问题描述】:

我正在 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语句?

【问题讨论】:

    标签: bash ansible scripting jinja2


    【解决方案1】:

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

    你应该read the docs。这是一个简单的例子:

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

    【讨论】:

      【解决方案2】:

      你在这里混合概念。

      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
        

      【讨论】:

        猜你喜欢
        • 2014-03-28
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多