微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

WebDriverWait w = new WebDriverWait(driver,5); //will wait 5 seconds most,but if element is visuble in the third second it will wait 3 sec.
w.until(ExpectedConditions.visibilityOfElementLocated(By.id("submit_btn")));
,

你在这里混合了概念。

  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
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。