在使用salt配置一些主机的时候会经常的用到SLS文件树,这个目录我们可以在master上的/etc/salt/master文件中进行修改,默认的路径如下
file_roots:
base:
- /srv/salt/
通常是在/srv/salt之下,然后也有应用与Pillar系统的文件树,大体的结构相同.
之前提到过saltstack的脚本是使用YAML格式来渲染的,YAML是python中指代字典类型数据结构的结构序列化格式,基本上的结构就是键值对的形式,需要注意的是SLS文件中每个小节的key称为ID,这个ID必须全局唯一不然会出现错误。
首先无论是在state或者是pillar的系统中,都会有一个名字叫做top.sls的文件,这个文件指定了环境和给Minion端提供的SLS文件
例如这个配置openstack的top.sls文件
base:
- open.pkginstall.pkg
- open.chrony.chrony
- open.mysql.mysql
- open.rabbitMQ.rabbitMQ
- open.memcached.memcached
- open.keystone.startup
- open.glance.glance
- open.nova.nova
- open.neutron.neutron
这个目录的结构大体如下
.
├── chrony
│ └── chrony.sls
├── files
│ ├── admin-openrc
│ ├── daxingsb.sql
│ ├── demo-openrc
│ ├── glance-api.conf
│ ├── keystone
│ │ ├── httpd.conf
│ │ ├── keystone.conf
│ │ └── wsgi-keystone.conf
│ ├── memcached
│ ├── neutron.conf
│ ├── nova_compute.conf
│ ├── nova.conf
│ └── openstack.cnf
├── glance
│ └── glance.sls
├── keystone
│ ├── auth.sls
│ ├── keystone.sls
│ ├── keyuser.sls
│ └── startup.sls
├── memcached
│ └── memcached.sls
├── mysql
│ └── mysql.sls
├── neutron
│ ├── neutron_compute.sls
│ ├── neutron_controller.sls
│ └── neutron.sls
├── nova
│ ├── nova-compute.sls
│ └── nova.sls
├── pkginstall
│ └── pkg.sls
├── rabbitMQ
│ └── rabbitMQ.sls
└── startup.sls
base之下指明了所有需要执行的SLS文件。
STATE模式下的配置管理
include块的使用
通常需要引用其他的SLS文件可以使用这个模块
例如
include:
- pip
- django-install
然后需要注意的是include是一个顶级的声明在一个脚本中只能出现一次,而且所下属的模块必须存在。
requisite的使用
通过requisite的使用我们可以改变执行时的顺序。
require
最简单的就是require,表示一种依赖性,需要什么作为这个模块执行的先决条件
比如说
apache_service:
service.running:
- name: httpd
- require:
- pkg: httpd
以上表明要开启httpd服务需要先安装httpd,在平时的使用中state会保证配置过程的正确。
watch
这个模块的作用是发现watch之下的项目有什么变动之后,执行一个指定动作,比如说修改apache的配置文件之后重新启动
service:
- running
- watch:
- file: apache2
use
use是类似requisite一样的调用,但是use的state不会将调用项目的requisite继承过来,比如说
apache_conf:
file:
- managed
- name: /etc/httpd/httpd.conf
- user: root
- group: root
- mode: 755
- watch:
- service: httpd
mysql_conf:
file:
- managed
- name: /etc/mysql/my.cnf
- use:
-file: apache_conf
- watch:
- service: mysql
这个mysql_conf模块可以安全的将apache的配置文件继承过来,同时不会触发httpd服务的重启。
prereq
当一个state在使用prereq的时候,salt会对指定关联的项目运行test模式来预计是否会进行变更,如果有变更则这个模块才会执行。
conffile:
file:
- httpd.conf
shutdown:
service:
- dead
- name: httpd
- prereq:
- file: conffile
以上的脚本就是当httpd的配置文文件如果被修改触发prerq,然后将服务关闭