• 华为云ecs,evs打标签


    背景是由于界面上不支持批量打标签,我们机器又比较多,华为云ui很卡(个人猜测是因为他每次都返回全量数据导致),体验非常差,他们有个tms标签管理服务,但是不支持各种排序,筛选,数据量一大,没法搞,所以还是自己api实现吧。

    过程其实还是简单的,我们是定义project,每个project基本上都是同一个部门的服务器,打相同标签就行了(但是我们project也比较多)

    首先定义4个flag

    	projectid  = flag.String("p", "", "please input projectid")
    	regionName = flag.String("r", "cn-east-2", "please input regionname")
    	tagKey     = flag.String("k", "", "input key")
    	tagValue   = flag.String("v", "", "input value")
    
    

    获取client

    func getEvsClient(projectId, regionName string) *evs.EvsClient {
    
    	auth := basic.NewCredentialsBuilder().
    		WithAk(ak).
    		WithSk(sk).
    		WithProjectId(projectId).
    		Build()
    
    	client := evs.NewEvsClient(
    		evs.EvsClientBuilder().
    			WithRegion(region.ValueOf(regionName)).
    			WithCredential(auth).
    			Build())
    	return client
    }
    

    获取evs id切片,当然这里带个过滤,我这里是过滤没有被打过标签的evs

    func getAllEvs(client *evs.EvsClient) []string {
    	var ans []string
    	request := &model.ListVolumesRequest{}
    	response, err := client.ListVolumes(request)
    	if err != nil {
    		//return
    		return ans
    	}
    	for i, v := range *response.Volumes {
    		if !searchTag(v.Tags) {
    			fmt.Println(i, v.Name, v.Id, v.Tags)
    			ans = append(ans, v.Id)
    		}
    
    	}
    	return ans
    }
    

    然后就是打标签

    func TagEvs(client *evs.EvsClient, key string, value string, evsids []string) {
    
    	for i, e := range evsids {
    		klog.Infof("do with %d %s", i, e)
    		request := &model.BatchCreateVolumeTagsRequest{}
    		//Body: model.BatchCreateVolumeTagsRequestBody{
    		//Action: model.BatchCreateVolumeTagsRequestBodyAction{},
    		//Tags:   []model.Tag{t},
    		//request.Body.Action = model.BatchCreateVolumeTagsRequestBodyAction{}
    		request.VolumeId = e
    		var listTagsbody = []model.Tag{
    			{
    				Key:   key,
    				Value: value,
    			},
    		}
    		request.Body = &model.BatchCreateVolumeTagsRequestBody{
    			Tags:   listTagsbody,
    			Action: model.GetBatchCreateVolumeTagsRequestBodyActionEnum().CREATE,
    		}
    		klog.Infof("request:%+v\n", request)
    		response, err := client.BatchCreateVolumeTags(request)
    		if err != nil {
    			klog.Fatalln("cannot tag volume: ", err)
    		}
    		klog.Infof("response:%+v", response)
    
    	}
    
    }
    

    这样标签就打完了。当然有多个项目的你需要吧项目信息持久化一下,比如写文件或者读数据库里面,这样可以重复利用一下。

    ecs与之类似,不过ecs的tag类型跟evs还不一样。令人费解,ecs里面是map[string]string,ecs里面却是[]string。

    然后rms资源管理里面设置合规,没有相关标签的就提示不合规来定期检查,我做的过程中发现华为云的一些小bug,evs有些镜像标签不生效的事。

  • 相关阅读:
    linux异步信号handle浅析
    数据库的基本操作增删改查
    POJ1789Truck History最小生成树两种做法(Kruskal+Prim)模板题
    POJ1113Wall求凸包周长
    POJ3565AntsKM变形
    HDU2150Pipe判断线段是否相交
    POJ1815Friendship最大流最小割点+拆点+枚举
    HDU3081 Marriage Match II 最大匹配+并查集+匈牙利算法
    POJ3348Cows求凸包面积
    HDU3277Marriage Match III并查集+二分+最大流
  • 原文地址:https://www.cnblogs.com/gqdw/p/16436663.html
Copyright © 2020-2023  润新知