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. 计算细胞数【BFS】

    问题描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数. 输入格式 2行:第1行为两个整数 mm, nn, 代表矩阵 ...

  2. Cheatsheet: 2017 06.01 ~ 06.30

    .NET Porting a .NET Framework library to .NET Core Performance Improvements in .NET Core High-perfor ...

  3. 十三、栅栏CyclicBarrier

    一.简介 栅栏CyclicBarrier的作用就是等待一组线程都准备好了,然后执行某个任务.这与CountDownLatch很相似. 但是CyclicBarrier和CountDownLatch是有区 ...

  4. 撩课-Python-每天5道面试题-第6天

    一. 函数的概念是什么? 在Python中如何定义?使用场景是什么? 概念 写了一段代码实现了某个小功能; 然后把这些代码集中到一块, 起一个名字; 下一次就可以根据这个名字再次使用这个代码块, 这就 ...

  5. 《JavaWeb从入门到改行》分页功能的实现

    @目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+Base ...

  6. 洛谷P4717 【模板】快速沃尔什变换(FWT)

    题意 题目链接 Sol 背板子背板子 #include<bits/stdc++.h> using namespace std; const int MAXN = (1 << 1 ...

  7. apply的妙用

    有一个很常见的问题"call和apply的区别是什么?",大家都知道答案:它们的区别仅在于接受参数的方式不同,传递给call的第二个参数必须逐个列举出来,而传递给apply的第二个 ...

  8. 使用匿名函数给setInterval()传递参数

    在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的.这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来 ...

  9. Http Status Code 套餐合集(转载)

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 100(继续)请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议)请求者已要 ...

  10. 关于AJAX的一些事

    在JQ中运用AJAX的操作是很舒服的一件事,一直以来我对他都有个错误的认识,直到遇见了问题才把他研究个透彻. 下面贴出两种AJAX的写法,当然都是正确的. 其一: $.ajax({ type: 'po ...