mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-15 19:42:06 +00:00
* Remove __metaclass__ = type. for i in $(grep -REl '__metaclass__ = type' plugins/ tests/); do sed -e '/^__metaclass__ = type/d' -i $i; done * Remove super arguments, and stop inheriting from object.
140 lines
4.7 KiB
Python
140 lines
4.7 KiB
Python
# This code is part of the Ansible collection community.docker, but is an independent component.
|
|
# This particular file, and this file only, is based on the Docker SDK for Python (https://github.com/docker/docker-py/)
|
|
#
|
|
# Copyright (c) 2016-2022 Docker, Inc.
|
|
#
|
|
# It is licensed under the Apache 2.0 license (see LICENSES/Apache-2.0.txt in this collection)
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Note that this module util is **PRIVATE** to the collection. It can have breaking changes at any time.
|
|
# Do not use this from other collections or standalone plugins/modules!
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
from .. import auth
|
|
from ..utils.decorators import minimum_version
|
|
|
|
|
|
class DaemonApiMixin:
|
|
@minimum_version("1.25")
|
|
def df(self):
|
|
"""
|
|
Get data usage information.
|
|
|
|
Returns:
|
|
(dict): A dictionary representing different resource categories
|
|
and their respective data usage.
|
|
|
|
Raises:
|
|
:py:class:`docker.errors.APIError`
|
|
If the server returns an error.
|
|
"""
|
|
url = self._url("/system/df")
|
|
return self._result(self._get(url), get_json=True)
|
|
|
|
def info(self):
|
|
"""
|
|
Display system-wide information. Identical to the ``docker info``
|
|
command.
|
|
|
|
Returns:
|
|
(dict): The info as a dict
|
|
|
|
Raises:
|
|
:py:class:`docker.errors.APIError`
|
|
If the server returns an error.
|
|
"""
|
|
return self._result(self._get(self._url("/info")), get_json=True)
|
|
|
|
def login(
|
|
self,
|
|
username,
|
|
password=None,
|
|
email=None,
|
|
registry=None,
|
|
reauth=False,
|
|
dockercfg_path=None,
|
|
):
|
|
"""
|
|
Authenticate with a registry. Similar to the ``docker login`` command.
|
|
|
|
Args:
|
|
username (str): The registry username
|
|
password (str): The plaintext password
|
|
email (str): The email for the registry account
|
|
registry (str): URL to the registry. E.g.
|
|
``https://index.docker.io/v1/``
|
|
reauth (bool): Whether or not to refresh existing authentication on
|
|
the Docker server.
|
|
dockercfg_path (str): Use a custom path for the Docker config file
|
|
(default ``$HOME/.docker/config.json`` if present,
|
|
otherwise ``$HOME/.dockercfg``)
|
|
|
|
Returns:
|
|
(dict): The response from the login request
|
|
|
|
Raises:
|
|
:py:class:`docker.errors.APIError`
|
|
If the server returns an error.
|
|
"""
|
|
|
|
# If we do not have any auth data so far, try reloading the config file
|
|
# one more time in case anything showed up in there.
|
|
# If dockercfg_path is passed check to see if the config file exists,
|
|
# if so load that config.
|
|
if dockercfg_path and os.path.exists(dockercfg_path):
|
|
self._auth_configs = auth.load_config(
|
|
dockercfg_path, credstore_env=self.credstore_env
|
|
)
|
|
elif not self._auth_configs or self._auth_configs.is_empty:
|
|
self._auth_configs = auth.load_config(credstore_env=self.credstore_env)
|
|
|
|
authcfg = self._auth_configs.resolve_authconfig(registry)
|
|
# If we found an existing auth config for this registry and username
|
|
# combination, we can return it immediately unless reauth is requested.
|
|
if authcfg and authcfg.get("username", None) == username and not reauth:
|
|
return authcfg
|
|
|
|
req_data = {
|
|
"username": username,
|
|
"password": password,
|
|
"email": email,
|
|
"serveraddress": registry,
|
|
}
|
|
|
|
response = self._post_json(self._url("/auth"), data=req_data)
|
|
if response.status_code == 200:
|
|
self._auth_configs.add_auth(registry or auth.INDEX_NAME, req_data)
|
|
return self._result(response, get_json=True)
|
|
|
|
def ping(self):
|
|
"""
|
|
Checks the server is responsive. An exception will be raised if it
|
|
is not responding.
|
|
|
|
Returns:
|
|
(bool) The response from the server.
|
|
|
|
Raises:
|
|
:py:class:`docker.errors.APIError`
|
|
If the server returns an error.
|
|
"""
|
|
return self._result(self._get(self._url("/_ping"))) == "OK"
|
|
|
|
def version(self, api_version=True):
|
|
"""
|
|
Returns version information from the server. Similar to the ``docker
|
|
version`` command.
|
|
|
|
Returns:
|
|
(dict): The server version information
|
|
|
|
Raises:
|
|
:py:class:`docker.errors.APIError`
|
|
If the server returns an error.
|
|
"""
|
|
url = self._url("/version", versioned_api=api_version)
|
|
return self._result(self._get(url), get_json=True)
|