Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aginies/pvirsh
Parallel virsh management tool
https://github.com/aginies/pvirsh
command command-line-tool remote-control suse virsh virtual-machine virtualization
Last synced: 4 days ago
JSON representation
Parallel virsh management tool
- Host: GitHub
- URL: https://github.com/aginies/pvirsh
- Owner: aginies
- License: gpl-2.0
- Created: 2022-10-07T16:14:07.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-21T09:25:56.000Z (almost 2 years ago)
- Last Synced: 2023-08-04T16:08:37.846Z (over 1 year ago)
- Topics: command, command-line-tool, remote-control, suse, virsh, virtual-machine, virtualization
- Language: Python
- Homepage:
- Size: 39.4 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog
- License: LICENSE
Awesome Lists containing this project
README
# Goal
EXPERIMENTATION FOR [ALP OS](https://documentation.suse.com/alp/all/)
This wrapper is a **parallel virsh** command to manage a selected group of Virtual Machine.
This provides an easy way to execute the same **command** on a **selected group of Virtual Machine**.
If you want to manage more than 1 VM you need to script you action and this will
be done in a sequential way (most of the time).Features:
* Launch **parallel command** on mulitiple **VM** selected by group
* **auto-completion** of the **virsh** domain command
* **Reports** of **error/success** per VM
* Interactive mode with intelligent prompt (display group, yaml file and connector)
* **Interactive terminal** or a one shot command
* **colored prompt** to easily catch up trouble and syntax
* yaml file group: default is **groups.yaml**, possible to change to any other fileInteractive command:
See the **pvirsh.pod** file in **man/** directory
# Demo
![image](https://github.com/aginies/pvirsh/blob/1fe39679fbeac2e9f02a99bdfc50efa98a2ca6df/demo_pvirsh.gif)
# Python requires
* python3-libvirt-python
* python3-PyYAML
* python3-curses (to get completion)# Install
* From source code:
```bash
git clone https://github.com/aginies/pvirsh
cd pvirsh
./setup.py install
```* Package from [OBS](https://build.opensuse.org/package/show/home:aginies/pvirsh)
# Define Virtual Machine groups
It is possible to select VM directly on the connected hypervisir with **select_vm**,
or you can use a group yaml file which contains list of VM per group.
By default the script will use **groups.yaml**.
The **yaml** file looks like:```yaml
suse:
- sle15sp31$
- sle15sp4rhel:
- rhe
- fedorawindows:
- win7
- win10
```* sle15sp31$ : will match exactly this machine name
* sle15sp4 : will match all VM, including sle15sp4*NOTE: select_vm is only available in interactive mode.
# TODO
Probably a lot as this is for testing purpose...
* detect VM state before (useful for some command which requires VM running)
* connect to multiple host?
* ....# Usage
```bash
usage: Interactive or Non Interactive command tool to manage multiple VM at the same TimeNon interactive:
pvirsh -n -f GROUP.yaml --conn CONNECTOR -g VM_GROUP,VM_GROUP2 -c 'CMD CMD_OPTION'Example:
pvirsh -n --conn local -g suse -c 'domstate --reason'
[-h] [-s] [--conn CONN] [-g GROUP] [-f FILE] [-n] [-c CMD]optional arguments:
-h, --help show this help message and exithelp:
-s, --showgroup Show group from VM file contentconfig:
--conn CONN Connect to the hypervisor (local | ssh)
-g GROUP, --group GROUP
Group of VM to use (could be a list separated by ,)
-f FILE, --file FILE Group file to use as yaml fileexec:
-n, --noninter Launch this tool in non interactive mode
-c CMD, --cmd CMD Command to execute on a group of VM
```# Examples
Get the state of all virtual Machine in **suse** group:
```bash
pvirsh.py -n --conn local -c domstate -g suse,rhelConnected; Version: 6002000
Multiple group selected
Selected group is suse: ['sle15sp3', 'sle15sp41$', 'sle15sp4-2$']
Selected group is rhel: ['rhe', 'fedora', 'plop']
virsh domstate sle15sp31 shut off Done
virsh domstate sle15sp41 shut off Done
virsh domstate sle15sp4-2 shut off Done
virsh domstate sle15sp32 shut off Done
virsh domstate sle15sp33 shut off Done
virsh domstate sle15sp34 shut off Done
virsh domstate rhel8 shut off Done
```Setting hard-limit memory to 1.024GB for all VM in **suse** group:
```bash
pvirsh.py -n --conn local -c "memtune --hard-limit 1000000" -g suseConnected; Version: 6002000
Selected group is suse: ['sle15sp3', 'sle15sp41$', 'sle15sp4-2$']
virsh memtune sle15sp34 --hard-limit 1000000 Done
virsh memtune sle15sp41 --hard-limit 1000000 Done
virsh memtune sle15sp31 --hard-limit 1000000 Done
virsh memtune sle15sp33 --hard-limit 1000000 Done
virsh memtune sle15sp32 --hard-limit 1000000 Done
virsh memtune sle15sp4-2 --hard-limit 1000000 Done
```Adding an RNG device to all VM in **suse** group:
```bash
cat rng.xml/dev/urandom
pvirsh.py -n --conn local -g suse,rhel -c "attach-device --current --file rng.xml"
Connected; Version: 6002000
Multiple group selected
Selected group is suse: ['sle15sp3', 'sle15sp41$', 'sle15sp4-2$']
Selected group is rhel: ['rhe', 'fedora', 'plop']
virsh attach-device sle15sp41 --current --file rng.xml Device attached successfully Done
virsh attach-device sle15sp31 --current --file rng.xml Device attached successfully Done
virsh attach-device sle15sp4-2 --current --file rng.xml Device attached successfully Done
virsh attach-device sle15sp33 --current --file rng.xml Device attached successfully Done
virsh attach-device rhel8 --current --file rng.xml Device attached successfully Done
virsh attach-device sle15sp32 --current --file rng.xml Device attached successfully Done
Command was:virsh attach-device sle15sp34 --current --file rng.xml
ERROR: sle15sp34: b'error: Failed to attach device from rng.xml\nerror: unsupported configuration: a device with the same address already exists \n'
```