<tbody>
<tr>
<td i18n
- class="bold col-sm-1">Name
- </td>
+ class="bold col-sm-1">Name</td>
<td class="col-sm-3">{{ selectedItem.name }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Pool
- </td>
+ class="bold col-sm-1">Pool</td>
<td class="col-sm-3">{{ selectedItem.pool_name }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Data Pool
- </td>
+ class="bold col-sm-1">Data Pool</td>
<td class="col-sm-3">{{ selectedItem.data_pool | empty }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Created
- </td>
+ class="bold col-sm-1">Created</td>
<td class="col-sm-3">{{ selectedItem.timestamp | cdDate }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Size
- </td>
+ class="bold col-sm-1">Size</td>
<td class="col-sm-3">{{ selectedItem.size | dimlessBinary }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Objects
- </td>
+ class="bold col-sm-1">Objects</td>
<td class="col-sm-3">{{ selectedItem.num_objs | dimless }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Object size
- </td>
+ class="bold col-sm-1">Object size</td>
<td class="col-sm-3">{{ selectedItem.obj_size | dimlessBinary }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Features
- </td>
+ class="bold col-sm-1">Features</td>
<td class="col-sm-3">
<span *ngFor="let feature of selectedItem.features_name">
<span class="badge badge-pill badge-primary margin-right-sm">{{ feature }}</span>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Provisioned
- </td>
+ class="bold col-sm-1">Provisioned</td>
<td class="col-sm-3">
<span *ngIf="selectedItem.features_name?.indexOf('fast-diff') === -1">
<span class="text-muted"
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Total provisioned
- </td>
+ class="bold col-sm-1">Total provisioned</td>
<td class="col-sm-3">
<span *ngIf="selectedItem.features_name?.indexOf('fast-diff') === -1">
<span class="text-muted"
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Striping unit
- </td>
+ class="bold col-sm-1">Striping unit</td>
<td class="col-sm-3">{{ selectedItem.stripe_unit | dimlessBinary }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Striping count
- </td>
+ class="bold col-sm-1">Striping count</td>
<td class="col-sm-3">{{ selectedItem.stripe_count }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Parent
- </td>
+ class="bold col-sm-1">Parent</td>
<td class="col-sm-3">
<span *ngIf="selectedItem.parent">{{ selectedItem.parent.pool_name }}/{{ selectedItem.parent.image_name }}@{{ selectedItem.parent.snap_name }}</span>
<span *ngIf="!selectedItem.parent">-</span>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Block name prefix
- </td>
+ class="bold col-sm-1">Block name prefix</td>
<td class="col-sm-3">{{ selectedItem.block_name_prefix }}</td>
</tr>
<tr>
<td i18n
- class="bold col-sm-1">Order
- </td>
+ class="bold col-sm-1">Order</td>
<td class="col-sm-3">{{ selectedItem.order }}</td>
</tr>
</tbody>
name="name"
formControlName="name"
autofocus>
- <span i18n
- class="help-block"
+ <span class="help-block"
*ngIf="rbdForm.showError('name', formDir, 'required')">
- This field is required.
+ <ng-container i18n>This field is required.</ng-container>
</span>
</div>
</div>
*ngIf="mode !== 'editing' && poolPermission.read">
<option *ngIf="pools === null"
[ngValue]="null"
- i18n>Loading...
- </option>
+ i18n>Loading...</option>
<option *ngIf="pools !== null && pools.length === 0"
[ngValue]="null"
- i18n>-- No rbd pools available --
- </option>
+ i18n>-- No rbd pools available --</option>
<option *ngIf="pools !== null && pools.length > 0"
[ngValue]="null"
- i18n>-- Select a pool --
- </option>
+ i18n>-- Select a pool --</option>
<option *ngFor="let pool of pools"
[value]="pool.pool_name">{{ pool.pool_name }}</option>
</select>
- <span i18n
+ <span *ngIf="rbdForm.showError('pool', formDir, 'required')"
class="help-block"
- *ngIf="rbdForm.showError('pool', formDir, 'required')">
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
*ngIf="mode !== 'editing' && poolPermission.read">
<option *ngIf="dataPools === null"
[ngValue]="null"
- i18n>Loading...
- </option>
+ i18n>Loading...</option>
<option *ngIf="dataPools !== null && dataPools.length === 0"
[ngValue]="null"
- i18n>-- No data pools available --
- </option>
+ i18n>-- No data pools available --</option>
<option *ngIf="dataPools !== null && dataPools.length > 0"
[ngValue]="null">-- Select a data pool --
</option>
<option *ngFor="let dataPool of dataPools"
[value]="dataPool.pool_name">{{ dataPool.pool_name }}</option>
</select>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('dataPool', formDir, 'required')">
- This field is required.
- </span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('dataPool', formDir, 'required')"
+ i18n>This field is required.</span>
</div>
</div>
placeholder="e.g., 10GiB"
defaultUnit="GiB"
cdDimlessBinary>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('size', formDir, 'required')">
- This field is required.
- </span>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('size', formDir, 'invalidSizeObject')">
- You have to increase the size.
- </span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('size', formDir, 'required')"
+ i18n>This field is required.</span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('size', formDir, 'invalidSizeObject')"
+ i18n>You have to increase the size.</span>
</div>
</div>
formGroupName="features">
<label i18n
class="col-sm-3 control-label"
- for="features">
- Features
- </label>
+ for="features">Features</label>
<div class="col-sm-9">
<div class="checkbox checkbox-primary"
*ngFor="let feature of featuresList">
<!-- Advanced -->
<div class="row">
<div class="col-sm-12">
- <a i18n
+ <a
class="pull-right margin-right-md"
(click)="advancedEnabled = true"
- *ngIf="!advancedEnabled">
- Advanced...
- </a>
+ *ngIf="!advancedEnabled"
+ i18n>Advanced...</a>
</div>
</div>
<div *ngIf="advancedEnabled">
[ngClass]="{'has-error': rbdForm.showError('obj_size', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="size">Object size
- </label>
+ for="size">Object size</label>
<div class="col-sm-9">
<select id="obj_size"
name="obj_size"
<option *ngFor="let objectSize of objectSizes"
[value]="objectSize">{{ objectSize }}</option>
</select>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('stripingUnit', formDir, 'required')">
- This field is required because stripe count is defined!
- </span>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('stripingUnit', formDir, 'invalidStripingUnit')">
- Stripe unit is greater than object size.
- </span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('stripingUnit', formDir, 'required')"
+ i18n>This field is required because stripe count is defined!</span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('stripingUnit', formDir, 'invalidStripingUnit')"
+ i18n>Stripe unit is greater than object size.</span>
</div>
</div>
formControlName="stripingCount"
class="form-control"
type="number">
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('stripingCount', formDir, 'required')">
- This field is required because stripe unit is defined!
- </span>
- <span i18n
- class="help-block"
- *ngIf="rbdForm.showError('stripingCount', formDir, 'min')">
- Stripe count must be greater than 0.
- </span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('stripingCount', formDir, 'required')"
+ i18n>This field is required because stripe unit is defined!</span>
+ <span class="help-block"
+ *ngIf="rbdForm.showError('stripingCount', formDir, 'min')"
+ i18n>Stripe count must be greater than 0.</span>
</div>
</div>
(submitAction)="submit()">
<span i18n>{mode, select, editing {Update} cloning {Clone} copying {Copy} other {Create}}</span> RBD
</cd-submit-button>
- <button i18n
- type="button"
+ <button type="button"
class="btn btn-sm btn-default"
- routerLink="/block/rbd">
- Back
- </button>
+ routerLink="/block/rbd"
+ i18n>Back</button>
</div>
</div>
</div>
name="snapshotName"
formControlName="snapshotName"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="snapshotForm.showError('snapshotName', formDir, 'required')">
- This field is required.
- </span>
+ <span class="help-block"
+ *ngIf="snapshotForm.showError('snapshotName', formDir, 'required')"
+ i18n>This field is required.</span>
</div>
</div>
<div class="button-group text-right">
<cd-submit-button [form]="snapshotForm"
(submitAction)="submit()"
- i18n>
- { editing, select, true {Rename} other {Create}} Snapshot
- </cd-submit-button>
+ i18n>{ editing, select, true {Rename} other {Create}} Snapshot</cd-submit-button>
<button type="button"
class="btn btn-sm btn-default"
(click)="modalRef.hide()"
let-row="row"
let-value="value">
<ng-container *ngIf="row.cdIsExpired"
- i18n>Expired at
- </ng-container>
+ i18n>Expired at</ng-container>
<ng-container *ngIf="!row.cdIsExpired"
- i18n>Protected until
- </ng-container>
+ i18n>Protected until</ng-container>
{{ value | cdDate }}
</ng-template>
[bsConfig]="bsConfig"
formControlName="expiresAt"
bsDatepicker>
- <span i18n
- class="help-block"
- *ngIf="moveForm.showError('expiresAt', formDir, 'format')">
- Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".
- </span>
- <span i18n
- class="help-block"
- *ngIf="moveForm.showError('expiresAt', formDir, 'expired')">
- Protection has already expired. Please pick a future date or leave it empty.
- </span>
+ <span class="help-block"
+ *ngIf="moveForm.showError('expiresAt', formDir, 'format')"
+ i18n>Wrong date format. Please use "YYYY-MM-DD HH:mm:ss".</span>
+ <span class="help-block"
+ *ngIf="moveForm.showError('expiresAt', formDir, 'expired')"
+ i18n>Protection has already expired. Please pick a future date or leave it empty.</span>
</div>
</div>
<div class="button-group text-right">
<cd-submit-button i18n
[form]="moveForm"
- (submitAction)="moveImage()">
- Move Image
- </cd-submit-button>
+ (submitAction)="moveImage()">Move Image</cd-submit-button>
<button i18n
type="button"
class="btn btn-sm btn-default"
<div class="form-group">
<label class="center-block"
- i18n>Pool:
- </label>
+ i18n>Pool:</label>
<input class="form-control"
type="text"
placeholder="Pool name..."
<div class="modal-footer">
<div class="button-group text-right">
- <cd-submit-button i18n
- [form]="purgeForm"
- (submitAction)="purge()">
- Purge Trash
- </cd-submit-button>
+ <cd-submit-button [form]="purgeForm"
+ (submitAction)="purge()"
+ i18n>Purge Trash</cd-submit-button>
<button i18n
type="button"
class="btn btn-sm btn-default"
autofocus>
<span class="help-block"
*ngIf="restoreForm.showError('name', formDir, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
<div class="modal-footer">
<div class="button-group text-right">
- <cd-submit-button i18n
- [form]="restoreForm"
- (submitAction)="restore()">
- Restore Image
- </cd-submit-button>
+ <cd-submit-button [form]="restoreForm"
+ (submitAction)="restore()"
+ i18n>Restore Image</cd-submit-button>
<button i18n
type="button"
class="btn btn-sm btn-default"
<!-- Name -->
<div class="form-group">
<label i18n
- class="control-label col-sm-3">Name
- </label>
+ class="control-label col-sm-3">Name</label>
<div class="col-sm-9">
<input class="form-control"
type="text"
<div class="form-group"
*ngIf="configForm.getValue('desc')">
<label i18n
- class="control-label col-sm-3">Description
- </label>
+ class="control-label col-sm-3">Description</label>
<div class="col-sm-9">
<textarea class="form-control resize-vertical"
id="desc"
<div class="form-group"
*ngIf="configForm.getValue('long_desc')">
<label i18n
- class="control-label col-sm-3">Long description
- </label>
+ class="control-label col-sm-3">Long description</label>
<div class="col-sm-9">
<textarea class="form-control resize-vertical"
id="long_desc"
<div class="form-group"
*ngIf="configForm.getValue('default') !== ''">
<label i18n
- class="control-label col-sm-3">Default
- </label>
+ class="control-label col-sm-3">Default</label>
<div class="col-sm-9">
<input class="form-control"
type="text"
<div class="form-group"
*ngIf="configForm.getValue('daemon_default') !== ''">
<label i18n
- class="control-label col-sm-3">Daemon default
- </label>
+ class="control-label col-sm-3">Daemon default</label>
<div class="col-sm-9">
<input class="form-control"
type="text"
<div class="form-group"
*ngIf="configForm.getValue('services').length > 0">
<label i18n
- class="control-label col-sm-3">Services
- </label>
+ class="control-label col-sm-3">Services</label>
<div class="col-sm-9">
<span *ngFor="let service of configForm.getValue('services')"
class="form-component-badge">
</span>
<span class="help-block"
*ngIf="configForm.showError(section, formDir, 'max')"
- i18n>
- The entered value is too high! It must not be greater than {{ maxValue }}.
- </span>
+ i18n>The entered value is too high! It must not be greater than {{ maxValue }}.</span>
<span class="help-block"
*ngIf="configForm.showError(section, formDir, 'min')"
- i18n>
- The entered value is too low! It must not be lower than {{ minValue }}.
- </span>
+ i18n>The entered value is too low! It must not be lower than {{ minValue }}.</span>
</div>
</div>
</div>
<button type="button"
class="btn btn-sm btn-default"
routerLink="/configuration"
- i18n>
- Back
- </button>
+ i18n>Back</button>
</div>
</div>
</div>
[data]="osd.details.osd_metadata">
</cd-table-key-value>
<ng-template #noMetaData>
- <cd-warning-panel i18n>
- Metadata not available
- </cd-warning-panel>
+ <cd-warning-panel i18n>Metadata not available</cd-warning-panel>
</ng-template>
</tab>
<tab heading="Performance counter"
</tab>
<tab heading="Histogram"
i18n-heading>
- <cd-warning-panel i18n
- *ngIf="osd.loaded && osd.histogram_failed">
- Histogram not available: {{ osd.histogram_failed }}
- </cd-warning-panel>
+ <cd-warning-panel *ngIf="osd.loaded && osd.histogram_failed"
+ i18n>Histogram not available: {{ osd.histogram_failed }}</cd-warning-panel>
<div class="row"
*ngIf="osd.loaded && osd.details.histogram">
<cd-modal [modalRef]="bsModalRef">
<ng-container class="modal-title"
- i18n>Cluster-wide OSD Flags
- </ng-container>
+ i18n>Cluster-wide OSD Flags</ng-container>
<ng-container class="modal-content">
<form name="osdFlagsForm"
<div class="button-group text-right">
<cd-submit-button (submitAction)="submitAction()"
[form]="osdFlagsForm"
- i18n>
- Submit
- </cd-submit-button>
+ i18n>Submit</cd-submit-button>
<button class="btn btn-link btn-sm"
(click)="bsModalRef.hide()"
- i18n>
- Cancel
- </button>
+ i18n>Cancel</button>
</div>
</div>
</form>
</ng-template>
<ng-template #markOsdConfirmationTpl
- i18n
let-markActionDescription="markActionDescription">
- <strong>OSD {{ selection.first().id }}</strong> will be marked
- <strong>{{ markActionDescription }}</strong> if you proceed.
+ <ng-container i18n><strong>OSD {{ selection.first().id }}</strong> will be marked
+ <strong>{{ markActionDescription }}</strong> if you proceed.</ng-container>
</ng-template>
<ng-template #criticalConfirmationTpl
{{ safeToDestroyResult.message }}
</cd-warning-panel>
</div>
- <ng-container i18n>
- <strong>OSD {{ selection.first().id }}</strong> will be
- <strong>{{ actionDescription }}</strong> if you proceed.
- </ng-container>
+ <ng-container i18n><strong>OSD {{ selection.first().id }}</strong> will be
+ <strong>{{ actionDescription }}</strong> if you proceed.</ng-container>
</ng-template>
<cd-modal [modalRef]="bsModalRef">
<ng-container class="modal-title"
- i18n>
- Reweight OSD
- </ng-container>
+ i18n>Reweight OSD</ng-container>
<ng-container class="modal-content">
<form class="form-horizontal"
[value]="currentWeight">
<span class="help-block"
*ngIf="weight.errors">
- <span *ngIf="weight.errors?.required" i18n>
- This field is required.
- </span>
- <span *ngIf="weight.errors?.max || weight.errors?.min" i18n>
- The value needs to be between 0 and 1.
- </span>
+ <span *ngIf="weight.errors?.required"
+ i18n>This field is required.</span>
+ <span *ngIf="weight.errors?.max || weight.errors?.min"
+ i18n>The value needs to be between 0 and 1.</span>
</span>
</div>
</div>
<cd-submit-button (submitAction)="reweight()"
[form]="reweightForm"
[disabled]="reweightForm.invalid"
- i18n>
- Reweight
- </cd-submit-button>
+ i18n>Reweight</cd-submit-button>
<button class="btn btn-link btn-sm"
(click)="bsModalRef.hide()"
- i18n>
- Cancel
- </button>
+ i18n>Cancel</button>
</div>
</form>
</ng-container>
<cd-modal [modalRef]="bsModalRef">
<ng-container class="modal-title"
- i18n>
- OSDs {deep, select, 1 {Deep }}Scrub
- </ng-container>
+ i18n>OSDs {deep, select, 1 {Deep }}Scrub</ng-container>
<ng-container class="modal-content">
<form name="scrubForm"
novalidate>
<div class="modal-body">
<div *ngIf="selected.length === 1">
- <p i18n>
- You are about to apply a {deep, select, 1 {deep }}scrub to the OSD
- <strong>{{ selected[0].id }}</strong>.
- </p>
+ <p i18n>You are about to apply a {deep, select, 1 {deep }}scrub to
+ the OSD <strong>{{ selected[0].id }}</strong>.</p>
</div>
</div>
<div class="modal-footer">
<cd-submit-button (submitAction)="scrub()"
[form]="scrubForm"
- i18n>
- Submit
- </cd-submit-button>
+ i18n>Submit</cd-submit-button>
<button class="btn btn-link btn-sm"
(click)="bsModalRef.hide()"
- i18n>
- Cancel
- </button>
+ i18n>Cancel</button>
</div>
</form>
</ng-container>
<ng-container *ngIf="contentData.health?.checks?.length > 0">
<ng-template #healthChecks>
<p class="logs-link"
- i18n>
- → See <a (click)="viewportScroller.scrollToAnchor('logs')">Logs</a> for more details.
- </p>
+ i18n>→ See <a (click)="viewportScroller.scrollToAnchor('logs')">Logs</a> for more details.</p>
<ul>
<li *ngFor="let check of contentData.health.checks">
<span [ngStyle]="check.severity | healthColor">{{ check.type }}</span>: {{ check.summary.message }}
*ngIf="contentData.pg_info">
<ng-template #pgStatus>
<p class="logs-link"
- i18n>
- → See <a (click)="viewportScroller.scrollToAnchor('logs')">Logs</a> for more details.
- </p>
+ i18n>→ See <a (click)="viewportScroller.scrollToAnchor('logs')">Logs</a> for more details.</p>
<ul>
<li *ngFor="let pgStatesText of contentData.pg_info.statuses | keyvalue">
{{ pgStatesText.key }}: {{ pgStatesText.value }}
</ng-template>
</cd-table>
<ng-template #warning>
- <cd-warning-panel i18n>
- Performance counters not available
- </cd-warning-panel>
+ <cd-warning-panel i18n>Performance counters not available</cd-warning-panel>
</ng-template>
<div class="modal-header">
<h4 class="modal-title pull-left"
- i18n>Add erasure code profile
- </h4>
+ i18n>Add erasure code profile</h4>
<button type="button"
class="close pull-right"
aria-label="Close"
placeholder="Name..."
formControlName="name"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="form.showError('name', frm, 'required')">
- This field is required!
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('name', frm, 'required')"
+ i18n>This field is required!</span>
<span class="help-block"
*ngIf="form.showError('name', frm, 'pattern')">
The name can only consist of alphanumeric characters, dashes and underscores.
</span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('name', frm, 'uniqueName')">
- The chosen erasure code profile name is already in use.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('name', frm, 'uniqueName')"
+ i18n>The chosen erasure code profile name is already in use.</span>
</div>
</div>
formControlName="plugin">
<option *ngIf="!plugins"
ngValue=""
- i18n>
- Loading...
- </option>
+ i18n>Loading...</option>
<option *ngFor="let plugin of plugins"
[ngValue]="plugin">
{{ plugin }}
</option>
</select>
- <span i18n
- class="help-block"
- *ngIf="form.showError('name', frm, 'required')">
- This field is required!
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('name', frm, 'required')"
+ i18n>This field is required!</span>
</div>
</div>
<div class="form-group"
[ngClass]="{'has-error': form.showError('k', frm)}">
- <label i18n
- for="k"
+ <label for="k"
class="control-label col-sm-3">
- Data chunks (k)
+ <ng-container i18n>Data chunks (k)</ng-container>
<span class="required"
*ngIf="requiredControls.includes('k')"></span>
<cd-helper [html]="tooltips.k">
ng-model="$ctrl.erasureCodeProfile.k"
placeholder="Data chunks..."
formControlName="k">
- <span i18n
- class="help-block"
- *ngIf="form.showError('k', frm, 'required')">
- This field is required!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('k', frm, 'min')">
- Must be equal to or greater than 2.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('k', frm, 'required')"
+ i18n>This field is required!</span>
+ <span class="help-block"
+ *ngIf="form.showError('k', frm, 'min')"
+ i18n>Must be equal to or greater than 2.</span>
</div>
</div>
class="form-control"
placeholder="Coding chunks..."
formControlName="m">
- <span i18n
- class="help-block"
- *ngIf="form.showError('m', frm, 'required')">
- This field is required!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('m', frm, 'min')">
- Must be equal to or greater than 1.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('m', frm, 'required')"
+ i18n>This field is required!</span>
+ <span class="help-block"
+ *ngIf="form.showError('m', frm, 'min')"
+ i18n>Must be equal to or greater than 1.</span>
</div>
</div>
class="form-control"
placeholder="Coding chunks..."
formControlName="c">
- <span i18n
- class="help-block"
- *ngIf="form.showError('c', frm, 'min')">
- Must be equal to or greater than 1.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('c', frm, 'min')"
+ i18n>Must be equal to or greater than 1.</span>
</div>
</div>
class="form-control"
placeholder="Coding chunks..."
formControlName="l">
- <span i18n
- class="help-block"
- *ngIf="form.showError('l', frm, 'required')">
- This field is required!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('l', frm, 'min')">
- Must be equal to or greater than 1.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('l', frm, 'required')"
+ i18n>This field is required!</span>
+ <span class="help-block"
+ *ngIf="form.showError('l', frm, 'min')"
+ i18n>Must be equal to or greater than 1.</span>
</div>
</div>
formControlName="crushFailureDomain">
<option *ngIf="!failureDomains"
ngValue=""
- i18n>
- Loading...
- </option>
+ i18n>Loading...</option>
<option *ngFor="let domain of failureDomains"
[ngValue]="domain">
{{ domain }}
formControlName="crushLocality">
<option *ngIf="!failureDomains"
ngValue=""
- i18n>
- Loading...
- </option>
+ i18n>Loading...</option>
<option *ngIf="failureDomains && failureDomains.length > 0"
ngValue=""
- i18n>
- None
- </option>
+ i18n>None</option>
<option *ngFor="let domain of failureDomains"
[ngValue]="domain">
{{ domain }}
class="form-control"
placeholder="Packetsize..."
formControlName="packetSize">
- <span i18n
- class="help-block"
- *ngIf="form.showError('packetSize', frm, 'min')">
- Must be equal to or greater than 1.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('packetSize', frm, 'min')"
+ i18n>Must be equal to or greater than 1.</span>
</div>
</div>
name="crushDeviceClass"
formControlName="crushDeviceClass">
<option ngValue=""
- i18n>
- any
- </option>
+ i18n>any</option>
<option *ngFor="let deviceClass of devices"
[ngValue]="deviceClass">
{{ deviceClass }}
<div class="modal-footer">
<cd-submit-button (submitAction)="onSubmit()"
[form]="frm"
- i18n>
- Add
- </cd-submit-button>
+ i18n>Add</cd-submit-button>
<button class="btn btn-sm btn-default"
type="button"
(click)="bsModalRef.hide()"
- i18n>Close
- </button>
+ i18n>Close</button>
</div>
</form>
i18n-placeholder
formControlName="name"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="form.showError('name', formDir, 'required')">
- This field is required!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('name', formDir, 'uniqueName')">
- The chosen Ceph pool name is already in use.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('name', formDir, 'required')"
+ i18n>This field is required!</span>
+ <span class="help-block"
+ *ngIf="form.showError('name', formDir, 'uniqueName')"
+ i18n>The chosen Ceph pool name is already in use.</span>
</div>
</div>
formControlName="poolType"
name="poolType">
<option ngValue=""
- i18n>
- -- Select a pool type --
- </option>
+ i18n>-- Select a pool type --</option>
<option *ngFor="let poolType of data.poolTypes"
[value]="poolType">
{{ poolType }}
</option>
</select>
- <span i18n
- class="help-block"
- *ngIf="form.showError('poolType', formDir, 'required')">
- This field is required!
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('poolType', formDir, 'required')"
+ i18n>This field is required!</span>
</div>
</div>
(keyup)="pgKeyUp($event)"
(blur)="pgUpdate()"
required>
- <span i18n
- class="help-block"
- *ngIf="form.showError('pgNum', formDir, 'required')">
- This field is required!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('pgNum', formDir, 'min')">
- At least one placement group is needed!
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('pgNum', formDir, '34')">
- Your cluster can't handle this many PGs. Please recalculate the PG amount needed.
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('pgNum', formDir, 'noDecrease')">
- You can only increase the number of PGs of an existing pool.
- Currently your pool has {{ data.pool.pg_num }} PGs.
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('pgNum', formDir, 'required')"
+ i18n>This field is required!</span>
+ <span class="help-block"
+ *ngIf="form.showError('pgNum', formDir, 'min')"
+ i18n>At least one placement group is needed!</span>
+ <span class="help-block"
+ *ngIf="form.showError('pgNum', formDir, '34')"
+ i18n>Your cluster can't handle this many PGs. Please recalculate the PG amount needed.</span>
+ <span class="help-block"
+ *ngIf="form.showError('pgNum', formDir, 'noDecrease')"
+ i18n>You can only increase the number of PGs of an existing pool.
+ Currently your pool has {{ data.pool.pg_num }} PGs.</span>
<span class="help-block">
<a i18n
target="_blank"
href="http://ceph.com/pgcalc">Calculation help</a>
</span>
<span class="help-block"
- i18n
- *ngIf="externalPgChange">
- The current PGs settings were calculated for you, you should make sure the values
- suite your needs before submit.
- </span>
+ *ngIf="externalPgChange"
+ i18n>The current PGs settings were calculated for you, you
+ should make sure the values suite your needs before submit.</span>
</div>
</div>
*ngIf="form.getValue('poolType') && current.rules.length > 0">
<label class="control-label col-sm-3"
for="crushRule"
- i18n>
- Crush ruleset
- </label>
+ i18n>Crush ruleset</label>
<div class="col-sm-9">
<div class="input-group">
<select class="form-control"
id="crushRule"
formControlName="crushRule"
name="crushSet">
- <option i18n
- [ngValue]="null">
- -- Select a crush rule --
- </option>
+ <option [ngValue]="null"
+ i18n>-- Select a crush rule --</option>
<option *ngFor="let rule of current.rules"
[ngValue]="rule">
{{ rule.rule_name }}
</tabset>
</span>
<span class="help-block"
- i18n
- *ngIf="form.showError('crushRule', formDir, 'tooFewOsds')">
- The rule can't be used in the current cluster as it has to few OSDs to meet the
- minimum required OSD by this rule.
- </span>
+ *ngIf="form.showError('crushRule', formDir, 'tooFewOsds')"
+ i18n>The rule can't be used in the current cluster as it has
+ to few OSDs to meet the minimum required OSD by this rule.</span>
</div>
</div>
<span class="help-block"
*ngIf="form.showError('size', formDir)">
<ul class="list-inline">
- <li i18n>
- Minimum: {{ getMinSize() }}
- </li>
- <li i18n>
- Maximum: {{ getMaxSize() }}
- </li>
+ <li i18n>Minimum: {{ getMinSize() }}</li>
+ <li i18n>Maximum: {{ getMaxSize() }}</li>
</ul>
</span>
<span class="help-block"
- i18n
- *ngIf="form.showError('size', formDir)">
- The size specified is out of range.
- A value from {{ getMinSize() }} to {{ getMaxSize() }} is valid.
- </span>
+ *ngIf="form.showError('size', formDir)"
+ i18n>The size specified is out of range. A value from
+ {{ getMinSize() }} to {{ getMaxSize() }} is valid.</span>
</div>
</div>
*ngIf="form.getValue('poolType') === 'erasure'">
<label i18n
class="control-label col-sm-3"
- for="erasureProfile">
- Erasure code profile
- </label>
+ for="erasureProfile">Erasure code profile</label>
<div class="col-sm-9">
<div class="input-group">
<select class="form-control"
formControlName="erasureProfile">
<option *ngIf="!ecProfiles"
ngValue=""
- i18n>
- Loading...
- </option>
+ i18n>Loading...</option>
<option *ngIf="ecProfiles && ecProfiles.length === 0"
- i18n
- [ngValue]="null">
- -- No erasure code profile available --
- </option>
+ [ngValue]="null"
+ i18n>-- No erasure code profile available --</option>
<option *ngIf="ecProfiles && ecProfiles.length > 0"
- i18n
- [ngValue]="null">
- -- Select an erasure code profile --
- </option>
+ [ngValue]="null"
+ i18n>-- Select an erasure code profile --</option>
<option *ngFor="let ecp of ecProfiles"
[ngValue]="ecp">
{{ ecp.name }}
<div class="form-group"
*ngIf="info.is_all_bluestore && form.getValue('poolType') === 'erasure'">
<label i18n
- class="control-label col-sm-3">
- Flags
- </label>
+ class="control-label col-sm-3">Flags</label>
<div class="col-sm-9">
<div class="input-group">
<div class="checkbox checkbox-primary">
<input id="ec-overwrites"
type="checkbox"
formControlName="ecOverwrites">
- <label i18n
- for="ec-overwrites">
- EC Overwrites
- </label>
+ <label for="ec-overwrites"
+ i18n>EC Overwrites</label>
</div>
</div>
</div>
<div class="form-group">
<label i18n
class="col-sm-3 control-label"
- for="applications">
- Applications
- </label>
+ for="applications">Applications</label>
<div class="col-sm-9">
<span class="form-control no-border full-height">
<cd-select-badges id="applications"
<div class="form-group">
<label i18n
class="control-label col-sm-3"
- for="mode">
- Mode
- </label>
+ for="mode">Mode</label>
<div class="col-sm-9">
<select class="form-control"
id="mode"
[ngClass]="{'has-error': form.showError('algorithm', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="algorithm">
- Algorithm
- </label>
+ for="algorithm">Algorithm</label>
<div class="col-sm-9">
<select class="form-control"
id="algorithm"
formControlName="algorithm">
<option *ngIf="!info.compression_algorithms"
ngValue=""
- i18n>
- Loading...
- </option>
+ i18n>Loading...</option>
<option *ngIf="info.compression_algorithms && info.compression_algorithms.length === 0"
i18n
- ngValue="">
- -- No erasure compression algorithm available --
- </option>
+ ngValue="">-- No erasure compression algorithm available --</option>
<option *ngFor="let algorithm of info.compression_algorithms"
[value]="algorithm">
{{ algorithm }}
[ngClass]="{'has-error': form.showError('minBlobSize', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="minBlobSize">
- Minimum blob size
- </label>
+ for="minBlobSize">Minimum blob size</label>
<div class="col-sm-9">
<input id="minBlobSize"
name="minBlobSize"
placeholder="e.g., 128KiB"
defaultUnit="KiB"
cdDimlessBinary>
- <span i18n
- class="help-block"
- *ngIf="form.showError('minBlobSize', formDir, 'min')">
- Value should be greater than 0
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('minBlobSize', formDir, 'maximum')">
- Value should be greater than the maximum blob size
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('minBlobSize', formDir, 'min')"
+ i18n>Value should be greater than 0</span>
+ <span class="help-block"
+ *ngIf="form.showError('minBlobSize', formDir, 'maximum')"
+ i18n>Value should be greater than the maximum blob size</span>
</div>
</div>
[ngClass]="{'has-error': form.showError('maxBlobSize', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="maxBlobSize">
- Maximum blob size
- </label>
+ for="maxBlobSize">Maximum blob size</label>
<div class="col-sm-9">
<input id="maxBlobSize"
type="text"
placeholder="e.g., 512KiB"
defaultUnit="KiB"
cdDimlessBinary>
- <span i18n
- class="help-block"
- *ngIf="form.showError('maxBlobSize', formDir, 'min')">
- Value should be greater than 0
- </span>
- <span i18n
- class="help-block"
- *ngIf="form.showError('maxBlobSize', formDir, 'minimum')">
- Value should be greater than the minimum blob size
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('maxBlobSize', formDir, 'min')"
+ i18n>Value should be greater than 0</span>
+ <span class="help-block"
+ *ngIf="form.showError('maxBlobSize', formDir, 'minimum')"
+ i18n>Value should be greater than the minimum blob size</span>
</div>
</div>
[ngClass]="{'has-error': form.showError('ratio', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="ratio">
- Ratio
- </label>
+ for="ratio">Ratio</label>
<div class="col-sm-9">
<input id="ratio"
name="ratio"
class="form-control"
i18n-placeholder
placeholder="Compression ratio">
- <span i18n
- class="help-block"
- *ngIf="form.showError('ratio', formDir, 'min') || form.showError('ratio', formDir, 'max')">
- Value should be between 0.0 and 1.0
- </span>
+ <span class="help-block"
+ *ngIf="form.showError('ratio', formDir, 'min') || form.showError('ratio', formDir, 'max')"
+ i18n>Value should be between 0.0 and 1.0</span>
</div>
</div>
<button i18n
type="button"
class="btn btn-sm btn-default"
- routerLink="/pool">
- Back
- </button>
+ routerLink="/pool">Back</button>
</div>
</div>
</div>
<cd-info-panel>
{{ message }}
- <ng-container i18n>
- Please consult the <a href="{{docsUrl}}" target="_blank">documentation</a> on how to configure and enable the Object Gateway management functionality.
- </ng-container>
+ <ng-container i18n>Please consult the <a href="{{docsUrl}}" target="_blank">documentation</a>
+ on how to configure and enable the Object Gateway management functionality.</ng-container>
</cd-info-panel>
<cd-loading-panel *ngIf="editing && loading && !error"
- i18n>
- Loading bucket data...
-</cd-loading-panel>
+ i18n>Loading bucket data...</cd-loading-panel>
<cd-error-panel *ngIf="editing && error"
(backAction)="goToListView()"
- i18n>
- The bucket data could not be loaded.
-</cd-error-panel>
+ i18n>The bucket data could not be loaded.</cd-error-panel>
<div class="col-sm-12 col-lg-6"
*ngIf="!loading && !error">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"
- i18n>
- {editing, select, 1 {Edit} other {Add}} bucket
- </h3>
+ i18n>{editing, select, 1 {Edit} other {Add}} bucket</h3>
</div>
<div class="panel-body">
<!-- Name -->
<div class="form-group"
[ngClass]="{'has-error': bucketForm.showError('bucket', frm)}">
- <label i18n
- class="control-label col-sm-3"
- for="bucket">Name
+ <label class="control-label col-sm-3"
+ for="bucket">
+ <ng-container i18n>Name</ng-container>
<span class="required"
*ngIf="!editing"></span>
</label>
formControlName="bucket"
[readonly]="editing"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="bucketForm.showError('bucket', frm, 'required')">
- This field is required.
- </span>
- <span i18n
- class="help-block"
- *ngIf="bucketForm.showError('bucket', frm, 'bucketNameInvalid')">
- The value is not valid.
- </span>
- <span i18n
- class="help-block"
- *ngIf="bucketForm.showError('bucket', frm, 'bucketNameExists')">
- The chosen name is already in use.
- </span>
+ <span class="help-block"
+ *ngIf="bucketForm.showError('bucket', frm, 'required')"
+ i18n>This field is required.</span>
+ <span class="help-block"
+ *ngIf="bucketForm.showError('bucket', frm, 'bucketNameInvalid')"
+ i18n>The value is not valid.</span>
+ <span class="help-block"
+ *ngIf="bucketForm.showError('bucket', frm, 'bucketNameExists')"
+ i18n>The chosen name is already in use.</span>
</div>
</div>
formControlName="owner">
<option i18n
*ngIf="owners === null"
- [ngValue]="null">Loading...
- </option>
+ [ngValue]="null">Loading...</option>
<option i18n
*ngIf="owners !== null"
- [ngValue]="null">-- Select a user --
- </option>
+ [ngValue]="null">-- Select a user --</option>
<option *ngFor="let owner of owners"
[value]="owner">{{ owner }}</option>
</select>
- <span i18n
- class="help-block"
- *ngIf="bucketForm.showError('owner', frm, 'required')">
- This field is required.
- </span>
+ <span class="help-block"
+ *ngIf="bucketForm.showError('owner', frm, 'required')"
+ i18n>This field is required.</span>
</div>
</div>
<button i18n
type="button"
class="btn btn-sm btn-default"
- routerLink="/rgw/bucket">
- Back
- </button>
+ routerLink="/rgw/bucket">Back</button>
</div>
</div>
</div>
<div class="modal-header">
<h4 class="modal-title pull-left"
- i18n>Capability
- </h4>
+ i18n>Capability</h4>
<button type="button"
class="close pull-right"
aria-label="Close"
autofocus>
<option i18n
*ngIf="types !== null"
- [ngValue]="null">-- Select a type --
- </option>
+ [ngValue]="null">-- Select a type --</option>
<option *ngFor="let type of types"
[value]="type">{{ type }}</option>
</select>
<span class="help-block"
*ngIf="formGroup.showError('type', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
class="form-control"
formControlName="perm">
<option i18n
- [ngValue]="null">-- Select a permission --
- </option>
+ [ngValue]="null">-- Select a permission --</option>
<option *ngFor="let perm of ['read', 'write', '*']"
[value]="perm">
{{ perm }}
</select>
<span class="help-block"
*ngIf="formGroup.showError('perm', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
<button class="btn btn-sm btn-default"
type="button"
(click)="bsModalRef.hide()"
- i18n>Close
- </button>
+ i18n>Close</button>
</div>
</form>
<cd-loading-panel *ngIf="editing && loading && !error"
- i18n>
- Loading user data...
-</cd-loading-panel>
+ i18n>Loading user data...</cd-loading-panel>
<cd-error-panel *ngIf="editing && error"
(backAction)="goToListView()"
- i18n>
- The user data could not be loaded.
-</cd-error-panel>
+ i18n>The user data could not be loaded.</cd-error-panel>
<div class="col-sm-12 col-lg-6"
*ngIf="!loading && !error">
novalidate>
<div class="panel panel-default">
<div class="panel-heading">
- <h3 class="panel-title">
- {editing, select, 1 {Edit} other {Add}} user
- </h3>
+ <h3 class="panel-title">{editing, select, 1 {Edit} other {Add}} user</h3>
</div>
<div class="panel-body">
autofocus>
<span class="help-block"
*ngIf="userForm.showError('user_id', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('user_id', frm, 'notUnique')"
- i18n>
- The chosen user ID is already in use.
- </span>
+ i18n>The chosen user ID is already in use.</span>
</div>
</div>
formControlName="display_name">
<span class="help-block"
*ngIf="userForm.showError('display_name', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
[ngClass]="{'has-error': userForm.showError('email', frm)}">
<label class="control-label col-sm-3"
for="email"
- i18n>Email address
- </label>
+ i18n>Email address</label>
<div class="col-sm-9">
<input id="email"
class="form-control"
formControlName="email">
<span class="help-block"
*ngIf="userForm.showError('email', frm, 'email')"
- i18n>
- This is not a valid email address.
- </span>
+ i18n>This is not a valid email address.</span>
</div>
</div>
formControlName="max_buckets">
<span class="help-block"
*ngIf="userForm.showError('max_buckets', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('max_buckets', frm, 'min')"
- i18n>
- The entered value must be >= 0.
- </span>
+ i18n>The entered value must be >= 0.</span>
</div>
</div>
type="checkbox"
formControlName="suspended">
<label for="suspended"
- i18n>Suspended
- </label>
+ i18n>Suspended</label>
</div>
</div>
</div>
type="checkbox"
formControlName="generate_key">
<label for="generate_key"
- i18n>Auto-generate key
- </label>
+ i18n>Auto-generate key</label>
</div>
</div>
</div>
</div>
<span class="help-block"
*ngIf="userForm.showError('access_key', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
</div>
<span class="help-block"
*ngIf="userForm.showError('secret_key', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
</fieldset>
<span *ngIf="subusers.length === 0"
class="form-control no-border">
<span class="text-muted"
- i18n>
- There are no subusers.
- </span>
+ i18n>There are no subusers.</span>
</span>
<span *ngFor="let subuser of subusers; let i=index;">
<!-- S3 keys -->
<label class="col-sm-3 control-label"
- i18n>S3
- </label>
+ i18n>S3</label>
<div class="col-sm-9">
<span *ngIf="s3Keys.length === 0"
class="form-control no-border">
<span class="text-muted"
- i18n>
- There are no keys.
- </span>
+ i18n>There are no keys.</span>
</span>
<span *ngFor="let key of s3Keys; let i=index;">
<!-- Swift keys -->
<label class="col-sm-3 control-label"
- i18n>Swift
- </label>
+ i18n>Swift</label>
<div class="col-sm-9">
<span *ngIf="swiftKeys.length === 0"
class="form-control no-border">
<span class="text-muted"
- i18n>
- There are no keys.
- </span>
+ i18n>There are no keys.</span>
</span>
<span *ngFor="let key of swiftKeys; let i=index;">
<span *ngIf="capabilities.length === 0"
class="form-control no-border">
<span class="text-muted"
- i18n>
- There are no capabilities.
- </span>
+ i18n>There are no capabilities.</span>
</span>
<span *ngFor="let cap of capabilities; let i=index;">
type="checkbox"
formControlName="user_quota_enabled">
<label for="user_quota_enabled"
- i18n>Enabled
- </label>
+ i18n>Enabled</label>
</div>
</div>
</div>
type="checkbox"
formControlName="user_quota_max_size_unlimited">
<label for="user_quota_max_size_unlimited"
- i18n>Unlimited size
- </label>
+ i18n>Unlimited size</label>
</div>
</div>
</div>
cdDimlessBinary>
<span class="help-block"
*ngIf="userForm.showError('user_quota_max_size', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('user_quota_max_size', frm, 'quotaMaxSize')"
- i18n>
- The value is not valid.
- </span>
+ i18n>The value is not valid.</span>
</div>
</div>
type="checkbox"
formControlName="user_quota_max_objects_unlimited">
<label for="user_quota_max_objects_unlimited"
- i18n>Unlimited objects
- </label>
+ i18n>Unlimited objects</label>
</div>
</div>
</div>
formControlName="user_quota_max_objects">
<span class="help-block"
*ngIf="userForm.showError('user_quota_max_objects', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('user_quota_max_objects', frm, 'min')"
- i18n>
- The entered value must be >= 0.
- </span>
+ i18n>The entered value must be >= 0.</span>
</div>
</div>
</fieldset>
type="checkbox"
formControlName="bucket_quota_enabled">
<label for="bucket_quota_enabled"
- i18n>Enabled
- </label>
+ i18n>Enabled</label>
</div>
</div>
</div>
type="checkbox"
formControlName="bucket_quota_max_size_unlimited">
<label for="bucket_quota_max_size_unlimited"
- i18n>Unlimited size
- </label>
+ i18n>Unlimited size</label>
</div>
</div>
</div>
cdDimlessBinary>
<span class="help-block"
*ngIf="userForm.showError('bucket_quota_max_size', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('bucket_quota_max_size', frm, 'quotaMaxSize')"
- i18n>
- The value is not valid.
- </span>
+ i18n>The value is not valid.</span>
</div>
</div>
type="checkbox"
formControlName="bucket_quota_max_objects_unlimited">
<label for="bucket_quota_max_objects_unlimited"
- i18n>Unlimited objects
- </label>
+ i18n>Unlimited objects</label>
</div>
</div>
</div>
formControlName="bucket_quota_max_objects">
<span class="help-block"
*ngIf="userForm.showError('bucket_quota_max_objects', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="userForm.showError('bucket_quota_max_objects', frm, 'min')"
- i18n>
- The entered value must be >= 0.
- </span>
+ i18n>The entered value must be >= 0.</span>
</div>
</div>
</fieldset>
<button class="btn btn-sm btn-default"
type="button"
routerLink="/rgw/user"
- i18n>
- Back
- </button>
+ i18n>Back</button>
</div>
</div>
</div>
<div class="modal-header">
<h4 class="modal-title pull-left"
- i18n>S3 key
- </h4>
+ i18n>S3 key</h4>
<button type="button"
class="close pull-right"
aria-label="Close"
autofocus>
<option i18n
*ngIf="userCandidates !== null"
- [ngValue]="null">-- Select a username --
- </option>
+ [ngValue]="null">-- Select a username --</option>
<option *ngFor="let userCandidate of userCandidates"
[value]="userCandidate">{{ userCandidate }}</option>
</select>
<span class="help-block"
*ngIf="formGroup.showError('user', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
type="checkbox"
formControlName="generate_key">
<label for="generate_key"
- i18n>Auto-generate key
- </label>
+ i18n>Auto-generate key</label>
</div>
</div>
</div>
</div>
<span class="help-block"
*ngIf="formGroup.showError('access_key', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
</div>
<span class="help-block"
*ngIf="formGroup.showError('secret_key', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
<cd-submit-button *ngIf="!viewing"
(submitAction)="onSubmit()"
[form]="formGroup"
- i18n>Add
- </cd-submit-button>
+ i18n>Add</cd-submit-button>
<button class="btn btn-sm btn-default"
type="button"
(click)="bsModalRef.hide()"
- i18n>Close
- </button>
+ i18n>Close</button>
</div>
</form>
<div class="modal-header">
<h4 class="modal-title pull-left"
- i18n>Subuser
- </h4>
+ i18n>Subuser</h4>
<button type="button"
class="close pull-right"
aria-label="Close"
[ngClass]="{'has-error': formGroup.showError('uid', frm)}">
<label class="control-label col-sm-3"
for="uid"
- i18n>Username
- </label>
+ i18n>Username</label>
<div class="col-sm-9">
<input id="uid"
class="form-control"
autofocus>
<span class="help-block"
*ngIf="formGroup.showError('subuid', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
<span class="help-block"
*ngIf="formGroup.showError('subuid', frm, 'subuserIdExists')"
- i18n>
- The chosen subuser ID is already in use.
- </span>
+ i18n>The chosen subuser ID is already in use.</span>
</div>
</div>
class="form-control"
formControlName="perm">
<option i18n
- [ngValue]="null">
- -- Select a permission --
- </option>
+ [ngValue]="null">-- Select a permission --</option>
<option *ngFor="let perm of ['read', 'write']"
[value]="perm">
{{ perm }}
</option>
<option i18n
- value="read-write">
- read, write
- </option>
+ value="read-write">read, write</option>
<option i18n
- value="full-control">
- full
- </option>
+ value="full-control">full</option>
</select>
<span class="help-block"
*ngIf="formGroup.showError('perm', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
type="checkbox"
formControlName="generate_secret">
<label for="generate_secret"
- i18n>Auto-generate secret
- </label>
+ i18n>Auto-generate secret</label>
</div>
</div>
</div>
</div>
<span class="help-block"
*ngIf="formGroup.showError('secret_key', frm, 'required')"
- i18n>
- This field is required.
- </span>
+ i18n>This field is required.</span>
</div>
</div>
<button class="btn btn-sm btn-default"
type="button"
(click)="bsModalRef.hide()"
- i18n>Close
- </button>
+ i18n>Close</button>
</div>
</form>
<div class="modal-header">
<h4 class="modal-title pull-left"
- i18n>Swift key
- </h4>
+ i18n>Swift key</h4>
<button type="button"
class="close pull-right"
aria-label="Close"
<div class="form-group">
<label class="control-label col-sm-3"
for="user"
- i18n>Username
- </label>
+ i18n>Username</label>
<div class="col-sm-9">
<input id="user"
name="user"
<div class="form-group">
<label class="control-label col-sm-3"
for="secret_key"
- i18n>Secret key
- </label>
+ i18n>Secret key</label>
<div class="col-sm-9">
<div class="input-group">
<input id="secret_key"
<button class="btn btn-sm btn-default"
type="button"
(click)="bsModalRef.hide()"
- i18n>Close
- </button>
+ i18n>Close</button>
</div>
</div>
<div class="help-block"
*ngIf="(loginForm.submitted || password.dirty) && password.invalid"
- i18n>Password is required
- </div>
+ i18n>Password is required</div>
</div>
<input type="submit"
novalidate>
<div class="panel panel-default">
<div class="panel-heading">
- <h3 class="panel-title">
- <span i18n>{mode, select, editing {Edit} other {Add}}</span> Role
- </h3>
+ <h3 class="panel-title"
+ i18n>{mode, select, editing {Edit} other {Add}} Role</h3>
</div>
<div class="panel-body">
name="name"
formControlName="name"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="roleForm.showError('name', formDir, 'required')">
- This field is required.
- </span>
- <span i18n
- class="help-block"
- *ngIf="roleForm.showError('name', formDir, 'notUnique')">
- The chosen name is already in use.
- </span>
+ <span class="help-block"
+ *ngIf="roleForm.showError('name', formDir, 'required')"
+ i18n>This field is required.</span>
+ <span class="help-block"
+ *ngIf="roleForm.showError('name', formDir, 'notUnique')"
+ i18n>The chosen name is already in use.</span>
</div>
</div>
[ngClass]="{'has-error': roleForm.showError('description', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="description">Description
- </label>
+ for="description">Description</label>
<div class="col-sm-9">
<input class="form-control"
type="text"
<!-- Permissions -->
<div class="form-group">
<label i18n
- class="control-label col-sm-3">Permissions
- </label>
+ class="control-label col-sm-3">Permissions</label>
<div class="col-sm-9">
<cd-table [data]="scopes_permissions"
[columns]="columns"
<div class="button-group text-right">
<cd-submit-button [form]="formDir"
type="button"
- (submitAction)="submit()">
- <span i18n>{mode, select, editing {Update} other {Create}}</span> Role
- </cd-submit-button>
+ (submitAction)="submit()"
+ i18n>{mode, select, editing {Update} other {Create}} Role</cd-submit-button>
<button i18n
type="button"
class="btn btn-sm btn-default"
- routerLink="/user-management/roles">
- Back
- </button>
+ routerLink="/user-management/roles">Back</button>
</div>
</div>
</div>
novalidate>
<div class="panel panel-default">
<div class="panel-heading">
- <h3 class="panel-title">
- <span i18n>{mode, select, editing {Edit} other {Add}}</span> User
- </h3>
+ <h3 class="panel-title"
+ i18n>{mode, select, editing {Edit} other {Add}} User</h3>
</div>
<div class="panel-body">
name="username"
formControlName="username"
autofocus>
- <span i18n
- class="help-block"
- *ngIf="userForm.showError('username', formDir, 'required')">
- This field is required.
- </span>
+ <span class="help-block"
+ *ngIf="userForm.showError('username', formDir, 'required')"
+ i18n>This field is required.</span>
</div>
</div>
[ngClass]="{'has-error': userForm.showError('password', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="name">Password
- </label>
+ for="name">Password</label>
<div class="col-sm-9">
<div class="input-group">
<input class="form-control"
</button>
</span>
</div>
- <span i18n
- class="help-block"
- *ngIf="userForm.showError('password', formDir, 'required')">
- This field is required.
- </span>
+ <span class="help-block"
+ *ngIf="userForm.showError('password', formDir, 'required')"
+ i18n>This field is required.</span>
</div>
</div>
[ngClass]="{'has-error': userForm.showError('confirmpassword', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="name">Confirm password
- </label>
+ for="name">Confirm password</label>
<div class="col-sm-9">
<div class="input-group">
<input class="form-control"
</button>
</span>
</div>
- <span i18n
- class="help-block"
- *ngIf="userForm.showError('confirmpassword', formDir, 'required')">
- This field is required.
- </span>
- <span i18n
- class="help-block"
- *ngIf="userForm.showError('confirmpassword', formDir, 'match')">
- Password confirmation doesn't match the password.
- </span>
+ <span class="help-block"
+ *ngIf="userForm.showError('confirmpassword', formDir, 'required')"
+ i18n>This field is required.</span>
+ <span class="help-block"
+ *ngIf="userForm.showError('confirmpassword', formDir, 'match')"
+ i18n>Password confirmation doesn't match the password.</span>
</div>
</div>
<div class="form-group">
<label i18n
class="control-label col-sm-3"
- for="name">Full name
- </label>
+ for="name">Full name</label>
<div class="col-sm-9">
<input class="form-control"
type="text"
[ngClass]="{'has-error': userForm.showError('email', formDir)}">
<label i18n
class="control-label col-sm-3"
- for="email">Email
- </label>
+ for="email">Email</label>
<div class="col-sm-9">
<input class="form-control"
type="email"
name="email"
formControlName="email">
- <span i18n
- class="help-block"
- *ngIf="userForm.showError('email', formDir, 'email')">
- Invalid email.
- </span>
+ <span class="help-block"
+ *ngIf="userForm.showError('email', formDir, 'email')"
+ i18n>Invalid email.</span>
</div>
</div>
<!-- Roles -->
<label class="col-sm-3 control-label"
- i18n>Roles
- </label>
+ i18n>Roles</label>
<div class="col-sm-9">
<span class="form-control no-border full-height"
*ngIf="allRoles">
<div class="button-group text-right">
<cd-submit-button [form]="formDir"
type="button"
- (submitAction)="submit()">
- <span i18n>{mode, select, editing {Update} other {Create}}</span> User
- </cd-submit-button>
+ (submitAction)="submit()"
+ i18n>{mode, select, editing {Update} other {Create}} User</cd-submit-button>
<button i18n
type="button"
class="btn btn-sm btn-default"
- routerLink="/user-management/users">
- Back
- </button>
+ routerLink="/user-management/users">Back</button>
</div>
</div>
</div>
<li *ngIf="userPermission.read">
<a i18n
class="dropdown-item"
- routerLink="/user-management">User management
- </a>
+ routerLink="/user-management">User management</a>
</li>
</ul>
</div>
class="dropdown-item"
[ngClass]="{'disabled': !docsUrl}"
href="{{ docsUrl }}"
- target="_blank">Documentation
- </a>
+ target="_blank">Documentation</a>
</li>
<li>
<a i18n
class="dropdown-item"
- (click)="goToApiDocs()">API
- </a>
+ (click)="goToApiDocs()">API</a>
</li>
<li>
<a i18n
class="dropdown-item"
- (click)="openAboutModal()">About
- </a>
+ (click)="openAboutModal()">About</a>
</li>
</ul>
</div>
<a i18n
class="dropdown-item disabled"
href="#">Signed in as
- <strong>{{ username }}</strong>
- </a>
+ <strong>{{ username }}</strong></a>
</li>
<li class="divider dropdown-divider"></li>
<li role="menuitem">
class="navbar-toggle collapsed"
(click)="isCollapsed = !isCollapsed">
<span i18n
- class="sr-only">Toggle navigation
- </span>
+ class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
*ngIf="permissions.hosts.read">
<a i18n
class="dropdown-item"
- routerLink="/hosts">Hosts
- </a>
+ routerLink="/hosts">Hosts</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_cluster_monitor"
*ngIf="permissions.monitor.read">
<a i18n
class="dropdown-item"
- routerLink="/monitor/"> Monitors
- </a>
+ routerLink="/monitor/">Monitors</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_hosts"
*ngIf="permissions.osd.read">
<a i18n
class="dropdown-item"
- routerLink="/osd">OSDs
- </a>
+ routerLink="/osd">OSDs</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_configuration"
*ngIf="permissions.configOpt.read">
<a i18n
class="dropdown-item"
- routerLink="/configuration">Configuration
- </a>
+ routerLink="/configuration">Configuration</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_crush"
*ngIf="permissions.hosts.read && permissions.osd.read">
<a i18n
class="dropdown-item"
- routerLink="/crush-map">CRUSH map
- </a>
+ routerLink="/crush-map">CRUSH map</a>
</li>
</ul>
</li>
class="tc_menuitem tc_menuitem_pool"
*ngIf="permissions.pool.read">
<a i18n
- routerLink="/pool">Pools
- </a>
+ routerLink="/pool">Pools</a>
</li>
<!-- Block -->
class="tc_menuitem tc_menuitem_cephs"
*ngIf="permissions.cephfs.read">
<a i18n
- routerLink="/cephfs">Filesystems
- </a>
+ routerLink="/cephfs">Filesystems</a>
</li>
<!-- Object Gateway -->
class="tc_submenuitem tc_submenuitem_rgw_daemons">
<a i18n
class="dropdown-item"
- routerLink="/rgw/daemon">Daemons
- </a>
+ routerLink="/rgw/daemon">Daemons</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_rgw_users">
<a i18n
class="dropdown-item"
- routerLink="/rgw/user">Users
- </a>
+ routerLink="/rgw/user">Users</a>
</li>
<li routerLinkActive="active"
class="tc_submenuitem tc_submenuitem_rgw_buckets">
<a i18n
class="dropdown-item"
- routerLink="/rgw/bucket">Buckets
- </a>
+ routerLink="/rgw/bucket">Buckets</a>
</li>
</ul>
</li>
<ng-template #popTemplate>
<!-- Executing -->
<div *ngIf="executingTasks.length > 0">
- <div class="separator">
- EXECUTING
- </div>
+ <div class="separator">EXECUTING</div>
<hr>
<div *ngFor="let executingTask of executingTasks">
<table>
</div>
<!-- Finished -->
<div *ngIf="finishedTasks.length > 0">
- <div class="separator">
- FINISHED
- </div>
+ <div class="separator">FINISHED</div>
<hr>
<div *ngFor="let finishedTask of finishedTasks">
<table>
</div>
<!-- Empty -->
<div *ngIf="executingTasks.length === 0 && finishedTasks.length === 0">
- <div class="message" i18n>
- There are no background tasks.
- </div>
+ <div class="message" i18n>There are no background tasks.</div>
</div>
</ng-template>
<a [popover]="popTemplate"
<div class="modal-body">
<ng-container *ngTemplateOutlet="bodyTemplate; context: bodyContext"></ng-container>
<div class="question">
- <p i18n>
- Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?
- </p>
+ <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?</p>
<div class="form-group"
[ngClass]="{'has-error': deletionForm.showError('confirmation', formDir)}">
<div class="checkbox checkbox-primary">
formControlName="confirmation"
autofocus>
<label i18n
- for="confirmation">
- Yes, I am sure.
- </label>
+ for="confirmation">Yes, I am sure.</label>
</div>
</div>
</div>
</cd-submit-button>
<button class="btn btn-link btn-sm"
(click)="hideModal()"
- i18n>
- Cancel
- </button>
+ i18n>Cancel</button>
</div>
</form>
</ng-container>
<alert type="danger">
<table>
<tr>
- <td rowspan="2" class="error-panel-alert-icon">
+ <td rowspan="2"
+ class="error-panel-alert-icon">
<i class="fa fa-3x fa-times-circle alert-danger"
aria-hidden="true"></i>
</td>
type="button"
(click)="backAction.emit()"
autofocus
- i18n>
- Back
- </button>
+ i18n>Back</button>
</div>
<!-- Embed dashboard -->
<cd-loading-panel *ngIf="loading && grafanaExist"
- i18n>
- Loading panel data...
-</cd-loading-panel>
-<cd-info-panel *ngIf="!grafanaExist">
- <ng-container i18n>
- Please consult the
- <a href="{{ docsUrl }}"
- target="_blank">documentation
- </a> on how to configure and enable the monitoring functionality.
- </ng-container>
-</cd-info-panel>
+ i18n>Loading panel data...</cd-loading-panel>
+
+<cd-info-panel *ngIf="!grafanaExist"
+ i18n>Please consult the
+ <a href="{{ docsUrl }}" target="_blank">documentation</a> on how to
+ configure and enable the monitoring functionality.</cd-info-panel>
+
<div class="row"
*ngIf="grafanaExist">
<div class="col-md-12">
-<cd-info-panel i18n
- *ngIf="status === vcs.ValueNone">
- Retrieving data<span *ngIf="statusFor"> for <span [innerHtml]="statusFor"></span></span>. Please wait...
+<cd-info-panel *ngIf="status === vcs.ValueNone">
+ <ng-container i18n>Retrieving data<span *ngIf="statusFor"> for
+ <span [innerHtml]="statusFor"></span></span>. Please wait...</ng-container>
</cd-info-panel>
-<cd-warning-panel i18n
- *ngIf="status === vcs.ValueStale">
- Displaying previously cached data<span *ngIf="statusFor"> for <span [innerHtml]="statusFor"></span></span>.
+<cd-warning-panel *ngIf="status === vcs.ValueStale">
+ <ng-container i18n>Displaying previously cached data<span *ngIf="statusFor">
+ for <span [innerHtml]="statusFor"></span></span>.</ng-container>
</cd-warning-panel>
-<cd-error-panel i18n
- *ngIf="status === vcs.ValueException">
- Could not load data<span *ngIf="statusFor"> for <span [innerHtml]="statusFor"></span></span>. Please check the cluster health.
+<cd-error-panel *ngIf="status === vcs.ValueException">
+ <ng-container i18n>Could not load data<span *ngIf="statusFor"> for
+ <span [innerHtml]="statusFor"></span></span>.
+ Please check the cluster health.</ng-container>
</cd-error-panel>
-<cd-error-panel i18n
- *ngIf="loadingError">
- Failed to load data.
-</cd-error-panel>
+<cd-error-panel *ngIf="loadingError"
+ i18n>Failed to load data.</cd-error-panel>
+
<div class="dataTables_wrapper">
<div class="dataTables_header clearfix form-inline"
*ngIf="toolHeader">