saltstack/salt的state.sls和pillar定义以及使用
2018-03-13 14:47
591 查看
SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理 首先,在master上面定义salt的主目录,默认是在/srv/salt/下面,vim /etc/salt/master:
include: 包含某个文件 比如我新建的一个my_webserver.sls文件内,就可以继承nginx和php相关模块配置,而不必重新编写
ngx_home_dir:
file_roots: base: - /srv/salt dev: - /srv/salt-dev然后,在/srv/salt下面创建top.sls文件(如果有的话,就不用创建了,直接编辑好了) vim top.sls
base: '*':top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名,来进行匹配,再下一级是要执行的state文件
base: '*': #通过正则去匹配所有minion整个top.sls大概的格式就是这个样子,编写完top.sls后,编写state.sls文件;
- nginx #这里都是我自己写的state.sls模块名 这里可以无视 后面会提到
my_app: #通过分组名去进行匹配 必须要定义match:nodegroup
- match: nodegroup
- nginx
'os:Redhat': #通过grains模块去匹配,必须要定义match:grain
- match: grain
- nginx
cd /srv/salt vim nginx.slsnginx.sls内容:
nginx: pkg: #定义使用(pkg state module) - installed #安装nginx(yum安装) service.running: #保持服务是启动状态 - enable: True - reload: True - require: - file: /etc/init.d/nginx - watch: #检测下面两个配置文件,有变动,立马执行上述/etc/init.d/nginx 命令reload操作 - file: /etc/nginx/nginx.conf - file: /etc/nginx/fastcgi.conf - pkg: nginx /etc/nginx/nginx.conf: #绝对路径 file.managed: - source: salt://files/nginx/nginx.conf #nginx.conf配置文件在salt上面的位置 - user: root - mode: 644 - template: jinja #salt使用jinja模块 - require: - pkg: nginx /etc/nginx/fastcgi.conf: file.managed: - source: salt://files/nginx/fastcgi.conf - user: root - mode: 644 - require: - pkg: nginx在当前目录下面(salt的主目录)创建files/nginx/nginx.conf、files/nginx/fastcgi.conf文件,里面肯定是你自己项配置的nginx配置文件的内容啦;使用salt做自动化,一般nginx都是挺熟悉的,这里不做详细解释了测试安装:
root@salt salt # salt 'sa10-003' state.sls nginx test=True ··········这里省略输出信息 Summary ------------ Succeeded: 8 Failed: 0 ------------Total: 8往minion上面进行推送的时候,一般salt ‘sa10-003’ state.sls nginx 这种命令;当然,也可以执行 salt sa10-003 state.highstate 这种命令会默认匹配所有的state.sls模块。其中test=True 是指测试安装 ,也就是不进行实际操作,只是查看测试效果。state的逻辑关系列表:
include: 包含某个文件 比如我新建的一个my_webserver.sls文件内,就可以继承nginx和php相关模块配置,而不必重新编写
root@salt salt # cat my_webserver.sls include: - nginx - phpmatch: 配模某个模块,比如 之前定义top.sls时候的 match: grain match: nodegroup require: 依赖某个state,在运行此state前,先运行依赖的state,依赖可以有多个 比如文中的nginx模块内,相关的配置必须要先依赖nginx的安装
- require: - pkg: nginxwatch: 在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
- watch: - file: /etc/nginx/nginx.conf - file: /etc/nginx/fastcgi.conf - pkg: nginxorder: 优先级比require和watch低,有order指定的state比没有order指定的优先级高,假如一个state模块内安装多个服务,或者其他依赖关系,可以使用
nginx: pkg.installed: - order:1想让某个state最后一个运行,可以用lastPillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。这里可以看出Pillar的一个特点,Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。 另外还可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用等。
定义pillar数据
默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。默认如下:#pillar_opts: Truemaster上配置文件中定义pillar_roots,用来指定pillar的数据存储在哪个目录
pillar_roots: base: - /srv/salt/pillar首先,和state系统一样,pillar也是需要一个top.sls文件作为一个入口,用来指定对象。
base: '*':pillar.sls文件:
- pillar #这里指定了一个pillar模块
############IDC################ {% if grains['ip_interfaces'].get('eth0')[0].startswith('10.10') %} nameservers: ['10.10.9.31','10.10.9.135'] zabbixserver: ['10.10.9.234'] {% else %} nameservers: ['10.20.9.75'] zabbixserver: ['10.20.9.234'] {% endif %} ######## nginx ######## ngx_home_dir: /var/cache/nginx上文的IDC这块是我自己整理的通过ip来划分不同的nameserver等,这里只是放出来参考,在State文件中将可以引用Pillar数据,比如引用
ngx_home_dir:
nginx:在pillar内可以提前将不同的部分根据在pillar内定义好,这样统一配置的时候就可以实现根据机器实际情况配置;比如根据机器的硬件情况配置nginx的worker_processes:
pkg:
- installed
user.present:
- home: {{ pillar['ngx_home_dir'] }}
- shell: /sbin/nologin
- require:
- group: nginx
group.present:
- require: - pkg: nginx
service.running:
- enable: True
- reload: True
- require:
- file: /etc/init.d/nginx
- file: /data1/logs/nginx
- watch:
- file: {{ pillar['ngx_conf_dir'] }}/nginx.conf
- file: {{ pillar['ngx_conf_dir'] }}/fastcgi.conf
- pkg: nginx
······ 后面关于配置就省略了
user nginx; {% if grains['num_cpus'] < 8 %} worker_processes {{ grains['num_cpus'] }}; {% else %} worker_processes 8; {% endif %} worker_rlimit_nofile 65535; ``````````具体配置省略很多定义的时候,都可以使用到pillar来进行自定义相关数据,具体情况可以自行摸索,这里只是个举例。 系统运维工程师:李超
相关文章推荐
- saltstack/salt的state.sls的使用
- saltstack/salt的state.sls的使用
- 自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)
- saltstack grains与pillar使用和订制
- saltstack的state.sls和state.highstate之区别
- SaltStack 使用pillar安装配置管理zabbix
- saltstack state.sls 与 state.highstate
- SaltStack使用教程(六):管理服务妙用pillar实现centos6和centos7通配
- SaltStack job manager及schedule的定义使用
- C语言结构体的定义以及使用
- SaltStack使用教程(五):命令拉取和推送文件
- Saltstack数据系统-Pillar
- saltstack配置应用以及基础用法
- 内联(Inline)的定义以及什么情况下使用内联(转)
- SaltStack使用教程(四):服务管理
- PYthon类的定义、继承以及使用对象(例)
- 自动化管理工具Saltstack之Pillar篇(11)
- SaltStack 配置SLS过程
- SaltStack源码分析之使用logrotate模块
- Apache HTTP Server与Apache Tomcat 的英文定义以及使用区别?