Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 18 additions & 21 deletions ankaios_sdk/_components/workload.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
.. code-block:: python

tags = workload.get_tags()
tags.pop("key1")
del tags["key1"]
workload.update_tags(tags)

- Print the updated workload:
Expand Down Expand Up @@ -246,34 +246,33 @@ def add_tag(self, key: str, value: str) -> None:
key (str): The key of the tag.
value (str): The value of the tag.
"""
tag = _ank_base.Tag(key=key, value=value)
self._workload.tags.tags.append(tag)
tag = {key: value}
self._workload.tags.tags.update(tag)
if f"{self._main_mask}.tags" not in self.masks:
self._add_mask(f"{self._main_mask}.tags.{key}")

def get_tags(self) -> list[tuple[str, str]]:
def get_tags(self) -> dict[str, str]:
"""
Return the tags of the workload.

Returns:
list: A list of tuples containing tag keys and values.
dict: A dict containing tag keys and values.
"""
tags = []
for tag in self._workload.tags.tags:
tags.append((tag.key, tag.value))
tags = {}
for key, value in self._workload.tags.tags.items():
tags.update({key: value})
return tags

def update_tags(self, tags: list) -> None:
def update_tags(self, tags: dict) -> None:
"""
Update the tags of the workload.

Args:
tags (list): A list of tuples containing tag keys and values.
tags (dict): A dict containing tag keys and values.
"""
del self._workload.tags.tags[:]
for key, value in tags:
tag = _ank_base.Tag(key=key, value=value)
self._workload.tags.tags.append(tag)
self._workload.tags.tags.clear()
for key, value in tags.items():
self._workload.tags.tags.update({key: value})
self.masks = [
mask
for mask in self.masks
Expand Down Expand Up @@ -436,12 +435,10 @@ def to_dict(self) -> dict:
workload_dict["dependencies"][dep_key] = (
_ank_base.AddCondition.Name(dep_value)
)
workload_dict["tags"] = []
workload_dict["tags"] = {}
if self._workload.tags:
for tag in self._workload.tags.tags:
workload_dict["tags"].append(
{"key": tag.key, "value": tag.value}
)
for key, value in self._workload.tags.tags.items():
workload_dict["tags"].update({key: value})
workload_dict["controlInterfaceAccess"] = {}
if self._workload.controlInterfaceAccess:
workload_dict["controlInterfaceAccess"]["allowRules"] = []
Expand Down Expand Up @@ -490,8 +487,8 @@ def _from_dict(workload_name: str, dict_workload: dict) -> "Workload":
for dep_key, dep_value in dict_workload["dependencies"].items():
workload = workload.add_dependency(dep_key, dep_value)
if "tags" in dict_workload:
for tag in dict_workload["tags"]:
workload = workload.add_tag(tag["key"], tag["value"])
for key, value in dict_workload["tags"].items():
workload = workload.add_tag(key, value)
if "controlInterfaceAccess" in dict_workload:
if "allowRules" in dict_workload["controlInterfaceAccess"]:
for rule in dict_workload["controlInterfaceAccess"][
Expand Down
6 changes: 3 additions & 3 deletions ankaios_sdk/_components/workload_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ class WorkloadBuilder:
wl_runtime_config (str): The runtime configuration.
wl_restart_policy (str): The restart policy.
dependencies (dict): The dependencies.
tags (list): The tags.
tags (dict): The tags.
"""

def __init__(self) -> None:
Expand All @@ -74,7 +74,7 @@ def __init__(self) -> None:
self.wl_runtime_config = None
self.wl_restart_policy = None
self.dependencies = {}
self.tags = []
self.tags = {}
self.allow_rules = []
self.deny_rules = []
self.configs = {}
Expand Down Expand Up @@ -188,7 +188,7 @@ def add_tag(self, key: str, value: str) -> "WorkloadBuilder":
Returns:
WorkloadBuilder: The builder object.
"""
self.tags.append((key, value))
self.tags.update({key: value})
return self

def add_allow_state_rule(
Expand Down
2 changes: 1 addition & 1 deletion tests/test_complete_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ def test_to_dict():
"runtimeConfig": "image: control_interface_prod:0.1\\n",
"dependencies": {"nginx": "ADD_COND_RUNNING"},
"restartPolicy": "ALWAYS",
"tags": [{"key": "owner", "value": "Ankaios team"}],
"tags": {"owner": "Ankaios team"},
"controlInterfaceAccess": {
"allowRules": [
{
Expand Down
12 changes: 5 additions & 7 deletions tests/test_workload_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,11 @@ def test_add_tag(
"""
assert len(builder.tags) == 0

assert builder.add_tag("key_test", "abc") == builder
assert builder.tags == [("key_test", "abc")]
assert builder.add_tag("key_test_1", "abc") == builder
assert builder.tags == {"key_test_1": "abc"}

assert builder.add_tag("key_test", "bcd") == builder
assert builder.tags == [("key_test", "abc"), ("key_test", "bcd")]
assert builder.add_tag("key_test_2", "bcd") == builder
assert builder.tags == {"key_test_1": "abc", "key_test_2": "bcd"}


def test_add_state_rule(
Expand Down Expand Up @@ -278,9 +278,7 @@ def test_build(
"workload_test_other": _ank_base.AddCondition.ADD_COND_RUNNING
}
)
assert workload._workload.tags == _ank_base.Tags(
tags=[_ank_base.Tag(key="key_test", value="abc")]
)
assert workload._workload.tags == _ank_base.Tags(tags={"key_test": "abc"})
assert workload._workload.controlInterfaceAccess.allowRules == [
_ank_base.AccessRightsRule(
stateRule=_ank_base.StateRule(
Expand Down
19 changes: 7 additions & 12 deletions tests/workload/test_workload.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,7 @@
runtime="podman",
runtimeConfig=r"image: control_interface_prod:0.1\n",
restartPolicy=_ank_base.ALWAYS,
tags=_ank_base.Tags(
tags=[_ank_base.Tag(key="owner", value="Ankaios team")]
),
tags=_ank_base.Tags(tags={"owner": "Ankaios team"}),
dependencies=_ank_base.Dependencies(
dependencies={"nginx": _ank_base.ADD_COND_RUNNING}
),
Expand Down Expand Up @@ -217,15 +215,15 @@ def test_tags(workload: Workload): # pylint: disable=redefined-outer-name
"""
assert len(workload.get_tags()) == 2

# Allow duplicate tags
# Disallow duplicate tags
workload.add_tag("key1", "new_value1")
assert len(workload.get_tags()) == 3
assert len(workload.get_tags()) == 2

tags = workload.get_tags()
tags = tags[1:]
_ = tags.pop(list(tags.keys())[0])
workload.update_tags(tags)

assert len(workload.get_tags()) == 2
assert len(workload.get_tags()) == 1


def test_rules(workload: Workload): # pylint: disable=redefined-outer-name
Expand Down Expand Up @@ -334,10 +332,7 @@ def test_to_proto(workload: Workload): # pylint: disable=redefined-outer-name
"workload_test_other": _ank_base.ADD_COND_RUNNING
}
assert proto.tags == _ank_base.Tags(
tags=[
_ank_base.Tag(key="key1", value="value1"),
_ank_base.Tag(key="key2", value="value2"),
]
tags={"key1": "value1", "key2": "value2"},
)


Expand Down Expand Up @@ -401,7 +396,7 @@ def test_from_to_dict():
),
(
"update_tags",
{"tags": [("key1", "value1"), ("key2", "value2")]},
{"tags": {"key1": "value1", "key2": "value2"}},
f"{WORKLOADS_PREFIX}.workload_test.tags",
),
(
Expand Down