The bootstrap method is called at the end of the "create dialog" (when "Finish" button is clicked). We handle two cases: 1. When virt-bootstrap fails. User re-clicks the 'Finish' button and we reattempt the container bootstrap. 2. When virt-bootstrap succeeds, but something later in the install fails, like XML define. If user re-clicks 'Finish' we don't attempt virt-bootstrap again, just use the directory path. This is achieved by unchecking the 'install-oscontainer-bootstrap' checkbox is unchecked if virt-bootstrap succeeds. Log messages from the virtBootstrap's logger are stored in string buffer and shown in case of failure. --- virtManager/create.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/virtManager/create.py b/virtManager/create.py index 662c200..75fd553 100644 --- a/virtManager/create.py +++ b/virtManager/create.py @@ -21,6 +21,7 @@ import logging import pkgutil import os +import cStringIO import threading import time @@ -2494,6 +2495,19 @@ class vmmCreate(vmmGObjectUI): """ meter = asyncjob.get_meter() + container_bootstrap = self._get_config_oscontainer_bootstrap() + # If creating new container and "container bootstrap" is enabled + if self._guest.os.is_container() and container_bootstrap: + # Start container bootstrap + src_url = self._get_config_oscontainer_source_url() + dest = self.widget("install-oscontainer-fs").get_text() + user = self._get_config_oscontainer_source_username() + passwd = self._get_config_oscontainer_source_password() + insecure = self._get_config_oscontainer_isecure() + + self._create_directory_tree(asyncjob, src_url, dest, user, passwd, + insecure) + # Build a list of pools we should refresh, if we are creating storage refresh_pools = [] for disk in guest.get_devices("disk"): @@ -2578,3 +2592,35 @@ class vmmCreate(vmmGObjectUI): self.err.show_err(_("Error continue install: %s") % str(e)) return True + + + def _create_directory_tree(self, asyncjob, src, dest, user, passwd, insecure): + """ + Call bootstrap method from virtBootstrap. + """ + import virtBootstrap + + # Use string buffer to store log messages + log_stream = cStringIO.StringIO() + + # Get virt-bootstrap logger + vbLogger = logging.getLogger('virtBootstrap') + vbLogger.setLevel(logging.DEBUG) + vbLogger.addHandler(logging.StreamHandler(log_stream)) + + # Key word arguments to be passed + kwargs = {'uri': src, 'dest': dest, 'not_secure': insecure} + if user and passwd: + kwargs['username'] = user + kwargs['password'] = passwd + + logging.debug('Start container bootstrap') + try: + virtBootstrap.bootstrap(**kwargs) + # Success - uncheck the 'install-oscontainer-bootstrap' checkbox + self.widget("install-oscontainer-bootstrap").set_active(False) + except Exception as err: + asyncjob.set_error(err, log_stream.getvalue()) + except: + asyncjob.set_error("Container bootstrap has failed", + log_stream.getvalue()) -- 2.9.4 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list