osbuild: rework RPM stage inputs
Rework the stage to not reimplement `FilesInput` as `RPMStageInput`, but instead use the one common `FilesInput` implementation and its supported references. Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
parent
b25e4bfa8b
commit
1667e6e859
1 changed files with 14 additions and 78 deletions
|
|
@ -1,6 +1,8 @@
|
||||||
package osbuild
|
package osbuild
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -42,24 +44,12 @@ func (RPMStageOptions) isStageOptions() {}
|
||||||
// RPMStageInputs defines a collection of packages to be installed by the RPM
|
// RPMStageInputs defines a collection of packages to be installed by the RPM
|
||||||
// stage.
|
// stage.
|
||||||
type RPMStageInputs struct {
|
type RPMStageInputs struct {
|
||||||
|
|
||||||
// Packages to install
|
// Packages to install
|
||||||
Packages *RPMStageInput `json:"packages"`
|
Packages *FilesInput `json:"packages"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (RPMStageInputs) isStageInputs() {}
|
func (RPMStageInputs) isStageInputs() {}
|
||||||
|
|
||||||
// RPMStageInput defines a single input source.
|
|
||||||
type RPMStageInput struct {
|
|
||||||
inputCommon
|
|
||||||
|
|
||||||
// Collection of references. Each reference defines a package to be
|
|
||||||
// installed, with optional metadata.
|
|
||||||
References RPMStageSourceArrayRefs `json:"references"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (RPMStageInput) isStageInput() {}
|
|
||||||
|
|
||||||
// RPM package reference metadata
|
// RPM package reference metadata
|
||||||
type RPMStageReferenceMetadata struct {
|
type RPMStageReferenceMetadata struct {
|
||||||
// This option defaults to `false`, therefore it does not need to be
|
// This option defaults to `false`, therefore it does not need to be
|
||||||
|
|
@ -67,56 +57,7 @@ type RPMStageReferenceMetadata struct {
|
||||||
CheckGPG bool `json:"rpm.check_gpg,omitempty"`
|
CheckGPG bool `json:"rpm.check_gpg,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RPMStageSourceOptions holds the metadata/options for a single RPM package to be
|
func (*RPMStageReferenceMetadata) isFilesInputRefMetadata() {}
|
||||||
// installed.
|
|
||||||
type RPMStageSourceOptions struct {
|
|
||||||
Metadata *RPMStageReferenceMetadata `json:"metadata,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// RPMStageReferences: References to RPM packages defined in JSON as:
|
|
||||||
//
|
|
||||||
// "sha256:<...>": {
|
|
||||||
// "metadata": {
|
|
||||||
// "rpm.check_gpg": <boolean>
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// "sha256:<...>": {
|
|
||||||
// "metadata": {
|
|
||||||
// "rpm.check_gpg": <boolean>
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ...
|
|
||||||
type RPMStageReferences map[string]*RPMStageSourceOptions
|
|
||||||
|
|
||||||
func (RPMStageReferences) isReferences() {}
|
|
||||||
|
|
||||||
// RPMStageSourceArrayRefs: References to RPM packages defined in JSON as an
|
|
||||||
// array of objects (preserves item order):
|
|
||||||
// [
|
|
||||||
// {
|
|
||||||
// "id": "sha256:<...>": {
|
|
||||||
// "options": {
|
|
||||||
// "rpm.check_gpg": <boolean>
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// "id": "sha256:<...>": {
|
|
||||||
// "options": {
|
|
||||||
// "rpm.check_gpg": <boolean>
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// ...
|
|
||||||
// ]
|
|
||||||
type RPMStageSourceArrayRefs []*RPMStageSourceArrayRef
|
|
||||||
|
|
||||||
func (RPMStageSourceArrayRefs) isReferences() {}
|
|
||||||
|
|
||||||
type RPMStageSourceArrayRef struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Options *RPMStageSourceOptions `json:"options,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRPMStage creates a new RPM stage.
|
// NewRPMStage creates a new RPM stage.
|
||||||
func NewRPMStage(options *RPMStageOptions, inputs *RPMStageInputs) *Stage {
|
func NewRPMStage(options *RPMStageOptions, inputs *RPMStageInputs) *Stage {
|
||||||
|
|
@ -180,28 +121,23 @@ func RPMPackageMetadataToSignature(pkg RPMPackageMetadata) *string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRpmStageSourceFilesInputs(specs []rpmmd.PackageSpec) *RPMStageInputs {
|
func NewRpmStageSourceFilesInputs(specs []rpmmd.PackageSpec) *RPMStageInputs {
|
||||||
stageInput := new(RPMStageInput)
|
input := NewFilesInput(pkgRefs(specs))
|
||||||
stageInput.Type = "org.osbuild.files"
|
return &RPMStageInputs{Packages: input}
|
||||||
stageInput.Origin = "org.osbuild.source"
|
|
||||||
stageInput.References = pkgRefs(specs)
|
|
||||||
return &RPMStageInputs{Packages: stageInput}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func pkgRefs(specs []rpmmd.PackageSpec) RPMStageSourceArrayRefs {
|
func pkgRefs(specs []rpmmd.PackageSpec) FilesInputRef {
|
||||||
refs := make(RPMStageSourceArrayRefs, len(specs))
|
refs := make([]FilesInputSourceArrayRefEntry, len(specs))
|
||||||
for idx, pkg := range specs {
|
for idx, pkg := range specs {
|
||||||
refs[idx] = &RPMStageSourceArrayRef{
|
pkgSum := strings.TrimPrefix(pkg.Checksum, "sha256:")
|
||||||
ID: pkg.Checksum,
|
var pkgMetadata FilesInputRefMetadata
|
||||||
}
|
|
||||||
if pkg.CheckGPG {
|
if pkg.CheckGPG {
|
||||||
refs[idx].Options = &RPMStageSourceOptions{
|
pkgMetadata = &RPMStageReferenceMetadata{
|
||||||
Metadata: &RPMStageReferenceMetadata{
|
CheckGPG: pkg.CheckGPG,
|
||||||
CheckGPG: pkg.CheckGPG,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
refs[idx] = NewFilesInputSourceArrayRefEntry(pkgSum, pkgMetadata)
|
||||||
}
|
}
|
||||||
return refs
|
return NewFilesInputSourceArrayRef(refs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRPMStageOptions(repos []rpmmd.RepoConfig) *RPMStageOptions {
|
func NewRPMStageOptions(repos []rpmmd.RepoConfig) *RPMStageOptions {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue