Skip to content

Commit

Permalink
refactor(cloud): unify input key/value resource reading and mapping (#…
Browse files Browse the repository at this point in the history
…6109)

* refactor: unified and type-safe key/value reading and re-mapping

* refactor: explicit type for the accumulator of the reducer-function
  • Loading branch information
vvagaytsev committed May 30, 2024
1 parent daec250 commit db0418c
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 34 deletions.
25 changes: 14 additions & 11 deletions core/src/commands/cloud/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -166,17 +166,20 @@ export async function readInputKeyValueResources({

// Get input resources from positional arguments in no input file defined.
if (resourcesFromArgs) {
const resourceDictionary = resourcesFromArgs.reduce((acc, keyValPair) => {
try {
const resourceEntry = dotenv.parse(keyValPair)
Object.assign(acc, resourceEntry)
return acc
} catch (err) {
throw new CommandError({
message: `Unable to read ${resourceName} from argument ${keyValPair}: ${err}`,
})
}
}, {})
const resourceDictionary = resourcesFromArgs.reduce(
(acc, keyValPair) => {
try {
const resourceEntry = dotenv.parse(keyValPair)
Object.assign(acc, resourceEntry)
return acc
} catch (err) {
throw new CommandError({
message: `Unable to read ${resourceName} from argument ${keyValPair}: ${err}`,
})
}
},
{} as Record<string, string>
)
return Object.entries(resourceDictionary)
}

Expand Down
19 changes: 10 additions & 9 deletions core/src/commands/cloud/secrets/secrets-create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { PathParameter, StringParameter, StringsParameter } from "../../../cli/p
import type { SecretResult } from "./secret-helpers.js"
import { makeSecretFromResponse } from "./secret-helpers.js"
import { getEnvironmentByNameOrThrow } from "./secret-helpers.js"
import type { Secret } from "../../../cloud/api.js"

export const secretsCreateArgs = {
secrets: new StringsParameter({
Expand Down Expand Up @@ -86,20 +87,20 @@ export class SecretsCreateCommand extends Command<Args, Opts> {

const cmdLog = log.createLog({ name: "secrets-command" })

const secrets = (
await readInputKeyValueResources({
resourceFilePath: secretsFilePath,
resourcesFromArgs: args.secrets,
resourceName: "secret",
log: cmdLog,
})
).map(([key, value]) => ({ name: key, value }))
const inputSecrets = await readInputKeyValueResources({
resourceFilePath: secretsFilePath,
resourcesFromArgs: args.secrets,
resourceName: "secret",
log: cmdLog,
})

const api = garden.cloudApi
if (!api) {
throw new ConfigurationError({ message: noApiMsg("create", "secrets") })
}

const secretsToCreate: Secret[] = inputSecrets.map(([key, value]): Secret => ({ name: key, value }))

const project = await api.getProjectByIdOrThrow({
projectId: garden.projectId,
projectName: garden.projectName,
Expand All @@ -118,7 +119,7 @@ export class SecretsCreateCommand extends Command<Args, Opts> {
}

const { errors, results } = await api.createSecrets({
request: { secrets, environmentId, userId, projectId: project.id },
request: { secrets: secretsToCreate, environmentId, userId, projectId: project.id },
log,
})

Expand Down
18 changes: 9 additions & 9 deletions core/src/commands/cloud/secrets/secrets-update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,20 +120,20 @@ export class SecretsUpdateCommand extends Command<Args, Opts> {

const cmdLog = log.createLog({ name: "secrets-command" })

const inputSecrets: Secret[] = (
await readInputKeyValueResources({
resourceFilePath: secretsFilePath,
resourcesFromArgs: args.secretNamesOrIds,
resourceName: "secret",
log: cmdLog,
})
).map(([key, value]) => ({ name: key, value }))
const inputSecrets = await readInputKeyValueResources({
resourceFilePath: secretsFilePath,
resourcesFromArgs: args.secretNamesOrIds,
resourceName: "secret",
log: cmdLog,
})

const api = garden.cloudApi
if (!api) {
throw new ConfigurationError({ message: noApiMsg("update", "secrets") })
}

const typedInputSecrets: Secret[] = inputSecrets.map(([key, value]): Secret => ({ name: key, value }))

const project = await api.getProjectByIdOrThrow({
projectId: garden.projectId,
projectName: garden.projectName,
Expand All @@ -145,7 +145,7 @@ export class SecretsUpdateCommand extends Command<Args, Opts> {
api,
environmentId,
environmentName,
inputSecrets,
inputSecrets: typedInputSecrets,
log,
projectId: project.id,
updateById,
Expand Down
13 changes: 8 additions & 5 deletions core/src/commands/cloud/users/users-create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { ConfigurationError, GardenError } from "../../../exceptions.js"
import type {
CreateUserBulkRequest,
CreateUserBulkResponse,
UserRequestBulk,
UserResult as UserResultApi,
} from "@garden-io/platform-api-types"
import { printHeader } from "../../../logger/util.js"
Expand Down Expand Up @@ -97,11 +98,13 @@ export class UsersCreateCommand extends Command<Args, Opts> {
throw new ConfigurationError({ message: noApiMsg("create", "users") })
}

const usersToCreate = users.map(([vcsUsername, name]) => ({
name,
vcsUsername,
serviceAccount: false,
}))
const usersToCreate: UserRequestBulk[] = users.map(
([vcsUsername, name]): UserRequestBulk => ({
name,
vcsUsername,
serviceAccount: false,
})
)
cmdLog.info("Creating users...")

const batches = chunk(usersToCreate, MAX_USERS_PER_REQUEST)
Expand Down

0 comments on commit db0418c

Please sign in to comment.