Example #1
0
 def setup_mailer(self, server, username, password, port=465):
     self._mailer = EMail(server, username, password, port=port)
Example #2
0
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