Update release with -r and -d flags
This commit is contained in:
@@ -6,33 +6,36 @@ import (
|
||||
//"log"
|
||||
"time"
|
||||
"strings"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
|
||||
// Internal usage only
|
||||
func updateJail(jail *Jail) error {
|
||||
func updateJail(jail *Jail, doUpdateVersion bool) error {
|
||||
// Create default config as temporary file
|
||||
cfgFile, err := os.CreateTemp("", "gocage-jail-update-")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cfgFile.Write([]byte(fbsdUpdateConfig))
|
||||
|
||||
defer cfgFile.Close()
|
||||
defer os.Remove(cfgFile.Name())
|
||||
|
||||
// Folder containing update/upgrade temporary files. Common so we save bandwith when upgrading multiple jails
|
||||
// TODO: Variabilize /iocage/freebsd-update
|
||||
_, err = os.Stat("/iocage/freebsd-update")
|
||||
// Folder containing update/upgrade temporary files. Mutualized so we save bandwith when upgrading multiple jails
|
||||
uwd := viper.GetString("updateWorkDir")
|
||||
if len(uwd) == 0 {
|
||||
return fmt.Errorf("updateWorkDir not set in configuration")
|
||||
}
|
||||
_, err = os.Stat(uwd)
|
||||
if os.IsNotExist(err) {
|
||||
if err := os.Mkdir("/iocage/freebsd-update", 0755); err != nil {
|
||||
if err := os.Mkdir(uwd, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
cfgFile.Write([]byte(strings.Replace(fbsdUpdateConfig, "TO-BE-REPLACED-WITH-UPDATEWORKDIR", uwd, 1)))
|
||||
defer cfgFile.Close()
|
||||
defer os.Remove(cfgFile.Name())
|
||||
|
||||
cmd := fmt.Sprintf("/usr/sbin/freebsd-update --not-running-from-cron -f %s -b %s --currently-running %s fetch",
|
||||
cfgFile.Name(), jail.RootPath, jail.Config.Release)
|
||||
|
||||
err = executeCommandWithOutputToStdout(cmd)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -45,8 +48,10 @@ func updateJail(jail *Jail) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Get and write new release into config.json
|
||||
updateVersion(jail)
|
||||
// Get and write new release into config.json. Don't do that for fake jail (aka release updating)
|
||||
if doUpdateVersion {
|
||||
updateVersion(jail)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -56,6 +61,28 @@ func UpdateJail(args []string) {
|
||||
var cj *Jail
|
||||
var err error
|
||||
|
||||
// User is updateing a release, fake a jail
|
||||
if len(gUpdateRelease) > 0 {
|
||||
// get datastore mountpoing from datastore name
|
||||
ds, err := getDatastoreFromArray(gUpdateReleaseDS, gDatastores)
|
||||
if err != nil {
|
||||
fmt.Printf("Error gettting datastore %s: %v\n", gUpdateReleaseDS, err)
|
||||
return
|
||||
}
|
||||
rp := fmt.Sprintf("%s/releases/%s/root", ds.Mountpoint, gUpdateRelease)
|
||||
fakeJail := Jail{RootPath: rp}
|
||||
v, err := getVersion(&fakeJail)
|
||||
if err != nil {
|
||||
fmt.Printf("Error getting version of release %s: %v\n", gUpdateRelease, err)
|
||||
return
|
||||
}
|
||||
fakeJail.Config.Release = v
|
||||
if err = updateJail(&fakeJail, false); err != nil {
|
||||
fmt.Printf("Error updating release %s: %v\n", gUpdateRelease, err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for _, a := range args {
|
||||
// Check if jail exist and is distinctly named
|
||||
cj, err = getJailFromArray(a, []string{""}, gJails)
|
||||
@@ -83,7 +110,7 @@ func UpdateJail(args []string) {
|
||||
fmt.Printf(" > Snapshot jail %s: OK\n", cj.Name)
|
||||
|
||||
fmt.Printf(" > Update jail %s\n", cj.Name)
|
||||
err = updateJail(cj)
|
||||
err = updateJail(cj, true)
|
||||
if err != nil {
|
||||
fmt.Printf("ERROR: %s\n", err.Error())
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user