公司server在進行上線前需要做合規檢查,合規平台最終會輸出一個結果總表和每台主機的細化表。在上線主機較少的情況下,可以手工的一條條的去複核,在批量一兩百台主機上線時,通過手工的一台台一條條的逐量找出不合規項再提交給工程組是一個比較花費時間的工作。這裡就結合pyexcel模組,對結果進行一個簡單的處理篩選出所有主機的不合規項。
一、批量掃描
合規平台是支援批量主機掃描的,不過其預設不支援tar包,只支援zip和rar包,而包內的每台主機不能使用壓縮包,而應該使用檔案夾,這裡先將工程傳過來的zip包內的所有壓縮包先做一次解壓再打包處理。
[root@localhost 361way]# unzip jieguo.zip
[root@localhost 361way]# cd jieguo
[root@localhost jieguo]# for i in `ls`;do tar xvf $i; rm -rf $i;done
[root@localhost jieguo]# cd ../
[root@localhost 361way]# zip -r jieguo.zip jieguo/
[root@localhost 361way]# pwd
/tmp/361way
將這個新的包直接匯入合規平台掃描。
二、掃描結果處理
掃描後出來的一個總的結果是一個excel檔案,內容大致如下:
表格檢查項不僅僅這幾項,後面還有很多項,而且結果根據主機的批次不同,也會在redhat、suse、aix等不同的sheet頁內。一般同一批上線主機一般系統都會一致。這裡以sheet頁為suse,excel 檔案名稱為kkk.xls為例。python指令碼如下:
#!/usr/bin/python
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import json
import pyexcel as pe
from pyexcel.ext import xls
r = pe.SeriesReader(file="kkk.xls",sheetname="suse")
data = pe.utils.to_records(r)
#print r
#print data
#print json.dumps(data, encoding="UTF-8", ensure_ascii=False)
for d in data:
#print row
host = d.values()[0]
for x in [x for x in d.keys() if d[x] != '不合格']:
d.pop(x)
if len(d) > 0:
#print d
print host,json.dumps(d, encoding="UTF-8", ensure_ascii=False)
註:pyexcel 和pyexcel-xls 模組安裝時需要先安裝好以下依賴包xlrd、future、xlwt-future、pyexcel-io、ordereddict 。如果主機可以直接連接外網,也可以通過easy_install pyexcel pyexcel-xls 或pip pyexcel pyexcel-xls進行安裝。
以上指令碼執行後的結果如下:
如需更美觀也可以再進行進一步處理。