grains 和 pillar 对比:

  • Grains:存放静态数据,主要存储客户端的主机信息,重启grains会刷新。
  • Pillar: 处理敏感数据, 处理差异性的文件。

Grains数据系统

salt '*' grains.items  ###列出服务器的详细参数

只查看OS的信息:

shell> salt 'linux-node2' grains.item os
linux-node2:
----------
os:
CentOS shell> salt 'linux-node2' grains.get os
linux-node2:
CentOS
``` ```shell
shell> salt 'linux-node2' grains.get ip_interfaces:eth0
linux-node2:
- 192.168.56.12
- fe80::250:56ff:fe30:8f96

列出所有信息的名称:

shell>  salt '*' grains.ls
minion.saltstack.com:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
省略部分内容。。。。。。。。

在服务端测试:-G 表示匹配grains :

shell>  salt -G 'env:prod' test.ping
minion.saltstack.com:
True shell> salt -G 'os:CentOS' cmd.run 'w'
linux-node2:
03:35:48 up 9:50, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
niu pts/0 10.0.2.1 02:02 1:10m 0.00s 0.00s -bash
niu pts/1 10.0.2.1 02:14 1:21m 0.00s 0.00s -bash

在客户端自定义grains:

shell>  vim /etc/salt/minion
grains:
roles: nginx
env: prod

使用命令行设置minion端的grains。

## 给logstash4服务器设置一个elastic_url的grains值
salt 'linux-node2' grains.setval elastic_url 'http://192.168.56.12:9200'
## 查看elastic_url的值
salt 'linux-node2' grains.item elastic_url
## 重新给elastic_url赋值
salt 'linux-node2' grains.setval elastic_url 'http://192.168.56.12:9200'
## 查看新赋值是否生效
salt 'linux-node2' grains.item elastic_url

设置成功后,minion会在 /etc/minion/grains 增加一行配置文件

vim /etc/salt/grains
elastic_url: http://192.168.56.12:9200

在top.sls中调用grains的方法:

[root@linux-node1 salt]# vim top.sls
base:
'web:nginx':
- match: grain
- apache

在服务器端测试:

shell> salt -G 'cloud:openstack' test.ping
linux-node2:
True

在服务端输入如下命令可以刷新:(客户端更改后不用重启)

shell> salt '*' saltutil.sync_grains 

在配置文件中调用

nginx:
pkg:
- installed
file.managed:
- source: salt://nginx/nginx.conf
- name: /etc/nginx/nginx.conf
- user: root
- group: root
- mode: 644
- template: jinja service.running:
- enable: True
- reload: True
- watch:
- file: /etc/nginx/nginx.conf
- pkg: nginx

grains优先级:/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的优先级。

grains.filter_by 用法

salt.modules.grains.filter_by(lookup_dict, grain='os_family', merge=None, default='default', base=None)

lookup_dict-- 自定义列表值的字典。

grain-- 我们要从客户端grains到那个key来区分环境,这就要说明下,默认值:os_family。

merge-- 对lookup_dict扩展新的字典。

default-- 默认值,默认选择哪个key。

base-- 选择lookup_dict合并在这最后合并字典合并。这允许每个案件的共同的价值观被收集在基地和粮食选择字典和词典被合并。默认设置。

Pillar 数据系统

pillar 常用命令列表

  • salt '*' saltutil.refresh_pillar: 刷新目标用户的pillar信息。
  • salt '*' pillar.items: 查看目标用户的pillar值。

第一步: 启动pillar功能

vim /etc/salt/master
pillar_opts: True
##piller 默认参数的开启。

第二步:在master文件中配置pillar文件存放的位置

vim /etc/salt/master
pillar_roots:
base:
- /srv/salt/pillar

第三步:开始编写pillar文件

shell> mkdir /srv/salt/pillar
shell> vim /srv/salt/pillar/top.sls
base:
'*':
- init.rsyslog
shell> mkdir init
shell> vim init/rsyslog.sls
pkgs:
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

刷新一下配置:

