Skip to content

Commit c47a0ad

Browse files
committed
Add CRUD support for registered limits
This PR will add support to Update, Delete, List and Get particular registered limit.
1 parent 3ee001a commit c47a0ad

File tree

1 file changed

+82
-2
lines changed

1 file changed

+82
-2
lines changed

modules/openstack/limits.go

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ type RegisteredLimit struct {
110110
DefaultLimit int `json:"default_limit"`
111111
}
112112

113-
// CreateRegisteredLimit - create limit in keystone (global across projects) if it does not exist
114-
func (o *OpenStack) CreateRegisteredLimit(
113+
// CreateOrUpdateRegisteredLimit - create or update limit in keystone (global across projects) if it does not exist
114+
func (o *OpenStack) CreateOrUpdateRegisteredLimit(
115115
log logr.Logger,
116116
l RegisteredLimit,
117117
) (string, error) {
@@ -128,7 +128,17 @@ func (o *OpenStack) CreateRegisteredLimit(
128128
}
129129

130130
if len(allLimits) == 1 {
131+
// Limit already registered, let's update the limit with new default values
131132
limitID = allLimits[0].ID
133+
updateOpts := registeredlimits.UpdateOpts{
134+
DefaultLimit: &l.DefaultLimit,
135+
}
136+
log.Info(fmt.Sprintf("Updating registered limit %s", l.ResourceName))
137+
_, err := registeredlimits.Update(o.osclient, limitID, updateOpts).Extract()
138+
if err != nil {
139+
return limitID, err
140+
}
141+
return limitID, nil
132142
} else if len(allLimits) == 0 {
133143
createOpts := registeredlimits.BatchCreateOpts{
134144
registeredlimits.CreateOpts{
@@ -151,3 +161,73 @@ func (o *OpenStack) CreateRegisteredLimit(
151161

152162
return limitID, nil
153163
}
164+
165+
// DeleteRegisteredLimit - delete limit from keystone
166+
func (o *OpenStack) DeleteRegisteredLimit(
167+
log logr.Logger,
168+
registeredLimitID string,
169+
) error {
170+
log.Info(fmt.Sprintf("Deleting registered limit %s", registeredLimitID))
171+
err := registeredlimits.Delete(o.osclient, registeredLimitID).ExtractErr()
172+
if err != nil {
173+
return err
174+
}
175+
return nil
176+
}
177+
178+
// GetRegisteredLimit - Get existing registered limit by ID
179+
func (o *OpenStack) GetRegisteredLimit(
180+
log logr.Logger,
181+
registeredLimitID string,
182+
) (*registeredlimits.RegisteredLimit, error) {
183+
log.Info(fmt.Sprintf("Fetching registered limit %s", registeredLimitID))
184+
registeredLimit, err := registeredlimits.Get(o.osclient, registeredLimitID).Extract()
185+
if err != nil {
186+
return nil, err
187+
}
188+
return registeredLimit, nil
189+
}
190+
191+
// ListRegisteredLimitsByResourceName - List all registered limits filtered by resource name
192+
func (o *OpenStack) ListRegisteredLimitsByResourceName(
193+
log logr.Logger,
194+
resourceName string,
195+
) ([]registeredlimits.RegisteredLimit, error) {
196+
listOpts := registeredlimits.ListOpts{
197+
ResourceName: resourceName,
198+
}
199+
200+
log.Info(fmt.Sprintf("Fetching registered limit %s", resourceName))
201+
allPages, err := registeredlimits.List(o.osclient, listOpts).AllPages()
202+
if err != nil {
203+
return nil, err
204+
}
205+
206+
allLimits, err := registeredlimits.ExtractRegisteredLimits(allPages)
207+
if err != nil {
208+
return nil, err
209+
}
210+
return allLimits, nil
211+
}
212+
213+
// ListRegisteredLimitsByServiceID - List all registered limits filtered by service id
214+
func (o *OpenStack) ListRegisteredLimitsByServiceID(
215+
log logr.Logger,
216+
serviceID string,
217+
) ([]registeredlimits.RegisteredLimit, error) {
218+
listOpts := registeredlimits.ListOpts{
219+
ServiceID: serviceID,
220+
}
221+
222+
log.Info(fmt.Sprintf("Fetching registered limit for service %s", serviceID))
223+
allPages, err := registeredlimits.List(o.osclient, listOpts).AllPages()
224+
if err != nil {
225+
return nil, err
226+
}
227+
228+
allLimits, err := registeredlimits.ExtractRegisteredLimits(allPages)
229+
if err != nil {
230+
return nil, err
231+
}
232+
return allLimits, nil
233+
}

0 commit comments

Comments
 (0)