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

Dominik Csapak d.csapak at proxmox.com
Tue Jan 29 16:28:37 CET 2019

this series implements a first version of hookscripts for guests

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 depends on

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


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(-)


Dominik Csapak (2):
  add exec_hookscript to GuestHelpers
  add check_hookscript_volume_id to GuestHelpers

 PVE/GuestHelpers.pm | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)


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(+)


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(-)


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