• saltstack学习2grains&pillar


    saltstack之grains介绍

    GRAINS组件是 是在minion启动收集到的一些信息,比如操作系统的类型,网卡IP,内存版本,CPU信息等。

    grains信息是minion启动后自动上报给master的,当这些静态信息发生改变需重启minion或者重新同步grains。

    [root@master base]#  salt  'node1'  grains.ls  #列出所有的grains 项目名称,
    node1:
        - biosreleasedate
        - biosversion
        - cpu_flags
        - cpu_model
        - cpuarch
        - cwd
        - disks
        - dns
        - domain
    ...
    [root@master base]# salt  'node1' grains.items    #查询所有的详细信息
    [root@master base]# salt  'node1'  grains.get fqdn   #查询某个信息
    node1:
        node1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    grains命令行匹配
    [root@master base]# salt  'node1'  grains.get os
    node1:
        CentOS
    [root@master base]# salt  -G os:CentOS cmd.run 'df -h'   #grains匹配
    
    • 1
    • 2
    • 3
    • 4
    grains在top file里匹配
    [root@master base]# vim top.sls     #在top file里匹配
    base:
      'os:CentOS':
        - match: grain
        - web.apache
    [root@master base]# salt  'node1'  state.highstate  test=True
    node1:
    ----------
    ...黄色,未安装
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    grains在top file里正则匹配
    [root@master base]# cat top.sls
    base:
      'fqdn:node*':      #top file 里也支持正则
        - match: grain
        - web.apache
    [root@master base]# salt  'node1'  state.highstate  test=True
    node1:    #node*匹配出node1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    grains的自定义(minion上定义)
    [root@node1 ~]# cd /etc/salt/
    [root@node1 ~]# vim grains   #默认读取的文件
    role: tests
    env: test
    name: first-test
    [root@master base]# salt  'node1'  grains.get role
    node1:   #此时还获取不到role信息
    [root@master base]# salt  'node1'  saltutil.sync_grains  #刷新grains,或者restart minion
    node1:
    [root@master base]# salt  'node1'  grains.get role
    node1:
        tests
    [root@linux-master salt]#  salt  '*'  grains.items | grep role
    role: tests
    [root@master base]# salt  -G role:tests cmd.run 'df -h'  #grains匹配role: tests的机器都将执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    saltstack 之pillar介绍

    pillar 一般用来存储动态的、敏感的数据;grains信息minion端和master端都可以配置设置或获取。
    pillar 是在master上定义的,并且是针对minion定义的一些信息,可以自定义变量等

    [root@master ~]# salt '*' pillar.items
    node1:
        ----------
    master:
        ----------
    [root@master ~]# vim /etc/salt/master    
    pillar_opts: True   #打开默认的pillar项,这里就不打开了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    pillar的管理使用

    1)定义pillar配置文件位置

    [root@linux-master ~]# vim /etc/salt/master   #/pillar_roots
    pillar_roots:  
      base:
        - /srv/pillar/base
      prod:
        - /srv/pillar/prod
    [root@master ~]# mkdir -p /srv/pillar/{base,prod}
    [root@master ~]# systemctl restart salt-master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2)pillar入口文件定义拥有piller的节点

    [root@master ~]# cat /srv/pillar/base/top.sls      
    base:
      '*':   #支持正则,node*
        - apache
    [root@master ~]# salt '*' pillar.items     #查看定义好piller的节点结果
    master:
        ----------
        apache:
            httpd
    node1:
        ----------
        apache:
            httpd
    [root@master ~]# cat /var/log/salt/master     #错误日志
    [root@master ~]# salt '*' saltutil.refresh_piller   #刷新piller
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3)定义pillar的任务文件

    [root@master ~]# vim /srv/pillar/base/apache.sls
    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debina' %}
    apache: apache2
    {% endif %}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4)pillar的引用(任务文件)

    [root@master ~]# cat /srv/salt/base/top.sls
    base:
      'fqdn:node*':
        - match: grain
        - web.apache
    [root@master ~]# cat  /srv/salt/base/web/apache.sls
    apache-install:
      pkg.installed:
        - name: {{ pillar['apache'] }}
    apache-service:
      service.running:
        - name: {{ pillar['apache'] }}
        - enable: True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5)测试

    [root@master ~]# salt  '*'  state.highstate  test=True
    master:
    ----------
              ID: states
        Function: no.None
          Result: False    #/srv/salt/base/top.sls里是node*,不匹配
         Comment: No Top file or master_tops data matches found. Please see master log for details.
         Changes:
    
    Summary for master
    ------------
    Succeeded: 0
    Failed:    1
    ------------
    Total states run:     1
    Total run time:   0.000 ms
    node1:
    ----------
              ID: apache-install
        Function: pkg.installed
            Name: httpd
          Result: None   #已经匹配了,测试执行
         Comment: The following packages would be installed/updated: httpd
         Started: 20:32:27.695663
        Duration: 1048.275 ms
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    小模板

    [root@master ~]# cd /srv/salt/prod/apache/
    [root@master apache]# cat apache.sls
    apche-install:
      pkg.installed:
        - name: httpd
    apache-config:
      file.managed:
        - name: letc/httpd/conf/httpd.conf
        - source: salt://apache/files/httpd.conf   #目录为apache.sls所在目录下
        - user: root
        - group: root
        - mode: 644
    apache-service:
      service.running:
        - name: httpd
        - enable: True
        - require:
          - pkg: apache
          - file: apache-config
    [root@master apache]# salt node1 state.sls  apache.apache saltenv=prod test=True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    根据被控主机的信息进行匹配过滤

    [root@master ~]# #salt   -G 'os:centos' test.ping
    Target options:
    -G, --grain 				grains匹配
    -I,--pillar 				pilar值匹配
    -E, --pcre					正则匹配
    -L,--list					列表匹配
    --grain-pcre grains			加正则匹配
    -N,--nodegroup 				组匹配
    -R,--range 					范围匹配
    -C, --compound				综合匹配(指定多个匹配)
    -s, --ipcidr minions		网段地址匹配
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    grains的相关命令用法

    [root@master ~]# salt '*' sys.list_functions grains
    node1:
        - grains.append
        - grains.delkey
        - grains.delval
        - grains.equals
        - grains.fetch
        - grains.filter_by
        - grains.get
        - grains.get_or_set_hash
        - grains.has_value
        - grains.item
        - grains.items
        - grains.ls
        - grains.remove
        - grains.set
        - grains.setval
        - grains.setvals
    [root@master ~]# salt '*' sys.doc grains   #查所有
    [root@master ~]# salt '*' sys.doc grains.append  #查单个
    grains.append:
    ...
        CLI Example:
        
            salt '*' grains.append key val
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    [root@master ~]#  salt '*' grains.append   key values  #添加
    node1:
        ----------
        key:
            - values
    [root@master ~]#  salt -G 'key:values'  test.ping
    node1:
        True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    [root@master ~]#  salt '*' grains.remove   key values  #移除
    node1:
        ----------
        key:
    [root@master ~]#  salt '*' grains.item
    node1:
        ----------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    pillar的相关命令用法

    [root@master ~]# salt '*' sys.list_functions pillar
    node1:
        - pillar.data
        - pillar.ext
        - pillar.fetch
        - pillar.file_exists
        - pillar.filter_by
        - pillar.get
        - pillar.item
        - pillar.items
        - pillar.keys
        - pillar.ls
        - pillar.obfuscate
        - pillar.raw
    [root@master ~]# salt '*' sys.doc pillar.ls
    pillar.ls:
    ...
            salt '*' pillar.ls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    [root@master ~]# salt '*' pillar.ls
    node1:
        - apache
    
    • 1
    • 2
    • 3
  • 相关阅读:
    汽车电子智能仓储系统的发展趋势与应用探索
    leetcode74搜索二维矩阵
    Go-Excelize API源码阅读(十)—— SetActiveSheet(index int)
    Vue3计算属性
    MySQL 面试突击指南:核心知识点解析2
    MQTT平台实体硬件VS PlantSimulation实战
    基于 Bitbucket 的 CI/CD 在 Flutter 中的应用
    Codeforces Round #804 (Div. 2)
    判断两个数a,b,输出较大数的平方值。所谓平方值就是两个相同的数相乘的积。
    SIT3232E:高静电防护 3.3V 单电源供电双通道 RS232 收发器
  • 原文地址:https://blog.csdn.net/weixin_60092693/article/details/126065943