Beispiel #1
0
    def create(self, req):
        """ Creates a new server for a given user """
        env = self._deserialize(req.body, req)
        if not env:
            return faults.Fault(exc.HTTPUnprocessableEntity())

        key_pairs = auth_manager.AuthManager.get_key_pairs(
            req.environ['nova.context'])
        if not key_pairs:
            raise exception.NotFound(_("No keypairs defined"))
        key_pair = key_pairs[0]

        image_id = common.get_image_id_from_image_hash(self._image_service,
            req.environ['nova.context'], env['server']['imageId'])
        kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(
            req, image_id)
        instances = self.compute_api.create(
            req.environ['nova.context'],
            instance_types.get_by_flavor_id(env['server']['flavorId']),
            image_id,
            kernel_id=kernel_id,
            ramdisk_id=ramdisk_id,
            display_name=env['server']['name'],
            display_description=env['server']['name'],
            key_name=key_pair['name'],
            key_data=key_pair['public_key'],
            onset_files=env.get('onset_files', []))
        return _translate_keys(instances[0])
Beispiel #2
0
    def create(self, req):
        """ Creates a new server for a given user """
        env = self._deserialize_create(req)
        if not env:
            return faults.Fault(exc.HTTPUnprocessableEntity())

        context = req.environ['nova.context']

        key_name = None
        key_data = None
        key_pairs = auth_manager.AuthManager.get_key_pairs(context)
        if key_pairs:
            key_pair = key_pairs[0]
            key_name = key_pair['name']
            key_data = key_pair['public_key']

        image_id = common.get_image_id_from_image_hash(
            self._image_service, context, env['server']['imageId'])
        kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(
            req, image_id)

        # Metadata is a list, not a Dictionary, because we allow duplicate keys
        # (even though JSON can't encode this)
        # In future, we may not allow duplicate keys.
        # However, the CloudServers API is not definitive on this front,
        #  and we want to be compatible.
        metadata = []
        if env['server'].get('metadata'):
            for k, v in env['server']['metadata'].items():
                metadata.append({'key': k, 'value': v})

        personality = env['server'].get('personality')
        injected_files = []
        if personality:
            injected_files = self._get_injected_files(personality)

        try:
            instances = self.compute_api.create(
                context,
                instance_types.get_by_flavor_id(env['server']['flavorId']),
                image_id,
                kernel_id=kernel_id,
                ramdisk_id=ramdisk_id,
                display_name=env['server']['name'],
                display_description=env['server']['name'],
                key_name=key_name,
                key_data=key_data,
                metadata=metadata,
                injected_files=injected_files)
        except QuotaError as error:
            self._handle_quota_errors(error)

        builder = servers_views.get_view_builder(req)
        server = builder.build(instances[0], is_detail=False)
        password = "******" % (server['server']['name'][:4],
                             utils.generate_password(12))
        server['server']['adminPass'] = password
        self.compute_api.set_admin_password(context, server['server']['id'],
                                            password)
        return server
Beispiel #3
0
    def create(self, req):
        """ Creates a new server for a given user """
        env = self._deserialize_create(req)
        if not env:
            return faults.Fault(exc.HTTPUnprocessableEntity())

        context = req.environ['nova.context']

        key_name = None
        key_data = None
        key_pairs = auth_manager.AuthManager.get_key_pairs(context)
        if key_pairs:
            key_pair = key_pairs[0]
            key_name = key_pair['name']
            key_data = key_pair['public_key']

        image_id = common.get_image_id_from_image_hash(self._image_service,
            context, env['server']['imageId'])
        kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(
            req, image_id)

        # Metadata is a list, not a Dictionary, because we allow duplicate keys
        # (even though JSON can't encode this)
        # In future, we may not allow duplicate keys.
        # However, the CloudServers API is not definitive on this front,
        #  and we want to be compatible.
        metadata = []
        if env['server'].get('metadata'):
            for k, v in env['server']['metadata'].items():
                metadata.append({'key': k, 'value': v})

        personality = env['server'].get('personality')
        injected_files = []
        if personality:
            injected_files = self._get_injected_files(personality)

        try:
            instances = self.compute_api.create(
                context,
                instance_types.get_by_flavor_id(env['server']['flavorId']),
                image_id,
                kernel_id=kernel_id,
                ramdisk_id=ramdisk_id,
                display_name=env['server']['name'],
                display_description=env['server']['name'],
                key_name=key_name,
                key_data=key_data,
                metadata=metadata,
                injected_files=injected_files)
        except QuotaError as error:
            self._handle_quota_errors(error)

        builder = servers_views.get_view_builder(req)
        server = builder.build(instances[0], is_detail=False)
        password = "******" % (server['server']['name'][:4],
                             utils.generate_password(12))
        server['server']['adminPass'] = password
        self.compute_api.set_admin_password(context, server['server']['id'],
                                            password)
        return server
Beispiel #4
0
 def test_resize_same_source_fails(self):
     """Ensure instance fails to migrate when source and destination are
     the same host"""
     instance_id = self._create_instance()
     self.compute.run_instance(self.context, instance_id)
     self.assertRaises(exception.Error, self.compute.prep_resize,
             self.context, instance_id)
     self.compute.terminate_instance(self.context, instance_id)
     type = instance_types.get_by_flavor_id("1")
     self.assertEqual(type, 'm1.tiny')
Beispiel #5
0
    def create(self, req):
        """ Creates a new server for a given user """
        env = self._deserialize(req.body, req)
        if not env:
            return faults.Fault(exc.HTTPUnprocessableEntity())

        context = req.environ['nova.context']
        key_pairs = auth_manager.AuthManager.get_key_pairs(context)
        if not key_pairs:
            raise exception.NotFound(_("No keypairs defined"))
        key_pair = key_pairs[0]

        image_id = common.get_image_id_from_image_hash(self._image_service,
            context, env['server']['imageId'])
        kernel_id, ramdisk_id = self._get_kernel_ramdisk_from_image(
            req, image_id)

        # Metadata is a list, not a Dictionary, because we allow duplicate keys
        # (even though JSON can't encode this)
        # In future, we may not allow duplicate keys.
        # However, the CloudServers API is not definitive on this front,
        #  and we want to be compatible.
        metadata = []
        if env['server'].get('metadata'):
            for k, v in env['server']['metadata'].items():
                metadata.append({'key': k, 'value': v})

        instances = self.compute_api.create(
            context,
            instance_types.get_by_flavor_id(env['server']['flavorId']),
            image_id,
            kernel_id=kernel_id,
            ramdisk_id=ramdisk_id,
            display_name=env['server']['name'],
            display_description=env['server']['name'],
            key_name=key_pair['name'],
            key_data=key_pair['public_key'],
            metadata=metadata,
            onset_files=env.get('onset_files', []))
        return _translate_keys(instances[0])
Beispiel #6
0
 def test_get_by_flavor_id(self):
     type = instance_types.get_by_flavor_id(1)
     self.assertEqual(type, 'm1.tiny')