i18nProviders
} from '../../../../testing/unit-test-helper';
import { NotFoundComponent } from '../../../core/not-found/not-found.component';
+import { ConfigurationService } from '../../../shared/api/configuration.service';
import { ErasureCodeProfileService } from '../../../shared/api/erasure-code-profile.service';
import { PoolService } from '../../../shared/api/pool.service';
import { CriticalConfirmationModalComponent } from '../../../shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
let component: PoolFormComponent;
let fixture: ComponentFixture<PoolFormComponent>;
let poolService: PoolService;
+ let configurationService: ConfigurationService;
let form: CdFormGroup;
let router: Router;
let ecpService: ErasureCodeProfileService;
beforeEach(() => {
setUpPoolComponent();
+ configurationService = TestBed.get(ConfigurationService);
+ spyOn(configurationService, 'get').and.callFake(() => [
+ { default: 'off', enum_values: ['on', 'warn', 'off'], value: [] }
+ ]);
poolService = TestBed.get(PoolService);
spyOn(poolService, 'getInfo').and.callFake(() => [component.info]);
ecpService = TestBed.get(ErasureCodeProfileService);
import { BsModalService } from 'ngx-bootstrap/modal';
import { forkJoin, Subscription } from 'rxjs';
+import { ConfigurationService } from '../../../shared/api/configuration.service';
import { ErasureCodeProfileService } from '../../../shared/api/erasure-code-profile.service';
import { PoolService } from '../../../shared/api/pool.service';
import { CriticalConfirmationModalComponent } from '../../../shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
action: string;
resource: string;
icons = Icons;
+ pgAutoscaleModes: string[];
constructor(
private dimlessBinaryPipe: DimlessBinaryPipe,
private router: Router,
private modalService: BsModalService,
private poolService: PoolService,
+ private configurationService: ConfigurationService,
private authStorageService: AuthStorageService,
private formatter: FormatterService,
private bsModalService: BsModalService,
pgNum: new FormControl('', {
validators: [Validators.required, Validators.min(1)]
}),
+ pgAutoscaleMode: new FormControl(null),
ecOverwrites: new FormControl(false),
compression: compressionForm,
max_bytes: new FormControl(''),
}
ngOnInit() {
- forkJoin(this.poolService.getInfo(), this.ecpService.list()).subscribe(
- (data: [PoolFormInfo, ErasureCodeProfile[]]) => {
- this.initInfo(data[0]);
- this.initEcp(data[1]);
- if (this.editing) {
- this.initEditMode();
- }
- this.listenToChanges();
- this.setComplexValidators();
+ forkJoin(
+ this.configurationService.get('osd_pool_default_pg_autoscale_mode'),
+ this.poolService.getInfo(),
+ this.ecpService.list()
+ ).subscribe((data: [any, PoolFormInfo, ErasureCodeProfile[]]) => {
+ const pgAutoscaleConfig = data[0];
+ this.pgAutoscaleModes = pgAutoscaleConfig.enum_values;
+ const defaultPgAutoscaleMode = this.configurationService.getValue(pgAutoscaleConfig, 'mon');
+ this.form.silentSet('pgAutoscaleMode', defaultPgAutoscaleMode);
+ this.initInfo(data[1]);
+ this.initEcp(data[2]);
+ if (this.editing) {
+ this.initEditMode();
}
- );
+ this.listenToChanges();
+ this.setComplexValidators();
+ });
}
private initInfo(info: PoolFormInfo) {
),
size: pool.size,
erasureProfile: this.ecProfiles.find((ecp) => ecp.name === pool.erasure_code_profile),
+ pgAutoscaleMode: pool.pg_autoscale_mode,
pgNum: pool.pg_num,
ecOverwrites: pool.flags_names.includes('ec_overwrites'),
mode: pool.options.compression_mode,
this.assignFormFields(pool, [
{ externalFieldName: 'pool_type', formControlName: 'poolType' },
- { externalFieldName: 'pg_num', formControlName: 'pgNum', editable: true },
+ {
+ externalFieldName: 'pg_autoscale_mode',
+ formControlName: 'pgAutoscaleMode',
+ editable: true
+ },
+ {
+ externalFieldName: 'pg_num',
+ formControlName: 'pgNum',
+ replaceFn: (value) => (this.form.getValue('pgAutoscaleMode') === 'on' ? 1 : value),
+ editable: true
+ },
this.form.getValue('poolType') === 'replicated'
? { externalFieldName: 'size', formControlName: 'size' }
: {
const reg = httpTesting.expectOne('api/cluster_conf/testOption?section=testSection');
expect(reg.request.method).toBe('DELETE');
});
+
+ it('should get value', () => {
+ const config = {
+ default: 'a',
+ value: [
+ { section: 'global', value: 'b' },
+ { section: 'mon', value: 'c' },
+ { section: 'mon.1', value: 'd' },
+ { section: 'mds', value: 'e' }
+ ]
+ };
+ expect(service.getValue(config, 'mon.1')).toBe('d');
+ expect(service.getValue(config, 'mon')).toBe('c');
+ expect(service.getValue(config, 'mds.1')).toBe('e');
+ expect(service.getValue(config, 'mds')).toBe('e');
+ expect(service.getValue(config, 'osd')).toBe('b');
+ config.value = [];
+ expect(service.getValue(config, 'osd')).toBe('a');
+ });
});