Beispiel #1
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)

        logging_dict = options.get("logging", None)
        log_config = get_log_config(logging_dict)

        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=build_port_bindings(options.get("ports") or []),
            binds=options.get("binds"),
            volumes_from=self._get_volumes_from(),
            privileged=options.get("privileged", False),
            network_mode=self.network_mode.mode,
            devices=options.get("devices"),
            dns=options.get("dns"),
            dns_search=options.get("dns_search"),
            restart_policy=options.get("restart"),
            cap_add=options.get("cap_add"),
            cap_drop=options.get("cap_drop"),
            mem_limit=options.get("mem_limit"),
            memswap_limit=options.get("memswap_limit"),
            ulimits=build_ulimits(options.get("ulimits")),
            log_config=log_config,
            extra_hosts=options.get("extra_hosts"),
            read_only=options.get("read_only"),
            pid_mode=options.get("pid"),
            security_opt=options.get("security_opt"),
            ipc_mode=options.get("ipc"),
            cgroup_parent=options.get("cgroup_parent"),
            cpu_quota=options.get("cpu_quota"),
            shm_size=options.get("shm_size"),
            tmpfs=options.get("tmpfs"),
        )
Beispiel #2
0
 def test_build_port_bindings_with_matching_internal_port_ranges(self):
     port_bindings = build_port_bindings(
         ["127.0.0.1:1000-1001:1000-1001", "127.0.0.1:2000-2001:1000-1001"])
     self.assertEqual(port_bindings["1000"],
                      [("127.0.0.1", "1000"), ("127.0.0.1", "2000")])
     self.assertEqual(port_bindings["1001"],
                      [("127.0.0.1", "1001"), ("127.0.0.1", "2001")])
Beispiel #3
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)

        logging_dict = options.get('logging', None)
        log_config = get_log_config(logging_dict)

        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=build_port_bindings(options.get('ports') or []),
            binds=options.get('binds'),
            volumes_from=self._get_volumes_from(),
            privileged=options.get('privileged', False),
            network_mode=self.network_mode.mode,
            devices=options.get('devices'),
            dns=options.get('dns'),
            dns_search=options.get('dns_search'),
            restart_policy=options.get('restart'),
            cap_add=options.get('cap_add'),
            cap_drop=options.get('cap_drop'),
            mem_limit=options.get('mem_limit'),
            memswap_limit=options.get('memswap_limit'),
            mem_reservation=options.get('mem_reservation'),
            ulimits=build_ulimits(options.get('ulimits')),
            log_config=log_config,
            extra_hosts=options.get('extra_hosts'),
            read_only=options.get('read_only'),
            pid_mode=options.get('pid'),
            security_opt=options.get('security_opt'),
            ipc_mode=options.get('ipc'),
            cgroup_parent=options.get('cgroup_parent'),
            cpu_quota=options.get('cpu_quota'),
            shm_size=options.get('shm_size'),
            tmpfs=options.get('tmpfs'),
            oom_score_adj=options.get('oom_score_adj')
        )
Beispiel #4
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)

        log_config = LogConfig(
            type=options.get('log_driver', ""),
            config=options.get('log_opt', None)
        )
        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=build_port_bindings(options.get('ports') or []),
            binds=options.get('binds'),
            volumes_from=self._get_volumes_from(),
            privileged=options.get('privileged', False),
            network_mode=self.net.mode,
            devices=options.get('devices'),
            dns=options.get('dns'),
            dns_search=options.get('dns_search'),
            restart_policy=options.get('restart'),
            cap_add=options.get('cap_add'),
            cap_drop=options.get('cap_drop'),
            mem_limit=options.get('mem_limit'),
            memswap_limit=options.get('memswap_limit'),
            ulimits=build_ulimits(options.get('ulimits')),
            log_config=log_config,
            extra_hosts=options.get('extra_hosts'),
            read_only=options.get('read_only'),
            pid_mode=options.get('pid'),
            security_opt=options.get('security_opt'),
            ipc_mode=options.get('ipc'),
            cgroup_parent=options.get('cgroup_parent'),
        )
Beispiel #5
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)
        port_bindings = build_port_bindings(options.get('ports') or [])

        privileged = options.get('privileged', False)
        cap_add = options.get('cap_add', None)
        cap_drop = options.get('cap_drop', None)
        log_config = LogConfig(
            type=options.get('log_driver', ""),
            config=options.get('log_opt', None)
        )
        pid = options.get('pid', None)
        security_opt = options.get('security_opt', None)

        dns = options.get('dns', None)
        if isinstance(dns, six.string_types):
            dns = [dns]

        dns_search = options.get('dns_search', None)
        if isinstance(dns_search, six.string_types):
            dns_search = [dns_search]

        restart = parse_restart_spec(options.get('restart', None))

        extra_hosts = build_extra_hosts(options.get('extra_hosts', None))
        read_only = options.get('read_only', None)

        devices = options.get('devices', None)
        cgroup_parent = options.get('cgroup_parent', None)
        ulimits = build_ulimits(options.get('ulimits', None))

        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=port_bindings,
            binds=options.get('binds'),
            volumes_from=self._get_volumes_from(),
            privileged=privileged,
            network_mode=self.net.mode,
            devices=devices,
            dns=dns,
            dns_search=dns_search,
            restart_policy=restart,
            cap_add=cap_add,
            cap_drop=cap_drop,
            mem_limit=options.get('mem_limit'),
            memswap_limit=options.get('memswap_limit'),
            ulimits=ulimits,
            log_config=log_config,
            extra_hosts=extra_hosts,
            read_only=read_only,
            pid_mode=pid,
            security_opt=security_opt,
            ipc_mode=options.get('ipc'),
            cgroup_parent=cgroup_parent
        )
 def run_kwargs_for_service(self, service_name):
     to_return = self.services[service_name].copy()
     # remove keys that docker-compose format doesn't accept, or that can't
     #  be used during the build phase
     container_args = inspect.getargspec(ContainerApiMixin.create_container)[0] + RUN_HOST_CONFIG_KWARGS
     remove_keys = list(set(to_return.keys()) - set(container_args)) + ['links']
     logger.debug("Removing keys", keys=remove_keys)
     for key in list(remove_keys):
         try:
             to_return.pop(key)
         except KeyError:
             pass
     if to_return.get('ports'):
         # convert ports from a list to a dict that docker-py likes
         new_ports = build_port_bindings(to_return.get('ports'))
         to_return['ports'] = new_ports
     return to_return
Beispiel #7
0
    def parse(cls, spec):
        if isinstance(spec, cls):
            # When extending a service with ports, the port definitions have already been parsed
            return [spec]

        if not isinstance(spec, dict):
            result = []
            try:
                for k, v in build_port_bindings([spec]).items():
                    if '/' in k:
                        target, proto = k.split('/', 1)
                    else:
                        target, proto = (k, None)
                    for pub in v:
                        if pub is None:
                            result.append(
                                cls(target, None, proto, None, None)
                            )
                        elif isinstance(pub, tuple):
                            result.append(
                                cls(target, pub[1], proto, None, pub[0])
                            )
                        else:
                            result.append(
                                cls(target, pub, proto, None, None)
                            )
            except ValueError as e:
                raise ConfigurationError(str(e))

            return result

        return [cls(
            spec.get('target'),
            spec.get('published'),
            spec.get('protocol'),
            spec.get('mode'),
            None
        )]
Beispiel #8
0
 def test_build_port_bindings_with_port_range(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]
     assert port_bindings["1001"] == [("127.0.0.1", "1001")]
Beispiel #9
0
 def test_build_port_bindings_with_port_range(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
     self.assertEqual(port_bindings["1001"], [("127.0.0.1", "1001")])
Beispiel #10
0
 def test_build_port_bindings_with_nonmatching_internal_ports(self):
     port_bindings = build_port_bindings(
         ["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]
     assert port_bindings["2000"] == [("127.0.0.1", "2000")]
Beispiel #11
0
 def test_build_port_bindings_with_one_port(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]
Beispiel #12
0
 def test_build_port_bindings_with_one_port(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
Beispiel #13
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)

        logging_dict = options.get('logging', None)
        blkio_config = convert_blkio_config(options.get('blkio_config', None))
        log_config = get_log_config(logging_dict)
        init_path = None
        if isinstance(options.get('init'), six.string_types):
            init_path = options.get('init')
            options['init'] = True

        nano_cpus = None
        if 'cpus' in options:
            nano_cpus = int(options.get('cpus') * NANOCPUS_SCALE)

        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=build_port_bindings(
                formatted_ports(options.get('ports', []))),
            binds=options.get('binds'),
            volumes_from=self._get_volumes_from(),
            privileged=options.get('privileged', False),
            network_mode=self.network_mode.mode,
            devices=options.get('devices'),
            dns=options.get('dns'),
            dns_opt=options.get('dns_opt'),
            dns_search=options.get('dns_search'),
            restart_policy=options.get('restart'),
            cap_add=options.get('cap_add'),
            cap_drop=options.get('cap_drop'),
            mem_limit=options.get('mem_limit'),
            mem_reservation=options.get('mem_reservation'),
            memswap_limit=options.get('memswap_limit'),
            ulimits=build_ulimits(options.get('ulimits')),
            log_config=log_config,
            extra_hosts=options.get('extra_hosts'),
            read_only=options.get('read_only'),
            pid_mode=self.pid_mode.mode,
            security_opt=options.get('security_opt'),
            ipc_mode=options.get('ipc'),
            cgroup_parent=options.get('cgroup_parent'),
            cpu_quota=options.get('cpu_quota'),
            shm_size=options.get('shm_size'),
            sysctls=options.get('sysctls'),
            pids_limit=options.get('pids_limit'),
            tmpfs=options.get('tmpfs'),
            oom_score_adj=options.get('oom_score_adj'),
            mem_swappiness=options.get('mem_swappiness'),
            group_add=options.get('group_add'),
            userns_mode=options.get('userns_mode'),
            init=options.get('init', None),
            init_path=init_path,
            isolation=options.get('isolation'),
            cpu_count=options.get('cpu_count'),
            cpu_percent=options.get('cpu_percent'),
            nano_cpus=nano_cpus,
            volume_driver=options.get('volume_driver'),
            cpuset_cpus=options.get('cpuset'),
            cpu_shares=options.get('cpu_shares'),
            storage_opt=options.get('storage_opt'),
            blkio_weight=blkio_config.get('weight'),
            blkio_weight_device=blkio_config.get('weight_device'),
            device_read_bps=blkio_config.get('device_read_bps'),
            device_read_iops=blkio_config.get('device_read_iops'),
            device_write_bps=blkio_config.get('device_write_bps'),
            device_write_iops=blkio_config.get('device_write_iops'),
        )
Beispiel #14
0
 def test_build_port_bindings_with_nonmatching_internal_port_ranges(self):
     port_bindings = build_port_bindings(
         ["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
     self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")])
Beispiel #15
0
 def test_build_port_bindings_with_port_range(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
     self.assertEqual(port_bindings["1001"], [("127.0.0.1", "1001")])
Beispiel #16
0
 def test_build_port_bindings_with_one_port(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
Beispiel #17
0
 def test_build_port_bindings_with_port_range(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000-1001:1000-1001"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]
     assert port_bindings["1001"] == [("127.0.0.1", "1001")]
Beispiel #18
0
 def test_build_port_bindings_with_nonmatching_internal_ports(self):
     port_bindings = build_port_bindings(
         ["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"])
     self.assertEqual(port_bindings["1000"], [("127.0.0.1", "1000")])
     self.assertEqual(port_bindings["2000"], [("127.0.0.1", "2000")])
Beispiel #19
0
 def test_build_port_bindings_with_nonmatching_internal_port_ranges(self):
     port_bindings = build_port_bindings(
         ["127.0.0.1:1000:1000", "127.0.0.1:2000:2000"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]
     assert port_bindings["2000"] == [("127.0.0.1", "2000")]
Beispiel #20
0
    def _get_container_host_config(self, override_options, one_off=False):
        options = dict(self.options, **override_options)

        logging_dict = options.get('logging', None)
        blkio_config = convert_blkio_config(options.get('blkio_config', None))
        log_config = get_log_config(logging_dict)
        init_path = None
        if isinstance(options.get('init'), six.string_types):
            init_path = options.get('init')
            options['init'] = True

        nano_cpus = None
        if 'cpus' in options:
            nano_cpus = int(options.get('cpus') * NANOCPUS_SCALE)

        return self.client.create_host_config(
            links=self._get_links(link_to_self=one_off),
            port_bindings=build_port_bindings(
                formatted_ports(options.get('ports', []))
            ),
            binds=options.get('binds'),
            volumes_from=self._get_volumes_from(),
            privileged=options.get('privileged', False),
            network_mode=self.network_mode.mode,
            devices=options.get('devices'),
            dns=options.get('dns'),
            dns_opt=options.get('dns_opt'),
            dns_search=options.get('dns_search'),
            restart_policy=options.get('restart'),
            cap_add=options.get('cap_add'),
            cap_drop=options.get('cap_drop'),
            mem_limit=options.get('mem_limit'),
            mem_reservation=options.get('mem_reservation'),
            memswap_limit=options.get('memswap_limit'),
            ulimits=build_ulimits(options.get('ulimits')),
            log_config=log_config,
            extra_hosts=options.get('extra_hosts'),
            read_only=options.get('read_only'),
            pid_mode=self.pid_mode.mode,
            security_opt=options.get('security_opt'),
            ipc_mode=options.get('ipc'),
            cgroup_parent=options.get('cgroup_parent'),
            cpu_quota=options.get('cpu_quota'),
            shm_size=options.get('shm_size'),
            sysctls=options.get('sysctls'),
            pids_limit=options.get('pids_limit'),
            tmpfs=options.get('tmpfs'),
            oom_score_adj=options.get('oom_score_adj'),
            mem_swappiness=options.get('mem_swappiness'),
            group_add=options.get('group_add'),
            userns_mode=options.get('userns_mode'),
            init=options.get('init', None),
            init_path=init_path,
            isolation=options.get('isolation'),
            cpu_count=options.get('cpu_count'),
            cpu_percent=options.get('cpu_percent'),
            nano_cpus=nano_cpus,
            volume_driver=options.get('volume_driver'),
            cpuset_cpus=options.get('cpuset'),
            cpu_shares=options.get('cpu_shares'),
            storage_opt=options.get('storage_opt'),
            blkio_weight=blkio_config.get('weight'),
            blkio_weight_device=blkio_config.get('weight_device'),
            device_read_bps=blkio_config.get('device_read_bps'),
            device_read_iops=blkio_config.get('device_read_iops'),
            device_write_bps=blkio_config.get('device_write_bps'),
            device_write_iops=blkio_config.get('device_write_iops'),
        )
Beispiel #21
0
 def test_build_port_bindings_with_one_port(self):
     port_bindings = build_port_bindings(["127.0.0.1:1000:1000"])
     assert port_bindings["1000"] == [("127.0.0.1", "1000")]