Kaydet (Commit) aa3c4f02 authored tarafından Joffrey F's avatar Joffrey F

Add unlock_swarm and get_unlock_key to APIClient

Signed-off-by: 's avatarJoffrey F <joffrey@docker.com>
üst f238fe55
import logging
from six.moves import http_client
from .. import errors
from .. import types
from .. import utils
log = logging.getLogger(__name__)
......@@ -68,6 +70,16 @@ class SwarmApiMixin(object):
kwargs['external_cas'] = [ext_ca]
return types.SwarmSpec(self._version, *args, **kwargs)
@utils.minimum_version('1.24')
def get_unlock_key(self):
"""
Get the unlock key for this Swarm manager.
Returns:
A ``dict`` containing an ``UnlockKey`` member
"""
return self._result(self._get(self._url('/swarm/unlockkey')), True)
@utils.minimum_version('1.24')
def init_swarm(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
force_new_cluster=False, swarm_spec=None):
......@@ -270,10 +282,46 @@ class SwarmApiMixin(object):
self._raise_for_status(res)
return True
@utils.minimum_version('1.24')
def unlock_swarm(self, key):
"""
Unlock a locked swarm.
Args:
key (string): The unlock key as provided by
:py:meth:`get_unlock_key`
Raises:
:py:class:`docker.errors.InvalidArgument`
If the key argument is in an incompatible format
:py:class:`docker.errors.APIError`
If the server returns an error.
Returns:
`True` if the request was successful.
Example:
>>> key = client.get_unlock_key()
>>> client.unlock_node(key)
"""
if isinstance(key, dict):
if 'UnlockKey' not in key:
raise errors.InvalidArgument('Invalid unlock key format')
else:
key = {'UnlockKey': key}
url = self._url('/swarm/unlock')
res = self._post_json(url, data=key)
self._raise_for_status(res)
return True
@utils.minimum_version('1.24')
def update_node(self, node_id, version, node_spec=None):
"""
Update the Node's configuration
Update the node's configuration
Args:
......
......@@ -13,6 +13,13 @@ class SwarmTest(BaseAPIIntegrationTest):
def tearDown(self):
super(SwarmTest, self).tearDown()
try:
unlock_key = self.client.get_unlock_key()
if unlock_key.get('UnlockKey'):
self.unlock_swarm(unlock_key)
except docker.errors.APIError:
pass
force_leave_swarm(self.client)
@requires_api_version('1.24')
......@@ -70,6 +77,9 @@ class SwarmTest(BaseAPIIntegrationTest):
swarm_info['Spec']['EncryptionConfig']['AutoLockManagers'] is True
)
unlock_key = self.get_unlock_key()
assert unlock_key.get('UnlockKey')
@requires_api_version('1.25')
@pytest.mark.xfail(
reason="This doesn't seem to be taken into account by the engine"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment