Skip to content

Commit 42a4491

Browse files
committed
Implement GetAssetTagsByType.
1 parent 22797e5 commit 42a4491

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

compute/paging.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type PagedResult struct {
1919

2020
// IsEmpty determines whether the page contains no results.
2121
func (page *PagedResult) IsEmpty() bool {
22-
return page.PageCount == 0
22+
return page == nil || page.PageCount == 0
2323
}
2424

2525
// NextPage creates a Paging for the next page of results.

compute/tags.go

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,51 @@ type deleteTagKey struct {
8282
ID string `json:"id"`
8383
}
8484

85+
// GetAssetTagsByType gets all tags applied to assets of the specified type.
86+
//
87+
// Note that due to a bug in the CloudControl API, when you go past the last page if results, you'll receive an UNEXPECTED_ERROR response code.
88+
func (client *Client) GetAssetTagsByType(assetType string, paging *Paging) (tags *TagDetails, err error) {
89+
if paging == nil {
90+
paging = DefaultPaging()
91+
}
92+
93+
organizationID, err := client.getOrganizationID()
94+
if err != nil {
95+
return nil, err
96+
}
97+
98+
requestURI := fmt.Sprintf("%s/tag/tag?assetType=%s&%s",
99+
url.QueryEscape(organizationID),
100+
url.QueryEscape(assetType),
101+
paging.toQueryParameters(),
102+
)
103+
request, err := client.newRequestV25(requestURI, http.MethodGet, nil)
104+
if err != nil {
105+
return nil, err
106+
}
107+
108+
responseBody, statusCode, err := client.executeRequest(request)
109+
if err != nil {
110+
return nil, err
111+
}
112+
113+
if statusCode != http.StatusOK {
114+
var apiResponse *APIResponseV2
115+
116+
apiResponse, err = readAPIResponseAsJSON(responseBody, statusCode)
117+
if err != nil {
118+
return nil, err
119+
}
120+
121+
return nil, apiResponse.ToError("Request failed with status code %d (%s): %s", statusCode, apiResponse.ResponseCode, apiResponse.Message)
122+
}
123+
124+
tags = &TagDetails{}
125+
err = json.Unmarshal(responseBody, tags)
126+
127+
return tags, err
128+
}
129+
85130
// GetAssetTags gets all tags applied to the specified asset.
86131
//
87132
// Note that due to a bug in the CloudControl API, when you go past the last page if results, you'll receive an UNEXPECTED_ERROR response code.
@@ -101,7 +146,7 @@ func (client *Client) GetAssetTags(assetID string, assetType string, paging *Pag
101146
url.QueryEscape(assetType),
102147
paging.toQueryParameters(),
103148
)
104-
request, err := client.newRequestV22(requestURI, http.MethodGet, nil)
149+
request, err := client.newRequestV25(requestURI, http.MethodGet, nil)
105150
if err != nil {
106151
return nil, err
107152
}
@@ -138,7 +183,7 @@ func (client *Client) ApplyAssetTags(assetID string, assetType string, tags ...T
138183
requestURI := fmt.Sprintf("%s/tag/applyTags",
139184
url.QueryEscape(organizationID),
140185
)
141-
request, err := client.newRequestV22(requestURI, http.MethodPost, &applyTags{
186+
request, err := client.newRequestV25(requestURI, http.MethodPost, &applyTags{
142187
AssetID: assetID,
143188
AssetType: assetType,
144189
Tags: tags,
@@ -164,7 +209,7 @@ func (client *Client) RemoveAssetTags(assetID string, assetType string, tagNames
164209
requestURI := fmt.Sprintf("%s/tag/removeTags",
165210
url.QueryEscape(organizationID),
166211
)
167-
request, err := client.newRequestV22(requestURI, http.MethodPost, &removeTags{
212+
request, err := client.newRequestV25(requestURI, http.MethodPost, &removeTags{
168213
AssetID: assetID,
169214
AssetType: assetType,
170215
TagNames: tagNames,
@@ -192,7 +237,7 @@ func (client *Client) GetTagKey(id string) (tagKey *TagKey, err error) {
192237
url.QueryEscape(organizationID),
193238
url.QueryEscape(id),
194239
)
195-
request, err := client.newRequestV22(requestURI, http.MethodGet, nil)
240+
request, err := client.newRequestV25(requestURI, http.MethodGet, nil)
196241
if err != nil {
197242
return nil, err
198243
}
@@ -236,7 +281,7 @@ func (client *Client) ListTagKeys(paging *Paging) (tagKeys *TagKeys, err error)
236281
url.QueryEscape(organizationID),
237282
paging.toQueryParameters(),
238283
)
239-
request, err := client.newRequestV22(requestURI, http.MethodGet, nil)
284+
request, err := client.newRequestV25(requestURI, http.MethodGet, nil)
240285
if err != nil {
241286
return nil, err
242287
}
@@ -273,7 +318,7 @@ func (client *Client) CreateTagKey(name string, description string, isValueRequi
273318
requestURI := fmt.Sprintf("%s/tag/createTagKey",
274319
url.QueryEscape(organizationID),
275320
)
276-
request, err := client.newRequestV22(requestURI, http.MethodPost, &tagKey{
321+
request, err := client.newRequestV25(requestURI, http.MethodPost, &tagKey{
277322
Name: name,
278323
Description: description,
279324
IsValueRequired: isValueRequired,
@@ -311,7 +356,7 @@ func (client *Client) DeleteTagKey(id string) error {
311356
requestURI := fmt.Sprintf("%s/tag/deleteTagKey",
312357
url.QueryEscape(organizationID),
313358
)
314-
request, err := client.newRequestV22(requestURI, http.MethodPost,
359+
request, err := client.newRequestV25(requestURI, http.MethodPost,
315360
&deleteTagKey{id},
316361
)
317362
responseBody, statusCode, err := client.executeRequest(request)

0 commit comments

Comments
 (0)