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  }