-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Fleet] Rely on package content during installation #142353
Changes from 9 commits
95d2e58
ccbe77e
c73b727
14e4ed4
c38e209
a1cdeb5
eba35e1
036a784
3f0ba38
f5d89d8
c50b7f6
ce7ad56
d4efcf1
e69120b
f494ac5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -250,35 +250,59 @@ export async function getInfo(name: string, version: string) { | |||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
// Check that the packageInfo exists in cache | ||||||||||||||||||||||||||||||||||||||||
// If not, retrieve it from the archive | ||||||||||||||||||||||||||||||||||||||||
async function getPackageInfoFromArchiveOrCache( | ||||||||||||||||||||||||||||||||||||||||
name: string, | ||||||||||||||||||||||||||||||||||||||||
version: string, | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer: Buffer, | ||||||||||||||||||||||||||||||||||||||||
archivePath: string | ||||||||||||||||||||||||||||||||||||||||
): Promise<ArchivePackage> { | ||||||||||||||||||||||||||||||||||||||||
const cachedInfo = getPackageInfo({ name, version }); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if (!cachedInfo) { | ||||||||||||||||||||||||||||||||||||||||
const { packageInfo } = await generatePackageInfoFromArchiveBuffer( | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer, | ||||||||||||||||||||||||||||||||||||||||
ensureContentType(archivePath) | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
setPackageInfo({ packageInfo, name, version }); | ||||||||||||||||||||||||||||||||||||||||
return packageInfo; | ||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||
return cachedInfo; | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
export async function getRegistryPackage( | ||||||||||||||||||||||||||||||||||||||||
name: string, | ||||||||||||||||||||||||||||||||||||||||
version: string, | ||||||||||||||||||||||||||||||||||||||||
options?: { ignoreUnverified?: boolean; getPkgInfoFromArchive?: boolean } | ||||||||||||||||||||||||||||||||||||||||
options?: { ignoreUnverified?: boolean } | ||||||||||||||||||||||||||||||||||||||||
): Promise<{ | ||||||||||||||||||||||||||||||||||||||||
paths: string[]; | ||||||||||||||||||||||||||||||||||||||||
packageInfo: RegistryPackage; | ||||||||||||||||||||||||||||||||||||||||
packageInfo: ArchivePackage; | ||||||||||||||||||||||||||||||||||||||||
verificationResult?: PackageVerificationResult; | ||||||||||||||||||||||||||||||||||||||||
}> { | ||||||||||||||||||||||||||||||||||||||||
const verifyPackage = appContextService.getExperimentalFeatures().packageVerification; | ||||||||||||||||||||||||||||||||||||||||
let paths = getArchiveFilelist({ name, version }); | ||||||||||||||||||||||||||||||||||||||||
let verificationResult = verifyPackage ? getVerificationResult({ name, version }) : undefined; | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
const { | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer, | ||||||||||||||||||||||||||||||||||||||||
archivePath, | ||||||||||||||||||||||||||||||||||||||||
verificationResult: latestVerificationResult, | ||||||||||||||||||||||||||||||||||||||||
} = await withPackageSpan('Fetch package archive from archive buffer', () => | ||||||||||||||||||||||||||||||||||||||||
fetchArchiveBuffer({ | ||||||||||||||||||||||||||||||||||||||||
pkgName: name, | ||||||||||||||||||||||||||||||||||||||||
pkgVersion: version, | ||||||||||||||||||||||||||||||||||||||||
shouldVerify: verifyPackage, | ||||||||||||||||||||||||||||||||||||||||
ignoreUnverified: options?.ignoreUnverified, | ||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if (latestVerificationResult) { | ||||||||||||||||||||||||||||||||||||||||
verificationResult = latestVerificationResult; | ||||||||||||||||||||||||||||||||||||||||
setVerificationResult({ name, version }, latestVerificationResult); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
if (!paths || paths.length === 0) { | ||||||||||||||||||||||||||||||||||||||||
const { | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer, | ||||||||||||||||||||||||||||||||||||||||
archivePath, | ||||||||||||||||||||||||||||||||||||||||
verificationResult: latestVerificationResult, | ||||||||||||||||||||||||||||||||||||||||
} = await withPackageSpan('Fetch package archive from registry', () => | ||||||||||||||||||||||||||||||||||||||||
fetchArchiveBuffer({ | ||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This function internally calls kibana/x-pack/plugins/fleet/server/services/epm/registry/index.ts Lines 312 to 330 in 4019d37
I wonder if I should get the |
||||||||||||||||||||||||||||||||||||||||
pkgName: name, | ||||||||||||||||||||||||||||||||||||||||
pkgVersion: version, | ||||||||||||||||||||||||||||||||||||||||
shouldVerify: verifyPackage, | ||||||||||||||||||||||||||||||||||||||||
ignoreUnverified: options?.ignoreUnverified, | ||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
if (latestVerificationResult) { | ||||||||||||||||||||||||||||||||||||||||
verificationResult = latestVerificationResult; | ||||||||||||||||||||||||||||||||||||||||
setVerificationResult({ name, version }, latestVerificationResult); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
paths = await withPackageSpan('Unpack archive', () => | ||||||||||||||||||||||||||||||||||||||||
unpackBufferToCache({ | ||||||||||||||||||||||||||||||||||||||||
name, | ||||||||||||||||||||||||||||||||||||||||
|
@@ -287,17 +311,14 @@ export async function getRegistryPackage( | |||||||||||||||||||||||||||||||||||||||
contentType: ensureContentType(archivePath), | ||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
const cachedInfo = getPackageInfo({ name, version }); | ||||||||||||||||||||||||||||||||||||||||
if (options?.getPkgInfoFromArchive && !cachedInfo) { | ||||||||||||||||||||||||||||||||||||||||
const { packageInfo } = await generatePackageInfoFromArchiveBuffer( | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer, | ||||||||||||||||||||||||||||||||||||||||
ensureContentType(archivePath) | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
setPackageInfo({ packageInfo, name, version }); | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
const packageInfo = await getInfo(name, version); | ||||||||||||||||||||||||||||||||||||||||
const packageInfo = await getPackageInfoFromArchiveOrCache( | ||||||||||||||||||||||||||||||||||||||||
name, | ||||||||||||||||||||||||||||||||||||||||
version, | ||||||||||||||||||||||||||||||||||||||||
archiveBuffer, | ||||||||||||||||||||||||||||||||||||||||
archivePath | ||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||
return { paths, packageInfo, verificationResult }; | ||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it seems weird to me that
getRegistryPackage
return anArchivePackage
should this be a new method, or should rename itgetPackage
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
calling it
getPackage
would be a good option. I've been in doubt about the naming because the whole flow is inRegistry
but it's not going to use the registry anymore.. I guess we'll have to refactor furtherThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed the name to
GetPackage
, I will need additional approvals from other teams that also use that method.