Uplift deployment code for Fuel 8.0 29/7129/12
authorPeter Barabas <peter.barabas@ericsson.com>
Mon, 18 Jan 2016 14:03:07 +0000 (15:03 +0100)
committerJonas Bjurel <jonas.bjurel@ericsson.com>
Mon, 25 Jan 2016 20:33:40 +0000 (20:33 +0000)
Change-Id: If784cbd7371133bd35e95004a11e9802660ac332
Signed-off-by: Peter Barabas <peter.barabas@ericsson.com>
deploy/README
deploy/deploy.py
deploy/fuel_patch/ks.cfg.patch
deploy/install_fuel_master.py

index 167078b..7a3e09d 100644 (file)
@@ -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
 
index 8a4bfc4..7635ced 100755 (executable)
@@ -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,
index 1896957..8c9cebc 100644 (file)
@@ -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
+      *=*)
index e3a7327..4f6a052 100644 (file)
@@ -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):