diff --git a/client_tag.go b/client_tag.go index 0cbae3d6..42f6eb7d 100644 --- a/client_tag.go +++ b/client_tag.go @@ -50,7 +50,7 @@ func NewProjectTags(project string, tags []ResourceTag) *ResourceTags { } } -// NewProjectUnTags create a project tags +// NewProjectUnTags delete a project tags func NewProjectUnTags(project string, tags []string) *ResourceUnTags { return &ResourceUnTags{ ResourceType: "project", @@ -59,6 +59,24 @@ func NewProjectUnTags(project string, tags []string) *ResourceUnTags { } } +// NewResourceTags create tags for resource of certain type +func NewResourceTags(resourceType string, resourceId string, tags []ResourceTag) *ResourceTags { + return &ResourceTags{ + ResourceType: resourceType, + ResourceID: []string{resourceId}, + Tags: tags, + } +} + +// NewResourceUnTags delete tags for resource of certain type +func NewResourceUnTags(resourceType string, resourceId string, tags []string) *ResourceUnTags { + return &ResourceUnTags{ + ResourceType: resourceType, + ResourceID: []string{resourceId}, + Tags: tags, + } +} + // TagResources tag specific resource func (c *Client) TagResources(project string, tags *ResourceTags) error { body, err := json.Marshal(tags) @@ -142,3 +160,8 @@ func (c *Client) ListTagResources(project string, } return listTagResp.TagResource, listTagResp.NextToken, err } + +// GenResourceId generate the resource id to tag (not used for project) +func GenResourceId(project string, subResourceId string) string { + return project + "#" + subResourceId +} diff --git a/example/tag/subresource_tags.go b/example/tag/subresource_tags.go new file mode 100644 index 00000000..f680377a --- /dev/null +++ b/example/tag/subresource_tags.go @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + sls "github.com/aliyun/aliyun-log-go-sdk" + "github.com/aliyun/aliyun-log-go-sdk/example/util" +) + +func main() { + fmt.Println("Tag Resource") + resouceId := sls.GenResourceId(util.ProjectName, util.LogStoreName) + resourceTags := sls.NewResourceTags("logstore", resouceId, []sls.ResourceTag{ + { + Key: "the-tag", + Value: "aliyun-log-go-sdk", + }, + { + Key: "the-tag-2", + Value: "aliyun log go sdk", + }, + }) + err := util.Client.TagResources(util.ProjectName, resourceTags) + if err != nil { + fmt.Println(err) + } else { + fmt.Println("Tag Resource success") + } + listTags("logstore") + + fmt.Println("UnTag Resource") + resouceUnTags := sls.NewResourceUnTags("logstore", resouceId, []string{"the-tag"}) + + err = util.Client.UnTagResources(util.ProjectName, resouceUnTags) + if err != nil { + fmt.Println(err) + } else { + fmt.Println("UnTag Resource success") + } + listTags("logstore") +} + +func listTags(resourceType string) { + fmt.Println("tag list: ") + respTags, _, err := util.Client.ListTagResources( + util.ProjectName, + resourceType, + []string{sls.GenResourceId(util.ProjectName, util.LogStoreName)}, + []sls.ResourceFilterTag{}, + "") + if err != nil { + panic(err) + } + for _, tag := range respTags { + fmt.Printf(" resourceType : %s, resourceID : %s, tagKey : %s, tagValue : %s\n", + tag.ResourceType, + tag.ResourceID, + tag.TagKey, + tag.TagValue) + } +}