zoukankan      html  css  js  c++  java
  • [salt] jinja模板中变量使用pillar的几种方法

    先转载下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() %}

  • 相关阅读:
    opencv获取网络相机的图像-不用sdk
    openpose开发(1)官方1.5版本源码编译
    Anaconda3(5-1)程序编辑器 自带的spyder
    Anaconda3(5-2)程序编辑器 win10下PyCharm安装及配置Pytorch流程
    Anaconda3(4)安装pytorch
    (0)资料收集
    mock以及特殊场景下对mock数据的处理
    shell编程中的控制判断语句
    shell相关知识点
    React (native) 相关知识
  • 原文地址:https://www.cnblogs.com/hjfeng1988/p/6958331.html
Copyright © 2011-2022 走看看