saltstack中grains和pillar的用法

2024-05-16 02:38
文章标签 用法 grains pillar saltstack

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

SaltStack_Grains

Grains

1.什么是grains:(静态数据,minion启动时采集)
Grains
Static bits of information that a minioncollects about the system when the minion first starts.
The grains interface is made available toSalt modules and components so that the right salt minion commands areautomatically available on the right systems.

以上是官方的解释,大致意思是说grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的
应用场景:
grains的特性–每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num)等诸如此类非常固定的属性。
那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains

grain和pillar区别

  1. grains存储的是静态、不常变化的内容,pillar则相反
  2. grains是存储在minion本地,而pillar存储在master本地
  3. minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

grains使用

grains的相关命令:


salt '*' grains.ls #列出grains的所有keysalt ‘*’ grains.items # 查看所有grains信息,查看所有itemsalt '*' grains.item fqdn #查看单个item

grains的一些用法

[root@server1 salt]# salt server1 grains.item ipv4   ##查看server1的ipv4的信息
server1:----------ipv4:- 127.0.0.1- 172.25.1.1
[root@server1 salt]# salt server1 grains.item uuid   ##查看server1的uuid
server1:----------uuid:026611d5-381c-42ab-bb83-e307d4e89b1a
[root@server1 salt]# salt server1 grains.item os  ##查看server1的os
server1:----------os:RedHat
[root@server1 salt]# salt -G 'os:RedHat' test.ping  ##对系统为RedHat的主机进行test.ping方法
server2:True
server3:True
server1:True
[root@server1 ~]# salt -G 'host:server1' cmd.run hostname
#对host为server1的用户执行shell命令hostname
server1:server1

(1)基于配置文件修改roles

[root@server2 pki]# vim /etc/salt/minion
120 grains:
121   roles:
122     apache
[root@server2 pki]# /etc/init.d/salt-minion restart   #重启后minion会将grains同步到master
[root@server1 salt]# salt '*' grains.item roles
server2:----------roles:apache
server3:----------roles:
server1:----------roles:

(2)基于自定义文件的grains

[root@server3 ~]# cd /etc/salt
[root@server3 salt]# vim grains
roles:apache
[root@server1 ~]# salt server3 saltutil.sync_grains   
#同步server3的grains,不需要重启server3中的salt 
[root@server1 ~]# salt '*' grains.item roles
server1:----------roles:
server3:----------roles:apache
server2:----------roles:haproxy

pillar的使用

pillar方法

相当于grains的静态参数,pillar可以配置更灵活的参数,熟练的运用pillar可以十分强大的发挥saltatack的威力。pillar是动态参数


(1)开启pillar

[root@server1 ~]# cd /etc/salt/
[root@server1 salt]# vim master694 pillar_roots:695   base:696     - /srv/pillar[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# /etc/init.d/salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]

(2)创建推送脚本

