python saltstack_python3 saltstack api 接入

功能介绍

使用python urllib模块,请求saltstack api

针对saltstack api常用模块编写为函数,方便使用

saltstack api配置简单化

注意事项

请保证自己的saltstack api是可以使用的,请在自己的salt服务器中使用以下命令

curl -k https://172.28.5.190:8000/login \

-H "Accept: application/x-yaml" \

-d username='saltapi' \

-d password='saltapi' \

-d eauth='pam'

执行正常结果,主要是需要token

return:

- eauth: pam

expire: 1542725811.402969

perms:

- .*

- '@wheel'

- '@runner'

start: 1542682611.402966

token: 541d1b86d29daaff1c1cbb8f01a454de0bf4cba3

user: saltapi

脚本文件目录

- salt_api

- __init__.py

- saltStack.py

- saltDao.py

- test.py

saltStack.py

#!/usr/bin/env python

# -*-coding:utf-8-*-

import urllib

import urllib.parse

import urllib.request

import ssl

import json

#: 解决saltstack api ssh连接报错

context = ssl._create_unverified_context()

ssl._create_default_https_context = ssl._create_unverified_context

class SaltAPI(object):

__token_id = ''

#: saltstackapi地址,请按照需求修改

#: url后面不要带 /

def __init__(self):

self.__url = 'https://172.28.5.190:8000'

self.__user = 'saltapi'

self.__password = 'saltapi'

#: 获取请求成功参数token值

def token_id(self):

params = {'eauth': 'pam', 'username': self.__user, 'password': self.__password}

encode_params = urllib.parse.urlencode(params).encode(encoding='utf-8')

content = self.post_request(encode_params, prefix='/login')

self.__token_id = content['return'][0]['token']

#: 使用post请求,配置请求参数

def post_request(self, params, prefix='/'):

url = self.__url + prefix

headers = {'X-Auth-Token': self.__token_id}

req = urllib.request.Request(url, params, headers=headers)

data = urllib.request.urlopen(req).read().decode("utf-8")

content = json.loads(data)

return content

#: 获取各主机信息

def salt_command(self, tgt, fun, arg=''):

self.token_id()

params = {'client': 'local'}

try:

if tgt and fun:

if type(tgt) == list:

params['expr_form'] = 'list'

params['tgt'] = ','.join(tgt)

else:

params['tgt'] = tgt

params['fun'] = fun

else:

return "salt语法有误,请检查!"

if arg:

params['arg'] = arg

encode_params = urllib.parse.urlencode(params).encode(encoding='utf-8')

content = self.post_request(encode_params)

return content

except Exception as e:

return e

saltDao.py

#!/usr/bin/env python

# -*-coding:utf-8-*-

# 需要写什么方法,可以根据我的语法继续编写,很方便

from sdk_api import saltStack

#: 获取Linux主机远程端口

def getHostSsh(saltIdList):

salt_api = saltStack.SaltAPI()

tgt = saltIdList

fun = 'cmd.run'

arg = "netstat -lnpt | grep sshd | grep -v 'tcp6' | awk '{print $4}' | awk -F':' '{print $2}'"

data = salt_api.salt_command(tgt, fun, arg)

return data['return'][0]

#: salt-minion主机连接测试

def getSaltTest(saltIdList):

salt_api = saltStack.SaltAPI()

tgt = saltIdList

fun = 'test.ping'

data = salt_api.salt_command(tgt, fun)

return data['return'][0]

#: salt ganins信息获取

def getSaltGrains(saltIdList):

salt_api = saltStack.SaltAPI()

tgt = saltIdList

fun = 'grains.items'

data = salt_api.salt_command(tgt, fun)

return data['return'][0]

#: salt获取磁盘信息

def getSaltDisk(saltIdList):

salt_api = saltStack.SaltAPI()

tgt = saltIdList

fun = 'disk.usage'

data = salt_api.salt_command(tgt, fun)

return data['return'][0]

#: salt获取内存信息

def getSaltMem(saltIdList):

salt_api = saltStack.SaltAPI()

tgt = saltIdList

fun = 'status.meminfo'

data = salt_api.salt_command(tgt, fun)

return data['return'][0]

test.py

#!/usr/bin/env python

# -*-coding:utf-8-*-

from sdk_api import saltDao

#: saltIdList 有两种选择

#: 1.列表 saltIdList=[]

#: 2.* saltIdList="*"

saltIdList = ["tender", "salt-master"]

memory = saltDao.getSaltMem(saltIdList)

for saltId, saltJson in memory.items():

print("saltId: %s" % saltId)

for key, values in saltJson.items():

print("\t%s: %s" % (key, values))

测试结果

saltId: tender

WritebackTmp: {'value': '0', 'unit': 'kB'}

SwapTotal: {'value': '2031612', 'unit': 'kB'}

Active(anon): {'value': '61448', 'unit': 'kB'}

SwapFree: {'value': '2031612', 'unit': 'kB'}

KernelStack: {'value': '2592', 'unit': 'kB'}

MemFree: {'value': '652804', 'unit': 'kB'}

HugePages_Rsvd: {'value': '0'}

Active(file): {'value': '120004', 'unit': 'kB'}

NFS_Unstable: {'value': '0', 'unit': 'kB'}

VmallocChunk: {'value': '34359566684', 'unit': 'kB'}

Writeback: {'value': '0', 'unit': 'kB'}

Inactive(file): {'value': '80904', 'unit': 'kB'}

MemTotal: {'value': '1004112', 'unit': 'kB'}

VmallocUsed: {'value': '162832', 'unit': 'kB'}

DirectMap1G: {'value': '0', 'unit': 'kB'}

HugePages_Free: {'value': '0'}

AnonHugePages: {'value': '2048', 'unit': 'kB'}

Inactive: {'value': '81276', 'unit': 'kB'}

Active: {'value': '181452', 'unit': 'kB'}

Inactive(anon): {'value': '372', 'unit': 'kB'}

CommitLimit: {'value': '2533668', 'unit': 'kB'}

Hugepagesize: {'value': '2048', 'unit': 'kB'}

Cached: {'value': '74144', 'unit': 'kB'}

SwapCached: {'value': '0', 'unit': 'kB'}

VmallocTotal: {'value': '34359738367', 'unit': 'kB'}

Shmem: {'value': '384', 'unit': 'kB'}

Dirty: {'value': '4', 'unit': 'kB'}

Mapped: {'value': '11164', 'unit': 'kB'}

SUnreclaim: {'value': '26260', 'unit': 'kB'}

Unevictable: {'value': '0', 'unit': 'kB'}

SReclaimable: {'value': '19776', 'unit': 'kB'}

Slab: {'value': '46036', 'unit': 'kB'}

DirectMap2M: {'value': '1040384', 'unit': 'kB'}

HugePages_Surp: {'value': '0'}

Bounce: {'value': '0', 'unit': 'kB'}

HugePages_Total: {'value': '0'}

AnonPages: {'value': '59408', 'unit': 'kB'}

PageTables: {'value': '3936', 'unit': 'kB'}

HardwareCorrupted: {'value': '0', 'unit': 'kB'}

DirectMap4k: {'value': '8192', 'unit': 'kB'}

Mlocked: {'value': '0', 'unit': 'kB'}

Buffers: {'value': '127144', 'unit': 'kB'}

Committed_AS: {'value': '253820', 'unit': 'kB'}

saltId: salt-master

WritebackTmp: {'value': '0', 'unit': 'kB'}

SwapTotal: {'value': '2097148', 'unit': 'kB'}

Active(anon): {'value': '244896', 'unit': 'kB'}

SwapFree: {'value': '1541672', 'unit': 'kB'}

KernelStack: {'value': '7488', 'unit': 'kB'}

MemFree: {'value': '105100', 'unit': 'kB'}

HugePages_Rsvd: {'value': '0'}

Active(file): {'value': '71508', 'unit': 'kB'}

NFS_Unstable: {'value': '0', 'unit': 'kB'}

VmallocChunk: {'value': '34359310332', 'unit': 'kB'}

CmaFree: {'value': '0', 'unit': 'kB'}

Writeback: {'value': '0', 'unit': 'kB'}

Inactive(file): {'value': '48576', 'unit': 'kB'}

MemTotal: {'value': '997956', 'unit': 'kB'}

VmallocUsed: {'value': '177400', 'unit': 'kB'}

DirectMap1G: {'value': '0', 'unit': 'kB'}

HugePages_Free: {'value': '0'}

AnonHugePages: {'value': '57344', 'unit': 'kB'}

Inactive: {'value': '360432', 'unit': 'kB'}

Active: {'value': '316404', 'unit': 'kB'}

Inactive(anon): {'value': '311856', 'unit': 'kB'}

CommitLimit: {'value': '2596124', 'unit': 'kB'}

Hugepagesize: {'value': '2048', 'unit': 'kB'}

Cached: {'value': '130104', 'unit': 'kB'}

SwapCached: {'value': '44408', 'unit': 'kB'}

VmallocTotal: {'value': '34359738367', 'unit': 'kB'}

CmaTotal: {'value': '0', 'unit': 'kB'}

Shmem: {'value': '10060', 'unit': 'kB'}

Dirty: {'value': '12', 'unit': 'kB'}

Mapped: {'value': '26652', 'unit': 'kB'}

SUnreclaim: {'value': '75284', 'unit': 'kB'}

Unevictable: {'value': '0', 'unit': 'kB'}

SReclaimable: {'value': '49340', 'unit': 'kB'}

MemAvailable: {'value': '122132', 'unit': 'kB'}

Slab: {'value': '124624', 'unit': 'kB'}

DirectMap2M: {'value': '972800', 'unit': 'kB'}

HugePages_Surp: {'value': '0'}

Bounce: {'value': '0', 'unit': 'kB'}

HugePages_Total: {'value': '0'}

AnonPages: {'value': '517560', 'unit': 'kB'}

PageTables: {'value': '17264', 'unit': 'kB'}

HardwareCorrupted: {'value': '0', 'unit': 'kB'}

DirectMap4k: {'value': '75648', 'unit': 'kB'}

Mlocked: {'value': '0', 'unit': 'kB'}

Buffers: {'value': '12', 'unit': 'kB'}

Committed_AS: {'value': '3229088', 'unit': 'kB'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值