| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| informatica:linux:virtualizacion:kvm [2014/01/22 15:23] – javi | informatica:linux:virtualizacion:kvm [2020/06/10 07:12] (current) – javi |
|---|
| * **QEMU** es un conjunto de herramientas que ofrecen emulacion y virtualizacion. En este manual solo vamos a utilizar la segunda parte, aunque casi siempre a traves de libvirt | * **QEMU** es un conjunto de herramientas que ofrecen emulacion y virtualizacion. En este manual solo vamos a utilizar la segunda parte, aunque casi siempre a traves de libvirt |
| * **Libvirt** es un conjunto de herramientas que actuan como //frontend// de distintas teconologias de virtualizacion: KVM, LXC, etc... En este manual vamos a usarlo intensivamente | * **Libvirt** es un conjunto de herramientas que actuan como //frontend// de distintas teconologias de virtualizacion: KVM, LXC, etc... En este manual vamos a usarlo intensivamente |
| * **Virtio** es un estandar de virtualizacion para disco y red que forma parte de los kernel nuevos de GNU/Linux. Asi los guest GNU/Linux utilizan virtio y saben que corren en un entorno virtualizado, mejorando su rendimiento. Es similar a las guest additions de VMWare. Tambien existe en formato de drivers para Window$. | * **Virtio** son un conjunto de modulos de kernel GNU/Linux que permiten paravirtualizar red y disco. De esa forma, cuando desde el host se usan esos drivers para un guest GNU/Linux, este es consciente de correr en un entorno virtualizado, y coopera con el hipervisor mejorando asi el rendimiento. Virtio es conceptualmente similar a las guest additions de VMWare. |
| |
| ====== Instalar ====== | ====== Instalar ====== |
| |
| 3. Comprobar que el sistema operativo soporta virtualizacion: | 3. Comprobar que el sistema operativo soporta virtualizacion: |
| | |
| | Una vez encontré un escenario en el que la prueba 3.1. era KO y la 3.2. OK, por lo que creo que la más exacta es la 3.1. |
| | |
| | 3.1. Ver si kvm está deshabilitado a nivel de BIOS |
| | |
| | dmesg | grep bios |
| | |
| | 3.2 Ejecutar |
| |
| sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo | sudo egrep '(vmx|svm)' --color=always /proc/cpuinfo |
| En este ejemplo se establece el valor en 524288 KB | En este ejemplo se establece el valor en 524288 KB |
| |
| | * Arrancar la VM al arrancar el hipervisor: |
| | |
| | sudo virsh autostart myvmname |
| ====== Salir de la consola ====== | ====== Salir de la consola ====== |
| |
| sudo vim test-1.example.com.xml | sudo vim test-1.example.com.xml |
| |
| Y ajustar los nombres, como por ejemplo en las siguientes etiquetas: | Y asegurarse de que los siguientes valores son unicos y correctos: |
| |
| | * Name |
| <code> | <code> |
| Name | <name>test-1.example.com</name> |
| Disk | </code> |
| | * Almacenamiento (en este caso LVM) |
| | <code> |
| | <source dev='/dev/vg/lv_test_1'/> |
| | </code> |
| | * MAC address (importante, quiza hemos copiado la maquina y esta duplicada): |
| | <code> |
| | <mac address='00:16:3e:0e:3e:53'/> |
| </code> | </code> |
| |
| 5. Ajustar, si es necesario, la ruta/punto de montaje del disco. | Script para generar MAC addresses: |
| |
| 6. Definir la nueva VM: | <code> |
| | #!/usr/bin/python |
| | # macgen.py script to generate a MAC address for guests on Xen |
| | # |
| | import random |
| | # |
| | def randomMAC(): |
| | mac = [ 0x00, 0x16, 0x3e, |
| | random.randint(0x00, 0x7f), |
| | random.randint(0x00, 0xff), |
| | random.randint(0x00, 0xff) ] |
| | return ':'.join(map(lambda x: "%02x" % x, mac)) |
| | # |
| | print randomMAC() |
| | </code> |
| |
| virsh define test-1.example.com.xml | Ahora obtenemos el listado de VMS: |
| | |
| | virsh list --all |
| | |
| | Y para cada una de ellas obtenemos la MAC address: |
| | |
| | virsh dumpxml vm-1.example.com | grep "mac address" | awk '{print $2}' | cut -d "'" -f2 |
| | |
| | TODO: hacer un script en bash que lo haga |
| | |
| | Finalmente nos aseguramos que la nueva MAC generada es unica. |
| | |
| | 5. Definir la nueva VM: |
| | |
| | virsh define test-1.example.com.xml |
| | |
| ===== VM destino existe ===== | ===== VM destino existe ===== |
| |
| |
| <os> | <os> |
| ... | |
| <boot dev='cdrom'/> | <boot dev='cdrom'/> |
| ... | ... |
| 9. (VM arrancada con live CD) Con parted eliminar las particiones 2 y 5 y recrearlas. Recomiendo ejecutarlo asi: | 9. (VM arrancada con live CD) Con parted eliminar las particiones 2 y 5 y recrearlas. Recomiendo ejecutarlo asi: |
| |
| sudo parted -a optimal /dev/vda | parted -a optimal /dev/vda |
| |
| Cambiamos a sectores como unidad: | Cambiamos a sectores como unidad: |
| 10. (VM arrancada con live CD) Copiar con dd de la particion destino a la origan, una vez recreada: | 10. (VM arrancada con live CD) Copiar con dd de la particion destino a la origan, una vez recreada: |
| |
| time sudo dd if=/dev/vdb5 of=/dev/vda5 bs=512 | time dd if=/dev/vdb5 of=/dev/vda5 bs=512 |
| | |
| Creo que el proceso de nuevo tiene una velocidad entorno a los 60 MB/s | Creo que el proceso de nuevo tiene una velocidad entorno a los 60 MB/s |
| sudo rm -fr www-1.dev.local.example.com.raw | sudo rm -fr www-1.dev.local.example.com.raw |
| | |
| | ===== Anyadir un disco en caliente ===== |
| | |
| | http://serverfault.com/questions/457250/kvm-and-libvirt-how-do-i-hotplug-a-new-virtio-disk |
| | |
| | |
| | First of all, you should avoid using virsh attach-disk with its limited amount of options. Instead, I suggest to specify the exact disk format you prefer in a separate, temporary XML file, like this: |
| | |
| | <code> |
| | <disk type='file' device='disk'> |
| | <driver name='qemu' type='qcow2' cache='writeback'/> |
| | <source file='/home/gert/kvm/testdomain-vdb.img'/> |
| | <target dev='vdb' bus='virtio'/> |
| | </disk> |
| | </code> |
| | |
| | Before adding it, make sure the hotplug kernel modules are loaded in the guest: |
| | |
| | modprobe acpiphp |
| | modprobe pci_hotplug |
| | |
| | Some distributions, including recent CentOS/RHEL/Fedora have this built-in in the kernel. In this case, check for CONFIG_HOTPLUG_PCI_ACPI. If it's y, then you're all set. |
| | |
| | Finally, add it to the running VM using |
| | |
| | virsh # attach-device [domain] /path/to/disk.xml |
| | |
| | (optionally, add the --persistent option to let Libvirt update the domain XML definition 'persistent'.) |
| | |
| | In the guest, the kernel should now be triggered, as can be checked with dmesg: |
| | |
| | <code> |
| | [ 321.946440] virtio-pci 0000:00:06.0: using default PCI settings |
| | [...] |
| | [ 321.952782] vdb: vdb1 vdb2 |
| | </code> |
| | |
| | This also works perfectly using the GUI-enabled virt-manager application. |
| | |
| | See also: |
| | |
| | http://www.linux-kvm.org/page/Hotadd_pci_devices |
| | http://serverfault.com/questions/453456/adding-virtio-block-devices-at-runtime-in-libvirt-kvm |
| |
| ====== Snapshots ====== | ====== Snapshots ====== |
| * Cuando el volumen es montado por un segundo guest, los guests ya solo pueden leer, y escribir como root, pero no escribir como un usuario normal. No creo que sea una limitacion de virtfs, pero tengo que investigarlo. | * Cuando el volumen es montado por un segundo guest, los guests ya solo pueden leer, y escribir como root, pero no escribir como un usuario normal. No creo que sea una limitacion de virtfs, pero tengo que investigarlo. |
| * En las mismas circunstancias no puedo hacer un "./script.sh" y si un "bash script.sh". No se que consecuencias puede tener | * En las mismas circunstancias no puedo hacer un "./script.sh" y si un "bash script.sh". No se que consecuencias puede tener |
| | * **BUG**: cuando se anyade un nuevo punto de montaje en una VM (virsh edit vm_1) tengo que parar y luego arrancar la VM para que esta vea el punto de montaje. Si simplemente la reinicio vera los puntos de montajes anteriores, pero no el nuevo |
| ===== Virtfs (9p) passthrough ===== | ===== Virtfs (9p) passthrough ===== |
| |
| |
| http://libguestfs.org/guestfish.1.html | http://libguestfs.org/guestfish.1.html |
| | |
| | ====== libvirt ====== |
| | |
| | **TODO** quiza habria que mover esta seccion a un articulo propio |
| | |
| | ===== ACL ===== |
| | |
| | http://libvirt.org/acl.html |
| | |
| | http://libvirt.org/aclpolkit.html |
| | |
| | https://wiki.archlinux.org/index.php/libvirt#Using_Python |
| | |
| | Ejemplo sencillo de uso sin contrasenya si se dan las siguientes condiciones: |
| | |
| | * Configuracion por defecto (**NO** se ha habilitado policykit) |
| | * El usuario que ejecuta el script pertenece al grupo especificado en la variable "unix_sock_group" de /etc/libvirt/libvirtd.conf |
| | * El script se ejecuta desde el mismo hipervisor |
| | |
| | virsh -c qemu:///system list |
| | |
| | La url sirve para la API tambien |
| | ===== API ===== |
| | |
| | http://libvirt.org/html/libvirt-libvirt.html |
| | |
| | ==== virConnect ==== |
| | |
| | <code> |
| | [('__class__', <class 'libvirt.virConnect'>) |
| | ('__del__', <bound method virConnect.__del__ of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('__delattr__', <method-wrapper '__delattr__' of virConnect object at 0x7f653a08df10>) |
| | ('__dict__', {'_o': <capsule object "virConnectPtr" at 0x7f6538716c00>}) |
| | ('__doc__', None) |
| | ('__format__', <built-in method __format__ of virConnect object at 0x7f653a08df10>) |
| | ('__getattribute__', <method-wrapper '__getattribute__' of virConnect object at 0x7f653a08df10>) |
| | ('__hash__', <method-wrapper '__hash__' of virConnect object at 0x7f653a08df10>) |
| | ('__init__', <bound method virConnect.__init__ of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('__module__', 'libvirt') |
| | ('__new__', <built-in method __new__ of type object at 0x8fbce0>) |
| | ('__reduce__', <built-in method __reduce__ of virConnect object at 0x7f653a08df10>) |
| | ('__reduce_ex__', <built-in method __reduce_ex__ of virConnect object at 0x7f653a08df10>) |
| | ('__repr__', <method-wrapper '__repr__' of virConnect object at 0x7f653a08df10>) |
| | ('__setattr__', <method-wrapper '__setattr__' of virConnect object at 0x7f653a08df10>) |
| | ('__sizeof__', <built-in method __sizeof__ of virConnect object at 0x7f653a08df10>) |
| | ('__str__', <method-wrapper '__str__' of virConnect object at 0x7f653a08df10>) |
| | ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x29d7020>) |
| | ('__weakref__', None) |
| | ('_dispatchCloseCallback', <bound method virConnect._dispatchCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventBalloonChangeCallback', <bound method virConnect._dispatchDomainEventBalloonChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventBlockPullCallback', <bound method virConnect._dispatchDomainEventBlockPullCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventCallbacks', <bound method virConnect._dispatchDomainEventCallbacks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventDeviceRemovedCallback', <bound method virConnect._dispatchDomainEventDeviceRemovedCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventDiskChangeCallback', <bound method virConnect._dispatchDomainEventDiskChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventGenericCallback', <bound method virConnect._dispatchDomainEventGenericCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventGraphicsCallback', <bound method virConnect._dispatchDomainEventGraphicsCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventIOErrorCallback', <bound method virConnect._dispatchDomainEventIOErrorCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventIOErrorReasonCallback', <bound method virConnect._dispatchDomainEventIOErrorReasonCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventLifecycleCallback', <bound method virConnect._dispatchDomainEventLifecycleCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventPMSuspendCallback', <bound method virConnect._dispatchDomainEventPMSuspendCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventPMSuspendDiskCallback', <bound method virConnect._dispatchDomainEventPMSuspendDiskCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventPMWakeupCallback', <bound method virConnect._dispatchDomainEventPMWakeupCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventRTCChangeCallback', <bound method virConnect._dispatchDomainEventRTCChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventTrayChangeCallback', <bound method virConnect._dispatchDomainEventTrayChangeCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_dispatchDomainEventWatchdogCallback', <bound method virConnect._dispatchDomainEventWatchdogCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('_o', <capsule object "virConnectPtr" at 0x7f6538716c00>) |
| | ('baselineCPU', <bound method virConnect.baselineCPU of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('changeBegin', <bound method virConnect.changeBegin of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('changeCommit', <bound method virConnect.changeCommit of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('changeRollback', <bound method virConnect.changeRollback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('close', <bound method virConnect.close of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('compareCPU', <bound method virConnect.compareCPU of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('createLinux', <bound method virConnect.createLinux of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('createXML', <bound method virConnect.createXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('createXMLWithFiles', <bound method virConnect.createXMLWithFiles of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('defineXML', <bound method virConnect.defineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainEventDeregister', <bound method virConnect.domainEventDeregister of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainEventDeregisterAny', <bound method virConnect.domainEventDeregisterAny of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainEventRegister', <bound method virConnect.domainEventRegister of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainEventRegisterAny', <bound method virConnect.domainEventRegisterAny of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainXMLFromNative', <bound method virConnect.domainXMLFromNative of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('domainXMLToNative', <bound method virConnect.domainXMLToNative of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('findStoragePoolSources', <bound method virConnect.findStoragePoolSources of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getCPUMap', <bound method virConnect.getCPUMap of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getCPUModelNames', <bound method virConnect.getCPUModelNames of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getCPUStats', <bound method virConnect.getCPUStats of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getCapabilities', <bound method virConnect.getCapabilities of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getCellsFreeMemory', <bound method virConnect.getCellsFreeMemory of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getFreeMemory', <bound method virConnect.getFreeMemory of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getHostname', <bound method virConnect.getHostname of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getInfo', <bound method virConnect.getInfo of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getLibVersion', <bound method virConnect.getLibVersion of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getMaxVcpus', <bound method virConnect.getMaxVcpus of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getMemoryParameters', <bound method virConnect.getMemoryParameters of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getMemoryStats', <bound method virConnect.getMemoryStats of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getSecurityModel', <bound method virConnect.getSecurityModel of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getSysinfo', <bound method virConnect.getSysinfo of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getType', <bound method virConnect.getType of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getURI', <bound method virConnect.getURI of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('getVersion', <bound method virConnect.getVersion of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('interfaceDefineXML', <bound method virConnect.interfaceDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('interfaceLookupByMACString', <bound method virConnect.interfaceLookupByMACString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('interfaceLookupByName', <bound method virConnect.interfaceLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('isAlive', <bound method virConnect.isAlive of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('isEncrypted', <bound method virConnect.isEncrypted of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('isSecure', <bound method virConnect.isSecure of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllDevices', <bound method virConnect.listAllDevices of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllDomains', <bound method virConnect.listAllDomains of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllInterfaces', <bound method virConnect.listAllInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllNWFilters', <bound method virConnect.listAllNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllNetworks', <bound method virConnect.listAllNetworks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllSecrets', <bound method virConnect.listAllSecrets of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listAllStoragePools', <bound method virConnect.listAllStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDefinedDomains', <bound method virConnect.listDefinedDomains of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDefinedInterfaces', <bound method virConnect.listDefinedInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDefinedNetworks', <bound method virConnect.listDefinedNetworks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDefinedStoragePools', <bound method virConnect.listDefinedStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDevices', <bound method virConnect.listDevices of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listDomainsID', <bound method virConnect.listDomainsID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listInterfaces', <bound method virConnect.listInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listNWFilters', <bound method virConnect.listNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listNetworks', <bound method virConnect.listNetworks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listSecrets', <bound method virConnect.listSecrets of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('listStoragePools', <bound method virConnect.listStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('lookupByID', <bound method virConnect.lookupByID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('lookupByName', <bound method virConnect.lookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('lookupByUUID', <bound method virConnect.lookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('lookupByUUIDString', <bound method virConnect.lookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('networkCreateXML', <bound method virConnect.networkCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('networkDefineXML', <bound method virConnect.networkDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('networkLookupByName', <bound method virConnect.networkLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('networkLookupByUUID', <bound method virConnect.networkLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('networkLookupByUUIDString', <bound method virConnect.networkLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('newStream', <bound method virConnect.newStream of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nodeDeviceCreateXML', <bound method virConnect.nodeDeviceCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nodeDeviceLookupByName', <bound method virConnect.nodeDeviceLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nodeDeviceLookupSCSIHostByWWN', <bound method virConnect.nodeDeviceLookupSCSIHostByWWN of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDefinedDomains', <bound method virConnect.numOfDefinedDomains of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDefinedInterfaces', <bound method virConnect.numOfDefinedInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDefinedNetworks', <bound method virConnect.numOfDefinedNetworks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDefinedStoragePools', <bound method virConnect.numOfDefinedStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDevices', <bound method virConnect.numOfDevices of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfDomains', <bound method virConnect.numOfDomains of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfInterfaces', <bound method virConnect.numOfInterfaces of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfNWFilters', <bound method virConnect.numOfNWFilters of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfNetworks', <bound method virConnect.numOfNetworks of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfSecrets', <bound method virConnect.numOfSecrets of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('numOfStoragePools', <bound method virConnect.numOfStoragePools of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nwfilterDefineXML', <bound method virConnect.nwfilterDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nwfilterLookupByName', <bound method virConnect.nwfilterLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nwfilterLookupByUUID', <bound method virConnect.nwfilterLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('nwfilterLookupByUUIDString', <bound method virConnect.nwfilterLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('registerCloseCallback', <bound method virConnect.registerCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('restore', <bound method virConnect.restore of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('restoreFlags', <bound method virConnect.restoreFlags of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('saveImageDefineXML', <bound method virConnect.saveImageDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('saveImageGetXMLDesc', <bound method virConnect.saveImageGetXMLDesc of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('secretDefineXML', <bound method virConnect.secretDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('secretLookupByUUID', <bound method virConnect.secretLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('secretLookupByUUIDString', <bound method virConnect.secretLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('secretLookupByUsage', <bound method virConnect.secretLookupByUsage of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('setKeepAlive', <bound method virConnect.setKeepAlive of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('setMemoryParameters', <bound method virConnect.setMemoryParameters of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storagePoolCreateXML', <bound method virConnect.storagePoolCreateXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storagePoolDefineXML', <bound method virConnect.storagePoolDefineXML of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storagePoolLookupByName', <bound method virConnect.storagePoolLookupByName of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storagePoolLookupByUUID', <bound method virConnect.storagePoolLookupByUUID of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storagePoolLookupByUUIDString', <bound method virConnect.storagePoolLookupByUUIDString of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storageVolLookupByKey', <bound method virConnect.storageVolLookupByKey of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('storageVolLookupByPath', <bound method virConnect.storageVolLookupByPath of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('suspendForDuration', <bound method virConnect.suspendForDuration of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('unregisterCloseCallback', <bound method virConnect.unregisterCloseCallback of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('virConnGetLastError', <bound method virConnect.virConnGetLastError of <libvirt.virConnect object at 0x7f653a08df10>>) |
| | ('virConnResetLastError', <bound method virConnect.virConnResetLastError of <libvirt.virConnect object at 0x7f653a08df10>>)] |
| | </code> |
| | |
| | ==== virDomain ==== |
| | |
| | <code> |
| | [('ID', <bound method virDomain.ID of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('OSType', <bound method virDomain.OSType of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('UUID', <bound method virDomain.UUID of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('UUIDString', <bound method virDomain.UUIDString of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('XMLDesc', <bound method virDomain.XMLDesc of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('__class__', <class 'libvirt.virDomain'>) |
| | ('__del__', <bound method virDomain.__del__ of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('__delattr__', <method-wrapper '__delattr__' of virDomain object at 0x7f39740e6750>) |
| | ('__dict__', {'_conn': <libvirt.virConnect object at 0x7f3975a5ff50>, '_o': <capsule object "virDomainPtr" at 0x7f39740e7c90>}) |
| | ('__doc__', None) |
| | ('__format__', <built-in method __format__ of virDomain object at 0x7f39740e6750>) |
| | ('__getattribute__', <method-wrapper '__getattribute__' of virDomain object at 0x7f39740e6750>) |
| | ('__hash__', <method-wrapper '__hash__' of virDomain object at 0x7f39740e6750>) |
| | ('__init__', <bound method virDomain.__init__ of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('__module__', 'libvirt') |
| | ('__new__', <built-in method __new__ of type object at 0x8fbce0>) |
| | ('__reduce__', <built-in method __reduce__ of virDomain object at 0x7f39740e6750>) |
| | ('__reduce_ex__', <built-in method __reduce_ex__ of virDomain object at 0x7f39740e6750>) |
| | ('__repr__', <method-wrapper '__repr__' of virDomain object at 0x7f39740e6750>) |
| | ('__setattr__', <method-wrapper '__setattr__' of virDomain object at 0x7f39740e6750>) |
| | ('__sizeof__', <built-in method __sizeof__ of virDomain object at 0x7f39740e6750>) |
| | ('__str__', <method-wrapper '__str__' of virDomain object at 0x7f39740e6750>) |
| | ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x1d606f0>) |
| | ('__weakref__', None) |
| | ('_conn', <libvirt.virConnect object at 0x7f3975a5ff50>) |
| | ('_o', <capsule object "virDomainPtr" at 0x7f39740e7c90>) |
| | ('abortJob', <bound method virDomain.abortJob of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('attachDevice', <bound method virDomain.attachDevice of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('attachDeviceFlags', <bound method virDomain.attachDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('autostart', <bound method virDomain.autostart of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blkioParameters', <bound method virDomain.blkioParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockCommit', <bound method virDomain.blockCommit of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockInfo', <bound method virDomain.blockInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockIoTune', <bound method virDomain.blockIoTune of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockJobAbort', <bound method virDomain.blockJobAbort of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockJobInfo', <bound method virDomain.blockJobInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockJobSetSpeed', <bound method virDomain.blockJobSetSpeed of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockPeek', <bound method virDomain.blockPeek of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockPull', <bound method virDomain.blockPull of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockRebase', <bound method virDomain.blockRebase of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockResize', <bound method virDomain.blockResize of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockStats', <bound method virDomain.blockStats of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('blockStatsFlags', <bound method virDomain.blockStatsFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('connect', <bound method virDomain.connect of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('controlInfo', <bound method virDomain.controlInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('coreDump', <bound method virDomain.coreDump of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('create', <bound method virDomain.create of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('createWithFiles', <bound method virDomain.createWithFiles of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('createWithFlags', <bound method virDomain.createWithFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('destroy', <bound method virDomain.destroy of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('destroyFlags', <bound method virDomain.destroyFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('detachDevice', <bound method virDomain.detachDevice of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('detachDeviceFlags', <bound method virDomain.detachDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('diskErrors', <bound method virDomain.diskErrors of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('emulatorPinInfo', <bound method virDomain.emulatorPinInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('fSTrim', <bound method virDomain.fSTrim of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('getCPUStats', <bound method virDomain.getCPUStats of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('hasCurrentSnapshot', <bound method virDomain.hasCurrentSnapshot of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('hasManagedSaveImage', <bound method virDomain.hasManagedSaveImage of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('hostname', <bound method virDomain.hostname of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('info', <bound method virDomain.info of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('injectNMI', <bound method virDomain.injectNMI of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('interfaceParameters', <bound method virDomain.interfaceParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('interfaceStats', <bound method virDomain.interfaceStats of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('isActive', <bound method virDomain.isActive of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('isPersistent', <bound method virDomain.isPersistent of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('isUpdated', <bound method virDomain.isUpdated of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('jobInfo', <bound method virDomain.jobInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('jobStats', <bound method virDomain.jobStats of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('listAllSnapshots', <bound method virDomain.listAllSnapshots of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('managedSave', <bound method virDomain.managedSave of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('managedSaveRemove', <bound method virDomain.managedSaveRemove of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('maxMemory', <bound method virDomain.maxMemory of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('maxVcpus', <bound method virDomain.maxVcpus of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('memoryParameters', <bound method virDomain.memoryParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('memoryPeek', <bound method virDomain.memoryPeek of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('memoryStats', <bound method virDomain.memoryStats of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('metadata', <bound method virDomain.metadata of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrate', <bound method virDomain.migrate of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrate2', <bound method virDomain.migrate2 of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrate3', <bound method virDomain.migrate3 of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateGetCompressionCache', <bound method virDomain.migrateGetCompressionCache of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateGetMaxSpeed', <bound method virDomain.migrateGetMaxSpeed of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateSetCompressionCache', <bound method virDomain.migrateSetCompressionCache of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateSetMaxDowntime', <bound method virDomain.migrateSetMaxDowntime of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateSetMaxSpeed', <bound method virDomain.migrateSetMaxSpeed of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateToURI', <bound method virDomain.migrateToURI of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateToURI2', <bound method virDomain.migrateToURI2 of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('migrateToURI3', <bound method virDomain.migrateToURI3 of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('name', <bound method virDomain.name of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('numaParameters', <bound method virDomain.numaParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('openChannel', <bound method virDomain.openChannel of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('openConsole', <bound method virDomain.openConsole of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('openGraphics', <bound method virDomain.openGraphics of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('pMSuspendForDuration', <bound method virDomain.pMSuspendForDuration of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('pMWakeup', <bound method virDomain.pMWakeup of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('pinEmulator', <bound method virDomain.pinEmulator of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('pinVcpu', <bound method virDomain.pinVcpu of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('pinVcpuFlags', <bound method virDomain.pinVcpuFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('reboot', <bound method virDomain.reboot of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('reset', <bound method virDomain.reset of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('resume', <bound method virDomain.resume of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('revertToSnapshot', <bound method virDomain.revertToSnapshot of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('save', <bound method virDomain.save of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('saveFlags', <bound method virDomain.saveFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('schedulerParameters', <bound method virDomain.schedulerParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('schedulerParametersFlags', <bound method virDomain.schedulerParametersFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('schedulerType', <bound method virDomain.schedulerType of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('screenshot', <bound method virDomain.screenshot of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('securityLabel', <bound method virDomain.securityLabel of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('securityLabelList', <bound method virDomain.securityLabelList of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('sendKey', <bound method virDomain.sendKey of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('sendProcessSignal', <bound method virDomain.sendProcessSignal of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setAutostart', <bound method virDomain.setAutostart of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setBlkioParameters', <bound method virDomain.setBlkioParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setBlockIoTune', <bound method virDomain.setBlockIoTune of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setInterfaceParameters', <bound method virDomain.setInterfaceParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMaxMemory', <bound method virDomain.setMaxMemory of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMemory', <bound method virDomain.setMemory of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMemoryFlags', <bound method virDomain.setMemoryFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMemoryParameters', <bound method virDomain.setMemoryParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMemoryStatsPeriod', <bound method virDomain.setMemoryStatsPeriod of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setMetadata', <bound method virDomain.setMetadata of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setNumaParameters', <bound method virDomain.setNumaParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setSchedulerParameters', <bound method virDomain.setSchedulerParameters of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setSchedulerParametersFlags', <bound method virDomain.setSchedulerParametersFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setVcpus', <bound method virDomain.setVcpus of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('setVcpusFlags', <bound method virDomain.setVcpusFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('shutdown', <bound method virDomain.shutdown of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('shutdownFlags', <bound method virDomain.shutdownFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('snapshotCreateXML', <bound method virDomain.snapshotCreateXML of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('snapshotCurrent', <bound method virDomain.snapshotCurrent of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('snapshotListNames', <bound method virDomain.snapshotListNames of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('snapshotLookupByName', <bound method virDomain.snapshotLookupByName of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('snapshotNum', <bound method virDomain.snapshotNum of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('state', <bound method virDomain.state of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('suspend', <bound method virDomain.suspend of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('undefine', <bound method virDomain.undefine of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('undefineFlags', <bound method virDomain.undefineFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('updateDeviceFlags', <bound method virDomain.updateDeviceFlags of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('vcpuPinInfo', <bound method virDomain.vcpuPinInfo of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('vcpus', <bound method virDomain.vcpus of <libvirt.virDomain object at 0x7f39740e6750>>) |
| | ('vcpusFlags', <bound method virDomain.vcpusFlags of <libvirt.virDomain object at 0x7f39740e6750>>)] |
| | </code> |
| | |
| | ==== Varios ==== |
| | |
| | * Obtener la lista de dominios no-activos: |
| | <code> |
| | conn = libvirt.open("qemu+ssh://localhost/system") |
| | domains = conn.listDefinedDomains() |
| | </code> |
| | * Obtener la lista de dominios activos: |
| | <code> |
| | conn = libvirt.open("qemu+ssh://localhost/system") |
| | domains = conn.listDomainsID() |
| | </code> |
| | |
| | |