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