mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 01:13:23 -04:00
Co-authored-by: spalger <spalger@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> Co-authored-by: spalger <spalger@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
a202e49f52
commit
632836f62f
2 changed files with 21 additions and 19 deletions
|
@ -37,13 +37,8 @@ exports.NativeRealm = class NativeRealm {
|
|||
this._log = log;
|
||||
}
|
||||
|
||||
async setPassword(username, password = this._elasticPassword, { attempt = 1 } = {}) {
|
||||
await this._autoRetry(async () => {
|
||||
this._log.info(
|
||||
(attempt > 1 ? `attempt ${attempt}: ` : '') +
|
||||
`setting ${chalk.bold(username)} password to ${chalk.bold(password)}`
|
||||
);
|
||||
|
||||
async setPassword(username, password = this._elasticPassword, retryOpts = {}) {
|
||||
await this._autoRetry(retryOpts, async () => {
|
||||
try {
|
||||
await this._client.security.changePassword({
|
||||
username,
|
||||
|
@ -83,8 +78,8 @@ exports.NativeRealm = class NativeRealm {
|
|||
);
|
||||
}
|
||||
|
||||
async getReservedUsers() {
|
||||
return await this._autoRetry(async () => {
|
||||
async getReservedUsers(retryOpts = {}) {
|
||||
return await this._autoRetry(retryOpts, async () => {
|
||||
const resp = await this._client.security.getUser();
|
||||
const usernames = Object.keys(resp.body).filter(
|
||||
(user) => resp.body[user].metadata._reserved === true
|
||||
|
@ -98,9 +93,9 @@ exports.NativeRealm = class NativeRealm {
|
|||
});
|
||||
}
|
||||
|
||||
async isSecurityEnabled() {
|
||||
async isSecurityEnabled(retryOpts = {}) {
|
||||
try {
|
||||
return await this._autoRetry(async () => {
|
||||
return await this._autoRetry(retryOpts, async () => {
|
||||
const {
|
||||
body: { features },
|
||||
} = await this._client.xpack.info({ categories: 'features' });
|
||||
|
@ -115,18 +110,25 @@ exports.NativeRealm = class NativeRealm {
|
|||
}
|
||||
}
|
||||
|
||||
async _autoRetry(fn, attempt = 1) {
|
||||
async _autoRetry(opts, fn) {
|
||||
const { attempt = 1, maxAttempts = 3 } = opts;
|
||||
|
||||
try {
|
||||
return await fn(attempt);
|
||||
} catch (error) {
|
||||
if (attempt >= 3) {
|
||||
if (attempt >= maxAttempts) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
const sec = 1.5 * attempt;
|
||||
this._log.warning(`assuming ES isn't initialized completely, trying again in ${sec} seconds`);
|
||||
await new Promise((resolve) => setTimeout(resolve, sec * 1000));
|
||||
return await this._autoRetry(fn, attempt + 1);
|
||||
|
||||
const nextOpts = {
|
||||
...opts,
|
||||
attempt: attempt + 1,
|
||||
};
|
||||
return await this._autoRetry(nextOpts, fn);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -85,7 +85,7 @@ describe('isSecurityEnabled', () => {
|
|||
throw error;
|
||||
});
|
||||
|
||||
expect(await nativeRealm.isSecurityEnabled()).toBe(false);
|
||||
expect(await nativeRealm.isSecurityEnabled({ maxAttempts: 1 })).toBe(false);
|
||||
});
|
||||
|
||||
test('rejects if unexpected error is thrown', async () => {
|
||||
|
@ -97,9 +97,9 @@ describe('isSecurityEnabled', () => {
|
|||
throw error;
|
||||
});
|
||||
|
||||
await expect(nativeRealm.isSecurityEnabled()).rejects.toThrowErrorMatchingInlineSnapshot(
|
||||
`"ResponseError"`
|
||||
);
|
||||
await expect(
|
||||
nativeRealm.isSecurityEnabled({ maxAttempts: 1 })
|
||||
).rejects.toThrowErrorMatchingInlineSnapshot(`"ResponseError"`);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -226,7 +226,7 @@ describe('setPassword', () => {
|
|||
});
|
||||
|
||||
await expect(
|
||||
nativeRealm.setPassword('kibana_system', 'foo')
|
||||
nativeRealm.setPassword('kibana_system', 'foo', { maxAttempts: 1 })
|
||||
).rejects.toThrowErrorMatchingInlineSnapshot(`"SomeError"`);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue