summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2016-01-29 18:37:27 -0800
committerJoffrey F <joffrey@docker.com>2016-02-23 16:18:36 -0800
commitc3ba50c98d5de7da5a618877636c8a3d50324ca0 (patch)
treeb0c4e663a920bf9af0a94610f2bff1c4bfd07fab
parentaa651f80b1cec0b67488936cccbbace9cbcd734a (diff)
downloaddocker-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.py32
-rw-r--r--tests/integration/container_test.py18
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)