|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import os
- import json
- import hashlib
-
- from docker import utils
- from docker.constants import IS_WINDOWS_PLATFORM
- from docker.constants import DEFAULT_UNIX_SOCKET
- from docker.utils.config import find_config_file
-
- METAFILE = "meta.json"
-
-
- def get_current_context_name():
- name = "default"
- docker_cfg_path = find_config_file()
- if docker_cfg_path:
- try:
- with open(docker_cfg_path) as f:
- name = json.load(f).get("currentContext", "default")
- except Exception:
- return "default"
- return name
-
-
- def write_context_name_to_docker_config(name=None):
- if name == 'default':
- name = None
- docker_cfg_path = find_config_file()
- config = {}
- if docker_cfg_path:
- try:
- with open(docker_cfg_path) as f:
- config = json.load(f)
- except Exception as e:
- return e
- current_context = config.get("currentContext", None)
- if current_context and not name:
- del config["currentContext"]
- elif name:
- config["currentContext"] = name
- else:
- return
- try:
- with open(docker_cfg_path, "w") as f:
- json.dump(config, f, indent=4)
- except Exception as e:
- return e
-
-
- def get_context_id(name):
- return hashlib.sha256(name.encode('utf-8')).hexdigest()
-
-
- def get_context_dir():
- return os.path.join(os.path.dirname(find_config_file() or ""), "contexts")
-
-
- def get_meta_dir(name=None):
- meta_dir = os.path.join(get_context_dir(), "meta")
- if name:
- return os.path.join(meta_dir, get_context_id(name))
- return meta_dir
-
-
- def get_meta_file(name):
- return os.path.join(get_meta_dir(name), METAFILE)
-
-
- def get_tls_dir(name=None, endpoint=""):
- context_dir = get_context_dir()
- if name:
- return os.path.join(context_dir, "tls", get_context_id(name), endpoint)
- return os.path.join(context_dir, "tls")
-
-
- def get_context_host(path=None, tls=False):
- host = utils.parse_host(path, IS_WINDOWS_PLATFORM, tls)
- if host == DEFAULT_UNIX_SOCKET:
- # remove http+ from default docker socket url
- return host.strip("http+")
- return host
|