From 6ee79fc5fc7d7c5d85fe2e77f06fc0e8e34edb22 Mon Sep 17 00:00:00 2001 From: l0r1s Date: Mon, 17 Apr 2023 18:52:34 +0300 Subject: [PATCH] chore: changed raw string zombie role to enum --- .../packages/orchestrator/src/cmdGenerator.ts | 6 ++--- .../orchestrator/src/configGenerator.ts | 7 +++--- javascript/packages/orchestrator/src/paras.ts | 6 ++--- .../providers/k8s/dynResourceDefinition.ts | 4 +-- .../k8s/resources/bootnodeResource.ts | 4 +-- .../providers/k8s/resources/nodeResource.ts | 10 +++++--- .../src/providers/k8s/resources/types.ts | 4 +-- .../providers/native/dynResourceDefinition.ts | 4 +-- .../src/providers/native/nativeClient.ts | 4 +-- .../native/resources/bootnodeResource.ts | 9 ++++--- .../native/resources/nodeResource.ts | 25 +++++++++---------- .../src/providers/native/resources/types.ts | 5 ++-- .../providers/podman/dynResourceDefinition.ts | 4 +-- .../podman/resources/bootnodeResource.ts | 4 +-- .../podman/resources/nodeResource.ts | 4 +-- .../packages/orchestrator/src/spawner.ts | 4 +-- javascript/packages/orchestrator/src/types.ts | 12 ++++++++- 17 files changed, 64 insertions(+), 52 deletions(-) diff --git a/javascript/packages/orchestrator/src/cmdGenerator.ts b/javascript/packages/orchestrator/src/cmdGenerator.ts index fff49710a..a9c6701b4 100644 --- a/javascript/packages/orchestrator/src/cmdGenerator.ts +++ b/javascript/packages/orchestrator/src/cmdGenerator.ts @@ -6,7 +6,7 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "./constants"; -import { Node } from "./types"; +import { Node, ZombieRole } from "./types"; const debug = require("debug")("zombie::cmdGenerator"); @@ -268,12 +268,12 @@ export async function genCmd( if (prometheus && !args.includes("--prometheus-external")) args.push("--prometheus-external"); - if (jaegerUrl && zombieRole === "node") + if (jaegerUrl && zombieRole === ZombieRole.Node) args.push(...["--jaeger-agent", jaegerUrl]); if (validator && !args.includes("--validator")) args.push("--validator"); - if (zombieRole === "collator" && parachainId) { + if (zombieRole === ZombieRole.Collator && parachainId) { const parachainIdArgIndex = args.findIndex((arg) => arg.includes("--parachain-id"), ); diff --git a/javascript/packages/orchestrator/src/configGenerator.ts b/javascript/packages/orchestrator/src/configGenerator.ts index 7fae4f5bf..9d497a37e 100644 --- a/javascript/packages/orchestrator/src/configGenerator.ts +++ b/javascript/packages/orchestrator/src/configGenerator.ts @@ -37,6 +37,7 @@ import { Override, Parachain, ParachainConfig, + ZombieRole, envVars, } from "./types"; @@ -439,7 +440,7 @@ export async function generateBootnodeSpec( telemetryUrl: "", prometheus: true, // --prometheus-external overrides: [], - zombieRole: "bootnode", + zombieRole: ZombieRole.BootNode, imagePullPolicy: config.settings.image_pull_policy || "Always", ...ports, externalPorts, @@ -531,7 +532,7 @@ async function getCollatorNodeFromConfig( telemetryUrl: "", prometheus: prometheusExternal(networkSpec), overrides: [], - zombieRole: cumulusBased ? "cumulus-collator" : "collator", + zombieRole: cumulusBased ? ZombieRole.CumulusCollator : ZombieRole.Collator, parachainId: para_id, dbSnapshot: collatorConfig.db_snapshot, imagePullPolicy: networkSpec.settings.image_pull_policy || "Always", @@ -610,7 +611,7 @@ async function getNodeFromConfig( overrides: [...globalOverrides, ...nodeOverrides], addToBootnodes: node.add_to_bootnodes ? true : false, resources: node.resources || networkSpec.relaychain.defaultResources, - zombieRole: "node", + zombieRole: ZombieRole.Node, imagePullPolicy: networkSpec.settings.image_pull_policy || "Always", ...ports, externalPorts, diff --git a/javascript/packages/orchestrator/src/paras.ts b/javascript/packages/orchestrator/src/paras.ts index d0b378f62..13c338d79 100644 --- a/javascript/packages/orchestrator/src/paras.ts +++ b/javascript/packages/orchestrator/src/paras.ts @@ -12,7 +12,7 @@ import { import { decorate } from "./paras-decorators"; import { Providers } from "./providers"; import { getClient } from "./providers/client"; -import { Node, Parachain, fileMap } from "./types"; +import { Node, Parachain, ZombieRole, fileMap } from "./types"; const debug = require("debug")("zombie::paras"); @@ -230,7 +230,7 @@ export async function generateParachainFiles( client.remoteDir as string, ); // cumulus - if (parachain.collators[0].zombieRole === "cumulus-collator") { + if (parachain.collators[0].zombieRole === ZombieRole.CumulusCollator) { const chainSpecPathInNode = client.providerName === "native" ? chainSpecFullPath @@ -262,7 +262,7 @@ export async function generateParachainFiles( env: [], telemetryUrl: "", overrides: [], - zombieRole: "temp", + zombieRole: ZombieRole.Temp, p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index e817d77ce..6a4f6af24 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -2,7 +2,7 @@ import { getRandomPort, getSha256 } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { TMP_DONE, WAIT_UNTIL_SCRIPT_SUFIX } from "../../constants"; import { Network } from "../../network"; -import { Node } from "../../types"; +import { Node, ZombieRole } from "../../types"; import { BootNodeResource, NodeResource } from "./resources"; export async function genBootnodeDef( @@ -56,7 +56,7 @@ export async function createTempNodeDef( env: [], telemetryUrl: "", overrides: [], - zombieRole: "temp", + zombieRole: ZombieRole.Temp, p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts index 5fad8c4ab..627ef8fd0 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/bootnodeResource.ts @@ -1,4 +1,4 @@ -import { Node } from "../../../types"; +import { Node, ZombieRole } from "../../../types"; import { NodeResource } from "./nodeResource"; import { Container, PodSpec, Volume } from "./types"; @@ -20,7 +20,7 @@ export class BootNodeResource extends NodeResource { labels: { "app.kubernetes.io/name": this.namespace, "app.kubernetes.io/instance": "bootnode", - "zombie-role": "bootnode", + "zombie-role": ZombieRole.BootNode, app: "zombienet", "zombie-ns": this.namespace, }, diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts index d6cf38642..0c5742178 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts @@ -8,7 +8,7 @@ import { TRANSFER_CONTAINER_NAME, TRANSFER_CONTAINER_WAIT_LOG, } from "../../../constants"; -import { Node } from "../../../types"; +import { Node, ZombieRole } from "../../../types"; import { Container, ContainerPort, @@ -62,7 +62,7 @@ export class NodeResource { } private generateContainerCommand(): Promise { - if (this.nodeSetupConfig.zombieRole === "cumulus-collator") { + if (this.nodeSetupConfig.zombieRole === ZombieRole.CumulusCollator) { return genCumulusCollatorCmd(this.nodeSetupConfig); } @@ -104,8 +104,10 @@ export class NodeResource { private shouldAddJaegerContainer() { const { zombieRole, jaegerUrl } = this.nodeSetupConfig; - const isNodeOrCumulusCollator = - zombieRole === "node" || zombieRole === "cumulus-collator"; + const isNodeOrCumulusCollator = [ + ZombieRole.Node, + ZombieRole.CumulusCollator, + ].includes(zombieRole); const isJaegerUrlDefined = jaegerUrl && jaegerUrl === "localhost:6831"; return isNodeOrCumulusCollator && isJaegerUrlDefined; diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts index fe5c59eae..c663ef15a 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts @@ -1,4 +1,4 @@ -import { envVars, Resources } from "../../../types"; +import { envVars, Resources, ZombieRoleLabel } from "../../../types"; type ContainerResource = Resources["resources"]; @@ -36,7 +36,7 @@ export interface PodSpec { metadata: { name: string; labels: { - "zombie-role": string; + "zombie-role": ZombieRoleLabel; app: string; "app.kubernetes.io/name": string; "app.kubernetes.io/instance": string; diff --git a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts index fce27b885..149218e94 100644 --- a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts @@ -1,7 +1,7 @@ import { getRandomPort } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { Network } from "../../network"; -import { Node } from "../../types"; +import { Node, ZombieRole } from "../../types"; import { getClient } from "../client"; import { BootNodeResource, NodeResource } from "./resources"; @@ -56,7 +56,7 @@ export async function createTempNodeDef( env: [], telemetryUrl: "", overrides: [], - zombieRole: "temp", + zombieRole: ZombieRole.Temp, p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), diff --git a/javascript/packages/orchestrator/src/providers/native/nativeClient.ts b/javascript/packages/orchestrator/src/providers/native/nativeClient.ts index d7cfb03ba..8f0b15318 100644 --- a/javascript/packages/orchestrator/src/providers/native/nativeClient.ts +++ b/javascript/packages/orchestrator/src/providers/native/nativeClient.ts @@ -17,7 +17,7 @@ import { LOCALHOST, P2P_PORT, } from "../../constants"; -import { fileMap } from "../../types"; +import { ZombieRole, fileMap } from "../../types"; import { Client, RunCommandOptions, @@ -350,7 +350,7 @@ export class NativeClient extends Client { const localFilePath = `${this.tmpDir}/${name}.yaml`; await fs.promises.writeFile(localFilePath, docInYaml); - if (resourseDef.metadata.labels["zombie-role"] === "temp") { + if (resourseDef.metadata.labels["zombie-role"] === ZombieRole.Temp) { await this.runCommand(resourseDef.spec.command); } else { if (resourseDef.spec.command[0] === "bash") diff --git a/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts index 4ebee2b8a..970fcc65c 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts @@ -1,7 +1,8 @@ import { makeDir } from "@zombienet/utils"; import { genCmd } from "../../../cmdGenerator"; +import { ZombieRole, ZombieRoleLabel } from "../../../types"; import { NodeResource } from "./nodeResource"; -import { NodeSpec, Port, ProcessEnvironment, ZombieRole } from "./types"; +import { NodeSpec, Port, ProcessEnvironment } from "./types"; export class BootNodeResource extends NodeResource { protected async createDirectories() { @@ -19,14 +20,14 @@ export class BootNodeResource extends NodeResource { return genCmd(this.nodeSetupConfig, this.configPath, this.dataPath, false); } - protected getZombieRole(): ZombieRole { - return "bootnode"; + protected getZombieRoleLabel(): ZombieRoleLabel { + return ZombieRole.BootNode; } protected generateNodeSpec( ports: Port[], command: string[], - zombieRole: ZombieRole, + zombieRole: ZombieRoleLabel, env: ProcessEnvironment, ): NodeSpec { return { diff --git a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts index 207e47103..446d6e809 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts @@ -6,15 +6,9 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "../../../constants"; -import { Node, envVars } from "../../../types"; +import { Node, ZombieRole, ZombieRoleLabel, envVars } from "../../../types"; import { Client } from "../../client"; -import { - NodeSpec, - Port, - PortProperty, - ProcessEnvironment, - ZombieRole, -} from "./types"; +import { NodeSpec, Port, PortProperty, ProcessEnvironment } from "./types"; export class NodeResource { protected readonly configPath: string; @@ -36,9 +30,14 @@ export class NodeResource { await this.createDirectories(); const ports = await this.generatePorts(); const command = await this.generateCommand(); - const zombieRole = this.getZombieRole(); + const zombieRoleLabel = this.getZombieRoleLabel(); const env = this.getEnv(); - const nodeManifest = this.generateNodeSpec(ports, command, zombieRole, env); + const nodeManifest = this.generateNodeSpec( + ports, + command, + zombieRoleLabel, + env, + ); return nodeManifest; } @@ -93,7 +92,7 @@ export class NodeResource { } protected generateCommand() { - if (this.nodeSetupConfig.zombieRole === "cumulus-collator") { + if (this.nodeSetupConfig.zombieRole === ZombieRole.CumulusCollator) { return genCumulusCollatorCmd( this.nodeSetupConfig, this.configPath, @@ -106,7 +105,7 @@ export class NodeResource { return genCmd(this.nodeSetupConfig, this.configPath, this.dataPath, false); } - protected getZombieRole(): ZombieRole { + protected getZombieRoleLabel(): ZombieRoleLabel { const { zombieRole, validator } = this.nodeSetupConfig; if (zombieRole) return zombieRole; @@ -126,7 +125,7 @@ export class NodeResource { protected generateNodeSpec( ports: Port[], command: string[], - zombieRole: ZombieRole, + zombieRole: ZombieRoleLabel, env: ProcessEnvironment, ): NodeSpec { return { diff --git a/javascript/packages/orchestrator/src/providers/native/resources/types.ts b/javascript/packages/orchestrator/src/providers/native/resources/types.ts index 04242b227..f00abf963 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/types.ts @@ -1,4 +1,4 @@ -import { Node } from "../../../types"; +import { Node, ZombieRoleLabel } from "../../../types"; export interface ProcessEnvironment { [key: string]: string; @@ -6,7 +6,6 @@ export interface ProcessEnvironment { export type PortProperty = keyof NonNullable; -export type ZombieRole = Node["zombieRole"] | "authority" | "full-node"; export interface Port { containerPort: number; @@ -20,7 +19,7 @@ export interface NodeSpec { name: string; namespace: string; labels: { - "zombie-role": ZombieRole; + "zombie-role": ZombieRoleLabel; app: "zombienet"; "zombie-ns": string; name: string; diff --git a/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts index a58f7a452..16520410f 100644 --- a/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts @@ -1,7 +1,7 @@ import { getRandomPort } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { Network } from "../../network"; -import { Node } from "../../types"; +import { Node, ZombieRole } from "../../types"; import { getClient } from "../client"; import { BootNodeResource, @@ -109,7 +109,7 @@ export async function createTempNodeDef( env: [], telemetryUrl: "", overrides: [], - zombieRole: "temp", + zombieRole: ZombieRole.Temp, p2pPort: await getRandomPort(), wsPort: await getRandomPort(), rpcPort: await getRandomPort(), diff --git a/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts index dd120a8a3..8630b69fd 100644 --- a/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts @@ -1,4 +1,4 @@ -import { Node } from "../../../types"; +import { Node, ZombieRole } from "../../../types"; import { Client } from "../../client"; import { NodeResource } from "./nodeResource"; import { Container, PodSpec, Volume } from "./types"; @@ -19,7 +19,7 @@ export class BootNodeResource extends NodeResource { name: "bootnode", namespace: this.namespace, labels: { - "zombie-role": "bootnode", + "zombie-role": ZombieRole.BootNode, app: "zombienet", "zombie-ns": this.namespace, }, diff --git a/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts index 903de5a4d..e79e9f6e3 100644 --- a/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts @@ -6,7 +6,7 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "../../../constants"; -import { Node } from "../../../types"; +import { Node, ZombieRole } from "../../../types"; import { Client } from "../../client"; import { Container, @@ -133,7 +133,7 @@ export class NodeResource { } private generateContainerCommand(): Promise { - if (this.nodeSetupConfig.zombieRole === "cumulus-collator") { + if (this.nodeSetupConfig.zombieRole === ZombieRole.CumulusCollator) { return genCumulusCollatorCmd(this.nodeSetupConfig); } diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index ca37196b7..7ac1a4194 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -19,7 +19,7 @@ import { Network, Scope } from "./network"; import { NetworkNode } from "./networkNode"; import { getProvider } from "./providers"; import { Client } from "./providers/client"; -import { Node, NodeMultiAddress, Parachain, fileMap } from "./types"; +import { Node, NodeMultiAddress, Parachain, ZombieRole, fileMap } from "./types"; const debug = require("debug")("zombie::spawner"); export const spawnNode = async ( @@ -45,7 +45,7 @@ export const spawnNode = async ( let parachainSpecId; // for relay chain we can have more than one bootnode. - if (node.zombieRole === "node" || node.zombieRole === "collator") + if ([ZombieRole.Node, ZombieRole.Collator].includes(node.zombieRole)) node.bootnodes = node.bootnodes.concat(bootnodes); if (opts.jaegerUrl) node.jaegerUrl = opts.jaegerUrl; diff --git a/javascript/packages/orchestrator/src/types.ts b/javascript/packages/orchestrator/src/types.ts index c511b7c92..5b64bbd81 100644 --- a/javascript/packages/orchestrator/src/types.ts +++ b/javascript/packages/orchestrator/src/types.ts @@ -160,7 +160,7 @@ export interface Node { args: string[]; env: envVars[]; bootnodes: string[]; - zombieRole: "temp" | "node" | "bootnode" | "collator" | "cumulus-collator"; + zombieRole: ZombieRole; group?: string; telemetry?: boolean; telemetryUrl: string; @@ -329,3 +329,13 @@ export interface RegisterParachainOptions { seed?: string; finalization?: boolean; } + +export enum ZombieRole { + Temp = "temp", + Node = "node", + BootNode = "bootnode", + Collator = "collator", + CumulusCollator = "cumulus-collator", +} + +export type ZombieRoleLabel = ZombieRole | "authority" | "full-node"; \ No newline at end of file