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. JS 教程

    1简介 1.JavaScript 是脚本语言 1.1轻量级的编程语言 1.2可插入 HTML 页面的编程代码 1.3可由所有的现代浏览器执行 2.您将学到什么 2.1JavaScript:写入 HTM ...

  2. Java - 将可变性最小化

    不可变类,即实例不能被修改的类,实例中包含的所有信息在对象的生命周期内固定不变. 常见的比如String.基本类型的封装类.BigDecimal.BigInteger. 相对与可变类,不可变更易于设计 ...

  3. JS实现一位数显示为两位

    使用js脚本实现页面一位数字显示为两位,不足两位前面加“0”. function fix(num, length) { return ('' + num).length < length ? ( ...

  4. 六、yarn运行模式

    简介 spark的yarn运行模式根据Driver在集群中的位置分成两种: 1)yarn-client 客户端模式 2)yarn-cluster 集群模式 yarn模式和standalone模式不同, ...

  5. 微信小程序二维码识别

    目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出 ...

  6. 【C++并发实战】(一)并发基本概念

    什么是并发 并发,最简单的理解就是,两个或者以上的活动同时进行.举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等. 在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动.在以前大多数 ...

  7. mybatis大框架

    MyBatis   开源的数据持久化层框架 实体类与SQL语句之间建立映射关系 一:MyBatis前身是IBatis,本是Apache的一个开源的项目, 基于SQL语法,简单易学 ,是耦合度降低,方便 ...

  8. Hadoop、Hive、Spark 之间关系

    作者:Xiaoyu Ma ,大数据工程师 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗 ...

  9. shell学习笔记--持续记录

    1.#!/bin/sh 使用sh程序来执行下边的代码 #!/bin/more 输出下边的代码 #!/bin/可执行程序 下边的代码将会作为此程序的输入 2. * 可以用来匹配文件名,正则匹配,作为乘法 ...

  10. SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis)

    SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis) 如果你使用的是 Intellij IDEA,请查看: SSM的配置流程详细的写了出来,方便很少 ...