commit f2533460744e6f21ff4a075b5c6711591a8dc334 Author: Slava Rogozhkin Date: Wed May 13 14:36:23 2026 +0300 add diff --git a/README.md b/README.md new file mode 100644 index 0000000..14702cb --- /dev/null +++ b/README.md @@ -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] - запоминание раннее введеного пула вм +[ ] - вставка раннее введенного пула по хоткею (добавить в список табуляций) +[ ] - удаления ВМ с хоста diff --git a/variables.zsh b/variables.zsh new file mode 100644 index 0000000..16e629f --- /dev/null +++ b/variables.zsh @@ -0,0 +1 @@ +declare -a PULL_VMS=(suac) diff --git a/virsh.plugin.zsh b/virsh.plugin.zsh new file mode 100644 index 0000000..16f10ea --- /dev/null +++ b/virsh.plugin.zsh @@ -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