mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[Fleet] Allow +build versions when upgrading agents (#189809)
## Summary Closes https://github.com/elastic/kibana/issues/189752 Allow agent upgrades to newer `+build` versions of agent. This required bumping the `semver` package and its types to make use of the new `includePrerelease` flag. ## To test 1. Enroll an agent on `8.14.3` 2. Select the "upgrade agent" action in the UI 3. Enter `8.14.3+build202407291657` as the new version 4. Observe the agent upgrades successfully ## Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
parent
888ca9be87
commit
557a7c62ee
5 changed files with 107 additions and 15 deletions
|
@ -1191,7 +1191,7 @@
|
|||
"rxjs": "^7.5.5",
|
||||
"safe-squel": "^5.12.5",
|
||||
"seedrandom": "^3.0.5",
|
||||
"semver": "^7.5.4",
|
||||
"semver": "^7.6.3",
|
||||
"set-value": "^4.1.0",
|
||||
"snakecase-keys": "^8.0.0",
|
||||
"source-map-support": "^0.5.19",
|
||||
|
@ -1571,7 +1571,7 @@
|
|||
"@types/resolve": "^1.20.1",
|
||||
"@types/seedrandom": ">=2.0.0 <4.0.0",
|
||||
"@types/selenium-webdriver": "^4.1.23",
|
||||
"@types/semver": "^7",
|
||||
"@types/semver": "^7.5.8",
|
||||
"@types/set-value": "^2.0.0",
|
||||
"@types/sinon": "^7.0.13",
|
||||
"@types/source-map-support": "^0.5.3",
|
||||
|
|
|
@ -245,6 +245,65 @@ describe('Fleet - isAgentUpgradeableToVersion', () => {
|
|||
isAgentUpgradeableToVersion(getAgent({ version: '7.9.0', upgradeable: true }), '7.9.0')
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
describe('+build versions', () => {
|
||||
it('returns true with target version of a +build version on the same patch', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '7.9.0', upgradeable: true }),
|
||||
'7.9.0+build202408011234'
|
||||
)
|
||||
).toBe(true);
|
||||
});
|
||||
it('returns true with target version of a +build version on a newer patch', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '7.9.0', upgradeable: true }),
|
||||
'7.9.1+build202408011234'
|
||||
)
|
||||
).toBe(true);
|
||||
});
|
||||
it('returns true with target version of a +build version on a newer minor', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '7.9.0', upgradeable: true }),
|
||||
'7.10.0+build202408011234'
|
||||
)
|
||||
).toBe(true);
|
||||
});
|
||||
it('returns true with current version on a +build version', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '7.9.0+build202408011234', upgradeable: true }),
|
||||
'7.9.1'
|
||||
)
|
||||
).toBe(true);
|
||||
});
|
||||
it('returns true when upgrade build is newer than current build', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '8.12.0+build202408011234', upgradeable: true }),
|
||||
'8.12.0+build202408061235'
|
||||
)
|
||||
).toBe(true);
|
||||
});
|
||||
it('returns false when upgrade build is older than current build', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '8.12.0+build202408061234' }),
|
||||
'8.12.0+build202408011234'
|
||||
)
|
||||
).toBe(false);
|
||||
});
|
||||
it('returns false with target version of a +build version on an older patch', () => {
|
||||
expect(
|
||||
isAgentUpgradeableToVersion(
|
||||
getAgent({ version: '7.9.0', upgradeable: true }),
|
||||
'7.8.9+build202408011234'
|
||||
)
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Fleet - getNotUpgradeableMessage', () => {
|
||||
|
|
|
@ -141,11 +141,19 @@ export const getNotUpgradeableMessage = (
|
|||
};
|
||||
|
||||
const isNotDowngrade = (agentVersion: string, versionToUpgrade: string): boolean => {
|
||||
const agentVersionNumber = semverCoerce(agentVersion);
|
||||
const agentVersionNumber = semverCoerce(agentVersion, { includePrerelease: true });
|
||||
if (!agentVersionNumber) throw new Error(`${INVALID_VERSION_ERROR}`);
|
||||
const versionToUpgradeNumber = semverCoerce(versionToUpgrade);
|
||||
|
||||
const versionToUpgradeNumber = semverCoerce(versionToUpgrade, { includePrerelease: true });
|
||||
if (!versionToUpgradeNumber) return true;
|
||||
|
||||
// If the versions are equal, allow upgrading to newer build versions
|
||||
if (semverEq(agentVersionNumber, versionToUpgradeNumber)) {
|
||||
const isUpgradeToBuildVersion = versionToUpgradeNumber.compareBuild(agentVersionNumber) === 1;
|
||||
|
||||
return isUpgradeToBuildVersion;
|
||||
}
|
||||
|
||||
return semverGt(versionToUpgradeNumber, agentVersionNumber);
|
||||
};
|
||||
|
||||
|
|
|
@ -278,14 +278,14 @@ export const AgentListTable: React.FC<Props> = (props: Props) => {
|
|||
{
|
||||
field: VERSION_FIELD,
|
||||
sortable: true,
|
||||
width: '180px',
|
||||
width: '220px',
|
||||
name: i18n.translate('xpack.fleet.agentList.versionTitle', {
|
||||
defaultMessage: 'Version',
|
||||
}),
|
||||
render: (version: string, agent: Agent) => (
|
||||
<EuiFlexGroup gutterSize="none" style={{ minWidth: 0 }} direction="column">
|
||||
<EuiFlexItem grow={false}>
|
||||
<EuiFlexGroup gutterSize="s" alignItems="center">
|
||||
<EuiFlexGroup gutterSize="s" alignItems="center" wrap>
|
||||
<EuiFlexItem grow={false}>
|
||||
<EuiText size="s" className="eui-textNoWrap">
|
||||
{safeMetadata(version)}
|
||||
|
|
43
yarn.lock
43
yarn.lock
|
@ -11169,12 +11169,12 @@
|
|||
"@types/node" "*"
|
||||
"@types/ws" "*"
|
||||
|
||||
"@types/semver@^7", "@types/semver@^7.3.12":
|
||||
"@types/semver@^7.3.12":
|
||||
version "7.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04"
|
||||
integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==
|
||||
|
||||
"@types/semver@^7.5.1":
|
||||
"@types/semver@^7.5.1", "@types/semver@^7.5.8":
|
||||
version "7.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
|
||||
integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
|
||||
|
@ -28320,10 +28320,10 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
|
|||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||
|
||||
semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.2:
|
||||
version "7.6.2"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
|
||||
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
|
||||
semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.6.3:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
|
||||
send@0.18.0:
|
||||
version "0.18.0"
|
||||
|
@ -29402,7 +29402,7 @@ string-replace-loader@^2.2.0:
|
|||
loader-utils "^1.2.3"
|
||||
schema-utils "^1.0.0"
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
|
@ -29420,6 +29420,15 @@ string-width@^1.0.1:
|
|||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^5.0.1, string-width@^5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
|
||||
|
@ -29530,7 +29539,7 @@ stringify-object@^3.2.1:
|
|||
is-obj "^1.0.1"
|
||||
is-regexp "^1.0.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
|
@ -29544,6 +29553,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
|||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^7.0.1, strip-ansi@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
|
||||
|
@ -32426,7 +32442,7 @@ workerpool@6.2.1:
|
|||
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
|
||||
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
|
@ -32452,6 +32468,15 @@ wrap-ansi@^6.2.0:
|
|||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue