diff --git a/javascript/packages/orchestrator/src/cmdGenerator.ts b/javascript/packages/orchestrator/src/cmdGenerator.ts index 84581c7c1..9dd77c34d 100644 --- a/javascript/packages/orchestrator/src/cmdGenerator.ts +++ b/javascript/packages/orchestrator/src/cmdGenerator.ts @@ -49,6 +49,7 @@ export async function genCumulusCollatorCmd( dataPath = "/data", relayDataPath = "/relay-data", useWrapper = true, + local_ip = "0.0.0.0", ): Promise { const { name, chain, parachainId, key, validator, commandWithArgs } = nodeSetup; @@ -80,7 +81,7 @@ export async function genCumulusCollatorCmd( "--base-path", dataPath, "--listen-addr", - `/ip4/0.0.0.0/tcp/${nodeSetup.p2pPort ? nodeSetup.p2pPort : P2P_PORT}/ws`, + `/ip4/${local_ip}/tcp/${nodeSetup.p2pPort ? nodeSetup.p2pPort : P2P_PORT}/ws`, "--prometheus-external", "--rpc-cors all", "--unsafe-rpc-external", @@ -212,6 +213,18 @@ export async function genCumulusCollatorCmd( } } + if (local_ip != "0.0.0.0") { + // need to transform full_node --port flag to listen addr + const flagIndex = fullCmd.findIndex((arg) => arg === "--port"); + if (flagIndex >= 0) { + const port_to_use = fullCmd[flagIndex + 1]; + fullCmd.splice(flagIndex, 2); + fullCmd.push( + ...["--listen-addr", `/ip4/${local_ip}/tcp/${port_to_use}/ws`], + ); + } + } + const resolvedCmd = [fullCmd.join(" ")]; if (useWrapper) resolvedCmd.unshift("/cfg/zombie-wrapper.sh"); return resolvedCmd; @@ -222,6 +235,7 @@ export async function genCmd( cfgPath = "/cfg", dataPath = "/data", useWrapper = true, + local_ip = "0.0.0.0", ): Promise { const { name, @@ -301,7 +315,9 @@ export async function genCmd( args[listenIndex + 1] = listenAddr; } else { // no --listen-add args - args.push(...["--listen-addr", `/ip4/0.0.0.0/tcp/${nodeSetup.p2pPort}/ws`]); + args.push( + ...["--listen-addr", `/ip4/${local_ip}/tcp/${nodeSetup.p2pPort}/ws`], + ); } // set our base path diff --git a/javascript/packages/orchestrator/src/orchestrator.ts b/javascript/packages/orchestrator/src/orchestrator.ts index 96dbad0e4..a76d64170 100644 --- a/javascript/packages/orchestrator/src/orchestrator.ts +++ b/javascript/packages/orchestrator/src/orchestrator.ts @@ -380,6 +380,8 @@ export async function start( local_ip: networkSpec.settings.local_ip, }; + console.log("DEBUG: spawnOpts", spawnOpts); + // Calculate chaos before start spawning the nodes const chaosSpecs: any[] = []; // network chaos is ONLY available in k8s for now diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index 04f4ab19b..86025e412 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -22,8 +22,9 @@ export async function genBootnodeDef( export async function genNodeDef( namespace: string, nodeSetup: Node, - inCI: boolean = false, + opts: any = {}, ): Promise { + const inCI = opts.inCI || false; const nodeResource = new NodeResource(namespace, nodeSetup); return nodeResource.generateSpec(inCI); } diff --git a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts index f19596bc8..7bed76e87 100644 --- a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts @@ -18,9 +18,16 @@ export async function genBootnodeDef( export async function genNodeDef( namespace: string, nodeSetup: Node, + opts: any = {}, ): Promise { const client = getClient(); - const nodeResource = new NodeResource(client, namespace, nodeSetup); + console.log("DEBUG opts", opts); + const nodeResource = new NodeResource( + client, + namespace, + nodeSetup, + opts.local_ip, + ); return nodeResource.generateSpec(); } diff --git a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts index 935452dcf..f253834ee 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts @@ -24,6 +24,7 @@ export class NodeResource { client: Client, protected readonly namespace: string, protected readonly nodeSetupConfig: Node, + protected readonly local_ip: string | undefined = undefined, ) { const nodeRootPath = `${client.tmpDir}/${this.nodeSetupConfig.name}`; this.configPath = `${nodeRootPath}/cfg`; @@ -97,6 +98,7 @@ export class NodeResource { } protected generateCommand() { + console.log("DEBUG this", this); if (this.nodeSetupConfig.zombieRole === ZombieRole.CumulusCollator) { return genCumulusCollatorCmd( this.nodeSetupConfig, @@ -104,10 +106,17 @@ export class NodeResource { this.dataPath, this.relayDataPath, false, + this.local_ip, ); } - return genCmd(this.nodeSetupConfig, this.configPath, this.dataPath, false); + return genCmd( + this.nodeSetupConfig, + this.configPath, + this.dataPath, + false, + this.local_ip, + ); } protected getZombieRoleLabel(): ZombieRoleLabel { diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index 733910d2a..e4f594fda 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -54,9 +54,13 @@ export const spawnNode = async ( if (opts.jaegerUrl) node.jaegerUrl = opts.jaegerUrl; debug(`creating node: ${node.name}`); + console.log("DEBUG opts", opts); const podDef = await (node.name === "bootnode" ? genBootnodeDef(namespace, node) - : genNodeDef(namespace, node, opts.inCI)); + : genNodeDef(namespace, node, { + inCI: opts.inCI, + local_ip: opts.local_ip, + })); const finalFilesToCopyToNode = [...filesToCopy];