[root@centos6 init]# salt '*' saltutil.refresh_pillar
linux-node2:
True
[root@linux-node1 pillar]# salt '*' pillar.items

第四步 使用pillar

  • 使用索引调用: pillar['pkgs']['apache']
  • 使用get方法调用: pillar.get('users', {})

索引的方式:

/srv/salt/apache/init.sls:

syslog:
pkg.installed:
- name: {{ pillar['pkgs']['apache'] }}

get的方式, 可以在state file中设置默认值,

 /srv/salt/apache/init.sls:

apache:
pkg.installed:
- name: {{ salt['pillar.get']('pkgs:apache', 'httpd') }}

使用grains pillar 动态生成Nginx配置文件

user              nginx;
worker_processes {{ grains['num_cpus'] }};
{% if grains['num_cpus'] == 2 %}
worker_cpu_affinity 01 10;
{% elif grains['num_cpus'] == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif grains['num_cpus'] >= 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 1000 0100 0010 0001;
{% endif %}
worker_rlimit_nofile {{ grains['max_open_file'] }}; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events {
worker_connections {{ grains['max_open_file'] }};
} http {
include /etc/nginx/mime.types;
default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf; server {
listen 80 default_server;
server_name _;
access_log logs/host.access.log main; location / {
root {{ pillar['nginx']['root'] }};
index index.html index.htm;
} error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}

死磕salt系列-salt grains pillar 配置的更多相关文章

  1. 死磕nginx系列--nginx 限流配置

    限流算法 令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处理: 令牌不够时,请求被缓存. 漏桶算法 算法思想是: 水( ...

  2. 死磕nginx系列--nginx 目录

    死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...

  3. 死磕nginx系列

    死磕nginx系列 死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统--nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕 ...

  4. 死磕salt系列-salt文章目录汇总

    死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...

  5. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  6. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  7. MySQL强人“锁”难《死磕MySQL系列 三》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库 ...

  8. S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  9. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  10. 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》

    系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...

随机推荐

  1. Virtualbox/Vagrant安装

    它们分别是什么? VirtualBox: 号称是最强的免费虚拟机软件和VM类似. 不仅具有丰富的特色,而且性能也很优异. Vagrant: 是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 使 ...

  2. zabbix自动发现与自动注册及SNMP监控

    自动发现与自动注册 自动发现:zabbix Server主动发现所有客户端,然后将客户端登记自己的小本本上,缺点zabbix server压力山大(网段大,客户端多),时间消耗多. 自动注册:zabb ...

  3. WPF几种渐变色

      [LinearGradientBrush-- 主要属性: StartPoint 获取或设置线性渐变的二维起始坐标. EndPoint 获取或设置线性渐变的二维终止坐标. 例子: <Linea ...

  4. n后问题

    Description 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇 ...

  5. GIT 基础-基础命令

    环境 centos7 1.安装 #yum install git 2.创建本地仓库 ( 这里用 /www/git) 这里里有个隐藏的文件夹 ```.git``` 为git仓库的配置文件夹, 不可随意修 ...

  6. UNIX IPC: POSIX 消息队列 与 信号

    POSIX消息队列可以注册空队列有消息到达时所触发的信号,而信号触发对应的信号处理函数. 下面是一份基本的消息队列和信号处理结合的代码(修改自UNIX网络编程:进程间通信) #include < ...

  7. [SDOI2014]旅行解题报告

    题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我 ...

  8. input一些验证

    这篇博文大部分来自于网上,为了方便自己查阅,以及帮助他人. 1.正则验证只能输入正整数:  onkeyup = " if (this.value.length==1) { this.valu ...

  9. laravel开发之-(1)数据库链接测试

    composer安装成功后,网站建设的操作记录: 一.修改默认首页.伪静态配置文件 1.将serve.php改为index.php 2.public文件夹下的.htaccess文件复制到根目录下 二. ...

  10. Linux 添加yum命令

    第一步,国内的yum仓库 http://mirrors.163.com/centos/7/os/x86_64/Packages/ http://mirrors.aliyun.com/centos/7/ ...