[virt-tools-list] [virt-manager] [PATCH v2 2/8] create: Validate input on container bootstrap

Radostin Stoyanov rstoyanov1 at gmail.com
Wed Jul 5 16:51:19 UTC 2017


- Show error if source URL is not provided.
- Require password for authentication to source registry when username
  is provided.
- Show error if destination path is not directory.
- Show error if the user has no write permissions to destination path.
- Show Yes/No dialog if the destination directory is not empty.
---
 virtManager/create.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/virtManager/create.py b/virtManager/create.py
index af90eec..20880da 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -20,6 +20,7 @@
 
 import logging
 import pkgutil
+import os
 import threading
 import time
 
@@ -1271,6 +1272,30 @@ class vmmCreate(vmmGObjectUI):
         return self._get_config_install_page() in [INSTALL_PAGE_CONTAINER_APP,
                                                    INSTALL_PAGE_CONTAINER_OS,
                                                    INSTALL_PAGE_VZ_TEMPLATE]
+
+
+    def _get_config_oscontainer_bootstrap(self):
+        return self.widget("install-oscontainer-bootstrap").get_active()
+
+
+    def _get_config_oscontainer_source_url(self):
+        return (self.widget("install-oscontainer-source-url-entry")
+                    .get_text().strip())
+
+
+    def _get_config_oscontainer_source_username(self):
+        return (self.widget("install-oscontainer-source-user")
+                    .get_text().strip())
+
+
+    def _get_config_oscontainer_source_password(self):
+        return self.widget("install-oscontainer-source-passwd").get_text()
+
+
+    def _get_config_oscontainer_isecure(self):
+        return self.widget("install-oscontainer-source-insecure").get_active()
+
+
     def _should_skip_disk_page(self):
         return self._get_config_install_page() in [INSTALL_PAGE_IMPORT,
                                                    INSTALL_PAGE_CONTAINER_APP,
@@ -1953,6 +1978,41 @@ class vmmCreate(vmmGObjectUI):
             if not fs:
                 return self.err.val_err(_("An OS directory path is required."))
 
+            if self._get_config_oscontainer_bootstrap():
+
+                src_url = self._get_config_oscontainer_source_url()
+                user = self._get_config_oscontainer_source_username()
+                passwd = self._get_config_oscontainer_source_password()
+
+                # Check if the source path was provided
+                if not src_url:
+                    return self.err.val_err(_("Source URL is required"))
+
+                # Require username and password when authenticate
+                # to source registry.
+                if user and not passwd:
+                    return self.err.val_err(_("Please specify password "
+                                              "for accessing source registry"))
+
+                # Validate destination path
+                if os.path.exists(fs):
+                    if not os.path.isdir(fs):
+                        return self.err.val_err(_("Destination path "
+                                                  "is not directory: " + fs))
+                    if not os.access(fs, os.W_OK):
+                        return self.err.val_err(_("No write permissions for "
+                                                  "directory path: " + fs))
+                    if os.listdir(fs) != []:
+                        # Show Yes/No dialog if the destination is not empty
+                        res = self.err.yes_no(
+                            _("OS root directory is not empty"),
+                            _("Creating root file system in not empty "
+                              "directory might fail due to file conflicts.\n"
+                              "Would you like to contanue?"))
+                        if not res:
+                            return False
+
+
         elif instmethod == INSTALL_PAGE_VZ_TEMPLATE:
             instclass = virtinst.ContainerInstaller
             template = self.widget("install-container-template").get_text()
-- 
2.9.4




More information about the virt-tools-list mailing list