//创建delete-cluster命令 func NewCmdConfigDeleteCluster(out io.Writer, configAccess clientcmd.ConfigAccess) *cobra.Command { cmd := &cobra.Command{//创建cobra命令 Use: "delete-cluster NAME", DisableFlagsInUseLine: true, Short: i18n.T("Delete the specified cluster from the kubeconfig"), Long: "Delete the specified cluster from the kubeconfig", Example: deleteClusterExample, Run: func(cmd *cobra.Command, args []string) { cmdutil.CheckErr(runDeleteCluster(out, configAccess, cmd))//运行 }, } return cmd }
//运行 func runDeleteCluster(out io.Writer, configAccess clientcmd.ConfigAccess, cmd *cobra.Command) error { config, err := configAccess.GetStartingConfig()//加载config if err != nil { return err } args := cmd.Flags().Args()//获取参数 if len(args) != 1 {//参数不为1个报错 cmd.Help() return nil } configFile := configAccess.GetDefaultFilename()//获取config文件名称 if configAccess.IsExplicitFile() {//如果config文件使用--kubeconfig指定的 configFile = configAccess.GetExplicitFile()// 获取指定的config文件名称 } name := args[0]//获取cluster名称 _, ok := config.Clusters[name]//判断cluster是否存在 if !ok {// 如果不存在则报错 return fmt.Errorf("cannot delete cluster %s, not in %s", name, configFile) } delete(config.Clusters, name)//从config中删除cluster if err := clientcmd.ModifyConfig(configAccess, *config, true); err != nil {//把配置写回文件 return err } fmt.Fprintf(out, "deleted cluster %s from %s\n", name, configFile)//打印结果 return nil }