From c68bacf6707d91f5db3fe4b842b1d270fdcc67d9 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Fri, 9 Feb 2024 13:01:29 +0100 Subject: [PATCH] Samples and completion --- cmd/completion/firewall.go | 16 ++++++++++++++++ cmd/firewall.go | 10 ++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cmd/completion/firewall.go b/cmd/completion/firewall.go index d59fdd11..c9b35465 100644 --- a/cmd/completion/firewall.go +++ b/cmd/completion/firewall.go @@ -20,3 +20,19 @@ func (c *Completion) FirewallListCompletion(cmd *cobra.Command, args []string, t } return names, cobra.ShellCompDirectiveNoFileComp } + +func (c *Completion) FirewallEgressCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + egressrules := []string{ + "tcp@0.0.0.0/0@443@\"allow outgoing https\"\tdefault outgoing https", + "tcp@0.0.0.0/0@53@\"allow outgoing dns via tcp\"\tdefault outgoing dns via tcp", + "udp@0.0.0.0/0@53#123@\"allow outgoing dns and ntp via udp\"\tdefault outgoing dns and ntp via udp", + } + return egressrules, cobra.ShellCompDirectiveNoFileComp +} + +func (c *Completion) FirewallIngressCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + ingressrules := []string{ + "tcp@0.0.0.0/0@22@\"allow incoming ssh\"\tallow incoming ssh", + } + return ingressrules, cobra.ShellCompDirectiveNoFileComp +} diff --git a/cmd/firewall.go b/cmd/firewall.go index 30380efc..606876bd 100644 --- a/cmd/firewall.go +++ b/cmd/firewall.go @@ -47,8 +47,10 @@ func newFirewallCmd(c *config) *cobra.Command { CreateCmdMutateFn: func(cmd *cobra.Command) { c.addMachineCreateFlags(cmd, "firewall") cmd.Aliases = []string{"allocate"} - cmd.Flags().StringSlice("egress", nil, "egress firewall rule to deploy on creation") - cmd.Flags().StringSlice("ingress", nil, "ingress firewall rule to deploy on creation") + cmd.Flags().StringSlice("egress", nil, "egress firewall rule to deploy on creation format: tcp|udp@cidr#cidr@port#port@comment") + cmd.Flags().StringSlice("ingress", nil, "ingress firewall rule to deploy on creation format: tcp|udp@cidr#cidr@port#port@comment") + must(cmd.RegisterFlagCompletionFunc("egress", c.comp.FirewallEgressCompletion)) + must(cmd.RegisterFlagCompletionFunc("ingress", c.comp.FirewallIngressCompletion)) }, ListCmdMutateFn: func(cmd *cobra.Command) { cmd.Flags().String("id", "", "ID to filter [optional]") @@ -213,8 +215,8 @@ func (c *firewallCmd) createRequestFromCLI() (*models.V1FirewallCreateRequest, e } // parseEgressFlags input must be in the form of -// proto@cidr;cidr@port;port;port@comment -// tcp@1.2.3.4/24;2.3.4.1/32@80#443#8080#8443@"Allow apt update" +// proto@cidr#cidr@port#port#port@comment +// tcp@1.2.3.4/24#2.3.4.1/32@80#443#8080#8443@"Allow apt update" func parseEgressFlags(inputs []string) ([]*models.V1FirewallEgressRule, error) { var rules []*models.V1FirewallEgressRule