如下的salt states是我们需要安装的,Salt的状态系统文件
一、使用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]#
二、来创建第一个文件 ---------------------修改master配置文件 [root@salt_server ~]# vim /etc/salt/master file_roots: base: - /srv/salt/base 默认这个目录是没有的,我们需要创建一个目录;然后我们需要创建一个文件top.sls,如果玩过puppet就知道这个文件就相当puppet文件的site.pp
[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]#
如下解释: 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]#
扩展以后的 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]#
解释下这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还有其他作用。
测试: [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
安装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
############如果没有文件的存在 可以不加: /etc/ssh/sshd_config: file.managed: - source: salt://ssh/sshd_config - user: root - group: root - mode: 644 - backup: minion [root@salt_server ssh]#
安装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]#
如下两个配置文件
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
/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]#
然后我们看下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]#
使用渲染器配置apache: 我们在我们原来的基础上来修改我们的pack.sls文件
首先先备份: [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
扩展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]#