feat: Integrates vault-client into hpa-executable.
This commit is contained in:
@@ -31,6 +31,7 @@ let package = Package(
|
||||
"ConfigurationClient",
|
||||
"FileClient",
|
||||
"PlaybookClient",
|
||||
"VaultClient",
|
||||
.product(name: "ArgumentParser", package: "swift-argument-parser"),
|
||||
.product(name: "CliDoc", package: "swift-cli-doc"),
|
||||
.product(name: "Dependencies", package: "swift-dependencies"),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import ArgumentParser
|
||||
import CliClient
|
||||
import Dependencies
|
||||
import VaultClient
|
||||
|
||||
struct DecryptCommand: AsyncParsableCommand {
|
||||
|
||||
@@ -11,25 +12,21 @@ struct DecryptCommand: AsyncParsableCommand {
|
||||
abstract: createAbstract("Decrypt a vault file.")
|
||||
)
|
||||
|
||||
@OptionGroup var options: VaultOptions
|
||||
|
||||
@Option(
|
||||
name: .shortAndLong,
|
||||
help: "Output file."
|
||||
)
|
||||
var output: String?
|
||||
|
||||
@OptionGroup var options: VaultOptions
|
||||
|
||||
mutating func run() async throws {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
@Dependency(\.vaultClient) var vaultClient
|
||||
|
||||
var args = ["decrypt"]
|
||||
if let output {
|
||||
args.append(contentsOf: ["--output", output])
|
||||
}
|
||||
|
||||
try await cliClient.runVaultCommand(
|
||||
options.vaultOptions(arguments: args, configuration: nil),
|
||||
logging: options.loggingOptions(commandName: Self.commandName)
|
||||
)
|
||||
try await vaultClient.run(options.runOptions(
|
||||
commandName: Self.commandName,
|
||||
route: .decrypt,
|
||||
outputFilePath: output
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import ArgumentParser
|
||||
import CliClient
|
||||
import Dependencies
|
||||
import VaultClient
|
||||
|
||||
struct EncryptCommand: AsyncParsableCommand {
|
||||
|
||||
@@ -11,24 +12,21 @@ struct EncryptCommand: AsyncParsableCommand {
|
||||
abstract: createAbstract("Encrypt a vault file.")
|
||||
)
|
||||
|
||||
@OptionGroup var options: VaultOptions
|
||||
|
||||
@Option(
|
||||
name: .shortAndLong,
|
||||
help: "Output file."
|
||||
)
|
||||
var output: String?
|
||||
|
||||
mutating func run() async throws {
|
||||
@Dependency(\.cliClient) var cliClient
|
||||
@OptionGroup var options: VaultOptions
|
||||
|
||||
var args = ["encrypt"]
|
||||
if let output {
|
||||
args.append(contentsOf: ["--output", output])
|
||||
}
|
||||
try await cliClient.runVaultCommand(
|
||||
options.vaultOptions(arguments: args, configuration: nil),
|
||||
logging: options.loggingOptions(commandName: Self.commandName)
|
||||
)
|
||||
mutating func run() async throws {
|
||||
@Dependency(\.vaultClient) var vaultClient
|
||||
|
||||
try await vaultClient.run(options.runOptions(
|
||||
commandName: Self.commandName,
|
||||
route: .encrypt,
|
||||
outputFilePath: output
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import ArgumentParser
|
||||
import CliClient
|
||||
import VaultClient
|
||||
|
||||
// Holds the common options for vault commands, as they all share the
|
||||
// same structure.
|
||||
@@ -18,7 +19,7 @@ struct VaultOptions: ParsableArguments {
|
||||
@Argument(
|
||||
help: "Extra arguments to pass to the vault command."
|
||||
)
|
||||
var extraArgs: [String] = []
|
||||
var extraOptions: [String] = []
|
||||
|
||||
subscript<T>(dynamicMember keyPath: WritableKeyPath<BasicGlobalOptions, T>) -> T {
|
||||
get { globals[keyPath: keyPath] }
|
||||
@@ -36,3 +37,25 @@ extension VaultOptions {
|
||||
globals.loggingOptions(commandName: commandName)
|
||||
}
|
||||
}
|
||||
|
||||
extension VaultOptions {
|
||||
|
||||
func runOptions(
|
||||
commandName: String,
|
||||
route: VaultClient.RunOptions.Route,
|
||||
outputFilePath: String? = nil
|
||||
) -> VaultClient.RunOptions {
|
||||
.init(
|
||||
route,
|
||||
extraOptions: extraOptions,
|
||||
loggingOptions: .init(
|
||||
commandName: commandName,
|
||||
logLevel: .init(globals: globals, quietOnlyPlaybook: false)
|
||||
),
|
||||
outputFilePath: outputFilePath,
|
||||
quiet: globals.quiet,
|
||||
shell: globals.shell,
|
||||
vaultFilePath: file
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user