如下的salt states是我们需要安装的,Salt的状态系统文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
一、使用salt来同步一个第一个简单的文件
[root@salt_server ~]
# mkdir /srv/salt/base
[root@salt_server ~]
# cd /srv/salt/base
[root@salt_server base]
# echo "test salt first file" >> first.txt
[root@salt_server base]
# salt 'salt_client1' cp.get_file salt://first.txt /home/first.txt
salt_client1:
/home/first
.txt
[root@salt_server salt]
#
在客户端查看
[root@salt_client1 home]
# pwd
/home
[root@salt_client1 home]
# cat first.txt
test
salt first
file
[root@salt_client1 home]
#
|
1
2
3
4
5
6
7
|
二、来创建第一个文件
---------------------修改master配置文件
[root@salt_server ~]
# vim /etc/salt/master
file_roots:
base:
-
/srv/salt/base
默认这个目录是没有的,我们需要创建一个目录;然后我们需要创建一个文件
top
.sls,如果玩过puppet就知道这个文件就相当puppet文件的site.pp
|
1
2
3
4
5
6
7
8
|
[root@salt_server base]
# pwd
/srv/salt/base
[root@salt_server base]
# mkdir httpd
[root@salt_server base]
# cat top.sls
base:
'salt_client1'
:
- httpd.pack
[root@salt_server base]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
如下解释:
base:命名规则,也可以使用其他的来代替
'salt_client1'
:指的是对象,我们这里设定的是salt_client1可以安装,其他的客户端就不能安装了,如果其他想安装可以用正则匹配
- httpd.pack这个指httpd目录下面的pack.sls 在17.0.5 需要创建这个文件
详解资源文件
apache: 是安装软件的名字
pkg: salt安装包的方式
service:salt服务管理
file
.managed: salt文件管理
[root@salt_server salt]
# mkdir pkgconf
[root@salt_server salt]
# mkdir httpd
[root@salt_server httpd]
# pwd
/srv/salt/httpd
[root@salt_server httpd]
# cat pack.sls 如果换成init就不需要在top.sls中跟后缀文件了 直接写成httpd即可。
apache:
pkg:
- name: httpd
- installed
service:
- name: httpd
- running
- reload: True
-
watch
:
-
file
:
/etc/httpd/conf/httpd
.conf
/etc/httpd/conf/httpd
.conf:
file
.managed:
-
source
: salt:
//httpd/httpd
.conf 文件需要存在
- user: root
- group: root
- mode: 644
- backup: minion
[root@salt_server httpd]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
扩展以后的
apache:
pkg:
- name: httpd
- installed
service:
- name: httpd
- running
- reload: True
-
watch
:
- pkg: apache
-
file
:
/etc/httpd/conf/httpd
.conf
- user: apache
user.present:
- uid: 48
- gid: 48
- shell:
/sbin/nologin
- require:
- group: apache
group.present:
- gid: 48
- require:
- pkg: apache
/etc/httpd/conf/httpd
.conf:
file
.managed:
-
source
: salt:
//httpd/httpd
.conf
- user: root
- group: root
- mode: 644
- backup: minion
[root@salt_server salt]
#
|
1
2
3
4
5
6
7
8
9
|
解释下这pack.sls这个YAML文件
第1行:apache 表示申明这个ID:
第2,5行:调用了pkg、service 这两个state,pkg使用系统本地的软件包管理器管理将要安装的软件,service管理系统守护进程。
第3,5,6,7行:是调用了函数,这个函数定义了包和服务将要达到的状态,这里表示包包的名字以及包会被安装以及安装后会启动。
我们需要注意一个问题:
source
: salt:
//httpd/httpd
.conf 需要保证
source
下面这个httpd.conf文件是可用的
pkg、service 下面的子文件内容是表示
function
,这个
function
定义了需要安装的服务,
id
,状态
require 这个参数我们其实也可以在这个sls文件中调用,它确保了apache服务只有在成功安装软件包后才会启动。
service 这个state下面的
watch
和require基本相似,都能保证被监视或需要的state在自己之前执行,但是
watch
还有其他作用。
|
1
2
3
4
5
|
测试:
[root@salt_server salt]
# salt 'salt_client1' state.highstate test=True
[root@salt_server salt]
# salt 'salt_client1' state.highstate -v
也可以在客户端拉去
[root@salt_client1 ~]
# salt-call state.highstate
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
安装
ssh
-clients的第一种方法:
如下是成功用salt来安装
ssh
-clients安装代码:
[root@salt_server
ssh
]
# vim ssh.sls
sshd:
pkg:
- name: openssh-server这里也可以选择openssh-clients,这是需要安装的名字
- installed
user.present:
- uid: 74
- gid: 74
- shell:
/sbin/nologin
- require:
- group: sshd
group.present:
- gid: 74
- require:
- pkg: sshd
service:
- name: sshd
- running
- reload: True
|
1
2
3
4
5
6
7
8
9
|
############如果没有文件的存在 可以不加:
/etc/ssh/sshd_config
:
file
.managed:
-
source
: salt:
//ssh/sshd_config
- user: root
- group: root
- mode: 644
- backup: minion
[root@salt_server
ssh
]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
|
安装
ssh
-clients的第二种方法:
当以一种可扩展的方式建立Salt States时,需要用到多个SLS文件。上面的例子是在单一的SLS文件中,不过可以用两个或多个文件组合成一个状态树State Tree。
在第二个方法中我们需要注意一个参数
include 参数 是声明的意思
如下案例是: SSH State Tree
[root@salt_server
ssh
]
# pwd
/srv/salt/base/ssh
[root@salt_server
ssh
]
# tree
├── init.sls
├── server.sls
├── sshd_config
└──
ssh
.sls.bak
|
0 directories, 5 files
[root@salt_server ssh]#
如下两个配置文件
1
2
3
4
5
6
7
8
9
10
11
12
|
init.sls配置文件:
[root@salt_server
ssh
]
# cat init.sls
openssh-clients:
pkg.installed
/etc/ssh/sshd_config
:
file
.managed:
- user: root
- group: root
- mode: 644
- require:
- pkg: openssh-clients
[root@salt_server
ssh
]
#
|
server.sls配置文件:
[root@salt_server ssh]# cat server.sls
include:
- ssh
openssh-server:
pkg.installed
sshd:
service.running:
- require:
- pkg: openssh-clients
- pkg: openssh-server
- file: /etc/ssh/sshd_config
1
2
3
4
5
6
7
8
9
|
/etc/ssh/sshd_config
:
file
.managed:
- user: root
- group: root
- mode: 644
# - source: salt://ssh/sshd_config
- require:
- pkg: openssh-server
[root@salt_server
ssh
]
#
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
然后我们看下
top
文件
[root@salt_server base]
# pwd
/srv/salt/base
[root@salt_server base]
# cat top.sls 需要注意的是在ssh文件中不要跟init/server
base:
'*'
:
-
ssh
[root@salt_server base]
# tree ssh/
ssh
/
├── init.sls
├── server.sls
├── sshd_config
└──
ssh
.sls.bak
0 directories, 5 files
[root@salt_server base]
#
|
1
2
|
使用渲染器配置apache:
我们在我们原来的基础上来修改我们的pack.sls文件
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
首先先备份:
[root@salt_server httpd]
# cp -a pack.sls pack.sls.bak
[root@salt_server httpd]
# pwd
/srv/salt/base/httpd
[root@salt_server httpd]
#
如下是渲染配置文件的状态,需要注意YMAL格式不要错误, 在如下的案例中其中调用了GRAINS模板;
[root@salt_server httpd]
# cat /srv/salt/base/httpd/pack.sls
apache:
pkg.installed:
{%
if
grains[
'os'
] ==
'CentOS'
%}
- name: httpd
{% endif %}
service.running:
{%
if
grains[
'os'
] ==
'CentOS'
%}
- name: httpd
{% endif %}
-
watch
:
- pkg: apache
# - file: /etc/httpd/conf/httpd.conf
- user: apache
user.present:
- uid: 48
- gid: 48
- shell:
/sbin/nologin
- require:
- group: apache
group.present:
- gid: 48
- require:
- pkg: apache
/etc/httpd/conf/httpd
.conf:
file
.managed:
# - source: salt://httpd/httpd.conf
- user: root
- group: root
- mode: 644
- backup: minion
[root@salt_server httpd]
#
测试是否正常“
[root@salt_server httpd]
# salt 'salt_client1' state.highstate test=True
如果报错可以在客户端minion上如下debug
[root@salt_client1 ~]
# salt-call state.highstate -l debug
minion也可以以前台调试模式启动:salt-minion -l debug
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
扩展httpd
/pack
.sls
[root@salt_server httpd]
# echo www.opsnotes.net >> index.html
在配置文件最后添加 如下 几行
[root@salt_server httpd]
# tail -n 7 pack.sls
/var/www/html/index
.html:
file
:
- managed
-
source
: salt:
//httpd/index
.html
- require:
- pkg: httpd
[root@salt_server httpd]
# pwd
/srv/salt/base/httpd
[root@salt_server httpd]
#
先在一台机器上测试:
[root@salt_server httpd]
# salt 'salt_client1' state.highstate test=True
更新:
[root@salt_server httpd]
# salt '*' state.highstate
查看文件是否更新成功:
[root@salt_server httpd]
# salt -L 'salt_client1,salt_client2' cmd.run 'ls /var/www/html'
salt_client2:
index.html
salt_client1:
index.html
[root@salt_server httpd]
#
|
本文转自devilangel 51CTO博客,原文链接:http://blog.51cto.com/devliangel/1434515,如需转载请自行联系原作者