Python2—0814笔记

客户端批量执行实例-伪代码

客户端demo2代码梳理1-获取执行参数

客户端demo2代码梳理2-请求salt-api


客户端批量执行实例-伪代码

demo_run.py

代码

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import importlib

import os,sys

\# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))))

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))

sys.path.append(BASEDIR)                                                      通过sys.path加入当前路径来引入settings.set

from settings.set import Host\_func\_dic,host_li

from settings.set import host_li

#调用salt-api

for host in host_li:

    path=Host\_func\_dic.get(host)

    module\_path,class\_name = path.rsplit('.',maxsplit=1)

    module = importlib.import\_module(module\_path)

    # from func_demo.hosts import disk

    # disk_class=getattr(disk,'Disk')

    disk\_class=getattr(module,class\_name)

    JG=disk_class()

    JG.run()


set.py

代码

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import importlib

import os,sys

\# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))))

\# BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))

\# sys.path.append(BASEDIR)

Host\_func\_dic = {

    'disk':'func_demo.hosts.disk.Disk',

    'mem':'func_demo.hosts.mem.Mem',

    'cpu':'func_demo.hosts.cpu.Cpu',

    'os':'func_demo.hosts.os.Os',

    'ip':'func_demo.hosts.ip.Ip',

}

host_li=\['cpu','mem','ip'\]


调用动作单独拿出来,成一个方法或一个类

mem.py

代码

class Mem(object):

    pass

    def run(self):

        ret_li=\['cmd.run','free -m'\]

        return ret_li



客户端demo2代码梳理1-获取执行参数

demo02/run.py

代码

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import importlib

import os,sys

\# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))))

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))

sys.path.append(BASEDIR)

from conf.settings import HOST\_FUNC\_DIC

from conf.settings import HOST\_FUNC\_LI

from func.task.get\_data import send\_main

#调用salt-api

for host in HOST\_FUNC\_LI:

    path=HOST\_FUNC\_DIC.get(host)

    module\_path,class\_name = path.rsplit('.',maxsplit=1)

    module = importlib.import\_module(module\_path)

    # from func_demo.hosts import disk

    # disk_class=getattr(disk,'Disk')

    disk\_class=getattr(module,class\_name)

    JG=disk_class()

    func=JG.run()

    # print(func)

    JG=send_main(func)

_#已经做了的_

_#区分cpu,mem,disk 的参数_

_#将不同参数传递给salt-api,并获取结果_

_#客户端没做的_

_#拿到的结果 需要再进行格式化_

_#拿到格式化之后的结果, 就可以向 CMDB 发送请求 进行验证存储了_

_#服务端没做的_

_#调用客户端的操作_

_#接受客户端发送数据的接口_

demo02/task/get_data.py

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import requests

import json

try:

    import cookielib

except:

    import http.cookiejar as cookielib

\# 使用urllib2请求https出错,做的设置

import ssl

context = ssl.\_create\_unverified_context()

from func.task.salt_client import SaltApi

from conf.settings import SALT\_API\_CON

\# 使用requests请求https出现警告,做的设置

from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def send_main(params):

    # print ('==================')

    # print ('同步执行命令')

    print(params)

    salt = SaltApi(SALT\_API\_CON,params)

    # salt\_client = 'jenkins\_test'

    # salt_client = \['*'\]

    # salt_test = 'grains.items'

    # salt_test = 'test.ping'

    # salt_method = 'grains.get'

    # salt_method = 'cmd.run'

    # salt_method = 'disk.usage'

    # salt_method = 'svn.update'

    # salt\_params = \['ip\_interfaces', \]

    # salt\_params = \['ip\_interfaces','hwaddr_interfaces'\]

    # salt_params = 'free -m'

    # salt_params = \['free -m',\]

    # salt_params = \['/','/mnt/www','root','liang','liang'\]

    # print salt.salt\_command(salt\_client, salt\_method, salt\_params)

    # 下面只是为了打印结果好看点

    result1 = salt.salt_command()

    # result2 = salt.salt\_command(salt\_client, salt\_method, salt\_params)

    #disk

    # for host,dic in result2.items():

    #     print (host)

    #

    #     for disk,value in dic.items():

    #         font_size=str(round(int(value\['1K-blocks'\]) /1024 /1024,2)) +('G')

    #         print('目录',disk,'磁盘大小',font_size)

if \_\_name\_\_ == '\_\_main\_\_':

    send\_main({'client': 'local', 'fun':  'jenkins\_test', 'tgt': 'test.ping',  })   ##调用不会运行此段代码,只有直接执行才会运行

demo02/task/salt_client.py

代码

#!/usr/bin/python

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

#make in LA

import json

import requests

from conf.settings import SALT\_API\_CON

from conf.settings import SALT_USERNAME

from conf.settings import SALT_PASSWORD

class SaltApi:

    def \_\_init\_\_(self, url , params):

        self.url = url

        self.username = SALT_USERNAME

        self.password = SALT_PASSWORD

        self.params = params

        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"

        }

        # self.params = {'client': 'local', 'fun': '', 'tgt': ''}

        self.login\_url = SALT\_API_CON + "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 salt_command(self):

        """远程执行命令,相当于salt 'client1' cmd.run 'free -m'"""

        # print ('命令参数: ', params)

        result = self.get_data(self.url, self.params)

        return result

demo02/conf/settings.py

代码

#!/usr/bin/python

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

HOST\_FUNC\_DIC = {

    'disk':'func.hosts.disk.Disk',

    'mem':'func.hosts.mem.Mem',

    'cpu':'func.hosts.cpu.Cpu',

    'os':'func.hosts.os.Os',

    'ip':'func.hosts.ip.Ip',

}

