Skip to content

Commit 4e47156

Browse files
committed
Handle CAC s3 option keys consistently
1 parent f79ac04 commit 4e47156

2 files changed

Lines changed: 74 additions & 52 deletions

File tree

scripts/terrarium-install.ts

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,16 @@ function defaultOptions(): InstallOptions {
591591
};
592592
}
593593

594+
function readCliOption(rawOptions: Record<string, unknown>, key: string, aliases: string[] = []): string {
595+
for (const candidate of [key, ...aliases]) {
596+
const value = rawOptions[candidate];
597+
if (typeof value === "string") {
598+
return value;
599+
}
600+
}
601+
return "";
602+
}
603+
594604
async function installTerrarium(options: InstallOptions): Promise<void> {
595605
requireRoot();
596606
ensureOs();
@@ -657,35 +667,36 @@ export function registerInstallCommand(cli: CAC): void {
657667
.option("--syncoid-target-dataset <dataset>", "Remote syncoid dataset")
658668
.option("--syncoid-ssh-key <path>", "SSH key path for syncoid")
659669
.action(async (rawOptions) => {
670+
const cliOptions = rawOptions as Record<string, unknown>;
660671
const options = defaultOptions();
661-
options.ref = (rawOptions.ref as string | undefined) || options.ref;
662-
options.mode = rawOptions.nonInteractive ? "non-interactive" : "interactive";
663-
options.assumeYes = Boolean(rawOptions.yes);
664-
options.email = (rawOptions.email as string | undefined) ?? "";
665-
options.acmeEmail = (rawOptions.acmeEmail as string | undefined) ?? "";
666-
options.domain = (rawOptions.domain as string | undefined) ?? "";
667-
options.manageDomain = (rawOptions.manageDomain as string | undefined) ?? "";
668-
options.lxdDomain = (rawOptions.lxdDomain as string | undefined) ?? "";
669-
options.idpMode = ((rawOptions.idp as string | undefined) ?? "").trim().toLowerCase() as IdpMode | "";
670-
options.oidcIssuer = (rawOptions.oidc as string | undefined) ?? "";
671-
options.oidcClientId = (rawOptions.oidcClient as string | undefined) ?? "";
672-
options.oidcClientSecret = (rawOptions.oidcSecret as string | undefined) ?? "";
673-
options.authDomain = (rawOptions.authDomain as string | undefined) ?? "";
674-
options.zitadelAdminEmail = (rawOptions.zitadelAdminEmail as string | undefined) ?? "";
675-
options.storageMode = ((rawOptions.storageMode as string | undefined) ?? "").replace("loop", "file");
676-
options.storageSource = (rawOptions.storageSource as string | undefined) ?? "";
677-
options.storageSize = (rawOptions.storageSize as string | undefined) ?? "";
678-
options.enableS3 = Boolean(rawOptions.enableS3);
679-
options.s3Endpoint = (rawOptions.s3Endpoint as string | undefined) ?? "";
680-
options.s3Bucket = (rawOptions.s3Bucket as string | undefined) ?? "";
681-
options.s3Region = (rawOptions.s3Region as string | undefined) ?? "";
682-
options.s3Prefix = (rawOptions.s3Prefix as string | undefined) ?? options.s3Prefix;
683-
options.s3AccessKey = (rawOptions.s3AccessKey as string | undefined) ?? "";
684-
options.s3SecretKey = (rawOptions.s3SecretKey as string | undefined) ?? "";
685-
options.enableSyncoid = Boolean(rawOptions.enableSyncoid);
686-
options.syncoidTarget = (rawOptions.syncoidTarget as string | undefined) ?? "";
687-
options.syncoidTargetDataset = (rawOptions.syncoidTargetDataset as string | undefined) ?? "";
688-
options.syncoidSshKey = (rawOptions.syncoidSshKey as string | undefined) ?? "";
672+
options.ref = readCliOption(cliOptions, "ref") || options.ref;
673+
options.mode = Boolean(cliOptions.nonInteractive) ? "non-interactive" : "interactive";
674+
options.assumeYes = Boolean(cliOptions.yes);
675+
options.email = readCliOption(cliOptions, "email");
676+
options.acmeEmail = readCliOption(cliOptions, "acmeEmail");
677+
options.domain = readCliOption(cliOptions, "domain");
678+
options.manageDomain = readCliOption(cliOptions, "manageDomain");
679+
options.lxdDomain = readCliOption(cliOptions, "lxdDomain");
680+
options.idpMode = readCliOption(cliOptions, "idp").trim().toLowerCase() as IdpMode | "";
681+
options.oidcIssuer = readCliOption(cliOptions, "oidc");
682+
options.oidcClientId = readCliOption(cliOptions, "oidcClient");
683+
options.oidcClientSecret = readCliOption(cliOptions, "oidcSecret");
684+
options.authDomain = readCliOption(cliOptions, "authDomain");
685+
options.zitadelAdminEmail = readCliOption(cliOptions, "zitadelAdminEmail");
686+
options.storageMode = readCliOption(cliOptions, "storageMode").replace("loop", "file");
687+
options.storageSource = readCliOption(cliOptions, "storageSource");
688+
options.storageSize = readCliOption(cliOptions, "storageSize");
689+
options.enableS3 = Boolean(cliOptions.enableS3);
690+
options.s3Endpoint = readCliOption(cliOptions, "s3Endpoint", ["s3-endpoint"]);
691+
options.s3Bucket = readCliOption(cliOptions, "s3Bucket", ["s3-bucket"]);
692+
options.s3Region = readCliOption(cliOptions, "s3Region", ["s3-region"]);
693+
options.s3Prefix = readCliOption(cliOptions, "s3Prefix", ["s3-prefix"]) || options.s3Prefix;
694+
options.s3AccessKey = readCliOption(cliOptions, "s3AccessKey", ["s3-accessKey", "s3-access-key"]);
695+
options.s3SecretKey = readCliOption(cliOptions, "s3SecretKey", ["s3-secretKey", "s3-secret-key"]);
696+
options.enableSyncoid = Boolean(cliOptions.enableSyncoid);
697+
options.syncoidTarget = readCliOption(cliOptions, "syncoidTarget");
698+
options.syncoidTargetDataset = readCliOption(cliOptions, "syncoidTargetDataset");
699+
options.syncoidSshKey = readCliOption(cliOptions, "syncoidSshKey");
689700
await installTerrarium(options);
690701
});
691702
}

scripts/terrariumctl.ts

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ function setConfigValue(config: Record<string, unknown>, key: string, value: unk
7474
config[key] = value;
7575
}
7676

77+
function cliOption(options: Record<string, unknown>, key: string, aliases: string[] = []): string | undefined {
78+
for (const candidate of [key, ...aliases]) {
79+
const value = options[candidate];
80+
if (typeof value === "string") {
81+
return value;
82+
}
83+
}
84+
return undefined;
85+
}
86+
7787
async function persistAndReconcile(config: Record<string, unknown>, summary: string): Promise<void> {
7888
writeFileSync(CONFIG_PATH, stringify(config), "utf8");
7989
await reconfigureCmd();
@@ -531,53 +541,54 @@ cli
531541
.option("--disable", "Disable the selected integration")
532542
.usage("set domains [rootDomain] | set emails | set idp local|oidc | set s3 | set syncoid")
533543
.action(async (section, value, options) => {
544+
const cliOptions = options as Record<string, unknown>;
534545
if (section === "domains") {
535546
await setDomainsCmd((value as string | undefined) || "", {
536-
manageDomain: options.manageDomain as string | undefined,
537-
lxdDomain: options.lxdDomain as string | undefined,
538-
authDomain: options.authDomain as string | undefined
547+
manageDomain: cliOption(cliOptions, "manageDomain"),
548+
lxdDomain: cliOption(cliOptions, "lxdDomain"),
549+
authDomain: cliOption(cliOptions, "authDomain")
539550
});
540551
return;
541552
}
542553
if (section === "emails") {
543554
await setEmailsCmd({
544-
email: options.email as string | undefined,
545-
acmeEmail: options.acmeEmail as string | undefined,
546-
zitadelAdminEmail: options.zitadelAdminEmail as string | undefined
555+
email: cliOption(cliOptions, "email"),
556+
acmeEmail: cliOption(cliOptions, "acmeEmail"),
557+
zitadelAdminEmail: cliOption(cliOptions, "zitadelAdminEmail")
547558
});
548559
return;
549560
}
550561
if (section === "idp") {
551562
await setIdpCmd({
552563
mode: value as string,
553-
authDomain: options.authDomain as string | undefined,
554-
oidc: options.oidc as string | undefined,
555-
oidcClient: options.oidcClient as string | undefined,
556-
oidcSecret: options.oidcSecret as string | undefined,
557-
zitadelAdminEmail: options.zitadelAdminEmail as string | undefined
564+
authDomain: cliOption(cliOptions, "authDomain"),
565+
oidc: cliOption(cliOptions, "oidc"),
566+
oidcClient: cliOption(cliOptions, "oidcClient"),
567+
oidcSecret: cliOption(cliOptions, "oidcSecret"),
568+
zitadelAdminEmail: cliOption(cliOptions, "zitadelAdminEmail")
558569
});
559570
return;
560571
}
561572
if (section === "s3") {
562573
await setS3Cmd({
563-
enable: Boolean(options.enable),
564-
disable: Boolean(options.disable),
565-
s3Endpoint: options.s3Endpoint as string | undefined,
566-
s3Bucket: options.s3Bucket as string | undefined,
567-
s3Region: options.s3Region as string | undefined,
568-
s3Prefix: options.s3Prefix as string | undefined,
569-
s3AccessKey: options.s3AccessKey as string | undefined,
570-
s3SecretKey: options.s3SecretKey as string | undefined
574+
enable: Boolean(cliOptions.enable),
575+
disable: Boolean(cliOptions.disable),
576+
s3Endpoint: cliOption(cliOptions, "s3Endpoint", ["s3-endpoint"]),
577+
s3Bucket: cliOption(cliOptions, "s3Bucket", ["s3-bucket"]),
578+
s3Region: cliOption(cliOptions, "s3Region", ["s3-region"]),
579+
s3Prefix: cliOption(cliOptions, "s3Prefix", ["s3-prefix"]),
580+
s3AccessKey: cliOption(cliOptions, "s3AccessKey", ["s3-accessKey", "s3-access-key"]),
581+
s3SecretKey: cliOption(cliOptions, "s3SecretKey", ["s3-secretKey", "s3-secret-key"])
571582
});
572583
return;
573584
}
574585
if (section === "syncoid") {
575586
await setSyncoidCmd({
576-
enable: Boolean(options.enable),
577-
disable: Boolean(options.disable),
578-
syncoidTarget: options.syncoidTarget as string | undefined,
579-
syncoidTargetDataset: options.syncoidTargetDataset as string | undefined,
580-
syncoidSshKey: options.syncoidSshKey as string | undefined
587+
enable: Boolean(cliOptions.enable),
588+
disable: Boolean(cliOptions.disable),
589+
syncoidTarget: cliOption(cliOptions, "syncoidTarget"),
590+
syncoidTargetDataset: cliOption(cliOptions, "syncoidTargetDataset"),
591+
syncoidSshKey: cliOption(cliOptions, "syncoidSshKey")
581592
});
582593
return;
583594
}

0 commit comments

Comments
 (0)