diff options
author | Dengke Du <dengke.du@windriver.com> | 2019-02-27 15:33:56 +0800 |
---|---|---|
committer | Bruce Ashfield <bruce.ashfield@gmail.com> | 2019-03-01 11:37:46 -0500 |
commit | b5b5defc78ea03c89a01c145396fad50e3a61ec4 (patch) | |
tree | afe5319bff301a375d8c328ecb5ed7ac60693349 /recipes-extended/libvirt/libvirt | |
parent | 3e7593f3570f300822f183120de101b717d9ddf9 (diff) | |
download | meta-virtualization-b5b5defc78ea03c89a01c145396fad50e3a61ec4.tar.gz |
libvirt: add hook support
1. Add a hook support script for libvirt
Add daemon, qemu, lxc and network script when the correspond to
libvirt daemon, qemu guest, lxc guest and network started or stoped,
based on:
https://libvirt.org/hooks.html
2. Add a qemu user and a qemu group and a kvm group
Signed-off-by: Dengke Du <dengke.du@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Diffstat (limited to 'recipes-extended/libvirt/libvirt')
-rwxr-xr-x | recipes-extended/libvirt/libvirt/hook_support.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/recipes-extended/libvirt/libvirt/hook_support.py b/recipes-extended/libvirt/libvirt/hook_support.py new file mode 100755 index 00000000..c3eb8b3a --- /dev/null +++ b/recipes-extended/libvirt/libvirt/hook_support.py | |||
@@ -0,0 +1,55 @@ | |||
1 | #!/usr/bin/env python | ||
2 | # | ||
3 | # Copyright (C) 2014 Wind River Systems, Inc. | ||
4 | # | ||
5 | # Description: Calls other scripts in order, so that there can be multiple | ||
6 | # scripts for a particular hook tied to libvirt. | ||
7 | # | ||
8 | # For example: If this script is called "qemu" and is in the | ||
9 | # "/etc/libvirt/hooks/" directory. This script will be called by libvirt | ||
10 | # when certain actions are performed on a qemu guest. This script then | ||
11 | # will in turn call any executable file in the same directory matching | ||
12 | # "qemu-" followed by at least one alpha-numeric character. The scripts | ||
13 | # are called in order (based on the python sorted function), and once any | ||
14 | # sub-script returns a non-zero exit code no futher scripts are called. | ||
15 | # This script passes any arguments it retrieves on the command line and a | ||
16 | # copy of stdin to the sub-scripts it calls. | ||
17 | |||
18 | import os | ||
19 | import re | ||
20 | import subprocess | ||
21 | import sys | ||
22 | |||
23 | def main(): | ||
24 | return_value = 0 | ||
25 | hook_name = os.path.basename( __file__ ) | ||
26 | try: | ||
27 | hook_dir = os.path.dirname( __file__ ) | ||
28 | hook_args = sys.argv | ||
29 | del hook_args[ 0 ] # Remove executable from argument list | ||
30 | |||
31 | # Save stdin, so we can pass it to each sub-script. | ||
32 | if sys.stdin.isatty(): | ||
33 | stdin_save = [ "" ] | ||
34 | else: | ||
35 | stdin_save = sys.stdin.readlines() | ||
36 | # Match the name name of the hook + a dash + atleast | ||
37 | # one alpha-numeric character. | ||
38 | matcher = re.compile( "%s-\w+" % hook_name ) | ||
39 | for file_name in sorted( os.listdir( hook_dir ) ): | ||
40 | file_path = os.path.join( hook_dir, file_name ) | ||
41 | if matcher.match( file_name ) \ | ||
42 | and os.access( file_path, os.X_OK ) \ | ||
43 | and os.path.isfile( file_path ) \ | ||
44 | and return_value == 0: | ||
45 | cmd = [ file_path ] + hook_args | ||
46 | p = subprocess.Popen( cmd, stdin=subprocess.PIPE ) | ||
47 | p.communicate( input = ''.join( stdin_save ) )[0] | ||
48 | return_value = p.wait() | ||
49 | except Exception as e: | ||
50 | sys.stderr.write( "%s hook error: %s\n" % ( hook_name, str( e ) ) ) | ||
51 | return_value = 1 | ||
52 | return return_value | ||
53 | |||
54 | if __name__ == '__main__': | ||
55 | sys.exit( main() ) | ||