Skip to content

Commit 663fd03

Browse files
committed
Issue #459 Add NetworkManager preflight checks for libvirt
NetworkManager is required to setup the dnsmasq for application domain which should be used by the applications created on crc. Sometime headless os doesn't have NetworkManager by default so we should warn user before even start.
1 parent a3446e1 commit 663fd03

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

cmd/crc/cmd/config/config_linux.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,8 @@ var (
3030
WarnCheckCrcDnsmasqFile = createSetting("warn-check-crc-dnsmasq-file", nil, []validationFnType{validations.ValidateBool})
3131
SkipCheckCrcNetworkManagerConfig = createSetting("skip-check-network-manager-config", nil, []validationFnType{validations.ValidateBool})
3232
WarnCheckCrcNetworkManagerConfig = createSetting("warn-check-network-manager-config", nil, []validationFnType{validations.ValidateBool})
33+
WarnCheckNetworkManagerInstalled = createSetting("warn-check-network-manager-installed", nil, []validationFnType{validations.ValidateBool})
34+
SkipCheckNetworkManagerInstalled = createSetting("skip-check-network-manager-installed", nil, []validationFnType{validations.ValidateBool})
35+
WarnCheckNetworkManagerRunning = createSetting("warn-check-network-manager-running", nil, []validationFnType{validations.ValidateBool})
36+
SkipCheckNetworkManagerRunning = createSetting("skip-check-network-manager-running", nil, []validationFnType{validations.ValidateBool})
3337
)

pkg/crc/preflight/preflight_checks_linux.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,3 +455,34 @@ func fixCrcNetworkManagerConfig() (bool, error) {
455455
logging.Debug("NetworkManager configuration fixed")
456456
return true, nil
457457
}
458+
func checkNetworkManagerInstalled() (bool, error) {
459+
logging.Debug("Checking if 'nmcli' is available")
460+
path, err := exec.LookPath("nmcli")
461+
if err != nil {
462+
return false, errors.New("NetworkManager cli nmcli was not found in path")
463+
}
464+
logging.Debug("'nmcli' was found in ", path)
465+
return true, nil
466+
}
467+
func fixNetworkManagerInstalled() (bool, error) {
468+
return false, fmt.Errorf("NetworkManager is required and must be installed manually")
469+
}
470+
func CheckNetworkManagerIsRunning() (bool, error) {
471+
logging.Debug("Checking if NetworkManager.service is running")
472+
path, err := exec.LookPath("systemctl")
473+
if err != nil {
474+
return false, err
475+
}
476+
stdOut, stdErr, err := crcos.RunWithDefaultLocale(path, "is-active", "NetworkManager")
477+
if err != nil {
478+
return false, fmt.Errorf("%v : %s", err, stdErr)
479+
}
480+
if strings.TrimSpace(stdOut) != "active" {
481+
return false, errors.New("NetworkManager.service is not running")
482+
}
483+
logging.Debug("NetworkManager.service is already running")
484+
return true, nil
485+
}
486+
func fixNetworkManagerIsRunning() (bool, error) {
487+
return false, fmt.Errorf("NetworkManager is required. Please make sure it is installed and running manually")
488+
}

pkg/crc/preflight/preflight_linux.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ import (
77

88
// StartPreflightChecks performs the preflight checks before starting the cluster
99
func StartPreflightChecks(vmDriver string) {
10+
preflightCheckSucceedsOrFails(config.GetBool(cmdConfig.SkipCheckNetworkManagerInstalled.Name),
11+
checkNetworkManagerInstalled,
12+
"Checking if NetworkManager is installed",
13+
config.GetBool(cmdConfig.WarnCheckNetworkManagerInstalled.Name),
14+
)
15+
preflightCheckSucceedsOrFails(config.GetBool(cmdConfig.SkipCheckNetworkManagerRunning.Name),
16+
CheckNetworkManagerIsRunning,
17+
"Checking if NetworkManager service is running",
18+
config.GetBool(cmdConfig.WarnCheckNetworkManagerRunning.Name),
19+
)
1020
preflightCheckSucceedsOrFails(false,
1121
checkOcBinaryCached,
1222
"Checking if oc binary is cached",
@@ -76,6 +86,18 @@ func StartPreflightChecks(vmDriver string) {
7686

7787
// SetupHost performs the prerequisite checks and setups the host to run the cluster
7888
func SetupHost(vmDriver string) {
89+
preflightCheckAndFix(config.GetBool(cmdConfig.SkipCheckNetworkManagerInstalled.Name),
90+
checkNetworkManagerInstalled,
91+
fixNetworkManagerInstalled,
92+
"Checking if NetworkManager is installed",
93+
config.GetBool(cmdConfig.WarnCheckNetworkManagerInstalled.Name),
94+
)
95+
preflightCheckAndFix(config.GetBool(cmdConfig.SkipCheckNetworkManagerRunning.Name),
96+
CheckNetworkManagerIsRunning,
97+
fixNetworkManagerIsRunning,
98+
"Checking if NetworkManager service is running",
99+
config.GetBool(cmdConfig.WarnCheckNetworkManagerRunning.Name),
100+
)
79101
preflightCheckAndFix(false,
80102
checkOcBinaryCached,
81103
fixOcBinaryCached,

0 commit comments

Comments
 (0)