From 3a949588f52af85a0fc56827937a74cb7a58f7db Mon Sep 17 00:00:00 2001 From: l0r1s Date: Fri, 7 Apr 2023 16:20:08 +0300 Subject: [PATCH] feat: refactored into a BootNodeResource with NodeResource base class for kubernetes provider --- .../providers/k8s/dynResourceDefinition.ts | 125 +----------------- .../k8s/resources/bootnodeResource.ts | 42 ++++++ .../src/providers/k8s/resources/index.ts | 2 + 3 files changed, 48 insertions(+), 121 deletions(-) create mode 100644 javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts create mode 100644 javascript/packages/orchestrator/src/providers/k8s/resources/index.ts diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index 1e542a9888..52dec430cb 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -1,53 +1,16 @@ import { getRandomPort, getSha256 } from "@zombienet/utils"; -import { genCmd, genCumulusCollatorCmd } from "../../cmdGenerator"; import { getUniqueName } from "../../configGenerator"; -import { - FINISH_MAGIC_FILE, - P2P_PORT, - PROMETHEUS_PORT, - RPC_HTTP_PORT, - RPC_WS_PORT, - TMP_DONE, - TRANSFER_CONTAINER_NAME, - TRANSFER_CONTAINER_WAIT_LOG, - WAIT_UNTIL_SCRIPT_SUFIX, -} from "../../constants"; +import { TMP_DONE, WAIT_UNTIL_SCRIPT_SUFIX } from "../../constants"; import { Network } from "../../network"; import { Node } from "../../types"; -import { NodeResource } from "./resources/nodeResource"; +import { BootNodeResource, NodeResource } from "./resources"; export async function genBootnodeDef( namespace: string, nodeSetup: Node, ): Promise { - const [volume_mounts, devices] = make_volume_mounts(); - const container = await make_main_container(nodeSetup, volume_mounts); - const transferContainter = make_transfer_containter(); - return { - apiVersion: "v1", - kind: "Pod", - metadata: { - name: "bootnode", - labels: { - "app.kubernetes.io/name": namespace, - "app.kubernetes.io/instance": "bootnode", - "zombie-role": "bootnode", - app: "zombienet", - }, - }, - spec: { - hostname: "bootnode", - containers: [container], - initContainers: [transferContainter], - restartPolicy: "Never", - volumes: devices, - securityContext: { - fsGroup: 1000, - runAsUser: 1000, - runAsGroup: 1000, - }, - }, - }; + const bootNodeResource = new BootNodeResource(namespace, nodeSetup); + return bootNodeResource.generateSpec(); } export async function genNodeDef( @@ -58,86 +21,6 @@ export async function genNodeDef( return nodeResource.generateSpec(); } -function make_transfer_containter(): any { - return { - name: TRANSFER_CONTAINER_NAME, - image: "docker.io/alpine", - imagePullPolicy: "Always", - volumeMounts: [ - { name: "tmp-cfg", mountPath: "/cfg", readOnly: false }, - { name: "tmp-data", mountPath: "/data", readOnly: false }, - { name: "tmp-relay-data", mountPath: "/relay-data", readOnly: false }, - ], - command: [ - "ash", - "-c", - [ - "wget github.com/moparisthebest/static-curl/releases/download/v7.83.1/curl-amd64 -O /cfg/curl", - "echo downloaded", - "chmod +x /cfg/curl", - "echo chmoded", - "wget github.com/uutils/coreutils/releases/download/0.0.17/coreutils-0.0.17-x86_64-unknown-linux-musl.tar.gz -O /cfg/coreutils-0.0.17-x86_64-unknown-linux-musl.tar.gz", - "cd /cfg", - "tar -xvzf ./coreutils-0.0.17-x86_64-unknown-linux-musl.tar.gz", - "cp ./coreutils-0.0.17-x86_64-unknown-linux-musl/coreutils /cfg/coreutils", - "chmod +x /cfg/coreutils", - "rm -rf ./coreutils-0.0.17-x86_64-unknown-linux-musl", - "echo coreutils downloaded", - `until [ -f ${FINISH_MAGIC_FILE} ]; do echo ${TRANSFER_CONTAINER_WAIT_LOG}; sleep 1; done; echo copy files has finished`, - ].join(" && "), - ], - }; -} - -function make_volume_mounts(): [any, any] { - const volume_mounts = [ - { name: "tmp-cfg", mountPath: "/cfg", readOnly: false }, - { name: "tmp-data", mountPath: "/data", readOnly: false }, - { name: "tmp-relay-data", mountPath: "/relay-data", readOnly: false }, - ]; - - const devices = [ - { name: "tmp-cfg" }, - { name: "tmp-data" }, - { name: "tmp-relay-data" }, - ]; - - return [volume_mounts, devices]; -} - -async function make_main_container( - nodeSetup: Node, - volume_mounts: any[], -): Promise { - const ports = [ - { containerPort: PROMETHEUS_PORT, name: "prometheus" }, - { containerPort: RPC_HTTP_PORT, name: "rpc-http" }, - { containerPort: RPC_WS_PORT, name: "rpc-ws" }, - { containerPort: P2P_PORT, name: "p2p" }, - ]; - - let computedCommand; - if (nodeSetup.zombieRole === "cumulus-collator") { - computedCommand = await genCumulusCollatorCmd(nodeSetup); - } else { - computedCommand = await genCmd(nodeSetup); - } - - const containerDef: any = { - image: nodeSetup.image, - name: nodeSetup.name, - imagePullPolicy: "Always", - ports, - env: nodeSetup.env, - volumeMounts: volume_mounts, - command: computedCommand, - }; - - if (nodeSetup.resources) containerDef.resources = nodeSetup.resources; - - return containerDef; -} - export function replaceNetworkRef(podDef: any, network: Network) { // replace command if needed in containers for (const container of podDef.spec.containers) { diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts new file mode 100644 index 0000000000..bee43c67cf --- /dev/null +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts @@ -0,0 +1,42 @@ +import { Node } from "../../../types"; +import { NodeResource } from "./nodeResource"; +import { Container, PodSpec, Volume } from "./types"; + +export class BootNodeResource extends NodeResource { + constructor(namespace: string, nodeSetupConfig: Node) { + super(namespace, nodeSetupConfig); + } + + protected generatePodSpec( + initContainers: Container[], + containers: Container[], + volumes: Volume[], + ): PodSpec { + return { + apiVersion: "v1", + kind: "Pod", + metadata: { + name: "bootnode", + labels: { + "app.kubernetes.io/name": this.namespace, + "app.kubernetes.io/instance": "bootnode", + "zombie-role": "bootnode", + app: "zombienet", + "zombie-ns": this.namespace, + }, + }, + spec: { + hostname: "bootnode", + containers: containers, + initContainers, + restartPolicy: "Never", + volumes, + securityContext: { + fsGroup: 1000, + runAsUser: 1000, + runAsGroup: 1000, + }, + }, + }; + } +} diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts new file mode 100644 index 0000000000..d65914a30f --- /dev/null +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/index.ts @@ -0,0 +1,2 @@ +export { BootNodeResource } from "./bootnodeResource"; +export { NodeResource } from "./nodeResource";