Class ChainedManifest
ChainedManifest defines a collection of sections
that contains artifacts that are used to resolve external
references from a NodeManifest. This allows for the
creation of device manifests that can be augmented in
controlled ways by chained manifests which can be generated
by other organizations. Since the device manifest can never
be modified by other organizations as there would be no way
to sign it with the correct authority, this mechanism
provides supply chain security and also ensures that
upstream organizations cannot modify any device manifest
in ways not defined by the originating organization.
Every ChainedManifest contains a name. This must
be unique within the chain and the name must be well
known so that a node manifest can reference it by its
name.
Since the ChainedManifest is delivered as a KAB,
the manifest has an associated authority established by
the keys used to sign the manifest. Consumers of this
manifest must specify the authority in order to use it.
This ensures that other organizations can't supply a
chained manifest with the same name and override the
resolution process.
Each section defined in the manifest is identified by
a name and contains a list of artifacts. When referenced
by a node manifest using ChainedSectionRef, the
name is matched using the srcSection property.
When the section is placed in the node manfiest it will
appear with the dstSection name. This allows
upstream systems to build common manifests that can be
used across many devices as the device developer can
map section names as needed within their references.
A ChainedManifest contains a collection of
properties. These are not used by KOS, but are available
for tooling to inject data for upstream use. For example,
in a system where multiple chained manifests are built
by different systems, upstream systems may not have
access to the original device manifest. Intermediate
tooling can pass data from the original manifest to
upstream processes, or provide information about the
chained manifest itself to the next upstream process
without needing to pass additional out of band data.
Api version 10 introduced the concept of reverse
manifest linking. While a typical chain builds manifests
one at a time, passing the id of the previous manifest
to the next in order to create the chain, this has a
side effect of forcing upstream manifests to be
rebuilt any time an earlier manifest changes due to
the need to include the id of the previously generated
manifest to link them. Reverse linking allows upstream
manifests to be created without populating the nextManifestId
property as the reverse linked manifest will include all
upstream manifest id's in the new reverseLinkedManifestIds
list. This requires that all upstream manifests be created
first so the id's can be identified for inclusion in the
reverse linked manifest. Practically speaking, this allows
a single aggregator to query multiple external systems for
manifests and add them to a single reverse linked manifest
which is then chained normally to the device manifest.
This can drastically reduce the creation of unique manifest
kabs.
To use reverse linked manifests, the manifests being
reverse linked to must have nextManifestId set to null.
- Since:
- 1
- Version:
- 10
-
Field Summary
FieldsFields inherited from class com.kosdev.kos.commons.manifest.install.InstallManifest
PROP_INSTALL_DETAIL, PROP_INSTALL_SUMMARY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetName()voidsetAuthority(String authority) voidvoidsetSections(Map<String, Set<BaseManifestArtifact>> sections) Methods inherited from class com.kosdev.kos.commons.manifest.install.InstallManifest
getDeviceType, getInstallArtifacts, getInstallDetails, getInstallLayers, getInstallSummary, getManifestType, getNextManifestId, getProperties, getReverseLinkedManifestIds, setDeviceType, setInstallArtifacts, setInstallLayers, setManifestType, setNextManifestId, setProperties, setReverseLinkedManifestIdsMethods inherited from class com.kosdev.kos.commons.manifest.DeviceManifestVersion
getVersion, setVersion
-
Field Details
-
TYPE
- See Also:
-
-
Constructor Details
-
ChainedManifest
public ChainedManifest()
-
-
Method Details
-
getName
-
getSections
-
getAuthority
-
setName
-
setSections
-
setAuthority
-