grafana-backuper/cfg/cfg.go
Tom Neuber 0ca7c11a23
All checks were successful
continuous-integration/drone/push Build is passing
Add force flag to ignore commit check
2024-02-16 22:41:36 +01:00

92 lines
2.7 KiB
Go

package cfg
import (
"fmt"
"os"
"github.com/alecthomas/kong"
)
type AppSettings struct {
Force bool
GrafanaURL string
GrafanaToken string
GitBranch string
GitRepoURL string
GitUser string
GitEmail string
GitPass string
GPGKey string
}
var cliStruct struct {
Force bool `name:"force" short:"f" help:"Force git commits / ignore existence check."`
GrafanaURL string `name:"grafana-url" env:"GRAFANA_URL" help:"Grafana URL to access the API"`
GrafanaToken string `name:"grafana-auth-token" env:"GRAFANA_AUTH_TOKEN" help:"Grafana auth token to access the API"`
GitBranch string `name:"git-branch" env:"GIT_BRANCH" help:"Git branch name" default:"${default_git_branch}"`
GitRepoURL string `name:"git-repo-url" env:"GIT_REPO_URL" help:"Complete Git repository URL"`
GitUser string `name:"git-user" env:"GIT_USER" help:"Git username"`
GitEmail string `name:"git-email" env:"GIT_EMAIL" help:"Git email address"`
GitPass string `name:"git-pass" env:"GIT_PASS" help:"Git user password"`
GPGKey string `name:"signing-key" env:"GIT_SIGNING_KEY" help:"GPG signing key"`
}
func Parse() *AppSettings {
ctx := kong.Parse(
&cliStruct,
kong.Vars{
"default_git_branch": "main",
},
kong.Name("grafana-backuper"),
kong.Description("🚀 CLI tool to convert grafana dashboards to git"),
kong.UsageOnError(),
)
validateFlags(ctx)
settings := &AppSettings{
Force: cliStruct.Force,
GrafanaURL: cliStruct.GrafanaURL,
GrafanaToken: cliStruct.GrafanaToken,
GitBranch: cliStruct.GitBranch,
GitRepoURL: cliStruct.GitRepoURL,
GitUser: cliStruct.GitUser,
GitEmail: cliStruct.GitEmail,
GitPass: cliStruct.GitPass,
GPGKey: cliStruct.GPGKey,
}
return settings
}
func validateFlags(cliCtx *kong.Context) {
var flagsValid = true
var messages = []string{}
if cliStruct.GrafanaURL == "" {
messages = append(messages, "error: invalid grafana URL, must not be blank")
flagsValid = false
}
if cliStruct.GrafanaToken == "" {
messages = append(messages, "error: invalid auth token for grafana, must not be blank")
flagsValid = false
}
if cliStruct.GitRepoURL == "" {
messages = append(messages, "error: invalid repo url for git, must not be blank")
flagsValid = false
}
if cliStruct.GitUser == "" {
messages = append(messages, "error: invalid username for git, must not be blank")
flagsValid = false
}
if cliStruct.GitPass == "" {
messages = append(messages, "error: invalid password for git, must not be blank")
flagsValid = false
}
if !flagsValid {
cliCtx.PrintUsage(false)
fmt.Println()
for i := 0; i < len(messages); i++ {
fmt.Println(messages[i])
}
os.Exit(1)
}
}