From 785aa698eb1007458bda3ce782df291f5b3b9d71 Mon Sep 17 00:00:00 2001 From: Jason Madigan Date: Mon, 29 Apr 2024 12:18:47 +0100 Subject: [PATCH 1/4] resources from stdin - add '-' option alongside @ --- cmd/generate_gatewayapi_httproute.go | 2 +- cmd/generate_kuadrant_authpolicy.go | 2 +- pkg/utils/external_resource_reader.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmd/generate_gatewayapi_httproute.go b/cmd/generate_gatewayapi_httproute.go index fea188d..3c3156f 100644 --- a/cmd/generate_gatewayapi_httproute.go +++ b/cmd/generate_gatewayapi_httproute.go @@ -27,7 +27,7 @@ func generateGatewayApiHttpRouteCommand() *cobra.Command { } // OpenAPI ref - cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "/path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required)") + cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) diff --git a/cmd/generate_kuadrant_authpolicy.go b/cmd/generate_kuadrant_authpolicy.go index 177e50a..06ceca3 100644 --- a/cmd/generate_kuadrant_authpolicy.go +++ b/cmd/generate_kuadrant_authpolicy.go @@ -27,7 +27,7 @@ func generateKuadrantAuthPolicyCommand() *cobra.Command { } // OpenAPI ref - cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "/path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required)") + cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) diff --git a/pkg/utils/external_resource_reader.go b/pkg/utils/external_resource_reader.go index 43dd6bf..db37ac1 100644 --- a/pkg/utils/external_resource_reader.go +++ b/pkg/utils/external_resource_reader.go @@ -21,11 +21,11 @@ import ( ) // ReadExternalResource reads data streams from external resources. Currently implemented: -// - '@' for STDIN +// - '-' or '@' for STDIN // - URLs (HTTP[S]) // - Files func ReadExternalResource(resource string) ([]byte, error) { - if resource == "@" { + if resource == "-" || resource == "@" { return io.ReadAll(os.Stdin) } From 10de3d0a245e5179c1f7563ce837d010e476ce19 Mon Sep 17 00:00:00 2001 From: Jason Madigan Date: Mon, 29 Apr 2024 12:08:02 +0100 Subject: [PATCH 2/4] Adding output format options to RLP generation --- cmd/generate_gatewayapi_httproute.go | 29 +++++++++++++++--- cmd/generate_kuadrant_authpolicy.go | 29 +++++++++++++++--- cmd/generate_kuadrant_ratelimitpolicy.go | 39 +++++++++++++++++------- 3 files changed, 76 insertions(+), 21 deletions(-) diff --git a/cmd/generate_gatewayapi_httproute.go b/cmd/generate_gatewayapi_httproute.go index 3c3156f..91ca8b3 100644 --- a/cmd/generate_gatewayapi_httproute.go +++ b/cmd/generate_gatewayapi_httproute.go @@ -8,6 +8,7 @@ import ( "github.com/kuadrant/kuadrantctl/pkg/gatewayapi" "github.com/kuadrant/kuadrantctl/pkg/utils" "github.com/spf13/cobra" + "gopkg.in/yaml.v2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" gatewayapiv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" ) @@ -23,11 +24,24 @@ func generateGatewayApiHttpRouteCommand() *cobra.Command { Use: "httproute", Short: "Generate Gateway API HTTPRoute from OpenAPI 3.0.X", Long: "Generate Gateway API HTTPRoute from OpenAPI 3.0.X", - RunE: runGenerateGatewayApiHttpRoute, + RunE: func(cmd *cobra.Command, args []string) error { + outputFormat, err := cmd.Flags().GetString("output-format") + if err != nil { + return err + } + + oasPath, err := cmd.Flags().GetString("oas") + if err != nil { + return err + } + + return runGenerateGatewayApiHttpRoute(cmd, oasPath, outputFormat) + }, } // OpenAPI ref cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") + cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) @@ -36,8 +50,8 @@ func generateGatewayApiHttpRouteCommand() *cobra.Command { return cmd } -func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, args []string) error { - oasDataRaw, err := utils.ReadExternalResource(generateGatewayAPIHTTPRouteOAS) +func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, oasPath, outputFormat string) error { + oasDataRaw, err := utils.ReadExternalResource(oasPath) if err != nil { return err } @@ -55,12 +69,17 @@ func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, args []string) error { httpRoute := buildHTTPRoute(doc) - jsonData, err := json.Marshal(httpRoute) + var outputBytes []byte + if outputFormat == "json" { + outputBytes, err = json.Marshal(httpRoute) + } else { // default to YAML if not explicitly JSON + outputBytes, err = yaml.Marshal(httpRoute) + } if err != nil { return err } - fmt.Fprintln(cmd.OutOrStdout(), string(jsonData)) + fmt.Fprintln(cmd.OutOrStdout(), string(outputBytes)) return nil } diff --git a/cmd/generate_kuadrant_authpolicy.go b/cmd/generate_kuadrant_authpolicy.go index 06ceca3..6892e25 100644 --- a/cmd/generate_kuadrant_authpolicy.go +++ b/cmd/generate_kuadrant_authpolicy.go @@ -7,6 +7,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" kuadrantapiv1beta2 "github.com/kuadrant/kuadrant-operator/api/v1beta2" "github.com/spf13/cobra" + "gopkg.in/yaml.v2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" gatewayapiv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" gatewayapiv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" @@ -23,11 +24,24 @@ func generateKuadrantAuthPolicyCommand() *cobra.Command { Use: "authpolicy", Short: "Generate Kuadrant AuthPolicy from OpenAPI 3.0.X", Long: "Generate Kuadrant AuthPolicy from OpenAPI 3.0.X", - RunE: runGenerateKuadrantAuthPolicy, + RunE: func(cmd *cobra.Command, args []string) error { + outputFormat, err := cmd.Flags().GetString("output-format") + if err != nil { + return err + } + + oasPath, err := cmd.Flags().GetString("oas") + if err != nil { + return err + } + + return runGenerateKuadrantAuthPolicy(cmd, oasPath, outputFormat) + }, } // OpenAPI ref cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") + cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) @@ -36,8 +50,8 @@ func generateKuadrantAuthPolicyCommand() *cobra.Command { return cmd } -func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, args []string) error { - oasDataRaw, err := utils.ReadExternalResource(generateGatewayAPIHTTPRouteOAS) +func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, oasPath, outputFormat string) error { + oasDataRaw, err := utils.ReadExternalResource(oasPath) if err != nil { return err } @@ -55,12 +69,17 @@ func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, args []string) error { ap := buildAuthPolicy(doc) - jsonData, err := json.Marshal(ap) + var outputBytes []byte + if outputFormat == "json" { + outputBytes, err = json.Marshal(ap) + } else { // default to YAML if not explicitly JSON + outputBytes, err = yaml.Marshal(ap) + } if err != nil { return err } - fmt.Fprintln(cmd.OutOrStdout(), string(jsonData)) + fmt.Fprintln(cmd.OutOrStdout(), string(outputBytes)) return nil } diff --git a/cmd/generate_kuadrant_ratelimitpolicy.go b/cmd/generate_kuadrant_ratelimitpolicy.go index 9115607..cf73553 100644 --- a/cmd/generate_kuadrant_ratelimitpolicy.go +++ b/cmd/generate_kuadrant_ratelimitpolicy.go @@ -7,6 +7,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" kuadrantapiv1beta2 "github.com/kuadrant/kuadrant-operator/api/v1beta2" "github.com/spf13/cobra" + "gopkg.in/yaml.v2" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" gatewayapiv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" gatewayapiv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" @@ -18,26 +19,37 @@ import ( //kuadrantctl generate kuadrant ratelimitpolicy --oas [OAS_FILE_PATH | OAS_URL | @] +// var outputFormat string + func generateKuadrantRateLimitPolicyCommand() *cobra.Command { cmd := &cobra.Command{ Use: "ratelimitpolicy", Short: "Generate Kuadrant RateLimitPolicy from OpenAPI 3.0.X", Long: "Generate Kuadrant RateLimitPolicy from OpenAPI 3.0.X", - RunE: runGenerateKuadrantRateLimitPolicy, + RunE: func(cmd *cobra.Command, args []string) error { + outputFormat, err := cmd.Flags().GetString("output-format") + if err != nil { + return err + } + + oasPath, err := cmd.Flags().GetString("oas") + if err != nil { + return err + } + + return runGenerateKuadrantRateLimitPolicy(cmd, oasPath, outputFormat) + }, } - // OpenAPI ref - cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "/path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required)") - err := cmd.MarkFlagRequired("oas") - if err != nil { - panic(err) - } + cmd.Flags().String("oas", "", "Path to OpenAPI spec file (in JSON or YAML format) or URL (required)") + cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") + cmd.MarkFlagRequired("oas") return cmd } -func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, args []string) error { - oasDataRaw, err := utils.ReadExternalResource(generateGatewayAPIHTTPRouteOAS) +func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, oasPath, outputFormat string) error { + oasDataRaw, err := utils.ReadExternalResource(oasPath) if err != nil { return err } @@ -55,12 +67,17 @@ func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, args []string) error rlp := buildRateLimitPolicy(doc) - jsonData, err := json.Marshal(rlp) + var outputBytes []byte + if outputFormat == "json" { + outputBytes, err = json.Marshal(rlp) + } else { // default to YAML if not explicitly JSON + outputBytes, err = yaml.Marshal(rlp) + } if err != nil { return err } - fmt.Fprintln(cmd.OutOrStdout(), string(jsonData)) + fmt.Fprintln(cmd.OutOrStdout(), string(outputBytes)) return nil } From e54e7e0efbafde5b9a5b51cad23530f6a9af577f Mon Sep 17 00:00:00 2001 From: Jason Madigan Date: Mon, 29 Apr 2024 14:45:10 +0100 Subject: [PATCH 3/4] doc updates --- README.md | 6 +++--- cmd/generate_kuadrant_ratelimitpolicy.go | 13 ++++++++----- doc/generate-gateway-api-httproute.md | 5 +++-- doc/generate-kuadrant-auth-policy.md | 3 ++- doc/generate-kuadrant-rate-limit-policy.md | 3 ++- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index cff87aa..77080d3 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Generate Gateway API resources from an OpenAPI 3.x specification | Subcommand | Description | Flags | | ---------- | ------------------------------------------------ | --------------------------------- | -| `httproute`| Generate Gateway API HTTPRoute from OpenAPI 3.0.X| `--oas string` Path or URL to OpenAPI spec (required) | +| `httproute`| Generate Gateway API HTTPRoute from OpenAPI 3.0.X| `--oas string` Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required). `-o` Output format: 'yaml' or 'json'. Default: yaml | ##### `generate kuadrant` @@ -88,8 +88,8 @@ Generate Kuadrant resources from an OpenAPI 3.x specification | Subcommand | Description | Flags | | ---------------- | ------------------------------------------------- | --------------------------------- | -| `authpolicy` | Generate a [Kuadrant AuthPolicy](https://docs.kuadrant.io/kuadrant-operator/doc/auth/) from an OpenAPI 3.0.x specification | `--oas string` Path or URL to OpenAPI spec (required) | -| `ratelimitpolicy`| Generate [Kuadrant RateLimitPolicy](https://docs.kuadrant.io/kuadrant-operator/doc/rate-limiting/) from an OpenAPI 3.0.x specification | `--oas string` Path or URL to OpenAPI spec (required) | +| `authpolicy` | Generate a [Kuadrant AuthPolicy](https://docs.kuadrant.io/kuadrant-operator/doc/auth/) from an OpenAPI 3.0.x specification | `--oas string` Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required). `-o` Output format: 'yaml' or 'json'. Default: yaml | +| `ratelimitpolicy`| Generate [Kuadrant RateLimitPolicy](https://docs.kuadrant.io/kuadrant-operator/doc/rate-limiting/) from an OpenAPI 3.0.x specification | `--oas string` Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required). `-o` Output format: 'yaml' or 'json'. Default: yaml | #### `install` diff --git a/cmd/generate_kuadrant_ratelimitpolicy.go b/cmd/generate_kuadrant_ratelimitpolicy.go index cf73553..1c487f1 100644 --- a/cmd/generate_kuadrant_ratelimitpolicy.go +++ b/cmd/generate_kuadrant_ratelimitpolicy.go @@ -3,6 +3,7 @@ package cmd import ( "encoding/json" "fmt" + "os" "github.com/getkin/kin-openapi/openapi3" kuadrantapiv1beta2 "github.com/kuadrant/kuadrant-operator/api/v1beta2" @@ -19,13 +20,11 @@ import ( //kuadrantctl generate kuadrant ratelimitpolicy --oas [OAS_FILE_PATH | OAS_URL | @] -// var outputFormat string - func generateKuadrantRateLimitPolicyCommand() *cobra.Command { cmd := &cobra.Command{ Use: "ratelimitpolicy", - Short: "Generate Kuadrant RateLimitPolicy from OpenAPI 3.0.X", - Long: "Generate Kuadrant RateLimitPolicy from OpenAPI 3.0.X", + Short: "Generate Kuadrant Rate Limit Policy from OpenAPI 3.0.X", + Long: "Generate Kuadrant Rate Limit Policy from OpenAPI 3.0.X", RunE: func(cmd *cobra.Command, args []string) error { outputFormat, err := cmd.Flags().GetString("output-format") if err != nil { @@ -43,7 +42,11 @@ func generateKuadrantRateLimitPolicyCommand() *cobra.Command { cmd.Flags().String("oas", "", "Path to OpenAPI spec file (in JSON or YAML format) or URL (required)") cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") - cmd.MarkFlagRequired("oas") + + if err := cmd.MarkFlagRequired("oas"); err != nil { + fmt.Println("Error setting 'oas' flag as required:", err) + os.Exit(1) + } return cmd } diff --git a/doc/generate-gateway-api-httproute.md b/doc/generate-gateway-api-httproute.md index 931d3d8..931590d 100644 --- a/doc/generate-gateway-api-httproute.md +++ b/doc/generate-gateway-api-httproute.md @@ -21,8 +21,9 @@ Usage: kuadrantctl generate gatewayapi httproute [flags] Flags: - -h, --help help for httproute - --oas string /path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required) + -h, --help help for httproute + --oas string Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required) + -o Output format: 'yaml' or 'json'. Default: yaml Global Flags: -v, --verbose verbose output diff --git a/doc/generate-kuadrant-auth-policy.md b/doc/generate-kuadrant-auth-policy.md index 6294291..71a1b7c 100644 --- a/doc/generate-kuadrant-auth-policy.md +++ b/doc/generate-kuadrant-auth-policy.md @@ -172,7 +172,8 @@ Usage: Flags: -h, --help help for authpolicy - --oas string /path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required) + --oas string Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required) + -o Output format: 'yaml' or 'json'. Default: yaml Global Flags: -v, --verbose verbose output diff --git a/doc/generate-kuadrant-rate-limit-policy.md b/doc/generate-kuadrant-rate-limit-policy.md index ad4b3d6..cbf185f 100644 --- a/doc/generate-kuadrant-rate-limit-policy.md +++ b/doc/generate-kuadrant-rate-limit-policy.md @@ -21,7 +21,8 @@ Usage: Flags: -h, --help help for ratelimitpolicy - --oas string /path/to/file.[json|yaml|yml] OR http[s]://domain/resource/path.[json|yaml|yml] OR @ (required) + --oas string Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required) + -o Output format: 'yaml' or 'json'. Default: yaml Global Flags: -v, --verbose verbose output From 6ef82593beccea3938e0a57ab2649ae37b8ee23d Mon Sep 17 00:00:00 2001 From: Jason Madigan Date: Tue, 30 Apr 2024 11:15:39 +0100 Subject: [PATCH 4/4] addressing some PR feedback --- cmd/generate_gatewayapi_httproute.go | 25 ++++++-------------- cmd/generate_kuadrant_authpolicy.go | 29 +++++++++--------------- cmd/generate_kuadrant_ratelimitpolicy.go | 29 +++++++++--------------- 3 files changed, 29 insertions(+), 54 deletions(-) diff --git a/cmd/generate_gatewayapi_httproute.go b/cmd/generate_gatewayapi_httproute.go index 91ca8b3..d8e5ab4 100644 --- a/cmd/generate_gatewayapi_httproute.go +++ b/cmd/generate_gatewayapi_httproute.go @@ -14,7 +14,8 @@ import ( ) var ( - generateGatewayAPIHTTPRouteOAS string + generateGatewayAPIHTTPRouteOAS string + generateGatewayAPIHTTPRouteFormat string ) //kuadrantctl generate gatewayapi httproute --oas [OAS_FILE_PATH | OAS_URL | @] @@ -24,24 +25,12 @@ func generateGatewayApiHttpRouteCommand() *cobra.Command { Use: "httproute", Short: "Generate Gateway API HTTPRoute from OpenAPI 3.0.X", Long: "Generate Gateway API HTTPRoute from OpenAPI 3.0.X", - RunE: func(cmd *cobra.Command, args []string) error { - outputFormat, err := cmd.Flags().GetString("output-format") - if err != nil { - return err - } - - oasPath, err := cmd.Flags().GetString("oas") - if err != nil { - return err - } - - return runGenerateGatewayApiHttpRoute(cmd, oasPath, outputFormat) - }, + RunE: runGenerateGatewayApiHttpRoute, } // OpenAPI ref cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") - cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") + cmd.Flags().StringVarP(&generateGatewayAPIHTTPRouteFormat, "output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) @@ -50,8 +39,8 @@ func generateGatewayApiHttpRouteCommand() *cobra.Command { return cmd } -func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, oasPath, outputFormat string) error { - oasDataRaw, err := utils.ReadExternalResource(oasPath) +func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, args []string) error { + oasDataRaw, err := utils.ReadExternalResource(generateGatewayAPIHTTPRouteOAS) if err != nil { return err } @@ -70,7 +59,7 @@ func runGenerateGatewayApiHttpRoute(cmd *cobra.Command, oasPath, outputFormat st httpRoute := buildHTTPRoute(doc) var outputBytes []byte - if outputFormat == "json" { + if generateGatewayAPIHTTPRouteFormat == "json" { outputBytes, err = json.Marshal(httpRoute) } else { // default to YAML if not explicitly JSON outputBytes, err = yaml.Marshal(httpRoute) diff --git a/cmd/generate_kuadrant_authpolicy.go b/cmd/generate_kuadrant_authpolicy.go index 6892e25..51878c5 100644 --- a/cmd/generate_kuadrant_authpolicy.go +++ b/cmd/generate_kuadrant_authpolicy.go @@ -17,6 +17,11 @@ import ( "github.com/kuadrant/kuadrantctl/pkg/utils" ) +var ( + generateAuthPolicyOAS string + generateAuthPolicyFormat string +) + //kuadrantctl generate kuadrant authpolicy --oas [OAS_FILE_PATH | OAS_URL | @] func generateKuadrantAuthPolicyCommand() *cobra.Command { @@ -24,24 +29,12 @@ func generateKuadrantAuthPolicyCommand() *cobra.Command { Use: "authpolicy", Short: "Generate Kuadrant AuthPolicy from OpenAPI 3.0.X", Long: "Generate Kuadrant AuthPolicy from OpenAPI 3.0.X", - RunE: func(cmd *cobra.Command, args []string) error { - outputFormat, err := cmd.Flags().GetString("output-format") - if err != nil { - return err - } - - oasPath, err := cmd.Flags().GetString("oas") - if err != nil { - return err - } - - return runGenerateKuadrantAuthPolicy(cmd, oasPath, outputFormat) - }, + RunE: runGenerateKuadrantAuthPolicy, } // OpenAPI ref - cmd.Flags().StringVar(&generateGatewayAPIHTTPRouteOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") - cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") + cmd.Flags().StringVar(&generateAuthPolicyOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") + cmd.Flags().StringVarP(&generateAuthPolicyFormat, "output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") err := cmd.MarkFlagRequired("oas") if err != nil { panic(err) @@ -50,8 +43,8 @@ func generateKuadrantAuthPolicyCommand() *cobra.Command { return cmd } -func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, oasPath, outputFormat string) error { - oasDataRaw, err := utils.ReadExternalResource(oasPath) +func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, args []string) error { + oasDataRaw, err := utils.ReadExternalResource(generateAuthPolicyOAS) if err != nil { return err } @@ -70,7 +63,7 @@ func runGenerateKuadrantAuthPolicy(cmd *cobra.Command, oasPath, outputFormat str ap := buildAuthPolicy(doc) var outputBytes []byte - if outputFormat == "json" { + if generateAuthPolicyFormat == "json" { outputBytes, err = json.Marshal(ap) } else { // default to YAML if not explicitly JSON outputBytes, err = yaml.Marshal(ap) diff --git a/cmd/generate_kuadrant_ratelimitpolicy.go b/cmd/generate_kuadrant_ratelimitpolicy.go index 1c487f1..713e3dd 100644 --- a/cmd/generate_kuadrant_ratelimitpolicy.go +++ b/cmd/generate_kuadrant_ratelimitpolicy.go @@ -20,28 +20,21 @@ import ( //kuadrantctl generate kuadrant ratelimitpolicy --oas [OAS_FILE_PATH | OAS_URL | @] +var ( + generateRateLimitPolicyOAS string + generateRateLimitPolicyFormat string +) + func generateKuadrantRateLimitPolicyCommand() *cobra.Command { cmd := &cobra.Command{ Use: "ratelimitpolicy", Short: "Generate Kuadrant Rate Limit Policy from OpenAPI 3.0.X", Long: "Generate Kuadrant Rate Limit Policy from OpenAPI 3.0.X", - RunE: func(cmd *cobra.Command, args []string) error { - outputFormat, err := cmd.Flags().GetString("output-format") - if err != nil { - return err - } - - oasPath, err := cmd.Flags().GetString("oas") - if err != nil { - return err - } - - return runGenerateKuadrantRateLimitPolicy(cmd, oasPath, outputFormat) - }, + RunE: runGenerateKuadrantRateLimitPolicy, } - cmd.Flags().String("oas", "", "Path to OpenAPI spec file (in JSON or YAML format) or URL (required)") - cmd.Flags().StringP("output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") + cmd.Flags().StringVar(&generateRateLimitPolicyOAS, "oas", "", "Path to OpenAPI spec file (in JSON or YAML format), URL, or '-' to read from standard input (required)") + cmd.Flags().StringVarP(&generateRateLimitPolicyFormat, "output-format", "o", "yaml", "Output format: 'yaml' or 'json'. Default: yaml") if err := cmd.MarkFlagRequired("oas"); err != nil { fmt.Println("Error setting 'oas' flag as required:", err) @@ -51,8 +44,8 @@ func generateKuadrantRateLimitPolicyCommand() *cobra.Command { return cmd } -func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, oasPath, outputFormat string) error { - oasDataRaw, err := utils.ReadExternalResource(oasPath) +func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, args []string) error { + oasDataRaw, err := utils.ReadExternalResource(generateRateLimitPolicyOAS) if err != nil { return err } @@ -71,7 +64,7 @@ func runGenerateKuadrantRateLimitPolicy(cmd *cobra.Command, oasPath, outputForma rlp := buildRateLimitPolicy(doc) var outputBytes []byte - if outputFormat == "json" { + if generateRateLimitPolicyFormat == "json" { outputBytes, err = json.Marshal(rlp) } else { // default to YAML if not explicitly JSON outputBytes, err = yaml.Marshal(rlp)