Ejemplo n.º 1
0
def load_environment(environment_name):
    # Load up the images definitions
    images_file = env.get('images_file', './docker/images.yaml')
    with open(images_file, 'r') as f:
        env.images = yaml.safe_load(f)
        env.manager = ImageManager(env.images)

    # Load up the maps definitions and store the one in `name`
    map_file = env.get('map_file', './docker/map.yaml')
    with open(map_file, 'r') as f:
        data = yaml.safe_load(f)
        prefix = data['name']
        repo = data.get('repository', None)
        environment = data[environment_name]

    env.update(environment.pop('settings', {}))
    if repo is not None:
        environment['repository'] = repo

    env.environment = environment_name

    if 'host' in environment:
        for volume, path in environment['host'].items():
            environment['host'][volume] = os.path.abspath(path)

    env.container_dict = environment
    env.container_prefix = prefix
    env.container_map = ContainerMap(prefix, environment, check_integrity=True)
    env.container_config = ClientConfiguration(base_url=env.docker.base_url,
                                               version=env.docker._version,
                                               timeout=env.docker.timeout,
                                               client=env.docker)
Ejemplo n.º 2
0
 def setUp(self):
     test_map = ContainerMap('test_map',
                             initial=TEST_MAP_DATA,
                             check_integrity=False)
     self.f_res = ContainerDependencyResolver(test_map)
     self.r_res = ContainerDependencyResolver()
     self.r_res.update_backward(test_map)
Ejemplo n.º 3
0
 def setUp(self):
     self.sample_map = ContainerMap('main', MAP_DATA_2, use_attached_parent_name=True)
     self.ext_main = self.sample_map.get_extended_map()
     self.simple_map = ContainerMap('simple', MAP_DATA_3)
     self.ext_simple = self.simple_map.get_extended_map()
Ejemplo n.º 4
0
class TestConfig(unittest.TestCase):
    def setUp(self):
        self.sample_map = ContainerMap('main', MAP_DATA_2, use_attached_parent_name=True)
        self.ext_main = self.sample_map.get_extended_map()
        self.simple_map = ContainerMap('simple', MAP_DATA_3)
        self.ext_simple = self.simple_map.get_extended_map()

    def test_single_config(self):
        cfg = self.sample_map.get_existing('abstract_config')
        self.assertTrue(cfg.abstract)
        self.assertEqual(cfg.image, 'server')
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.permissions, 'u=rwX,g=rX,o=')

    def test_merge_with_dict(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_dict = MAP_DATA_2['containers']['server']
        cfg.merge(merge_dict)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private', False)])
        self.assertEqual(cfg.links, [ContainerLink('svc', 'svc_alias1'), ContainerLink('svc', 'svc_alias2')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_merge_with_dict_lists_only(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_dict = MAP_DATA_2['containers']['server']
        cfg.merge(merge_dict, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private', False)])
        self.assertEqual(cfg.links, [ContainerLink('svc', 'svc_alias1'), ContainerLink('svc', 'svc_alias2')])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_merge_with_config(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_cfg = self.sample_map.get_existing('server')
        cfg.merge(merge_cfg)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private', False)])
        self.assertEqual(cfg.links, [ContainerLink('svc', 'svc_alias1'), ContainerLink('svc', 'svc_alias2')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_merge_with_config_lists_only(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_cfg = self.sample_map.get_existing('server')
        cfg.merge(merge_cfg, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private', False)])
        self.assertEqual(cfg.links, [ContainerLink('svc', 'svc_alias1'), ContainerLink('svc', 'svc_alias2')])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_extended_config(self):
        cfg = self.ext_main.get_existing('server')
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private', False)])
        self.assertEqual(cfg.links, [ContainerLink('svc', 'svc_alias1'), ContainerLink('svc', 'svc_alias2')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_more_extended_config(self):
        cfg1_1 = self.sample_map.get_existing('worker')
        cfg1 = self.sample_map.get_extended(cfg1_1)
        self.assertEqual(cfg1.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg1.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg1.attaches, ['app_log'])
        self.assertEqual(cfg1.user, 'app_user')
        self.assertEqual(cfg1.create_options, {
            'mem_limit': '2g',
            'cpu_shares': 10,
            'entrypoint': 'celery',
            'command': 'worker -A MyApp -Q queue1,queue2',
        })
        self.assertEqual(cfg1.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 0,
                'Name': 'always',
            },
        })
        cfg2 = self.ext_main.get_existing('worker_q2')
        self.assertEqual(cfg2.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg2.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg2.attaches, ['app_log'])
        self.assertEqual(cfg2.user, 'app_user')
        self.assertEqual(cfg2.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 30,
            'entrypoint': 'celery',
            'command': 'worker -A MyApp -Q queue2',
        })
        self.assertEqual(cfg2.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 0,
                'Name': 'always',
            },
        })

    def test_partial_extended_map(self):
        self.assertEqual(self.ext_simple.host.root, MAP_DATA_3.get('host_root'))

    def test_get_persistent(self):
        attached_items, persistent_items = self.ext_main.get_persistent_items()
        self.assertItemsEqual(attached_items, [('worker', 'app_log'),
                                               ('server', 'app_log'),
                                               ('server', 'server_log'),
                                               ('redis', 'redis_socket'),
                                               ('redis', 'redis_log'),
                                               ('worker_q2', 'app_log')])
        self.assertItemsEqual(persistent_items, [('persistent_one', None)])
Ejemplo n.º 5
0
 def setUp(self):
     self.sample_map = ContainerMap('main', MAP_DATA_2, use_attached_parent_name=True)
     self.ext_main = self.sample_map.get_extended_map()
     self.simple_map = ContainerMap('simple', MAP_DATA_3)
     self.ext_simple = self.simple_map.get_extended_map()
Ejemplo n.º 6
0
class TestConfig(unittest.TestCase):
    def setUp(self):
        self.sample_map = ContainerMap('main', MAP_DATA_2, use_attached_parent_name=True)
        self.ext_main = self.sample_map.get_extended_map()
        self.simple_map = ContainerMap('simple', MAP_DATA_3)
        self.ext_simple = self.simple_map.get_extended_map()

    def test_single_config(self):
        cfg = self.sample_map.get_existing('abstract_config')
        self.assertTrue(cfg.abstract)
        self.assertEqual(cfg.image, 'server')
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.permissions, 'u=rwX,g=rX,o=')

    def test_merge_with_dict(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_dict = MAP_DATA_2['containers']['server']
        cfg.merge(merge_dict)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_merge_with_dict_lists_only(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_dict = MAP_DATA_2['containers']['server']
        cfg.merge(merge_dict, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private')])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_merge_with_config(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_cfg = self.sample_map.get_existing('server')
        cfg.merge(merge_cfg)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_merge_with_config_lists_only(self):
        cfg = self.sample_map.get_existing('abstract_config')
        merge_cfg = self.sample_map.get_existing('server')
        cfg.merge(merge_cfg, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'app_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private')])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_extended_config(self):
        cfg = self.ext_main.get_existing('server')
        self.assertEqual(cfg.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg.attaches, ['app_log', 'server_log'])
        self.assertEqual(cfg.user, 'server_user')
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, 'private')])
        self.assertEqual(cfg.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 15,
        })
        self.assertEqual(cfg.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 3,
                'Name': 'always',
            },
        })

    def test_more_extended_config(self):
        cfg1_1 = self.sample_map.get_existing('worker')
        cfg1 = self.sample_map.get_extended(cfg1_1)
        self.assertEqual(cfg1.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg1.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg1.attaches, ['app_log'])
        self.assertEqual(cfg1.user, 'app_user')
        self.assertEqual(cfg1.create_options, {
            'mem_limit': '2g',
            'cpu_shares': 10,
            'entrypoint': 'celery',
            'command': 'worker -A MyApp -Q queue1,queue2',
        })
        self.assertEqual(cfg1.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 0,
                'Name': 'always',
            },
        })
        cfg2 = self.ext_main.get_existing('worker_q2')
        self.assertEqual(cfg2.binds, [SharedVolume('app_config', True), SharedVolume('app_data', False)])
        self.assertEqual(cfg2.uses, [SharedVolume('redis.redis_socket', False)])
        self.assertEqual(cfg2.attaches, ['app_log'])
        self.assertEqual(cfg2.user, 'app_user')
        self.assertEqual(cfg2.create_options, {
            'mem_limit': '1g',
            'cpu_shares': 30,
            'entrypoint': 'celery',
            'command': 'worker -A MyApp -Q queue2',
        })
        self.assertEqual(cfg2.host_config, {
            'restart_policy': {
                'MaximumRetryCount': 0,
                'Name': 'always',
            },
        })

    def test_partial_extended_map(self):
        self.assertEqual(self.ext_simple.host.root, MAP_DATA_3.get('host_root'))

    def test_environment_config(self):
        cfg1_1 = self.sample_map.get_existing('worker')
Ejemplo n.º 7
0
class TestConfig(unittest.TestCase):
    def setUp(self):
        self.sample_map = ContainerMap("main", MAP_DATA_2, use_attached_parent_name=True)
        self.ext_main = self.sample_map.get_extended_map()
        self.simple_map = ContainerMap("simple", MAP_DATA_3)
        self.ext_simple = self.simple_map.get_extended_map()

    def test_single_config(self):
        cfg = self.sample_map.get_existing("abstract_config")
        self.assertTrue(cfg.abstract)
        self.assertEqual(cfg.image, "server")
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log"])
        self.assertEqual(cfg.user, "app_user")
        self.assertEqual(cfg.permissions, "u=rwX,g=rX,o=")

    def test_merge_with_dict(self):
        cfg = self.sample_map.get_existing("abstract_config")
        merge_dict = MAP_DATA_2["containers"]["server"]
        cfg.merge(merge_dict)
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log", "server_log"])
        self.assertEqual(cfg.user, "server_user")
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, "private")])
        self.assertEqual(cfg.create_options, {"mem_limit": "1g", "cpu_shares": 15})
        self.assertEqual(cfg.host_config, {"restart_policy": {"MaximumRetryCount": 3, "Name": "always"}})

    def test_merge_with_dict_lists_only(self):
        cfg = self.sample_map.get_existing("abstract_config")
        merge_dict = MAP_DATA_2["containers"]["server"]
        cfg.merge(merge_dict, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log", "server_log"])
        self.assertEqual(cfg.user, "app_user")
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, "private")])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_merge_with_config(self):
        cfg = self.sample_map.get_existing("abstract_config")
        merge_cfg = self.sample_map.get_existing("server")
        cfg.merge(merge_cfg)
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log", "server_log"])
        self.assertEqual(cfg.user, "server_user")
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, "private")])
        self.assertEqual(cfg.create_options, {"mem_limit": "1g", "cpu_shares": 15})
        self.assertEqual(cfg.host_config, {"restart_policy": {"MaximumRetryCount": 3, "Name": "always"}})

    def test_merge_with_config_lists_only(self):
        cfg = self.sample_map.get_existing("abstract_config")
        merge_cfg = self.sample_map.get_existing("server")
        cfg.merge(merge_cfg, lists_only=True)
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log", "server_log"])
        self.assertEqual(cfg.user, "app_user")
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, "private")])
        self.assertIs(cfg.create_options, NotSet)
        self.assertIs(cfg.host_config, NotSet)

    def test_extended_config(self):
        cfg = self.ext_main.get_existing("server")
        self.assertEqual(cfg.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg.attaches, ["app_log", "server_log"])
        self.assertEqual(cfg.user, "server_user")
        self.assertEqual(cfg.exposes, [PortBinding(8443, 8443, "private")])
        self.assertEqual(cfg.create_options, {"mem_limit": "1g", "cpu_shares": 15})
        self.assertEqual(cfg.host_config, {"restart_policy": {"MaximumRetryCount": 3, "Name": "always"}})

    def test_more_extended_config(self):
        cfg1_1 = self.sample_map.get_existing("worker")
        cfg1 = self.sample_map.get_extended(cfg1_1)
        self.assertEqual(cfg1.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg1.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg1.attaches, ["app_log"])
        self.assertEqual(cfg1.user, "app_user")
        self.assertEqual(
            cfg1.create_options,
            {
                "mem_limit": "2g",
                "cpu_shares": 10,
                "entrypoint": "celery",
                "command": "worker -A MyApp -Q queue1,queue2",
            },
        )
        self.assertEqual(cfg1.host_config, {"restart_policy": {"MaximumRetryCount": 0, "Name": "always"}})
        cfg2 = self.ext_main.get_existing("worker_q2")
        self.assertEqual(cfg2.binds, [SharedVolume("app_config", True), SharedVolume("app_data", False)])
        self.assertEqual(cfg2.uses, [SharedVolume("redis.redis_socket", False)])
        self.assertEqual(cfg2.attaches, ["app_log"])
        self.assertEqual(cfg2.user, "app_user")
        self.assertEqual(
            cfg2.create_options,
            {"mem_limit": "1g", "cpu_shares": 30, "entrypoint": "celery", "command": "worker -A MyApp -Q queue2"},
        )
        self.assertEqual(cfg2.host_config, {"restart_policy": {"MaximumRetryCount": 0, "Name": "always"}})

    def test_partial_extended_map(self):
        self.assertEqual(self.ext_simple.host.root, MAP_DATA_3.get("host_root"))

    def test_environment_config(self):
        cfg1_1 = self.sample_map.get_existing("worker")