diff --git a/cmd/build.go b/cmd/build.go index f5531686..2b47c46c 100644 --- a/cmd/build.go +++ b/cmd/build.go @@ -24,6 +24,7 @@ var ( debugBootstrap bool debugBaseIgnition bool isLiveISO bool + preserveTempDirs bool } envConfig config.EnvConfig @@ -42,6 +43,7 @@ func NewBuildCmd() *cobra.Command { cmd.AddCommand(getBuildLiveISOCmd()) cmd.PersistentFlags().BoolVar(&buildOpts.debugBootstrap, "debug-bootstrap", false, "") cmd.PersistentFlags().BoolVar(&buildOpts.debugBaseIgnition, "debug-base-ignition", false, "") + cmd.PersistentFlags().BoolVar(&buildOpts.preserveTempDirs, "preserve-temp-dirs", false, "Preserve temporary directories for debugging") if err := cmd.PersistentFlags().MarkHidden("debug-bootstrap"); err != nil { logrus.Fatal(err) } @@ -233,6 +235,7 @@ func preRunBuild(cmd *cobra.Command, args []string) { DebugBootstrap: buildOpts.debugBootstrap, DebugBaseIgnition: buildOpts.debugBaseIgnition, IsLiveISO: buildOpts.isLiveISO, + PreserveTempDirs: buildOpts.preserveTempDirs, } // Generate EnvConfig asset diff --git a/pkg/asset/appliance/appliance_liveiso.go b/pkg/asset/appliance/appliance_liveiso.go index d6e8bd33..c931d1bb 100644 --- a/pkg/asset/appliance/appliance_liveiso.go +++ b/pkg/asset/appliance/appliance_liveiso.go @@ -216,6 +216,15 @@ func (a *ApplianceLiveISO) buildLiveISO( logrus.Errorf("Error creating isohybrid: %s", err) } + // Clean up work directory now that appliance.iso has been created + if envConfig.PreserveTempDirs { + logrus.Infof("Preserving work directory for debugging: %s", workDir) + } else { + if err = os.RemoveAll(workDir); err != nil { + logrus.Warnf("Failed to clean up work directory %s: %v", workDir, err) + } + } + return log.StopSpinner(spinner, nil) } diff --git a/pkg/asset/config/env_config.go b/pkg/asset/config/env_config.go index 16e69f4e..3fe29ff2 100644 --- a/pkg/asset/config/env_config.go +++ b/pkg/asset/config/env_config.go @@ -26,6 +26,7 @@ type EnvConfig struct { DebugBootstrap bool DebugBaseIgnition bool + PreserveTempDirs bool } var _ asset.Asset = (*EnvConfig)(nil) diff --git a/pkg/asset/data/data_iso.go b/pkg/asset/data/data_iso.go index e6abfff3..b5eb6024 100644 --- a/pkg/asset/data/data_iso.go +++ b/pkg/asset/data/data_iso.go @@ -141,6 +141,14 @@ func (a *DataISO) Generate(dependencies asset.Parents) error { if err = imageGen.GenerateImage(envConfig.CacheDir, dataIsoName, filepath.Join(envConfig.TempDir, dataDir), dataVolumeName); err != nil { return log.StopSpinner(spinner, err) } + // Clean up staging directory now that data.iso has been created + if envConfig.PreserveTempDirs { + logrus.Infof("Preserving staging directory for debugging: %s", dataDirPath) + } else { + if err = os.RemoveAll(dataDirPath); err != nil { + logrus.Warnf("Failed to clean up staging directory %s: %v", dataDirPath, err) + } + } return log.StopSpinner(spinner, a.updateAsset(envConfig)) }