@@ -143,6 +143,15 @@ func registerTenantHandlers(api *operations.ConsoleAPI) {
143143 }
144144 return admin_api .NewGetTenantUsageOK ().WithPayload (payload )
145145 })
146+
147+ api .AdminAPITenantUpdateZonesHandler = admin_api .TenantUpdateZonesHandlerFunc (func (params admin_api.TenantUpdateZonesParams , session * models.Principal ) middleware.Responder {
148+ resp , err := getTenantUpdateZoneResponse (session , params )
149+ if err != nil {
150+ log .Println (err )
151+ return admin_api .NewTenantUpdateZonesDefault (500 ).WithPayload (& models.Error {Code : 500 , Message : swag .String (err .Error ())})
152+ }
153+ return admin_api .NewTenantUpdateZonesOK ().WithPayload (resp )
154+ })
146155}
147156
148157// getDeleteTenantResponse gets the output of deleting a minio instance
@@ -1751,3 +1760,71 @@ func getKESConfiguration(ctx context.Context, clientSet *kubernetes.Clientset, n
17511760 }
17521761 return kesConfiguration , nil
17531762}
1763+
1764+ func getTenantUpdateZoneResponse (session * models.Principal , params admin_api.TenantUpdateZonesParams ) (* models.Tenant , error ) {
1765+ ctx := context .Background ()
1766+ opClientClientSet , err := cluster .OperatorClient (session .SessionToken )
1767+ if err != nil {
1768+ log .Println ("error getting operator client:" , err )
1769+ return nil , err
1770+ }
1771+
1772+ opClient := & operatorClient {
1773+ client : opClientClientSet ,
1774+ }
1775+
1776+ t , err := updateTenantZones (ctx , opClient , params .Namespace , params .Tenant , params .Body .Zones )
1777+ if err != nil {
1778+ log .Println ("error updating Tenant's zones:" , err )
1779+ return nil , err
1780+ }
1781+
1782+ // parse it to models.Tenant
1783+ tenant := getTenantInfo (t )
1784+ return tenant , nil
1785+ }
1786+
1787+ // updateTenantZones Sets the Tenant's zones to the ones provided by the request
1788+ //
1789+ // It does the equivalent to a PUT request on Tenant's zones
1790+ func updateTenantZones (
1791+ ctx context.Context ,
1792+ operatorClient OperatorClient ,
1793+ namespace string ,
1794+ tenantName string ,
1795+ zonesReq []* models.Zone ) (* operator.Tenant , error ) {
1796+
1797+ minInst , err := operatorClient .TenantGet (ctx , namespace , tenantName , metav1.GetOptions {})
1798+ if err != nil {
1799+ return nil , err
1800+ }
1801+
1802+ if minInst .Spec .Metadata == nil {
1803+ minInst .Spec .Metadata = & metav1.ObjectMeta {
1804+ Annotations : map [string ]string {},
1805+ }
1806+ }
1807+
1808+ // set the zones if they are provided
1809+ var newZoneArray []operator.Zone
1810+ for _ , zone := range zonesReq {
1811+ zone , err := parseTenantZoneRequest (zone , minInst .Spec .Metadata .Annotations )
1812+ if err != nil {
1813+ return nil , err
1814+ }
1815+ newZoneArray = append (newZoneArray , * zone )
1816+ }
1817+
1818+ // replace zones array
1819+ minInst .Spec .Zones = newZoneArray
1820+
1821+ payloadBytes , err := json .Marshal (minInst )
1822+ if err != nil {
1823+ return nil , err
1824+ }
1825+ tenantUpdated , err := operatorClient .TenantPatch (ctx , namespace , minInst .Name , types .MergePatchType , payloadBytes , metav1.PatchOptions {})
1826+ if err != nil {
1827+ return nil , err
1828+ }
1829+ return tenantUpdated , nil
1830+ }
0 commit comments