Implement all of Fedora in terms of this new abstraction. What used to be the manifest functions (and before that the pipeline functions) are now the image functions, whose purpose is to instantiate the right image kind structs from the image type definitions we currently have in the distro definition.
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
package image
|
|
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/osbuild/osbuild-composer/internal/artifact"
|
|
"github.com/osbuild/osbuild-composer/internal/environment"
|
|
"github.com/osbuild/osbuild-composer/internal/manifest"
|
|
"github.com/osbuild/osbuild-composer/internal/platform"
|
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
"github.com/osbuild/osbuild-composer/internal/runner"
|
|
"github.com/osbuild/osbuild-composer/internal/workload"
|
|
)
|
|
|
|
type OSTreeContainer struct {
|
|
Base
|
|
Platform platform.Platform
|
|
OSCustomizations manifest.OSCustomizations
|
|
Environment environment.Environment
|
|
Workload workload.Workload
|
|
OSTreeParent manifest.OSTree
|
|
OSTreeRef string // TODO: merge into the above
|
|
OSVersion string
|
|
ExtraContainerPackages rpmmd.PackageSet
|
|
ContainerLanguage string
|
|
Filename string
|
|
}
|
|
|
|
func NewOSTreeContainer() *OSTreeContainer {
|
|
return &OSTreeContainer{
|
|
Base: NewBase("ostree-container"),
|
|
}
|
|
}
|
|
|
|
func (img *OSTreeContainer) InstantiateManifest(m *manifest.Manifest,
|
|
repos []rpmmd.RepoConfig,
|
|
runner runner.Runner,
|
|
rng *rand.Rand) (*artifact.Artifact, error) {
|
|
buildPipeline := manifest.NewBuild(m, runner, repos)
|
|
buildPipeline.Checkpoint()
|
|
|
|
osPipeline := manifest.NewOS(m, buildPipeline, img.Platform, repos)
|
|
osPipeline.OSCustomizations = img.OSCustomizations
|
|
osPipeline.Environment = img.Environment
|
|
osPipeline.Workload = img.Workload
|
|
osPipeline.OSTree = &img.OSTreeParent
|
|
|
|
commitPipeline := manifest.NewOSTreeCommit(m, buildPipeline, osPipeline, img.OSTreeRef)
|
|
commitPipeline.OSVersion = img.OSVersion
|
|
|
|
nginxConfigPath := "/etc/nginx.conf"
|
|
listenPort := "8080"
|
|
|
|
serverPipeline := manifest.NewOSTreeCommitServer(m,
|
|
buildPipeline,
|
|
img.Platform,
|
|
repos,
|
|
commitPipeline,
|
|
nginxConfigPath,
|
|
listenPort)
|
|
serverPipeline.Language = img.ContainerLanguage
|
|
|
|
containerPipeline := manifest.NewOCIContainer(m, buildPipeline, serverPipeline)
|
|
containerPipeline.Cmd = []string{"nginx", "-c", nginxConfigPath}
|
|
containerPipeline.ExposedPorts = []string{listenPort}
|
|
containerPipeline.Filename = img.Filename
|
|
artifact := containerPipeline.Export()
|
|
|
|
return artifact, nil
|
|
}
|