diff --git a/models/tenant_logs.go b/models/tenant_logs.go index f51caace8..02e6072e2 100644 --- a/models/tenant_logs.go +++ b/models/tenant_logs.go @@ -45,6 +45,9 @@ type TenantLogs struct { // db image DbImage string `json:"dbImage,omitempty"` + // db init image + DbInitImage string `json:"dbInitImage,omitempty"` + // db labels DbLabels []*Label `json:"dbLabels"` diff --git a/operatorapi/embedded_spec.go b/operatorapi/embedded_spec.go index 0be7e5f5c..166da781a 100644 --- a/operatorapi/embedded_spec.go +++ b/operatorapi/embedded_spec.go @@ -4237,6 +4237,9 @@ func init() { "dbImage": { "type": "string" }, + "dbInitImage": { + "type": "string" + }, "dbLabels": { "type": "array", "items": { @@ -9642,6 +9645,9 @@ func init() { "dbImage": { "type": "string" }, + "dbInitImage": { + "type": "string" + }, "dbLabels": { "type": "array", "items": { diff --git a/operatorapi/tenants.go b/operatorapi/tenants.go index 61d7813fa..41a017bdf 100644 --- a/operatorapi/tenants.go +++ b/operatorapi/tenants.go @@ -1376,10 +1376,9 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen return nil, restapi.ErrorWithContext(ctx, err, restapi.ErrUnableToGetTenantLogs) } if minTenant.Spec.Log == nil { - retval := &models.TenantLogs{ + return &models.TenantLogs{ Disabled: true, - } - return retval, nil + }, nil } annotations := []*models.Annotation{} for k, v := range minTenant.Spec.Log.Annotations { @@ -1415,7 +1414,7 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen minTenant.Spec.Log.Audit = &miniov2.AuditConfig{DiskCapacityGB: swag.Int(0)} } - retval := &models.TenantLogs{ + tenantLoggingConfiguration := &models.TenantLogs{ Image: minTenant.Spec.Log.Image, DiskCapacityGB: fmt.Sprintf("%d", *minTenant.Spec.Log.Audit.DiskCapacityGB), Annotations: annotations, @@ -1423,6 +1422,7 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen NodeSelector: nodeSelector, ServiceAccountName: minTenant.Spec.Log.ServiceAccountName, DbImage: minTenant.Spec.Log.Db.Image, + DbInitImage: minTenant.Spec.Log.Db.InitImage, DbAnnotations: dbAnnotations, DbLabels: dbLabels, DbNodeSelector: dbNodeSelector, @@ -1434,6 +1434,7 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen var requestedMem string var requestedDBCPU string var requestedDBMem string + if minTenant.Spec.Log.Resources.Requests != nil { requestedCPUQ := minTenant.Spec.Log.Resources.Requests["cpu"] requestedCPU = strconv.FormatInt(requestedCPUQ.Value(), 10) @@ -1445,12 +1446,12 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen requestedDBMemQ := minTenant.Spec.Log.Db.Resources.Requests["memory"] requestedDBMem = strconv.FormatInt(requestedDBMemQ.Value(), 10) - retval.LogCPURequest = requestedCPU - retval.LogMemRequest = requestedMem - retval.LogDBCPURequest = requestedDBCPU - retval.LogDBMemRequest = requestedDBMem + tenantLoggingConfiguration.LogCPURequest = requestedCPU + tenantLoggingConfiguration.LogMemRequest = requestedMem + tenantLoggingConfiguration.LogDBCPURequest = requestedDBCPU + tenantLoggingConfiguration.LogDBMemRequest = requestedDBMem } - return retval, nil + return tenantLoggingConfiguration, nil } // setTenantLogsResponse returns the logs of a tenant diff --git a/portal-ui/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx b/portal-ui/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx index 7e86c3e4e..1d4e37d47 100644 --- a/portal-ui/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx +++ b/portal-ui/src/screens/Console/Tenants/AddTenant/Steps/Images.tsx @@ -325,7 +325,7 @@ const Images = ({ classes }: IImagesProps) => { label="MinIO" value={imageName} error={validationErrors["image"] || ""} - placeholder="E.g. minio/minio:RELEASE.2022-02-26T02-54-46Z" + placeholder="minio/minio:RELEASE.2022-02-26T02-54-46Z" /> @@ -340,7 +340,7 @@ const Images = ({ classes }: IImagesProps) => { label="KES" value={kesImage} error={validationErrors["kesImage"] || ""} - placeholder="E.g. minio/kes:v0.17.6" + placeholder="minio/kes:v0.17.6" /> @@ -357,7 +357,7 @@ const Images = ({ classes }: IImagesProps) => { label="API" value={logSearchImage} error={validationErrors["logSearchImage"] || ""} - placeholder="E.g. minio/operator:v4.4.10" + placeholder="minio/operator:v4.4.22" /> @@ -371,7 +371,7 @@ const Images = ({ classes }: IImagesProps) => { label="PostgreSQL" value={logSearchPostgresImage} error={validationErrors["logSearchPostgresImage"] || ""} - placeholder="E.g. library/postgres:13" + placeholder="library/postgres:13" /> @@ -385,7 +385,7 @@ const Images = ({ classes }: IImagesProps) => { label="PostgreSQL Init" value={logSearchPostgresInitImage} error={validationErrors["logSearchPostgresInitImage"] || ""} - placeholder="E.g. library/busybox:1.33.1" + placeholder="library/busybox:1.33.1" /> @@ -402,7 +402,7 @@ const Images = ({ classes }: IImagesProps) => { label="Prometheus" value={prometheusImage} error={validationErrors["prometheusImage"] || ""} - placeholder="E.g. quay.io/prometheus/prometheus:latest" + placeholder="quay.io/prometheus/prometheus:latest" /> @@ -416,7 +416,7 @@ const Images = ({ classes }: IImagesProps) => { label="Prometheus Sidecar" value={prometheusSidecarImage} error={validationErrors["prometheusSidecarImage"] || ""} - placeholder="E.g. quay.io/prometheus/prometheus:latest" + placeholder="library/alpine:latest" /> @@ -430,7 +430,7 @@ const Images = ({ classes }: IImagesProps) => { label="Prometheus Init" value={prometheusInitImage} error={validationErrors["prometheusInitImage"] || ""} - placeholder="E.g. quay.io/prometheus/prometheus:latest" + placeholder="library/busybox:1.33.1" /> @@ -469,7 +469,7 @@ const Images = ({ classes }: IImagesProps) => { label="Endpoint" value={imageRegistry} error={validationErrors["registry"] || ""} - placeholder="E.g. https://index.docker.io/v1/" + placeholder="https://index.docker.io/v1/" required /> diff --git a/portal-ui/src/screens/Console/Tenants/ListTenants/types.ts b/portal-ui/src/screens/Console/Tenants/ListTenants/types.ts index 99fe20a4d..6ec4be422 100644 --- a/portal-ui/src/screens/Console/Tenants/ListTenants/types.ts +++ b/portal-ui/src/screens/Console/Tenants/ListTenants/types.ts @@ -227,6 +227,7 @@ export interface ITenantLogsStruct { diskCapacityGB: number; serviceAccountName: string; dbImage: string; + dbInitImage: string; dbLabels: IKeyValue[]; dbAnnotations: IKeyValue[]; dbNodeSelector: IKeyValue[]; diff --git a/portal-ui/src/screens/Console/Tenants/TenantDetails/EditTenantLogsModal.tsx b/portal-ui/src/screens/Console/Tenants/TenantDetails/EditTenantLogsModal.tsx index 0ddb08997..a88074777 100644 --- a/portal-ui/src/screens/Console/Tenants/TenantDetails/EditTenantLogsModal.tsx +++ b/portal-ui/src/screens/Console/Tenants/TenantDetails/EditTenantLogsModal.tsx @@ -53,6 +53,7 @@ interface IEditTenantLogsProps { diskCapacityGB: number; serviceAccountName: string; dbImage: string; + dbInitImage: string; dbLabels: IKeyValue[]; dbAnnotations: IKeyValue[]; dbNodeSelector: IKeyValue[]; @@ -97,6 +98,7 @@ const EditTenantLogsModal = ({ dbAnnotations, dbNodeSelector, dbImage, + dbInitImage, dbServiceAccountName, cpuRequest, memRequest, @@ -130,6 +132,7 @@ const EditTenantLogsModal = ({ dbNodeSelector.length > 0 ? [...dbNodeSelector] : [{ key: "", value: "" }] ); const [newDbImage, setNewDbImage] = useState(dbImage); + const [newDbInitImage, setNewDbInitImage] = useState(dbInitImage); const [newDbServiceAccountName, setNewDbServiceAccountName] = useState(dbServiceAccountName != null ? dbServiceAccountName : ""); const [labelsError, setLabelsError] = useState({}); @@ -184,6 +187,14 @@ const EditTenantLogsModal = ({ /^([a-zA-Z0-9])([a-zA-Z0-9-._])*([a-zA-Z0-9]?)+(\/(([a-zA-Z0-9])([a-zA-Z0-9-._])*([a-zA-Z0-9])?)+)*:([a-zA-Z0-9])[a-zA-Z0-9-.]{0,127}$/, customPatternMessage: "Invalid image", }); + tenantLogValidation.push({ + fieldKey: `dbInitImage`, + required: false, + value: newDbInitImage, + pattern: + /^([a-zA-Z0-9])([a-zA-Z0-9-._])*([a-zA-Z0-9]?)+(\/(([a-zA-Z0-9])([a-zA-Z0-9-._])*([a-zA-Z0-9])?)+)*:([a-zA-Z0-9])[a-zA-Z0-9-.]{0,127}$/, + customPatternMessage: "Invalid image", + }); tenantLogValidation.push({ fieldKey: `diskCapacityGB`, required: true, @@ -243,6 +254,7 @@ const EditTenantLogsModal = ({ }, [ newImage, newDbImage, + newDbInitImage, newDiskCapacityGB, newServiceAccountName, newDbServiceAccountName, @@ -303,6 +315,7 @@ const EditTenantLogsModal = ({ dbAnnotations: trim(newDbAnnotations), dbNodeSelector: trim(newDbNodeSelector), dbImage: newDbImage, + dbInitImage: newDbInitImage, dbServiceAccountName: newDbServiceAccountName, logCPURequest: newCPURequest, logMemRequest: newMemRequest + "Gi", @@ -326,7 +339,7 @@ const EditTenantLogsModal = ({ { @@ -454,7 +467,7 @@ const EditTenantLogsModal = ({ { @@ -465,6 +478,21 @@ const EditTenantLogsModal = ({ error={validationErrors[`dbImage`] || ""} /> + + { + setNewDbInitImage(e.target.value); + cleanValidation(`dbInitImage`); + }} + key={`dbInitImage`} + error={validationErrors[`dbInitImage`] || ""} + /> + ) => { @@ -263,7 +263,7 @@ const EditTenantMonitoringModal = ({ ) => { @@ -277,7 +277,7 @@ const EditTenantMonitoringModal = ({ ) => { diff --git a/portal-ui/src/screens/Console/Tenants/TenantDetails/TenantLogging.tsx b/portal-ui/src/screens/Console/Tenants/TenantDetails/TenantLogging.tsx index 723e1ec80..557a590c8 100644 --- a/portal-ui/src/screens/Console/Tenants/TenantDetails/TenantLogging.tsx +++ b/portal-ui/src/screens/Console/Tenants/TenantDetails/TenantLogging.tsx @@ -197,6 +197,7 @@ const TenantLogging = ({ classes }: ITenantLogs) => { diskCapacityGB={logInfo.diskCapacityGB} serviceAccountName={logInfo.serviceAccountName} dbImage={logInfo.dbImage} + dbInitImage={logInfo.dbInitImage} dbLabels={logInfo.dbLabels} dbAnnotations={logInfo.dbAnnotations} dbNodeSelector={logInfo.dbNodeSelector} diff --git a/swagger-operator.yml b/swagger-operator.yml index 650475258..df353ffa8 100644 --- a/swagger-operator.yml +++ b/swagger-operator.yml @@ -2912,6 +2912,8 @@ definitions: type: string dbImage: type: string + dbInitImage: + type: string dbLabels: type: array items: