Skip to content

refactor: cobra flag binding [compute]#679

Open
avirtopeanu-ionos wants to merge 6 commits into
masterfrom
refactor/cobra-flag-binding
Open

refactor: cobra flag binding [compute]#679
avirtopeanu-ionos wants to merge 6 commits into
masterfrom
refactor/cobra-flag-binding

Conversation

@avirtopeanu-ionos

Copy link
Copy Markdown
Contributor

Refactored compute command flag access to read flag values directly from cobra/pflag instead of through viper. Removes the namespaced-key workaround (core.GetFlagName) for all compute commands. Behaviour is unchanged: flag reads coerce types exactly as before, and global flags (--force, --wait, etc.) are unaffected.

Copilot AI review requested due to automatic review settings June 25, 2026 12:01

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors compute subcommands to read flag values directly from Cobra/pflag (instead of Viper), including shell completion closures, while adding a lenient typed flag accessor to preserve Viper-like coercion behavior.

Changes:

  • Added a core.flags typed wrapper around *pflag.FlagSet with lenient getters (string/bool/int/etc.) and exposed it via c.Flags() / core.FlagsOf(...).
  • Updated many compute commands and completion functions to read flags via Cobra/pflag (dropping core.GetFlagName + Viper lookups).
  • Updated/added tests to set flags via Cobra (cfg.SetFlag(...)) and added a regression test for deprecated->canonical flag aliasing.

Reviewed changes

Copilot reviewed 183 out of 226 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
internal/core/flags.go Introduces typed, lenient flag getters and Flags() accessors for commands/configs.
internal/core/command_builder.go Refactors deprecated-flag aliasing to operate on Cobra flags directly.
internal/core/command_builder_test.go Adds regression test ensuring deprecated flag aliasing is visible via c.Flags().
commands/compute/volume/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/volume/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/volume/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/user/s3key.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/user/run_s3key.go Uses c.Flags() getters instead of Viper for runtime flag access.
commands/compute/template/template_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/template/run_template.go Uses c.Flags() getters instead of Viper.
commands/compute/snapshot/restore.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/snapshot/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/share/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/share/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/share/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/volume/run.go Uses c.Flags() getters instead of Viper.
commands/compute/server/volume/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/volume/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/volume/detach.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/volume/attach.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/server/token/run_token.go Uses c.Flags() getters instead of Viper.
commands/compute/server/token/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/suspend.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/stop.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/start.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/resume.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/reboot.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/gpu/run_gpu.go Uses c.Flags() getters instead of Viper.
commands/compute/server/gpu/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/gpu/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/console/run_console.go Uses c.Flags() getters instead of Viper.
commands/compute/server/console/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/console/console_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/server/cdrom/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/cdrom/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/cdrom/detach.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/server/cdrom/attach.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/resource/run_resource.go Uses c.Flags() getters instead of Viper (including Changed(...)).
commands/compute/resource/resource_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/request/run_request.go Uses c.Flags() getters instead of Viper (incl. timeout read).
commands/compute/nic/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/nic/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/nic/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/nic/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/rule/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/target/remove.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/target/list.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/target/add.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/rule/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/rule/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/flowlog/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/flowlog/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/flowlog/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/flowlog/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/networkloadbalancer/flowlog/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/networkloadbalancer/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/rule/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/rule/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/rule/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/rule/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/rule/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/lan/run_natgateway_lan.go Uses c.Flags() getters instead of Viper (incl. Changed(...)).
commands/compute/natgateway/lan/remove.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/lan/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/lan/add.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/flowlog/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/flowlog/run_natgateway_flowlog.go Uses c.Flags() getters instead of Viper.
commands/compute/natgateway/flowlog/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/flowlog/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/flowlog/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/natgateway/flowlog/create.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/natgateway/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/location/run_location.go Uses c.Flags() getters instead of Viper.
commands/compute/location/run_cpu.go Uses c.Flags() getters instead of Viper.
commands/compute/location/location_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/location/cpu_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/loadbalancer/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/loadbalancer/nic/run.go Uses c.Flags() getters instead of Viper.
commands/compute/loadbalancer/nic/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/loadbalancer/nic/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/loadbalancer/nic/detach.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/loadbalancer/nic/attach.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/loadbalancer/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/loadbalancer/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/lan/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/lan/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/lan/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/label/run_label.go Uses c.Flags() getters instead of Viper (incl. predicates).
commands/compute/label/remove.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/label/list.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/label/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/label/add.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/nodepool/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/nodepool/lan/remove.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/nodepool/lan/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/nodepool/lan/add.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/nodepool/get.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/nodepool/delete.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/nodepool/create.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/node/run_k8s_node.go Uses c.Flags() getters instead of Viper.
commands/compute/k8s/node/recreate.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/node/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/k8s/node/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/node/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/k8s/kubeconfig/run_k8s_kubeconfig.go Uses c.Flags() getters instead of Viper.
commands/compute/k8s/kubeconfig/k8s_kubeconfig_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/k8s/cluster/update.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/ipfailover/run_ipfailover.go Uses c.Flags() getters instead of Viper.
commands/compute/ipfailover/remove.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/ipfailover/list.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/ipfailover/add.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/ipconsumer/run_ipconsumer.go Uses c.Flags() getters instead of Viper.
commands/compute/ipconsumer/ipconsumer_test.go Updates tests to set flags via Cobra (cfg.SetFlag).
commands/compute/ipblock/run_ipblock.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/image/run_image.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/helpers/flowlog.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/group/user.go Uses Cobra-based flag reads in completion (drops Viper).
commands/compute/group/run.go Uses c.Flags() getters instead of Viper.
commands/compute/flowlog/run_flowlog.go Uses c.Flags() getters instead of Viper.
commands/compute/flowlog/list.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/flowlog/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/flowlog/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/flowlog/create.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/firewallrule/update.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/firewallrule/list.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/firewallrule/get.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/firewallrule/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/firewallrule/create.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/datacenter/run_datacenter.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/contract/run_contract.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/backupunit/run_backupunit.go Uses c.Flags() getters / Changed(...) instead of Viper.
commands/compute/applicationloadbalancer/update.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/update.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/list.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/httprule/remove.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/applicationloadbalancer/rule/httprule/list.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/httprule/add.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/get.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/rule/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/applicationloadbalancer/rule/create.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/get.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/flowlog/update.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/flowlog/list.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/flowlog/get.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/flowlog/delete.go Uses Cobra-based flag reads in completions (drops Viper).
commands/compute/applicationloadbalancer/flowlog/create.go Uses core.FlagsOf(...) in completion closures (drops Viper).
commands/compute/applicationloadbalancer/delete.go Uses Cobra-based flag reads in completion (drops Viper).
CHANGELOG.md Documents the compute flag-binding refactor in the changelog.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread internal/core/flags.go
@avirtopeanu-ionos avirtopeanu-ionos force-pushed the refactor/cobra-flag-binding branch from d746cd0 to c12b387 Compare June 25, 2026 13:50
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants