github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/globaltagging/globaltaggingv3/tagging.go (about) 1 package globaltaggingv3 2 3 import ( 4 "fmt" 5 "github.com/IBM-Cloud/bluemix-go/client" 6 ) 7 8 type TaggingResult struct { 9 Items []Item `json:"items"` 10 } 11 12 type Item struct { 13 Name string `json:"name"` 14 } 15 16 type TagUpdateResult struct { 17 Results []TagResult `json:"results"` 18 } 19 20 type TagResult struct { 21 ResourceID string `json:"resource_id"` 22 IsError string `json:"isError"` 23 Response string `json:"response"` 24 Message string `json:"message"` 25 Code string `json:"code"` 26 Level string `json:"level"` 27 HttpCode int `json:"httpCode"` 28 Description string `json:"description"` 29 MoreInfo string `json:"more_info"` 30 } 31 32 type TaggingBody struct { 33 TagResources []TagResource `json:"resources"` 34 TagName string `json:"tag_name,omitempty"` 35 TagNames []string `json:"tag_names,omitempty"` 36 } 37 38 type TagResource struct { 39 ResourceID string `json:"resource_id"` 40 ResourceType string `json:"resource_type,omitempty"` 41 } 42 43 type Tags interface { 44 GetTags(resourceID string) (TaggingResult, error) 45 AttachTags(resourceID string, taglist []string) (TagUpdateResult, error) 46 DetachTags(resourceID string, taglist []string) (TagUpdateResult, error) 47 DeleteTag(tag string) (TagUpdateResult, error) 48 } 49 50 type tags struct { 51 client *client.Client 52 } 53 54 func newTaggingAPI(c *client.Client) Tags { 55 return &tags{ 56 client: c, 57 } 58 } 59 60 func (r *tags) GetTags(resourceID string) (TaggingResult, error) { 61 taggingResult := TaggingResult{} 62 query := fmt.Sprintf("?attached_to=%v", resourceID) 63 rawURL := fmt.Sprintf("/v3/tags" + query) 64 _, err := r.client.Get(rawURL, &taggingResult) 65 if err != nil { 66 return taggingResult, err 67 } 68 return taggingResult, nil 69 } 70 71 func (r *tags) AttachTags(resourceID string, taglist []string) (TagUpdateResult, error) { 72 tagUpdateResult := TagUpdateResult{} 73 taggingBody := TaggingBody{ 74 TagResources: []TagResource{ 75 {ResourceID: resourceID}, 76 }, 77 TagNames: taglist, 78 } 79 rawURL := fmt.Sprintf("/v3/tags/attach") 80 _, err := r.client.Post(rawURL, &taggingBody, &tagUpdateResult) 81 if err != nil { 82 return tagUpdateResult, err 83 } 84 return tagUpdateResult, nil 85 86 } 87 88 func (r *tags) DetachTags(resourceID string, taglist []string) (TagUpdateResult, error) { 89 tagUpdateResult := TagUpdateResult{} 90 taggingBody := TaggingBody{ 91 TagResources: []TagResource{ 92 {ResourceID: resourceID}, 93 }, 94 TagNames: taglist, 95 } 96 rawURL := fmt.Sprintf("/v3/tags/detach") 97 _, err := r.client.Post(rawURL, &taggingBody, &tagUpdateResult) 98 if err != nil { 99 return tagUpdateResult, err 100 } 101 return tagUpdateResult, nil 102 103 } 104 105 func (r *tags) DeleteTag(tagin string) (TagUpdateResult, error) { 106 tagUpdateResult := TagUpdateResult{} 107 rawURL := fmt.Sprintf("/v3/tags/%s", tagin) 108 _, err := r.client.Delete(rawURL, &tagUpdateResult) 109 if err != nil { 110 return tagUpdateResult, err 111 } 112 return tagUpdateResult, nil 113 114 }