小陆同学

python 中文名:蟒蛇,设计者:Guido van Rossum

导航

salt-api 获取服务器信息,minion批量执行cmd命令

import requests
import json
try:
    import cookielib
except:
    import http.cookiejar as cookielib

# 使用urllib2请求https出错,做的设置
import ssl
context = ssl._create_unverified_context()


class SaltAPI(object):
    """
    定义salt api接口的类
    初始化获得token
    """
    def __init__(self,):
        self.url = "https://192.168.1.165:8001/"
        self.username = "XXX"
        self.password = "XXX"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36",
            "Content-type": "application/json"
            # "Content-type": "application/x-yaml"
        }
        self.params = {'client': 'local', 'fun': '', 'tgt': ''}
        self.login_url = self.url + "login"
        self.login_params = {'username': self.username, 'password': self.password, 'eauth': 'pam'}
        self.token = self.get_data(self.login_url, self.login_params)['token']
        self.headers['X-Auth-Token'] = self.token

    def get_data(self, url, params):
        send_data = json.dumps(params)
        request = requests.post(url, data=send_data, headers=self.headers, verify=False)
        response = request.json()
        result = dict(response)
        return result['return'][0]

    def remote_execution_module(self, tgt, fun, arg):
        """
            远程执行模块,有参数
        :param tgt: minion list
        :param fun: 模块
        :param arg: 参数
        :return: dict, {'minion1': 'ret', 'minion2': 'ret'}
        """
        params = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg}
        return self.get_data(self.url, params)

    def salt_command(self, tgt, method, arg=None):
        """远程执行命令,相当于salt 'client1' cmd.run 'free -m'"""
        if arg:
            params = {'client': 'local', 'fun': method, 'tgt': tgt, 'arg': arg}
        else:
            params = {'client': 'local', 'fun': method, 'tgt': tgt}
        # print('命令参数: ', params)
        result = self.get_data(self.url, params)
        return result

# 获取信息
@task
def push_host_by_salt_tasks():
    salt = SaltAPI()
    minions_list = [
        'cpu_model',
        'fqdn_ip4',
        'os',
        'disks',
        'gpus',
        'id',
        'ipv4',
        'kernel',
        'localhost',
        'machine_id',
        'master',
        'num_cpus',
        'saltpath',
        'selinux',
        'server_id',
        'virtual',
        'machine_id',
        'path',
        'swap_total',
        'systemd',
        'username',
        'kernelrelease',
    ]
    ret = salt.remote_execution_module('*', 'grains.item', minions_list)
    return Server_Asset_Record.Excu.insert(ret)
salt '*' grains.items   # 获取服务器参数

posted on 2019-12-13 22:44  小陆同学  阅读(600)  评论(0编辑  收藏  举报