Пример #1
0
    def test_mount_same_host_path_to_two_volumes(self):
        service = Service(
            'web',
            image='busybox',
            volumes=[
                VolumeSpec.parse('/host/path:/data1'),
                VolumeSpec.parse('/host/path:/data2'),
            ],
            client=self.mock_client,
        )

        self.mock_client.inspect_image.return_value = {
            'Id': 'ababab',
            'ContainerConfig': {
                'Volumes': {}
            }
        }

        service._get_container_create_options(
            override_options={},
            number=1,
        )

        self.assertEqual(
            set(self.mock_client.create_host_config.call_args[1]['binds']),
            set([
                '/host/path:/data1:rw',
                '/host/path:/data2:rw',
            ]),
        )
Пример #2
0
    def test_different_host_path_in_container_json(self):
        service = Service(
            'web',
            image='busybox',
            volumes=['/host/path:/data'],
            client=self.mock_client,
        )

        self.mock_client.inspect_image.return_value = {
            'Id': 'ababab',
            'ContainerConfig': {
                'Volumes': {
                    '/data': {},
                }
            }
        }

        self.mock_client.inspect_container.return_value = {
            'Id': '123123123',
            'Image': 'ababab',
            'Volumes': {
                '/data': '/mnt/sda1/host/path',
            },
        }

        service._get_container_create_options(
            override_options={},
            number=1,
            previous_container=Container(self.mock_client, {'Id': '123123123'}),
        )

        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['binds'],
            ['/mnt/sda1/host/path:/data:rw'],
        )
Пример #3
0
    def test_different_host_path_in_container_json(self):
        service = Service(
            'web',
            image='busybox',
            volumes=[VolumeSpec.parse('/host/path:/data')],
            client=self.mock_client,
        )

        self.mock_client.inspect_image.return_value = {
            'Id': 'ababab',
            'ContainerConfig': {
                'Volumes': {
                    '/data': {},
                }
            }
        }

        self.mock_client.inspect_container.return_value = {
            'Id': '123123123',
            'Image': 'ababab',
            'Volumes': {
                '/data': '/mnt/sda1/host/path',
            },
        }

        service._get_container_create_options(
            override_options={},
            number=1,
            previous_container=Container(self.mock_client, {'Id': '123123123'}),
        )

        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['binds'],
            ['/mnt/sda1/host/path:/data:rw'],
        )
Пример #4
0
    def test_cgroup_parent(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name="foo", image="foo", hostname="name", client=self.mock_client, cgroup_parent="test")
        service._get_container_create_options({"some": "overrides"}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(self.mock_client.create_host_config.call_args[1]["cgroup_parent"], "test")
Пример #5
0
    def test_cgroup_parent(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, cgroup_parent='test')
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['cgroup_parent'],
            'test'
        )
Пример #6
0
    def test_cgroup_parent(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, cgroup_parent='test')
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['cgroup_parent'],
            'test'
        )
Пример #7
0
    def test_log_opt(self):
        self.mock_client.create_host_config.return_value = {}

        log_opt = {'syslog-address': 'tcp://192.168.0.42:123'}
        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, log_driver='syslog', log_opt=log_opt)
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['log_config'],
            {'Type': 'syslog', 'Config': {'syslog-address': 'tcp://192.168.0.42:123'}}
        )
Пример #8
0
    def test_log_opt(self):
        self.mock_client.create_host_config.return_value = {}

        log_opt = {'syslog-address': 'tcp://192.168.0.42:123'}
        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, log_driver='syslog', log_opt=log_opt)
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['log_config'],
            {'Type': 'syslog', 'Config': {'syslog-address': 'tcp://192.168.0.42:123'}}
        )
Пример #9
0
    def test_mem_reservation(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name='foo',
                          image='foo',
                          hostname='name',
                          client=self.mock_client,
                          mem_reservation='512m')
        service._get_container_create_options({'some': 'overrides'}, 1)
        assert self.mock_client.create_host_config.called is True
        assert self.mock_client.create_host_config.call_args[1][
            'mem_reservation'] == '512m'
Пример #10
0
    def test_mount_same_host_path_to_two_volumes(self):
        service = Service(
            "web", image="busybox", volumes=["/host/path:/data1", "/host/path:/data2"], client=self.mock_client
        )

        self.mock_client.inspect_image.return_value = {"Id": "ababab", "ContainerConfig": {"Volumes": {}}}

        service._get_container_create_options(override_options={}, number=1)

        self.assertEqual(
            set(self.mock_client.create_host_config.call_args[1]["binds"]),
            set(["/host/path:/data1:rw", "/host/path:/data2:rw"]),
        )
Пример #11
0
    def test_mem_reservation(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(
            name='foo',
            image='foo',
            hostname='name',
            client=self.mock_client,
            mem_reservation='512m'
        )
        service._get_container_create_options({'some': 'overrides'}, 1)
        assert self.mock_client.create_host_config.called is True
        assert self.mock_client.create_host_config.call_args[1]['mem_reservation'] == '512m'
Пример #12
0
    def test_log_opt(self):
        self.mock_client.create_host_config.return_value = {}

        log_opt = {"syslog-address": "tcp://192.168.0.42:123"}
        service = Service(
            name="foo", image="foo", hostname="name", client=self.mock_client, log_driver="syslog", log_opt=log_opt
        )
        service._get_container_create_options({"some": "overrides"}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]["log_config"],
            {"Type": "syslog", "Config": {"syslog-address": "tcp://192.168.0.42:123"}},
        )
Пример #13
0
    def test_memory_reservation_limit(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name='foo',
                          image='foo',
                          hostname='name',
                          client=self.mock_client,
                          mem_reservation=500000000)
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]
            ['mem_reservation'], 500000000)
Пример #14
0
    def test_memory_swap_limit(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(
            name='foo',
            image='foo',
            hostname='name',
            client=self.mock_client,
            mem_limit=1000000000,
            memswap_limit=2000000000)
        service._get_container_create_options({'some': 'overrides'}, 1)

        assert self.mock_client.create_host_config.called
        assert self.mock_client.create_host_config.call_args[1]['mem_limit'] == 1000000000
        assert self.mock_client.create_host_config.call_args[1]['memswap_limit'] == 2000000000
Пример #15
0
    def test_memory_swap_limit(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, mem_limit=1000000000, memswap_limit=2000000000)
        service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['mem_limit'],
            1000000000
        )
        self.assertEqual(
            self.mock_client.create_host_config.call_args[1]['memswap_limit'],
            2000000000
        )
Пример #16
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            '2524a06fcb3d781aa2c981fc40bcfa08013bb318e4273bfa388df22023e6f2aa')
        assert opts['environment'] == ['also=real']
Пример #17
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(id='ababab',
                                   image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {}, 1, previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            'f8bfa1058ad1f4231372a0b1639f0dfdb574dafff4e8d7938049ae993f7cf1fc')
        self.assertEqual(opts['environment'], {
            'affinity:container': '=ababab',
            'also': 'real',
        })
Пример #18
0
    def test_get_create_options_with_proxy_config(self):
        default_proxy_config = {
            'httpProxy': 'http://proxy.mycorp.com:3128',
            'httpsProxy': 'https://*****:*****@proxy.mycorp.com:3129',
            'ftpProxy': 'http://ftpproxy.mycorp.com:21',
        }
        self.mock_client._general_configs = {
            'proxies': {
                'default': default_proxy_config,
            }
        }
        self.mock_client.base_url = 'http+docker://localunixsocket'

        override_options = {
            'environment': {
                'FTP_PROXY': 'ftp://xdge.exo.au:21',
                'ftp_proxy': 'ftp://xdge.exo.au:21',
            }
        }
        environment = {
            'HTTPS_PROXY': 'https://rdcf.th08.jp:8911',
            'https_proxy': 'https://rdcf.th08.jp:8911',
        }

        service = Service('foo', client=self.mock_client, environment=environment)

        create_opts = service._get_container_create_options(override_options, 1)
        assert set(create_opts['environment']) == set(format_environment({
            'HTTP_PROXY': default_proxy_config['httpProxy'],
            'http_proxy': default_proxy_config['httpProxy'],
            'HTTPS_PROXY': environment['HTTPS_PROXY'],
            'https_proxy': environment['HTTPS_PROXY'],
            'FTP_PROXY': override_options['environment']['FTP_PROXY'],
            'ftp_proxy': override_options['environment']['FTP_PROXY'],
        }))
