Skip to content

Commit bcc1e34

Browse files
author
Dnyaneshwari
committed
mgr/dashboard: Storage Class - Update
Fixes: https://tracker.ceph.com/issues/72156 Signed-off-by: Dnyaneshwari Talwekar <[email protected]>
1 parent dd35ac2 commit bcc1e34

File tree

8 files changed

+141
-114
lines changed

8 files changed

+141
-114
lines changed

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-storage-class.model.ts

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface TierTarget {
2222
read_through_restore_days: number;
2323
restore_storage_class: string;
2424
s3?: S3Details;
25-
's3-glacier': S3Glacier;
25+
's3-glacier'?: S3Glacier;
2626
};
2727
}
2828

@@ -81,8 +81,8 @@ export interface RequestModel {
8181
}
8282

8383
export interface PlacementTarget {
84-
tags?: string[];
8584
placement_id: string;
85+
tags?: string[];
8686
tier_type?: TIER_TYPE;
8787
tier_config?: {
8888
endpoint: string;
@@ -128,6 +128,24 @@ export interface TextLabels {
128128
restoreStorageClassText: string;
129129
}
130130

131+
export const CLOUD_TIER_REQUIRED_FIELDS = [
132+
'region',
133+
'target_endpoint',
134+
'access_key',
135+
'secret_key',
136+
'target_path'
137+
];
138+
139+
export const GLACIER_REQUIRED_FIELDS = [
140+
'region',
141+
'target_endpoint',
142+
'access_key',
143+
'secret_key',
144+
'target_path',
145+
'glacier_restore_tier_type',
146+
'restore_storage_class'
147+
];
148+
131149
export const TIER_TYPE = {
132150
LOCAL: 'local',
133151
CLOUD_TIER: 'cloud-s3',
@@ -198,7 +216,7 @@ export const EXPEDITED_TIER_TYPE_TEXT = $localize`Expedited glacier restore tier
198216

199217
export const RESTORE_DAYS_TEXT = $localize`Refers to number of days to the object will be restored on glacier/tape endpoint.`;
200218

201-
export const READTHROUGH_RESTORE_DAYS_TEXT = $localize`The duration for which objects restored via read-through are retained.`;
219+
export const READTHROUGH_RESTORE_DAYS_TEXT = $localize`The days for which objects restored via read-through are retained.`;
202220

203221
export const RESTORE_STORAGE_CLASS_TEXT = $localize`The storage class to which object data is to be restored.`;
204222

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-storage-class-details/rgw-storage-class-details.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217
</span>
218218
</cd-helper>
219219
</td>
220-
<td>{{ selection?.multipart_min_part_size }}</td>
220+
<td>{{ selection?.multipart_min_part_size | dimlessBinary }}</td>
221221
</tr>
222222
}
223223
@if(isTierMatch( TIER_TYPE_DISPLAY.CLOUD_TIER, TIER_TYPE_DISPLAY.GLACIER)){
@@ -231,7 +231,7 @@
231231
</span>
232232
</cd-helper>
233233
</td>
234-
<td>{{ selection?.multipart_sync_threshold }}</td>
234+
<td>{{ selection?.multipart_sync_threshold | dimlessBinary }}</td>
235235
</tr>
236236
}
237237
</tbody>

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-storage-class-form/rgw-storage-class-form.component.html

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
i18n-label
1818
for="storageClassType"
1919
formControlName="storageClassType"
20-
[helperText]="textLabels.storageClassText"
20+
[helperText]="helpTextLabels.storageClassText"
2121
id="storageClassType"
2222
[invalid]="storageClassForm.showError('storageClassType', formDir, 'required')"
2323
[invalidText]="storageError"
@@ -141,7 +141,7 @@
141141
i18n
142142
[invalid]="storageClassForm.showError('region', formDir, 'required')"
143143
[invalidText]="regionError"
144-
[helperText]="textLabels.targetRegionText"
144+
[helperText]="helpTextLabels.targetRegionText"
145145
>Target Region
146146
<input
147147
cdsText
@@ -165,29 +165,33 @@
165165
<div cdsCol>
166166
<!-- Target Endpoint -->
167167
<cds-text-label
168-
labelInputID="endpoint"
169-
i18n
170-
[invalid]="storageClassForm.showError('endpoint', formDir, 'required')"
168+
labelInputID="target_endpoint"
169+
i18n
170+
[invalid]="storageClassForm.showError('target_endpoint', formDir, 'invalidURL') || storageClassForm.showError('target_endpoint', formDir, 'required')"
171+
[invalidText]="endpointError"
172+
[helperText]="helpTextLabels.targetEndpointText"
173+
>Target Endpoint
174+
<input
175+
cdsText
176+
type="text"
177+
placeholder="e.g, http://ceph-node-00.com:80"
178+
i18n-placeholder
179+
id="target_endpoint"
180+
formControlName="target_endpoint"
181+
[invalid]="storageClassForm.showError('target_endpoint', formDir, 'invalidURL') || storageClassForm.showError('target_endpoint', formDir, 'required')"
171182
[invalidText]="endpointError"
172-
[helperText]="textLabels.targetEndpointText"
173-
>Target Endpoint
174-
<input
175-
cdsText
176-
type="text"
177-
placeholder="e.g, http://ceph-node-00.com:80"
178-
i18n-placeholder
179-
id="endpoint"
180-
formControlName="endpoint"
181-
[invalid]="storageClassForm.showError('endpoint', formDir, 'required')"
182-
/>
183-
</cds-text-label>
183+
/>
184+
</cds-text-label>
184185
<ng-template #endpointError>
185186
<span
186187
class="invalid-feedback"
187-
*ngIf="storageClassForm.showError('endpoint', formDir, 'required')"
188+
*ngIf="storageClassForm.showError('target_endpoint', formDir, 'required')"
188189
i18n
189190
>This field is required.</span
190191
>
192+
<span class="invalid-feedback"
193+
*ngIf="storageClassForm.showError('target_endpoint', formDir, 'invalidURL')"
194+
i18n>Please enter a valid URL.</span>
191195
</ng-template>
192196
</div>
193197
</div>
@@ -200,7 +204,7 @@
200204
labelInputID="access_key"
201205
[invalid]="storageClassForm.showError('access_key', formDir, 'required')"
202206
[invalidText]="accessError"
203-
[helperText]="textLabels.targetAccessKeyText"
207+
[helperText]="helpTextLabels.targetAccessKeyText"
204208
i18n
205209
>Target Access Key
206210
<input
@@ -229,7 +233,7 @@
229233
class="d-flex">
230234
<cds-password-label
231235
labelInputID="secret_key"
232-
[helperText]="textLabels.targetSecretKeyText"
236+
[helperText]="helpTextLabels.targetSecretKeyText"
233237
[invalid]="storageClassForm.showError('secret_key', formDir, 'required')"
234238
[invalidText]="secretError"
235239
i18n
@@ -260,7 +264,7 @@
260264
i18n
261265
[invalid]="storageClassForm.showError('target_path', formDir, 'required')"
262266
[invalidText]="targetError"
263-
[helperText]="textLabels.targetPathText"
267+
[helperText]="helpTextLabels.targetPathText"
264268
>Target Path
265269
<input
266270
cdsText
@@ -287,7 +291,7 @@
287291
i18n
288292
(change)="onAllowReadThroughChange($event)"
289293
>Allow Read Through
290-
<cd-help-text>{{ textLabels?.allowReadThroughText }}</cd-help-text>
294+
<cd-help-text>{{ helpTextLabels?.allowReadThroughText }}</cd-help-text>
291295
</cds-checkbox>
292296
</div>
293297
<div class="form-item">
@@ -297,7 +301,7 @@
297301
cdOptionalField="Head Object (Stub File)"
298302
i18n
299303
>Head Object (Stub File)
300-
<cd-help-text>{{ textLabels?.retainHeadObjectText }}</cd-help-text>
304+
<cd-help-text>{{ helpTextLabels?.retainHeadObjectText }}</cd-help-text>
301305
</cds-checkbox>
302306
</div>
303307
<div class="form-item form-item-append"
@@ -309,7 +313,7 @@
309313
id="read_through_restore_days"
310314
min="1"
311315
label="ReadThrough Restore Days"
312-
[helperText]="textLabels.readthroughrestoreDaysText"
316+
[helperText]="helpTextLabels.readthroughrestoreDaysText"
313317
i18n-helperText
314318
i18n-label
315319
i18n
@@ -339,7 +343,7 @@
339343
formControlName="restore_storage_class"
340344
label="Restore Storage Class"
341345
id="restore_storage_class"
342-
[helperText]="textLabels.restoreStorageClassText"
346+
[helperText]="helpTextLabels.restoreStorageClassText"
343347
i18n-label
344348
>
345349
<option value=""
@@ -367,7 +371,7 @@
367371
storageClassForm.controls.glacier_restore_tier_type.dirty
368372
"
369373
[invalidText]="glacierError"
370-
[helperText]="textLabels.tiertypeText"
374+
[helperText]="helpTextLabels.tiertypeText"
371375
i18n-label
372376
>
373377
<option value=""
@@ -391,7 +395,7 @@
391395
[id]="'glacier_restore_days'"
392396
[formControlName]="'glacier_restore_days'"
393397
[label]="'Glacier Restore Days'"
394-
[helperText]="textLabels.restoreDaysText"
398+
[helperText]="helpTextLabels.restoreDaysText"
395399
[min]="1"
396400
i18n-helperText
397401
i18n-label
@@ -441,7 +445,7 @@ <h5 class="cds--accordion__title cd-header">Advanced</h5>
441445
<cds-text-label
442446
labelInputID="multipart_sync_threshold"
443447
i18n
444-
[helperText]="textLabels.multipartSyncThresholdText"
448+
[helperText]="helpTextLabels.multipartSyncThresholdText"
445449
cdOptionalField="Multipart Sync Threshold"
446450
>Multipart Sync Threshold
447451
<input
@@ -457,7 +461,7 @@ <h5 class="cds--accordion__title cd-header">Advanced</h5>
457461
<cds-text-label
458462
labelInputID="multipart_min_part_size"
459463
i18n
460-
[helperText]="textLabels.multipartMinPartText"
464+
[helperText]="helpTextLabels.multipartMinPartText"
461465
cdOptionalField="Multipart Minimum Part Size"
462466
>Multipart Minimum Part Size
463467
<input

src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-storage-class-form/rgw-storage-class-form.component.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ describe('RgwStorageClassFormComponent', () => {
112112
component.storageClassForm.get('storage_class').setValue(storageClassName);
113113
component.storageClassForm.get('zonegroup').setValue('zonegroup1');
114114
component.storageClassForm.get('placement_target').setValue('placement1');
115-
component.storageClassForm.get('endpoint').setValue('http://ams03.com');
115+
component.storageClassForm.get('target_endpoint').setValue('http://ceph-node-00:8090');
116116
component.storageClassForm.get('access_key').setValue('accesskey');
117117
component.storageClassForm.get('secret_key').setValue('secretkey');
118118
component.storageClassForm.get('target_path').setValue('/target');
@@ -128,7 +128,7 @@ describe('RgwStorageClassFormComponent', () => {
128128

129129
it('should set required validators for CLOUD_TIER fields', () => {
130130
(component as any).updateValidatorsBasedOnStorageClass(TIER_TYPE_DISPLAY.CLOUD_TIER);
131-
const requiredFields = ['region', 'endpoint', 'access_key', 'secret_key', 'target_path'];
131+
const requiredFields = ['region', 'target_endpoint', 'access_key', 'secret_key', 'target_path'];
132132
requiredFields.forEach((field) => {
133133
const control = component.storageClassForm.get(field);
134134
control.setValue('');
@@ -146,7 +146,7 @@ describe('RgwStorageClassFormComponent', () => {
146146
(component as any).updateValidatorsBasedOnStorageClass(TIER_TYPE_DISPLAY.GLACIER);
147147
const requiredFields = [
148148
'region',
149-
'endpoint',
149+
'target_endpoint',
150150
'access_key',
151151
'secret_key',
152152
'target_path',
@@ -166,7 +166,7 @@ describe('RgwStorageClassFormComponent', () => {
166166

167167
const allFields = [
168168
'region',
169-
'endpoint',
169+
'target_endpoint',
170170
'access_key',
171171
'secret_key',
172172
'target_path',

0 commit comments

Comments
 (0)