Python实践detach PCI设备

#!/usr/bin/python
#-*- coding: utf-8 -*-
#author:forrest, 2015-8-12  filename: detach.py

import os
import time

def detach_pci_dev():
    time.sleep(3) # This script will be executed at
                   # defined time after system start up.

    file_nova_conf_path = "/etc/nova/nova.conf"
    pci_passthrough_whitelist = []
    pci_dev_info_list = []
   
    if os.path.isfile(file_nova_conf_path):
        with open(file_nova_conf_path, 'r') as file_nova_conf:
            for line in file_nova_conf:
                if line.find('pci_passthrough_whitelist') ==0:
                    pci_passthrough_whitelist = eval(line[line.find('['):])
   
    if pci_passthrough_whitelist:
        for dev in pci_passthrough_whitelist:
             dev_vid_pid = '%s:%s' % (dev['vendor_id'], dev['product_id'])    
            pci_dev_info_list.append(dev_vid_pid)
      
   
    pci_info= os.popen('lspci -n').readlines()
    if pci_dev_info_list:
        #print  'Start to detach graphics card:',pci_dev_info_list
        for pci in pci_dev_info_list:
            for dev in pci_info:
               if dev.find(pci) > 0:
                  addr = 'pci_0000_%s_%s_%s' % (dev[0:2], dev[3:5],dev[6:7])
                  cmd = 'virsh  nodedev-detach  %s  --driver kvm' % addr
                  out = os.popen(cmd).readline()
    else:
        print 'Error: no pci dev configure, Please check the nova.conf ...' 

if __name__ == "__main__": # 用来判断是否是直接运行该文件,而不用做模块名字导入使用。
    detach_pci_dev()

if __name__ == "__detach__":
 # 用做模块使用,该模块的名字一般为此文件的名字
 #使用办法举例: import detach
 #  detach.detach_pci_dev ()
   pass


你可能感兴趣的:(Python实践detach PCI设备)