Пример #19
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            '3c85881a8903b9d73a06c41860c8be08acce1494ab4cf8408375966dccd714de')
        self.assertEqual(
            opts['environment'],
            {
                'affinity:container': '=ababab',
                'also': 'real',
            }
        )
Пример #20
0
    def test_different_host_path_in_container_json(self):
        service = Service("web", image="busybox", volumes=["/host/path:/data"], client=self.mock_client)

        self.mock_client.inspect_image.return_value = {"Id": "ababab", "ContainerConfig": {"Volumes": {"/data": {}}}}

        self.mock_client.inspect_container.return_value = {
            "Id": "123123123",
            "Image": "ababab",
            "Volumes": {"/data": "/mnt/sda1/host/path"},
        }

        service._get_container_create_options(
            override_options={}, number=1, previous_container=Container(self.mock_client, {"Id": "123123123"})
        )

        self.assertEqual(self.mock_client.create_host_config.call_args[1]["binds"], ["/mnt/sda1/host/path:/data:rw"])
Пример #21
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(id='ababab',
                                   image_config={'ContainerConfig': {}})

        opts = service._get_container_create_options(
            {}, 1, previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            '3c85881a8903b9d73a06c41860c8be08acce1494ab4cf8408375966dccd714de')
        self.assertEqual(opts['environment'], {
            'affinity:container': '=ababab',
            'also': 'real',
        })
Пример #22
0
    def test_get_container_create_options_sets_affinity_with_binds(self):
        service = Service(
            'foo',
            image='foo',
            client=self.mock_client,
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {'Volumes': ['/data']}})

        def container_get(key):
            return {
                'Mounts': [
                    {
                        'Destination': '/data',
                        'Source': '/some/path',
                        'Name': 'abab1234',
                    },
                ]
            }.get(key, None)

        prev_container.get.side_effect = container_get

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)

        assert opts['environment'] == ['affinity:container==ababab']
Пример #23
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            'f8bfa1058ad1f4231372a0b1639f0dfdb574dafff4e8d7938049ae993f7cf1fc')
        assert opts['environment'] == ['also=real']
Пример #24
0
    def test_get_container_create_options_with_healthcheck(self):
        service = Service(
            'foo',
            image='foo',
            client=self.mock_client,
            healthcheck={
                'retries': 3,
                'command': 'exit 0',
                'timeout': '5s',
                'interval': '10s'
            }
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)
        assert opts['healthcheck'] == {
            'Retries': 3,
            'Interval': 10000000000,
            'Test': ['CMD-SHELL', 'exit 0'],
            'Timeout': 5000000000
        }
Пример #25
0
    def test_get_container_create_options_does_not_mutate_options(self):
        labels = {'thing': 'real'}
        environment = {'also': 'real'}
        service = Service(
            'foo',
            image='foo',
            labels=dict(labels),
            client=self.mock_client,
            environment=dict(environment),
        )
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)

        self.assertEqual(service.options['labels'], labels)
        self.assertEqual(service.options['environment'], environment)

        self.assertEqual(
            opts['labels'][LABEL_CONFIG_HASH],
            'b30306d0a73b67f67a45b99b88d36c359e470e6fa0c04dda1cf62d2087205b81')
        self.assertEqual(
            opts['environment'],
            {
                'affinity:container': '=ababab',
                'also': 'real',
            }
        )
Пример #26
0
    def test_memory_swap_limit(self):
        self.mock_client.create_host_config.return_value = {}

        service = Service(
            name="foo",
            image="foo",
            hostname="name",
            client=self.mock_client,
            mem_limit=1000000000,
            memswap_limit=2000000000,
        )
        service._get_container_create_options({"some": "overrides"}, 1)

        self.assertTrue(self.mock_client.create_host_config.called)
        self.assertEqual(self.mock_client.create_host_config.call_args[1]["mem_limit"], 1000000000)
        self.assertEqual(self.mock_client.create_host_config.call_args[1]["memswap_limit"], 2000000000)
Пример #27
0
 def test_split_domainname_none(self):
     service = Service('foo',
                       image='foo',
                       hostname='name.domain.tld',
                       client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     assert opts['hostname'] == 'name.domain.tld', 'hostname'
     assert not ('domainname' in opts), 'domainname'
Пример #28
0
    def test_log_opt(self):
        log_opt = {'syslog-address': 'tcp://192.168.0.42:123'}
        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, log_driver='syslog', log_opt=log_opt)
        opts = service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertIsInstance(opts['host_config']['LogConfig'], LogConfig)
        self.assertEqual(opts['host_config']['LogConfig'].type, 'syslog')
        self.assertEqual(opts['host_config']['LogConfig'].config, log_opt)
Пример #29
0
    def test_get_container_create_options_with_different_host_path_in_container_json(
            self):
        service = Service(
            'web',
            image='busybox',
            volumes=[VolumeSpec.parse('/host/path:/data')],
            client=self.mock_client,
        )
        volume_name = 'abcdefff1234'

        self.mock_client.inspect_image.return_value = {
            'Id': 'ababab',
            'ContainerConfig': {
                'Volumes': {
                    '/data': {},
                }
            }
        }

        self.mock_client.inspect_container.return_value = {
            'Id':
            '123123123',
            'Image':
            'ababab',
            'Mounts': [
                {
                    'Destination': '/data',
                    'Source': '/mnt/sda1/host/path',
                    'Mode': '',
                    'RW': True,
                    'Driver': 'local',
                    'Name': volume_name,
                },
            ]
        }

        service._get_container_create_options(
            override_options={},
            number=1,
            previous_container=Container(self.mock_client,
                                         {'Id': '123123123'}),
        )

        assert (self.mock_client.create_host_config.call_args[1]['binds'] == [
            '{}:/data:rw'.format(volume_name)
        ])
Пример #30
0
 def test_split_domainname_none(self):
     service = Service('foo',
                       image='foo',
                       hostname='name.domain.tld',
                       client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'name.domain.tld', 'hostname')
     self.assertFalse('domainname' in opts, 'domainname')
Пример #31
0
    def test_log_opt(self):
        log_opt = {'syslog-address': 'tcp://192.168.0.42:123'}
        service = Service(name='foo', image='foo', hostname='name', client=self.mock_client, log_driver='syslog', log_opt=log_opt)
        opts = service._get_container_create_options({'some': 'overrides'}, 1)

        self.assertIsInstance(opts['host_config']['LogConfig'], LogConfig)
        self.assertEqual(opts['host_config']['LogConfig'].type, 'syslog')
        self.assertEqual(opts['host_config']['LogConfig'].config, log_opt)
Пример #32
0
 def test_split_domainname_fqdn(self):
     service = Service(
         'foo',
         hostname='name.domain.tld',
         image='foo',
         client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'name', 'hostname')
     self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
Пример #33
0
 def test_split_domainname_fqdn(self):
     self.mock_client.api_version = '1.22'
     service = Service('foo',
                       hostname='name.domain.tld',
                       image='foo',
                       client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'name', 'hostname')
     self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
Пример #34
0
 def test_stop_grace_period(self):
     self.mock_client.api_version = '1.25'
     self.mock_client.create_host_config.return_value = {}
     service = Service('foo',
                       image='foo',
                       client=self.mock_client,
                       stop_grace_period="1m35s")
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['stop_timeout'], 95)
Пример #35
0
 def test_no_default_hostname_when_not_using_networking(self):
     service = Service(
         'foo',
         image='foo',
         use_networking=False,
         client=self.mock_client,
     )
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertIsNone(opts.get('hostname'))
Пример #36
0
 def test_split_domainname_none(self):
     service = Service(
         'foo',
         image='foo',
         hostname='name.domain.tld',
         client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     assert opts['hostname'] == 'name.domain.tld', 'hostname'
     assert not ('domainname' in opts), 'domainname'
Пример #37
0
 def test_hostname_defaults_to_service_name_when_using_networking(self):
     service = Service(
         'foo',
         image='foo',
         use_networking=True,
         client=self.mock_client,
     )
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'foo')
Пример #38
0
 def test_hostname_defaults_to_service_name_when_using_networking(self):
     service = Service(
         'foo',
         image='foo',
         use_networking=True,
         client=self.mock_client,
     )
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'foo')
Пример #39
0
    def test_get_container_create_options_no_affinity_without_binds(self):
        service = Service('foo', image='foo', client=self.mock_client)
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(id='ababab',
                                   image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {}, 1, previous_container=prev_container)
        assert opts['environment'] == []
Пример #40
0
 def test_memory_swap_limit(self):
     service = Service(name='foo',
                       image='foo',
                       hostname='name',
                       client=self.mock_client,
                       mem_limit=1000000000,
                       memswap_limit=2000000000)
     opts = service._get_container_create_options({'some': 'overrides'}, 1)
     self.assertEqual(opts['host_config']['MemorySwap'], 2000000000)
     self.assertEqual(opts['host_config']['Memory'], 1000000000)
Пример #41
0
 def test_split_domainname_weird(self):
     service = Service('foo',
                       hostname='name.sub',
                       domainname='domain.tld',
                       image='foo',
                       client=self.mock_client)
     self.mock_client.containers.return_value = []
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'name.sub', 'hostname')
     self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
Пример #42
0
 def test_get_container_create_options_with_name_option(self):
     service = Service('foo',
                       image='foo',
                       client=self.mock_client,
                       container_name='foo1')
     name = 'the_new_name'
     opts = service._get_container_create_options({'name': name},
                                                  1,
                                                  one_off=OneOffFilter.only)
     self.assertEqual(opts['name'], name)
Пример #43
0
 def test_split_domainname_weird(self):
     self.mock_client.api_version = '1.22'
     service = Service('foo',
                       hostname='name.sub',
                       domainname='domain.tld',
                       image='foo',
                       client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     assert opts['hostname'] == 'name.sub', 'hostname'
     assert opts['domainname'] == 'domain.tld', 'domainname'
Пример #44
0
 def test_split_domainname_fqdn(self):
     self.mock_client.api_version = '1.22'
     service = Service(
         'foo',
         hostname='name.domain.tld',
         image='foo',
         client=self.mock_client)
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     assert opts['hostname'] == 'name', 'hostname'
     assert opts['domainname'] == 'domain.tld', 'domainname'
Пример #45
0
    def test_get_container_create_options_with_different_host_path_in_container_json(self):
        service = Service(
            'web',
            image='busybox',
            volumes=[VolumeSpec.parse('/host/path:/data')],
            client=self.mock_client,
        )
        volume_name = 'abcdefff1234'

        self.mock_client.inspect_image.return_value = {
            'Id': 'ababab',
            'ContainerConfig': {
                'Volumes': {
                    '/data': {},
                }
            }
        }

        self.mock_client.inspect_container.return_value = {
            'Id': '123123123',
            'Image': 'ababab',
            'Mounts': [
                {
                    'Destination': '/data',
                    'Source': '/mnt/sda1/host/path',
                    'Mode': '',
                    'RW': True,
                    'Driver': 'local',
                    'Name': volume_name,
                },
            ]
        }

        service._get_container_create_options(
            override_options={},
            number=1,
            previous_container=Container(self.mock_client, {'Id': '123123123'}),
        )

        assert (
            self.mock_client.create_host_config.call_args[1]['binds'] ==
            ['{}:/data:rw'.format(volume_name)]
        )
Пример #46
0
 def test_stop_grace_period(self):
     self.mock_client.api_version = '1.25'
     self.mock_client.create_host_config.return_value = {}
     service = Service(
         'foo',
         image='foo',
         client=self.mock_client,
         stop_grace_period="1m35s")
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     assert opts['stop_timeout'] == 95
Пример #47
0
 def test_split_domainname_weird(self):
     service = Service(
         'foo',
         hostname='name.sub',
         domainname='domain.tld',
         image='foo',
         client=self.mock_client)
     self.mock_client.containers.return_value = []
     opts = service._get_container_create_options({'image': 'foo'}, 1)
     self.assertEqual(opts['hostname'], 'name.sub', 'hostname')
     self.assertEqual(opts['domainname'], 'domain.tld', 'domainname')
Пример #48
0
 def test_memory_swap_limit(self):
     service = Service(name='foo',
                       image='foo',
                       hostname='name',
                       client=self.mock_client,
                       mem_limit=1000000000,
                       memswap_limit=2000000000)
     self.mock_client.containers.return_value = []
     opts = service._get_container_create_options({'some': 'overrides'}, 1)
     self.assertEqual(opts['memswap_limit'], 2000000000)
     self.assertEqual(opts['mem_limit'], 1000000000)
Пример #49
0
    def test_log_opt(self):
        log_opt = {"address": "tcp://192.168.0.42:123"}
        service = Service(
            name="foo", image="foo", hostname="name", client=self.mock_client, log_driver="syslog", log_opt=log_opt
        )
        self.mock_client.containers.return_value = []
        opts = service._get_container_create_options({"some": "overrides"}, 1)

        self.assertIsInstance(opts["host_config"]["LogConfig"], LogConfig)
        self.assertEqual(opts["host_config"]["LogConfig"].type, "syslog")
        self.assertEqual(opts["host_config"]["LogConfig"].config, log_opt)
Пример #50
0
 def test_get_container_create_options_with_name_option(self):
     service = Service(
         'foo',
         image='foo',
         client=self.mock_client,
         container_name='foo1')
     name = 'the_new_name'
     opts = service._get_container_create_options(
         {'name': name},
         1,
         one_off=OneOffFilter.only)
     self.assertEqual(opts['name'], name)
Пример #51
0
 def test_memory_swap_limit(self):
     service = Service(
         name="foo",
         image="foo",
         hostname="name",
         client=self.mock_client,
         mem_limit=1000000000,
         memswap_limit=2000000000,
     )
     self.mock_client.containers.return_value = []
     opts = service._get_container_create_options({"some": "overrides"}, 1)
     self.assertEqual(opts["memswap_limit"], 2000000000)
     self.assertEqual(opts["mem_limit"], 1000000000)
Пример #52
0
    def test_get_container_create_options_no_affinity_without_binds(self):
        service = Service('foo', image='foo', client=self.mock_client)
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        prev_container = mock.Mock(
            id='ababab',
            image_config={'ContainerConfig': {}})
        prev_container.get.return_value = None

        opts = service._get_container_create_options(
            {},
            1,
            previous_container=prev_container)
        assert opts['environment'] == []
Пример #53
0
    def test_config_hash_matches_label(self):
        self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
        service = Service(
            'foo',
            image='example.com/foo',
            client=self.mock_client,
            network_mode=NetworkMode('bridge'),
            networks={'bridge': {}},
            links=[(Service('one', client=self.mock_client), 'one')],
            volumes_from=[VolumeFromSpec(Service('two', client=self.mock_client), 'rw', 'service')]
        )
        config_hash = service.config_hash

        for api_version in set(API_VERSIONS.values()):
            self.mock_client.api_version = api_version
            assert service._get_container_create_options({}, 1)['labels'][LABEL_CONFIG_HASH] == (
                config_hash
            )