|
15 | 15 | from kubernetes.dynamic import DynamicClient
|
16 | 16 | from kubernetes.dynamic.exceptions import ResourceNotFoundError
|
17 | 17 | from kubernetes.stream import stream
|
| 18 | +from warnet.services import services |
18 | 19 | from warnet.status import RunningStatus
|
19 | 20 | from warnet.tank import Tank
|
20 | 21 | from warnet.utils import parse_raw_messages
|
@@ -73,6 +74,10 @@ def down(self, warnet) -> bool:
|
73 | 74 |
|
74 | 75 | self.remove_prometheus_service_monitors(warnet.tanks)
|
75 | 76 |
|
| 77 | + for service_name in warnet.services: |
| 78 | + if "k8s" in services[service_name]["backends"]: |
| 79 | + self.client.delete_namespaced_pod(services[service_name]["container_name_suffix"], self.namespace) |
| 80 | + |
76 | 81 | return True
|
77 | 82 |
|
78 | 83 | def get_file(self, tank_index: int, service: ServiceType, file_path: str):
|
@@ -668,6 +673,10 @@ def deploy_pods(self, warnet):
|
668 | 673 | if self.check_logging_crds_installed():
|
669 | 674 | self.apply_prometheus_service_monitors(warnet.tanks)
|
670 | 675 |
|
| 676 | + for service_name in warnet.services: |
| 677 | + if "k8s" in services[service_name]["backends"]: |
| 678 | + self.service_from_json(services[service_name]) |
| 679 | + |
671 | 680 | self.log.debug("Containers and services created. Configuring IP addresses")
|
672 | 681 | # now that the pods have had a second to create,
|
673 | 682 | # get the ips and set them on the tanks
|
@@ -701,4 +710,34 @@ def wait_for_healthy_tanks(self, warnet, timeout=30):
|
701 | 710 | pass
|
702 | 711 |
|
703 | 712 | def service_from_json(self, obj):
|
704 |
| - pass |
| 713 | + env = [] |
| 714 | + for pair in obj.get("environment", []): |
| 715 | + name, value = pair.split("=") |
| 716 | + env.append(client.V1EnvVar(name=name, value=value)) |
| 717 | + service_container = client.V1Container( |
| 718 | + name=obj["container_name_suffix"], |
| 719 | + image=obj["image"], |
| 720 | + env=env, |
| 721 | + security_context=client.V1SecurityContext( |
| 722 | + privileged=True, |
| 723 | + capabilities=client.V1Capabilities(add=["NET_ADMIN", "NET_RAW"]), |
| 724 | + ), |
| 725 | + ) |
| 726 | + service_pod = client.V1Pod( |
| 727 | + api_version="v1", |
| 728 | + kind="Pod", |
| 729 | + metadata=client.V1ObjectMeta( |
| 730 | + name=obj["container_name_suffix"], |
| 731 | + namespace=self.namespace, |
| 732 | + labels={ |
| 733 | + "app": obj["container_name_suffix"], |
| 734 | + "network": self.network_name, |
| 735 | + }, |
| 736 | + ), |
| 737 | + spec=client.V1PodSpec( |
| 738 | + restart_policy="OnFailure", |
| 739 | + containers=[service_container], |
| 740 | + volumes=[], |
| 741 | + ), |
| 742 | + ) |
| 743 | + self.client.create_namespaced_pod(namespace=self.namespace, body=service_pod) |
0 commit comments