Skip to content

Commit 6af9303

Browse files
committed
Update the kernel args to instance config during stop
This PR is going to update the kernel paramater to instance config when stop operation happen. In mac we use kernel parameter as part of vfkit driver to start the instance but during the reboot it changes because of MCO and we are getting error during `start => stop => start` operation. ``` systemctl[787]: Failed to switch root: Specified switch root path '/sysroot' does not seem to be an OS tree. os-release file is missing. ``` ostree changes from (`boot.0` => `boot.1`) ``` ostree=/ostree/boot.0/rhcos/b6f1ba590ef2df8e30bd88833fd145bfbbd424eca8ad235f573f2a136f09b0d6/0 ``` to ``` ostree=/ostree/boot.1/rhcos/b6f1ba590ef2df8e30bd88833fd145bfbbd424eca8ad235f573f2a136f09b0d6/0 ``` As part of the MCO logs ``` Bootloader updated; bootconfig swap: yes; bootversion: boot.1.1, deployment count change: -1 ```
1 parent 8d4df00 commit 6af9303

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

pkg/crc/machine/driver_darwin.go

+35
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package machine
22

33
import (
4+
"context"
45
"encoding/json"
56
"errors"
7+
"time"
68

79
"github.com/code-ready/crc/pkg/crc/constants"
10+
"github.com/code-ready/crc/pkg/crc/logging"
811
"github.com/code-ready/crc/pkg/crc/machine/config"
912
"github.com/code-ready/crc/pkg/crc/machine/vfkit"
1013
machineVf "github.com/code-ready/crc/pkg/drivers/vfkit"
@@ -35,3 +38,35 @@ func updateDriverConfig(host *host.Host, driver *machineVf.Driver) error {
3538

3639
return host.UpdateConfig(driverData)
3740
}
41+
42+
func updateKernelArgs(vm *virtualMachine) error {
43+
logging.Info("Updating kernel args...")
44+
sshRunner, err := vm.SSHRunner()
45+
if err != nil {
46+
return err
47+
}
48+
defer sshRunner.Close()
49+
50+
if err := sshRunner.WaitForConnectivity(context.Background(), 20*time.Second); err != nil {
51+
return err
52+
}
53+
54+
stdout, stderr, err := sshRunner.RunPrivileged("Get kernel args", `-- sh -c 'rpm-ostree kargs'`)
55+
if err != nil {
56+
logging.Errorf("Failed to get kernel args: %v - %s", err, stderr)
57+
return err
58+
}
59+
logging.Debugf("Kernel args: %s", stdout)
60+
61+
vfkitDriver, err := loadDriverConfig(vm.Host)
62+
if err != nil {
63+
return err
64+
}
65+
logging.Debugf("Current Kernel args: %s", vfkitDriver.Cmdline)
66+
vfkitDriver.Cmdline = stdout
67+
68+
if err := updateDriverConfig(vm.Host, vfkitDriver); err != nil {
69+
return err
70+
}
71+
return vm.api.Save(vm.Host)
72+
}

pkg/crc/machine/driver_linux.go

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ func updateDriverConfig(host *host.Host, driver *machineLibvirt.Driver) error {
3838
return host.UpdateConfig(driverData)
3939
}
4040

41+
func updateKernelArgs(vm *virtualMachine) error {
42+
return nil
43+
}
44+
4145
/*
4246
func (r *RPCServerDriver) SetConfigRaw(data []byte, _ *struct{}) error {
4347
return json.Unmarshal(data, &r.ActualDriver)

pkg/crc/machine/driver_windows.go

+4
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,7 @@ func updateDriverConfig(host *host.Host, driver *machineHyperv.Driver) error {
3333
}
3434
return host.UpdateConfig(driverData)
3535
}
36+
37+
func updateKernelArgs(vm *virtualMachine) error {
38+
return nil
39+
}

pkg/crc/machine/stop.go

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ func (client *client) Stop() (state.State, error) {
2323
logging.Debugf("%v", err)
2424
}
2525
}
26+
if err := updateKernelArgs(vm); err != nil {
27+
logging.Debugf("%v", err)
28+
}
2629
logging.Info("Stopping the instance, this may take a few minutes...")
2730
if err := vm.Stop(); err != nil {
2831
status, stateErr := vm.State()

0 commit comments

Comments
 (0)