github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev2/managementv2/resource_group.go (about) 1 package managementv2 2 3 import ( 4 "fmt" 5 6 "github.com/IBM-Cloud/bluemix-go/bmxerror" 7 "github.com/IBM-Cloud/bluemix-go/client" 8 "github.com/IBM-Cloud/bluemix-go/models" 9 "github.com/IBM-Cloud/bluemix-go/rest" 10 ) 11 12 type ResourceOrigin string 13 14 func (o ResourceOrigin) String() string { 15 return string(o) 16 } 17 18 //ResourceGroupUpdateRequest ... 19 type ResourceGroupUpdateRequest struct { 20 Name string `json:"name,omitempty"` 21 QuotaID string `json:"quota_id,omitempty"` 22 Default *bool `json:"default,omitempty"` 23 } 24 25 // ResourceGroupQuery is the query filters to get resource groups 26 type ResourceGroupQuery struct { 27 AccountID string 28 Default bool 29 ResourceID string 30 ResourceOrigin models.ResourceOrigin 31 } 32 33 //ErrCodeResourceGroupDoesnotExist ... 34 const ErrCodeResourceGroupDoesnotExist = "ResourceGroupDoesnotExist" 35 36 //ResourceGroupQuery ... 37 type ResourceGroupRepository interface { 38 // List all available resource groups 39 List(*ResourceGroupQuery) ([]models.ResourceGroupv2, error) 40 // Get resource group by ID 41 Get(id string) (*models.ResourceGroupv2, error) 42 // Find resource groups having the specific name 43 FindByName(*ResourceGroupQuery, string) ([]models.ResourceGroupv2, error) 44 // Create a new resource group 45 Create(models.ResourceGroupv2) (*models.ResourceGroupv2, error) 46 // Delete an existing resource group 47 Delete(id string) error 48 // Update an existing resource group 49 Update(id string, request *ResourceGroupUpdateRequest) (*models.ResourceGroupv2, error) 50 } 51 52 type resourceGroup struct { 53 client *client.Client 54 } 55 56 func newResourceGroupAPI(c *client.Client) ResourceGroupRepository { 57 return &resourceGroup{ 58 client: c, 59 } 60 } 61 62 // populate query part of HTTP requests 63 func (q ResourceGroupQuery) MakeRequest(r *rest.Request) *rest.Request { 64 if q.AccountID != "" { 65 r.Query("account_id", q.AccountID) 66 } 67 if q.Default { 68 r.Query("default", "true") 69 } 70 if q.ResourceID != "" { 71 r.Query("resource_id", q.ResourceID) 72 } 73 if q.ResourceOrigin != "" { 74 r.Query("resource_origin", q.ResourceOrigin.String()) 75 } 76 return r 77 } 78 79 func (r *resourceGroup) List(query *ResourceGroupQuery) ([]models.ResourceGroupv2, error) { 80 listRequest := rest.GetRequest("/v2/resource_groups") 81 if query != nil { 82 query.MakeRequest(listRequest) 83 } 84 req, err := listRequest.Build() 85 if err != nil { 86 return []models.ResourceGroupv2{}, err 87 } 88 89 var groups []models.ResourceGroupv2 90 _, err = r.client.GetPaginated( 91 req.URL.String(), 92 NewRCPaginatedResources(models.ResourceGroupv2{}), 93 func(resource interface{}) bool { 94 if group, ok := resource.(models.ResourceGroupv2); ok { 95 groups = append(groups, group) 96 return true 97 } 98 return false 99 }, 100 ) 101 102 if err != nil { 103 return []models.ResourceGroupv2{}, err 104 } 105 106 return groups, nil 107 } 108 109 func (r *resourceGroup) FindByName(query *ResourceGroupQuery, name string) ([]models.ResourceGroupv2, error) { 110 groups, err := r.List(query) 111 if err != nil { 112 return []models.ResourceGroupv2{}, err 113 } 114 115 filteredGroups := []models.ResourceGroupv2{} 116 for _, group := range groups { 117 if group.Name == name { 118 filteredGroups = append(filteredGroups, group) 119 } 120 } 121 122 if len(filteredGroups) == 0 { 123 return filteredGroups, bmxerror.New(ErrCodeResourceGroupDoesnotExist, 124 fmt.Sprintf("Given resource Group : %q doesn't exist", name)) 125 126 } 127 return filteredGroups, nil 128 } 129 130 func (r *resourceGroup) Create(group models.ResourceGroupv2) (*models.ResourceGroupv2, error) { 131 newGroup := models.ResourceGroupv2{} 132 _, err := r.client.Post("/v2/resource_groups", &group, &newGroup) 133 if err != nil { 134 return nil, err 135 } 136 return &newGroup, nil 137 } 138 139 func (r *resourceGroup) Delete(id string) error { 140 _, err := r.client.Delete("/v2/resource_groups/" + id) 141 return err 142 } 143 144 func (r *resourceGroup) Update(id string, request *ResourceGroupUpdateRequest) (*models.ResourceGroupv2, error) { 145 updatedGroup := models.ResourceGroupv2{} 146 _, err := r.client.Patch("/v2/resource_groups/"+id, request, &updatedGroup) 147 if err != nil { 148 return nil, err 149 } 150 return &updatedGroup, nil 151 } 152 153 func (r *resourceGroup) Get(id string) (*models.ResourceGroupv2, error) { 154 group := models.ResourceGroupv2{} 155 _, err := r.client.Get("/v2/resource_groups/"+id, &group) 156 if err != nil { 157 return nil, err 158 } 159 return &group, nil 160 }