先转载下jinja模板中使用变量的方法,后文主要讲解pillar的变量使用方法

一、jinja模版的使用方法:

1、file状态使用template参数

- template:jinja

2、模版文件里面变量使用{{名称}},例如{{PORT}}

变量使用Grains:{{ grains['fqdn_ip4'] }}

变量使用执行模块:{{ salt['network.hw_addr']('eth0') }}

变量使用Pillar:{{ pillar['apache']['PORT'] }}

3、变量列表

- defaults:
PORT:8080

pillar的变量使用方法

二、master环境情况:

[root@master ~]# grep -Ev "#|^$" /etc/salt/master
interface: 0.0.0.0
file_roots:
base:
- /srv/salt/base
prod:
- /srv/salt/prod
pillar_roots:
base:
- /srv/pillar/base
prod:
- /srv/pillar/prod

自定义pillar数据

[root@master ~]# cat /srv/pillar/base/top.sls
base:
'*':
- t
[root@master ~]# cat /srv/pillar/base/t.sls
a1: a11
b1:
b2: b22
b3:
b33: b333
b333: b3333
c1:
- c11
- c111

检验pillar

[root@master ~]# salt host102 pillar.items
host102:
----------
a1:
a11
b1:
----------
b2:
b22
b3:
----------
b33:
b333
b333:
b3333
c1:
- c11
- c111 

要同步的文件one

[root@master ~]# cat /srv/salt/base/init/one
a1:{{ a1 }}
b2:{{ b2 }}
b33:{{ b33 }}
b333:{{ b333 }}
c1: {{ c1 }}
c2: {{ c2 }}

  

获取方式:
1.{{ pillar['name'] }}

[root@master ~]# cat /srv/salt/base/init/one.sls
/tmp/one:
file.managed:
- source: salt://init/one
- template: jinja
- defaults:
a1: {{ pillar['a1'] }}
b2: {{ pillar['b1']['b2'] }}
b33: {{ pillar['b1']['b3']['b33'] }}
b333: {{ pillar['b1']['b3']['b333'] }}
c1: {{ pillar['c1'][0] }}
c2: {{ pillar['c1'][1] }}

  

2.{{ pillar.get() }} or {{ salt['pillar.get']() }}

官方说明

https://docs.saltstack.com/en/latest/topics/pillar/

个人实验及理解:{{ pillar.get() }}只适用于一级变量,{{ salt['pillar.get']() }}可以适用多级变量

It should be noted that within templating, the pillar variable is just a dictionary.
This means that calling pillar.get() inside of a template will just use the default dictionary .get() function
which does not include the extra : delimiter functionality. It must be called using the above syntax
(salt['pillar.get']('foo:bar:baz', 'qux')) to get the salt function, instead of the default dictionary behavior.

例1:说明{{ pillar.get() }}只适用于一级变量

[root@master ~]# cat /srv/salt/base/init/one.sls
/tmp/one:
file.managed:
- source: salt://init/one
- template: jinja
- defaults:
a1: {{ pillar.get('a1') }}
b2: {{pillar.get('b1:b2') }}
# 这种方式返回None,pillar.get()并不能使用多级变量
b33: {{ salt['pillar.get']('b1:b3:b33') }}
b333: {{ salt['pillar.get']('b1:b3:b333') }}
c1: {{ pillar.get('c1')[0] }}
c2: {{ salt['pillar.get']('c1')[1] }}
[root@master ~]# salt host102 state.sls init.one test=true
host102:
----------
ID: /tmp/one
Function: file.managed
Result: None
Comment: The file /tmp/one is set to be changed
Started: 10:31:00.913548
Duration: 8.761 ms
Changes:
----------
diff:
---
+++
@@ -1,5 +1,5 @@
a1:a11
-b2:b22
+b2:None
b33:b333
b333:b3333
c1: c11 Summary
------------
Succeeded: 1 (unchanged=1, changed=1)
Failed: 0
------------
Total states run: 1

例2:顺便看下默认值的问题

[root@master ~]# cat /srv/salt/base/init/one.sls
/tmp/one:
file.managed:
- source: salt://init/one
- template: jinja
- defaults:
a1: {{ pillar.get('a11',{}) }}
b2: {{ salt['pillar.get']('b1:b22','') }}
b33: {{ salt['pillar.get']('b1:b3:b33') }}
b333: {{ salt['pillar.get']('b1:b3:b333') }}
c1: {{ pillar.get('c1')[0] }}
c2: {{ salt['pillar.get']('c1')[1] }}
[root@master ~]# salt host102 state.sls init.one test=true
host102:
----------
ID: /tmp/one
Function: file.managed
Result: None
Comment: The file /tmp/one is set to be changed
Started: 10:34:22.505086
Duration: 9.101 ms
Changes:
----------
diff:
---
+++
@@ -1,5 +1,5 @@
-a1:a11
-b2:b22
+a1:{}
+b2:None
b33:b333
b333:b3333
c1: c11 Summary
------------
Succeeded: 1 (unchanged=1, changed=1)
Failed: 0
------------
Total states run: 1

