export

package
v0.1.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 9, 2023 License: Apache-2.0 Imports: 11 Imported by: 1

Documentation

Index

Constants

View Source
const (
	NamespacesKey       = "namespaces"
	NamespacesShorthand = "n"
	DistinctByLabelKey  = "distinct-by-label"
)

Variables

View Source
var ExportCmd = &cobra.Command{
	Use:   "export",
	Short: "Export Otterize intents from network mapper",
	Args:  cobra.NoArgs,
	RunE: func(cmd *cobra.Command, args []string) error {
		return mapperclient.WithClient(func(c *mapperclient.Client) error {
			if err := intentsexporter.ValidateExporterOutputFlags(); err != nil {
				return err
			}

			ctxTimeout, cancel := context.WithTimeout(context.Background(), 10*time.Second)
			defer cancel()
			namespacesFilter := viper.GetStringSlice(NamespacesKey)
			var intentsFromMapperWithLabels []mapperclient.ServiceIntentsWithLabelsServiceIntents
			if viper.IsSet(DistinctByLabelKey) {
				includeLabels := []string{viper.GetString(DistinctByLabelKey)}
				intentsFromMapperV1018, err := c.ServiceIntentsWithLabels(ctxTimeout, namespacesFilter, includeLabels)
				if err != nil {
					if httpErr := (mapperclient.HTTPError{}); errors.As(err, &httpErr) && httpErr.StatusCode == http.StatusUnprocessableEntity {
						prints.PrintCliStderr("You've specified --%s, but your network mapper does not support this capability. Please upgrade.", DistinctByLabelKey)
					}
					return err
				}
				intentsFromMapperWithLabels = intentsFromMapperV1018
			} else {
				intentsFromMapperV1017, err := c.ServiceIntents(ctxTimeout, namespacesFilter)
				if err != nil {
					return err
				}
				intentsFromMapperWithLabels = lo.Map(intentsFromMapperV1017,
					func(item mapperclient.ServiceIntentsUpToMapperV017ServiceIntents, _ int) mapperclient.ServiceIntentsWithLabelsServiceIntents {
						return mapperclient.ServiceIntentsWithLabelsServiceIntents{
							Client: mapperclient.ServiceIntentsWithLabelsServiceIntentsClientOtterizeServiceIdentity{
								NamespacedNameFragment: item.Client.NamespacedNameFragment,
							},
							Intents: lo.Map(item.Intents, func(item mapperclient.ServiceIntentsUpToMapperV017ServiceIntentsIntentsOtterizeServiceIdentity, _ int) mapperclient.ServiceIntentsWithLabelsServiceIntentsIntentsOtterizeServiceIdentity {
								return mapperclient.ServiceIntentsWithLabelsServiceIntentsIntentsOtterizeServiceIdentity{
									NamespacedNameFragment: item.NamespacedNameFragment,
								}
							}),
						}
					})
			}

			exporter, err := intentsexporter.NewExporter()
			if err != nil {
				return err
			}

			intents := intentsoutput.MapperIntentsWithLabelsToAPIIntents(intentsFromMapperWithLabels, viper.GetString(DistinctByLabelKey))
			if err := exporter.ExportIntents(intents); err != nil {
				return err
			}

			return nil
		})
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL