以下用一些实例说明salt一些常用的模块,进一步熟悉salt使用。
模块参考地址:http://docs.saltstack.cn/zh_cn/latest/ref/states/all/index.html
pkg模块:
1、安装一个软件
1
2
3
<code>vim:</code>
<code> </code><code>pkg.installed:</code>
<code> </code><code>- name: vim-enhanced</code>
2、安装多个软件
4
5
<code> </code><code>- names: </code><code>#多个值时,要修改为复数,names</code>
<code> </code><code>- vim-enhanced</code>
<code> </code><code>- lrzsz</code>
service模块:
1、安装apache,并启动
6
7
8
<code>httpd:</code>
<code> </code><code>- name: httpd</code>
<code> </code><code>service.running:</code>
<code> </code><code>- </code><code>enable</code><code>: true</code>
<code> </code><code>- require: </code>
<code> </code><code>#一个声明,用于定义状态之间的依赖,说明httpd如果安装了,才执行service.running模块</code>
<code> </code><code>- pkg: httpd </code><code># pkg代表用的什么模块</code>
2、将配置文件分发到apache服务器
<code>file</code><code>.managed:</code>
<code> </code><code>- name: </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//apache/conf/httpd</code><code>.conf</code>
3、如果apache配置文件有变动,就重新加载配置
9
10
11
12
13
14
15
16
<code> </code><code>file</code><code>.managed:</code>
<code> </code><code>- name: </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//test/httpd</code><code>.conf</code>
<code> </code><code>- require:</code>
<code> </code><code>- pkg: httpd</code>
<code> </code><code>- reload: true</code>
<code> </code><code>- </code><code>watch</code><code>: </code>
<code> </code><code>#监控httpd.confp文件是否发生变化,是就重新加载httpd服务</code>
<code> </code><code>- </code><code>file</code><code>: </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>
<code> </code><code>- require: </code>
cmd模块:
1、编译安装nginx
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<code>nginx_source:</code>
<code> </code><code>- name: </code><code>/tmp/nginx-1</code><code>.6.2.</code><code>tar</code><code>.gz</code>
<code> </code><code>- unless: </code><code>test</code> <code>-f </code><code>/tmp/nginx-1</code><code>.6.2.</code><code>tar</code><code>.gz </code>
<code> </code><code>#在这里用到了unless,就是做了个判断,判断有没有这个文件,如果没有就执行nginx_source id,否则跳过</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//test/nginx-1</code><code>.6.2.</code><code>tar</code><code>.gz</code>
<code>nginx_unzip:</code>
<code> </code><code>cmd.run:</code>
<code> </code><code>- cwd: </code><code>/tmp</code>
<code> </code><code>- names: </code><code>tar</code> <code>zxf nginx-1.6.2.</code><code>tar</code><code>.gz</code>
<code> </code><code>- unless: </code><code>test</code> <code>-d </code><code>/tmp/nginx-1</code><code>.6.2</code>
<code> </code><code>- </code><code>file</code><code>: nginx_source</code>
<code>nginx_pkg:</code>
<code> </code><code>- names:</code>
<code> </code><code>- gcc</code>
<code> </code><code>- </code><code>make</code>
<code> </code><code>- openssl-devel</code>
<code> </code><code>- pcre-devel</code>
<code> </code><code>- zlib-devel</code>
<code>nginx_install:</code>
<code> </code><code>- cwd: </code><code>/tmp/nginx-1</code><code>.6.2</code>
<code> </code><code>- name: .</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/nginx1</code><code>.6 && </code><code>make</code> <code>&& </code><code>make</code> <code>install</code> <code>&& </code><code>/usr/local/nginx1</code><code>.6</code><code>/sbin/nginx</code>
<code> </code><code>#这一块为什么不用names呢,我也想用,可是他不是按顺序执行的,而是随机执行里面的命令的,容易造成了混乱。</code>
<code> </code><code>- require: </code>
<code> </code><code>#依赖两个id状态,也就是必须有/tmp/nginx-1.6.2这个目录,和安装了gcc、make、pcre等这些依赖包,才执行nginx_install这个id</code>
<code> </code><code>- cmd: nginx_unzip </code>
<code> </code><code>- pkg: nginx_pkg</code>
<code> </code><code>- unless: </code><code>test</code> <code>-d </code><code>/usr/local/nginx1</code><code>.6</code>
在这里介绍编译安装nginx思路,其中用到了file、cmd.run、pkg模块。
file模块:
1、文件分发
<code>file_cp:</code>
<code> </code><code>- name: </code><code>/etc/httpd/conf/httpd</code><code>.conf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//test/httpd</code><code>.conf</code>
2、目录分发
<code>tmp_cp:</code>
<code> </code><code>file</code><code>.recurse:</code>
<code> </code><code>- name: </code><code>/tmp</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//tmp</code>
3、创建目录并赋予权限
<code>/opt/tmp</code><code>:</code>
<code> </code><code>file</code><code>.directory:</code>
<code> </code><code>- user: nginx</code>
<code> </code><code>- group: nginx</code>
<code> </code><code>- file_mode: 744</code>
<code> </code><code>- makedirs: true</code>
user模块:
1、创建用户nginx
<code>create_user:</code>
<code> </code><code>user.present: </code><code>#用户不存在则创建,否则管理用户属性</code>
<code> </code><code>- name: nginx</code>
<code> </code><code>#- uid: 1501</code>
<code> </code><code>#- gid: 1501</code>
<code> </code><code>- createhome: false</code>
<code> </code><code>- shell: </code><code>/sbin/nologin</code>
<code> </code><code>#- groups:</code>
<code> </code><code># - nginx</code>
2、删除用户nginx
<code>del_user:</code>
<code> </code><code>user.absent:</code>
<code> </code><code>- name: abc</code>
group模块:
1、创建组abc
<code>create_group:</code>
<code> </code><code>group.present:</code>
<code> </code><code>- addusers: </code><code>#添加哪些用户到此组</code>
<code> </code><code>- user1</code>
<code> </code><code>- user2</code>
<code> </code><code>#- delusers: #从此组中删除哪些用户</code>
<code> </code><code># - u1</code>
<code> </code><code># - u2</code>
2、删除组abc
<code>del_group:</code>
<code> </code><code>group.absent:</code>
cron模块:
1、添加定时任务计划
<code>script_cron:</code>
<code> </code><code>cron</code><code>.present:</code>
<code> </code><code>- name: </code><code>/bin/bash</code> <code>/opt/tmp/test</code><code>.sh</code>
<code> </code><code>- user: root</code>
<code> </code><code>- minute: 01</code>
<code> </code><code>- hour: 0</code>
注:minute:分
hour:时
daymonth:日
month:月
dayweek:周