一、用top.sls文件管理状态文件
highstate是state模块的一个函数,highstate函数是通过top.sls文件作为作为入口对模块和主机进行管理的,下面首先学习用highstate函数配合top.sls文件来管理状态文件。以上一篇的nginx为例:
创建nginx文件夹
[root@29-server]# mkdir /srv/salt/nginx
[root@29-server]# tree /srv/salt/nginx/
[root@29-server salt]# tree /srv/salt/
/srv/salt/
├── apache.sls
├── _modules
│ └── hello.py
├── nginx
│ ├── nginx.j2
│ ├── nginx.sls
│ └── test_vhost.conf
└── top.sls
2 directories, 6 files
注意调整一下和nginx.sls文件中source文件的路径。
[root@29-server salt]# cat /srv/salt/top.sls
base:
"minion-one":
- nginx.nginx
执行highstate命令
[root@29-server]# salt "*" state.highstate
二、状态文件的拆分和复用
安装和管理Nginx的模块中包含了状态管理文件nginx.sls、模板文件nginx.j2和普通文本文件test_vhost.conf,所有这些文件都放在同一个目录下不便于区分和管理。另外,单一的nginx.sls也不能清晰地展现出Nginx这个模块都做了哪些操作,从便于书写和层次清晰的角度出发,需要改变现有这种结构。
先把模块的目录结构化,对应的文件放入对应的目录:
[root@29-server salt]# mkdir /srv/salt/nginx/{templates,files}
[root@29-server salt]# mv /srv/salt/nginx/nginx.j2 /srv/salt/nginx/templates/
[root@29-server salt]# mv /srv/salt/nginx/test_vhost.conf /srv/salt/nginx/files/
对nginx.sls进行拆分:
用init文件做入口文件来包含其他文件:
[root@29-server nginx]# cat init.sls
include:
- .install_nginx
- .nginx_running
- .nginx_conf
- .vhost_conf
安装nginx:
[root@29-server nginx]# cat install_nginx.sls
install_nginx:
pkg.installed:
- name: nginx
nginx服务管理:
[root@29-server nginx]# cat nginx_running.sls
nginx_running:
service.running:
- name: nginx
- enable: Ture
- require:
- pkg: install_nginx
- watch:
- file: nginx_conf
- file: vhost_conf
nginx配置模板文件的管理:
[root@29-server nginx]# cat nginx_conf.sls
nginx_conf:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://nginx/templates/nginx.j2
- user: root
- group: root
- template: jinja
- mode: 644
nginx虚拟主机文件的管理:
[root@29-server nginx]# cat vhost_conf.sls
vhost_conf:
file.managed:
- name: /etc/nginx/conf.d/nginx.conf
- source: salt://nginx/files/test_vhost.conf
- user: root
- group: root
- mode: 644
把这些具体的功能都单独写到对应文件的好处是可以方便地从文件名看出Nginx这个模块进行了哪些操作,并且可以方便地修改配置,现在让我们再看一下Nginx模块的目录结构:
[root@29-server nginx]# tree /srv/salt/nginx/
/srv/salt/nginx/
├── files
│ └── test_vhost.conf
├── init.sls
├── install_nginx.sls
├── nginx_conf.sls
├── nginx_running.sls
├── nginx.sls
├── templates
│ └── nginx.j2
└── vhost_conf.sls
2 directories, 8 files
修改top.sls文件(Nginx模块的文件夹里面有init.sls,Salt会默认加载init.sls,不需要写成nginx.init这种格式):
[root@29-server nginx]# cat /srv/salt/top.sls
base:
"minion-one":
- nginx
执行命令:
salt "*" state.highstate
安装的结果和修改之前是一样的,但是现在的目录结构更为清晰可读。