{{ pillar.get('name','') }}不存在name键时,值为None

{{ pillar.get('name',{}) }}不存在name键时,值为{}

{{ salt['pillar.get']('name') }}同理,网上看到一篇博客说''与{}是一样的。

官方找到的例子

https://docs.saltstack.com/en/latest/topics/tutorials/pillar.html

{% for user, uid in pillar.get('users', {}).items() %}

可惜并没有''的例子,倒是有{{ salt['pillar.get']('pkgs:apache', 'httpd') }}

例3:多个变量for循环用法,关于iteritems与items的区别,那是python的问题,请自行搜索,现在还不熟悉python。

{% for user, args in pillar['users'].iteritems() %}

{% for user, args in pillar['users'].items() %}

[salt] jinja模板中变量使用pillar的几种方法的更多相关文章

  1. 在shell中变量的赋值有五种方法!

    转至:https://blog.csdn.net/weibo1230123/article/details/82085226 在shell中变量的赋值有五种 :使用 read 命令,直接赋值,使用命令 ...

  2. Flask08 包含(include)、继承(extends)、宏???、模板中变量的来源、利用bootstrap构建自己的网页结构

    1 包含 直接把另一个文件的内容,复制粘贴过来 {% include "模板路径" %} 注意:模板都是放在 templates 这个文件夹下面的,可以在里面新建文件夹来进行分离: ...

  3. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  4. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  5. Oracle中获取执行计划的几种方法分析

    以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下     1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...

  6. Python中执行系统命令常见的几种方法--转载

    Python中执行系统命令常见的几种方法 Python中执行系统命令常见的几种方法有: (1)os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 # 如果再命令行下执 ...

  7. 在Oracle中执行动态SQL的几种方法

    转载:在Oracle中执行动态SQL的几种方法 以下为内容留存: 在Oracle中执行动态SQL的几种方法 在一般的sql操作中,sql语句基本上都是固定的,如:SELECT t.empno,t.en ...

  8. 在 Ruby 中执行 Shell 命令的 6 种方法

    我们时常会与操作系统交互或在 Ruby 中执行 Shell 命令.Ruby为我们提供了完成该任务的诸多方法. Exec Kernel#exec 通过执行给定的命令来替换当前进程,例如: $ irb & ...

  9. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

随机推荐

  1. 理解JavaScript继承(二)

    理解JavaScript继承(二) 5.寄生式继承 function object(o) { function F() {} F.prototype = o; return new F(); } fu ...

  2. Jenkins启动和停止服务

    1.怎么启动Jenkins? step1:进入到Jenkins的war包所在的目录. 如果是win7及以上版本,直接打开Jenkins的war包所在的目录,在地址栏敲cmd,回车. 上述结果和进入cm ...

  3. Python内置函数locals和globals

    globals()和locals() locals()实际上没有返回局部名字空间,它返回的是一个拷贝.所以对它进行修改,修改的是拷贝,而对实际的局部名字空间中的变量值并无影响. globals()返回 ...

  4. HDU 1203 01背包变形题,(新思路)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/ ...

  5. C# lambda表达式参数的正确使用姿势

    C#的lambda表达式的好用就不多说了,中午吃饭的时候突然想到一个以前(有年头了,难道屌丝上岁数了就回忆这个么...)和同事争执的坑.. 列个demo吧.. 先是一个类,这个类的对象就是为了吃堆内存 ...

  6. CentOS 安装第三方yum源

    yum install wget #安装下载工具 wget http://www.atomicorp.com/installers/atomic #下载 sh ./atomic #安装 yum che ...

  7. expect 分发ssh key脚本

    #!/usr/bin/expect } { send_user "USAGE:expect_sshkey.exp host" exit } #define var set host ...

  8. 20155229 《信息安全系统设计基础》 Mypwd实现

    Mypwd 内容 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 学习pwd命令 通过man pwd查看 pwd命 ...

  9. 准确率,召回率,F值

    下面简单列举几种常用的推荐系统评测指标: 1.准确率与召回率(Precision & Recall) 准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量.其中精度 ...

  10. Luogu5110 块速递推

    题面 题解 线性常系数齐次递推sb板子题 $a_n=233a_{n-1}+666a_{n-2}$的特征方程为 $$ x^2=233x+666 \\ x^2-233x+666=0 \\ x_1=\fra ...