SaltStac中的grains(静态数据)和pillar(动态参数)

2023-10-09 01:30

本文主要是介绍SaltStac中的grains(静态数据)和pillar(动态参数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Grains

1、简介

2、应用场景:

3、静态配置使用

        3.1、基本命令的查询

        3.2、自定义grains项

         3.3、 实例应用

二、Pillar

        1、简介

        2、动态配置使用

          2.1、基础目录

          2.2、自定义pillar项

          2.3、数据pillar数据查询

           2.4、和jinja结合使用


一、Grains

1、简介

        Grains是SaltStack的一个组件,存放在SaltStack的minion端,主要采集一些minion端的数据。
        当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。因为是是静态数据,所以一般不去修改。

2、应用场景:

        信息查询,可用作CMDB。
        在target中使用,匹配minion。
        在state系统中使用,配置管理模块。

3、静态配置使用

        3.1、基本命令的查询

##指定服务器minion端,查看所有模块
[root@server1 nginx]# salt server2 grains.items####指定服务器minion端,查看指定单项(更多模块可以查看官方文档)
[root@server1 nginx]# salt server2 grains.item ipv4

        3.2、自定义grains项

                在minion端开启grains,配置相关的标签,然后重启服务(静态保持保持文件生效)。

        在Minion端进行配置:

##在minion端配置##文件位置:/etc/salt/minoin
##文件内容:129 grains:
130   roles:
131     - webserver
132     - memcache##重启服务
[root@server2 salt]# systemctl restart salt-minion.service##主服务器查看配置
[root@server1 nginx]# salt server2 grains.item roles
图1 grains查看
##在minion端编写grains文件设置标签##文件位置:/etc/salt/grains##文件内容:
roles:- nginx##重启服务
[root@server3 salt]# systemctl restart salt-minion.service ##模块同步
[root@server1 nginx]# salt server3 saltutil.sync_grains##信息查询
[root@server1 nginx]# salt server3 grains.item roles
图2 重启服务,使配置生效

图3 查看自主配置是否生效

          在Master端进行配置:

##在Msater端进行服务配置##创建模块路径
[root@server1 salt]#  mkdir /etc/salt/_grains##创建个人目录
[root@server1 salt]#  vim my_grains.py##文件内容
def my_grains():grains = {}grains['salt'] = 'stack'grains['hello'] = 'world'return grains##参数列表同步
[root@server1 salt]# salt '*' saltutil.sync_grains##测试
[root@server1 _grains]# salt -G salt:stack test.ping  ##表示用grains的方法进行服务匹配

图4 编写自主模块进行全局推送

         3.3、 实例应用

##通过top.sls进行全局推送,对不同主机安装不同的应用服务##文件位置:/srv/salt/top.sls##文件内容:1 base:2   'roles:apache':         ##指定标签服务3     - match: grain        ##表明通过grain进行匹配4     - apache5   'roles:nginx':        6     - match: grain7     - nginx.install        ##本身调用的模块##全局推送:
[root@server1 salt]# salt '*' state.highstate
图5 查看不同grains对应的主机

图 6 全局推送结果(1)

图 7 全局推送结果(2)

二、Pillar

        1、简介

        pillar和grains一样也是一个数据系统,多用于环境配置,配置文件时写时生效,不需服务重启。
        pillar的数据始动态终存在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。

        2、动态配置使用

            2.1、基础目录

##通过配置主配置文件:/etc/salt/master
##配置文件默认根目录为(可以自行更改):/srv/pillar##配置文件内容:837 pillar_roots:838   base:839     - /srv/pillar##个人重新制定文件路径时,需要重启master端,使用默认路径时需要创建相应的文件[root@server1 srv]# vim /etc/salt/master[root@server1 srv]# mkdir pillar[root@server1 srv]# systemctl restart sakt-master.service
图8 创建文件默认的pillar文件路径

            2.2、自定义pillar项

                    在默认路径下编写自主文件配置,此时文件的默认根目录为从当前文件开始,即:/srv/pillar/..

##创建个人模块:/srv/pillar/top.sls
[root@server1 pillar]# touch top.sls
[root@server1 pillar]# vim top.sls##文件内容:1 base:            ##唯一性声明2   '*':           ##指定主机3     - packages   ##调用的文件##编写自主文件:
[root@server1 pillar]# vim packsges.sls##文件内容;1 {% if grains['fqdn'] == 'server3' %}2 package: httpd3 ip: 192.168.1.134 port: 80805 {% elif grains['fqdn'] == 'server2' %}6 package: mairadb7 ip: 192.168.1.128 port: 809 {% endif %}##进行资源刷新
[root@server1 pillar]# salt '*' saltutil.refresh_pillar             
图9 创建自定义模块,并刷新信息

              在minion端查询信息,缓存中并不存在相关的信息:

图10 查看信息,并没有同步

      上述查询说明数据只是在master端存在,并没有同步到minion端。

 【注】信息如果不刷新,依然是部署的,但是并不能查到

            2.3、数据pillar数据查询


##pillar资源查询
[root@server1 pillar]# salt '*' pillar.items
[root@server1 pillar]# salt '*' pillar.item package##数据匹配
[root@server1 pillar]# salt -I 'package:httpd' test.ping
图11 查询测试

               表明信息完全同步,没有重启服务,为动态部署。

            2.4、和jinja结合使用

        pillar的使用,更多的是在自己的根目录下进行配置的编写,然后同Jinja模块一起使用,使运维工作人员,在进行服务配置管理时,更加灵活方便。

        关于和jinja模板的联用读者可以参考文章:《SaltStack中的jinja模板》

链接如下:https://blog.csdn.net/qq_41056224/article/details/119113181

这篇关于SaltStac中的grains(静态数据)和pillar(动态参数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169374

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空