summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeerthan Reddy Mala <kmala@deis.com>2016-07-14 22:43:33 -0600
committerKeerthan Reddy Mala <kmala@deis.com>2016-07-22 10:04:31 -0600
commit9b63bed6a0b5185b043e85df8c49d86d2c048aa1 (patch)
tree0d19a36169a84f5e29ee1422e8fd4a99f502f78a
parent01cb969215fc91fa99642bd9718bfa0ce2a66a0c (diff)
downloaddocker-py-9b63bed6a0b5185b043e85df8c49d86d2c048aa1.tar.gz
Add optional auth config to docker push
Signed-off-by: Keerthan Reddy Mala <kmala@deis.com>
-rw-r--r--docker/api/image.py27
-rw-r--r--docs/api.md2
2 files changed, 19 insertions, 10 deletions
diff --git a/docker/api/image.py b/docker/api/image.py
index 3e66347..2bdbce8 100644
--- a/docker/api/image.py
+++ b/docker/api/image.py
@@ -205,7 +205,7 @@ class ImageApiMixin(object):
return self._result(response)
def push(self, repository, tag=None, stream=False,
- insecure_registry=False, decode=False):
+ insecure_registry=False, auth_config=None, decode=False):
if insecure_registry:
warnings.warn(
INSECURE_REGISTRY_DEPRECATION_WARNING.format('push()'),
@@ -224,15 +224,22 @@ class ImageApiMixin(object):
if utils.compare_version('1.5', self._version) >= 0:
# If we don't have any auth data so far, try reloading the config
# file one more time in case anything showed up in there.
- if not self._auth_configs:
- self._auth_configs = auth.load_config()
- authcfg = auth.resolve_authconfig(self._auth_configs, registry)
-
- # Do not fail here if no authentication exists for this specific
- # registry as we can have a readonly pull. Just put the header if
- # we can.
- if authcfg:
- headers['X-Registry-Auth'] = auth.encode_header(authcfg)
+ if auth_config is None:
+ log.debug('Looking for auth config')
+ if not self._auth_configs:
+ log.debug(
+ "No auth config in memory - loading from filesystem"
+ )
+ self._auth_configs = auth.load_config()
+ authcfg = auth.resolve_authconfig(self._auth_configs, registry)
+ # Do not fail here if no authentication exists for this
+ # specific registry as we can have a readonly pull. Just
+ # put the header if we can.
+ if authcfg:
+ headers['X-Registry-Auth'] = auth.encode_header(authcfg)
+ else:
+ log.debug('Sending supplied auth config')
+ headers['X-Registry-Auth'] = auth.encode_header(auth_config)
response = self._post_json(
u, None, headers=headers, stream=stream, params=params
diff --git a/docs/api.md b/docs/api.md
index e058deb..9b3a726 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -801,6 +801,8 @@ command.
* tag (str): An optional tag to push
* stream (bool): Stream the output as a blocking generator
* insecure_registry (bool): Use `http://` to connect to the registry
+* auth_config (dict): Override the credentials that Client.login has set for this request
+ `auth_config` should contain the `username` and `password` keys to be valid.
**Returns** (generator or str): The output of the upload