[pve-devel] [PATCH v3] implement hookscripts for guests

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Jan 31 11:12:42 CET 2019


On 1/29/19 4:28 PM, Dominik Csapak wrote:
> this series implements a first version of hookscripts for guests
> 

applied the storage and manager part, awaiting v4 for guest-common, container
and qemu-server. Thanks!

> for this we do the following:
> 
> * add a new content type for storages (snippets) to have a place
>   for the scripts we can reference
> * add it do directory storages
> * execute hook scripts on
>   - pre start (cancel start if hookscript does not exit cleanly)
>   - post start
>   - pre stop (may not be called if vm gets stopped from within)
>   - post stop
> 
>   with parameters 'id' and 'phase'
> * show the content type on the gui
> * show the hookscript (if set) on the gui
> 
> for now only root can set those scripts (via api or qm/pct), but
> putting them into a storage leaves us open the possibility for
> a privilege that the user can have
> 
> dependcy wise it is relatively straight forward:
> 
> manager depends on
> qemu-server/container/storage
> 
> qemu-server/container depends on
> guest-common/storage
> 
> after (a version of) this series gets applied, i will write
> some documentation about it (with an example script) and mark
> it 'experimental' and note that the calling convention and
> the exact phases/points in time are not fixed yet and subject to change,
> since we may want to change it in the future until we know
> exactly what our users need
> 
> changes from v2:
> * rename scripts type to snippets
> * move the path check to GuestHelpers
> * remove the executable check from storage and add it in the api
>   this will come in useful when we allow custom cloud init configs,
>   as those do not have to be executable
> 
> changes from v1:
> * implemented suggestions by thomas regarding spacing, etc.
> * fail exec_hookscript when stop_on_error is set and
>   the script is not exectuable or does not exist
> * fail setting hookscript when it does not exist
> * check correctly for root at pam for containers
> 
> pve-storage:
> 
> Dominik Csapak (3):
>   add new content type 'snippets'
>   enable snippets content type for all directory based storages
>   allow snippets by default for new dir storages
> 
>  PVE/API2/Disks/Directory.pm |  2 +-
>  PVE/Storage.pm              | 48 +++++++++++++++++++++++++++++++++++++++++++--
>  PVE/Storage/CIFSPlugin.pm   |  2 +-
>  PVE/Storage/CephFSPlugin.pm |  2 +-
>  PVE/Storage/DirPlugin.pm    |  2 +-
>  PVE/Storage/NFSPlugin.pm    |  2 +-
>  PVE/Storage/Plugin.pm       |  5 ++++-
>  7 files changed, 55 insertions(+), 8 deletions(-)
> 
> pve-guest-common:
> 
> Dominik Csapak (2):
>   add exec_hookscript to GuestHelpers
>   add check_hookscript_volume_id to GuestHelpers
> 
>  PVE/GuestHelpers.pm | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
> 
> qemu-server:
> 
> Dominik Csapak (1):
>   add hookscripts to vms
> 
>  PVE/API2/Qemu.pm  |  8 ++++++++
>  PVE/CLI/qm.pm     |  2 ++
>  PVE/QemuServer.pm | 12 ++++++++++++
>  3 files changed, 22 insertions(+)
> 
> pve-container:
> 
> Dominik Csapak (1):
>   add hookscript to containers
> 
>  src/PVE/LXC.pm            |  9 +++++++++
>  src/PVE/LXC/Config.pm     | 13 ++++++++++++-
>  src/lxc-pve-poststop-hook |  3 +++
>  3 files changed, 24 insertions(+), 1 deletion(-)
> 
> pve-manager:
> 
> Dominik Csapak (2):
>   add snippets content type to the gui
>   show hookscript in gui
> 
>  www/manager6/Utils.js                    | 3 ++-
>  www/manager6/form/ContentTypeSelector.js | 2 +-
>  www/manager6/lxc/Options.js              | 3 +++
>  www/manager6/qemu/Options.js             | 3 +++
>  www/manager6/storage/CephFSEdit.js       | 2 +-
>  www/manager6/storage/GlusterFsEdit.js    | 2 +-
>  6 files changed, 11 insertions(+), 4 deletions(-)
> 





More information about the pve-devel mailing list