{{ action | titlecase }} {{ resource | upperFirst }} @if (isStretchMode) { Stretch cluster is enabled. Only replicated pool type is supported in Stretch mode. }
Name @if (form.showError('name', formDir, 'required')) { This field is required! } @if (form.showError('name', formDir, 'uniqueName')) { The chosen Ceph pool name is already in use. } @if (form.showError('name', formDir, 'rbdPool')) { It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list. } @if (form.showError('name', formDir, 'pattern')) { Pool name can only contain letters, numbers, '.', '-', '_' or '/'. }
Pool type @if (isStretchMode) { @for (poolType of data.poolTypes; track poolType) { {{ poolType | upperFirst }} } } @else { @for (poolType of data.poolTypes; track poolType) { {{ poolType | upperFirst }} } } @if (form.showError('poolType', formDir, 'required')) { This field is required! }
@if (isReplicated || isErasure) {
@for (mode of pgAutoscaleModes; track mode) { {{ mode }} }
@if (form.getValue('pgAutoscaleMode') !== 'on') {
@if (form.showError('pgNum', formDir, 'required')) { This field is required! } @if (form.showError('pgNum', formDir, 'min')) { At least one placement group is needed! } @if (form.showError('pgNum', formDir, 'pgMax')) { The specified PG is out of range. A value from {{ getMinPgs() }} to {{ getMaxPgs() }} is allowed. } @if (externalPgChange) { The current PGs settings were calculated for you, you should make sure the values suit your needs before submit. }
} @if (isReplicated) {
@if (form.showError('size', formDir)) { Invalid input. Replicated size must be between {{ getMinSize() }} and {{ getMaxSize() }}. } @if (isStretchMode) { The replicated size value is predefined for stretch cluster } @if (form.getValue('size') === 1) { A size of 1 will not create a replication of the object. The 'Replicated size' includes the object itself. }
} @if (info?.is_all_bluestore && isErasure) {
Flags EC Overwrites
}
}
Application selection is required! Pools need to be associated with an application before use
@if (data.applications.selected.includes('rbd')) {
Mirroring Check this option to enable Pool based mirroring on a Block(RBD) pool.
} @if (isErasure || isReplicated) {
CRUSH @if (isErasure) {
@if (!ecProfiles) { Loading... } @if (ecProfiles && ecProfiles.length === 0) { -- No erasure code profile available -- } @for (ecp of ecProfiles; track ecp.name) { {{ ecp.name }} }
@if (!editing) {
@if (ecpUsage || ecProfiles?.length === 1) {
} @else {
}
}
}
@if (data.erasureInfo) { Profile is not in use. @if (ecpUsage) {

@for (pool of ecpUsage; track pool) {
- {{ pool }}
}

} @else { } }
@if (isErasure && !editing) {
Crush ruleset
@if (!msrCrush) { A new crush ruleset will be implicitly created. } @else { A new crush MSR ruleset will be implicitly created. When crush-osds-per-failure-domain or crush-num-failure-domains is specified }
} @if (isReplicated || editing) {
There are no rules. @if (current.rules.length > 0) {
@for (rule of current.rules; track rule.rule_name) { {{ rule.rule_name }} } @if (form.showError('crushRule', formDir, 'required')) { This field is required! }
} @else {
}
@if (isReplicated && !editing) {
} @if (!editing) {
@if (crushUsage || current?.rules?.length === 1) {
} @else {
}
}
}
@if (data.crushInfo && form.getValue('crushRule')) {

@for (step of this.selectedCrushRule?.steps; track $index) {
1. {{ describeCrushStep(step) }}
}

Rule is not in use. @if (crushUsage) {

@for (pool of crushUsage; track pool) {
- {{ pool }}
}

} @else { } }
} @if (info?.is_all_bluestore) {
Compression
@for (mode of info.compression_modes; track mode) { {{ mode }} } Policy used for compression algorithm. {{ poolService.formTooltips.compressionModes[form.controls.compression.controls.mode.value] }}
@if (hasCompressionEnabled()) {
@if (!info.compression_algorithms) { Loading... } @if (info.compression_algorithms && info.compression_algorithms.length === 0) { -- No erasure compression algorithm available -- } @for (algorithm of info.compression_algorithms; track algorithm) { {{ algorithm }} }
@if (form.showError('minBlobSize', formDir, 'min')) { Value should be greater than or equal to 0 } @if (form.showError('minBlobSize', formDir, 'maximum')) { Value should be less than the maximum blob size }
@for (minBlobSizeUnit of blobUnits; track minBlobSizeUnit) { {{ minBlobSizeUnit }} }
@if (form.showError('maxBlobSize', formDir, 'min')) { Value should be greater than or equal to 0 } @if (form.showError('maxBlobSize', formDir, 'minimum')) { Value should be greater than the minimum blob size }
@for (maxBlobSizeUnit of blobUnits; track maxBlobSizeUnit) { {{ maxBlobSizeUnit }} }
@if (form.showError('ratio', formDir, 'min') || form.showError('ratio', formDir, 'max')) { Value should be between 0.0 and 1.0 }
}
}
Quotas
@if (form.showError('max_bytes', formDir, 'min')) { The value should be greater or equal to 0 }
@for (maxBytesUnit of maxBytesUnits; track maxBytesUnit) { {{ maxBytesUnit }} }
Leave it blank or specify 0 to disable this quota.
A valid quota should be greater than 0. @if (form.showError('max_objects', formDir, 'min')) { The value should be greater or equal to 0 }