provisioning-core/nulib/cli/handlers/utilities/sops.nu

43 lines
1.6 KiB
Text

# SOPS Command Handler
# Domain: SOPS encrypted file editing
# REMOVED: use ../../../lib_provisioning * - causes circular import
# SOPS edit command handler - Edit SOPS encrypted files (sed is alias)
export def handle_sops_edit [task: string, ops: string, flags: record] {
let pos = if $task == "sed" { 0 } else { 1 }
let ops_parts = ($ops | split row " ")
let target_file = if ($ops_parts | length) > $pos { $ops_parts | get $pos } else { "" }
if ($target_file | is-empty) {
throw-error $"🛑 No file found" $"for (_ansi yellow_bold)sops(_ansi reset) edit"
exit -1
}
let target_full_path = if not ($target_file | path exists) {
let infra_path = (get_infra $flags.infra)
let candidate = ($infra_path | path join $target_file)
if ($candidate | path exists) {
$candidate
} else {
throw-error $"🛑 No file (_ansi green_italic)($target_file)(_ansi reset) found" $"for (_ansi yellow_bold)sops(_ansi reset) edit"
exit -1
}
} else {
$target_file
}
# Setup SOPS environment if needed
if ($env.PROVISIONING_SOPS? | is-empty) {
let curr_settings = (find_get_settings --infra $flags.infra --settings $flags.settings $flags.include_notuse)
rm -rf $curr_settings.wk_path
$env.CURRENT_INFRA_PATH = ($curr_settings.infra_path | path join $curr_settings.infra)
use platform/sops/lib.nu [on_sops]
}
if $task == "sed" {
on_sops "sed" $target_full_path
} else {
on_sops $task $target_full_path ($ops_parts | skip 1)
}
}