Call multiple states(调用多个states)
你可以在一个声明的ID下面定义多个state语句,例如,我们可以快速的修改webserver.sls,并且如果apache没有运行将其启动。
httpd:
pkg: #state类型声明
- installed
service: #state类型声明
- running
- require:
- pkg: httpd
在运行state.highstate之前,尝试停止apache,并且再次观察其输出内容。
Require other states(依赖其他state)
现在我们已经安装了apache,并且处于工作状态,让我们添加一个HTML文件来定制我们的网站。将下面的内容添加进你的webserver/init.sls文件中:
httpd:
pkg:
- installed
service:
- running
- require:
- pkg: httpd
/var/www/html/index.html: # 声明一个ID
file: # 声明state
- managed # state中的函数名
- source: salt://webserver/index.html # 函数的参数
- require: # 声明requisite
- pkg: httpd # requisite的引用
第9行声明一个新的ID,在这个例子中它是我们自定义的HTML文件要安装的位置(Note:在不同的操作系统或发行版上apache服务的默认位置可能不同,/srv/www也可能是个好位置。)
第10行声明使用的state。
第11行声明使用第十行中的state的函数名。这个managed函数将从master上下载文件,并且按照指定的位置进行安装。
第12行是函数的参数,在本例中利用managed函数中的source参数,指定需要从master上下载的文件的路径和名称
第13行是require的声明
第14行是require所要引用的state和ID,在这个例子它值的例子开头处的那个ID,这个声明告诉salt在不安装apache之前不要安装HTML文件
接下来,创建index.html文件,并且保存在webserver目录下:
<html>
<head><title>Salt rocks</title></head>
<body>
<h1>This file brought to you by Salt</h1>
</body>
</html>
最后,在调用一次state.highstate,minion将获取和执行highstate以及从master的文件服务器上获取我们的HTML文件
salt '*' state.highstate
现在验证apache中你自定义的HTML吧!
http://192.168.181.17
require VS watch
现在有两个依赖的声明,"require和watch",不是所有的state都支持"watch"。service state
不支持"watch"并且不支持通过观察一个条件进行重新启动一个服务
例如,如果你使用salt配置安装apache的虚拟主机,当配置文件发送改变时要重启apache,你可以修改之前的例子:
/etc/httpd/extra/httpd-vhosts.conf:
file:
- managed
- source: salt://webserver/httpd-vhosts.conf
apache:
pkg:
- installed
service:
- running
- watch:
- file: /etc/httpd/extra/httpd-vhosts.conf
- require:
- pkg: apache