| OLD | NEW | 
|---|
| 1 """ | 1 """ | 
| 2 Library to perform pre/post test setup for KVM autotest. | 2 Library to perform pre/post test setup for KVM autotest. | 
| 3 """ | 3 """ | 
| 4 import os, shutil, tempfile, re, ConfigParser, glob, inspect | 4 import os, shutil, tempfile, re, ConfigParser, glob, inspect | 
| 5 import logging, time | 5 import logging, time | 
| 6 from autotest_lib.client.common_lib import error | 6 from autotest_lib.client.common_lib import error | 
| 7 from autotest_lib.client.bin import utils | 7 from autotest_lib.client.bin import utils | 
| 8 | 8 | 
| 9 | 9 | 
| 10 @error.context_aware | 10 @error.context_aware | 
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 220         """ | 220         """ | 
| 221         root_dir = test.bindir | 221         root_dir = test.bindir | 
| 222         images_dir = os.path.join(root_dir, 'images') | 222         images_dir = os.path.join(root_dir, 'images') | 
| 223         self.deps_dir = os.path.join(root_dir, 'deps') | 223         self.deps_dir = os.path.join(root_dir, 'deps') | 
| 224         self.unattended_dir = os.path.join(root_dir, 'unattended') | 224         self.unattended_dir = os.path.join(root_dir, 'unattended') | 
| 225 | 225 | 
| 226         attributes = ['kernel_args', 'finish_program', 'cdrom_cd1', | 226         attributes = ['kernel_args', 'finish_program', 'cdrom_cd1', | 
| 227                       'unattended_file', 'medium', 'url', 'kernel', 'initrd', | 227                       'unattended_file', 'medium', 'url', 'kernel', 'initrd', | 
| 228                       'nfs_server', 'nfs_dir', 'install_virtio', 'floppy', | 228                       'nfs_server', 'nfs_dir', 'install_virtio', 'floppy', | 
| 229                       'cdrom_unattended', 'boot_path', 'extra_params', | 229                       'cdrom_unattended', 'boot_path', 'extra_params', | 
| 230                       'qemu_img_binary'] | 230                       'qemu_img_binary', 'cdkey', 'virtio_storage_path', | 
|  | 231                       'virtio_network_path', 'virtio_network_installer_path'] | 
| 231 | 232 | 
| 232         for a in attributes: | 233         for a in attributes: | 
| 233             setattr(self, a, params.get(a, '')) | 234             setattr(self, a, params.get(a, '')) | 
| 234 | 235 | 
| 235         if self.install_virtio == 'yes': | 236         if self.install_virtio == 'yes': | 
| 236             v_attributes = ['virtio_floppy', 'virtio_storage_path', | 237             v_attributes = ['virtio_floppy', 'virtio_storage_path', | 
| 237                             'virtio_network_path', 'virtio_oemsetup_id', | 238                             'virtio_network_path', 'virtio_oemsetup_id', | 
| 238                             'virtio_network_installer'] | 239                             'virtio_network_installer'] | 
| 239             for va in v_attributes: | 240             for va in v_attributes: | 
| 240                 setattr(self, va, params.get(va, '')) | 241                 setattr(self, va, params.get(va, '')) | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 271         Replace KVM_TEST_CDKEY (in the unattended file) with the cdkey | 272         Replace KVM_TEST_CDKEY (in the unattended file) with the cdkey | 
| 272         provided for this test and replace the KVM_TEST_MEDIUM with | 273         provided for this test and replace the KVM_TEST_MEDIUM with | 
| 273         the tree url or nfs address provided for this test. | 274         the tree url or nfs address provided for this test. | 
| 274 | 275 | 
| 275         @return: Answer file contents | 276         @return: Answer file contents | 
| 276         """ | 277         """ | 
| 277         error.base_context('Rendering final answer file') | 278         error.base_context('Rendering final answer file') | 
| 278         error.context('Reading answer file %s' % self.unattended_file) | 279         error.context('Reading answer file %s' % self.unattended_file) | 
| 279         unattended_contents = open(self.unattended_file).read() | 280         unattended_contents = open(self.unattended_file).read() | 
| 280         dummy_cdkey_re = r'\bKVM_TEST_CDKEY\b' | 281         dummy_cdkey_re = r'\bKVM_TEST_CDKEY\b' | 
| 281         real_cdkey = os.environ.get('KVM_TEST_cdkey') |  | 
| 282         if re.search(dummy_cdkey_re, unattended_contents): | 282         if re.search(dummy_cdkey_re, unattended_contents): | 
| 283             if real_cdkey: | 283             if self.cdkey: | 
| 284                 unattended_contents = re.sub(dummy_cdkey_re, real_cdkey, | 284                 unattended_contents = re.sub(dummy_cdkey_re, self.cdkey, | 
| 285                                              unattended_contents) | 285                                              unattended_contents) | 
| 286             else: | 286             else: | 
| 287                 print ("WARNING: 'cdkey' required but not specified for " | 287                 print ("WARNING: 'cdkey' required but not specified for " | 
| 288                        "this unattended installation") | 288                        "this unattended installation") | 
| 289 | 289 | 
| 290         dummy_medium_re = r'\bKVM_TEST_MEDIUM\b' | 290         dummy_medium_re = r'\bKVM_TEST_MEDIUM\b' | 
| 291         if self.medium == "cdrom": | 291         if self.medium == "cdrom": | 
| 292             content = "cdrom" | 292             content = "cdrom" | 
| 293         elif self.medium == "url": | 293         elif self.medium == "url": | 
| 294             content = "url --url %s" % self.url | 294             content = "url --url %s" % self.url | 
| 295         elif self.medium == "nfs": | 295         elif self.medium == "nfs": | 
| 296             content = "nfs --server=%s --dir=%s" % (self.nfs_server, | 296             content = "nfs --server=%s --dir=%s" % (self.nfs_server, | 
| 297                                                     self.nfs_dir) | 297                                                     self.nfs_dir) | 
| 298         else: | 298         else: | 
| 299             raise ValueError("Unexpected installation medium %s" % self.url) | 299             raise ValueError("Unexpected installation medium %s" % self.url) | 
| 300 | 300 | 
| 301         unattended_contents = re.sub(dummy_medium_re, content, | 301         unattended_contents = re.sub(dummy_medium_re, content, | 
| 302                                      unattended_contents) | 302                                      unattended_contents) | 
| 303 | 303 | 
| 304         def replace_virtio_key(contents, dummy_re, env): | 304         def replace_virtio_key(contents, dummy_re, attribute_name): | 
| 305             """ | 305             """ | 
| 306             Replace a virtio dummy string with contents. | 306             Replace a virtio dummy string with contents. | 
| 307 | 307 | 
| 308             If install_virtio is not set, replace it with a dummy string. | 308             If install_virtio is not set, replace it with a dummy string. | 
| 309 | 309 | 
| 310             @param contents: Contents of the unattended file | 310             @param contents: Contents of the unattended file | 
| 311             @param dummy_re: Regular expression used to search on the. | 311             @param dummy_re: Regular expression used to search on the. | 
| 312                     unattended file contents. | 312                     unattended file contents. | 
| 313             @param env: Name of the environment variable. | 313             @param env: Name of the environment variable. | 
| 314             """ | 314             """ | 
| 315             dummy_path = "C:" | 315             dummy_path = "C:" | 
| 316             driver = os.environ.get(env, '') | 316             driver = getattr(self, attribute_name, '') | 
| 317 | 317 | 
| 318             if re.search(dummy_re, contents): | 318             if re.search(dummy_re, contents): | 
| 319                 if self.install_virtio == "yes": | 319                 if self.install_virtio == "yes": | 
| 320                     if driver.endswith("msi"): | 320                     if driver.endswith("msi"): | 
| 321                         driver = 'msiexec /passive /package ' + driver | 321                         driver = 'msiexec /passive /package ' + driver | 
| 322                     else: | 322                     else: | 
| 323                         try: | 323                         try: | 
| 324                             # Let's escape windows style paths properly | 324                             # Let's escape windows style paths properly | 
| 325                             drive, path = driver.split(":") | 325                             drive, path = driver.split(":") | 
| 326                             driver = drive + ":" + re.escape(path) | 326                             driver = drive + ":" + re.escape(path) | 
| 327                         except: | 327                         except: | 
| 328                             pass | 328                             pass | 
| 329                     contents = re.sub(dummy_re, driver, contents) | 329                     contents = re.sub(dummy_re, driver, contents) | 
| 330                 else: | 330                 else: | 
| 331                     contents = re.sub(dummy_re, dummy_path, contents) | 331                     contents = re.sub(dummy_re, dummy_path, contents) | 
| 332             return contents | 332             return contents | 
| 333 | 333 | 
| 334         vdict = {r'\bKVM_TEST_STORAGE_DRIVER_PATH\b': | 334         vdict = {r'\bKVM_TEST_STORAGE_DRIVER_PATH\b': | 
| 335                  'KVM_TEST_virtio_storage_path', | 335                  'virtio_storage_path', | 
| 336                  r'\bKVM_TEST_NETWORK_DRIVER_PATH\b': | 336                  r'\bKVM_TEST_NETWORK_DRIVER_PATH\b': | 
| 337                  'KVM_TEST_virtio_network_path', | 337                  'virtio_network_path', | 
| 338                  r'\bKVM_TEST_VIRTIO_NETWORK_INSTALLER\b': | 338                  r'\bKVM_TEST_VIRTIO_NETWORK_INSTALLER\b': | 
| 339                  'KVM_TEST_virtio_network_installer_path'} | 339                  'virtio_network_installer_path'} | 
| 340 | 340 | 
| 341         for vkey in vdict: | 341         for vkey in vdict: | 
| 342             unattended_contents = replace_virtio_key(unattended_contents, | 342             unattended_contents = replace_virtio_key( | 
| 343                                                      vkey, vdict[vkey]) | 343                                                    contents=unattended_contents, | 
|  | 344                                                    dummy_re=vkey, | 
|  | 345                                                    attribute_name=vdict[vkey]) | 
| 344 | 346 | 
| 345         logging.debug("Unattended install contents:") | 347         logging.debug("Unattended install contents:") | 
| 346         for line in unattended_contents.splitlines(): | 348         for line in unattended_contents.splitlines(): | 
| 347             logging.debug(line) | 349             logging.debug(line) | 
| 348         return unattended_contents | 350         return unattended_contents | 
| 349 | 351 | 
| 350 | 352 | 
| 351     def setup_boot_disk(self): | 353     def setup_boot_disk(self): | 
| 352         answer_contents = self.render_answer_file() | 354         answer_contents = self.render_answer_file() | 
| 353 | 355 | 
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 686         l_result = utils.run('losetup -a') | 688         l_result = utils.run('losetup -a') | 
| 687         if self.loopback and (self.loopback in l_result.stdout): | 689         if self.loopback and (self.loopback in l_result.stdout): | 
| 688             try: | 690             try: | 
| 689                 utils.run("losetup -d %s" % self.loopback) | 691                 utils.run("losetup -d %s" % self.loopback) | 
| 690             except error.CmdError: | 692             except error.CmdError: | 
| 691                 logging.error("Failed to liberate loopback %s", self.loopback) | 693                 logging.error("Failed to liberate loopback %s", self.loopback) | 
| 692         if os.path.islink(self.qcow_file_path): | 694         if os.path.islink(self.qcow_file_path): | 
| 693             os.remove(self.qcow_file_path) | 695             os.remove(self.qcow_file_path) | 
| 694         if os.path.isfile(self.raw_file_path): | 696         if os.path.isfile(self.raw_file_path): | 
| 695             os.remove(self.raw_file_path) | 697             os.remove(self.raw_file_path) | 
| OLD | NEW | 
|---|