def setup_mailer(self, server, username, password, port=465): self._mailer = EMail(server, username, password, port=port)
class ResourceManagerCore: def __init__(self): self._mailer = None self._keystone = None self._nova = None def setup_mailer(self, server, username, password, port=465): self._mailer = EMail(server, username, password, port=port) def setup_clients(self, os_ip, username, password, tenant): self._keystone = kclient.Client( auth_url='http://%s:5000/v2.0' % os_ip, username=username, password=password, tenant_name=tenant, endpoint_override='http://%s:35357/v2.0' % os_ip, ) self._nova = nclient.Client('2.0', username, password, tenant, 'http://%s:5000/v2.0' % os_ip) def _send_message(self, message): if self._mailer: self._mailer.send(message) else: print "Unable to send message: Mailer is not initialized" def send_html_message(self, message, subject, recipient, cc=None): print "Sending message to %s: %s" % (recipient, subject) mesg = Message(subject, recipient, html=message, cc=cc) self._send_message(mesg) def get_users(self): users = {} for user in self._keystone.users.list(): user_info = user.to_dict() users[user_info['id']] = { 'id': user_info['id'], 'username': user_info['username'], 'email': user_info['email'] } return users def get_servers(self): users = self.get_users() servers = {} for server in self._nova.servers.list(search_opts={'all_tenants': True}): server_info = server.to_dict() servers[server_info['id']] = { 'id': server_info['id'], 'name': server_info['name'], 'created': time.mktime(time.strptime(server_info['created'], '%Y-%m-%dT%H:%M:%SZ')), 'status': server_info['status'], 'owner': users.get(server_info['user_id'], None), 'metadata': server_info['metadata'], } return servers def is_long_term(self, server): if 'Long-Term' in server['metadata'].keys(): return server['metadata'].get('Long-Term').lower() == "yes" return False def get_expired_servers(self, ttl): records = {} for server_id, server_info in self.get_servers().items(): if time.time() > server_info['created'] + ttl and not self.is_long_term(server_info): if server_info['owner']['id'] not in records.keys(): records[server_info['owner']['id']] = { 'username': server_info['owner']['username'], 'email': server_info['owner']['email'], 'instances': {}, } records[server_info['owner']['id']]['instances'][server_info['id']] = { 'name': server_info['name'], 'created': stamp2date(server_info['created']), 'status': server_info['status'], 'owner': server_info['owner']['username'], } return records