def remind_about_instances(): """Run periodically to send reminding emails""" cs = admin_client_set() server_mgr = cs.compute.servers user_mgr = cs.identity_admin.users for instance_data in InstanceDataDAO.remind_list(datetime.utcnow()): try: try: server = server_mgr.get(instance_data.instance_id) except osc_exc.NotFound: InstanceDataDAO.delete(instance_data.instance_id) continue try: user = user_mgr.get(server.user_id) except osc_exc.NotFound: pass else: send_instance_reminder(user.email, server.name, server.id, instance_data.expires_at, greeting=getattr(user, 'fullname', '')) InstanceDataDAO.update(instance_data.instance_id, remind_at=None) except Exception: current_app.logger.exception( 'Failed to send reminder email about instance %r' % instance_data.instance_id)
def update_instance(instance_id): data = parse_request_data(_SCHEMA.updatable) if "name" in data: try: fetch_instance(instance_id).update(name=data["name"]) except osc_exc.NotFound: abort(404) instance = fetch_instance(instance_id) for_instance_data = {} if "expires-at" in data: for_instance_data["expires_at"] = data["expires-at"] if "remind-at" in data: for_instance_data["remind_at"] = data["remind-at"] if for_instance_data: InstanceDataDAO.update(instance.id, **for_instance_data) set_audit_resource_id(instance) return make_json_response(_instance_to_view(instance))
def test_update_remind_at_to_none(self): InstanceDataDAO.update(self.instance_id, remind_at=None) self.assertEquals(None, InstanceDataDAO.get(self.instance_id).remind_at)
def test_update_remind_at(self): new_remind_at = self.remind_at + timedelta(days=30) InstanceDataDAO.update(self.instance_id, remind_at=new_remind_at) self.assertEquals(new_remind_at, InstanceDataDAO.get(self.instance_id).remind_at)
def test_update_expires_at_to_none(self): InstanceDataDAO.update(self.instance_id, expires_at=None) self.assertEquals(None, InstanceDataDAO.get(self.instance_id).expires_at)
def test_update_expires_not_found(self): instance_id = 'OTHER_TEST_VMID' InstanceDataDAO.update(instance_id, expires_at=self.expires_at) self.assertEquals(self.expires_at, InstanceDataDAO.get(instance_id).expires_at)
def test_update_expires_at(self): new_expires_at = self.expires_at + timedelta(days=30) InstanceDataDAO.update(self.instance_id, expires_at=new_expires_at) self.assertEquals(new_expires_at, InstanceDataDAO.get(self.instance_id).expires_at)