You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/cmd/commands/database/flags.go

151 lines
6.5 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package database
import "fmt"
const (
flagConfigName = "config"
flagConfigKmsName = "config-kms"
flagLogLevelName = "log-level"
flagLogFormatName = "log-format"
flagSkipInitialLoginRoleName = "skip-initial-login-role-creation"
flagSkipInitialAuthenticatedUserRoleName = "skip-initial-authenticated-user-role-creation"
flagSkipAuthMethodName = "skip-auth-method-creation"
flagSkipScopesName = "skip-scopes-creation"
flagSkipHostResourcesName = "skip-host-resources-creation"
flagSkipTargetName = "skip-target-creation"
flagMigrationUrlName = "migration-url"
)
// initFlags contains the flags for the database init command, including optional
// flags to control which initialization steps are skipped and the reasons for skipping.
type initFlags struct {
flagConfig []string
flagConfigKms string
flagLogLevel string
flagLogFormat string
flagMigrationUrl string
flagSkipInitialLoginRoleCreation bool
flagSkipInitialAuthenticatedUserRoleCreation bool
flagSkipAuthMethodCreation bool
flagSkipScopesCreation bool
flagSkipHostResourcesCreation bool
flagSkipTargetCreation bool
}
// SkipInitialLoginRoleCreation checks if the creation of the initial anonymous login role should be skipped.
// It returns a boolean indicating whether to skip and a reason string if skipping is applicable.
//
// The creation of the initial login role is skipped if:
// - The flag for skipping the creation of the initial anonymous user role (`-skip-initial-login-role-creation`) is provided.
//
// Returns:
// - bool: True if the creation should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipInitialLoginRoleCreation() (bool, string) {
if f.flagSkipInitialLoginRoleCreation {
return true, reasonFlagWasSet(flagSkipInitialLoginRoleName)
}
return false, ""
}
// SkipInitialAuthenticatedUserRoleCreation checks if the creation of the initial authenticated user role should be skipped.
// It returns a boolean indicating whether to skip and a reason string explaining why the creation is skipped.
//
// The creation of the initial authenticated user role is skipped if:
// - The flag for skipping the creation of the initial authenticated user role (`-skip-initial-authenticated-user-role-creation`) is provided.
//
// Returns:
// - bool: True if the creation of the initial authenticated user role should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipInitialAuthenticatedUserRoleCreation() (bool, string) {
if f.flagSkipInitialAuthenticatedUserRoleCreation {
return true, reasonFlagWasSet(flagSkipInitialAuthenticatedUserRoleName)
}
return false, ""
}
// SkipAuthMethodCreation checks if the creation of authentication methods should be skipped.
// It returns a boolean indicating whether to skip and a reason string explaining why the creation is skipped.
//
// Authentication method creation is skipped if:
// - The flag for skipping authentication method creation (`-skip-auth-method-creation`) is provided.
//
// Returns:
// - bool: True if the creation of authentication methods should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipAuthMethodCreation() (bool, string) {
if f.flagSkipAuthMethodCreation {
return true, reasonFlagWasSet(flagSkipAuthMethodName)
}
return false, ""
}
// SkipScopesCreation checks if the creation of default scopes should be skipped.
// It returns a boolean indicating whether to skip and a reason string explaining why the creation is skipped.
//
// Scopes creation is skipped if:
// - The flag for skipping scopes creation (`-skip-scopes-creation`) is provided.
//
// Returns:
// - bool: True if the creation of scopes should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipScopesCreation() (bool, string) {
if f.flagSkipScopesCreation {
return true, reasonFlagWasSet(flagSkipScopesName)
}
return false, ""
}
// SkipHostResourcesCreation checks if the creation of default host resources should be skipped.
// It returns a boolean indicating whether to skip and a reason string explaining why the creation is skipped.
//
// Host resources creation is skipped if:
// - The flag for skipping host resources creation (`-skip-host-resources-creation`) is provided.
// - Any of the dependent resources were skipped.
//
// Dependent resources include:
// - Scopes creation
//
// Returns:
// - bool: True if the creation of host resources should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipHostResourcesCreation() (bool, string) {
if f.flagSkipHostResourcesCreation {
return true, reasonFlagWasSet(flagSkipHostResourcesName)
}
return f.SkipScopesCreation()
}
// SkipTargetCreation checks if the creation of default targets should be skipped.
// It returns a boolean indicating whether to skip and a reason string explaining why the creation is skipped.
//
// Target creation is skipped if:
// - The flag for skipping target creation (`-skip-target-creation`) is provided.
// - Any of the dependent resources were skipped.
//
// Dependent resources include:
// - Host resources creation
// - Scopes creation
//
// Returns:
// - bool: True if the creation of targets should be skipped, false otherwise.
// - string: A reason string explaining why the creation is skipped, or an empty string if not skipped.
func (f *initFlags) SkipTargetCreation() (bool, string) {
if f.flagSkipTargetCreation {
return true, reasonFlagWasSet(flagSkipTargetName)
}
if skip, reason := f.SkipHostResourcesCreation(); skip {
return true, reason
}
return f.SkipScopesCreation()
}
// reasonFlagWasSet is a helper function that generates a reason string dynamically
// based on the provided flag name.
func reasonFlagWasSet(fn string) string {
return fmt.Sprintf("flag `-%s` was set", fn)
}