From 12092c3aa5cb3144c8c862329d8cfff7ef72cca9 Mon Sep 17 00:00:00 2001 From: Wojtek Porczyk Date: Tue, 30 Jun 2015 17:06:35 +0200 Subject: [PATCH] core3: port TemplateVM --- core-modules/003QubesTemplateVm.py | 97 ------------------------------ qubes/vm/templatevm.py | 30 ++++++++- 2 files changed, 28 insertions(+), 99 deletions(-) delete mode 100644 core-modules/003QubesTemplateVm.py diff --git a/core-modules/003QubesTemplateVm.py b/core-modules/003QubesTemplateVm.py deleted file mode 100644 index e5c992ce..00000000 --- a/core-modules/003QubesTemplateVm.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/python2 -# -*- coding: utf-8 -*- -# -# The Qubes OS Project, http://www.qubes-os.org -# -# Copyright (C) 2010 Joanna Rutkowska -# Copyright (C) 2013 Marek Marczykowski -# -# 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. -# -# - -import os -import subprocess -import sys - -from qubes.qubes import QubesVm,register_qubes_vm_class,dry_run -from qubes.qubes import QubesVmCollection,QubesException,QubesVmLabels -from qubes.qubes import defaults,system_path,vm_files,vmm - -class QubesTemplateVm(QubesVm): - """ - A class that represents an TemplateVM. A child of QubesVm. - """ - - # In which order load this VM type from qubes.xml - load_order = 50 - - def get_attrs_config(self): - attrs_config = super(QubesTemplateVm, self).get_attrs_config() - attrs_config['dir_path']['func'] = \ - lambda value: value if value is not None else \ - os.path.join(system_path["qubes_templates_dir"], self.name) - attrs_config['label']['default'] = defaults["template_label"] - - return attrs_config - - def __init__(self, **kwargs): - - super(QubesTemplateVm, self).__init__(**kwargs) - - self.appvms = QubesVmCollection() - - @property - def type(self): - return "TemplateVM" - - @property - def updateable(self): - return True - - def is_template(self): - return True - - def get_firewall_defaults(self): - return { "rules": list(), "allow": False, "allowDns": False, "allowIcmp": False, "allowYumProxy": True } - - @property - def rootcow_img(self): - return self.storage.rootcow_img - - def clone_disk_files(self, src_vm, verbose): - if dry_run: - return - - super(QubesTemplateVm, self).clone_disk_files(src_vm=src_vm, verbose=verbose) - - # Create root-cow.img - self.commit_changes(verbose=verbose) - - def commit_changes (self, verbose = False): - self.log.debug('commit_changes()') - - if not vmm.offline_mode: - assert not self.is_running(), "Attempt to commit changes on running Template VM!" - - if verbose: - print >> sys.stderr, "--> Commiting template updates... COW: {0}...".format (self.rootcow_img) - - if dry_run: - return - - self.storage.commit_template_changes() - -register_qubes_vm_class(QubesTemplateVm) diff --git a/qubes/vm/templatevm.py b/qubes/vm/templatevm.py index d7ba471a..8f4bdce4 100644 --- a/qubes/vm/templatevm.py +++ b/qubes/vm/templatevm.py @@ -7,8 +7,34 @@ import qubes.vm.qubesvm class TemplateVM(qubes.vm.qubesvm.QubesVM): '''Template for AppVM''' - def __init__(self, D): - super(TemplateVM, self).__init__(D) + @property + def rootcow_img(self): + '''COW image''' + return self.storage.rootcow_img + + + def __init__(self, *args, **kwargs): + super(TemplateVM, self).__init__(*args, **kwargs) # Some additional checks for template based VM assert self.root_img is not None, "Missing root_img for standalone VM!" + + + def clone_disk_files(self, src): + super(QubesTemplateVm, self).clone_disk_files(src) + + # Create root-cow.img + self.commit_changes() + + + def commit_changes(self): + '''Commit changes to template''' + self.log.debug('commit_changes()') + + if not self.app.vmm.offline_mode: + assert not self.is_running(), \ + 'Attempt to commit changes on running Template VM!' + + self.log.info( + 'Commiting template update; COW: {}'.format(self.rootcow_img)) + self.storage.commit_template_changes()