diff options
author | Joffrey F <joffrey@docker.com> | 2016-01-29 18:37:27 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2016-02-23 16:18:36 -0800 |
commit | c3ba50c98d5de7da5a618877636c8a3d50324ca0 (patch) | |
tree | b0c4e663a920bf9af0a94610f2bff1c4bfd07fab | |
parent | aa651f80b1cec0b67488936cccbbace9cbcd734a (diff) | |
download | docker-py-c3ba50c98d5de7da5a618877636c8a3d50324ca0.tar.gz |
New `update_container` method
Allows user to update container limits in-flight.
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r-- | docker/api/container.py | 32 | ||||
-rw-r--r-- | tests/integration/container_test.py | 18 |
2 files changed, 50 insertions, 0 deletions
diff --git a/docker/api/container.py b/docker/api/container.py index ceac173..9abf4af 100644 --- a/docker/api/container.py +++ b/docker/api/container.py @@ -397,6 +397,38 @@ class ContainerApiMixin(object): self._raise_for_status(res) @utils.check_resource + def update_container( + self, container, blkio_weight=None, cpu_period=None, cpu_quota=None, + cpu_shares=None, cpuset_cpus=None, cpuset_mems=None, mem_limit=None, + mem_reservation=None, memswap_limit=None, kernel_memory=None + ): + url = self._url('/containers/{0}/update', container) + data = {} + if blkio_weight: + data['BlkioWeight'] = blkio_weight + if cpu_period: + data['CpuPeriod'] = cpu_period + if cpu_shares: + data['CpuShares'] = cpu_shares + if cpu_quota: + data['CpuQuota'] = cpu_quota + if cpuset_cpus: + data['CpusetCpus'] = cpuset_cpus + if cpuset_mems: + data['CpusetMems'] = cpuset_mems + if mem_limit: + data['Memory'] = mem_limit + if mem_reservation: + data['MemoryReservation'] = mem_reservation + if memswap_limit: + data['MemorySwap'] = memswap_limit + if kernel_memory: + data['KernelMemory'] = kernel_memory + + res = self._post_json(url, data=data) + return self._result(res, True) + + @utils.check_resource def wait(self, container, timeout=None): url = self._url("/containers/{0}/wait", container) res = self._post(url, timeout=timeout) diff --git a/tests/integration/container_test.py b/tests/integration/container_test.py index 1714599..d95902d 100644 --- a/tests/integration/container_test.py +++ b/tests/integration/container_test.py @@ -1031,3 +1031,21 @@ class GetContainerStatsTest(helpers.BaseTestCase): for key in ['read', 'network', 'precpu_stats', 'cpu_stats', 'memory_stats', 'blkio_stats']: self.assertIn(key, chunk) + + +class ContainerUpdateTest(helpers.BaseTestCase): + @requires_api_version('1.22') + def test_update_container(self): + old_mem_limit = 400 * 1024 * 1024 + new_mem_limit = 300 * 1024 * 1024 + container = self.client.create_container( + BUSYBOX, 'top', host_config=self.client.create_host_config( + mem_limit=old_mem_limit + ), cpu_shares=102 + ) + self.tmp_containers.append(container) + self.client.start(container) + print(self.client.update_container(container, mem_limit=new_mem_limit)) + inspect_data = self.client.inspect_container(container) + self.assertEqual(inspect_data['HostConfig']['Memory'], new_mem_limit) + self.assertEqual(inspect_data['HostConfig']['CpuShares'], 102) |