68 lines
3.5 KiB
Text
68 lines
3.5 KiB
Text
|
|
#!/usr/bin/env nu
|
||
|
|
# Thin entry for `server ssh` and the `ssh` shortcut.
|
||
|
|
# Loads only servers/ssh.nu (~190ms vs ~1s for the full server handler).
|
||
|
|
|
||
|
|
export-env {
|
||
|
|
let lib_dirs_raw = ($env.NU_LIB_DIRS? | default "")
|
||
|
|
let current_lib_dirs = if ($lib_dirs_raw | type) == "string" {
|
||
|
|
if ($lib_dirs_raw | is-empty) { [] } else { ($lib_dirs_raw | split row ":") }
|
||
|
|
} else { $lib_dirs_raw }
|
||
|
|
let dynamic = ($env.PROVISIONING? | default "" | path join "core" "nulib")
|
||
|
|
$env.NU_LIB_DIRS = ([
|
||
|
|
"/opt/provisioning/core/nulib"
|
||
|
|
"/usr/local/provisioning/core/nulib"
|
||
|
|
] | append $current_lib_dirs | append (if ($dynamic | is-not-empty) { [$dynamic] } else { [] }))
|
||
|
|
let args_raw = ($env.PROVISIONING_ARGS? | default "")
|
||
|
|
$env.PROVISIONING_ARGS = ($args_raw | str replace --regex '^(server|s)\s+' '')
|
||
|
|
let _coerce = {|raw| $raw == "true" or $raw == "1" }
|
||
|
|
let raw_debug = ($env.PROVISIONING_DEBUG? | default "")
|
||
|
|
if ($raw_debug | describe) == "string" and ($raw_debug | is-not-empty) {
|
||
|
|
$env.PROVISIONING_DEBUG = (do $_coerce $raw_debug)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
use servers/ssh.nu *
|
||
|
|
|
||
|
|
def main [
|
||
|
|
...args: string
|
||
|
|
--infra (-i): string = ""
|
||
|
|
--settings (-s): string = ""
|
||
|
|
--run (-r)
|
||
|
|
--debug (-x)
|
||
|
|
]: nothing -> nothing {
|
||
|
|
if $debug { $env.PROVISIONING_DEBUG = true }
|
||
|
|
# Strip leading "server"/"s" token if present
|
||
|
|
let first = ($args | get 0? | default "")
|
||
|
|
let rest = if $first in ["server" "s"] { $args | skip 1 } else { $args }
|
||
|
|
let subcmd = ($rest | get 0? | default "ssh")
|
||
|
|
let name = ($rest | get 1? | default ($rest | get 0? | default ""))
|
||
|
|
|
||
|
|
# Both `prvng ssh <host>` and `prvng server ssh <host>` land here
|
||
|
|
let host = if $subcmd == "ssh" { $name } else { $subcmd }
|
||
|
|
let has_infra = ($infra | is-not-empty)
|
||
|
|
let has_settings = ($settings | is-not-empty)
|
||
|
|
let has_host = ($host | is-not-empty)
|
||
|
|
|
||
|
|
match [$has_host, $has_infra, $has_settings, $run, $debug] {
|
||
|
|
[true, true, true, true, true ] => { main ssh $host --infra $infra --settings $settings --debug --run }
|
||
|
|
[true, true, true, true, false] => { main ssh $host --infra $infra --settings $settings --run }
|
||
|
|
[true, true, true, false, true ] => { main ssh $host --infra $infra --settings $settings --debug }
|
||
|
|
[true, true, true, false, false] => { main ssh $host --infra $infra --settings $settings }
|
||
|
|
[true, true, false, true, true ] => { main ssh $host --infra $infra --debug --run }
|
||
|
|
[true, true, false, true, false] => { main ssh $host --infra $infra --run }
|
||
|
|
[true, true, false, false, true ] => { main ssh $host --infra $infra --debug }
|
||
|
|
[true, true, false, false, false] => { main ssh $host --infra $infra }
|
||
|
|
[true, false, true, true, true ] => { main ssh $host --settings $settings --debug --run }
|
||
|
|
[true, false, true, true, false] => { main ssh $host --settings $settings --run }
|
||
|
|
[true, false, true, false, true ] => { main ssh $host --settings $settings --debug }
|
||
|
|
[true, false, true, false, false] => { main ssh $host --settings $settings }
|
||
|
|
[true, false, false, true, true ] => { main ssh $host --debug --run }
|
||
|
|
[true, false, false, true, false] => { main ssh $host --run }
|
||
|
|
[true, false, false, false, true ] => { main ssh $host --debug }
|
||
|
|
[true, false, false, false, false] => { main ssh $host }
|
||
|
|
[false, true, false, true, false] => { main ssh --infra $infra --run }
|
||
|
|
[false, true, false, false, false] => { main ssh --infra $infra }
|
||
|
|
_ => { main ssh }
|
||
|
|
}
|
||
|
|
}
|