def test_error_snapshot(self, pithos_backend, client): vm = mfactory.VirtualMachineFactory() disks = [ (0, {"snapshot_info": json.dumps({"snapshot_id": "test_snapshot_id"})}) ] msg = self.create_msg(operation='OP_INSTANCE_SNAPSHOT', instance=vm.backend_vm_id, job_fields={'disks': disks}, status="running") update_db(client, msg) self.assertEqual(pithos_backend().update_object_status.mock_calls, []) msg = self.create_msg(operation='OP_INSTANCE_SNAPSHOT', instance=vm.backend_vm_id, job_fields={'disks': disks}, event_time=split_time(time()), status="error") update_db(client, msg) pithos_backend().update_object_status\ .assert_called_once_with("test_snapshot_id", state=-1) pithos_backend.reset_mock() msg = self.create_msg(operation='OP_INSTANCE_SNAPSHOT', instance=vm.backend_vm_id, job_fields={'disks': disks}, event_time=split_time(time()), status="success") update_db(client, msg) pithos_backend().update_object_status\ .assert_called_once_with("test_snapshot_id", state=1)
def main(): usage = "Usage: %s <instance_name>\n" % PROGNAME if len(sys.argv) != 2: sys.stderr.write(usage) return 1 instance_name = sys.argv[1] # WARNING: This assumes that instance names # are of the form prefix-id, and uses prefix to # determine the routekey for AMPQ prefix = instance_name.split('-')[0] routekey = "ganeti.%s.event.progress" % prefix amqp_client = AMQPClient(confirm_buffer=10) amqp_client.connect() amqp_client.exchange_declare(settings.EXCHANGE_GANETI, "topic") for msg in jsonstream(sys.stdin): msg['event_time'] = split_time(time.time()) msg['instance'] = instance_name # log to stderr sys.stderr.write("[MONITOR] %s\n" % json.dumps(msg)) # then send it over AMQP amqp_client.basic_publish(exchange=settings.EXCHANGE_GANETI, routing_key=routekey, body=json.dumps(msg)) amqp_client.close() return 0
def create_msg(self, **kwargs): """Create snf-progress-monitor message""" msg = {'event_time': split_time(time())} msg['type'] = 'image-copy-progress' msg['progress'] = 0 for key, val in kwargs.items(): msg[key] = val message = {'body': json.dumps(msg)} return message
def create_msg(self, **kwargs): """Create snf-ganeti-eventd message""" msg = {'event_time': split_time(time())} msg['type'] = 'ganeti-op-status' msg['status'] = 'success' msg['jobId'] = 1 msg['logmsg'] = 'Dummy Log' for key, val in kwargs.items(): msg[key] = val message = {'body': json.dumps(msg)} return message
def create_msg(self, **kwargs): """Create snf-ganeti-eventd message""" msg = {'event_time': split_time(time())} msg['type'] = 'ganeti-network-status' msg['status'] = 'success' msg['jobId'] = 1 msg['logmsg'] = 'Dummy Log' for key, val in kwargs.items(): msg[key] = val message = {'body': json.dumps(msg)} return message
def create_msg(self, **kwargs): """Create snf-ganeti-hook message""" msg = {'event_time': split_time(time())} msg['type'] = 'ganeti-op-status' msg['operation'] = 'OP_INSTANCE_SET_PARAMS' msg['status'] = 'success' msg['jobId'] = 1 msg['logmsg'] = 'Dummy Log' for key, val in kwargs.items(): msg[key] = val message = {'body': json.dumps(msg)} return message
def test_old_msg(self, client): from time import sleep from datetime import datetime old_time = time() sleep(0.01) new_time = datetime.fromtimestamp(time()) vm = mfactory.VirtualMachineFactory(backendtime=new_time) vm.operstate = 'STOPPED' vm.save() msg = self.create_msg(operation='OP_INSTANCE_STARTUP', event_time=split_time(old_time), instance=vm.backend_vm_id) update_db(client, msg) self.assertTrue(client.basic_ack.called) db_vm = VirtualMachine.objects.get(id=vm.id) self.assertEquals(db_vm.operstate, "STOPPED") self.assertEquals(db_vm.backendtime, new_time)