首页 > 其他分享 >go cobra执行命令

go cobra执行命令

时间:2023-07-29 22:11:56浏览次数:36  
标签:cobra return err exec 执行命令 cluster sealos go

/*
Copyright 2022 [email protected].

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
"github.com/spf13/cobra"

"github.com/labring/sealos/pkg/clusterfile"
"github.com/labring/sealos/pkg/ssh"
"github.com/labring/sealos/pkg/types/v1beta1"
)

var roles string
var clusterName string
var ips []string

var exampleExec = `
exec to default cluster: default
sealos exec "cat /etc/hosts"
specify the cluster name(If there is only one cluster in the $HOME/.sealos directory, it should be applied. ):
sealos exec -c my-cluster "cat /etc/hosts"
set role label to exec cmd:
sealos exec -c my-cluster -r master,node "cat /etc/hosts"
set ips to exec cmd:
sealos exec -c my-cluster --ips 172.16.1.38 "cat /etc/hosts"
`

func newExecCmd() *cobra.Command {
var cluster *v1beta1.Cluster
var execCmd = &cobra.Command{
Use: "exec",
Short: "Execute shell command or script on specified nodes",
Example: exampleExec,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
if len(ips) > 0 {
execIPCmd, err := ssh.NewExecCmdFromIPs(cluster, ips)
if err != nil {
return err
}
return execIPCmd.RunCmd(args[0])
}
execRoleCmd, err := ssh.NewExecCmdFromRoles(cluster, roles)
if err != nil {
return err
}
return execRoleCmd.RunCmd(args[0])
},
PreRunE: func(cmd *cobra.Command, args []string) error {
cls, err := clusterfile.GetClusterFromName(clusterName)
if err != nil {
return err
}
cluster = cls
return nil
},
}
execCmd.Flags().StringVarP(&clusterName, "cluster", "c", "default", "name of cluster to applied exec action")
execCmd.Flags().StringVarP(&roles, "roles", "r", "", "run command on nodes with role")
execCmd.Flags().StringSliceVar(&ips, "ips", []string{}, "run command on nodes with ip address")
return execCmd
}

标签:cobra,return,err,exec,执行命令,cluster,sealos,go
From: https://www.cnblogs.com/cheyunhua/p/17590653.html

相关文章

  • Go语言中init函数执行的顺序
    init函数的执行规则:对于同一个go文件,init函数的执行顺序从上到下,即在代码中先出现的init函数会先执行。对于同一个package,不同文件是按照文件名字符串比较的结果决定执行顺序的,字符串越小的文件越早被初始化。对于不同的package,如果不相互依赖,则按照import的顺......
  • django(路由层)
    一、简介#路由匹配url(r'test',views.test),url(r'test_add',views.test_add)#r'test'与请求头的数据进行正则匹配'''url方法第一个参数是正则表达式只要第一个参数正则表达式能够匹配到内容,那么就会立刻停止往下匹配直接执行对应的视图函数在输入url的......
  • 【Go blog】Govulncheck v1.0.0 发布了!
    我们很高兴地宣布,govulncheckv1.0.0已经发布,同时也发布了用于集成扫描到其他工具的API的v1.0.0版本!Go对漏洞管理的支持首次在去年九月宣布。从那时起,我们做了一些改变,最终在今天发布。这篇文章描述了Go的更新漏洞工具,以及如何开始使用它。我们最近还发布了一个安全最佳实......
  • 如何在 Django 中使用 MVT 创建一个基本项目?
    Django是一种用Python编写的流行Web框架,遵循Model-View-Template(MVT)架构模式。MVT是众所周知的Model-View-Controller(MVC)模式的变体,它提供了一种构建Web应用程序的结构化方法。了解如何在Django中使用MVT创建基本项目是开发健壮且可扩展的Web应用程序的基本步骤。在本......
  • Django web框架实现nacos【多配置】修改
    Djangoweb框架实现nacos【多配置】修改基于上面一个博客进行功能升级优化,在实际场景中一般会有多个配置需要同时进行修改,上章节功能就不足满足使用了,在此基础上进行功能优化同时修改多个配置进行提交表单。1.安装依赖pipinstallnacos-sdk-pythonPyYAML 2.创建类修......
  • Python-Django-环境搭建和基础知识
    Python-Django学习目录:环境搭建和基础知识:包括安装Python和Django、了解Python基础语法、掌握Django框架的基本概念和工作原理等。模型和数据库:包括创建模型、定义字段、使用DjangoORM进行数据库操作等。视图和URL:包括定义视图函数、URL路由配置、模板渲染等。表单和验证:包括表单......
  • Gopan-基于go-zero实现慕课网实战仿百度网盘项目
    Gopan-基于go-zero实现慕课网实战仿百度网盘项目项目地址:https://github.com/liuxianloveqiqi/Gopan......
  • Django web框架实现修改【单个】nacos配置
    Djangoweb框架实现修改【单个】nacos配置基于上一个博客的Django的项目环境继续添加一些高级的功能——修改nacos配置。简单回顾一下,上面添加的功能:博客网站文章上传、发布,rediskey删除接口。1.首先安装PythonNacos客户端库pipinstallnacos-sdk-python 2.创建n......
  • MongoDB运行环境的十个建议
     1.生产环境始终开启身份验证这不是性能建议,而是安全建议。安装后建议创建admin用户,重启mongodb实例并开启身份验证:>useadminswitchedtodbadmin>db.createUser({...user:"abce",...pwd:"password",...roles:["root"]...})Successfullyaddeduse......
  • Django Form源码分析(2)
    1前置知识点1.1render函数 可以看到render函数先拿到模板,再进行模板渲染那么form函数是如何自动生成表单里的input标签呢,应该是在form里已经渲染好一遍生成了input标签放进了{"form":form}的集合render函数再进行渲染2Form函数2.1Form源码分析2.1.1Form初始化......