279 lines
12 KiB
Plaintext
279 lines
12 KiB
Plaintext
#compdef virsh
|
|
# ------------------------------------------------------------------------------
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of the zsh-users nor the
|
|
# names of its contributors may be used to endorse or promote products
|
|
# derived from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
# ------------------------------------------------------------------------------
|
|
# Description
|
|
# -----------
|
|
#
|
|
# Completion script for LibVirt's Shell (virsh) (http://libvirt.org).
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
# Authors
|
|
# -------
|
|
#
|
|
# * Jan-Philipp Litza <janphilipp@litza.de>
|
|
# * Vadim A. Misbakh-Soloviov <mva@mva.name>
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
|
|
local -a args reply
|
|
|
|
function _virsh-domains() {
|
|
local -a out
|
|
out=( ${${${${(f)"$(virsh list "$@")"}:#(---| Id)*}## #[0-9-]## ##}%% *} )
|
|
_describe -t domains "${${1#--}:-running} domains" out
|
|
return $?
|
|
}
|
|
|
|
local -a expand_files
|
|
expand_files=(/$'[^\0]##\0'/ ':file:file name:_files')
|
|
|
|
local -a expand_dirs
|
|
expand_dirs=(/$'[^\0]##\0'/ ":dir:dir name:_files -/")
|
|
|
|
local -a expand_domains
|
|
expand_domains=(
|
|
/$'[^\0]##\0'/
|
|
":domains:domains:{_virsh-domains --all}"
|
|
)
|
|
|
|
local -a expand_domains_running
|
|
expand_domains_running=(
|
|
/$'[^\0]##\0'/
|
|
":domains:running domains:{_virsh-domains}"
|
|
)
|
|
|
|
local -a expand_domains_inactive
|
|
expand_domains_inactive=(
|
|
/$'[^\0]##\0'/
|
|
":domains:inactive domains:{_virsh-domains --inactive}"
|
|
)
|
|
|
|
local -a expand_kilobytes
|
|
expand_kilobytes=(
|
|
/'\d+'/
|
|
":kilobytes:kilobytes:"
|
|
)
|
|
|
|
local -a expand_count
|
|
expand_count=(
|
|
/'\d+'/
|
|
":count:count:"
|
|
)
|
|
|
|
local -a subcmd_help
|
|
subcmd_help=(
|
|
/$'[^\0]##\0'/
|
|
":command:virsh command:"
|
|
)
|
|
|
|
local -a subcmd_list
|
|
_regex_words \
|
|
list-options 'list options' \
|
|
'--all:list all domains, not only active' \
|
|
'--inactive:list only inactive domains'
|
|
subcmd_list=("$reply[@]")
|
|
|
|
local -a subcmd_freecell
|
|
subcmd_freecell=(
|
|
/'\d*'/
|
|
":numa-cell:NUMA cell:"
|
|
)
|
|
|
|
local -a subcmd_autostart
|
|
_regex_words \
|
|
autostart-options 'autostart options' \
|
|
'--disable:disables autostart instead of enabling'
|
|
subcmd_autostart=("(" "$reply[@]" "|" ")" $expand_domains)
|
|
|
|
local -a subcmd_create
|
|
_regex_words \
|
|
create-options 'create options' \
|
|
'--console:attach to the console after creation' \
|
|
'--paused:pause domain after creation (if supported by driver)'
|
|
subcmd_create=("(" "$reply[@]" "|" ")" $expand_files)
|
|
|
|
local -a subcmd_dumpxml
|
|
_regex_words \
|
|
dumpxml-options 'dumpxml options' \
|
|
'--inactive:use the config for next reboot instead of current' \
|
|
'--security-info:include security sensitive information' \
|
|
'--update-cpu:update CPU requirements according to host CPU'
|
|
subcmd_dumpxml=("(" "$reply[@]" "|" ")" $expand_domains)
|
|
|
|
local -a subcmd_start
|
|
_regex_words \
|
|
start-options 'start options' \
|
|
'--console:attach to console after start' \
|
|
'--paused: pause after start (if supported by driver)'
|
|
subcmd_start=("(" "$reply[@]" "|" ")" $expand_domains_inactive)
|
|
|
|
args=( /$'[^\0]#\0'/ )
|
|
|
|
_regex_words \
|
|
commands "virsh command" \
|
|
'help:print help:$subcmd_help' \
|
|
'attach-device:attach device from an XML file:$expand_domains $expand_files' \
|
|
'attach-disk:attach disk device' \
|
|
'attach-interface:attach network interface' \
|
|
'autostart:autostart a domain:$subcmd_autostart' \
|
|
'capabilities:capabilities:' \
|
|
'cd:change the current directory:$expand_dirs' \
|
|
'connect:(re)connect to hypervisor' \
|
|
'console:connect to the guest console:$expand_domains_running' \
|
|
'cpu-baseline:compute baseline CPU:$expand_files' \
|
|
'cpu-compare:compare host CPU with a CPU described by an XML file:$expand_files' \
|
|
'create:create a domain from an XML file:$subcmd_create' \
|
|
'start:start a (previously defined) inactive domain:$subcmd_start' \
|
|
'destroy:destroy a domain:$expand_domains_running' \
|
|
'detach-device:detach device from an XML file:$expand_domains $expand_files' \
|
|
'detach-disk:detach disk device' \
|
|
'detach-interface:detach network interface' \
|
|
'define:define (but don'"\'"'t start) a domain from an XML file:$expand_files' \
|
|
'domid:convert a domain name or UUID to domain id:$expand_domains' \
|
|
'domuuid:convert a domain name or id to domain UUID:$expand_domains' \
|
|
'dominfo:domain information:$expand_domains' \
|
|
'domjobinfo:domain job information:$expand_domains' \
|
|
'domjobabort:abort active domain job:$expand_domains' \
|
|
'domname:convert a domain id or UUID to domain name:$expand_domains' \
|
|
'domstate:domain state:$expand_domains' \
|
|
'domblkstat:get device block stats for a domain' \
|
|
'domifstat:get network interface stats for a domain' \
|
|
'dommemstat:get memory statistics for a domain:$expand_domains_running' \
|
|
'domblkinfo:domain block device size information' \
|
|
'domxml-from-native:Convert native config to domain XML' \
|
|
'domxml-to-native:Convert domain XML to native config' \
|
|
'dumpxml:domain information in XML:$subcmd_dumpxml' \
|
|
'edit:edit XML configuration for a domain:$expand_domains' \
|
|
'find-storage-pool-sources:discover potential storage pool sources' \
|
|
'find-storage-pool-sources-as:find potential storage pool sources' \
|
|
'freecell:NUMA free memory:$subcmd_freecell' \
|
|
'hostname:print the hypervisor hostname:' \
|
|
'list:list domains:$subcmd_list' \
|
|
'migrate:migrate domain to another host' \
|
|
'migrate-setmaxdowntime:set maximum tolerable downtime' \
|
|
'net-autostart:autostart a network' \
|
|
'net-create:create a network from an XML file:$expand_files' \
|
|
'net-define:define (but don'"\'"'t start) a network from an XML file:$expand_files' \
|
|
'net-destroy:destroy a network' \
|
|
'net-dumpxml:network information in XML' \
|
|
'net-edit:edit XML configuration for a network' \
|
|
'net-list:list networks' \
|
|
'net-name:convert a network UUID to network name' \
|
|
'net-start:start a (previously defined) inactive network' \
|
|
'net-undefine:undefine an inactive network' \
|
|
'net-uuid:convert a network name to network UUID' \
|
|
'iface-list:list physical host interfaces' \
|
|
'iface-name:convert an interface MAC address to interface name' \
|
|
'iface-mac:convert an interface name to interface MAC address' \
|
|
'iface-dumpxml:interface information in XML' \
|
|
'iface-define:define (but don'"\'"'t start) a physical host interface from an XML file' \
|
|
'iface-undefine:undefine a physical host interface (remove it from configuration)' \
|
|
'iface-edit:edit XML configuration for a physical host interface' \
|
|
'iface-start:start a physical host interface (enable it / "if-up")' \
|
|
'iface-destroy:destroy a physical host interface (disable it / "if-down")' \
|
|
'managedsave:managed save of a domain state:$expand_domains_running' \
|
|
'managedsave-remove:Remove managed save of a domain:$expand_domains' \
|
|
'nodeinfo:node information:' \
|
|
'nodedev-list:enumerate devices on this host' \
|
|
'nodedev-dumpxml:node device details in XML' \
|
|
'nodedev-dettach:dettach node device from its device driver' \
|
|
'nodedev-reattach:reattach node device to its device driver' \
|
|
'nodedev-reset:reset node device' \
|
|
'nodedev-create:create a device defined by an XML file on the node' \
|
|
'nodedev-destroy:destroy a device on the node' \
|
|
'nwfilter-define:define or update a network filter from an XML file:$expand_files' \
|
|
'nwfilter-undefine:undefine a network filter' \
|
|
'nwfilter-dumpxml:network filter information in XML' \
|
|
'nwfilter-list:list network filters' \
|
|
'nwfilter-edit:edit XML configuration for a network filter' \
|
|
'pool-autostart:autostart a pool' \
|
|
'pool-build:build a pool' \
|
|
'pool-create:create a pool from an XML file:$expand_files' \
|
|
'pool-create-as:create a pool from a set of args' \
|
|
'pool-define:define (but don'"\'"'t start) a pool from an XML file:$expand_files' \
|
|
'pool-define-as:define a pool from a set of args' \
|
|
'pool-destroy:destroy a pool' \
|
|
'pool-delete:delete a pool' \
|
|
'pool-dumpxml:pool information in XML' \
|
|
'pool-edit:edit XML configuration for a storage pool' \
|
|
'pool-info:storage pool information' \
|
|
'pool-list:list pools' \
|
|
'pool-name:convert a pool UUID to pool name' \
|
|
'pool-refresh:refresh a pool' \
|
|
'pool-start:start a (previously defined) inactive pool' \
|
|
'pool-undefine:undefine an inactive pool' \
|
|
'pool-uuid:convert a pool name to pool UUID' \
|
|
'secret-define:define or modify a secret from an XML file:$expand_files' \
|
|
'secret-dumpxml:secret attributes in XML' \
|
|
'secret-set-value:set a secret value' \
|
|
'secret-get-value:Output a secret value' \
|
|
'secret-undefine:undefine a secret' \
|
|
'secret-list:list secrets' \
|
|
'pwd:print the current directory:' \
|
|
'quit:quit this interactive terminal:' \
|
|
'exit:quit this interactive terminal:' \
|
|
'reboot:reboot a domain:$expand_domains' \
|
|
'restore:restore a domain from a saved state in a file:$expand_files' \
|
|
'resume:resume a domain:$expand_domains_running' \
|
|
'save:save a domain state to a file:$expand_domains $expand_files' \
|
|
'schedinfo:show/set scheduler parameters' \
|
|
'dump:dump the core of a domain to a file for analysis:$expand_domains $expand_files' \
|
|
'shutdown:gracefully shutdown a domain:$expand_domains_running' \
|
|
'setmem:change memory allocation:$expand_domains $expand_kilobytes' \
|
|
'setmaxmem:change maximum memory limit:$expand_domains $expand_kilobytes' \
|
|
'setvcpus:change number of virtual CPUs:$expand_domains $expand_count' \
|
|
'suspend:suspend a domain:$expand_domains_running' \
|
|
'ttyconsole:tty console:$expand_domains_running' \
|
|
'undefine:undefine an inactive domain:$expand_domains_inactive' \
|
|
'update-device:update device from an XML file' \
|
|
'uri:print the hypervisor canonical URI:' \
|
|
'vol-create:create a vol from an XML file' \
|
|
'vol-create-from:create a vol, using another volume as input' \
|
|
'vol-create-as:create a volume from a set of args' \
|
|
'vol-clone:clone a volume.' \
|
|
'vol-delete:delete a vol' \
|
|
'vol-wipe:wipe a vol' \
|
|
'vol-dumpxml:vol information in XML' \
|
|
'vol-info:storage vol information' \
|
|
'vol-list:list vols' \
|
|
'vol-pool:returns the storage pool for a given volume key or path' \
|
|
'vol-path:returns the volume path for a given volume name or key' \
|
|
'vol-name:returns the volume name for a given volume key or path' \
|
|
'vol-key:returns the volume key for a given volume name or path' \
|
|
'vcpuinfo:domain vcpu information:$expand_domains_running' \
|
|
'vcpupin:control domain vcpu affinity' \
|
|
'version:show version:' \
|
|
'vncdisplay:vnc display:$expand_domains_running' \
|
|
'snapshot-create:Create a snapshot:$expand_domains $expand_files' \
|
|
'snapshot-current:Get the current snapshot:$expand_domains' \
|
|
'snapshot-delete:Delete a domain snapshot' \
|
|
'snapshot-dumpxml:Dump XML for a domain snapshot' \
|
|
'snapshot-list:List snapshots for a domain:$expand_domains' \
|
|
'snapshot-revert:Revert a domain to a snapshot'
|
|
args+=("$reply[@]")
|
|
|
|
_regex_arguments _virsh "${args[@]}"
|
|
|
|
_virsh "$@"
|