ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Saltstack组件grains pillar 与jinja模板使用详解

2019-08-15 21:35:32  阅读:272  来源: 互联网

标签:jinja grains salt pillar server1 server2 root


Grains是saltstack组件中非常重要的组件之一,它用来记录minion的系统信息(操作系统、域名、IP地址、内核信息、操作系统类型、内存信息以及其他更多的系统信息)。
Grain收集的信息是静态的,在minion第一次启动时采集数据(除非下次重起,否则数据不会变化)。
Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。

相对于Grains的静态参数,Pillar可以配置更灵活的参数,熟练地运用Pillar可以十分强大的发挥Saltstack的威力。

Salt中的pillar接口是Salt开发中最重要的接口之一。Pillar是用来产生特定于minions的任意数据的接口。pillar中产生的数据几乎可以在Salt的任何组件中使用,用途广泛:

高度敏感的数据:
通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。

Minion配置:
minion模块,像是execution模块,states,和returner可以通过存储在pillar中的数据配置。

Variables:
特定minions或者groups需要变量可以定义在pillar中,以后可以在sls公式或者模板文件中使用。

任意的数据:
Pillar可以包含任何基础数据结构,像是一个列表的值,键值存储结构都可以定义使得可以在sls公式中简单的遍历一组值。

SaltStack数据系统之间的区别

名称 存储位置 数据类型 数据采集更新方式 应用
Grains Minion端 静态数据 Minion启动时采集,也可以使用saltutil.sync_grains进行刷新。 存在Minion基本数据。比如用于匹配Minion,自身数据可以用来做资产管理等。
Pillar Master端 动态数据 在Master端定义,指定给对应的Minion。可以使用saltutil.refresh_pillar刷新。 存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存。

Grains组件

实验环境:

1.系统默认变量

salt server2 grains.ls                #显示grains全部变量名称
server2:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - fqdns
    - gid
    - gpus
    - groupname
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_gw
    - ip4_interfaces
    - ip6_gw
    - ip6_interfaces
    - ip_gw
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - kernelversion
    - locale_info
    - localhost
    - lsb_distrib_codename
    - lsb_distrib_id
    - lsb_distrib_release
    - machine_id
    - manufacturer
    - master
    - mdadm
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - pid
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - swap_total
    - systemd
    - uid
    - username
    - uuid
    - virtual
    - zfs_feature_flags
    - zfs_support
    - zmqversion

