From 91257ff4ee78f32081af2e652f58a5ba9e834f61 Mon Sep 17 00:00:00 2001 From: Peter Barabas Date: Mon, 18 Jan 2016 15:03:07 +0100 Subject: Uplift deployment code for Fuel 8.0 Change-Id: If784cbd7371133bd35e95004a11e9802660ac332 Signed-off-by: Peter Barabas --- deploy/README | 2 +- deploy/deploy.py | 32 ++++++++++++++++++++++++++++++-- deploy/fuel_patch/ks.cfg.patch | 28 ++++++++++++++-------------- deploy/install_fuel_master.py | 5 +++-- 4 files changed, 48 insertions(+), 19 deletions(-) diff --git a/deploy/README b/deploy/README index 167078bf8..7a3e09dc9 100644 --- a/deploy/README +++ b/deploy/README @@ -5,7 +5,7 @@ the following dependencies and python modules are required to be installed: - for Ubuntu: -sudo apt-get install -y libvirt-bin qemu-kvm python-pip fuseiso mkisofs +sudo apt-get install -y libvirt-bin qemu-kvm python-pip fuseiso mkisofs genisoimage sudo apt-get install -y python-dev libz-dev libxml2-dev libxslt-dev sudo pip install pyyaml netaddr paramiko lxml scp pycrypto ecdsa diff --git a/deploy/deploy.py b/deploy/deploy.py index 8a4bfc40a..7635cedba 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -147,12 +147,15 @@ class AutoDeploy(object): log('isolinux.cfg after: %s' % exec_cmd('grep netmask %s' % isolinux)) + iso_label = self.parse_iso_volume_label(self.iso_file) + log('Volume label: %s' % iso_label) + iso_linux_bin = 'isolinux/isolinux.bin' exec_cmd('mkisofs -quiet -r -J -R -b %s ' '-no-emul-boot -boot-load-size 4 ' '-boot-info-table -hide-rr-moved ' - '-x "lost+found:" -o %s .' - % (iso_linux_bin, new_iso)) + '-x "lost+found:" -V %s -o %s .' + % (iso_linux_bin, iso_label, new_iso)) def update_fuel_isolinux(self, file): with io.open(file) as f: @@ -161,9 +164,34 @@ class AutoDeploy(object): pattern = r'%s=[^ ]\S+' % key replace = '%s=%s' % (key, val) data = re.sub(pattern, replace, data) + + netmask = self.fuel_conf['netmask'] + data = self.append_kernel_param(data, 'netmask=%s' % netmask) + with io.open(file, 'w') as f: f.write(data) + def append_kernel_param(self, data, kernel_param): + """Append the specified kernel parameter to a list of kernel + parameters. Do it only if it isn't already there. + """ + data_final = '' + key = re.match(r'(.+?=)', kernel_param).group() + + for line in data.splitlines(): + data_final += line + if (re.search(r'append ', line) and + not re.search(key, line)): + data_final += ' ' + kernel_param + data_final += '\n' + + return data_final + + def parse_iso_volume_label(self, iso_filename): + label_line = exec_cmd('isoinfo -d -i %s | grep -i "Volume id: "' % iso_filename) + # cut leading text: 'Volume id: ' + return label_line[11:] + def deploy_env(self): dep = CloudDeploy(self.dea, self.dha, self.fuel_conf['ip'], self.fuel_username, self.fuel_password, diff --git a/deploy/fuel_patch/ks.cfg.patch b/deploy/fuel_patch/ks.cfg.patch index 189695792..8c9cebc0f 100644 --- a/deploy/fuel_patch/ks.cfg.patch +++ b/deploy/fuel_patch/ks.cfg.patch @@ -1,19 +1,19 @@ -*** ks.cfg.orig Wed Apr 15 21:47:09 2015 ---- ks.cfg Wed Apr 15 21:47:24 2015 +*** ks.cfg.orig 2016-01-25 08:56:16.406241267 +0100 +--- ks.cfg 2016-01-25 14:31:11.417761494 +0100 *************** -*** 35,41 **** +*** 98,104 **** default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'` - installdrive="undefined" -! forceformat="no" - for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done - - set ${drives} ${removable_drives} ---- 35,41 ---- + installdrive=${installdrive:-undefined} +! forceformat=${forceformat:-no} + for I in $(cat /proc/cmdline); do + case "$I" in + *=*) +--- 98,104 ---- default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'` - installdrive="undefined" -! forceformat="yes" - for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done - - set ${drives} ${removable_drives} + installdrive=${installdrive:-undefined} +! forceformat=${forceformat:-yes} + for I in $(cat /proc/cmdline); do + case "$I" in + *=*) diff --git a/deploy/install_fuel_master.py b/deploy/install_fuel_master.py index e3a7327c0..4f6a0527b 100644 --- a/deploy/install_fuel_master.py +++ b/deploy/install_fuel_master.py @@ -87,7 +87,7 @@ class InstallFuelMaster(object): log('Found FUEL menu as PID %s, now killing it' % fuel_menu_pid) self.ssh_exec_cmd('kill %s' % fuel_menu_pid, False) - log('Wait until installation complete') + log('Wait until installation is complete') self.wait_until_installation_completed() log('Waiting for one minute for Fuel to stabilize') @@ -117,6 +117,7 @@ class InstallFuelMaster(object): plugin_files = [] with self.ssh as s: for plugin_location in [PLUGINS_DIR, LOCAL_PLUGIN_FOLDER]: + s.exec_cmd('mkdir -p %s' % plugin_location) r = s.exec_cmd('find %s -type f -name \'*.rpm\'' % plugin_location) plugin_files.extend(r.splitlines()) @@ -130,7 +131,7 @@ class InstallFuelMaster(object): 'failed: %s' % (f, e)) def wait_for_node_up(self): - WAIT_LOOP = 60 + WAIT_LOOP = 240 SLEEP_TIME = 10 success = False for i in range(WAIT_LOOP): -- cgit 1.2.3-korg