首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Saltstack变量

Saltstack变量
EN

Stack Overflow用户
提问于 2014-02-18 21:24:21
回答 3查看 7.6K关注 0票数 3

我有一个关于salt中的变量的问题。我正在尝试使用if语句来创建更复杂的salt状态。

工作示例:

代码语言:javascript
复制
{% 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/“like变量放在文件的顶部

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

示例(不起作用)

代码语言:javascript
复制
{% set project = '/home/project_name' %}
 {% if salt['cmd.run']('ls -lt {{ project }}') | wc -l') == 2 %}
       <STATE>
 {% endif  %}

我的代码是

代码语言:javascript
复制
{% 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  %}
EN

回答 3

Stack Overflow用户

发布于 2014-02-26 16:20:09

您可能希望使用~ operator来连接两个字符串:

代码语言:javascript
复制
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt ' ~ project ~ ' | wc -l') == 2 %}
    <STATE>
{% endif %}
票数 6
EN

Stack Overflow用户

发布于 2014-02-19 00:50:06

jinja documentation

要知道大括号不是变量的一部分,而是打印语句的一部分,这一点很重要。如果你访问标记内的变量,不要把大括号放在周围。

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

代码语言:javascript
复制
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt project') | wc -l') == 2 %}
       <STATE>
{% endif  %}
票数 0
EN

Stack Overflow用户

发布于 2014-04-25 00:56:25

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

代码语言:javascript
复制
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt {{ project }}') | wc -l') == 2 %}
   <STATE>
{% endif  %}

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

代码语言:javascript
复制
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt {{ project }}) | wc -l') == 2 %}
   <STATE>
{% endif  %}

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

下面是我在Jinja 2 2.7.2文档中找到的~运算符:

代码语言:javascript
复制
~
Converts all operands into strings and concatenates them. {{ "Hello " ~ name ~ "!" }} 
would return (assuming name is 'John') Hello John!.

下面是最终的正确版本:

代码语言:javascript
复制
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt' ~ project ~ ') | wc -l') == 2 %}
   <STATE>
{% endif  %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21855214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档