saltstack
一、saltstack类型
1. 基于ssh的saltstack:salt-ssh
安装:yum install salt-ssh
配置文件位置:vim /etc/salt/roster
# Sample salt-ssh config file #web1: # host: 192.168.42.1 # The IP addr or DNS hostname # user: fred # Remote executions will be executed as user fred # passwd: foobarbaz # The password to use for login, if omitted, keys are used # sudo: True # Whether to sudo to root, not enabled by default #web2: # host: 192.168.42.2 c2: host: 192.168.31.101 user: root passwd: 123456
2. 命令:
salt-ssh 'c2' cmd.run 'df' -i
c2 : 配置文件中定义的主机,也可以*表示所有主机
cmd.run : 在客户端执行命令 和 -r作用等同
-i : 接受加密公钥指纹信息
流程分析:
- 启动命令时python脚本 - 读取默认配置文件 obj = salt.cli.ssh.SaltSSH() obj.run() - 执行命令 obj = SSH(配置文件) obj.run() - 创建进程间共享的队列:[] - 读取配置文件中的主机,给每个符合条件的主机创建一个进程: host = next(target_iter) routine = MultiprocessingProcess(target=self.handle_routine, args=args) routine.start() 每个进程执行得到结果后,讲结果放入队列中 ret = self.handle_routine(...) - 触发Single - 触发Shell - 触发terminal que.put(ret)
3. 自定义:
from salt.client.ssh.shell import Shell shell = Shell({'_ssh_version': (4, 9), 'ignore_host_keys': True}, '192.168.11.176', 'root', 22, '123', timeout=60) result = shell.exec_cmd('ls') print(result)
4. 预留python接口:
注意python2/python3 代码格式
from salt.client.ssh.client import SSHClient client = SSHClient() ret = client.cmd('*', 'cmd.run', ('ls',), 30) print(ret)
5. salt - ssh '*' grains.items
用于获取服务器的静态信息
自定义key:
/srv/salt/_grains/xx.py
- grains预留Python接口:
from salt.client.ssh.client import SSHClient client = SSHClient() ret = client.cmd('*', 'grains.items') print(ret)
6. salt-ssh '*' pillar.items
用于获取服务器的动态信息
自定义pillar项目
- 方式一:
自定义sls脚本文件
/srv/pillar/top.sls base: '*': - xxx /srv/pillar/xxx.sls x1: { % if grains['os_family'] == 'Debian' %} xxx1: 111111111111111 { % elif grains['os_family'] == 'RedHat' %} xxx1: 222222222222222 { % elif grains['os'] == 'Arch' %} xxx1: 333333333333333 { % endif %}
- 方式二
使用python脚本实现
基于c/s架构的saltstack:saltstack。。。