def test_latest_iaas_status(self): self.svc_adapter.initialize(self.m, self.run_name, self.cloudinitd) vm = RunVM() vm.instanceid = "i-dfs3f32" try: status = self.svc_adapter.latest_iaas_status(None) raised_programming_error = False except ProgrammingError: raised_programming_error = True assert raised_programming_error # Test response when there's no status in VM object status = self.svc_adapter.latest_iaas_status(vm) assert not status vm.events = [] vm_iaas_state_0 = "RUNNING" vm_timestamp_0 = datetime.datetime(2000, 10, 3) vm_iaas_state_1 = "SOMETHINGELSE" vm_timestamp_1 = datetime.datetime(2000, 10, 5) vm.events.append(Event(name="iaas_state", state=vm_iaas_state_0, timestamp=vm_timestamp_0)) vm.events.append(Event(name="iaas_state", state=vm_iaas_state_1, timestamp=vm_timestamp_1)) status = self.svc_adapter.latest_iaas_status(vm) assert status == vm_iaas_state_1
def _load_host(p, c, m, run_name, instanceid, hostname, servicename): """Load a VM instance from cloudinit information """ # Account for piggybacked = "" if not instanceid: known_id = m.persistence.find_instanceid_byservice(run_name, servicename) if known_id: instanceid = known_id else: instanceid = "P-%d" % (int(random() * 100000000)) if m.persistence.check_new_instanceid(instanceid): raise Exception("instance ID collision") piggybacked = "piggybacked on " vm = RunVM() vm.instanceid = instanceid vm.hostname = hostname vm.service_type = servicename m.runlogs.new_vm(vm) if m.persistence.new_vm(run_name, vm): c.log.info("New EPU related service detected: '%s'. %shost '%s', ID is '%s'" % (servicename, piggybacked, vm.hostname, vm.instanceid)) return vm
def get_run_vms_or_none(self, run_name): """Get list of VMs for a run name or return None""" if not self.cdb: raise ProgrammingError("cannot persist anything without setup/validation") cyvm_a = self.cdb.get_iaas_by_runname(run_name) vm_a = [] for cyvm in cyvm_a: rvm = RunVM() rvm.instanceid = cyvm.iaasid rvm.nodeid = cyvm.nodeid rvm.hostname = cyvm.hostname rvm.service_type = cyvm.service_type rvm.parent = cyvm.parent rvm.runlogdir = cyvm.runlogdir rvm.vmlogdir = cyvm.vmlogdir for e in cyvm.events: xtras = {} for x in e.extra: xtras[x.key] = x.value c = CYvent(e.source, e.name, e.unique_event_key, e.timestamp, xtras) rvm.events.append(c) vm_a.append(rvm) return vm_a
def vms_launched(m, run_name, eventname): provisioner = _get_provisioner(m, run_name) vms = [] for event in provisioner.events: if event.name == eventname: vm = RunVM() if eventname == "new_node": vm.instanceid = event.extra['iaas_id'] vm.nodeid = event.extra['node_id'] elif eventname == "node_started": vm.instanceid = event.extra['iaas_id'] vm.nodeid = event.extra['node_id'] else: raise IncompatibleEnvironment("eventname is illegal") vm.hostname = event.extra['public_ip'] # todo: 'unknown' is hardcoded in fetchkill, too vm.service_type = "unknown" + vm.WORKER_SUFFIX m.runlogs.new_vm(vm) vms.append(vm) return vms