@@ -143,6 +143,15 @@ func registerTenantHandlers(api *operations.ConsoleAPI) {
143
143
}
144
144
return admin_api .NewGetTenantUsageOK ().WithPayload (payload )
145
145
})
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
+ })
146
155
}
147
156
148
157
// getDeleteTenantResponse gets the output of deleting a minio instance
@@ -1751,3 +1760,71 @@ func getKESConfiguration(ctx context.Context, clientSet *kubernetes.Clientset, n
1751
1760
}
1752
1761
return kesConfiguration , nil
1753
1762
}
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