X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=deploy%2Fdeploy.py;h=bf0b39d4202d7f41a0ed9e3e181893c2c8306e2b;hb=463f78e5b480589a1f75a243330f84bed87a32ca;hp=7635cedbaf9ed8e35494ac2150a0ed8f471eaf8a;hpb=91257ff4ee78f32081af2e652f58a5ba9e834f61;p=fuel.git diff --git a/deploy/deploy.py b/deploy/deploy.py index 7635cedba..bf0b39d42 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -13,8 +13,10 @@ import os import io import re import sys -import netaddr import yaml +import errno +import signal +import netaddr from dea import DeploymentEnvironmentAdapter from dha import DeploymentHardwareAdapter @@ -38,6 +40,7 @@ FUEL_VM = 'fuel' PATCH_DIR = 'fuel_patch' WORK_DIR = '~/deploy' CWD = os.getcwd() +MOUNT_STATE_VAR = 'AUTODEPLOY_ISO_MOUNTED' class cd: @@ -118,6 +121,7 @@ class AutoDeploy(object): self.patch(tmp_new_dir, new_iso) except Exception as e: exec_cmd('fusermount -u %s' % tmp_orig_dir, False) + os.environ.pop(MOUNT_STATE_VAR, None) delete(self.tmp_dir) err(e) @@ -126,9 +130,11 @@ class AutoDeploy(object): os.makedirs(tmp_orig_dir) os.makedirs(tmp_new_dir) exec_cmd('fuseiso %s %s' % (self.iso_file, tmp_orig_dir)) + os.environ[MOUNT_STATE_VAR] = tmp_orig_dir with cd(tmp_orig_dir): exec_cmd('find . | cpio -pd %s' % tmp_new_dir) exec_cmd('fusermount -u %s' % tmp_orig_dir) + os.environ.pop(MOUNT_STATE_VAR, None) delete(tmp_orig_dir) exec_cmd('chmod -R 755 %s' % tmp_new_dir) @@ -142,10 +148,10 @@ class AutoDeploy(object): delete('.rr_moved') isolinux = 'isolinux/isolinux.cfg' log('isolinux.cfg before: %s' - % exec_cmd('grep netmask %s' % isolinux)) + % exec_cmd('grep ip= %s' % isolinux)) self.update_fuel_isolinux(isolinux) log('isolinux.cfg after: %s' - % exec_cmd('grep netmask %s' % isolinux)) + % exec_cmd('grep ip= %s' % isolinux)) iso_label = self.parse_iso_volume_label(self.iso_file) log('Volume label: %s' % iso_label) @@ -161,32 +167,27 @@ class AutoDeploy(object): with io.open(file) as f: data = f.read() for key, val in self.fuel_conf.iteritems(): + # skip replacing these keys, as the format is different + if key in ['ip', 'gw', 'netmask', 'hostname']: + continue + 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) + # process networking parameters + ip = ':'.join([self.fuel_conf['ip'], + '', + self.fuel_conf['gw'], + self.fuel_conf['netmask'], + self.fuel_conf['hostname'], + 'eth0:off:::']) + + data = re.sub(r'ip=[^ ]\S+', 'ip=%s' % ip, data) 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: ' @@ -341,7 +342,28 @@ def parse_arguments(): return kwargs +def handle_signals(signal_num, frame): + signal.signal(signal.SIGINT, signal.SIG_IGN) + signal.signal(signal.SIGTERM, signal.SIG_IGN) + + log('Caught signal %s, cleaning up and exiting.' % signal_num) + + mount_point = os.environ.get(MOUNT_STATE_VAR) + if mount_point: + log('Unmounting ISO from "%s"' % mount_point) + # Prevent 'Device or resource busy' errors when unmounting + os.chdir('/') + exec_cmd('fusermount -u %s' % mount_point, True) + # Be nice and remove our environment variable, even though the OS would + # would clean it up anyway + os.environ.pop(MOUNT_STATE_VAR) + + sys.exit(1) + + def main(): + signal.signal(signal.SIGINT, handle_signals) + signal.signal(signal.SIGTERM, handle_signals) kwargs = parse_arguments() d = AutoDeploy(**kwargs) sys.exit(d.run())