Skip to content

Commit d2aa221

Browse files
authored
Merge pull request #2793 from feliperuhland/create-secret-missing-name
Fix `KeyError` when creating a new secret
2 parents 31775a1 + d4310b2 commit d2aa221

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

docker/models/secrets.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class SecretCollection(Collection):
3030

3131
def create(self, **kwargs):
3232
obj = self.client.api.create_secret(**kwargs)
33+
obj.setdefault("Spec", {})["Name"] = kwargs.get("name")
3334
return self.prepare_model(obj)
3435
create.__doc__ = APIClient.create_secret.__doc__
3536

tests/unit/fake_api.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
FAKE_PATH = '/path'
1818
FAKE_VOLUME_NAME = 'perfectcherryblossom'
1919
FAKE_NODE_ID = '24ifsmvkjbyhk'
20+
FAKE_SECRET_ID = 'epdyrw4tsi03xy3deu8g8ly6o'
21+
FAKE_SECRET_NAME = 'super_secret'
2022

2123
# Each method is prefixed with HTTP method (get, post...)
2224
# for clarity and readability
@@ -512,6 +514,12 @@ def post_fake_network_disconnect():
512514
return 200, None
513515

514516

517+
def post_fake_secret():
518+
status_code = 200
519+
response = {'ID': FAKE_SECRET_ID}
520+
return status_code, response
521+
522+
515523
# Maps real api url to fake response callback
516524
prefix = 'http+docker://localhost'
517525
if constants.IS_WINDOWS_PLATFORM:
@@ -643,4 +651,6 @@ def post_fake_network_disconnect():
643651
CURRENT_VERSION, prefix, FAKE_NETWORK_ID
644652
), 'POST'):
645653
post_fake_network_disconnect,
654+
'{1}/{0}/secrets/create'.format(CURRENT_VERSION, prefix):
655+
post_fake_secret,
646656
}

tests/unit/fake_api_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def make_fake_api_client(overrides=None):
4040
fake_api.post_fake_create_container()[1],
4141
'create_host_config.side_effect': api_client.create_host_config,
4242
'create_network.return_value': fake_api.post_fake_network()[1],
43+
'create_secret.return_value': fake_api.post_fake_secret()[1],
4344
'exec_create.return_value': fake_api.post_fake_exec_create()[1],
4445
'exec_start.return_value': fake_api.post_fake_exec_start()[1],
4546
'images.return_value': fake_api.get_fake_images()[1],

tests/unit/models_secrets_test.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import unittest
2+
3+
from .fake_api_client import make_fake_client
4+
from .fake_api import FAKE_SECRET_NAME
5+
6+
7+
class CreateServiceTest(unittest.TestCase):
8+
def test_secrets_repr(self):
9+
client = make_fake_client()
10+
secret = client.secrets.create(name="super_secret", data="secret")
11+
assert secret.__repr__() == "<Secret: '{}'>".format(FAKE_SECRET_NAME)

0 commit comments

Comments
 (0)