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

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字