91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中如何使用saltstack api

發布時間:2021-10-18 15:40:20 來源:億速云 閱讀:180 作者:小新 欄目:編程語言

這篇文章主要介紹python中如何使用saltstack api,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

# -*- coding:utf-8 -*-
import sys
import json
import pycurl
from io import BytesIO

class PyCurl(object):
    def __init__(self, url, **kwargs):
        # 傳入url地址
        self.url = url
        # 取出header相關信息
        self.header = kwargs.get("header", None)
        # 創建一個curl對象
        self.curl = pycurl.Curl()
        # setopt 來設置一些請求選項
        # 指定請求的URL
        self.curl.setopt(self.curl.URL, self.url)
        # 設置代理瀏覽器
        self.curl.setopt(self.curl.HEADER, False)
        # 設置請求方式
        self.curl.setopt(self.curl.POST, True)
        # 設置https方式
        self.curl.setopt(pycurl.SSL_VERIFYPEER, 0)
        self.curl.setopt(pycurl.SSL_VERIFYHOST, 0)
        # 判斷header是否存在
        if self.header:
            # 設置模擬瀏覽器
            self.curl.setopt(self.curl.HTTPHEADER, self.header)

    def request(self, data=None, timeout=None):
        # 判斷對象類型 是否為 str
        if isinstance(data, str):
            # 將數據提交
            self.curl.setopt(pycurl.POSTFIELDS, data)
        header_buf = BytesIO()
        body_buf = BytesIO()
        # 強制獲取新的連接,即替代緩存中的連接
        self.curl.setopt(self.curl.FRESH_CONNECT, True)
        # 完成交互后強制斷開連接,不重用
        self.curl.setopt(self.curl.FORBID_REUSE, True)
        if str(timeout).isdigit() and timeout > 0:
            # 設置timeout超時時間
            self.curl.setopt(self.curl.TIMEOUT, timeout)
        # 將返回的HTTP HEADER定向到回調函數header_buf
        self.curl.setopt(self.curl.HEADERFUNCTION, header_buf.write)
        # 將返回的內容定向到回調函數body_buf
        self.curl.setopt(self.curl.WRITEFUNCTION, body_buf.write)
        try:
            # 服務器返回信息
            self.curl.perform()
        except pycurl.error:
            return False
        # 狀態碼
        http_code = self.curl.getinfo(self.curl.HTTP_CODE)
        # 關閉連接
        self.curl.close()
        # 返回狀態碼 header body
        return {"http_code": http_code, "header": header_buf.getvalue(), "body": body_buf.getvalue(), "url": self.url}