salt server2 grains.items             #查看minion全部静态变量
server2:
    ----------
    SSDs:
    biosreleasedate:
        01/01/2011
    biosversion:
        0.5.1
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - mmx
        - fxsr
        - sse
        - sse2
        - syscall
        - nx
        - rdtscp
        - lm
        - constant_tsc
        - rep_good
        - nopl
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - cx16
        - sse4_1
        - sse4_2
        - x2apic
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - fsgsbase
        - smep
        - erms
        - xsaveopt
    cpu_model:
        Intel Xeon E312xx (Sandy Bridge)
    cpuarch:
        x86_64
    disks:
        - sda
        - dm-0
        - dm-1
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 114.114.114.114
        ip6_nameservers:
        nameservers:
            - 114.114.114.114
        options:
        search:
        sortlist:
    domain:
    fqdn:
        server2
    fqdn_ip4:
        - 172.25.60.2
    fqdn_ip6:
        - fe80::5054:ff:feb1:973a
    fqdns:
    gid:
        0
    gpus:
        |_
          ----------
          model:
              QXL paravirtual graphic card
          vendor:
              unknown
    groupname:
        root
    host:
        server2
    hwaddr_interfaces:
        ----------
        eth0:
            52:54:00:b1:97:3a
        lo:
            00:00:00:00:00:00
    id:
        server2
    init:
        systemd
    ip4_gw:
        172.25.60.250
    ip4_interfaces:
        ----------
        eth0:
            - 172.25.60.2
        lo:
            - 127.0.0.1
    ip6_gw:
        False
    ip6_interfaces:
        ----------
        eth0:
            - fe80::5054:ff:feb1:973a
        lo:
            - ::1
    ip_gw:
        True
    ip_interfaces:
        ----------
        eth0:
            - 172.25.60.2
            - fe80::5054:ff:feb1:973a
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 127.0.0.1
        - 172.25.60.2
    ipv6:
        - ::1
        - fe80::5054:ff:feb1:973a
    kernel:
        Linux
    kernelrelease:
        3.10.0-514.el7.x86_64
    kernelversion:
        #1 SMP Wed Oct 19 11:24:13 EDT 2016
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
        timezone:
            EDT
    localhost:
        server2
    lsb_distrib_codename:
        Red Hat Enterprise Linux Server 7.3 (Maipo)
    lsb_distrib_id:
        Red Hat Enterprise Linux Server
    lsb_distrib_release:
        7.3
    machine_id:
        b3c6b44f45144265ac542f73294f7e54
    manufacturer:
        Red Hat
    master:
        172.25.60.1
    mdadm:
    mem_total:
        992
    nodename:
        server2
    num_cpus:
        1
    num_gpus:
        1
    os:
        RedHat
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Maipo
    osfinger:
        Red Hat Enterprise Linux Server-7
    osfullname:
        Red Hat Enterprise Linux Server
    osmajorrelease:
        7
    osrelease:
        7.3
    osrelease_info:
        - 7
        - 3
    path:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    pid:
        2161
    productname:
        KVM
    ps:
        ps -efHww
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib64/python2.7/site-packages/gtk-2.0
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2019.2.0
    saltversioninfo:
        - 2019
        - 2
        - 0
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
    server_id:
        1398511438
    shell:
        /bin/sh
    swap_total:
        2047
    systemd:
        ----------
        features:
            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
        version:
            219
    uid:
        0
    username:
        root
    uuid:
        b3c6b44f-4514-4265-ac54-2f73294f7e54
    virtual:
        kvm
    zfs_feature_flags:
        False
    zfs_support:
        False
    zmqversion:
        4.1.4

salt server2 grains.item os           #查看系统信息
salt server2 grains.item fqdn         #查看完整主机名
salt server2 grains.item nodename     #查看缩略名

在这里插入图片描述在这里插入图片描述在这里插入图片描述
2.自定义Grains
方法1:在minion端写入roles

[root@server2 ~]# vim /etc/salt/minion    ##设置server2的roles为apache
129 grains:
130   roles:
131     - apache
[root@server1 salt]#  salt server2 saltutil.sync_grains      ##刷新grains或者重启minion
server2:

[root@server1 salt]# salt server2 grains.item roles
server2:
    ----------
    roles:
        - apache

在这里插入图片描述
在这里插入图片描述
方法2:通过grains文件设置roles

salt-minion:
[root@server3 ~]# vim /etc/salt/grains
[root@server3 ~]# cat /etc/salt/grains 
roles: nginx
[root@server3 ~]# systemctl restart salt-minion.service 

salt-master:
[root@server1 salt]#  salt server3 saltutil.sync_grains
server3:
[root@server1 salt]# salt server3 grains.item roles
server3:
    ----------
    roles:
        nginx

在这里插入图片描述
在这里插入图片描述
自定义静态变量

[root@server1 salt]# mkdir /srv/salt/_grains
[root@server1 salt]# cd /srv/salt/_grains
[root@server1 _grains]# vim my_grains.py
[root@server1 _grains]# cat my_grains.py 
def my_grains():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains
[root@server1 _grains]# salt server2 saltutil.refresh_modules
server2:
    True
[root@server1 _grains]# salt server2 grains.item hello
server2:
    ----------
    hello:
[root@server1 _grains]# salt server2 saltutil.sync_grains
server2:
    - grains.my_grains

[root@server1 _grains]# systemctl restart salt-master.service   ##重启服务

[root@server2 salt]# systemctl restart salt-minion

[root@server3 salt]# systemctl restart salt-minion

[root@server1 _grains]# salt -G 'roles:apache' test.ping
server2:
    True
[root@server1 _grains]# salt -G 'roles:nginx' test.ping
server3:
    True

