• 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   # 获取服务器参数
  • 相关阅读:
    第二章IntelliJ IDEA 安装目录的核心文件讲解
    第一章首次运行 IntelliJ IDEA 示例
    struts json ajax整理
    关于struts2文件下载
    mybatis深入资料
    MyBatis获取插入记录的自增长字段值
    好久没有更新博客了,今天更新了几篇
    枚举Enum 的常用方法
    angular js中ng-model时间格式化
    input框输入完回车即可查询事件
  • 原文地址:https://www.cnblogs.com/lutt/p/12037631.html
Copyright © 2020-2023  润新知