Fix is_docker_running function when dockerd is not running
Ignore PS command error when looking for docker URLs When docker daemon is not found running but default URL is readable then check it is valid before raising an error. Change-Id: I9bc39930bf4ce1960d327a21c3d9b9d7abc854f3
This commit is contained in:
parent
1027cd96df
commit
ce151599a3
|
@ -33,21 +33,51 @@ def discover_docker_urls(
|
||||||
ssh_client: ssh.SSHClientType = None,
|
ssh_client: ssh.SSHClientType = None,
|
||||||
default_url='unix:/var/run/docker.sock',
|
default_url='unix:/var/run/docker.sock',
|
||||||
check_urls=True,
|
check_urls=True,
|
||||||
sudo=False):
|
sudo=False) \
|
||||||
|
-> typing.List[str]:
|
||||||
|
last_error: typing.Optional[Exception] = None
|
||||||
urls = []
|
urls = []
|
||||||
|
try:
|
||||||
|
urls += list_docker_urls(ssh_client=ssh_client,
|
||||||
|
sudo=sudo)
|
||||||
|
except _exception.DockerUrlNotFoundError as ex:
|
||||||
|
last_error = ex
|
||||||
|
if default_url not in urls:
|
||||||
|
urls.append(default_url)
|
||||||
|
if check_urls:
|
||||||
|
urls = select_valid_urls(ssh_client=ssh_client,
|
||||||
|
urls=urls,
|
||||||
|
sudo=sudo,
|
||||||
|
last_error=last_error)
|
||||||
|
return urls
|
||||||
|
|
||||||
|
|
||||||
|
def list_docker_urls(
|
||||||
|
ssh_client: ssh.SSHClientType,
|
||||||
|
sudo=False) \
|
||||||
|
-> typing.List[str]:
|
||||||
|
urls = []
|
||||||
|
try:
|
||||||
processes = sh.list_processes(command='^dockerd',
|
processes = sh.list_processes(command='^dockerd',
|
||||||
ssh_client=ssh_client,
|
ssh_client=ssh_client,
|
||||||
sudo=sudo)
|
sudo=sudo)
|
||||||
|
except sh.PsError as ex:
|
||||||
|
raise _exception.DockerUrlNotFoundError(
|
||||||
|
"Docker demon is not running") from ex
|
||||||
|
|
||||||
for process in processes:
|
for process in processes:
|
||||||
if process.command_line:
|
if process.command_line:
|
||||||
urls += urls_from_command_line(process.command_line)
|
urls += urls_from_command_line(process.command_line)
|
||||||
|
|
||||||
urls.append(default_url)
|
|
||||||
urls = list(collections.OrderedDict.fromkeys(urls))
|
urls = list(collections.OrderedDict.fromkeys(urls))
|
||||||
|
return urls
|
||||||
|
|
||||||
error: typing.Optional[Exception] = None
|
|
||||||
if check_urls:
|
def select_valid_urls(
|
||||||
|
ssh_client: ssh.SSHClientType,
|
||||||
|
urls: typing.List[str],
|
||||||
|
sudo=False,
|
||||||
|
last_error: Exception = None) \
|
||||||
|
-> typing.List[str]:
|
||||||
valid_urls = []
|
valid_urls = []
|
||||||
for url in urls:
|
for url in urls:
|
||||||
parsed_url = parse.urlparse(url)
|
parsed_url = parse.urlparse(url)
|
||||||
|
@ -60,16 +90,15 @@ def discover_docker_urls(
|
||||||
except sh.ShellCommandFailed as ex:
|
except sh.ShellCommandFailed as ex:
|
||||||
LOG.exception(
|
LOG.exception(
|
||||||
f"Can't read from socket: {parsed_url.path}")
|
f"Can't read from socket: {parsed_url.path}")
|
||||||
ex.__cause__ = error
|
ex.__cause__ = last_error
|
||||||
error = ex
|
last_error = ex
|
||||||
else:
|
else:
|
||||||
valid_urls.append(url)
|
valid_urls.append(url)
|
||||||
|
|
||||||
if not valid_urls:
|
if not valid_urls:
|
||||||
raise _exception.DockerUrlNotFoundError(
|
raise _exception.DockerUrlNotFoundError(
|
||||||
"Docker is not running") from error
|
"Docker is not running") from last_error
|
||||||
urls = valid_urls
|
return valid_urls
|
||||||
return urls
|
|
||||||
|
|
||||||
|
|
||||||
def urls_from_command_line(command_line: sh.ShellCommand,
|
def urls_from_command_line(command_line: sh.ShellCommand,
|
||||||
|
|
Loading…
Reference in New Issue