mirror of https://github.com/docker/docker-py.git
first cut of restart policy
This commit is contained in:
parent
c76fd8d914
commit
c6046ac137
|
|
@ -806,7 +806,8 @@ class Client(requests.Session):
|
||||||
|
|
||||||
def start(self, container, binds=None, port_bindings=None, lxc_conf=None,
|
def start(self, container, binds=None, port_bindings=None, lxc_conf=None,
|
||||||
publish_all_ports=False, links=None, privileged=False,
|
publish_all_ports=False, links=None, privileged=False,
|
||||||
dns=None, dns_search=None, volumes_from=None, network_mode=None):
|
dns=None, dns_search=None, volumes_from=None, network_mode=None,
|
||||||
|
restart_policy=None):
|
||||||
if isinstance(container, dict):
|
if isinstance(container, dict):
|
||||||
container = container.get('Id')
|
container = container.get('Id')
|
||||||
|
|
||||||
|
|
@ -859,6 +860,9 @@ class Client(requests.Session):
|
||||||
if volumes_from is not None:
|
if volumes_from is not None:
|
||||||
warnings.warn(warning_message.format('volumes_from'),
|
warnings.warn(warning_message.format('volumes_from'),
|
||||||
DeprecationWarning)
|
DeprecationWarning)
|
||||||
|
if restart_policy is not None:
|
||||||
|
warnings.warn(warning_message.format('restart_policy'),
|
||||||
|
DeprecationWarning)
|
||||||
|
|
||||||
if dns_search:
|
if dns_search:
|
||||||
start_config['DnsSearch'] = dns_search
|
start_config['DnsSearch'] = dns_search
|
||||||
|
|
@ -866,6 +870,9 @@ class Client(requests.Session):
|
||||||
if network_mode:
|
if network_mode:
|
||||||
start_config['NetworkMode'] = network_mode
|
start_config['NetworkMode'] = network_mode
|
||||||
|
|
||||||
|
if restart_policy:
|
||||||
|
start_config['RestartPolicy'] = restart_policy
|
||||||
|
|
||||||
url = self._url("/containers/{0}/start".format(container))
|
url = self._url("/containers/{0}/start".format(container))
|
||||||
res = self._post_json(url, data=start_config)
|
res = self._post_json(url, data=start_config)
|
||||||
self._raise_for_status(res)
|
self._raise_for_status(res)
|
||||||
|
|
|
||||||
|
|
@ -612,6 +612,23 @@ class TestStartContainerWithLinks(BaseTestCase):
|
||||||
self.assertIn('{0}_NAME='.format(link_env_prefix2), logs)
|
self.assertIn('{0}_NAME='.format(link_env_prefix2), logs)
|
||||||
self.assertIn('{0}_ENV_FOO=1'.format(link_env_prefix2), logs)
|
self.assertIn('{0}_ENV_FOO=1'.format(link_env_prefix2), logs)
|
||||||
|
|
||||||
|
|
||||||
|
class TestRestartingContainer(BaseTestCase):
|
||||||
|
def runTest(self):
|
||||||
|
container = self.client.create_container('busybox', ['false'])
|
||||||
|
id = container['Id']
|
||||||
|
self.client.start(id, restart_policy={
|
||||||
|
{
|
||||||
|
"Name": "on-failure",
|
||||||
|
"MaximumRetryCount": 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
self.client.wait(id)
|
||||||
|
self.client.remove_container(id)
|
||||||
|
containers = self.client.containers(all=True)
|
||||||
|
res = [x for x in containers if 'Id' in x and x['Id'].startswith(id)]
|
||||||
|
self.assertEqual(len(res), 0)
|
||||||
|
|
||||||
#################
|
#################
|
||||||
# LINKS TESTS #
|
# LINKS TESTS #
|
||||||
#################
|
#################
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ def fake_resp(url, data=None, **kwargs):
|
||||||
status_code, content = fake_api.fake_responses[url]()
|
status_code, content = fake_api.fake_responses[url]()
|
||||||
return response(status_code=status_code, content=content)
|
return response(status_code=status_code, content=content)
|
||||||
|
|
||||||
|
|
||||||
fake_request = mock.Mock(side_effect=fake_resp)
|
fake_request = mock.Mock(side_effect=fake_resp)
|
||||||
url_prefix = 'http+unix://var/run/docker.sock/v{0}/'.format(
|
url_prefix = 'http+unix://var/run/docker.sock/v{0}/'.format(
|
||||||
docker.client.DEFAULT_DOCKER_API_VERSION)
|
docker.client.DEFAULT_DOCKER_API_VERSION)
|
||||||
|
|
@ -812,6 +813,34 @@ class DockerClientTest(Cleanup, unittest.TestCase):
|
||||||
docker.client.DEFAULT_TIMEOUT_SECONDS
|
docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_start_container_with_restart_policy(self):
|
||||||
|
try:
|
||||||
|
self.client.start(fake_api.FAKE_CONTAINER_ID,
|
||||||
|
restart_policy={
|
||||||
|
"Name": "always",
|
||||||
|
"MaximumRetryCount": 0
|
||||||
|
})
|
||||||
|
except Exception as e:
|
||||||
|
self.fail('Command should not raise exception: {0}'.format(e))
|
||||||
|
args = fake_request.call_args
|
||||||
|
self.assertEqual(
|
||||||
|
args[0][0],
|
||||||
|
url_prefix + 'containers/3cc2351ab11b/start'
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
json.loads(args[1]['data']),
|
||||||
|
{"PublishAllPorts": False, "Privileged": False,
|
||||||
|
"RestartPolicy": {"MaximumRetryCount": 0, "Name": "always"}}
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
args[1]['headers'],
|
||||||
|
{'Content-Type': 'application/json'}
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
args[1]['timeout'],
|
||||||
|
docker.client.DEFAULT_TIMEOUT_SECONDS
|
||||||
|
)
|
||||||
|
|
||||||
def test_resize_container(self):
|
def test_resize_container(self):
|
||||||
try:
|
try:
|
||||||
self.client.resize(
|
self.client.resize(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue