X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=account.py;h=576fe719c0988ac7df4232ecba73959fada13ff4;hb=0a3ad704b062bbad72dbbc1e0c753da56da45e84;hp=61d3624e6522350780d4bcec2365634963f81365;hpb=b885d5d47644343378129c3e38b5676c9b747aea;p=nodemanager.git diff --git a/account.py b/account.py index 61d3624..576fe71 100644 --- a/account.py +++ b/account.py @@ -71,9 +71,11 @@ def get(name): """ name_worker_lock.acquire() try: - if name not in name_worker: name_worker[name] = Worker(name) + if name not in name_worker: + name_worker[name] = Worker(name) return name_worker[name] - finally: name_worker_lock.release() + finally: + name_worker_lock.release() class Account: @@ -99,7 +101,8 @@ class Account: Write to my authorized_keys file. """ new_keys = rec['keys'] - logger.verbose('account: configuring {} with {} keys'.format(self.name, len(new_keys))) + nb_keys = len(new_keys) if isinstance(new_keys, list) else 1 + logger.verbose('account: configuring {} with {} keys'.format(self.name, nb_keys)) if new_keys != self.keys: # get the unix account info gid = grp.getgrnam("slices")[2] @@ -143,14 +146,9 @@ class Account: try: with open(stampname) as f: current_slicefamily = f.read().strip() - if current_slicefamily != target_slicefamily: - logger.info("slice {} : new slice family - would require reimaging" - .format(self.name)) - return True - else: - return False + return current_slicefamily != target_slicefamily except IOError as e: - logger.verbose("Missing slicefamily {} - considered OK" + logger.verbose("Account.needs_reimage: missing slicefamily {} - left as-is" .format(self.name)) return False @@ -158,14 +156,18 @@ class Account: # which is a static method, they need to become static as well # needs to be done before sliver starts (checked with vs and lxc) @staticmethod - def mount_ssh_dir (slicename): return Account._manage_ssh_dir (slicename, do_mount=True) + def mount_ssh_dir (slicename): + return Account._manage_ssh_dir (slicename, do_mount=True) @staticmethod - def umount_ssh_dir (slicename): return Account._manage_ssh_dir (slicename, do_mount=False) + def umount_ssh_dir (slicename): + return Account._manage_ssh_dir (slicename, do_mount=False) # bind mount / umount root side dir to sliver side @staticmethod def _manage_ssh_dir (slicename, do_mount): - logger.log ("_manage_ssh_dir, requested to "+("mount" if do_mount else "umount")+" ssh dir for "+ slicename) + logger.log("_manage_ssh_dir, requested to " + + ( "mount" if do_mount else "umount" ) + + " ssh dir for "+ slicename) try: root_ssh = "/home/{}/.ssh".format(slicename) sliver_ssh = "/vservers/{}/home/{}/.ssh".format(slicename, slicename) @@ -195,8 +197,8 @@ class Account: msg = "OK" if umounted else "WARNING: FAILED" logger.log("_manage_ssh_dir: umounted {} - {}" .format(sliver_ssh, msg)) - except: - logger.log_exc("_manage_ssh_dir failed", name=slicename) + except Exception as e: + logger.log_exc("_manage_ssh_dir failed : {}".format(e), name=slicename) class Worker: @@ -230,7 +232,8 @@ class Worker: # this sliver has the lease, it is safe to start it if not self.is_running(): self.start(rec) - else: self.configure(rec) + else: + self.configure(rec) else: # not having the lease, do not start it self.configure(rec) @@ -238,7 +241,7 @@ class Worker: # xxx it's not clear what to do when a sliver changes type/class # in a reservable node else: - if not self.is_running() or self.needs_reimage(ref['vref']) or next_class != curr_class: + if not self.is_running() or self.needs_reimage(rec['vref']) or next_class != curr_class: self.start(rec) else: self.configure(rec) @@ -266,23 +269,33 @@ class Worker: def needs_reimage(self, target_slicefamily): if not self._acct: - logger.verbose("Worker.needs_reimage ({}) - no account".format(self.name)) + logger.verbose("Worker.needs_reimage ({}) - no account -> True".format(self.name)) return True - elif self._acct.needs_reimage(target_slicefamily): - logger.info("Worker.needs_reimage ({}) - account needs reimage (tmp: DRY RUN)".format(self.name)) - return False else: - return False + account_needs_reimage = self._acct.needs_reimage(target_slicefamily) + if account_needs_reimage: + logger.log("Worker.needs_reimage ({}) - account needs reimage (tmp: DRY RUN)" + .format(self.name)) + else: + logger.verbose("Worker.needs_reimage ({}) - everything fine" + .format(self.name)) + return account_needs_reimage def _destroy(self, curr_class): self._acct = None if curr_class: destroy_sem.acquire() - try: curr_class.destroy(self.name) - finally: destroy_sem.release() + try: + logger.verbose("account._destroy is callling destroy from {}" + .format(curr_class.__name__)) + curr_class.destroy(self.name) + finally: + destroy_sem.release() def _get_class(self): - try: shell = pwd.getpwnam(self.name)[6] - except KeyError: return None + try: + shell = pwd.getpwnam(self.name)[6] + except KeyError: + return None return shell_acct_class[shell]