盐栈变量

2024-05-14 06:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个关于盐中变量的问题。 我试图使用if语句创建更复杂的salt状态。

工作示例:

{% 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  %}

所以,问题是: 我可以定义“/home/project_name/”之类的变量,比如{{old_stable},放在文件的顶部吗

在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  %}

Tags: runnameltprojectcmd示例homeif
3条回答

jinja documentation

It’s important to know that the curly braces are not part of the variable but the print statement. If you access variables inside tags don’t put the braces around.

因此,要使不起作用的示例起作用,您需要删除大括号,如下所示:

{% 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  %}

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

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

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

以下是我在Jinja 2 2.7.2文档中发现的~operator:

~
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  %}

您可能希望使用^{} operator连接两个字符串:

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

相关问题 更多 >

    热门问题