在这里插入图片描述
在server2上查看模块是否载入在这里插入图片描述
在target中匹配minion
在这里插入图片描述
修改top文件的匹配方式

[root@server1 _grains]# vim /srv/salt/top.sls 
[root@server1 _grains]# cat /srv/salt/top.sls
base:
  'roles:apache':
    - match: grain
    - apache.install
  'roles:nginx':
    - match: grain
    - nginx.service

Pillar组件

默认情况下,master配置文件中的内容是被载入到每个minion的pillar中的。这使得master的配置文件可以作为所有minions的全局配置。

pillar和state tree的建立方式相似,由sls文件组成,并有一个top文件,这和state tree类似。pillar默认的路径是:/srv/pillar。

注意,pillar的位置可以通过master配置见中的pillar_roots配置项来自定义。

要来是建立pillar的话,我们需要/srv/pillar目录:

[root@server1 ~]# vim /etc/salt/master    ##pillar_roots前面还有一个空格,顶格写会报错
828 pillar_roots:
829   base:
830     - /srv/pillar

[root@server1 _grains]# mkdir /srv/pillar
[root@server1 _grains]# systemctl restart salt-master
[root@server1 _grains]# cd /srv/pillar/
[root@server1 pillar]# mkdir web
[root@server1 pillar]# cd web/
[root@server1 web]# vim vars.sls

{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

[root@server1 pillar]# salt '*' saltutil.refresh_pillar
server3:
    True
server2:
    True

查询pillar项
在这里插入图片描述

Jinja模板

 使用方法:
 1.File状态使用template参数
 - template: jinja
 2.模板文件里面变量使用{{ 名称 }}
 {{ PORT }}
 3.变量列表
 - defaults:
  PORT: 80

以saltstack推送httpd服务为例
(1)添加监听主机和端口变量

[root@server1 files]# vim httpd.conf
Listen {{ host }}:{{ port }}

在这里插入图片描述
(2)修改apache目录下的install.sls文件

[root@server1 apache]# vim install.sls 
[root@server1 apache]# cat install.sls 
install-apache:
  pkg.installed:
    - pkgs:
      - httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - template: jinja
      port: 80
      host: 172.25.60.2

  service.running:
    - name: httpd
    - reload: True
    - watch:
      - file: install-apache

在这里插入图片描述
将修改推送到server2中
salt server2 state.sls apache.install

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
2.通过grains取主机ip值

vim install.sls
host: {{ grains['ipv4'][-1]}}
salt server2 state.sls apache.install    #推送

在这里插入图片描述
推送后配置文件中监听端口不变
在这里插入图片描述
在httpd.conf模板文件中设置

    vim apache/install.sls
    #host: {{ grains['ipv4'][-1]}}    #将该行注释掉
    vim files/httpd.conf 
    Listen {{ grains['ipv4'][-1] }}:{{ port }} 	

推送后配置文件中监听端口不变
3.在pillar中取值
方法一:在install.sls文件设置变量,在pillar目录中定义变量的取值

vim apache/install.sls
host: {{ pillar['ip'] }}
vim files/httpd.conf
Listen {{ host }}:{{ port }}

在/srv/pillar目录中设置pillar变量的取值
cd /srv/pillar/
vim web/vars.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
ip: 172.25.5.2
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

salt server2 state.sls apache.install 推送结果相同
方法2:直接在模板文件httpd.conf文件中设定变量

cd /srv/salt/apache/
vim install.sls 
#host: {{ pillar['ip'] }}
vim files/httpd.conf 
Listen {{ pillar['ip'] }}:{{ port }}
salt server2 state.sls apache.install

salt server2 state.sls apache.install 推送结果相同
4.将端口设置为变量

vim apache/install.sls 
#port: 80
vim apache/lib.sls
{% set port = '80' %}
vim files/httpd.conf
{% from 'apache/lib.sls' import port %}
salt server2 state.sls apache.install

salt server2 state.sls apache.install 推送结果相同

标签:jinja,grains,salt,pillar,server1,server2,root
来源: https://blog.csdn.net/vanvan_/article/details/99639927

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有