class SaltApi(object):

    def __init__(self, **kwargs):

        # 設置超時時間
        self.timeout = kwargs.get("timeout", 300)
        # 設置頭信息
        self.header = kwargs.get("header", ["Content-Type:application/json"])
        # 獲取url
        self.__url = "https://192.168.44.20:8888"

        # 獲取
        self.__username = "saltapi"
        self.__password = "password"

    # token id 獲取
    def token_id(self):
        obj = {'eauth': 'pam', 'username': self.__username, 'password': self.__password}
        result = self.post(prefix="/login/", **obj)
        if result:
            try:
                self.__token_id = result['return'][0]['token']
            except KeyError:
                raise KeyError
        print('##',self.__token_id,'##')
        return self.__token_id

    def post(self, prefix="/", token=None, **data):

        # url拼接
        url = self.__url + prefix
        print (data)
        # 實例化
        self.header.append(str(token))
        curl = PyCurl(url, header=self.header)
        # 發起請求
        result = curl.request(data=json.dumps(data), timeout=self.timeout)

        # 判斷值
        if not result:
            return result
        # 判斷狀態碼是否等于200
        if result["http_code"] != 200:
            self.response = "response code %s".format(result["info"]["http_code"])
            return self.response
        result = json.loads(result["body"].decode())

        # 判斷是否有error
        if "error" in result and result["error"]:
            self.response = "%s(%s)" % (result["error"]["data"], result["error"]["code"])
            return self.response
        # 返回正確的數據
        return result

    def all_key(self):
        '''
        獲取所有的minion_key
        '''
        token = 'X-Auth-Token:%s' % self.token_id()
        obj = {'client': 'wheel', 'fun': 'key.list_all'}
        content = self.post(token=token, **obj)
        # 取出認證已經通過的
        minions = content['return'][0]['data']['return']['minions']
        # print('已認證',minions)
        # 取出未通過認證的
        minions_pre = content['return'][0]['data']['return']['minions_pre']
        # print('未認證',minions_pre)
        return minions, minions_pre

    def accept_key(self, node_name):
        '''
        如果你想認證某個主機 那么調用此方法
        '''
        token = 'X-Auth-Token:%s' % self.token_id()
        obj = {'client': 'wheel', 'fun': 'key.accept', 'match': node_name}
        content = self.post(token=token, **obj)
        print (content)
        ret = content['return'][0]['data']['success']
        return ret

    # 刪除認證方法
    def delete_key(self, node_name):
        obj = {'client': 'wheel', 'fun': 'key.delete', 'match': node_name}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)

        ret = content['return'][0]['data']['success']
        return ret

    '''
    tgt_type --
    The type of tgt. Allowed values:
        glob - Bash glob completion - Default
        pcre - Perl style regular expression
        list - Python list of hosts
        grain - Match based on a grain comparison
        grain_pcre - Grain comparison with a regex
        pillar - Pillar data comparison
        pillar_pcre - Pillar data comparison with a regex
        nodegroup - Match on nodegroup
        range - Use a Range server for matching
        compound - Pass a compound match string
        ipcidr - Match based on Subnet (CIDR notation) or IPv4 address.

    Changed in version 2017.7.0: Renamed from expr_form to tgt_type

    可以針對各種類型進行執行響應的命令 

    sapi = SaltApi()
    ret = sapi.host_remote_func(tgt="ba*",fun='test.ping',tgt_type='pcre')
    print('%s\n%s'%('pcre',ret))
    ret = sapi.host_remote_func(tgt="bamboo,Min-Centos1",fun='test.ping',tgt_type='list')
    print('%s\n%s' % ('list', ret))
    ret = sapi.host_remote_func(tgt="*",fun='test.ping')
    print('%s\n%s' % ('glob', ret))
    ret = sapi.host_remote_func(tgt="os:CentOS",fun='test.ping',tgt_type='grain')
    print('%s\n%s' % ('grain', ret))
    ret = sapi.host_remote_func(tgt="L@Min-Centos1 or G@os:Ubuntu",fun='test.ping',tgt_type='compound')
    print('%s\n%s' % ('compound', ret))
    ret = sapi.host_remote_func(tgt="192.168.44.0/24",fun='test.ping',tgt_type='ipcidr')

    '''

    # 針對主機遠程執行模塊
    # def host_remote_func(self, tgt, fun,expr_from='glob'):
    def host_remote_func(self, tgt, fun, tgt_type='glob'):
        ''' tgt是主機 fun是模塊
            寫上模塊名 返回 可以用來調用基本的資產
            例如 curl -k https://ip地址:8080/ \
        >      -H "Accept: application/x-yaml" \
        >      -H "X-Auth-Token:b50e90485615309de0d83132cece2906f6193e43" \
        >      -d client='local' \
        >      -d tgt='*' \
        >      -d fun='test.ping'  要執行的模塊
        return:
        - iZ28r91y66hZ: true
          node2.minion: true
        '''
        obj = {'client': 'local', 'tgt': tgt, 'fun': fun, 'tgt_type': tgt_type}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        ret = content['return'][0]
        return ret

    def group_remote_func(self, tgt, fun):
        obj = {'client': 'local', 'tgt': tgt, 'fun': fun, 'expr_form': 'nodegroup'}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        print (content)
        ret = content['return'][0]
        return ret

    def host_remote_execution_module(self, tgt, fun, arg, tgt_type='glob'):
        '執行fun 傳入傳入參數arg '
        obj = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg, 'tgt_type': tgt_type}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        ret = content['return'][0]
        return ret
        # print(salt_aa.host_remote_execution_module('*', 'cmd.run', 'ifconfig'))

    # 基于分組來執行
    def group_remote_execution_module(self, tgt, fun, arg):
        '''
        根據分組來執行
        tgt =
        '''

        obj = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg, 'expr_form': 'nodegroup'}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]
        return jid

    def host_sls(self, tgt, arg, tgt_type='glob'):
        '''主機進行sls'''
        obj = {'client': 'local', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'tgt_type': tgt_type}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        return content

    def group_sls(self, tgt, arg):
        ''' 分組進行sls '''
        obj = {'client': 'local', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'expr_form': 'nodegroup'}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]['jid']
        return jid

    def host_sls_async(self, tgt, arg, tgt_type='glob'):
        '''主機異步sls '''
        obj = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'tgt_type': tgt_type}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]['jid']
        return jid

    def group_sls_async(self, tgt, arg):
        '''分組異步sls '''
        obj = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'expr_form': 'nodegroup'}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]['jid']
        return jid

    def server_group_pillar(self, tgt, arg, **kwargs):
        '''分組進行sls and pillar'''
        obj = {'client': 'local', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'expr_form': 'nodegroup',
               'kwarg': kwargs}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]
        print (jid)

    def server_hosts_pillar(self, tgt, arg, **kwargs):
        '''針對主機執行sls and pillar '''
        obj = {"client": "local", "tgt": tgt, "fun": "state.sls", "arg": arg, "kwarg": kwargs}
        token = 'X-Auth-Token:%s' % self.token_id()
        content = self.post(token=token, **obj)
        jid = content['return'][0]
        print content
        return jid

    def jobs_all_list(self):
        '''打印所有jid緩存'''
        token = 'X-Auth-Token:%s' % self.token_id()
        obj = {"client": "runner", "fun": "jobs.list_jobs"}
        content = self.post(token=token, **obj)
        print (content)

    def jobs_jid_status(self, jid):
        '''查看jid運行狀態'''
        token = 'X-Auth-Token:%s' % self.token_id()
        obj = {"client": "runner", "fun": "jobs.lookup_jid", "jid": jid}
        content = self.post(token=token, **obj)
        print (content)
        return content

# if __name__ == '__main__':
#     sa = SaltApi()
#     print (sa.host_remote_func("bamboo", 'test.ping', 'list'))

以上是“python中如何使用saltstack api”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐平市| 汉沽区| 杂多县| 西安市| 梅河口市| 新田县| 壤塘县| 临猗县| 特克斯县| 墨玉县| 宜川县| 宜宾县| 应城市| 津市市| 汾西县| 华阴市| 德清县| 台前县| 金溪县| 锦屏县| 凯里市| 齐河县| 浠水县| 芦溪县| 沙河市| 阿克苏市| 金塔县| 康马县| 新化县| 嘉定区| 唐海县| 阳西县| 铁力市| 喀什市| 南汇区| 清新县| 邯郸市| 沾化县| 迭部县| 通辽市| 政和县|