parent
							
								
									a813d50267
								
							
						
					
					
						commit
						bb770b4744
					
				
							
								
								
									
										115
									
								
								qubesmgmt/tools/qubes_prefs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								qubesmgmt/tools/qubes_prefs.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| # | ||||
| # The Qubes OS Project, http://www.qubes-os.org | ||||
| # | ||||
| # Copyright (C) 2010-2015  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2015       Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| ''' Manipulate global properties.''' | ||||
| 
 | ||||
| # TODO merge printing with qvm-prefs | ||||
| # TODO list only non-default properties | ||||
| 
 | ||||
| from __future__ import print_function | ||||
| 
 | ||||
| import argparse | ||||
| import sys | ||||
| 
 | ||||
| import qubesmgmt | ||||
| import qubesmgmt.tools | ||||
| import qubesmgmt.utils | ||||
| 
 | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser() | ||||
| 
 | ||||
| # keep it here for compatibility with earlier and possibly future versions | ||||
| parser.add_argument('--force-root', | ||||
|     action='store_true', help=argparse.SUPPRESS) | ||||
| 
 | ||||
| # parser.add_argument('--help-properties', | ||||
| #     action=qubesmgmt.tools.HelpPropertiesAction) | ||||
| 
 | ||||
| parser.add_argument('--get', '-g', | ||||
|     action='store_true', | ||||
|     help='Ignored; for compatibility with older scripts.') | ||||
| 
 | ||||
| parser.add_argument('--set', '-s', | ||||
|     action='store_true', | ||||
|     help='Ignored; for compatibility with older scripts.') | ||||
| 
 | ||||
| parser.add_argument('property', metavar='PROPERTY', | ||||
|     nargs='?', | ||||
|     help='name of the property to show or change') | ||||
| 
 | ||||
| parser_value = parser.add_mutually_exclusive_group() | ||||
| 
 | ||||
| parser_value.add_argument('value', metavar='VALUE', | ||||
|     nargs='?', | ||||
|     help='new value of the property') | ||||
| 
 | ||||
| parser.add_argument('--unset', '--default', '--delete', '-D', | ||||
|     dest='delete', | ||||
|     action='store_true', | ||||
|     help='unset the property; if property has default value, it will be used' | ||||
|         ' instead') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None):  # pylint: disable=missing-docstring | ||||
|     args = parser.parse_args(args) | ||||
| 
 | ||||
|     if args.property is None: | ||||
|         properties = args.app.property_list() | ||||
|         width = max(len(prop.__name__) for prop in properties) | ||||
| 
 | ||||
|         for prop in sorted(properties): | ||||
|             try: | ||||
|                 value = getattr(args.app, prop.__name__) | ||||
|             except AttributeError: | ||||
|                 print('{name:{width}s}  U'.format( | ||||
|                     name=prop.__name__, width=width)) | ||||
|                 continue | ||||
| 
 | ||||
|             if args.app.property_is_default(prop): | ||||
|                 print('{name:{width}s}  D  {value!s}'.format( | ||||
|                     name=prop.__name__, width=width, value=value)) | ||||
|             else: | ||||
|                 print('{name:{width}s}  -  {value!s}'.format( | ||||
|                     name=prop.__name__, width=width, value=value)) | ||||
| 
 | ||||
|         return 0 | ||||
|     else: | ||||
|         args.property = args.property.replace('-', '_') | ||||
| 
 | ||||
| 
 | ||||
|     if args.value is not None: | ||||
|         setattr(args.app, args.property, args.value) | ||||
|         args.app.save() | ||||
|         return 0 | ||||
| 
 | ||||
|     if args.delete: | ||||
|         delattr(args.app, args.property) | ||||
|         args.app.save() | ||||
|         return 0 | ||||
| 
 | ||||
| 
 | ||||
|     print(str(getattr(args.app, args.property))) | ||||
| 
 | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										55
									
								
								qubesmgmt/tools/qvm_kill.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								qubesmgmt/tools/qvm_kill.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| # encoding=utf-8 | ||||
| # | ||||
| # The Qubes OS Project, https://www.qubes-os.org/ | ||||
| # | ||||
| # Copyright (C) 2015  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2015  Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| '''qvm-kill - forceful shutdown''' | ||||
| 
 | ||||
| 
 | ||||
| import sys | ||||
| import qubesmgmt.exc | ||||
| import qubesmgmt.tools | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser( | ||||
|     description='forceful shutdown of a domain', vmname_nargs='+') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None): | ||||
|     '''Main routine of :program:`qvm-kill`. | ||||
| 
 | ||||
|     :param list args: Optional arguments to override those delivered from \ | ||||
|         command line. | ||||
|     ''' | ||||
| 
 | ||||
