def delete(self, acc_name, srv_id):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         self.finish()
     req = OpenStackRequest(acc_name, 'DELETE', '/servers/' + srv_id)
     make_request_async(req, callback)
 def get(self, acc_name):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         self.write({'output': json.loads(resp.body)})
         self.finish()
     req = OpenStackRequest(acc_name, 'GET', '/flavors')
     make_request_async(req, callback)
    def _do_server_kill(self):
        self._process['server_kill'] = 1

        def callback(resp):
            if not http_success(resp.code):
                self._error(500)
                return
            self._process['server_kill'] = 2
            logger.debug("Killed the server succesfully")
            self._continue()
        url = '/servers/%s' % self._server_id
        req = OpenStackRequest(self._acc_name, 'DELETE', url)
        make_request_async(req, callback)
 def get(self, acc_name, srv_id):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         try:
             j = json.loads(resp.body)
             log = j['output']
         except:
             log = ''
         self.write({'output': log})
         self.finish()
     body = {'os-getConsoleOutput': {}}
     req = OpenStackRequest(acc_name, 'POST', '/servers/'+srv_id+'/action', body=body)
     make_request_async(req, callback)
 def get(self, acc_name, srv_id):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         try:
             j = json.loads(resp.body)
             addr = j['server']['addresses']
             ip_address = addr[addr.keys()[0]][0]['addr']
         except:
             ip_address = ''
         self.write({'output': {'ip_address': ip_address}})
         self.finish()
     req = OpenStackRequest(acc_name, 'GET', '/servers/' + srv_id)
     make_request_async(req, callback)
Beispiel #6
0
    def _timeout(self):
        """
        This method is called when the launch process exceeds the specified time threshold.
        It stops the launch and terminates the instance.
        """
        logger.error("Timeout of the launch process <%s> reached. Stopping the process." % self._launch_id)
        self._cancel_launch = True

        def callback(resp):
            logger.debug("Terminated the instance.")

        if self._server_id != None:
            req = OpenStackRequest(self._acc_name, "DELETE", "/servers/" + self._server_id)
            make_request_async(req, callback)
 def _do_snapshot_create(self):
     self._process['snapshot_create'] = 1
     self._snapshot_name = '%s (Generated by Nexel on %s)' % (self._mach_name, datetime.datetime.now().isoformat())
     body = {'createImage': {'name': self._snapshot_name}}
     def callback(resp):
         try:
             assert resp.code == 202
         except:
             self._error(500)
             return
         logger.debug("Created the snapshot succesfully")
         self._process['snapshot_create'] = 2
         self._continue()
     url = '/servers/%s/action' % self._server_id
     req = OpenStackRequest(self._acc_name, 'POST', url, body=body)
     make_request_async(req, callback)
 def _do_server_ready_op(self):
     def callback(resp):
         try:
             j = json.loads(resp.body)
             if j['meta']['nexel-ready'].lower() == 'true':
                 self._server_ready = True
                 self._process['server_ready'] = 2
         except:
             pass
         if self._process['server_ready'] == 2:
             #self._continue()
             self.io_loop().add_timeout(BUILD_DELAY, self._continue)
             return
         self.io_loop().add_timeout(BUILD_DELAY, self._do_server_ready_op)
     req = OpenStackRequest(self._acc_name, 'GET', '/servers/'+self._server_id+'/metadata/nexel-ready')
     make_request_async(req, callback)
 def get(self, acc_name):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         try:
             j = json.loads(resp.body)
             limits = j['limits']['absolute']
             self.write({'output': {
                 'servers': [limits['totalInstancesUsed'],
                             limits['maxTotalInstances']],
                 'cores': [limits['totalCoresUsed'],
                           limits['maxTotalCores']],
                 'ram': [limits['totalRAMUsed'],
                         limits['maxTotalRAMSize']]}})
         except:
             raise HTTPError(500)
         self.finish()
     req = OpenStackRequest(acc_name, 'GET', '/limits')
     make_request_async(req, callback)
Beispiel #10
0
 def _do_snapshot_ready_op(self):
     def callback(resp):
         try:
             assert resp.code == 200
             j = json.loads(resp.body)
             assert len(j['images']) <= 1
             if len(j['images']) == 1:
                 self._os_snapshot_id = j['images'][0]['id']
                 self._process['snapshot_ready'] = 2
         except:
             self._error(500)
             return
         if self._process['snapshot_ready'] == 2:
             #self._continue()
             self.io_loop().add_timeout(SNAPSHOT_DELAY, self._continue)
             return
         self.io_loop().add_timeout(SNAPSHOT_DELAY, self._do_snapshot_ready_op)
     url = '/images?%s' % urllib.urlencode({'name': self._snapshot_name,
                                            'status': 'ACTIVE'})
     req = OpenStackRequest(self._acc_name, 'GET', url)
     make_request_async(req, callback)
Beispiel #11
0
 def get(self, acc_name):
     def callback(resp):
         if not http_success(resp.code):
             raise HTTPError(resp.code)
         try:
             j = json.loads(resp.body)
             out = []
             for srv in j['servers']:
                 addr = srv['addresses']
                 try:
                     ip_address = addr[addr.keys()[0]][0]['addr']
                 except:
                     ip_address = ''
                 # TODO: meta-data to detect a Nexel instance or snapshot in process
                 out.append({'id': srv['id'],
                             'name': srv['name'],
                             'created': srv['created'],
                             'ip_address': ip_address})
             self.write({'output': out})
         except:
             raise HTTPError(500)
         self.finish()
     req = OpenStackRequest(acc_name, 'GET', '/servers/detail')
     make_request_async(req, callback)
