3

我对盐中的变量有疑问。我正在尝试使用 if 语句用盐创建更复杂的状态。

示例工作:

{% set old_stable = salt['cmd.run']('cd /home/project_name && ls -t|grep 2|grep -v tar.gz|tail -n +2|head -n 1') %}
{% set time_date = salt['cmd.run']('date +%Y%m%d%H%M') %}
{% if salt['cmd.run']('ls -lt /home/project_name/ | wc -l') == 2 %}
      <STATE>
{% endif  %}

所以,问题是:我可以定义像 {{ old_stable }} 这样的变量来放在文件顶部的“/home/project_name/”吗

在 if 语句中插入变量不起作用

示例(不工作)

{% set project = '/home/project_name' %}
 {% if salt['cmd.run']('ls -lt {{ project }}') | wc -l') == 2 %}
       <STATE>
 {% endif  %}

我的代码是

{% set project = 'test_web_tool' %}

{% if salt['cmd.run']('ls -lt /home/project-user/project 2>/dev/null| wc -l') != "0" %}

output:
 cmd.run:
     - names:
       - echo "Rollback directory {{ project }}"
     - cwd: /root

{% else %}

error_output:
 cmd.run:
     - names:
       - echo "This is the last directory. Cant remove it"
    - cwd: /root

{% endif  %}
4

3 回答 3

6

您可能想使用~运算符连接两个字符串:

{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt ' ~ project ~ ' | wc -l') == 2 %}
    <STATE>
{% endif %}
于 2014-02-26T08:20:08.907 回答
0

首先,您的代码片段是错误的,因为您没有处理单个撇号。注意你少了一个。

{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt {{ project }}') | wc -l') == 2 %}
   <STATE>
{% endif  %}

就单个撇号而言,这是正确的版本:

{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt {{ project }}) | wc -l') == 2 %}
   <STATE>
{% endif  %}

其次,使用连接两个字符串的 ~ 运算符将变量值与命令连接起来。

这是我在 Jinja 2 2.7.2 文档中发现的关于 ~ 运算符的信息:

~
Converts all operands into strings and concatenates them. {{ "Hello " ~ name ~ "!" }} 
would return (assuming name is 'John') Hello John!.

所以这是最终正确的版本:

{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt' ~ project ~ ') | wc -l') == 2 %}
   <STATE>
{% endif  %}
于 2014-04-24T16:56:25.450 回答
0

神社文档

重要的是要知道花括号不是变量的一部分,而是 print 语句的一部分。如果您访问标签内的变量,请不要使用大括号。

因此,要使您不工作的示例正常工作,您需要删除花括号,如下所示:

{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt project') | wc -l') == 2 %}
       <STATE>
{% endif  %}
于 2014-02-18T16:50:05.743 回答