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
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
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)
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)