@@ -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