Add support for pre-configured runners from environment variables
- Added RUNNERS env var to .env.example (comma-separated runner names) - Updated supervisor binary to accept --runners flag - Runners are automatically registered on startup using first admin secret - Updated run.sh to pass RUNNERS from env to supervisor binary
This commit is contained in:
@@ -15,5 +15,9 @@ ADMIN_SECRETS=your_admin_secret_here
|
|||||||
# USER_SECRETS=user_secret_1,user_secret_2
|
# USER_SECRETS=user_secret_1,user_secret_2
|
||||||
# REGISTER_SECRETS=register_secret_1
|
# REGISTER_SECRETS=register_secret_1
|
||||||
|
|
||||||
|
# Optional: Pre-configured runners (comma-separated names)
|
||||||
|
# These runners will be automatically registered on startup
|
||||||
|
# RUNNERS=runner1,runner2,runner3
|
||||||
|
|
||||||
# Optional: Mycelium network URL (requires mycelium feature)
|
# Optional: Mycelium network URL (requires mycelium feature)
|
||||||
# MYCELIUM_URL=http://127.0.0.1:8989
|
# MYCELIUM_URL=http://127.0.0.1:8989
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ struct Args {
|
|||||||
/// Mycelium topic for supervisor RPC messages
|
/// Mycelium topic for supervisor RPC messages
|
||||||
#[arg(long, default_value = "supervisor.rpc")]
|
#[arg(long, default_value = "supervisor.rpc")]
|
||||||
topic: String,
|
topic: String,
|
||||||
|
|
||||||
|
/// Pre-configured runner names (comma-separated)
|
||||||
|
#[arg(long, value_name = "NAMES", value_delimiter = ',')]
|
||||||
|
runners: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@@ -51,6 +55,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
env_logger::init();
|
env_logger::init();
|
||||||
let args = Args::parse();
|
let args = Args::parse();
|
||||||
|
|
||||||
|
// Store first admin secret for runner registration
|
||||||
|
let admin_secret = args.admin_secrets[0].clone();
|
||||||
|
|
||||||
// Build supervisor
|
// Build supervisor
|
||||||
let mut builder = SupervisorBuilder::new()
|
let mut builder = SupervisorBuilder::new()
|
||||||
.redis_url(&args.redis_url)
|
.redis_url(&args.redis_url)
|
||||||
@@ -65,7 +72,17 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
builder = builder.register_secrets(args.register_secrets);
|
builder = builder.register_secrets(args.register_secrets);
|
||||||
}
|
}
|
||||||
|
|
||||||
let supervisor = builder.build().await?;
|
let mut supervisor = builder.build().await?;
|
||||||
|
|
||||||
|
// Register pre-configured runners using first admin secret
|
||||||
|
if !args.runners.is_empty() {
|
||||||
|
for runner_name in &args.runners {
|
||||||
|
match supervisor.register_runner(&admin_secret, runner_name, &format!("queue:{}", runner_name)).await {
|
||||||
|
Ok(_) => {},
|
||||||
|
Err(e) => error!("Failed to register runner '{}': {}", runner_name, e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Start OpenRPC server
|
// Start OpenRPC server
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|||||||
@@ -93,6 +93,11 @@ if [ ! -z "$MYCELIUM_URL" ]; then
|
|||||||
SUPERVISOR_CMD="$SUPERVISOR_CMD --mycelium-url $MYCELIUM_URL"
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --mycelium-url $MYCELIUM_URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add runners if provided
|
||||||
|
if [ ! -z "$RUNNERS" ]; then
|
||||||
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --runners $RUNNERS"
|
||||||
|
fi
|
||||||
|
|
||||||
RUST_LOG="$LOG_LEVEL" RUST_LOG_STYLE=never $SUPERVISOR_CMD > /tmp/supervisor-run.log 2>&1 &
|
RUST_LOG="$LOG_LEVEL" RUST_LOG_STYLE=never $SUPERVISOR_CMD > /tmp/supervisor-run.log 2>&1 &
|
||||||
SUPERVISOR_PID=$!
|
SUPERVISOR_PID=$!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user