Skip to content
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

ostreecontainer for kickstart stage. #308

Merged
merged 5 commits into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ init:

configure-generators:
stage: gen
image: alpine:latest
image: fedora:latest
variables:
PYTHONUNBUFFERED: 1
script:
- apk add -U go python3 gpgme-dev
- dnf install -qy golang python3 gpgme-devel
- ./test/scripts/configure-generators generator-config.yml
artifacts:
paths:
Expand All @@ -36,11 +36,11 @@ generator-trigger:

check-build-coverage:
stage: verify
image: alpine:latest
image: fedora:latest
variables:
PYTHONUNBUFFERED: 1
script:
- apk add -U go python3 gpgme-dev s3cmd
- dnf install -qy golang python3 gpgme-devel s3cmd
- ./test/scripts/check-build-coverage ./s3configs/
cache:
key: testcache
Expand Down
7 changes: 2 additions & 5 deletions pkg/manifest/anaconda_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,14 +309,11 @@ func (p *AnacondaInstaller) serialize() osbuild.Pipeline {

if p.Type == AnacondaInstallerTypePayload {
if p.InteractiveDefaults != nil {
kickstartOptions, err := osbuild.NewKickstartStageOptions(
kickstartOptions, err := osbuild.NewKickstartStageOptionsWithLiveIMG(
"/usr/share/anaconda/interactive-defaults.ks",
p.InteractiveDefaults.TarPath,
p.Users,
p.Groups,
"",
"",
"",
p.InteractiveDefaults.TarPath,
)

if err != nil {
Expand Down
15 changes: 13 additions & 2 deletions pkg/manifest/anaconda_installer_iso_tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,13 @@ func (p *AnacondaInstallerISOTree) serialize() osbuild.Pipeline {
))

// Configure the kickstart file with the payload and any user options
kickstartOptions, err := osbuild.NewKickstartStageOptions(p.KSPath, "", p.Users, p.Groups, makeISORootPath(p.PayloadPath), p.ostreeCommitSpec.Ref, p.OSName)
kickstartOptions, err := osbuild.NewKickstartStageOptionsWithOSTreeCommit(
p.KSPath,
p.Users,
p.Groups,
makeISORootPath(p.PayloadPath),
p.ostreeCommitSpec.Ref,
p.OSName)

if err != nil {
panic("failed to create kickstartstage options")
Expand All @@ -288,7 +294,12 @@ func (p *AnacondaInstallerISOTree) serialize() osbuild.Pipeline {
// If the KSPath is set, we need to add the kickstart stage to this (bootiso-tree) pipeline.
// If it's not specified here, it should have been added to the InteractiveDefaults in the anaconda-tree.
if p.KSPath != "" {
kickstartOptions, err := osbuild.NewKickstartStageOptions(p.KSPath, makeISORootPath(p.PayloadPath), p.Users, p.Groups, "", "", p.OSName)
kickstartOptions, err := osbuild.NewKickstartStageOptionsWithLiveIMG(
p.KSPath,
p.Users,
p.Groups,
makeISORootPath(p.PayloadPath))

supakeen marked this conversation as resolved.
Show resolved Hide resolved
if err != nil {
panic("failed to create kickstartstage options")
}
Expand Down
109 changes: 89 additions & 20 deletions pkg/osbuild/kickstart_stage.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,35 @@ type KickstartStageOptions struct {
// Where to place the kickstart file
Path string `json:"path"`

OSTree *OSTreeOptions `json:"ostree,omitempty"`
OSTreeCommit *OSTreeCommitOptions `json:"ostree,omitempty"`
OSTreeContainer *OSTreeContainerOptions `json:"ostreecontainer,omitempty"`

LiveIMG *LiveIMG `json:"liveimg,omitempty"`
LiveIMG *LiveIMGOptions `json:"liveimg,omitempty"`

Users map[string]UsersStageOptionsUser `json:"users,omitempty"`

Groups map[string]GroupsStageOptionsGroup `json:"groups,omitempty"`
}

type LiveIMG struct {
type LiveIMGOptions struct {
URL string `json:"url"`
}

type OSTreeOptions struct {
type OSTreeCommitOptions struct {
OSName string `json:"osname"`
URL string `json:"url"`
Ref string `json:"ref"`
GPG bool `json:"gpg"`
}

type OSTreeContainerOptions struct {
StateRoot string `json:"stateroot"`
URL string `json:"url"`
Transport string `json:"transport"`
Remote string `json:"remote"`
SignatureVerification bool `json:"signatureverification"`
}

func (KickstartStageOptions) isStageOptions() {}

// Creates an Anaconda kickstart file
Expand All @@ -38,12 +47,8 @@ func NewKickstartStage(options *KickstartStageOptions) *Stage {

func NewKickstartStageOptions(
path string,
imageURL string,
userCustomizations []users.User,
groupCustomizations []users.Group,
ostreeURL string,
ostreeRef string,
osName string) (*KickstartStageOptions, error) {
groupCustomizations []users.Group) (*KickstartStageOptions, error) {

var users map[string]UsersStageOptionsUser
if usersOptions, err := NewUsersStageOptions(userCustomizations, false); err != nil {
Expand All @@ -57,27 +62,91 @@ func NewKickstartStageOptions(
groups = groupsOptions.Groups
}

var ostreeOptions *OSTreeOptions
return &KickstartStageOptions{
Path: path,
OSTreeCommit: nil,
LiveIMG: nil,
Users: users,
Groups: groups,
}, nil
}

func NewKickstartStageOptionsWithOSTreeCommit(
path string,
userCustomizations []users.User,
groupCustomizations []users.Group,
ostreeURL string,
ostreeRef string,
osName string) (*KickstartStageOptions, error) {

options, err := NewKickstartStageOptions(path, userCustomizations, groupCustomizations)

if err != nil {
return nil, err
}

if ostreeURL != "" {
ostreeOptions = &OSTreeOptions{
ostreeCommitOptions := &OSTreeCommitOptions{
OSName: osName,
URL: ostreeURL,
Ref: ostreeRef,
GPG: false,
}

options.OSTreeCommit = ostreeCommitOptions
}

return options, nil
}

func NewKickstartStageOptionsWithOSTreeContainer(
path string,
userCustomizations []users.User,
groupCustomizations []users.Group,
containerURL string,
containerTransport string,
containerRemote string,
containerStateRoot string) (*KickstartStageOptions, error) {

options, err := NewKickstartStageOptions(path, userCustomizations, groupCustomizations)

if err != nil {
return nil, err
}

if containerURL != "" {
ostreeContainerOptions := &OSTreeContainerOptions{
StateRoot: containerStateRoot,
URL: containerURL,
Remote: containerRemote,
Transport: containerTransport,
SignatureVerification: false,
}

options.OSTreeContainer = ostreeContainerOptions
}

return options, nil
}

func NewKickstartStageOptionsWithLiveIMG(
path string,
userCustomizations []users.User,
groupCustomizations []users.Group,
imageURL string) (*KickstartStageOptions, error) {

options, err := NewKickstartStageOptions(path, userCustomizations, groupCustomizations)

if err != nil {
return nil, err
}

var liveImg *LiveIMG
if imageURL != "" {
liveImg = &LiveIMG{
liveImg := &LiveIMGOptions{
URL: imageURL,
}
options.LiveIMG = liveImg
}
return &KickstartStageOptions{
Path: path,
OSTree: ostreeOptions,
LiveIMG: liveImg,
Users: users,
Groups: groups,
}, nil

return options, nil
}
Loading