HOST\_FUNC\_LI=\['mem'\]

SALT\_API\_CON = "https://192.168.78.128:8001/"

SALT_USERNAME = "saltapi"

SALT_PASSWORD = "Freeme123"

demo02/func/hosts/mem.py

代码

from func.hosts.main import Base

class Mem(Base):

    def run(self):

        self.method='cmd.run'

        self.tgt='linux02'

        self.arg='free -m'

        return {'client': 'local', 'fun':  self.method, 'tgt': self.tgt, 'arg':self.arg }

#salt 'jenkins_test'  cmd.run 'free -m'


客户端demo2代码梳理2-请求salt-api

demo02/run.py

代码

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import importlib

import os,sys

\# sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_))))

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(\_\_file\_\_)))

sys.path.append(BASEDIR)

from conf.settings import HOST\_FUNC\_DIC

from conf.settings import HOST\_FUNC\_LI

from func.task.get\_data import send\_main

#调用salt-api

for host in HOST\_FUNC\_LI:

    path=HOST\_FUNC\_DIC.get(host)

    module\_path,class\_name = path.rsplit('.',maxsplit=1)

    module = importlib.import\_module(module\_path)

    # from func_demo.hosts import disk

    # disk_class=getattr(disk,'Disk')

    disk\_class=getattr(module,class\_name)

    JG=disk_class()

    func=JG.run()

    # print(func)

    JG=send_main(func)

demo02/task/get_data.py

#!/usr/bin/env python

\# _\*_ coding:utf-8 _\*_

import requests

import json

try:

    import cookielib

except:

    import http.cookiejar as cookielib

\# 使用urllib2请求https出错,做的设置

import ssl

context = ssl.\_create\_unverified_context()

from func.task.salt_client import SaltApi

from conf.settings import SALT\_API\_CON

\# 使用requests请求https出现警告,做的设置

from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def send_main(params):

    # print ('==================')

    # print ('同步执行命令')

    print(params)

    salt = SaltApi(SALT\_API\_CON,params)

    # salt\_client = 'jenkins\_test'

    # salt_client = \['*'\]

    # salt_test = 'grains.items'

    # salt_test = 'test.ping'

    # salt_method = 'grains.get'

    # salt_method = 'cmd.run'

    # salt_method = 'disk.usage'

    # salt_method = 'svn.update'

    # salt\_params = \['ip\_interfaces', \]

    # salt\_params = \['ip\_interfaces','hwaddr_interfaces'\]

    # salt_params = 'free -m'

    # salt_params = \['free -m',\]

    # salt_params = \['/','/mnt/www','root','liang','liang'\]

    # print salt.salt\_command(salt\_client, salt\_method, salt\_params)

    # 下面只是为了打印结果好看点

    result1 = salt.salt_command()

    # result2 = salt.salt\_command(salt\_client, salt\_method, salt\_params)

    #disk

    # for host,dic in result2.items():

    #     print (host)

    #

    #     for disk,value in dic.items():

    #         font_size=str(round(int(value\['1K-blocks'\]) /1024 /1024,2)) +('G')

    #         print('目录',disk,'磁盘大小',font_size)

if \_\_name\_\_ == '\_\_main\_\_':

    send\_main({'client': 'local', 'fun':  'jenkins\_test', 'tgt': 'test.ping',  })   ##调用不会运行此段代码,只有直接执行才会运行

demo02/task/salt_client.py

代码

#!/usr/bin/python

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

#make in LA

import json

import requests

from conf.settings import SALT\_API\_CON

from conf.settings import SALT_USERNAME

from conf.settings import SALT_PASSWORD

class SaltApi:

    def \_\_init\_\_(self, url , params):

        self.url = url

        self.username = SALT_USERNAME

        self.password = SALT_PASSWORD

        self.params = params

        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"

        }

        # self.params = {'client': 'local', 'fun': '', 'tgt': ''}

        self.login\_url = SALT\_API_CON + "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 salt_command(self):

        """远程执行命令,相当于salt 'client1' cmd.run 'free -m'"""

        # print ('命令参数: ', params)

        result = self.get_data(self.url, self.params)

        return result

demo02/conf/settings.py

代码

#!/usr/bin/python

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

HOST\_FUNC\_DIC = {

    'disk':'func.hosts.disk.Disk',

    'mem':'func.hosts.mem.Mem',

    'cpu':'func.hosts.cpu.Cpu',

    'os':'func.hosts.os.Os',

    'ip':'func.hosts.ip.Ip',

}

HOST\_FUNC\_LI=\['mem'\]

SALT\_API\_CON = "[https://192.168.78.128:8001/](https://192.168.78.128:8001/)"

SALT_USERNAME = "saltapi"

SALT_PASSWORD = "Freeme123"

demo02/func/hosts/mem.py

代码

from func.hosts.main import Base

class Mem(Base):         (统一继承一个类Base)

    def run(self):

        self.method='cmd.run'

        self.tgt='linux02'

        self.arg='free -m'

        return {'client': 'local', 'fun':  self.method, 'tgt': self.tgt, 'arg':self.arg }

#salt 'jenkins_test'  cmd.run 'free -m'

demo02/func/hosts/mail.py

代码

#!/usr/bin/python

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

#make in LA

class Base(object):

    def \_\_init\_\_(self):

        self.method=''

        self.tgt=''

        self.arg=''

    def run(self):

        raise NotImplementedError('Not run')

没有写run 方法,就会到Base类里去执行,提示报错

转载于:https://my.oschina.net/u/3959701/blog/3092737

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值