diff --git a/cmd/admin/v2/audit.go b/cmd/admin/v2/audit.go index 3385f18..de6bc6f 100644 --- a/cmd/admin/v2/audit.go +++ b/cmd/admin/v2/audit.go @@ -57,7 +57,7 @@ func newAuditCmd(c *config.Config) *cobra.Command { cmd.Flags().Bool("prettify-body", true, "attempts to interpret the body as json and prettifies it.") genericcli.Must(cmd.RegisterFlagCompletionFunc("phase", c.Completion.AuditPhase)) - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("tenant", c.Completion.Tenant)) genericcli.Must(cmd.RegisterFlagCompletionFunc("result-code", c.Completion.AuditStatusCodes)) }, diff --git a/cmd/admin/v2/network.go b/cmd/admin/v2/network.go index ce206ab..e924374 100644 --- a/cmd/admin/v2/network.go +++ b/cmd/admin/v2/network.go @@ -38,7 +38,7 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().StringP("type", "t", "", "type of the network. [optional]") cmd.Flags().String("nat-type", "", "nat type of the network. [optional]") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("partition", c.Completion.Partition)) genericcli.Must(cmd.RegisterFlagCompletionFunc("addressfamily", c.Completion.NetworkAddressFamily)) genericcli.Must(cmd.RegisterFlagCompletionFunc("type", c.Completion.NetworkType)) @@ -79,7 +79,7 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().StringSlice("destination-prefixes", nil, "destination-prefixes for this network. [optional]") cmd.Flags().StringSlice("additional-announcable-cidrs", nil, "additional-announcable-cidrs for this network. [optional]") cmd.Flags().Uint32("vrf", 0, "the vrf of the network to create. [optional]") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("partition", c.Completion.Partition)) genericcli.Must(cmd.RegisterFlagCompletionFunc("addressfamily", c.Completion.NetworkAddressFamily)) genericcli.Must(cmd.RegisterFlagCompletionFunc("type", c.Completion.NetworkType)) @@ -99,7 +99,7 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().StringSlice("add-labels", nil, "labels to add to the network") cmd.Flags().StringSlice("remove-labels", nil, "labels to remove to the network") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, } diff --git a/cmd/admin/v2/partition.go b/cmd/admin/v2/partition.go index e069a61..1fa3a1a 100644 --- a/cmd/admin/v2/partition.go +++ b/cmd/admin/v2/partition.go @@ -94,7 +94,7 @@ func newPartitionCmd(c *config.Config) *cobra.Command { capacityCmd.Flags().StringP("project", "", "", "consider project-specific counts, e.g. size reservations.") capacityCmd.Flags().StringSlice("sort-by", []string{}, fmt.Sprintf("order by (comma separated) column(s), sort direction can be changed by appending :asc or :desc behind the column identifier. possible values: %s", strings.Join(sorters.PartitionCapacitySorter().AvailableKeys(), "|"))) genericcli.Must(capacityCmd.RegisterFlagCompletionFunc("id", c.Completion.Partition)) - genericcli.Must(capacityCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(capacityCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(capacityCmd.RegisterFlagCompletionFunc("size", c.Completion.Size)) genericcli.Must(capacityCmd.RegisterFlagCompletionFunc("sort-by", cobra.FixedCompletions(sorters.PartitionCapacitySorter().AvailableKeys(), cobra.ShellCompDirectiveNoFileComp))) diff --git a/cmd/admin/v2/vpn.go b/cmd/admin/v2/vpn.go index c012c3c..1970fc2 100644 --- a/cmd/admin/v2/vpn.go +++ b/cmd/admin/v2/vpn.go @@ -37,10 +37,10 @@ func newVPNCmd(c *config.Config) *cobra.Command { ListPrinter: func() printers.Printer { return c.ListPrinter }, ListCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().String("project", "", "the project for which vpn nodes should be listed") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, OnlyCmds: genericcli.OnlyCmds(genericcli.ListCmd), - ValidArgsFn: w.c.Completion.ProjectList, + ValidArgsFn: w.c.Completion.Project, } authKeyCmd := &cobra.Command{ @@ -49,14 +49,14 @@ func newVPNCmd(c *config.Config) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return w.authKey() }, - ValidArgsFunction: c.Completion.ProjectList, + ValidArgsFunction: c.Completion.Project, } authKeyCmd.Flags().String("project", "", "the project for which the authkey should be generated") authKeyCmd.Flags().String("reason", "", "the reason why the authkey should be generated") authKeyCmd.Flags().Bool("ephemeral", true, "ephemeral defines if the key can only be used once") authKeyCmd.Flags().Duration("expires", 1*time.Hour, "the duration after the generated key is not valid anymore") genericcli.Must(authKeyCmd.MarkFlagRequired("project")) - genericcli.Must(authKeyCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(authKeyCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) return genericcli.NewCmds(cmdsConfig, authKeyCmd) } diff --git a/cmd/api/v2/audit.go b/cmd/api/v2/audit.go index de87ace..de2617a 100644 --- a/cmd/api/v2/audit.go +++ b/cmd/api/v2/audit.go @@ -66,7 +66,7 @@ func newAuditCmd(c *config.Config) *cobra.Command { cmd.Flags().Bool("prettify-body", true, "attempts to interpret the body as json and prettifies it.") genericcli.Must(cmd.RegisterFlagCompletionFunc("phase", c.Completion.AuditPhase)) - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("tenant", c.Completion.Tenant)) genericcli.Must(cmd.RegisterFlagCompletionFunc("result-code", c.Completion.AuditStatusCodes)) }, diff --git a/cmd/api/v2/ip.go b/cmd/api/v2/ip.go index f1e4f94..866a7a6 100644 --- a/cmd/api/v2/ip.go +++ b/cmd/api/v2/ip.go @@ -34,7 +34,7 @@ func newIPCmd(c *config.Config) *cobra.Command { ListCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().StringP("project", "p", "", "project from where ips should be listed") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, CreateCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().StringP("project", "p", "", "project of the ip") @@ -45,7 +45,7 @@ func newIPCmd(c *config.Config) *cobra.Command { cmd.Flags().BoolP("static", "", false, "make this ip static") cmd.Flags().StringP("addressfamily", "", "", "addressfamily, can be either IPv4|IPv6, defaults to IPv4 (optional)") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, UpdateCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().StringP("project", "p", "", "project of the ip") @@ -55,17 +55,17 @@ func newIPCmd(c *config.Config) *cobra.Command { cmd.Flags().StringArray("remove-labels", nil, "removes the volume labels with the given key") cmd.Flags().Bool("static", false, "make this ip static") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, DescribeCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().StringP("project", "p", "", "project of the ip") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, DeleteCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().StringP("project", "p", "", "project of the ip") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, CreateRequestFromCLI: w.createFromCLI, UpdateRequestFromCLI: w.updateFromCLI, diff --git a/cmd/api/v2/network.go b/cmd/api/v2/network.go index 1b68ed2..392145d 100644 --- a/cmd/api/v2/network.go +++ b/cmd/api/v2/network.go @@ -37,7 +37,7 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().StringP("type", "t", "", "type of the network. [optional]") genericcli.Must(cmd.RegisterFlagCompletionFunc("id", c.Completion.Network)) - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("partition", c.Completion.Partition)) genericcli.Must(cmd.RegisterFlagCompletionFunc("addressfamily", c.Completion.NetworkAddressFamily)) genericcli.Must(cmd.RegisterFlagCompletionFunc("type", c.Completion.NetworkType)) @@ -66,7 +66,7 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().Uint32("ipv4-prefix-length", 0, "ipv4 prefix bit length of the network to create, defaults to default child prefix length of the parent network. [optional]") cmd.Flags().Uint32("ipv6-prefix-length", 0, "ipv6 prefix bit length of the network to create, defaults to default child prefix length of the parent network. [optional]") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(cmd.RegisterFlagCompletionFunc("partition", c.Completion.Partition)) genericcli.Must(cmd.RegisterFlagCompletionFunc("addressfamily", c.Completion.NetworkAddressFamily)) genericcli.Must(cmd.RegisterFlagCompletionFunc("parent-network", c.Completion.Network)) @@ -84,11 +84,11 @@ func newNetworkCmd(c *config.Config) *cobra.Command { cmd.Flags().StringSlice("add-labels", nil, "labels to add to the network") cmd.Flags().StringSlice("remove-labels", nil, "labels to remove to the network") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, DeleteCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().String("project", "", "project of this network.") - genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) }, } diff --git a/cmd/api/v2/project.go b/cmd/api/v2/project.go index 74565d6..6c14735 100644 --- a/cmd/api/v2/project.go +++ b/cmd/api/v2/project.go @@ -53,7 +53,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { cmd.Flags().String("description", "", "the description of the project to update") }, UpdateRequestFromCLI: w.updateRequestFromCLI, - ValidArgsFn: w.c.Completion.ProjectList, + ValidArgsFn: w.c.Completion.Project, } inviteCmd := &cobra.Command{ @@ -72,7 +72,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { generateInviteCmd.Flags().StringP("project", "p", "", "the project for which to generate the invite") generateInviteCmd.Flags().String("role", apiv2.ProjectRole_PROJECT_ROLE_VIEWER.String(), "the role that the new member will assume when joining through the invite secret") - genericcli.Must(generateInviteCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(generateInviteCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(generateInviteCmd.RegisterFlagCompletionFunc("role", c.Completion.ProjectRole)) deleteInviteCmd := &cobra.Command{ @@ -87,7 +87,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { deleteInviteCmd.Flags().StringP("project", "p", "", "the project in which to delete the invite") - genericcli.Must(deleteInviteCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(deleteInviteCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) listInvitesCmd := &cobra.Command{ Use: "list", @@ -102,7 +102,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { genericcli.AddSortFlag(listInvitesCmd, sorters.ProjectInviteSorter()) - genericcli.Must(listInvitesCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(listInvitesCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) joinProjectCmd := &cobra.Command{ Use: "join ", @@ -145,7 +145,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { removeMemberCmd.Flags().StringP("project", "p", "", "the project in which to remove the member") - genericcli.Must(removeMemberCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(removeMemberCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) updateMemberCmd := &cobra.Command{ Use: "update ", @@ -159,7 +159,7 @@ func newProjectCmd(c *config.Config) *cobra.Command { updateMemberCmd.Flags().StringP("project", "p", "", "the project in which to remove the member") updateMemberCmd.Flags().String("role", "", "the role of the member") - genericcli.Must(updateMemberCmd.RegisterFlagCompletionFunc("project", c.Completion.ProjectList)) + genericcli.Must(updateMemberCmd.RegisterFlagCompletionFunc("project", c.Completion.Project)) genericcli.Must(updateMemberCmd.RegisterFlagCompletionFunc("role", c.Completion.ProjectRole)) memberCmd.AddCommand(removeMemberCmd, updateMemberCmd, listMembersCmd) diff --git a/cmd/completion/completion.go b/cmd/completion/completion.go index 78cd273..90d554d 100644 --- a/cmd/completion/completion.go +++ b/cmd/completion/completion.go @@ -1,16 +1,20 @@ package completion import ( - "context" - "github.com/metal-stack/api/go/client" "github.com/spf13/cobra" ) type Completion struct { - Client client.Client - Project string - Ctx context.Context + client client.Client + project string +} + +func New(c client.Client, project string) *Completion { + return &Completion{ + client: c, + project: project, + } } func OutputFormat(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { diff --git a/cmd/completion/ip.go b/cmd/completion/ip.go index 09b24d6..c8f4b24 100644 --- a/cmd/completion/ip.go +++ b/cmd/completion/ip.go @@ -7,9 +7,9 @@ import ( func (c *Completion) Ip(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.IPServiceListRequest{ - Project: c.Project, + Project: c.project, } - resp, err := c.Client.Apiv2().IP().List(c.Ctx, req) + resp, err := c.client.Apiv2().IP().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/completion/network.go b/cmd/completion/network.go index f36c50e..91feaee 100644 --- a/cmd/completion/network.go +++ b/cmd/completion/network.go @@ -9,15 +9,15 @@ import ( ) func (c *Completion) Network(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - ownNetworks, err := c.Client.Apiv2().Network().List(c.Ctx, &apiv2.NetworkServiceListRequest{ - Project: c.Project, + ownNetworks, err := c.client.Apiv2().Network().List(cmd.Context(), &apiv2.NetworkServiceListRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError } - baseNetworks, err := c.Client.Apiv2().Network().ListBaseNetworks(c.Ctx, &apiv2.NetworkServiceListBaseNetworksRequest{ - Project: c.Project, + baseNetworks, err := c.client.Apiv2().Network().ListBaseNetworks(cmd.Context(), &apiv2.NetworkServiceListBaseNetworksRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError @@ -71,7 +71,7 @@ func (c *Completion) NetworkAddressFamily(cmd *cobra.Command, args []string, toC } func (c *Completion) NetworkAdmin(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - networks, err := c.Client.Adminv2().Network().List(c.Ctx, &adminv2.NetworkServiceListRequest{}) + networks, err := c.client.Adminv2().Network().List(cmd.Context(), &adminv2.NetworkServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/completion/partition.go b/cmd/completion/partition.go index b40babd..af22118 100644 --- a/cmd/completion/partition.go +++ b/cmd/completion/partition.go @@ -7,7 +7,7 @@ import ( func (c *Completion) Partition(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.PartitionServiceListRequest{} - resp, err := c.Client.Apiv2().Partition().List(c.Ctx, req) + resp, err := c.client.Apiv2().Partition().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/completion/project.go b/cmd/completion/project.go index 5cc7684..f5cf734 100644 --- a/cmd/completion/project.go +++ b/cmd/completion/project.go @@ -6,9 +6,9 @@ import ( apiv2 "github.com/metal-stack/api/go/metalstack/api/v2" ) -func (c *Completion) ProjectList(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { +func (c *Completion) Project(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.ProjectServiceListRequest{} - resp, err := c.Client.Apiv2().Project().List(c.Ctx, req) + resp, err := c.client.Apiv2().Project().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -36,8 +36,8 @@ func (c *Completion) ProjectRole(cmd *cobra.Command, args []string, toComplete s } func (c *Completion) ProjectInvite(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Apiv2().Project().InvitesList(c.Ctx, &apiv2.ProjectServiceInvitesListRequest{ - Project: c.Project, + resp, err := c.client.Apiv2().Project().InvitesList(cmd.Context(), &apiv2.ProjectServiceInvitesListRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError @@ -53,8 +53,8 @@ func (c *Completion) ProjectInvite(cmd *cobra.Command, args []string, toComplete } func (c *Completion) ProjectMember(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Apiv2().Project().Get(c.Ctx, &apiv2.ProjectServiceGetRequest{ - Project: c.Project, + resp, err := c.client.Apiv2().Project().Get(cmd.Context(), &apiv2.ProjectServiceGetRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError diff --git a/cmd/completion/size.go b/cmd/completion/size.go index 5f42fbe..204f97f 100644 --- a/cmd/completion/size.go +++ b/cmd/completion/size.go @@ -7,7 +7,7 @@ import ( func (c *Completion) Size(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.SizeServiceListRequest{} - resp, err := c.Client.Apiv2().Size().List(c.Ctx, req) + resp, err := c.client.Apiv2().Size().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/completion/switch.go b/cmd/completion/switch.go index f0b4d20..9889946 100644 --- a/cmd/completion/switch.go +++ b/cmd/completion/switch.go @@ -7,7 +7,7 @@ import ( ) func (c *Completion) Switch(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Adminv2().Switch().List(c.Ctx, &adminv2.SwitchServiceListRequest{}) + resp, err := c.client.Adminv2().Switch().List(cmd.Context(), &adminv2.SwitchServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -21,7 +21,7 @@ func (c *Completion) Switch(cmd *cobra.Command, args []string, toComplete string } func (c *Completion) SwitchPartition(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Adminv2().Switch().List(c.Ctx, &adminv2.SwitchServiceListRequest{}) + resp, err := c.client.Adminv2().Switch().List(cmd.Context(), &adminv2.SwitchServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -35,7 +35,7 @@ func (c *Completion) SwitchPartition(cmd *cobra.Command, args []string, toComple } func (c *Completion) SwitchRack(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Adminv2().Switch().List(c.Ctx, &adminv2.SwitchServiceListRequest{}) + resp, err := c.client.Adminv2().Switch().List(cmd.Context(), &adminv2.SwitchServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -49,7 +49,7 @@ func (c *Completion) SwitchRack(cmd *cobra.Command, args []string, toComplete st } func (c *Completion) SwitchOSVendor(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Adminv2().Switch().List(c.Ctx, &adminv2.SwitchServiceListRequest{}) + resp, err := c.client.Adminv2().Switch().List(cmd.Context(), &adminv2.SwitchServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -63,7 +63,7 @@ func (c *Completion) SwitchOSVendor(cmd *cobra.Command, args []string, toComplet } func (c *Completion) SwitchOSVersion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - resp, err := c.Client.Adminv2().Switch().List(c.Ctx, &adminv2.SwitchServiceListRequest{}) + resp, err := c.client.Adminv2().Switch().List(cmd.Context(), &adminv2.SwitchServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -82,7 +82,7 @@ func (c *Completion) SwitchPorts(cmd *cobra.Command, args []string, toComplete s return nil, cobra.ShellCompDirectiveNoFileComp } - resp, err := c.Client.Adminv2().Switch().Get(c.Ctx, &adminv2.SwitchServiceGetRequest{ + resp, err := c.client.Adminv2().Switch().Get(cmd.Context(), &adminv2.SwitchServiceGetRequest{ Id: args[0], }) if err != nil { diff --git a/cmd/completion/tenant.go b/cmd/completion/tenant.go index bb848e5..e6e8d13 100644 --- a/cmd/completion/tenant.go +++ b/cmd/completion/tenant.go @@ -8,7 +8,7 @@ import ( func (c *Completion) Tenant(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.TenantServiceListRequest{} - resp, err := c.Client.Apiv2().Tenant().List(c.Ctx, req) + resp, err := c.client.Apiv2().Tenant().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -35,14 +35,14 @@ func (c *Completion) TenantRole(cmd *cobra.Command, args []string, toComplete st } func (c *Completion) TenantInvite(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - projectResp, err := c.Client.Apiv2().Project().Get(c.Ctx, &apiv2.ProjectServiceGetRequest{ - Project: c.Project, + projectResp, err := c.client.Apiv2().Project().Get(cmd.Context(), &apiv2.ProjectServiceGetRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError } - resp, err := c.Client.Apiv2().Tenant().InvitesList(c.Ctx, &apiv2.TenantServiceInvitesListRequest{ + resp, err := c.client.Apiv2().Tenant().InvitesList(cmd.Context(), &apiv2.TenantServiceInvitesListRequest{ Login: projectResp.Project.Tenant, }) if err != nil { @@ -59,14 +59,14 @@ func (c *Completion) TenantInvite(cmd *cobra.Command, args []string, toComplete } func (c *Completion) TenantMember(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - projectResp, err := c.Client.Apiv2().Project().Get(c.Ctx, &apiv2.ProjectServiceGetRequest{ - Project: c.Project, + projectResp, err := c.client.Apiv2().Project().Get(cmd.Context(), &apiv2.ProjectServiceGetRequest{ + Project: c.project, }) if err != nil { return nil, cobra.ShellCompDirectiveError } - resp, err := c.Client.Apiv2().Tenant().Get(c.Ctx, &apiv2.TenantServiceGetRequest{ + resp, err := c.client.Apiv2().Tenant().Get(cmd.Context(), &apiv2.TenantServiceGetRequest{ Login: projectResp.Project.Tenant, }) if err != nil { @@ -84,7 +84,7 @@ func (c *Completion) TenantMember(cmd *cobra.Command, args []string, toComplete func (c *Completion) AdminTenant(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &adminv2.TenantServiceListRequest{} - resp, err := c.Client.Adminv2().Tenant().List(c.Ctx, req) + resp, err := c.client.Adminv2().Tenant().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/completion/token.go b/cmd/completion/token.go index a4be2b8..9aa49b3 100644 --- a/cmd/completion/token.go +++ b/cmd/completion/token.go @@ -10,7 +10,7 @@ import ( func (c *Completion) Token(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { req := &apiv2.TokenServiceListRequest{} - resp, err := c.Client.Apiv2().Token().List(c.Ctx, req) + resp, err := c.client.Apiv2().Token().List(cmd.Context(), req) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -24,7 +24,7 @@ func (c *Completion) Token(cmd *cobra.Command, args []string, toComplete string) } func (c *Completion) TokenProjectRoles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - methods, err := c.Client.Apiv2().Method().TokenScopedList(c.Ctx, &apiv2.MethodServiceTokenScopedListRequest{}) + methods, err := c.client.Apiv2().Method().TokenScopedList(cmd.Context(), &apiv2.MethodServiceTokenScopedListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -42,7 +42,7 @@ func (c *Completion) TokenProjectRoles(cmd *cobra.Command, args []string, toComp } func (c *Completion) TokenTenantRoles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - methods, err := c.Client.Apiv2().Method().TokenScopedList(c.Ctx, &apiv2.MethodServiceTokenScopedListRequest{}) + methods, err := c.client.Apiv2().Method().TokenScopedList(cmd.Context(), &apiv2.MethodServiceTokenScopedListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -60,7 +60,7 @@ func (c *Completion) TokenTenantRoles(cmd *cobra.Command, args []string, toCompl } func (c *Completion) TokenMachineRoles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - methods, err := c.Client.Apiv2().Method().TokenScopedList(c.Ctx, &apiv2.MethodServiceTokenScopedListRequest{}) + methods, err := c.client.Apiv2().Method().TokenScopedList(cmd.Context(), &apiv2.MethodServiceTokenScopedListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } @@ -104,7 +104,7 @@ func (c *Completion) TokenInfraRole(cmd *cobra.Command, args []string, toComplet } func (c *Completion) TokenPermissions(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - methods, err := c.Client.Apiv2().Method().List(c.Ctx, &apiv2.MethodServiceListRequest{}) + methods, err := c.client.Apiv2().Method().List(cmd.Context(), &apiv2.MethodServiceListRequest{}) if err != nil { return nil, cobra.ShellCompDirectiveError } diff --git a/cmd/context.go b/cmd/context.go index 8e8a77f..228e901 100644 --- a/cmd/context.go +++ b/cmd/context.go @@ -66,7 +66,7 @@ func newContextCmd(c *config.Config) *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return w.setProject(args) }, - ValidArgsFunction: c.Completion.ProjectList, + ValidArgsFunction: c.Completion.Project, } contextRemoveCmd := &cobra.Command{ Use: "remove ", @@ -110,7 +110,7 @@ func newContextCmd(c *config.Config) *cobra.Command { contextUpdateCmd.Flags().Bool("activate", false, "immediately switches to the new context") contextUpdateCmd.Flags().String("provider", "", "sets the login provider for this context") - genericcli.Must(contextUpdateCmd.RegisterFlagCompletionFunc("default-project", c.Completion.ProjectList)) + genericcli.Must(contextUpdateCmd.RegisterFlagCompletionFunc("default-project", c.Completion.Project)) contextCmd.AddCommand( contextListCmd, diff --git a/cmd/root.go b/cmd/root.go index 395c943..8041aae 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,7 +1,6 @@ package cmd import ( - "context" "log/slog" "os" @@ -21,11 +20,10 @@ import ( func Execute() { cfg := &config.Config{ - Fs: afero.NewOsFs(), - Out: os.Stdout, - PromptOut: os.Stdout, - In: os.Stdin, - Completion: &completion.Completion{}, + Fs: afero.NewOsFs(), + Out: os.Stdout, + PromptOut: os.Stdout, + In: os.Stdin, } cmd := NewRootCmd(cfg) @@ -129,10 +127,7 @@ func initConfigWithViperCtx(c *config.Config) error { } c.Client = mc - c.Completion.Client = mc - c.Completion.Ctx = context.Background() - c.Completion.Project = c.GetProject() - + c.Completion = completion.New(mc, c.GetProject()) return nil } diff --git a/testing/e2e/test_cmd.go b/testing/e2e/test_cmd.go index ba36594..405464f 100644 --- a/testing/e2e/test_cmd.go +++ b/testing/e2e/test_cmd.go @@ -57,14 +57,12 @@ func NewRootCmd(t *testing.T, c *TestConfig) e2e_test.NewRootCmdFunc { viper.Reset() return cmd.NewRootCmd(&config.Config{ - Fs: fs, - Out: &out, - In: in, - PromptOut: io.Discard, - Completion: &completion.Completion{ - Client: cl, - }, - Client: cl, + Fs: fs, + Out: &out, + In: in, + PromptOut: io.Discard, + Completion: completion.New(cl, ""), + Client: cl, }), &out } }