5324jj 发表于 2017-2-13 14:00:31

salt-api 模板

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
import urllib2,urllib
import time
import re

try:
    import json
except ImportError:
    import simplejson as json

#class SaltAPI(object):
#    __token_id = ''
#    def __init__(self,url,username,password):
#      self.__url = url.rstrip('/')
#      self.__user = username
#      self.__password = password
#
#    def token_id(self):
#      ''' user login and get token id '''
#      params = {'eauth': 'pam', 'username': self.__user, 'password': self.__password}
#      encode = urllib.urlencode(params)
#      obj = urllib.unquote(encode)
#      content = self.postRequest(obj,prefix='/login')
#   try:
#            self.__token_id = content['return']['token']
#      except KeyError:
#            raise KeyError
#tgt = 'computer'
class SaltAPI:
    def __init__(self,url,username,password):
      self.__url = url.rstrip('/')
      self.__user =username
      self.__password = password
      self.__token_id = self.token_id()
    def token_id(self):
      params = {'eauth': 'pam', 'username': self.__user, 'password': self.__password}
      encode = urllib.urlencode(params)
      obj = urllib.unquote(encode)
      headers = {'X-Auth-Token':''}
      url = self.__url + '/login'
      req = urllib2.Request(url, obj, headers)
      opener = urllib2.urlopen(req)
      content = json.loads(opener.read())
      try:
            token = content['return']['token']
            return token
      except KeyError:
            raise KeyError

    def postRequest(self,obj,prefix='/'):
      url = self.__url + prefix
      headers = {'X-Auth-Token'   : self.__token_id}
      req = urllib2.Request(url, obj, headers)
      opener = urllib2.urlopen(req)
      content = json.loads(opener.read())
      return content

    def list_all_key(self):
      params = {'client': 'wheel', 'fun': 'key.list_all'}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      minions = content['return']['data']['return']['minions']
      minions_pre = content['return']['data']['return']['minions_pre']
      return minions,minions_pre

    def delete_key(self,node_name):
      params = {'client': 'wheel', 'fun': 'key.delete', 'match': node_name}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      ret = content['return']['data']['success']
      return ret

    def accept_key(self,node_name):
      params = {'client': 'wheel', 'fun': 'key.accept', 'match': node_name}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      ret = content['return']['data']['success']
      return ret

    def remote_noarg_execution(self,tgt,fun):
      ''' Execute commands without parameters '''
      params = {'client': 'local', 'tgt': tgt, 'fun': fun}
    #    return HttpResponse(params)
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      ret = content['return']
      return ret

    def remote_execution(self,tgt,fun,arg):
      ''' Command execution with parameters '''      
      params = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      ret = content['return']
      return ret

    def target_remote_execution(self,tgt,fun,arg):
      ''' Use targeting for remote execution '''
      params = {'client': 'local', 'tgt': tgt, 'fun': fun, 'arg': arg, 'expr_form': 'nodegroup'}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      jid = content['return']['jid']
      return jid

    def deploy(self,tgt,arg):
      ''' Module deployment '''
      params = {'client': 'local', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      return content

    def async_deploy(self,tgt,arg):
      ''' Asynchronously send a command to connected minions '''
      params = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      jid = content['return']['jid']
      return jid

    def target_deploy(self,tgt,arg):
      ''' Based on the node group forms deployment '''
      params = {'client': 'local_async', 'tgt': tgt, 'fun': 'state.sls', 'arg': arg, 'expr_form': 'nodegroup'}
      obj = urllib.urlencode(params)
      self.token_id()
      content = self.postRequest(obj)
      jid = content['return']['jid']
      return jid

def main():
    sapi = SaltAPI(url='https://113.31.43.140:8888',username='saltapi',password='yao')
    ad = sapi.remote_noarg_execution('computer','grains.items')
    ipv4 =ad["ipv4"]
    i = len(ipv4)
    for a in range(0, i):
      if ipv4 == "113":
         print ipv4
    #sapi.token_id()
    #print sapi.list_all_key()
    #sapi.delete_key('test-01')
#    print sapi.accept_key()
    #sapi.deploy('test-01','nginx')
    #print sapi.remote_noarg_execution('test-01','grains.items')

if __name__ == '__main__':
    main()


页: [1]
查看完整版本: salt-api 模板