Skip to content

Conversation

@fschade
Copy link
Contributor

@fschade fschade commented Dec 16, 2025

Description

fix cli env && flag handling

Related Issue

@butonic
Copy link
Contributor

butonic commented Dec 16, 2025

can we unify this and use viper everywhere:

❯ grep -r -i 'cmd.Flags(' *
opencloud/pkg/command/shares.go:        cleanCmd.Flags().String("service-account-id", "", "Name of the service account to use for the cleanup")
opencloud/pkg/command/shares.go:        _ = viper.BindPFlag("service-account-id", cleanCmd.Flags().Lookup("service-account-id"))
opencloud/pkg/command/shares.go:        cleanCmd.Flags().String("service-account-secret", "", "Secret for the service account")
opencloud/pkg/command/shares.go:        _ = viper.BindPFlag("service-account-secret", cleanCmd.Flags().Lookup("service-account-secret"))
opencloud/pkg/command/backup.go:                        basePath, _ := cmd.Flags().GetString("basepath")
opencloud/pkg/command/backup.go:                        blobstoreFlag, _ := cmd.Flags().GetString("blobstore")
opencloud/pkg/command/backup.go:                        fail, _ := cmd.Flags().GetBool("fail")
opencloud/pkg/command/backup.go:        consCmd.Flags().StringP("basepath", "p", "", "the basepath of the decomposedfs (e.g. /var/tmp/opencloud/storage/users)")
opencloud/pkg/command/backup.go:        consCmd.Flags().StringP("blobstore", "b", "decomposed", "the blobstore type. Can be (none, decomposed, decomposeds3). Default decomposed")
opencloud/pkg/command/backup.go:        consCmd.Flags().Bool("fail", false, "exit with non-zero status if consistency check fails")
opencloud/pkg/command/revisions.go:                     basePath, _ := cmd.Flags().GetString("basepath")
opencloud/pkg/command/revisions.go:                     blobstoreFlag, _ := cmd.Flags().GetString("blobstore")
opencloud/pkg/command/revisions.go:                     resourceIDFlag, _ := cmd.Flags().GetString("resource-id")
opencloud/pkg/command/revisions.go:                     mechanism, _ := cmd.Flags().GetString("glob-mechanism")
opencloud/pkg/command/revisions.go:                     flagDryRun, err := cmd.Flags().GetBool("dry-run")
opencloud/pkg/command/revisions.go:                     flagVerbose, err := cmd.Flags().GetBool("verbose")
opencloud/pkg/command/revisions.go:     revCmd.Flags().StringP("basepath", "p", "", "the basepath of the decomposedfs (e.g. /var/tmp/opencloud/storage/metadata)")
opencloud/pkg/command/revisions.go:     revCmd.Flags().StringP("blobstore", "b", "decomposed", "the blobstore type. Can be (none, decomposed, decomposeds3). Default decomposed")
opencloud/pkg/command/revisions.go:     revCmd.Flags().Bool("dry-run", true, "do not delete anything, just print what would be deleted")
opencloud/pkg/command/revisions.go:     revCmd.Flags().BoolP("verbose", "v", false, "print verbose output")
opencloud/pkg/command/revisions.go:     revCmd.Flags().StringP("resource-id", "r", "", "purge all revisions of this file/space. If not set, all revisions will be purged")
opencloud/pkg/command/revisions.go:     revCmd.Flags().String("glob-mechanism", "glob", "the glob mechanism to find all nodes. Can be 'glob', 'list' or 'workers'. 'glob' uses globbing with a single worker. 'workers' spawns multiple go routines, accelatering the command drastically but causing high cpu and ram usage. 'list' looks for references by listing directories with multiple workers. Default is 'glob'")
opencloud/pkg/command/posixfs.go:       consCmd.Flags().StringP("root", "r", "", "Path to the root directory of the posixfs storage")
opencloud/pkg/command/posixfs.go:       rootPath, _ := cmd.Flags().GetString("root")
opencloud/pkg/command/decomposedfs.go:  cCmd.Flags().StringP("root", "r", "", "Path to the root directory of the decomposedfs")
opencloud/pkg/command/decomposedfs.go:  cCmd.Flags().StringP("node", "n", "", "Space ID of the Space to inspect")
opencloud/pkg/command/decomposedfs.go:  cCmd.Flags().Bool("repair", false, "Try to repair nodes with incorrect treesize metadata. IMPORTANT: Only use this while OpenCloud is not running.")
opencloud/pkg/command/decomposedfs.go:  cCmd.Flags().Bool("force", false, "Do not prompt for confirmation when running in repair mode.")
opencloud/pkg/command/decomposedfs.go:  rootFlag, _ := cmd.Flags().GetString("root")
opencloud/pkg/command/decomposedfs.go:  repairFlag, _ := cmd.Flags().GetBool("repair")
opencloud/pkg/command/decomposedfs.go:  forceFlag, _ := cmd.Flags().GetBool("force")
opencloud/pkg/command/decomposedfs.go:  nId, _ := cmd.Flags().GetString("node")
opencloud/pkg/command/decomposedfs.go:  metaCmd.Flags().StringP("root", "r", "", "Path to the root directory of the decomposedfs")
opencloud/pkg/command/decomposedfs.go:  metaCmd.Flags().StringP("node", "n", "", "Path to or ID of the node to inspect")
opencloud/pkg/command/decomposedfs.go:                  attributeFlag, _ := cmd.Flags().GetString("attribute")
opencloud/pkg/command/decomposedfs.go:                  attributeFlag, _ := cmd.Flags().GetString("attribute")
opencloud/pkg/command/decomposedfs.go:  gCmd.Flags().StringP("attribute", "a", "", "attribute to inspect, can be a glob pattern (e.g. 'user.*' will match all attributes starting with 'user.').")
opencloud/pkg/command/decomposedfs.go:                  v, _ := cmd.Flags().GetString("value")
opencloud/pkg/command/decomposedfs.go:                  attributeFlag, _ := cmd.Flags().GetString("attribute")
opencloud/pkg/command/decomposedfs.go:  sCmd.Flags().StringP("attribute", "a", "", "attribute to inspect, can be a glob pattern (e.g. 'user.*' will match all attributes starting with 'user.').")
opencloud/pkg/command/decomposedfs.go:  sCmd.Flags().StringP("value", "v", "", "value to set")
opencloud/pkg/command/decomposedfs.go:  rootFlag, _ := cmd.Flags().GetString("root")
opencloud/pkg/command/decomposedfs.go:  nodeFlag, _ := cmd.Flags().GetString("node")
opencloud/pkg/command/trash.go:                 basePath, _ := cmd.Flags().GetString("basepath")
opencloud/pkg/command/trash.go:                 dryRun, _ := cmd.Flags().GetBool("dry-run")
opencloud/pkg/command/trash.go: trashPurgeCmd.Flags().StringP("basepath", "p", "", "the basepath of the decomposedfs (e.g. /var/tmp/opencloud/storage/users)")
opencloud/pkg/command/trash.go: trashPurgeCmd.Flags().Bool("dry-run", true, "do not delete anything, just print what would be deleted")
opencloud/pkg/command/version.go:                       skipServiceListing, _ := cmd.Flags().GetBool(_skipServiceListingFlagName)
opencloud/pkg/command/version.go:       versionCmd.Flags().Bool(_skipServiceListingFlagName, false, "skip service listing")
opencloud/pkg/command/benchmark.go:                     jobs, err := cmd.Flags().GetInt("jobs")
opencloud/pkg/command/benchmark.go:                     insecure, _ := cmd.Flags().GetBool("insecure")
opencloud/pkg/command/benchmark.go:                     headersSlice, err := cmd.Flags().GetStringSlice("headers")
opencloud/pkg/command/benchmark.go:                     rate, _ := cmd.Flags().GetString("rate")
opencloud/pkg/command/benchmark.go:                     user, _ := cmd.Flags().GetString("user")
opencloud/pkg/command/benchmark.go:                     btc, _ := cmd.Flags().GetString("bearer-token-command")
opencloud/pkg/command/benchmark.go:                     every, err := cmd.Flags().GetInt("every")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().StringP("request", "X", "PROPFIND", "Specifies a custom request method to use when communicating with the HTTP server.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().StringP("user", "u", "admin:admin", "Specify the user name and password to use for server authentication.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().BoolP("insecure", "k", false, "Skip the TLS verification step and proceed without checking.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().StringP("data", "d", "", "Sends the specified data in a request to the HTTP server.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().StringSliceP("headers", "H", []string{}, "Extra header to include in information sent.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().String("rate", "", "Specify the maximum transfer frequency you allow a client to use - in number of transfer starts per time unit (sometimes called request rate). The request rate is provided as \"N/U\" where N is an integer number and U is a time unit. Supported units are 's' (second), 'm' (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The default time unit, if no \"/U\" is provided, is number of transfers per hour.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().IntP("jobs", "j", 1, "Number of parallel clients to start. Defaults to 1.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().Int("every", 0, "Aggregate stats every time this amount of seconds has passed.")
opencloud/pkg/command/benchmark.go:     benchClientCmd.Flags().String("bearer-token-command", "", "Command to execute for a bearer token, e.g. 'oidc-token opencloud'. When set, disables basic auth.")
opencloud/pkg/command/benchmark.go:                     path, _ := cmd.Flags().GetString("path")
opencloud/pkg/command/benchmark.go:                     iterations, err := cmd.Flags().GetInt("iterations")
opencloud/pkg/command/benchmark.go:     benchSysCallCmd.Flags().String("path", "", "Path to test")
opencloud/pkg/command/benchmark.go:     benchSysCallCmd.Flags().Int("iterations", 100, "Number of iterations to execute")
opencloud/pkg/command/init.go:                  diffFlag, _ := cmd.Flags().GetBool("diff")
opencloud/pkg/command/init.go:  initCmd.Flags().String("insecure", "ask", "Allow insecure OpenCloud config")
opencloud/pkg/command/init.go:  _ = viper.BindPFlag("insecure", initCmd.Flags().Lookup("insecure"))
opencloud/pkg/command/init.go:  initCmd.Flags().BoolP("diff", "d", false, "Show the difference between the current config and the new one")
opencloud/pkg/command/init.go:  initCmd.Flags().BoolP("force-overwrite", "f", false, "Force overwrite existing config file")
opencloud/pkg/command/init.go:  _ = viper.BindPFlag("force-overwrite", initCmd.Flags().Lookup("force-overwrite"))
opencloud/pkg/command/init.go:  initCmd.Flags().String("config-path", defaults.BaseConfigPath(), "Config path for the OpenCloud runtime")
opencloud/pkg/command/init.go:  _ = viper.BindPFlag("config-path", initCmd.Flags().Lookup("config-path"))
opencloud/pkg/command/init.go:  initCmd.Flags().String("admin-password", "", "Set admin password instead of using a random generated one")
opencloud/pkg/command/init.go:  _ = viper.BindPFlag("admin-password", initCmd.Flags().Lookup("admin-password"))
opencloud/pkg/command/list.go:  listCmd.Flags().String("hostname", "localhost", "hostname of the runtime")
opencloud/pkg/command/list.go:  _ = viper.BindPFlag("hostname", listCmd.Flags().Lookup("hostname"))
opencloud/pkg/command/list.go:  listCmd.Flags().String("port", "9250", "port of the runtime")
opencloud/pkg/command/list.go:  _ = viper.BindPFlag("port", listCmd.Flags().Lookup("port"))
services/idm/pkg/command/resetpw.go:                    userNameFlag, _ := cmd.Flags().GetString("user-name")
services/idm/pkg/command/resetpw.go:    resetPasswordCmd.Flags().StringP(
services/storage-users/pkg/command/trash_bin.go:                        verbose, _ := cmd.Flags().GetBool("verbose")
services/storage-users/pkg/command/trash_bin.go:        listTrashBinItemsCmd.Flags().BoolP(
services/storage-users/pkg/command/trash_bin.go:                        verbose, _ := cmd.Flags().GetBool("verbose")
services/storage-users/pkg/command/trash_bin.go:                        option, _ := cmd.Flags().GetString("option")
services/storage-users/pkg/command/trash_bin.go:                        applyYesFlag, _ := cmd.Flags().GetBool("yes")
services/storage-users/pkg/command/trash_bin.go:        restoreAllTrashBinItemsCmd.Flags().BoolP(
services/storage-users/pkg/command/trash_bin.go:        restoreAllTrashBinItemsCmd.Flags().StringP(
services/storage-users/pkg/command/trash_bin.go:        restoreAllTrashBinItemsCmd.Flags().BoolP(
services/storage-users/pkg/command/trash_bin.go:                        verbose, _ := cmd.Flags().GetBool("verbose")
services/storage-users/pkg/command/trash_bin.go:                        option, _ := cmd.Flags().GetString("option")
services/storage-users/pkg/command/trash_bin.go:        restoreTrashBinItemCmd.Flags().BoolP(
services/storage-users/pkg/command/trash_bin.go:        restoreTrashBinItemCmd.Flags().StringP(
services/storage-users/pkg/command/uploads.go:                  restart, _ := cmd.Flags().GetBool("restart")
services/storage-users/pkg/command/uploads.go:                  resume, _ := cmd.Flags().GetBool("resume")
services/storage-users/pkg/command/uploads.go:                  clean, _ := cmd.Flags().GetBool("clean")
services/storage-users/pkg/command/uploads.go:                  renderJson, _ := cmd.Flags().GetBool("json")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().String("id", "", "filter sessions by upload session id")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("processing", false, "filter sessions by processing status")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("expired", false, "filter sessions by expired status")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("has-virus", false, "filter sessions by virus scan result")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("json", false, "output as json")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("restart", false, "send restart event for all listed sessions. Only one of resume/restart/clean can be set.")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("resume", false, "send resume event for all listed sessions. Only one of resume/restart/clean can be set.")
services/storage-users/pkg/command/uploads.go:  listUploadSessionsCmd.Flags().Bool("clean", false, "remove uploads for all listed sessions. Only one of resume/restart/clean can be set.")
services/storage-users/pkg/command/uploads.go:          processingValue, _ := cmd.Flags().GetBool("processing")
services/storage-users/pkg/command/uploads.go:          expiredValue, _ := cmd.Flags().GetBool("expired")
services/storage-users/pkg/command/uploads.go:          infectedValue, _ := cmd.Flags().GetBool("has-virus")
services/storage-users/pkg/command/uploads.go:          idValue, _ := cmd.Flags().GetString("id")
services/postprocessing/pkg/command/postprocessing.go:                  uid, _ := cmd.Flags().GetString("upload-id")
services/postprocessing/pkg/command/postprocessing.go:                          step, _ = cmd.Flags().GetString("step")
services/postprocessing/pkg/command/postprocessing.go:                  restart, _ := cmd.Flags().GetBool("restart")
services/postprocessing/pkg/command/postprocessing.go:  restartPostprocessingCmd.Flags().StringP(
services/postprocessing/pkg/command/postprocessing.go:  restartPostprocessingCmd.Flags().StringP(
services/postprocessing/pkg/command/postprocessing.go:  restartPostprocessingCmd.Flags().BoolP(
services/auth-app/pkg/command/create.go:                        userName, _ := cmd.Flags().GetString("user-name")
services/auth-app/pkg/command/create.go:                        expiry, err := cmd.Flags().GetDuration("expiration")
services/auth-app/pkg/command/create.go:        createCmd.Flags().String(
services/auth-app/pkg/command/create.go:        createCmd.Flags().Duration(
services/notifications/pkg/command/send_email.go:                       daily, _ := cmd.Flags().GetBool("daily")
services/notifications/pkg/command/send_email.go:                       weekly, _ := cmd.Flags().GetBool("weekly")
services/notifications/pkg/command/send_email.go:       sendEmailCmd.Flags().BoolP(
services/notifications/pkg/command/send_email.go:       sendEmailCmd.Flags().BoolP(
services/search/pkg/command/index.go:                   allSpacesFlag, _ := cmd.Flags().GetBool("all-spaces")
services/search/pkg/command/index.go:                   spaceFlag, _ := cmd.Flags().GetString("space")
services/search/pkg/command/index.go:   indexCmd.Flags().StringP(
services/search/pkg/command/index.go:   indexCmd.Flags().Bool(
tests/ocwrapper/cmd/cmd.go:                     binFlag, _ := cmd.Flags().GetString("bin")
tests/ocwrapper/cmd/cmd.go:                     urlFlag, _ := cmd.Flags().GetString("url")
tests/ocwrapper/cmd/cmd.go:                     retryFlag, _ := cmd.Flags().GetString("retry")
tests/ocwrapper/cmd/cmd.go:                     adminUsernameFlag, _ := cmd.Flags().GetString("admin-username")
tests/ocwrapper/cmd/cmd.go:                     adminPasswordFlag, _ := cmd.Flags().GetString("admin-password")
tests/ocwrapper/cmd/cmd.go:                     skipOpenCloudRunFlag, _ := cmd.Flags().GetBool("skip-OpenCloud-run")
tests/ocwrapper/cmd/cmd.go:                     portFlag, _ := cmd.Flags().GetString("port")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().SortFlags = false
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("bin", "", opencloudConfig.Get("bin"), "Full opencloud binary path")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("url", "", opencloudConfig.Get("url"), "opencloud server url")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("retry", "", opencloudConfig.Get("retry"), "Number of retries to start opencloud server")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("port", "p", wrapperConfig.Get("port"), "Wrapper API server port")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("admin-username", "", "", "admin username for opencloud server")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().StringP("admin-password", "", "", "admin password for opencloud server")
tests/ocwrapper/cmd/cmd.go:     serveCmd.Flags().Bool("skip-OpenCloud-run", false, "Skip running opencloud server")

@fschade
Copy link
Contributor Author

fschade commented Dec 16, 2025

I will Check the docs again but I think using Viper only works when bridging it via viper.BindPFlag

@fschade fschade force-pushed the issue-2044-cobra-flags branch from 69adee9 to 5486216 Compare December 19, 2025 11:16
@fschade fschade merged commit 2e7b4db into opencloud-eu:main Dec 19, 2025
58 checks passed
@github-project-automation github-project-automation bot moved this from Qualification to Done in OpenCloud Team Board Dec 19, 2025
@openclouders openclouders mentioned this pull request Dec 19, 2025
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

use viper.Get* instead of cmd.Flags().Get*

2 participants