cdRequiredField="Pool"
[invalid]="!rbdForm.controls['pool'].valid && (rbdForm.controls['pool'].dirty)"
[invalidText]="poolError"
+ (valueChange)="setPoolMirrorMode()"
*ngIf="mode !== 'editing' && poolPermission.read">
<option *ngIf="pools === null"
[ngValue]="null"
</ng-template>
</div>
+ <!-- Size -->
+ <div class="form-item">
+ <cds-text-label for="size"
+ i18n
+ [invalid]="!rbdForm.controls['size'].valid && (rbdForm.controls['size'].dirty)"
+ [invalidText]="sizeError"
+ cdRequiredField="Size">Size
+ <input cdsText
+ type="text"
+ placeholder="e.g., 10GiB"
+ id="size"
+ name="size"
+ formControlName="size"
+ defaultUnit="GiB"
+ [invalid]="!rbdForm.controls['size'].valid && (rbdForm.controls['size'].dirty)"
+ cdDimlessBinary>
+ </cds-text-label>
+ <ng-template #sizeError>
+ <span class="invalid-feedback"
+ *ngIf="rbdForm.showError('size', formDir, 'required')"
+ i18n>This field is required.</span>
+ <span class="invalid-feedback"
+ *ngIf="rbdForm.showError('size', formDir, 'invalidSizeObject')"
+ i18n>You have to increase the size.</span>
+ <span *ngIf="rbdForm.showError('size', formDir, 'pattern')"
+ class="invalid-feedback"
+ i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
+ </ng-template>
+ </div>
+
+ <!-- Namespace -->
+ <!-- Skeleton-->
+ <div class="form-item"
+ *ngIf="mode !== 'editing' && rbdForm.getValue('pool') && namespaces === null">
+ <cds-select label="Namespace"
+ for="namespace"
+ name="namespace"
+ id="namespace"
+ [skeleton]="true"
+ formControlName="namespace">
+ <option [ngValue]="null"
+ i18n>Loading...</option>
+ </cds-select>
+ </div>
+
+ <div class="form-item"
+ *ngIf="(mode === 'editing' && rbdForm.getValue('namespace')) || mode !== 'editing' && (namespaces && namespaces.length > 0 || !poolPermission.read)">
+ <cds-text-label label="Namespace"
+ id="namespace"
+ [helperText]="namespaceHelperTpl"
+ *ngIf="mode === 'editing' || !poolPermission.read"
+ i18n>Namespace
+ <input cdsText
+ id="namespace"
+ formControlName="namespace">
+ </cds-text-label>
+
+ <cds-select label="Namespace"
+ [helperText]="namespaceHelperTpl"
+ for="namespace"
+ name="namespace"
+ id="namespace"
+ formControlName="namespace"
+ (valueChange)="disableMirroring($event)"
+ *ngIf="mode !== 'editing' && poolPermission.read">
+ <option *ngIf="namespaces === null"
+ [ngValue]="null"
+ i18n>Loading...</option>
+ <option *ngIf="namespaces !== null && namespaces.length === 0"
+ [ngValue]="null"
+ i18n>-- No namespaces available --</option>
+ <option *ngIf="namespaces !== null && namespaces.length > 0"
+ value=""
+ i18n>-- Select a namespace --</option>
+ <option *ngFor="let namespace of namespaces"
+ [value]="namespace">{{ namespace }}</option>
+ </cds-select>
+
+ <ng-template #namespaceHelperTpl>
+ Namespace allows you to logically group RBD images within your Ceph Cluster.Choosing a namespace makes it easier to locate and manage related RBD images efficiently.
+ </ng-template>
+ </div>
+
<!-- Mirroring -->
<div class="form-item">
<cds-checkbox id="mirroring"
</ng-template>
</div>
- <!-- Namespace -->
- <!-- Skeleton-->
- <div class="form-item"
- *ngIf="mode !== 'editing' && rbdForm.getValue('pool') && namespaces === null">
- <cds-select label="Namespace"
- for="namespace"
- name="namespace"
- id="namespace"
- [skeleton]="true"
- formControlName="namespace">
- <option [ngValue]="null"
- i18n>Loading...</option>
- </cds-select>
- </div>
-
- <div class="form-item">
- <cds-select label="Namespace"
- helperText="Namespace allows you to logically group RBD images within your Ceph Cluster.Choosing a namespace makes it easier to locate and manage related RBD images efficiently"
- for="namespace"
- name="namespace"
- id="namespace"
- formControlName="namespace"
- *ngIf="(mode === 'editing' && rbdForm.getValue('namespace')) || mode !== 'editing' && (namespaces && namespaces.length > 0 || !poolPermission.read)">
- <option *ngIf="namespaces === null"
- [ngValue]="null"
- i18n>Loading...</option>
- <option *ngIf="namespaces !== null && namespaces.length === 0"
- [ngValue]="null"
- i18n>-- No namespaces available --</option>
- <option *ngIf="namespaces !== null && namespaces.length > 0"
- [ngValue]="null"
- i18n>-- Select a namespace --</option>
- <option *ngFor="let namespace of namespaces"
- [value]="namespace">{{ namespace }}</option>
- </cds-select>
- </div>
-
- <!-- Size -->
- <div class="form-item">
- <cds-text-label for="size"
- i18n
- [invalid]="!rbdForm.controls['size'].valid && (rbdForm.controls['size'].dirty)"
- [invalidText]="sizeError"
- cdRequiredField="Size">Size
- <input cdsText
- type="text"
- placeholder="e.g., 10GiB"
- id="size"
- name="size"
- formControlName="size"
- defaultUnit="GiB"
- [invalid]="!rbdForm.controls['size'].valid && (rbdForm.controls['size'].dirty)"
- cdDimlessBinary>
- </cds-text-label>
- <ng-template #sizeError>
- <span class="invalid-feedback"
- *ngIf="rbdForm.showError('size', formDir, 'required')"
- i18n>This field is required.</span>
- <span class="invalid-feedback"
- *ngIf="rbdForm.showError('size', formDir, 'invalidSizeObject')"
- i18n>You have to increase the size.</span>
- <span *ngIf="rbdForm.showError('size', formDir, 'pattern')"
- class="invalid-feedback"
- i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
- </ng-template>
- </div>
-
<!-- Advanced Section -->
<cd-form-advanced-fieldset>
<!-- Features -->
});
}
- setPoolMirrorMode() {
+ setPoolMirrorMode(namespace?: string) {
this.currentPoolName =
this.mode === this.rbdFormMode.editing
? this.response?.pool_name
const pool = data.content_data.pools.find((o: any) => o.name === this.currentPoolName);
this.currentPoolMirrorMode = pool.mirror_mode;
if (this.mode === this.rbdFormMode.editing) {
- if (this.currentPoolMirrorMode === 'pool') {
+ if (namespace) {
+ this.mirroring = false;
+ this.rbdForm.get('mirroring').disable();
+ }
+ if (this.currentPoolMirrorMode === this.rbdPoolMirrorModes.pool) {
this.showMirrorDisableMessage = true;
} else {
this.showMirrorDisableMessage = false;
this.mirroring = false;
this.rbdForm.get('mirroring').setValue(this.mirroring);
}
- this.setPoolMirrorMode();
+ this.setPoolMirrorMode(response.namespace);
}
this.rbdForm.get('pool').setValue(response.pool_name);
this.onPoolChange(response.pool_name);
}
shouldDisable(option: string): boolean {
- return this.currentPoolMirrorMode === 'pool' && option === 'snapshot' ? true : null;
+ return this.currentPoolMirrorMode === 'pool' && option === 'snapshot' ? true : false;
+ }
+
+ disableMirroring(namespace: string) {
+ const mirroringControl = this.rbdForm.get('mirroring');
+ if (namespace) {
+ this.mirroring = false;
+ mirroringControl.disable();
+ } else {
+ this.mirroring = true;
+ mirroringControl.enable();
+ }
}
submit() {