[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# mkdir web
[root@server1 pillar]# vim web/install.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: haproxy
{% elif grains['fqdn'] == 'server3' %}
webserver: apache
{% elif grains['fqdn'] == 'server4' %}
webserver: nginx
{% endif %}[root@server1 pillar]# vim top.sls    #推送web.install的脚本
base:'*':- web.install

(3)刷新所有节点


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

(4)获取pillar信息

[root@server1 ~]# salt '*' pillar.items
server4:----------webserver:nginx
server3:----------webserver:apache
server2:----------webserver:haproxy

指定信息查询


[root@server1 web]# salt -I 'webserver:nginx' cmd.run hostname
server4:server4
[root@server1 web]# salt -I 'webserver:httpd' cmd.run hostname
server3:server3
[root@server1 web]# salt -I 'webserver:haproxy' cmd.run hostname
server2:server2

查询对应网段中正常的主机

[root@server1 web]# salt -S 172.25.12.0/24 test.ping
server1:True
server3:True
server2:True

jinja模块的使用

{% %}:定义
{{ }}:取值
脚本定义固定端口
[root@server1 httpd]# vim /srv/salt/httpd/install.sls 
apache-install:pkg.installed:- pkgs:- httpd- phpfile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://httpd/files/httpd.conf- mode: 644- user: root- template: jinja- context:bind: 172.25.12.3port: 8080service.running:- name: httpd- enable: True- reload: True- watch:- file: apache-install
[root@server1 files]# vim /srv/salt/httpd/files/httpd.conf
137 Listen {{ bind }}:{{ port }}           # (Listen 172.25.1.3:8080) [root@server1 files]# salt server3 state.sls apache.install

测试

[root@server3 salt]# netstat -nutlp |grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      2538/httpd        

定义为动态信息

[root@server1 apache ]# vim lib.sls 
{% set port = 80 %}  [root@server1 files]# vim /srv/salt/httpd/files/httpd.conf1     {% from 'apache/lib.sls' import port with context %}137  Listen {{ port }}[root@server1 files]# salt server2 state.sls httpd.install

利用grains和prilla推送

grains

[root@server1 httpd]# vim /srv/salt/httpd/install.sls apache-install:pkg.installed:- pkgs:- httpd- phpfile.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://httpd/files/httpd.conf- mode: 644- user: root- template: jinja- context:bind: {{ grains['ipv4'][-1] }}port: 8080service.running:- name: httpd- enable: True- reload: True- watch:- file: apache-install
[root@server1 files]# vim /srv/salt/httpd/files/httpd.conf 137 Listen {{ bind }}:{{ port }}[root@server1 files]# salt server3 state.sls apache.install

pillar方法进行推送

[root@server1 ~]# vim /srv/pillar/web/install.sls 
{% if grains['fqdn'] == 'server2' %}
webserver: haproxy
{% elif grains['fqdn'] == 'server3' %}
webserver: apache
bind: 172.25.1.3
port: 80
{% elif grains['fqdn'] == 'server4' %}
webserver: nginx
{% endif %}
[root@server1 ~]# cd /srv/salt/apache/file/
[root@server1 file]# vim httpd.conf 136 Listen {{ pillar['bind'] }}:{{ port }}
[root@server1 ~]# salt server3 state.sls apache.install

测试

[root@server3 conf]# netstat  -nutlp |grep 8080
tcp        0      0 172.25.1.3:8080             0.0.0.0:*                   LISTEN      3237/httpd          [root@server3 conf]# vim httpd.conf136 Listen 172.25.1.3:8080

这篇关于saltstack中grains和pillar的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

这些ES6用法你都会吗?

一 关于取值 取值在程序中非常常见,比如从对象obj中取值 const obj = {a:1b:2c:3d:4} 吐槽: const a = obj.a;const b = obj.b;const c = obj.c;//或者const f = obj.a + obj.b;const g = obj.c + obj.d; 改进:用ES6解构赋值

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

Cmake之3.0版本重要特性及用法实例(十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧

关于断言的部分用法

1、带变量的断言  systemVerilog assertion 中variable delay的使用,##[variable],带变量的延时(可变延时)_assertion中的延时-CSDN博客 2、until 的使用 systemVerilog assertion 中until的使用_verilog until-CSDN博客 3、throughout的使用   常用于断言和假设中的

ExpandableListView的基本用法

QQ上的好友列表在Android怎么实现,有一个最简单的方法,那就是ExpandableListView,下面简单介绍一下ExpandableListview的用法。 先看看效果图,没有找到大小合适的图片,所以凑合着看吧。     一、准备工作(界面,和需要的数据)             <? xml   version = "1.0"   encoding =

Hbase 查询相关用法

Hbase 查询相关用法 public static void main(String[] args) throws IOException {//Scan类常用方法说明//指定需要的family或column ,如果没有调用任何addFamily或Column,会返回所有的columns; // scan.addFamily(); // scan.addColumn();// scan.se

BeanUtils.copyProperties()在不同包下,用法不同!!! 切记!!!

用法一: 在import org.springframework.beans.BeanUtils;包下: <span style="white-space:pre"> </span>//赋值vo对象的值到po中 <span style="white-space:pre"> </span>/** <span style="white-space:pre"> </span>* <spa

Mybatis注解用法

MyBatis(八) mybatis注解 一、mybatis简单注解 1、@Select、@Results、@Result2、@Delete、@Param、@ResultMap3、@Insert、@SelectKey4、@Delete、@Param5、@Update二、动态SQL 1、简单处理,直接使用``脚本2、使用Provider注解标识 2.1、创建Provider类2.2、注解使用Prov