This commit is contained in:
Slava Rogozhkin 2026-05-13 14:36:23 +03:00
commit f253346074
3 changed files with 167 additions and 0 deletions

54
README.md Normal file
View File

@ -0,0 +1,54 @@
# virsh plugin
Aliases and some functions for virsh
```zsh
plugins=(... virsh)
```
Set default uri for libvirt server:
```
~/.zshrc
export LIBVIRT_DEFAULT_URI="{qemu:///system}"
```
## Aliases
| Alias | Command |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| `vl` | `virsh list` |
| `vla` | `virsh list --all` |
## Functions
### Current
| Command | Description |
| :----------------------- | :------------------------------------------------------------------------------------------------------------- |
| `vs` | `virsh start {vm1} {vm2} {vm1} - starting pull vm` |
| `vd` | `virsh destroy {vm1} {vm2} {vm1} - starting pull vm` |
| `vsc` | `virsh snapshot-create {vm1} {vm2} {vm3} - starting pull vm` |
| `vsr` | `virsh snapshot-revert {vm1} {vm2} {vm3} - starting pull vm` |
| `ris` | `rewrite init snapshot, ris {vm1} {vm2} {vm3} - rewriting pull vm`
### Work in Progress (WIP)
TO-DO
[x] - list machine
[x] - destroy vm
[x] - start vm
[x] - destroy vms
[x] - start vms
[ ] - добавление дополнительного диска
[x] - откат нескольких машин на снапшот
[ ] - клонирование виртуальной машины
[x] - создание снапшота на нескольких виртуальных машинах
[ ] - добавление исошника в сдром
[ ] - подключение к дисплею вм
[ ] - подключение к терминалу вм
[x] - сменить дефолтный ури
[x] - автодополнения к функциям
[ ] - вывод айпи адреса вм
[x] - запоминание раннее введеного пула вм
[ ] - вставка раннее введенного пула по хоткею (добавить в список табуляций)
[ ] - удаления ВМ с хоста

1
variables.zsh Normal file
View File

@ -0,0 +1 @@
declare -a PULL_VMS=(suac)

112
virsh.plugin.zsh Normal file
View File

@ -0,0 +1,112 @@
alias vla="virsh list --all"
alias vl="virsh list"
# Control LIBVIRT_DEFAULT_SESSION
function chcon() {
if [[ "$1" == "session" ]]; then
sed 's/^\(export LIBVIRT_DEFAULT_URI=\).*/\1"qemu:\/\/\/session"/' $ZDOTDIR/zshrc; fi
if [[ "$1" == "systen" ]]; then
sed 's/^\(export LIBVIRT_DEFAULT_URI=\).*/\1"qemu:\/\/\/system"/' $ZDOTDIR/zshrc; fi
if [[ "$1" == "virt" ]]; then
sed 's/^\(export LIBVIRT_DEFAULT_URI=\).*/\1"qemu:\/\/virt\/system"/' $ZDOTDIR/zshrc; fi
source $ZDOTDIR/zshrc
}
# virsh start
function vs() {
if [[ "$1" = "latest" ]]; then
source $ZSH/plugins/virsh/variables.zsh
for VM in ${PULL_VMS[@]}; do
virsh start $VM
done
else
for VM in "$@"; do
virsh start $VM
done
echo "declare -a PULL_VMS=($@)" > ~/.oh-my-zsh/plugins/virsh/variables.zsh
fi
}
# destroy
function vd() {
if [[ "$1" = "latest" ]]; then
source $ZSH/plugins/virsh/variables.zsh
for VM in ${PULL_VMS[@]}; do
virsh destroy $VM
done
else
for VM in "$@"; do
virsh destroy $VM
done
echo "declare -a PULL_VMS=($@)" > ~/.oh-my-zsh/plugins/virsh/variables.zsh
fi
}
# snapshot-revert --current
function vsr() {
if [[ "$1" = "latest" ]]; then
source $ZSH/plugins/virsh/variables.zsh
for VM in ${PULL_VMS[@]}; do
virsh snapshot-revert --current --domain $VM
done
else
for VM in "$@"; do
virsh snapshot-revert --current --domain $VM
done
echo "declare -a PULL_VMS=($@)" > ~/.oh-my-zsh/plugins/virsh/variables.zsh
fi
}
# snapshot-create
function vsc() {
if [[ "$1" = "latest" ]]; then
source $ZSH/plugins/virsh/variables.zsh
for VM in ${PULL_VMS[@]}; do
echo $VM
virsh snapshot-create-as --domain $VM --name "$(date +"%d-%m-%y-%H-%M")"
done
else
for VM in "$@"; do
virsh snapshot-create-as --domain $VM --name "$(date +"%d.%m.%y %H:%M")"
done
echo "declare -a PULL_VMS=($@)" > ~/.oh-my-zsh/plugins/virsh/variables.zsh
fi
}
# rewrite init snapshot
function ris() {
if [[ "$1" = "latest" ]]; then
source $ZSH/plugins/virsh/variables.zsh
for VM in ${PULL_VMS[@]}; do
echo $VM
virsh snapshot-delete --domain $VM --snapshotname _init > /dev/null
virsh snapshot-create-as --domain $VM --name "_init" > /dev/null
echo "Снимок _init домена $VM перезаписан\n"
done
else
for VM in "$@"; do
virsh snapshot-delete --domain $VM --snapshotname _init > /dev/null
virsh snapshot-create-as --domain $VM --name "_init" > /dev/null
echo "Снимок _init домена $VM перезаписан\n"
done
echo "declare -a PULL_VMS=($@)" > ~/.oh-my-zsh/plugins/virsh/variables.zsh
fi
}
# autocomplitions
function _domains_all {
local -a domains
domains=("${(@f)$(virsh list --all --name 2>/dev/null)}")
domains=(${domains:#})
(( $#domains )) && _describe -t domains 'libvirt domain' domains || _message 'Домены не найдены'
}
compdef _domains_all vs vsr vsc
function _domains_started {
local -a domains
domains=("${(@f)$(virsh list --name 2>/dev/null)}")
domains=(${domains:#})
(( $#domains )) && _describe -t domains 'libvirt domain' domains || _message 'Домены не найдены'
}
compdef _domains_started vd