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。。。

posted on 2018-06-05 14:19  运维小学生  阅读(94)  评论(0编辑  收藏  举报

导航