mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-07-29 11:55:04 +00:00
Cleanup with ruff check (#1182)
* Implement improvements suggested by ruff check. * Add ruff check to CI.
This commit is contained in:
@@ -585,10 +585,10 @@ class ServicesManager(BaseComposeManager):
|
||||
return args
|
||||
|
||||
def _are_containers_stopped(self) -> bool:
|
||||
for container in self.list_containers_raw():
|
||||
if container["State"] not in ("created", "exited", "stopped", "killed"):
|
||||
return False
|
||||
return True
|
||||
return all(
|
||||
container["State"] in ("created", "exited", "stopped", "killed")
|
||||
for container in self.list_containers_raw()
|
||||
)
|
||||
|
||||
def cmd_stop(self) -> dict[str, t.Any]:
|
||||
# Since 'docker compose stop' **always** claims it is stopping containers, even if they are already
|
||||
|
||||
@@ -287,20 +287,20 @@ def are_fileobjs_equal_read_first(
|
||||
|
||||
|
||||
def is_container_file_not_regular_file(container_stat: dict[str, t.Any]) -> bool:
|
||||
for bit in (
|
||||
# https://pkg.go.dev/io/fs#FileMode
|
||||
32 - 1, # ModeDir
|
||||
32 - 4, # ModeTemporary
|
||||
32 - 5, # ModeSymlink
|
||||
32 - 6, # ModeDevice
|
||||
32 - 7, # ModeNamedPipe
|
||||
32 - 8, # ModeSocket
|
||||
32 - 11, # ModeCharDevice
|
||||
32 - 13, # ModeIrregular
|
||||
):
|
||||
if container_stat["mode"] & (1 << bit) != 0:
|
||||
return True
|
||||
return False
|
||||
return any(
|
||||
container_stat["mode"] & 1 << bit != 0
|
||||
for bit in (
|
||||
# https://pkg.go.dev/io/fs#FileMode
|
||||
32 - 1, # ModeDir
|
||||
32 - 4, # ModeTemporary
|
||||
32 - 5, # ModeSymlink
|
||||
32 - 6, # ModeDevice
|
||||
32 - 7, # ModeNamedPipe
|
||||
32 - 8, # ModeSocket
|
||||
32 - 11, # ModeCharDevice
|
||||
32 - 13, # ModeIrregular
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def get_container_file_mode(container_stat: dict[str, t.Any]) -> int:
|
||||
@@ -420,7 +420,7 @@ def retrieve_diff(
|
||||
|
||||
|
||||
def is_binary(content: bytes) -> bool:
|
||||
if b"\x00" in content:
|
||||
if b"\x00" in content: # noqa: SIM103
|
||||
return True
|
||||
# TODO: better detection
|
||||
# (ansible-core also just checks for 0x00, and even just sticks to the first 8k, so this is not too bad...)
|
||||
@@ -695,11 +695,10 @@ def is_file_idempotent(
|
||||
mf = tar.extractfile(member)
|
||||
if mf is None:
|
||||
raise AssertionError("Member should be present for regular file")
|
||||
with mf as tar_f:
|
||||
with open(managed_path, "rb") as local_f:
|
||||
is_equal = are_fileobjs_equal_with_diff_of_first(
|
||||
tar_f, local_f, member.size, diff, max_file_size_for_diff, in_path
|
||||
)
|
||||
with mf as tar_f, open(managed_path, "rb") as local_f:
|
||||
is_equal = are_fileobjs_equal_with_diff_of_first(
|
||||
tar_f, local_f, member.size, diff, max_file_size_for_diff, in_path
|
||||
)
|
||||
return container_path, mode, is_equal
|
||||
|
||||
def process_symlink(in_path: str, member: tarfile.TarInfo) -> tuple[str, int, bool]:
|
||||
|
||||
@@ -902,7 +902,7 @@ class ImageManager(DockerBaseClass):
|
||||
buildargs[key] = to_text(value)
|
||||
|
||||
container_limits = self.container_limits or {}
|
||||
for key in container_limits.keys():
|
||||
for key in container_limits:
|
||||
if key not in CONTAINER_LIMITS_KEYS:
|
||||
raise DockerException(f"Invalid container_limits key {key}")
|
||||
|
||||
@@ -1207,13 +1207,13 @@ def main() -> None:
|
||||
if not is_valid_tag(client.module.params["tag"], allow_empty=True):
|
||||
client.fail(f'"{client.module.params["tag"]}" is not a valid docker tag!')
|
||||
|
||||
if client.module.params["source"] == "build":
|
||||
if not client.module.params["build"] or not client.module.params["build"].get(
|
||||
"path"
|
||||
):
|
||||
client.fail(
|
||||
'If "source" is set to "build", the "build.path" option must be specified.'
|
||||
)
|
||||
if client.module.params["source"] == "build" and (
|
||||
not client.module.params["build"]
|
||||
or not client.module.params["build"].get("path")
|
||||
):
|
||||
client.fail(
|
||||
'If "source" is set to "build", the "build.path" option must be specified.'
|
||||
)
|
||||
|
||||
try:
|
||||
results = {"changed": False, "actions": [], "image": {}}
|
||||
|
||||
@@ -368,16 +368,20 @@ class ImageBuilder(DockerBaseClass):
|
||||
|
||||
if self.secrets:
|
||||
for secret in self.secrets:
|
||||
if secret["type"] in ("env", "value"):
|
||||
if LooseVersion(buildx_version) < LooseVersion("0.6.0"):
|
||||
self.fail(
|
||||
f"The Docker buildx plugin has version {buildx_version}, but 0.6.0 is needed for secrets of type=env and type=value"
|
||||
)
|
||||
if self.outputs and len(self.outputs) > 1:
|
||||
if LooseVersion(buildx_version) < LooseVersion("0.13.0"):
|
||||
self.fail(
|
||||
f"The Docker buildx plugin has version {buildx_version}, but 0.13.0 is needed to specify more than one output"
|
||||
)
|
||||
if secret["type"] in ("env", "value") and LooseVersion(
|
||||
buildx_version
|
||||
) < LooseVersion("0.6.0"):
|
||||
self.fail(
|
||||
f"The Docker buildx plugin has version {buildx_version}, but 0.6.0 is needed for secrets of type=env and type=value"
|
||||
)
|
||||
if (
|
||||
self.outputs
|
||||
and len(self.outputs) > 1
|
||||
and LooseVersion(buildx_version) < LooseVersion("0.13.0")
|
||||
):
|
||||
self.fail(
|
||||
f"The Docker buildx plugin has version {buildx_version}, but 0.13.0 is needed to specify more than one output"
|
||||
)
|
||||
|
||||
self.path = parameters["path"]
|
||||
if not os.path.isdir(self.path):
|
||||
@@ -530,9 +534,8 @@ class ImageBuilder(DockerBaseClass):
|
||||
"image": image or {},
|
||||
}
|
||||
|
||||
if image:
|
||||
if self.rebuild == "never":
|
||||
return results
|
||||
if image and self.rebuild == "never":
|
||||
return results
|
||||
|
||||
results["changed"] = True
|
||||
if not self.check_mode:
|
||||
|
||||
@@ -478,23 +478,21 @@ class DockerNetworkManager:
|
||||
)
|
||||
else:
|
||||
for key, value in self.parameters.driver_options.items():
|
||||
if not (key in net["Options"]) or value != net["Options"][key]:
|
||||
if key not in net["Options"] or value != net["Options"][key]:
|
||||
differences.add(
|
||||
f"driver_options.{key}",
|
||||
parameter=value,
|
||||
active=net["Options"].get(key),
|
||||
)
|
||||
|
||||
if self.parameters.ipam_driver:
|
||||
if (
|
||||
not net.get("IPAM")
|
||||
or net["IPAM"]["Driver"] != self.parameters.ipam_driver
|
||||
):
|
||||
differences.add(
|
||||
"ipam_driver",
|
||||
parameter=self.parameters.ipam_driver,
|
||||
active=net.get("IPAM"),
|
||||
)
|
||||
if self.parameters.ipam_driver and (
|
||||
not net.get("IPAM") or net["IPAM"]["Driver"] != self.parameters.ipam_driver
|
||||
):
|
||||
differences.add(
|
||||
"ipam_driver",
|
||||
parameter=self.parameters.ipam_driver,
|
||||
active=net.get("IPAM"),
|
||||
)
|
||||
|
||||
if self.parameters.ipam_driver_options is not None:
|
||||
ipam_driver_options = net["IPAM"].get("Options") or {}
|
||||
@@ -597,7 +595,7 @@ class DockerNetworkManager:
|
||||
)
|
||||
else:
|
||||
for key, value in self.parameters.labels.items():
|
||||
if not (key in net["Labels"]) or value != net["Labels"][key]:
|
||||
if key not in net["Labels"] or value != net["Labels"][key]:
|
||||
differences.add(
|
||||
f"labels.{key}",
|
||||
parameter=value,
|
||||
|
||||
@@ -216,14 +216,14 @@ class SwarmNodeManager(DockerBaseClass):
|
||||
if self.parameters.role is None:
|
||||
node_spec["Role"] = node_info["Spec"]["Role"]
|
||||
else:
|
||||
if not node_info["Spec"]["Role"] == self.parameters.role:
|
||||
if node_info["Spec"]["Role"] != self.parameters.role:
|
||||
node_spec["Role"] = self.parameters.role
|
||||
changed = True
|
||||
|
||||
if self.parameters.availability is None:
|
||||
node_spec["Availability"] = node_info["Spec"]["Availability"]
|
||||
else:
|
||||
if not node_info["Spec"]["Availability"] == self.parameters.availability:
|
||||
if node_info["Spec"]["Availability"] != self.parameters.availability:
|
||||
node_info["Spec"]["Availability"] = self.parameters.availability
|
||||
changed = True
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
#
|
||||
# Copyright (c) 2021 Red Hat | Ansible Sakar Mehra<@sakarmehra100@gmail.com | @sakar97>
|
||||
# Copyright (c) 2019, Vladimir Porshkevich (@porshkevich) <neosonic@mail.ru>
|
||||
@@ -281,7 +280,7 @@ class DockerPluginManager:
|
||||
stream=True,
|
||||
)
|
||||
self.client._raise_for_status(response)
|
||||
for data in self.client._stream_helper(response, decode=True):
|
||||
for dummy in self.client._stream_helper(response, decode=True):
|
||||
pass
|
||||
# Inspect and configure plugin
|
||||
self.existing_plugin = self.client.get_json(
|
||||
|
||||
@@ -322,7 +322,7 @@ def main() -> None:
|
||||
before_after_differences = json_diff(
|
||||
before_stack_services, after_stack_services
|
||||
)
|
||||
for k in before_after_differences.keys():
|
||||
for k in before_after_differences:
|
||||
if isinstance(before_after_differences[k], dict):
|
||||
before_after_differences[k].pop("UpdatedAt", None)
|
||||
before_after_differences[k].pop("Version", None)
|
||||
|
||||
@@ -554,9 +554,8 @@ class SwarmManager(DockerBaseClass):
|
||||
except APIError as exc:
|
||||
self.client.fail(f"Can not create a new Swarm Cluster: {exc}")
|
||||
|
||||
if not self.client.check_if_swarm_manager():
|
||||
if not self.check_mode:
|
||||
self.client.fail("Swarm not created or other error!")
|
||||
if not self.client.check_if_swarm_manager() and not self.check_mode:
|
||||
self.client.fail("Swarm not created or other error!")
|
||||
|
||||
self.created = True
|
||||
self.inspect_swarm()
|
||||
|
||||
@@ -2380,12 +2380,12 @@ class DockerServiceManager:
|
||||
ds.container_labels = task_template_data["ContainerSpec"].get("Labels")
|
||||
|
||||
mode = raw_data["Spec"]["Mode"]
|
||||
if "Replicated" in mode.keys():
|
||||
if "Replicated" in mode:
|
||||
ds.mode = to_text("replicated", encoding="utf-8")
|
||||
ds.replicas = mode["Replicated"]["Replicas"]
|
||||
elif "Global" in mode.keys():
|
||||
elif "Global" in mode:
|
||||
ds.mode = "global"
|
||||
elif "ReplicatedJob" in mode.keys():
|
||||
elif "ReplicatedJob" in mode:
|
||||
ds.mode = to_text("replicated-job", encoding="utf-8")
|
||||
ds.replicas = mode["ReplicatedJob"]["TotalCompletions"]
|
||||
else:
|
||||
@@ -2649,10 +2649,9 @@ class DockerServiceManager:
|
||||
|
||||
|
||||
def _detect_publish_mode_usage(client: AnsibleDockerClient) -> bool:
|
||||
for publish_def in client.module.params["publish"] or []:
|
||||
if publish_def.get("mode"):
|
||||
return True
|
||||
return False
|
||||
return any(
|
||||
publish_def.get("mode") for publish_def in client.module.params["publish"] or []
|
||||
)
|
||||
|
||||
|
||||
def _detect_healthcheck_start_period(client: AnsibleDockerClient) -> bool:
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
#
|
||||
# Copyright 2017 Red Hat | Ansible, Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf-8
|
||||
#
|
||||
# Copyright 2017 Red Hat | Ansible, Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
Reference in New Issue
Block a user