1. 程式人生 > >通過python-libvirt管理KVM虛擬機 源碼

通過python-libvirt管理KVM虛擬機 源碼

copyto file erp idt sdn restrict oar source ffline

版本:0.9.13

libvirt庫可真是大,先看看該版本裏面都有哪些類和方法,驗證過的方法我會用O開頭,|開頭的標示還沒親自驗證過。

[python] view plain copy
  1. <span style="font-size:18px;">CLASSES
  2. virConnect
  3. virDomain
  4. virDomainSnapshot
  5. virInterface
  6. virNWFilter
  7. virNetwork
  8. virNodeDevice
  9. virSecret
  10. virStoragePool
  11. virStorageVol
  12. virStream
  13. class virConnect
  14. | __del__(self)
  15. | __init__(self, _obj=None)
  16. | baselineCPU(self, xmlCPUs, flags)
  17. | changeBegin(self, flags)
  18. | changeCommit(self, flags)
  19. | changeRollback(self, flags)
  20. | close(self)
  21. | compareCPU(self, xmlDesc, flags)
  22. | createLinux(self, xmlDesc, flags)
  23. | createXML(self, xmlDesc, flags)
  24. | defineXML(self, xml)
  25. | dispatchDomainEventBlockPullCallback(self, dom, path, type, status, cbData)
  26. | domainEventDeregister(self, cb)
  27. | domainEventDeregisterAny(self, callbackID)
  28. | domainEventRegister(self, cb, opaque)
  29. | domainEventRegisterAny(self, dom, eventID, cb, opaque)
  30. | domainXMLFromNative(self, nativeFormat, nativeConfig, flags)
  31. | domainXMLToNative(self, nativeFormat, domainXml, flags)
  32. | findStoragePoolSources(self, type, srcSpec, flags)
  33. | getCPUStats(self, cpuNum, flags)
  34. o getCapabilities(self)
  35. | getCellsFreeMemory(self, startCell, maxCells)
  36. o getFreeMemory(self) 6663041024 bytes
  37. o getHostname(self) client
  38. o getInfo(self) [‘x86_64‘, 7846, 4, 2394, 1, 1, 4, 1]
  39. o getLibVersion(self) 9013 ------0.9.13-0ubuntu12.2
  40. | getMaxVcpus(self, type) 160----type是xml配置文件中domain參數的值
  41. | getMemoryStats(self, cellNum, flags)
  42. o getSysinfo(self, flags)
  43. o getType(self) QEMU
  44. o getURI(self) qemu:///system
  45. o getVersion(self) 1002000
  46. | interfaceDefineXML(self, xml, flags)
  47. | interfaceLookupByMACString(self, macstr)
  48. | interfaceLookupByName(self, name)
  49. o isAlive(self) 1
  50. o isEncrypted(self) 0
  51. o isSecure(self) 1
  52. o listAllDomains(self, flags)
  53. o listDefinedDomains(self) [‘kvm-t1‘] 列出offline的domains
  54. o listDefinedInterfaces(self) []
  55. o listDefinedNetworks(self) [‘default‘]
  56. o listDefinedStoragePools(self) []
  57. | listDevices(self, cap, flags)
  58. o listDomainsID(self) [2, 3]
  59. o listInterfaces(self) [‘br0‘, ‘lo‘]
  60. o listNWFilters(self)
  61. o listNetworks(self)
  62. o listSecrets(self)
  63. o listStoragePools(self)
  64. o lookupByID(self, id)
  65. o lookupByName(self, name)
  66. | lookupByUUID(self, uuid)
  67. o lookupByUUIDString(self, uuidstr)
  68. | migrate(self, domain, flags, dname, uri, bandwidth)
  69. | migrate2(self, domain, dxml, flags, dname, uri, bandwidth)
  70. | networkCreateXML(self, xmlDesc)
  71. | networkDefineXML(self, xml)
  72. | networkLookupByName(self, name)
  73. | networkLookupByUUID(self, uuid)
  74. | networkLookupByUUIDString(self, uuidstr)
  75. | newStream(self, flags)
  76. | nodeDeviceCreateXML(self, xmlDesc, flags)
  77. | nodeDeviceLookupByName(self, name)
  78. | numOfDefinedDomains(self)
  79. | numOfDefinedInterfaces(self)
  80. | numOfDefinedNetworks(self)
  81. | numOfDefinedStoragePools(self)
  82. | numOfDevices(self, cap, flags)
  83. | numOfDomains(self)
  84. | numOfInterfaces(self)
  85. | numOfNWFilters(self)
  86. | numOfNetworks(self)
  87. | numOfSecrets(self)
  88. | numOfStoragePools(self)
  89. | nwfilterDefineXML(self, xmlDesc)
  90. | nwfilterLookupByName(self, name)
  91. | nwfilterLookupByUUID(self, uuid)
  92. | nwfilterLookupByUUIDString(self, uuidstr)
  93. | restore(self, frm)
  94. | restoreFlags(self, frm, dxml, flags)
  95. | saveImageDefineXML(self, file, dxml, flags)
  96. | saveImageGetXMLDesc(self, file, flags)
  97. | secretDefineXML(self, xml, flags)
  98. | secretLookupByUUID(self, uuid)
  99. | secretLookupByUUIDString(self, uuidstr)
  100. | secretLookupByUsage(self, usageType, usageID)
  101. | setKeepAlive(self, interval, count)
  102. | storagePoolCreateXML(self, xmlDesc, flags)
  103. | storagePoolDefineXML(self, xml, flags)
  104. | storagePoolLookupByName(self, name)
  105. | storagePoolLookupByUUID(self, uuid)
  106. | storagePoolLookupByUUIDString(self, uuidstr)
  107. | storageVolLookupByKey(self, key)
  108. | storageVolLookupByPath(self, path)
  109. | suspendForDuration(self, target, duration, flags)
  110. | virConnGetLastError(self)
  111. | virConnResetLastError(self)
  112. class virDomain
  113. o ID(self)
  114. 獲取domainID
  115. o OSType(self)
  116. 獲取domain的type
  117. o UUID(self)
  118. 獲取domain的UUID
  119. o UUIDString(self)
  120. 以字符串的形式獲取domian的UUID
  121. o XMLDesc(self, flags)
  122. 提供一個描述domian的xml文件,該文件會在後面用來relanuch domain
  123. | __del__(self)
  124. | __init__(self, conn, _obj=None)
  125. | abortJob(self)
  126. 快速的終止在後臺運行的任務,
  127. | attachDevice(self, xml)
  128. 創建一個虛擬設備,掛載到後端,類似於熱插拔技術,只被允許在活躍的domian上面
  129. | attachDeviceFlags(self, xml, flags)
  130. 掛載一個虛擬設備到domian上面,flags標誌控制掛載的方式。
  131. o autostart(self)
  132. 獲取domian的自啟動標誌
  133. | blkioParameters(self, flags)
  134. 獲取blkio參數
  135. | blockInfo(self, path, flags)
  136. 獲取domian的塊設備大小的信息
  137. | blockIoTune(self, disk, flags)
  138. | blockJobAbort(self, disk, flags)
  139. 取消一個活躍的塊設備....
  140. | blockJobInfo(self, path, flags)
  141. 針對一個塊任務獲取process信息
  142. | blockJobSetSpeed(self, disk, bandwidth, flags)
  143. | blockPeek(self, disk, offset, size, flags)
  144. 讀取domian的disk設備的內容
  145. | blockPull(self, disk, bandwidth, flags)
  146. | blockRebase(self, disk, base, bandwidth, flags)
  147. | blockResize(self, disk, size, flags)
  148. resize一個domian的塊設備大小,在domian運行時。
  149. | blockStats(self, path)
  150. 獲取一個domain的塊設備的統計信息
  151. | blockStatsFlags(self, path, flags)
  152. 在domain運行時獲取塊設備的統計參數
  153. o controlInfo(self, flags)
  154. 獲取一個domain控制接口的詳細信息
  155. | coreDump(self, to, flags)
  156. o create(self)
  157. 創建一個domian,如果成功,則會把domian移動到運行domian池中。
  158. o createWithFlags(self, flags)
  159. o destroy(self)
  160. o destroyFlags(self, flags)
  161. | detachDevice(self, xml)
  162. | detachDeviceFlags(self, xml, flags)
  163. | diskErrors(self, flags)
  164. 獲取disk設備的錯誤信息
  165. | getCPUStats(self, total, flags)
  166. 獲取運行domian的cpu的統計信息
  167. | hasCurrentSnapshot(self, flags)
  168. 決定domian是否做一個snapshot
  169. | hasManagedSaveImage(self, flags)
  170. o info(self) [1, 2097152L, 2097152L, 1, 459250000000L]
  171. 獲取一個domian的信息
  172. | injectNMI(self, flags)
  173. | interfaceParameters(self, device, flags)
  174. 獲取接口設備的帶寬
  175. o interfaceStats(self, path) (119092654L, 1179917L, 0L, 0L, 723682L, 9669L, 0L, 0L)---interfaceStats(‘vnet0‘) vnet0通過XMLDesc獲取
  176. 獲取一個domian的接口設備的統計信息
  177. o isActive(self)
  178. 判斷一個domian是否在運行
  179. o isPersistent(self)
  180. 判斷一個domian是否和配置文件是強聯系的,也就是在shutdown之後他仍舊存在
  181. o isUpdated(self)
  182. o jobInfo(self) [0, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L]
  183. o listAllSnapshots(self, flags)
  184. 列出所有的快照
  185. | managedSave(self, flags)
  186. 該函數會suspend一個domian並且保存他在內存中的東西到磁盤上。
  187. | managedSaveRemove(self, flags)
  188. o maxMemory(self)
  189. 檢索分配給該domian的最大物理內存
  190. o maxVcpus(self)
  191. 給guest vm提供的最大vcpu數目
  192. o memoryParameters(self, flags) {‘swap_hard_limit‘: 9007199254740991L, ‘hard_limit‘: 9007199254740991L, ‘soft_limit‘: 9007199254740991L}
  193. 獲取內存參數
  194. | memoryPeek(self, start, size, flags)
  195. 讀取domain的內存中的數據
  196. o memoryStats(self) {‘actual‘: 2097152L, ‘rss‘: 375248L}
  197. 獲取一個domain的內存統計信息
  198. | metadata(self, type, uri, flags)
  199. | migrate(self, dconn, flags, dname, uri, bandwidth)
  200. 遷移一個domian從一臺host到另一臺host
  201. | migrate2(self, dconn, dxml, flags, dname, uri, bandwidth)
  202. | migrateGetMaxSpeed(self, flags)
  203. 獲取一個domian當前配置的最大遷移速度
  204. | migrateSetMaxDowntime(self, downtime, flags)
  205. | migrateSetMaxSpeed(self, bandwidth, flags)
  206. | migrateToURI(self, duri, flags, dname, bandwidth)
  207. | migrateToURI2(self, dconnuri, miguri, dxml, flags, dname, bandwidth)
  208. o name(self)
  209. 獲取一個domian的公共名稱
  210. | numaParameters(self, flags)
  211. 獲取NUMA參數
  212. | openConsole(self, dev_name, st, flags)
  213. | openGraphics(self, idx, fd, flags)
  214. | pMSuspendForDuration(self, target, duration, flags)
  215. | pMWakeup(self, flags)
  216. | pinVcpu(self, vcpu, cpumap)
  217. | pinVcpuFlags(self, vcpu, cpumap, flags)
  218. o reboot(self, flags)
  219. reboot一個domian
  220. o reset(self, flags)
  221. 立即reset一個domian
  222. o resume(self)
  223. | revertToSnapshot(self, snap, flags)
  224. o save(self, to)
  225. | saveFlags(self, to, dxml, flags)
  226. o schedulerParameters(self) {‘vcpu_quota‘: -1L, ‘vcpu_period‘: 100000L, ‘cpu_shares‘: 1024L}
  227. 獲取調度參數
  228. o schedulerParametersFlags(self, flags)
  229. o schedulerType(self)
  230. 獲取調度類型
  231. | screenshot(self, stream, screen, flags)
  232. | sendKey(self, codeset, holdtime, keycodes, nkeycodes, flags)
  233. o setAutostart(self, autostart)
  234. 配置domian是否在宿主機啟動後自啟動
  235. | setBlkioParameters(self, params, flags)
  236. | setBlockIoTune(self, disk, params, flags)
  237. | setInterfaceParameters(self, device, params, flags)
  238. | setMaxMemory(self, memory)
  239. 動態改變一個domian的最大物理內存
  240. o setMemory(self, memory)
  241. 動態改變分配給一個domian的物理內存
  242. o setMemoryFlags(self, memory, flags)
  243. | setMemoryParameters(self, params, flags)
  244. | setMetadata(self, type, metadata, key, uri, flags)
  245. | setNumaParameters(self, params, flags)
  246. | setSchedulerParameters(self, params)
  247. | setSchedulerParametersFlags(self, params, flags)
  248. | setVcpus(self, nvcpus)
  249. 動態改變一個domian的vcpus
  250. | setVcpusFlags(self, nvcpus, flags)
  251. o shutdown(self)
  252. 關閉一個domian
  253. o shutdownFlags(self, flags)
  254. | snapshotCreateXML(self, xmlDesc, flags)
  255. | snapshotCurrent(self, flags)
  256. | snapshotListNames(self, flags)
  257. | snapshotLookupByName(self, name, flags)
  258. | snapshotNum(self, flags)
  259. o state(self, flags)
  260. 檢查一個domian的狀態
  261. o suspend(self)
  262. suspends一個活躍的domian
  263. o undefine(self)
  264. undefine一個domian
  265. o undefineFlags(self, flags)
  266. | updateDeviceFlags(self, xml, flags)
  267. o vcpuPinInfo(self, flags)
  268. 獲取cpu到vcpu的親和性
  269. o vcpus(self)
  270. 獲取vcpus的信息
  271. | vcpusFlags(self, flags)
  272. 查詢一個domian使用了多少個vcpus
  273. class virDomainSnapshot
  274. | __del__(self)
  275. | __init__(self, dom, _obj=None)
  276. | delete(self, flags)
  277. 刪除一個快照
  278. | domain(self)
  279. | getConnect(self)
  280. | getDomain(self)
  281. | getName(self)
  282. | getParent(self, flags)
  283. | getXMLDesc(self, flags)
  284. 提供一個描述domian snapshot的xml文件
  285. | hasMetadata(self, flags)
  286. | isCurrent(self, flags)
  287. | listAllChildren(self, flags)
  288. | listChildrenNames(self, flags)
  289. | numChildren(self, flags)
  290. | ref(self)
  291. class virInterface
  292. | MACString(self)
  293. | XMLDesc(self, flags)
  294. | __del__(self)
  295. | __init__(self, conn, _obj=None)
  296. | connect(self)
  297. | create(self, flags)
  298. | destroy(self, flags)
  299. | isActive(self)
  300. | name(self)
  301. | undefine(self)
  302. class virNWFilter
  303. | UUID(self)
  304. | UUIDString(self)
  305. | XMLDesc(self, flags)
  306. | __del__(self)
  307. | __init__(self, conn, _obj=None)
  308. | connect(self)
  309. | name(self)
  310. | undefine(self)
  311. class virNetwork
  312. | UUID(self)
  313. | UUIDString(self)
  314. | XMLDesc(self, flags)
  315. | __del__(self)
  316. | __init__(self, conn, _obj=None)
  317. | autostart(self)
  318. | bridgeName(self)
  319. | connect(self)
  320. | create(self)
  321. | destroy(self)
  322. | isActive(self)
  323. | isPersistent(self)
  324. | name(self)
  325. | setAutostart(self, autostart)
  326. | undefine(self)
  327. class virNodeDevice
  328. | XMLDesc(self, flags)
  329. 獲取描述device各個方面信息的xml文件
  330. | __del__(self)
  331. | __init__(self, conn, _obj=None)
  332. | connect(self)
  333. | destroy(self)
  334. 破壞device對象,虛擬device會在host的系統中被移除
  335. | dettach(self)
  336. | listCaps(self)
  337. 列出node設備的能力
  338. | name(self)
  339. 返回device的名稱
  340. | numOfCaps(self)
  341. | parent(self)
  342. | reAttach(self)
  343. | reset(self)
  344. class virSecret
  345. | UUID(self)
  346. 獲取一個secret的UUID
  347. | UUIDString(self)
  348. 以字符串的形式獲取一個secret的UUID
  349. | XMLDesc(self, flags)
  350. 獲取一個描述secret的xml文件
  351. | __del__(self)
  352. | __init__(self, conn, _obj=None)
  353. | connect(self)
  354. | setValue(self, value, flags)
  355. 使用secret聯合一個值
  356. | undefine(self)
  357. 刪除一個特定的secret
  358. | usageID(self)
  359. | usageType(self)
  360. | value(self, flags)
  361. 使用secret獲取聯合的值
  362. class virStoragePool
  363. | UUID(self)
  364. 獲取存儲池唯一的UUID
  365. | UUIDString(self)
  366. 以字符串的形式獲取存儲池的UUID
  367. | XMLDesc(self, flags)
  368. 獲取一個描述存儲池各個方面信息的xml文件,
  369. | __del__(self)
  370. | __init__(self, conn, _obj=None)
  371. | autostart(self)
  372. 獲取一個存儲池的自啟動標誌
  373. | build(self, flags)
  374. 目前只有文件系統池可以接受VIR_STORAGE_POOL_BUILD_OVERWRITE和VIR_STORAGE_POOL_BUILD_NO_OVERWRITE.
  375. | connect(self)
  376. | create(self, flags)
  377. 創建一個不活躍的存儲池
  378. | createXML(self, xmldesc, flags)
  379. 用xml文件中描述的存儲池創建一個存儲卷,不是所有的池都支持創建卷
  380. | createXMLFrom(self, xmldesc, clonevol, flags)
  381. 在父存儲池中創建一個存儲卷,
  382. | delete(self, flags)
  383. 刪除底層資源,該操作時不可恢復的,
  384. | destroy(self)
  385. 破壞一個活躍的存儲池,他會使host上的池無效,但是會保持配置文件的聯系,
  386. | info(self)
  387. 獲取存儲池的信息,
  388. | isActive(self)
  389. 探測一個存儲池是否在運行
  390. | isPersistent(self)
  391. 判斷一個存儲池是否是配置文件強聯系的,就是在shutdown之後仍舊存在。
  392. | listVolumes(self)
  393. 列出存儲卷
  394. | name(self)
  395. 獲取存儲池本地唯一的名稱
  396. | numOfVolumes(self)
  397. 獲取池中有多少個存儲卷
  398. | refresh(self, flags)
  399. 請求存儲池更新它包含的存儲卷
  400. | setAutostart(self, autostart)
  401. 設置自啟動標誌
  402. | storageVolLookupByName(self, name)
  403. 在一個存儲池中獲取一個指向存儲卷的指針
  404. | undefine(self)
  405. 取消一個不活躍的存儲池
  406. class virStorageVol
  407. | XMLDesc(self, flags)
  408. 獲取一個描述各個卷存儲的xml文件
  409. | __del__(self)
  410. | __init__(self, conn, _obj=None)
  411. | connect(self)
  412. | delete(self, flags)
  413. 在存儲池中刪除卷存儲。
  414. | download(self, stream, offset, length, flags)
  415. 以流的形式下載卷中的內容,如果length是0,則在offset後面的內容都會被下載。這個調用是異步的
  416. | info(self)
  417. 獲得關於卷存儲的信息,
  418. | key(self)
  419. 獲取卷存儲的key,這個值是全局唯一的,所以相同的卷的值相同。
  420. | name(self)
  421. 獲取存儲卷的名稱,該名稱在存儲池中是唯一的。
  422. | path(self)
  423. 獲取存儲卷的路徑,取決於池的配置。既可以固定分配給host也可以動態的分配。
  424. | resize(self, capacity, flags)
  425. 改變存儲卷vol的容量到capacity,如果新的容量需求超過了空閑的池容量,則會失敗。
  426. | storagePoolLookupByVolume(self)
  427. 查找一個指定的卷包含在那個存儲池中
  428. | upload(self, stream, offset, length, flags)
  429. 把一個流的內容上傳到卷中。如果offset+length的大小超過了卷的容量,則會失敗。
  430. | wipe(self, flags)
  431. | wipePattern(self, algorithm, flags)
  432. 和virStorageVolWipe類似, 但是可以選擇不同的wiping 算法。
  433. class virStream
  434. | __del__(self)
  435. | __init__(self, conn, _obj=None)
  436. | abort(self)
  437. | connect(self)
  438. | download(self, vol, offset, length, flags)
  439. | eventAddCallback(self, events, cb, opaque)
  440. | eventRemoveCallback(self)
  441. | eventUpdateCallback(self, events)
  442. | finish(self)
  443. | recv(self, nbytes)
  444. | recvAll(self, handler, opaque)
  445. | screenshot(self, domain, screen, flags)
  446. | send(self, data)
  447. | sendAll(self, handler, opaque)
  448. | upload(self, vol, offset, length, flags)
  449. FUNCTIONS
  450. getVersion(name=None) 如果沒有name參數,或者name參數的值是None,則會返回libvirt的version,如果name參數的值是libvirt的lib庫中的一個連接,則會返回一個元祖(library version,driver version)。如果name參數傳入的是一個不存在的驅動,則會返回‘no support for hypervisor‘.
  451. open(name)
  452. 這個函數應該在建立到Hypervisor和xen store的連接時首先被調用。
  453. openAuth(uri, auth, flags)
  454. openReadOnly(name)
  455. 該函數建立一個到lib庫函數的受限制的連接,The set of APIs usable are then restricted
  456. on the available methods to control the domains。查看virConnectOpen了解環境變量,他們可以影響opening 驅動。
  457. registerErrorHandler(f, ctx)
  458. 註冊一個python函數用來報告error
  459. virEventAddHandle(fd, events, cb, opaque)
  460. 註冊一個回調函數,用來監控文件句柄
  461. @fd: file handle to monitor for events
  462. @events: bitset of events to watch from virEventHandleType constants
  463. @cb: callback to invoke when an event occurs
  464. @opaque: user data to pass to callback
  465. virEventAddTimeout(timeout, cb, opaque)
  466. 為時間事件註冊一個回調函數
  467. @timeout: time between events in milliseconds
  468. @cb: callback to invoke when an event occurs
  469. @opaque: user data to pass to callback
  470. virEventRegisterDefaultImpl()
  471. virEventRegisterImpl(addHandle, updateHandle, removeHandle, addTimeout, updateTimeout, removeTimeout)
  472. virEventRemoveHandle(watch)
  473. virEventRemoveTimeout(timer)
  474. virEventRunDefaultImpl()
  475. 運行一個叠代的循環事件,
  476. virEventUpdateHandle(watch, events)
  477. virEventUpdateTimeout(timer, timeout)
  478. virGetLastError()
  479. 提供一個獲得最近發生在lib庫級別的錯誤信息的指針
  480. virInitialize()
  481. 初始化lib庫,調用該函數是強制的,除非你在第一次API調用時,使用的是virconnectopen*
  482. virResetLastError()
  483. 重置最後一次在lib庫級別獲得的錯誤日誌,該錯誤對象保存在本地的線程中</span>

通過python-libvirt管理KVM虛擬機 源碼