示例#1
0
    def do_create(self, obj):
        """Create a container instance using the given profile.

        :param obj: The node object for this container.
        :returns: ID of the container instance or ``None`` if driver fails.
        :raises: `EResourceCreation`
        """
        name = self.properties[self.NAME]
        if name is None:
            name = '-'.join([obj.name, utils.random_name()])

        params = {
            'image': self.properties[self.IMAGE],
            'name': name,
            'command': self.properties[self.COMMAND],
        }

        try:
            ctx = context.get_service_context(project=obj.project,
                                              user=obj.user)
            dockerclient = self.docker(obj)
            db_api.node_add_dependents(ctx, self.host.id, obj.id)
            container = dockerclient.container_create(**params)
            dockerclient.start(container['Id'])
        except exc.InternalError as ex:
            raise exc.EResourceCreation(type='container', message=str(ex))

        self.container_id = container['Id'][:36]
        return self.container_id
示例#2
0
    def create(cls, ctx, name, spec, metadata=None):
        profile = super(DockerProfile, cls).create(ctx, name, spec, metadata)

        host_cluster = profile.properties.get(profile.HOST_CLUSTER, None)
        if host_cluster:
            db_api.cluster_add_dependents(ctx, host_cluster, profile.id)

        host_node = profile.properties.get(profile.HOST_NODE, None)
        if host_node:
            db_api.node_add_dependents(ctx, host_node, profile.id, 'profile')

        return profile
示例#3
0
    def test_node_add_node_dependents(self):
        node_id = 'host_node'
        node = shared.create_node(self.ctx, None, self.profile,
                                  id=node_id, name='node-1')
        db_api.node_add_dependents(self.ctx, node_id, 'NODE1')
        node = db_api.node_get(self.ctx, node_id)
        nodes = node.dependents['nodes']
        self.assertEqual(['NODE1'], nodes)

        db_api.node_add_dependents(self.ctx, node_id, 'NODE2')
        new_node = db_api.node_get(self.ctx, node_id)
        nodes = new_node.dependents['nodes']
        self.assertEqual(['NODE1', 'NODE2'], nodes)
示例#4
0
    def test_node_add_profile_dependents(self):
        node_id = 'host_node'
        new_profile = shared.create_profile(self.ctx)
        node = shared.create_node(self.ctx, None, self.profile,
                                  id=node_id, name='node-1')
        db_api.node_add_dependents(self.ctx, node_id, new_profile.id,
                                   'profile')
        node = db_api.node_get(self.ctx, node_id)
        nodes = node.dependents['profiles']
        self.assertEqual([new_profile.id], nodes)

        new_profile_1 = shared.create_profile(self.ctx)
        db_api.node_add_dependents(self.ctx, node_id, new_profile_1.id,
                                   'profile')
        new_node = db_api.node_get(self.ctx, node_id)
        nodes = new_node.dependents['profiles']
        self.assertEqual([new_profile.id, new_profile_1.id], nodes)