diff --git a/backend.py b/backend.py index e1733465..3def777f 100644 --- a/backend.py +++ b/backend.py @@ -106,6 +106,7 @@ def getPrepSequence(ans, interactive): seq = [ Task(util.getUUID, As(ans), ['installation-uuid']), Task(util.getUUID, As(ans), ['control-domain-uuid']), + Task(util.mgmtAddrType, As(ans), ['management-address-type']), Task(util.randomLabelStr, As(ans), ['disk-label-suffix']), Task(diskutil.create_raid, A(ans, 'raid'), []), Task(partitionTargetDisk, A(ans, 'primary-disk', 'installation-to-overwrite', 'preserve-first-partition','sr-on-primary'), ['target-boot-mode', 'boot-partnum', 'primary-partnum', 'backup-partnum', 'logs-partnum', 'swap-partnum', 'storage-partnum']), @@ -190,7 +191,7 @@ def getFinalisationSequence(ans): Task(writeFstab, A(ans, 'mounts', 'target-boot-mode', 'primary-disk', 'logs-partnum', 'swap-partnum', 'disk-label-suffix'), []), Task(enableAgent, A(ans, 'mounts', 'network-backend', 'services'), []), Task(configureCC, A(ans, 'mounts'), []), - Task(writeInventory, A(ans, 'installation-uuid', 'control-domain-uuid', 'mounts', 'primary-disk', + Task(writeInventory, A(ans, 'installation-uuid', 'control-domain-uuid', 'management-address-type', 'mounts', 'primary-disk', 'backup-partnum', 'storage-partnum', 'guest-disks', 'net-admin-bridge', 'branding', 'net-admin-configuration', 'host-config', 'install-type'), []), Task(writeXencommons, A(ans, 'control-domain-uuid', 'mounts'), []), @@ -1595,7 +1596,7 @@ def writeXencommons(controlID, mounts): with open(os.path.join(mounts['root'], constants.XENCOMMONS_FILE), "w") as f: f.write(contents) -def writeInventory(installID, controlID, mounts, primary_disk, backup_partnum, storage_partnum, guest_disks, admin_bridge, branding, admin_config, host_config, install_type): +def writeInventory(installID, controlID, mgmtAddrType, mounts, primary_disk, backup_partnum, storage_partnum, guest_disks, admin_bridge, branding, admin_config, host_config, install_type): inv = open(os.path.join(mounts['root'], constants.INVENTORY_FILE), "w") if 'product-brand' in branding: inv.write("PRODUCT_BRAND='%s'\n" % branding['product-brand']) @@ -1636,11 +1637,15 @@ def writeInventory(installID, controlID, mounts, primary_disk, backup_partnum, s inv.write("DOM0_MEM='%d'\n" % host_config['dom0-mem']) inv.write("DOM0_VCPUS='%d'\n" % host_config['dom0-vcpus']) inv.write("MANAGEMENT_INTERFACE='%s'\n" % admin_bridge) - # Default to IPv4 unless we have only got an IPv6 admin interface - if ((not admin_config.mode) and admin_config.modev6): - inv.write("MANAGEMENT_ADDRESS_TYPE='IPv6'\n") + # If we read MANAGEMENT_ADDRESS_TYPE from xensource-inventory use it + if mgmtAddrType: + inv.write("MANAGEMENT_ADDRESS_TYPE='%s'\n" % mgmtAddrType) else: - inv.write("MANAGEMENT_ADDRESS_TYPE='IPv4'\n") + # Default to IPv4 unless we have only got an IPv6 admin interface + if ((not admin_config.mode) and admin_config.modev6): + inv.write("MANAGEMENT_ADDRESS_TYPE='IPv6'\n") + else: + inv.write("MANAGEMENT_ADDRESS_TYPE='IPv4'\n") if constants.CC_PREPARATIONS and install_type == constants.INSTALL_TYPE_FRESH: inv.write("CC_PREPARATIONS='true'\n") inv.close() diff --git a/upgrade.py b/upgrade.py index 99a9cf2c..d1604462 100644 --- a/upgrade.py +++ b/upgrade.py @@ -524,17 +524,18 @@ def replace_config(config_file, destination): primary_fs.unmount() prepUpgradeArgs = [] - prepStateChanges = ['installation-uuid', 'control-domain-uuid'] - def prepareUpgrade(self, progress_callback): + prepStateChanges = ['installation-uuid', 'control-domain-uuid', 'management-address-type'] + def prepareUpgrade(self, progress_callback, installID, controlID, mgmtAddrType): """ Try to preserve the installation and control-domain UUIDs from xensource-inventory.""" try: installID = self.source.getInventoryValue("INSTALLATION_UUID") controlID = self.source.getInventoryValue("CONTROL_DOMAIN_UUID") + mgmtAddrType = self.source.getInventoryValue("MANAGEMENT_ADDRESS_TYPE") except KeyError: - raise RuntimeError("Required information (INSTALLATION_UUID, CONTROL_DOMAIN_UUID) was missing from your xensource-inventory file. Aborting installation; please replace these keys and try again.") + raise RuntimeError("Required information (INSTALLATION_UUID, CONTROL_DOMAIN_UUID, MANAGEMENT_ADDRESS_TYPE) was missing from your xensource-inventory file. Aborting installation; please replace these keys and try again.") - return installID, controlID + return installID, controlID, mgmtAddrType def buildRestoreList(self, src_base): self.restore_list += ['etc/xensource/ptoken', 'etc/xensource/pool.conf', diff --git a/util.py b/util.py index 569babfa..8656f039 100644 --- a/util.py +++ b/util.py @@ -359,6 +359,9 @@ def udevinfoCmd(): def randomLabelStr(): return "".join([random.choice(string.ascii_lowercase) for x in range(6)]) +def mgmtAddrType(): + return None + def getLocalTime(timezone=None): if timezone: os.environ['TZ'] = timezone