Beispiel #12
0
    def _do_server_add(self):
        self._process['server_add'] = 1
        dataserver = Accounts()[self._acc_name]['machines'][self._mach_name]['boot']['datamount']

        # construct cloud-init script from build script
        cloud_init = self._settings['script']
        cloud_init += '\n\n'

        # write to meta-data: nexel-ready=True
        #cloud_init += 'echo "#!/usr/bin/env python\n'
        cloud_init += 'echo "import urllib2 # adapt for python 3+\n' #TODO
        cloud_init += 'import json\n'
        cloud_init += '\n'
        cloud_init += 'tenant_id = \'%s\'\n' % self._auth['tenant_id']
        cloud_init += 'username = \'%s\'\n' % self._auth['username']
        cloud_init += 'password = \'%s\'\n' % self._auth['password']
        cloud_init += 'auth_url = \'%s\'\n' % Settings()['os_auth_url']
        cloud_init += 'nova_url = \'%s\'\n' % Settings()['os_nova_url']
        cloud_init += '\n'
        cloud_init += 'headers = {\'Content-Type\': \'application/json\'}\n'
        cloud_init += 'body = {\'auth\' :{\'passwordCredentials\': {\'username\': username, \'password\': password}, \'tenantId\': tenant_id}}\n'
        cloud_init += 'url = auth_url+\'/tokens\'\n'
        cloud_init += 'req = urllib2.Request(url, headers=headers, data=json.dumps(body))\n'
        cloud_init += 'resp = urllib2.urlopen(req)\n'
        cloud_init += 'j = json.loads(resp.read())\n'
        cloud_init += 'token = j[\'access\'][\'token\'][\'id\']\n'
        cloud_init += '\n'
        cloud_init += 'url = \'http://169.254.169.254/openstack/2012-08-10/meta_data.json\'\n'
        cloud_init += 'req = urllib2.Request(url)\n'
        cloud_init += 'resp = urllib2.urlopen(req)\n'
        cloud_init += 'j = json.loads(resp.read())\n'
        cloud_init += 'server_id = j[\'uuid\']\n'
        cloud_init += '\n'
        cloud_init += 'headers[\'X-Auth-Token\'] = token\n'
        cloud_init += 'body = {\'metadata\': {\'nexel-ready\': \'True\'}}\n'
        cloud_init += 'url = nova_url+\'/\'+tenant_id+\'/servers/\'+server_id+\'/metadata\'\n'
        cloud_init += 'req = urllib2.Request(url, headers=headers, data=json.dumps(body))\n'
        cloud_init += 'resp = urllib2.urlopen(req)\n'
        cloud_init += '" > ~/nexel-ready.py\n'
        cloud_init += 'python ~/nexel-ready.py\n'
        cloud_init += 'rm -rf ~/nexel-ready.py\n'

        template = Template(cloud_init)
        cloud_init_vars = { 'reposDomain' : Datamounts()[dataserver]['server']['domain'],
                            'keyPrivate'  : self._key_priv
                          }

        # boot the server, get srv_id
        # mach = self._settings
        body = {'server': {'name': self._mach_name,
                           'imageRef': self._settings['image_id'],
                           'flavorRef': self._settings['flavor_id'],
                           #'security_groups': [{'name': 'ssh'}],
                           #'key_name': 'Web-Keypair',
                           'user_data': base64.b64encode(template.render(cloud_init_vars)),
                           'metadata': {'nexel-type': 'snapshot',
                                        'nexel-ready': 'False'}}}
        def callback(resp):
            try:
                logger.debug(resp.body)
                if resp.code == 413:
                    logger.error('error quota exceeded 413')
                    self._error(413)
                    return
                j = json.loads(resp.body)
                server_id = j['server']['id']
                assert(server_id != '')
            except:
                logger.exception(e)
                self._error(500)
                return
            logger.debug("Added the server succesfully")
            self._server_id = server_id
            self._process['server_add'] = 2
            self._continue()
        req = OpenStackRequest(self._acc_name, 'POST', '/servers', body=body)
        make_request_async(req, callback)
Beispiel #13
0
                    self._error(413)
                    return
                j = json.loads(resp.body)
                server_id = j["server"]["id"]
                assert server_id != ""
            except Exception, e:
                logger.exception(e)
                self._error(500)
                return
            self._server_id = server_id
            self._process["server_add"] = 2
            logger.debug("(2) ...launch of the instance successful (%s)" % self._server_id)
            self._continue()

        req = OpenStackRequest(self._acc_name, "POST", "/servers", body=body)
        make_request_async(req, callback)

    def _do_server_ip_op(self):
        """Retrieves the instance's IP address"""

        def callback(resp):
            """
            Callback method for the asynchronous retrieval of the IP address
            resp : the response of the Nectar cloud
            """
            try:
                j = json.loads(resp.body)
                addr = j["server"]["addresses"]
                self._ip_address = addr[addr.keys()[0]][0]["addr"]
                self._process["server_ip"] = 2
            except Exception, e: