Skip to content

Commit 412ac0a

Browse files
authored
Add Tenant Update Zones api (#257)
Since the Tenant's zones is an array, a PUT operation was done where all zone elements on the Tenant are replaced by the defined ones on the request.
1 parent b2aa134 commit 412ac0a

9 files changed

+833
-0
lines changed

models/zone_update_request.go

Lines changed: 99 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/admin_tenants.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

restapi/embedded_spec.go

Lines changed: 114 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)