python实现kubernetes生成Excel报表并且Email

来源:互联网 发布:php urldecode解码 编辑:程序博客网 时间:2024/05/29 14:27

一、首先是一个主脚本串联起两个Python脚本

#!bin/bash
cd /baobiao
kubectl get namespaces > namespaces.txt
kubectl get svc -o wide --all-namespaces > service.txt
kubectl get pods -o wide --all-namespaces > pods.txt
python baobiao.py kube`date +%y%m%d`  #生成Excel
python sendmail.py kube`date +%y%m%d`.xls  #将Excel发送邮件

 二、baobiao.py

#!/bin/env python
# -*- encoding: utf-8 -*-
import datetime
import time
import os
import sys
import xlwt
import xlrd
filename = '/opt/ci123/baobiao/namespaces.txt'
filenamesvc = '/opt/ci123/baobiao/service.txt'
filenamepod = '/opt/ci123/baobiao/pods.txt'
filenameimages = '/opt/ci123/baobiao/images.txt'
def txt2xls(xlsname):
#    print 'converting xls ... '
    f = open(filename)
    x = 0
    y = 0
    s = open(filenamesvc)
    a = 0
    b = 0
    p = open(filenamepod)
    c = 0
    d = 0
    q = open(filenameimages)
    m = 0
    n = 0
    xls=xlwt.Workbook()
    sheet1 = xls.add_sheet('namespaces',cell_overwrite_ok=True)
    sheet2 = xls.add_sheet('svc',cell_overwrite_ok=True)
    sheet3 = xls.add_sheet('pods',cell_overwrite_ok=True)
    sheet4 = xls.add_sheet('images',cell_overwrite_ok=True)
    while True:
##########################  pods #######################
        linepod = p.readline()
        if not linepod:
            break
        for i in linepod.split():
            item=i.strip().decode('utf8')
            sheet3.write(c,d,item)

            d += 1
        c += 1
        d = 0
##########################   services  #################
    while True:
        linesvc = s.readline()
        if not linesvc:
            break
        for i in linesvc.split():
            item=i.strip().decode('utf8')
            sheet2.write(a,b,item)
            b += 1
        a += 1
        b = 0
#########################  namespaces #################
    while True:
        line = f.readline()
        if not line:
            break
        for i in line.split():
            item=i.strip().decode('utf8')
            sheet1.write(x,y,item)
            y += 1
        x += 1
        y = 0
######################## images  #####################
    while True:
        line = q.readline()
        if not line:
            break
        for i in line.split():
            item=i.strip().decode('utf8')
            sheet4.write(m,n,item)
            n += 1
        m += 1
        n = 0
    f.close()
    s.close()
    p.close()
    xls.save(xlsname+'.xls')



if __name__ == "__main__":
#    filename = sys.argv[1]
    xlsname  = sys.argv[1]
    txt2xls(xlsname)

三、sendmail.py

#!/bin/env python
# -*- coding: utf-8 -*-  
import smtplib
import email.MIMEMultipart
import email.MIMEText
import email.MIMEBase
import os.path
import sys
#import datetime
import mimetypes
import email.MIMEImage
def excel(file_name):
        From = "发件人"
        To = "收件人"
        #file_name = ""
#       date = datetime.strptime('%Y-%m-%d %A')
        server = smtplib.SMTP("邮件服务器")
        server.login("grafana@ciurl.cn","")
        main_msg = email.MIMEMultipart.MIMEMultipart()

        text_msg = email.MIMEText.MIMEText("kubernetes 集群namespaces、services、pods信息报表 ",_charset="utf-8")
        main_msg.attach(text_msg)
        ctype,encoding = mimetypes.guess_type(file_name)
        if ctype is None or encoding is not None:
            ctype='application/octet-stream'
        maintype,subtype = ctype.split('/',1)
        file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype)
        print ctype,encoding
        basename = os.path.basename(file_name)
        file_msg.add_header('Content-Disposition','attachment', filename = basename)
        main_msg.attach(file_msg)

        main_msg['From'] = From
        main_msg['To'] = To
        main_msg['Subject'] = "kubernetes统计报表"
        main_msg['Date'] = email.Utils.formatdate( )

        fullText = main_msg.as_string( )
        try:
            server.sendmail(From, To, fullText)
        finally:
            server.quit()

if __name__ == "__main__":
#    filename = sys.argv[1]
    file_name  = sys.argv[1]
    excel(file_name)