Dmitry Ukov b37b6f3703 [AIR-137] Add logic to isogen subcommand
* Add add default values for isogen subcommand keys
* Introduce container interface
* Implement docker driver
* Add stdin support to container interface
* Implement volume mount for container

Change-Id: Ide0ecd474b1ccce358bdc9c85ef0006f230490b5
2019-11-01 12:27:35 +00:00

63 lines
1.5 KiB
Go

package isogen
import (
"context"
"fmt"
"io"
"opendev.org/airship/airshipctl/pkg/container"
"opendev.org/airship/airshipctl/pkg/errors"
"opendev.org/airship/airshipctl/pkg/util"
)
// GenerateBootstrapIso will generate data for cloud init and start ISO builder container
func GenerateBootstrapIso(settings *Settings, args []string, out io.Writer) error {
if settings.IsogenConfigFile == "" {
fmt.Fprintln(out, "Reading config file location from global settings is not supported")
return errors.ErrNotImplemented{}
}
ctx := context.Background()
cfg := &Config{}
if err := util.ReadYAMLFile(settings.IsogenConfigFile, &cfg); err != nil {
return err
}
fmt.Fprintln(out, "Creating ISO builder container")
builder, err := container.NewContainer(
&ctx, cfg.Container.ContainerRuntime,
cfg.Container.Image)
if err != nil {
return err
}
return generateBootstrapIso(builder, cfg, out, settings.Debug)
}
func generateBootstrapIso(builder container.Container, cfg *Config, out io.Writer, debug bool) error {
vols := []string{cfg.Container.Volume}
fmt.Fprintf(out, "Running default container command. Mounted dir: %s\n", vols)
if err := builder.RunCommand(
[]string{},
nil,
vols,
[]string{},
debug,
); err != nil {
return err
}
fmt.Fprintln(out, "ISO successfully built.")
if debug {
fmt.Fprintf(
out,
"Debug flag is set. Container %s stopped but not deleted.\n",
builder.GetId(),
)
return nil
}
fmt.Fprintln(out, "Removing container.")
return builder.RmContainer()
}