|     args = parser.parse_args(args) | ||||
| 
 | ||||
|     exit_code = 0 | ||||
|     for domain in args.domains: | ||||
|         try: | ||||
|             domain.force_shutdown() | ||||
|         except (IOError, OSError, qubesmgmt.exc.QubesException) as e: | ||||
|             exit_code = 1 | ||||
|             parser.print_error(str(e)) | ||||
| 
 | ||||
|     return exit_code | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										48
									
								
								qubesmgmt/tools/qvm_pause.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								qubesmgmt/tools/qvm_pause.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| # encoding=utf-8 | ||||
| # | ||||
| # The Qubes OS Project, https://www.qubes-os.org/ | ||||
| # | ||||
| # Copyright (C) 2010-2015  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2015       Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| '''qvm-pause - Pause a domain''' | ||||
| 
 | ||||
| import sys | ||||
| import qubesmgmt | ||||
| 
 | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser(vmname_nargs='+', | ||||
|                                          description='pause a domain') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None): | ||||
|     '''Main routine of :program:`qvm-pause`. | ||||
| 
 | ||||
|     :param list args: Optional arguments to override those delivered from \ | ||||
|         command line. | ||||
|     ''' | ||||
| 
 | ||||
|     args = parser.parse_args(args) | ||||
|     for domain in args.domains: | ||||
|         domain.pause() | ||||
| 
 | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										116
									
								
								qubesmgmt/tools/qvm_prefs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								qubesmgmt/tools/qvm_prefs.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,116 @@ | ||||
| # | ||||
| # The Qubes OS Project, http://www.qubes-os.org | ||||
| # | ||||
| # Copyright (C) 2010-2015  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2015       Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| ''' Manipulate VM properties.''' | ||||
| # TODO list properties for all classes | ||||
| # TODO list only non-default properties | ||||
| 
 | ||||
| from __future__ import print_function | ||||
| 
 | ||||
| import sys | ||||
| 
 | ||||
| import qubesmgmt | ||||
| import qubesmgmt.tools | ||||
| import qubesmgmt.utils | ||||
| import qubesmgmt.vm | ||||
| 
 | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser( | ||||
|     want_force_root=True, | ||||
|     vmname_nargs=1) | ||||
| 
 | ||||
| # parser.add_argument('--help-properties', | ||||
| #     action=qubesmgmt.tools.HelpPropertiesAction, | ||||
| #     klass=qubesmgmt.vm.QubesVM) | ||||
| 
 | ||||
| parser.add_argument('--get', '-g', | ||||
|     action='store_true', | ||||
|     help='Ignored; for compatibility with older scripts.') | ||||
| 
 | ||||
| parser.add_argument('--set', '-s', | ||||
|     action='store_true', | ||||
|     help='Ignored; for compatibility with older scripts.') | ||||
| 
 | ||||
| parser.add_argument('property', metavar='PROPERTY', | ||||
|     nargs='?', | ||||
|     help='name of the property to show or change') | ||||
| 
 | ||||
| parser_value = parser.add_mutually_exclusive_group() | ||||
| 
 | ||||
| parser_value.add_argument('value', metavar='VALUE', | ||||
|     nargs='?', | ||||
|     help='new value of the property') | ||||
| 
 | ||||
| parser.add_argument('--unset', '--default', '--delete', '-D', | ||||
|     dest='delete', | ||||
|     action='store_true', | ||||
|     help='unset the property; if property has default value, it will be used' | ||||
|         ' instead') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None):  # pylint: disable=missing-docstring | ||||
|     args = parser.parse_args(args) | ||||
|     args.domain = args.domains.pop() | ||||
| 
 | ||||
|     if args.property is None: | ||||
|         properties = args.domain.property_list() | ||||
|         width = max(len(prop.__name__) for prop in properties) | ||||
| 
 | ||||
|         for prop in sorted(properties): | ||||
|             try: | ||||
|                 value = getattr(args.domain, prop.__name__) | ||||
|             except AttributeError: | ||||
|                 print('{name:{width}s}  U'.format( | ||||
|                     name=prop.__name__, width=width)) | ||||
|                 continue | ||||
| 
 | ||||
|             if args.domain.property_is_default(prop): | ||||
|                 print('{name:{width}s}  D  {value!s}'.format( | ||||
|                     name=prop.__name__, width=width, value=value)) | ||||
|             else: | ||||
|                 print('{name:{width}s}  -  {value!s}'.format( | ||||
|                     name=prop.__name__, width=width, value=value)) | ||||
| 
 | ||||
|         return 0 | ||||
|     else: | ||||
|         args.property = args.property.replace('-', '_') | ||||
| 
 | ||||
|     if args.property not in [prop.__name__ | ||||
|                              for prop in args.domain.property_list()]: | ||||
|         parser.error('no such property: {!r}'.format(args.property)) | ||||
| 
 | ||||
|     if args.value is not None: | ||||
|         setattr(args.domain, args.property, args.value) | ||||
|         args.app.save() | ||||
|         return 0 | ||||
| 
 | ||||
|     if args.delete: | ||||
|         delattr(args.domain, args.property) | ||||
|         args.app.save() | ||||
|         return 0 | ||||
| 
 | ||||
|     print(str(getattr(args.domain, args.property))) | ||||
| 
 | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										82
									
								
								qubesmgmt/tools/qvm_shutdown.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								qubesmgmt/tools/qvm_shutdown.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | ||||
| # | ||||
| # The Qubes OS Project, http://www.qubes-os.org | ||||
| # | ||||
| # Copyright (C) 2010-2016  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2011-2016  Marek Marczykowski-Górecki | ||||
| #                                              <marmarek@invisiblethingslab.com> | ||||
| # Copyright (C) 2016       Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| ''' Shutdown a qube ''' | ||||
| 
 | ||||
| from __future__ import print_function | ||||
| 
 | ||||
| import sys | ||||
| import time | ||||
| 
 | ||||
| import qubesmgmt.tools | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser( | ||||
|     description=__doc__, vmname_nargs='+') | ||||
| 
 | ||||
| parser.add_argument('--force', | ||||
|     action='store_true', default=False, | ||||
|     help='force operation, even if may damage other VMs (eg. shutdown of' | ||||
|         ' network provider)') | ||||
| 
 | ||||
| parser.add_argument('--wait', | ||||
|     action='store_true', default=False, | ||||
|     help='wait for the VMs to shut down') | ||||
| 
 | ||||
| parser.add_argument('--timeout', | ||||
|     action='store', type=float, | ||||
|     default=60, | ||||
|     help='timeout after which domains are killed when using --wait' | ||||
|         ' (default: %d)') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None):  # pylint: disable=missing-docstring | ||||
|     args = parser.parse_args(args) | ||||
| 
 | ||||
|     for vm in args.domains: | ||||
|         if not vm.is_halted(): | ||||
|             vm.shutdown(force=args.force) | ||||
| 
 | ||||
|     if not args.wait: | ||||
|         return | ||||
| 
 | ||||
|     timeout = args.timeout | ||||
|     current_vms = list(sorted(args.domains)) | ||||
|     while timeout >= 0: | ||||
|         current_vms = [vm for vm in current_vms | ||||
|             if vm.get_power_state() != 'Halted'] | ||||
|         if not current_vms: | ||||
|             return 0 | ||||
|         args.app.log.info('Waiting for shutdown ({}): {}'.format( | ||||
|             timeout, ', '.join([str(vm) for vm in current_vms]))) | ||||
|         time.sleep(1) | ||||
|         timeout -= 1 | ||||
| 
 | ||||
|     args.app.log.info( | ||||
|         'Killing remaining qubes: {}' | ||||
|         .format(', '.join([str(vm) for vm in current_vms]))) | ||||
|     for vm in current_vms: | ||||
|         vm.kill() | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										49
									
								
								qubesmgmt/tools/qvm_unpause.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								qubesmgmt/tools/qvm_unpause.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | ||||
| # encoding=utf-8 | ||||
| # | ||||
| # The Qubes OS Project, https://www.qubes-os.org/ | ||||
| # | ||||
| # Copyright (C) 2010-2015  Joanna Rutkowska <joanna@invisiblethingslab.com> | ||||
| # Copyright (C) 2015       Wojtek Porczyk <woju@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU General Public License as published by | ||||
| # the Free Software Foundation; either version 2 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU General Public License along | ||||
| # with this program; if not, write to the Free Software Foundation, Inc., | ||||
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||
| # | ||||
| 
 | ||||
| '''qvm-unpause - Unpause a domain''' | ||||
| 
 | ||||
| import sys | ||||
| import qubesmgmt | ||||
| 
 | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser( | ||||
|     vmname_nargs='+', | ||||
|     description='unpause a domain') | ||||
| 
 | ||||
| 
 | ||||
| def main(args=None): | ||||
|     '''Main routine of :program:`qvm-unpause`. | ||||
| 
 | ||||
|     :param list args: Optional arguments to override those delivered from \ | ||||
|         command line. | ||||
|     ''' | ||||
| 
 | ||||
|     args = parser.parse_args(args) | ||||
|     for domain in args.domains: | ||||
|         domain.unpause() | ||||
| 
 | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki