-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Couldn't create secret object #2025
Comments
Master branch is working. |
I get the same error for |
docker version: On my side the creation works but the >>> import docker
>>> d = docker.from_env()
>>> s = d.secrets.create(name="test", data="ok")
>>> s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/Library/Caches/pypoetry/virtualenvs/whatever-py3.7/lib/python3.7/site-packages/docker/models/secrets.py", line 10, in __repr__
return "<%s: '%s'>" % (self.__class__.__name__, self.name)
File "/Users/user/Library/Caches/pypoetry/virtualenvs/whatever-py3.7/lib/python3.7/site-packages/docker/models/secrets.py", line 14, in name
return self.attrs['Spec']['Name']
KeyError: 'Spec'
>>> s.attrs
{'ID': 'wi2jpy7n70wkkrbytnbctv1nj'}
>>> d.secrets.create(name="test2", data="ok")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/Library/Caches/pypoetry/virtualenvs/whatever-py3.7/lib/python3.7/site-packages/docker/models/secrets.py", line 10, in __repr__
return "<%s: '%s'>" % (self.__class__.__name__, self.name)
File "/Users/user/Library/Caches/pypoetry/virtualenvs/whatever-py3.7/lib/python3.7/site-packages/docker/models/secrets.py", line 14, in name
return self.attrs['Spec']['Name']
KeyError: 'Spec' |
- Change id_attribute to Id - add new property id - add name fallback Fixes docker#2025
- Change id_attribute to Id - add new property id - add name fallback Fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
I opened a PR for that issue. Do you want to review it? |
- Change id_attribute to Id - add new property id - add name fallback Fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
- Change id_attribute to Id - add new property id - add name fallback Fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
- Change id_attribute to Id - add new property id - add name fallback Fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
How to reproduce the issue: ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/ruhland/projects/github.com/feliperuhland/docker-py/docker/models/secrets.py", line 10, in __repr__ return "<%s: '%s'>" % (self.__class__.__name__, self.name) File "/home/ruhland/projects/github.com/feliperuhland/docker-py/docker/models/secrets.py", line 14, in name return self.attrs['Spec']['Name'] KeyError: 'Spec' ``` The exception raises because create secrets API `/secrets/create` only return the `id` attribute: https://docs.docker.com/engine/api/v1.41/#operation/SecretCreate The secret model is created using just the `id` attribute and fails when looking for Spec.Name attribute. ```py def __repr__(self): return "<%s: '%s'>" % (self.__class__.__name__, self.name) ``` ```py @Property def name(self): return self.attrs['Spec']['Name'] ``` I came up with a ugly solution but will prevent the problem to happen again: ```py def create(self, **kwargs): obj = self.client.api.create_secret(**kwargs) + obj.setdefault("Spec", {})["Name"] = kwargs.get("name") return self.prepare_model(obj) ``` After the API call, I added the name attribute to the right place to be used on the property name. ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") <Secret: 'any_name'> ``` It isn't the most elegant solution, but it will do the trick. I had a previous PR docker#2517 when I propose using the `id` attribute instead of `name` on the `__repr__` method, but I think this one will be better. That fixes docker#2025
How to reproduce the issue: ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/ruhland/projects/github.com/feliperuhland/docker-py/docker/models/secrets.py", line 10, in __repr__ return "<%s: '%s'>" % (self.__class__.__name__, self.name) File "/home/ruhland/projects/github.com/feliperuhland/docker-py/docker/models/secrets.py", line 14, in name return self.attrs['Spec']['Name'] KeyError: 'Spec' ``` The exception raises because create secrets API `/secrets/create` only return the `id` attribute: https://docs.docker.com/engine/api/v1.41/#operation/SecretCreate The secret model is created using just the `id` attribute and fails when looking for Spec.Name attribute. ```py def __repr__(self): return "<%s: '%s'>" % (self.__class__.__name__, self.name) ``` ```py @Property def name(self): return self.attrs['Spec']['Name'] ``` I came up with a ugly solution but will prevent the problem to happen again: ```py def create(self, **kwargs): obj = self.client.api.create_secret(**kwargs) + obj.setdefault("Spec", {})["Name"] = kwargs.get("name") return self.prepare_model(obj) ``` After the API call, I added the name attribute to the right place to be used on the property name. ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") <Secret: 'any_name'> ``` It isn't the most elegant solution, but it will do the trick. I had a previous PR docker#2517 when I propose using the `id` attribute instead of `name` on the `__repr__` method, but I think this one will be better. That fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
How to reproduce the issue: ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/docker-py/docker/models/secrets.py", line 10, in __repr__ return "<%s: '%s'>" % (self.__class__.__name__, self.name) File "/home/docker-py/docker/models/secrets.py", line 14, in name return self.attrs['Spec']['Name'] KeyError: 'Spec' ``` The exception raises because create secrets API `/secrets/create` only return the `id` attribute: https://docs.docker.com/engine/api/v1.41/#operation/SecretCreate The secret model is created using just the `id` attribute and fails when looking for Spec.Name attribute. ```py def __repr__(self): return "<%s: '%s'>" % (self.__class__.__name__, self.name) ``` ```py @Property def name(self): return self.attrs['Spec']['Name'] ``` I came up with a ugly solution but will prevent the problem to happen again: ```py def create(self, **kwargs): obj = self.client.api.create_secret(**kwargs) + obj.setdefault("Spec", {})["Name"] = kwargs.get("name") return self.prepare_model(obj) ``` After the API call, I added the name attribute to the right place to be used on the property name. ```py >>> import docker >>> cli = docker.from_env() >>> cli.secrets.create(name="any_name", data="1") <Secret: 'any_name'> ``` It isn't the most elegant solution, but it will do the trick. I had a previous PR docker#2517 when I propose using the `id` attribute instead of `name` on the `__repr__` method, but I think this one will be better. That fixes docker#2025 Signed-off-by: Felipe Ruhland <felipe.ruhland@gmail.com>
I couldn't create secret object, the problem seemed to boil down to the way that a secret was being created from the docker daemon response.
docker-py/docker/models/secrets.py
Lines 31 to 33 in 467cacb
Docker version 18.03.1-ce and python version 3.5 had the following error:
When calling:
Changing the code to the following seemed to fix it.
The text was updated successfully, but these errors were encountered: