def test_project_up_with_no_deps(self): project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'console': { 'image': 'busybox:latest', 'command': ["top"], }, 'data': { 'image': 'busybox:latest', 'command': ["top"] }, 'db': { 'image': 'busybox:latest', 'command': ["top"], 'volumes_from': ['data'], }, 'web': { 'image': 'busybox:latest', 'command': ["top"], 'links': ['db'], }, }), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(['db'], start_deps=False) self.assertEqual(len(project.containers(stopped=True)), 2) self.assertEqual(len(project.get_service('web').containers()), 0) self.assertEqual(len(project.get_service('db').containers()), 1) self.assertEqual(len(project.get_service('data').containers()), 0) self.assertEqual(len(project.get_service('data').containers(stopped=True)), 1) self.assertEqual(len(project.get_service('console').containers()), 0)
def test_net_from_container(self): net_container = Container.create( self.client, image='busybox:latest', name='composetest_net_container', command='top' ) net_container.start() project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'web': { 'image': 'busybox:latest', 'net': 'container:composetest_net_container' }, }), client=self.client, ) project.up() web = project.get_service('web') self.assertEqual(web._get_net(), 'container:' + net_container.id) project.kill() project.remove_stopped()
def __init__(self): docstring = getdoc(Usage) options = None try: options = docopt(docstring, argv=sys.argv[1:], version=__version__, options_first=True) except DocoptExit: raise SystemExit(docstring) if 'ps' in options and options['ps']: self._ps() return if 'exec' in options and options['exec']: self._exec(options['PROJECT'], options['SERVICE'], options['COMMANDS']) return # 'command' references a function on this class command = options['COMMAND'] if not hasattr(self, command): print('{command} command not found'.format(command=command)) sys.exit(1) projectname = options['PROJECT'] servicenames = options['SERVICES'] client = docker_client() config = self._get_config(projectname) project = Project.from_dicts(projectname, config, client) handle = getattr(self, command) handle(project, projectname, servicenames)
def test_use_net_from_service(self): container_name = 'test_aaa_1' mock_client = mock.create_autospec(docker.Client) mock_client.containers.return_value = [ { "Name": container_name, "Names": [container_name], "Id": container_name, "Image": 'busybox:latest' } ] project = Project.from_dicts('test', [ { 'name': 'aaa', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'net': 'container:aaa' } ], mock_client) service = project.get_service('test') self.assertEqual(service._get_net(), 'container:' + container_name)
def test_net_from_container(self): net_container = Container.create( self.client, image='busybox:latest', name='composetest_net_container', command='top', labels={LABEL_PROJECT: 'composetest'}, ) net_container.start() project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'web': { 'image': 'busybox:latest', 'net': 'container:composetest_net_container' }, }), client=self.client, ) project.up() web = project.get_service('web') self.assertEqual(web.net.mode, 'container:' + net_container.id)
def test_project_up_with_no_deps(self): project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'console': { 'image': 'busybox:latest', 'command': ["top"], }, 'data': { 'image': 'busybox:latest', 'command': ["top"] }, 'db': { 'image': 'busybox:latest', 'command': ["top"], 'volumes_from': ['data'], }, 'web': { 'image': 'busybox:latest', 'command': ["top"], 'links': ['db'], }, }), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(['db'], start_deps=False) self.assertEqual(len(project.containers(stopped=True)), 2) self.assertEqual(len(project.get_service('web').containers()), 0) self.assertEqual(len(project.get_service('db').containers()), 1) self.assertEqual(len(project.get_service('data').containers()), 0) self.assertEqual(len(project.get_service('data').containers(stopped=True)), 1) self.assertEqual(len(project.get_service('console').containers()), 0)
def test_project_up_starts_depends(self): project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'console': { 'image': 'busybox:latest', 'command': ["top"], }, 'data': { 'image': 'busybox:latest', 'command': ["top"] }, 'db': { 'image': 'busybox:latest', 'command': ["top"], 'volumes_from': ['data'], }, 'web': { 'image': 'busybox:latest', 'command': ["top"], 'links': ['db'], }, }), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(['web']) self.assertEqual(len(project.containers()), 3) self.assertEqual(len(project.get_service('web').containers()), 1) self.assertEqual(len(project.get_service('db').containers()), 1) self.assertEqual(len(project.get_service('data').containers()), 1) self.assertEqual(len(project.get_service('console').containers()), 0)
def test_container_without_name(self): self.mock_client.containers.return_value = [ { 'Image': 'busybox:latest', 'Id': '1', 'Name': '1' }, { 'Image': 'busybox:latest', 'Id': '2', 'Name': None }, { 'Image': 'busybox:latest', 'Id': '3' }, ] self.mock_client.inspect_container.return_value = { 'Id': '1', 'Config': { 'Labels': { LABEL_SERVICE: 'web', }, }, } project = Project.from_dicts( 'test', [{ 'name': 'web', 'image': 'busybox:latest', }], self.mock_client, ) self.assertEqual([c.id for c in project.containers()], ['1'])
def test_project_up_starts_depends(self): project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'console': { 'image': 'busybox:latest', 'command': ["top"], }, 'data': { 'image': 'busybox:latest', 'command': ["top"] }, 'db': { 'image': 'busybox:latest', 'command': ["top"], 'volumes_from': ['data'], }, 'web': { 'image': 'busybox:latest', 'command': ["top"], 'links': ['db'], }, }), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(['web']) self.assertEqual(len(project.containers()), 3) self.assertEqual(len(project.get_service('web').containers()), 1) self.assertEqual(len(project.get_service('db').containers()), 1) self.assertEqual(len(project.get_service('data').containers()), 1) self.assertEqual(len(project.get_service('console').containers()), 0)
def test_net_from_service(self): project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'net': { 'image': 'busybox:latest', 'command': ["top"] }, 'web': { 'image': 'busybox:latest', 'net': 'container:net', 'command': ["top"] }, }), client=self.client, ) project.up() web = project.get_service('web') net = project.get_service('net') self.assertEqual(web._get_net(), 'container:' + net.containers()[0].id) project.kill() project.remove_stopped()
def make_project(self, cfg): details = config.ConfigDetails( 'working_dir', [config.ConfigFile(None, cfg)]) return Project.from_dicts( name='composetest', client=self.client, service_dicts=config.load(details))
def test_net_unset(self): project = Project.from_dicts('test', [{ 'name': 'test', 'image': 'busybox:latest', }], self.mock_client) service = project.get_service('test') self.assertEqual(service._get_net(), None) self.assertNotIn('NetworkMode', service._get_container_host_config({}))
def _ps(self): client = docker_client() projectnames = self._get_projectnames_in_dir() containers = client.containers(all=True) unknown = {} for container in containers: unknown[container['Id']] = client.inspect_container( container['Id']) if len(projectnames) != 0: print() for projectname in projectnames: config = self._get_config(projectname) project = Project.from_dicts( projectname, config, client) services = project.get_services() counts = {} for service in services: c = service.containers(stopped=True) + service.containers(one_off=True) if len(c) == 0: if not 'Uncreated' in counts: counts['Uncreated'] = 0 counts['Uncreated'] += 1 for container in c: del unknown[container.id] if not container.human_readable_state in counts: counts[container.human_readable_state] = 0 counts[container.human_readable_state] += 1 humancounts = [] for state in counts: humancounts.append('{count} {state}'.format( count=counts[state], state=state)) print(' {name: <24}{counts}'.format( name=projectname, counts=','.join(humancounts))) if len(unknown) != 0: print() print(' Containers not tracked by compose/tugboat:') print() for key in unknown: detail = unknown[key] name = detail['Name'] if name.startswith('/'): name = name[1:] ip = detail['NetworkSettings']['IPAddress'] if ip == '': ip = '(host)' print(' {name: <24}{state: <12}{ip: <17}'.format( name=name, state='', ip=ip)) print()
def test_net_unset(self): project = Project.from_dicts('test', [ { 'name': 'test', 'image': 'busybox:latest', } ], self.mock_client) service = project.get_service('test') self.assertEqual(service._get_net(), None) self.assertNotIn('NetworkMode', service._get_container_host_config({}))
def test_use_net_from_container(self): container_id = 'aabbccddee' container_dict = dict(Name='aaa', Id=container_id) self.mock_client.inspect_container.return_value = container_dict project = Project.from_dicts('test', [{ 'name': 'test', 'image': 'busybox:latest', 'net': 'container:aaa' }], self.mock_client) service = project.get_service('test') self.assertEqual(service._get_net(), 'container:' + container_id)
def test_use_volumes_from_container(self): container_id = 'aabbccddee' container_dict = dict(Name='aaa', Id=container_id) self.mock_client.inspect_container.return_value = container_dict project = Project.from_dicts('test', [{ 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['aaa'] }], self.mock_client) self.assertEqual( project.get_service('test')._get_volumes_from(), [container_id])
def test_volumes_from_service(self): service_dicts = build_service_dicts( { "data": {"image": "busybox:latest", "volumes": ["/var/data"]}, "db": {"image": "busybox:latest", "volumes_from": ["data"]}, } ) project = Project.from_dicts(name="composetest", service_dicts=service_dicts, client=self.client) db = project.get_service("db") data = project.get_service("data") self.assertEqual(db.volumes_from, [data])
def _ps(self): client = docker_client() projectnames = self._get_projectnames_in_dir() containers = client.containers(all=True) unknown = {} for container in containers: unknown[container['Id']] = client.inspect_container( container['Id']) if len(projectnames) != 0: print() for projectname in projectnames: config = self._get_config(projectname) project = Project.from_dicts(projectname, config, client) services = project.get_services() counts = {} for service in services: c = service.containers(stopped=True) + service.containers( one_off=True) if len(c) == 0: if not 'Uncreated' in counts: counts['Uncreated'] = 0 counts['Uncreated'] += 1 for container in c: del unknown[container.id] if not container.human_readable_state in counts: counts[container.human_readable_state] = 0 counts[container.human_readable_state] += 1 humancounts = [] for state in counts: humancounts.append('{count} {state}'.format( count=counts[state], state=state)) print(' {name: <24}{counts}'.format(name=projectname, counts=','.join(humancounts))) if len(unknown) != 0: print() print(' Containers not tracked by compose/tugboat:') print() for key in unknown: detail = unknown[key] name = detail['Name'] if name.startswith('/'): name = name[1:] ip = detail['NetworkSettings']['IPAddress'] if ip == '': ip = '(host)' print(' {name: <24}{state: <12}{ip: <17}'.format(name=name, state='', ip=ip)) print()
def test_use_volumes_from_container(self): container_id = 'aabbccddee' container_dict = dict(Name='aaa', Id=container_id) self.mock_client.inspect_container.return_value = container_dict project = Project.from_dicts('test', [ { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['aaa'] } ], self.mock_client) self.assertEqual(project.get_service('test')._get_volumes_from(), [container_id])
def _fetch_project(name, config): """ Wrap the call to Project.from_config as it has side effects :param name: name for the project :type name: str :param config: dictionary configuration :type config: dict :return: the docker-compose Project :rtype: Project """ # get the Project Ready dictionary list. No Working Dir for us config_dicts = from_dictionary(config, working_dir='') return Project.from_dicts(name, config_dicts, docker_client())
def test_use_net_from_container(self): container_id = 'aabbccddee' container_dict = dict(Name='aaa', Id=container_id) self.mock_client.inspect_container.return_value = container_dict project = Project.from_dicts('test', [ { 'name': 'test', 'image': 'busybox:latest', 'net': 'container:aaa' } ], self.mock_client) service = project.get_service('test') self.assertEqual(service._get_net(), 'container:' + container_id)
def get_project(compose_file=COMPOSE_FILE): from compose import __version__ as compose_version from compose.config import find, load from compose.project import Project from compose.cli.docker_client import docker_client if compose_version.startswith('1.4'): yaml_file = find('.', str(compose_file)) else: # compose >= 1.5 yaml_file = find('.', [str(compose_file)]) config = load(yaml_file) return Project.from_dicts(PROJECT_NAME, config, docker_client())
def test_from_config(self): dicts = config.from_dictionary({ 'web': { 'image': 'busybox:latest', }, 'db': { 'image': 'busybox:latest', }, }) project = Project.from_dicts('composetest', dicts, None) self.assertEqual(len(project.services), 2) self.assertEqual(project.get_service('web').name, 'web') self.assertEqual(project.get_service('web').options['image'], 'busybox:latest') self.assertEqual(project.get_service('db').name, 'db') self.assertEqual(project.get_service('db').options['image'], 'busybox:latest')
def test_from_dict(self): project = Project.from_dicts('composetest', [ { 'name': 'web', 'image': 'busybox:latest' }, { 'name': 'db', 'image': 'busybox:latest' }, ], None) self.assertEqual(len(project.services), 2) self.assertEqual(project.get_service('web').name, 'web') self.assertEqual(project.get_service('web').options['image'], 'busybox:latest') self.assertEqual(project.get_service('db').name, 'db') self.assertEqual(project.get_service('db').options['image'], 'busybox:latest')
def test_net_from_service(self): project = Project.from_dicts( name="composetest", service_dicts=build_service_dicts( { "net": {"image": "busybox:latest", "command": ["top"]}, "web": {"image": "busybox:latest", "net": "container:net", "command": ["top"]}, } ), client=self.client, ) project.up() web = project.get_service("web") net = project.get_service("net") self.assertEqual(web.net.mode, "container:" + net.containers()[0].id)
def test_volumes_from_container(self): data_container = Container.create( self.client, image="busybox:latest", volumes=["/var/data"], name="composetest_data_container", labels={LABEL_PROJECT: "composetest"}, ) project = Project.from_dicts( name="composetest", service_dicts=build_service_dicts( {"db": {"image": "busybox:latest", "volumes_from": ["composetest_data_container"]}} ), client=self.client, ) db = project.get_service("db") self.assertEqual(db.volumes_from, [data_container])
def test_use_volumes_from_service_container(self, mock_return): container_ids = ['aabbccddee', '12345'] mock_return.return_value = [ mock.Mock(id=container_id, spec=Container) for container_id in container_ids ] project = Project.from_dicts('test', [{ 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['vol'] }], None) self.assertEqual( project.get_service('test')._get_volumes_from(), container_ids)
def test_use_volumes_from_service_container(self, mock_return): container_ids = ['aabbccddee', '12345'] mock_return.return_value = [ mock.Mock(id=container_id, spec=Container) for container_id in container_ids] project = Project.from_dicts('test', [ { 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['vol'] } ], None) self.assertEqual(project.get_service('test')._get_volumes_from(), container_ids)
def test_from_dict_sorts_in_dependency_order(self): project = Project.from_dicts('composetest', [{ 'name': 'web', 'image': 'busybox:latest', 'links': ['db'], }, { 'name': 'db', 'image': 'busybox:latest', 'volumes_from': ['volume'] }, { 'name': 'volume', 'image': 'busybox:latest', 'volumes': ['/tmp'], }], None) self.assertEqual(project.services[0].name, 'volume') self.assertEqual(project.services[1].name, 'db') self.assertEqual(project.services[2].name, 'web')
def test_use_volumes_from_service_no_container(self): container_name = 'test_vol_1' self.mock_client.containers.return_value = [{ "Name": container_name, "Names": [container_name], "Id": container_name, "Image": 'busybox:latest' }] project = Project.from_dicts('test', [{ 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['vol'] }], self.mock_client) self.assertEqual( project.get_service('test')._get_volumes_from(), [container_name])
def test_volumes_from_service(self): service_dicts = build_service_dicts({ 'data': { 'image': 'busybox:latest', 'volumes': ['/var/data'], }, 'db': { 'image': 'busybox:latest', 'volumes_from': ['data'], }, }) project = Project.from_dicts( name='composetest', service_dicts=service_dicts, client=self.client, ) db = project.get_service('db') data = project.get_service('data') self.assertEqual(db.volumes_from, [VolumeFromSpec(data, 'rw')])
def test_volumes_from_service(self): service_dicts = build_service_dicts({ 'data': { 'image': 'busybox:latest', 'volumes': ['/var/data'], }, 'db': { 'image': 'busybox:latest', 'volumes_from': ['data'], }, }) project = Project.from_dicts( name='composetest', service_dicts=service_dicts, client=self.client, ) db = project.get_service('db') data = project.get_service('data') self.assertEqual(db.volumes_from, [data])
def test_volumes_from_service(self): service_dicts = config.from_dictionary({ 'data': { 'image': 'busybox:latest', 'volumes': ['/var/data'], }, 'db': { 'image': 'busybox:latest', 'volumes_from': ['data'], }, }, working_dir='.') project = Project.from_dicts( name='composetest', service_dicts=service_dicts, client=self.client, ) db = project.get_service('db') data = project.get_service('data') self.assertEqual(db.volumes_from, [data])
def test_use_net_from_service(self): container_name = 'test_aaa_1' self.mock_client.containers.return_value = [{ "Name": container_name, "Names": [container_name], "Id": container_name, "Image": 'busybox:latest' }] project = Project.from_dicts('test', [{ 'name': 'aaa', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'net': 'container:aaa' }], self.mock_client) service = project.get_service('test') self.assertEqual(service.net.mode, 'container:' + container_name)
def test_volumes_from_container(self): data_container = Container.create( self.client, image='busybox:latest', volumes=['/var/data'], name='composetest_data_container', labels={LABEL_PROJECT: 'composetest'}, ) project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'db': { 'image': 'busybox:latest', 'volumes_from': ['composetest_data_container'], }, }), client=self.client, ) db = project.get_service('db') self.assertEqual(db._get_volumes_from(), [data_container.id + ':rw'])
def test_volumes_from_container(self): data_container = Container.create( self.client, image='busybox:latest', volumes=['/var/data'], name='composetest_data_container', labels={LABEL_PROJECT: 'composetest'}, ) project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'db': { 'image': 'busybox:latest', 'volumes_from': ['composetest_data_container'], }, }), client=self.client, ) db = project.get_service('db') self.assertEqual(db.volumes_from, [data_container])
def test_use_volumes_from_service_container(self): container_ids = ['aabbccddee', '12345'] project = Project.from_dicts( 'test', [{ 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': [VolumeFromSpec('vol', 'rw')] }], None) with mock.patch.object(Service, 'containers') as mock_return: mock_return.return_value = [ mock.Mock(id=container_id, spec=Container) for container_id in container_ids ] self.assertEqual( project.get_service('test')._get_volumes_from(), [container_ids[0] + ':rw'])
def test_use_volumes_from_service_container(self): container_ids = ['aabbccddee', '12345'] project = Project.from_dicts('test', [ { 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': [VolumeFromSpec('vol', 'rw')] } ], None) with mock.patch.object(Service, 'containers') as mock_return: mock_return.return_value = [ mock.Mock(id=container_id, spec=Container) for container_id in container_ids] self.assertEqual( project.get_service('test')._get_volumes_from(), [container_ids[0] + ':rw'])
def test_project_up_starts_depends(self): project = Project.from_dicts( name="composetest", service_dicts=build_service_dicts( { "console": {"image": "busybox:latest", "command": ["top"]}, "data": {"image": "busybox:latest", "command": ["top"]}, "db": {"image": "busybox:latest", "command": ["top"], "volumes_from": ["data"]}, "web": {"image": "busybox:latest", "command": ["top"], "links": ["db"]}, } ), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(["web"]) self.assertEqual(len(project.containers()), 3) self.assertEqual(len(project.get_service("web").containers()), 1) self.assertEqual(len(project.get_service("db").containers()), 1) self.assertEqual(len(project.get_service("data").containers()), 1) self.assertEqual(len(project.get_service("console").containers()), 0)
def test_from_dict_sorts_in_dependency_order(self): project = Project.from_dicts('composetest', [ { 'name': 'web', 'image': 'busybox:latest', 'links': ['db'], }, { 'name': 'db', 'image': 'busybox:latest', 'volumes_from': ['volume'] }, { 'name': 'volume', 'image': 'busybox:latest', 'volumes': ['/tmp'], } ], None) self.assertEqual(project.services[0].name, 'volume') self.assertEqual(project.services[1].name, 'db') self.assertEqual(project.services[2].name, 'web')
def test_volumes_from_container(self): data_container = Container.create( self.client, image='busybox:latest', volumes=['/var/data'], name='composetest_data_container', ) project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'db': { 'image': 'busybox:latest', 'volumes_from': ['composetest_data_container'], }, }), client=self.client, ) db = project.get_service('db') self.assertEqual(db.volumes_from, [data_container]) project.kill() project.remove_stopped()
def test_net_from_container(self): net_container = Container.create( self.client, image="busybox:latest", name="composetest_net_container", command="top", labels={LABEL_PROJECT: "composetest"}, ) net_container.start() project = Project.from_dicts( name="composetest", service_dicts=build_service_dicts( {"web": {"image": "busybox:latest", "net": "container:composetest_net_container"}} ), client=self.client, ) project.up() web = project.get_service("web") self.assertEqual(web.net.mode, "container:" + net_container.id)
def test_net_from_service(self): project = Project.from_dicts( name='composetest', service_dicts=build_service_dicts({ 'net': { 'image': 'busybox:latest', 'command': ["top"] }, 'web': { 'image': 'busybox:latest', 'net': 'container:net', 'command': ["top"] }, }), client=self.client, ) project.up() web = project.get_service('web') net = project.get_service('net') self.assertEqual(web.net.mode, 'container:' + net.containers()[0].id)
def test_use_volumes_from_service_no_container(self): container_name = 'test_vol_1' self.mock_client.containers.return_value = [ { "Name": container_name, "Names": [container_name], "Id": container_name, "Image": 'busybox:latest' } ] project = Project.from_dicts('test', [ { 'name': 'vol', 'image': 'busybox:latest' }, { 'name': 'test', 'image': 'busybox:latest', 'volumes_from': ['vol'] } ], self.mock_client) self.assertEqual(project.get_service('test')._get_volumes_from(), [container_name])
def test_container_without_name(self): self.mock_client.containers.return_value = [ {'Image': 'busybox:latest', 'Id': '1', 'Name': '1'}, {'Image': 'busybox:latest', 'Id': '2', 'Name': None}, {'Image': 'busybox:latest', 'Id': '3'}, ] self.mock_client.inspect_container.return_value = { 'Id': '1', 'Config': { 'Labels': { LABEL_SERVICE: 'web', }, }, } project = Project.from_dicts( 'test', [{ 'name': 'web', 'image': 'busybox:latest', }], self.mock_client, ) self.assertEqual([c.id for c in project.containers()], ['1'])
def test_project_up_starts_depends(self): project = Project.from_dicts( name='composetest', service_dicts=config.from_dictionary({ 'console': { 'image': 'busybox:latest', 'command': ["/bin/sleep", "300"], }, 'data': { 'image': 'busybox:latest', 'command': ["/bin/sleep", "300"] }, 'db': { 'image': 'busybox:latest', 'command': ["/bin/sleep", "300"], 'volumes_from': ['data'], }, 'web': { 'image': 'busybox:latest', 'command': ["/bin/sleep", "300"], 'links': ['db'], }, }), client=self.client, ) project.start() self.assertEqual(len(project.containers()), 0) project.up(['web']) self.assertEqual(len(project.containers()), 3) self.assertEqual(len(project.get_service('web').containers()), 1) self.assertEqual(len(project.get_service('db').containers()), 1) self.assertEqual(len(project.get_service('data').containers()), 1) self.assertEqual(len(project.get_service('console').containers()), 0) project.kill() project.remove_stopped()
def make_project(self, cfg): return Project.from_dicts(name='composetest', client=self.client, service_dicts=config.load( config.ConfigDetails( cfg, 'working_dir', None)))
def make_project(self, cfg): return Project.from_dicts( name='composetest', client=self.client, service_dicts=config.from_dictionary(cfg), )