mirror of https://github.com/knative/func.git
				
				
				
			
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| package cmd
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/AlecAivazis/survey/v2"
 | |
| 	"github.com/ory/viper"
 | |
| 	"github.com/spf13/cobra"
 | |
| 
 | |
| 	"knative.dev/func/pkg/config"
 | |
| 	fn "knative.dev/func/pkg/functions"
 | |
| 	"knative.dev/func/pkg/pipelines"
 | |
| )
 | |
| 
 | |
| func NewConfigGitRemoveCmd(newClient ClientFactory) *cobra.Command {
 | |
| 	cmd := &cobra.Command{
 | |
| 		Use:   "remove",
 | |
| 		Short: "Remove Git settings from the function configuration",
 | |
| 		Long: `Remove Git settings from the function configuration
 | |
| 
 | |
| 	Interactive prompt to remove Git settings from the function project in the current
 | |
| 	directory or from the directory specified with --path.
 | |
| 
 | |
| 	It also removes any generated resources that are used for Git based build and deployment,
 | |
| 	such as local generated Pipelines resources and any resources generated on the cluster.
 | |
| 	`,
 | |
| 		SuggestFor: []string{"rem", "rmeove", "del", "dle"},
 | |
| 		PreRunE:    bindEnv("path", "delete-local", "delete-cluster"),
 | |
| 		RunE: func(cmd *cobra.Command, args []string) (err error) {
 | |
| 			return runConfigGitRemoveCmd(cmd, newClient)
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	// Global Config
 | |
| 	cfg, err := config.NewDefault()
 | |
| 	if err != nil {
 | |
| 		fmt.Fprintf(cmd.OutOrStdout(), "error loading config at '%v'. %v\n", config.File(), err)
 | |
| 	}
 | |
| 
 | |
| 	// Resources generated related Flags:
 | |
| 	cmd.Flags().Bool("delete-local", false, "Delete local resources (pipeline templates).")
 | |
| 	cmd.Flags().Bool("delete-cluster", false, "Delete cluster resources (credentials and config on the cluster).")
 | |
| 
 | |
| 	addPathFlag(cmd)
 | |
| 	addVerboseFlag(cmd, cfg.Verbose)
 | |
| 
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| type configGitRemoveConfig struct {
 | |
| 	// Globals (builder, confirm, registry, verbose)
 | |
| 	config.Global
 | |
| 
 | |
| 	// Path of the function implementation on local disk. Defaults to current
 | |
| 	// working directory of the process.
 | |
| 	Path string
 | |
| 
 | |
| 	// informs whether any specific flag for deleting only a subset of resources has been set
 | |
| 	flagSet bool
 | |
| 
 | |
| 	metadata pipelines.PacMetadata
 | |
| }
 | |
| 
 | |
| // newConfigGitRemoveConfig creates a configGitRemoveConfig populated from command flags
 | |
| func newConfigGitRemoveConfig(_ *cobra.Command) (c configGitRemoveConfig) {
 | |
| 	flagSet := false
 | |
| 
 | |
| 	// decide what resources we should delete:
 | |
| 	// - by default all resources
 | |
| 	// - if any parameter is explicitly specified then get value from parameters
 | |
| 	deleteLocal := true
 | |
| 	deleteCluster := true
 | |
| 	if viper.HasChanged("delete-local") || viper.HasChanged("delete-cluster") {
 | |
| 		deleteLocal = viper.GetBool("delete-local")
 | |
| 		deleteCluster = viper.GetBool("delete-cluster")
 | |
| 		flagSet = true
 | |
| 	}
 | |
| 
 | |
| 	c = configGitRemoveConfig{
 | |
| 		flagSet: flagSet,
 | |
| 
 | |
| 		metadata: pipelines.PacMetadata{
 | |
| 			ConfigureLocalResources:   deleteLocal,
 | |
| 			ConfigureClusterResources: deleteCluster,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	return c
 | |
| }
 | |
| 
 | |
| func (c configGitRemoveConfig) Prompt(f fn.Function) (configGitRemoveConfig, error) {
 | |
| 	deleteAll := true
 | |
| 	// prompt if any flag hasn't been set yet
 | |
| 	if !c.flagSet {
 | |
| 		if err := survey.AskOne(&survey.Confirm{
 | |
| 			Message: "Do you want to delete all Git related resources?",
 | |
| 			Help:    "Delete Git config, local Pipeline resourdces and on the cluster resources.",
 | |
| 			Default: deleteAll,
 | |
| 		}, &deleteAll, survey.WithValidator(survey.Required)); err != nil {
 | |
| 			return c, err
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if !deleteAll {
 | |
| 		deleteLocal := true
 | |
| 		if err := survey.AskOne(&survey.Confirm{
 | |
| 			Message: "Do you want to delete all local Git related resources (Pipelines)?",
 | |
| 			Help:    "Delete local Pipeline resources created in the function project directory.",
 | |
| 			Default: deleteLocal,
 | |
| 		}, &deleteLocal, survey.WithValidator(survey.Required)); err != nil {
 | |
| 			return c, err
 | |
| 		}
 | |
| 		c.metadata.ConfigureLocalResources = deleteLocal
 | |
| 
 | |
| 		deleteCluster := true
 | |
| 		if err := survey.AskOne(&survey.Confirm{
 | |
| 			Message: "Do you want to delete all Git related resources present on the cluster?",
 | |
| 			Help:    "Delete all Pipeline resources that were created on the cluster.",
 | |
| 			Default: deleteCluster,
 | |
| 		}, &deleteCluster, survey.WithValidator(survey.Required)); err != nil {
 | |
| 			return c, err
 | |
| 		}
 | |
| 		c.metadata.ConfigureClusterResources = deleteCluster
 | |
| 	}
 | |
| 
 | |
| 	return c, nil
 | |
| }
 | |
| 
 | |
| // Configure the given function.  Updates a function struct with all
 | |
| // configurable values.  Note that the config already includes function's
 | |
| // current values, as they were passed through via flag defaults.
 | |
| func (c configGitRemoveConfig) Configure(f fn.Function) (fn.Function, error) {
 | |
| 	var err error
 | |
| 
 | |
| 	if c.metadata.ConfigureLocalResources {
 | |
| 		f.Build.Git = fn.Git{}
 | |
| 	}
 | |
| 
 | |
| 	// Save the function which has now been updated with flags/config
 | |
| 	if err = f.Write(); err != nil { // TODO: remove when client API uses 'f'
 | |
| 		return f, err
 | |
| 	}
 | |
| 
 | |
| 	return f, nil
 | |
| }
 | |
| 
 | |
| func runConfigGitRemoveCmd(cmd *cobra.Command, newClient ClientFactory) (err error) {
 | |
| 	var (
 | |
| 		cfg configGitRemoveConfig
 | |
| 		f   fn.Function
 | |
| 	)
 | |
| 	if err = config.CreatePaths(); err != nil { // for possible auth.json usage
 | |
| 		return
 | |
| 	}
 | |
| 	cfg = newConfigGitRemoveConfig(cmd)
 | |
| 	if f, err = fn.NewFunction(cfg.Path); err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 	if cfg, err = cfg.Prompt(f); err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 	if f, err = cfg.Configure(f); err != nil { // Updates f with deploy cfg
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	client, done := newClient(ClientConfig{Verbose: cfg.Verbose})
 | |
| 	defer done()
 | |
| 
 | |
| 	return client.RemovePAC(cmd.Context(), f, cfg.metadata)
 | |
| }
 |