Skip to content

Commit 4bac765

Browse files
committed
Add config to disable hosts file modification
This change introduces a new configuration setting 'modify-hosts-file' that allows users to disable CRC's automatic modification of the /etc/hosts file. The setting defaults to true to maintain backward compatibility with existing installations.
1 parent 4b73b8b commit 4bac765

File tree

8 files changed

+57
-18
lines changed

8 files changed

+57
-18
lines changed

pkg/crc/config/settings.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ const (
2828
ProxyCAFile = "proxy-ca-file"
2929
ConsentTelemetry = "consent-telemetry"
3030
EnableClusterMonitoring = "enable-cluster-monitoring"
31+
ModifyHostsFile = "modify-hosts-file"
3132
KubeAdminPassword = "kubeadmin-password"
3233
DeveloperPassword = "developer-password"
3334
Preset = "preset"
@@ -129,6 +130,9 @@ func RegisterSettings(cfg *Config) {
129130
cfg.AddSetting(EnableClusterMonitoring, false, ValidateBool, SuccessfullyApplied,
130131
"Enable cluster monitoring Operator (true/false, default: false)")
131132

133+
cfg.AddSetting(ModifyHostsFile, true, ValidateBool, SuccessfullyApplied,
134+
"Allow CRC to modify the system hosts file (true/false, default: true)")
135+
132136
// Telemeter Configuration
133137
cfg.AddSetting(ConsentTelemetry, "", validateYesNo, SuccessfullyApplied,
134138
"Consent to collection of anonymous usage data (yes/no)")

pkg/crc/config/settings_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ var configDefaultValuesTestArguments = []struct {
251251
{
252252
EnableClusterMonitoring, false,
253253
},
254+
{
255+
ModifyHostsFile, true,
256+
},
254257
{
255258
ConsentTelemetry, "",
256259
},
@@ -331,6 +334,9 @@ var configProvidedValuesTestArguments = []struct {
331334
{
332335
EnableClusterMonitoring, true,
333336
},
337+
{
338+
ModifyHostsFile, false,
339+
},
334340
{
335341
ConsentTelemetry, "yes",
336342
},

pkg/crc/machine/client.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ func (client *client) networkMode() network.Mode {
6464
return crcConfig.GetNetworkMode(client.config)
6565
}
6666

67+
func (client *client) modifyHostsFile() bool {
68+
return client.config.Get(crcConfig.ModifyHostsFile).AsBool()
69+
}
70+
6771
func (client *client) monitoringEnabled() bool {
6872
return client.config.Get(crcConfig.EnableClusterMonitoring).AsBool()
6973
}

pkg/crc/machine/start.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,9 @@ func (client *client) Start(ctx context.Context, startConfig types.StartConfig)
481481
SSHRunner: sshRunner,
482482
IP: instanceIP,
483483
// TODO: should be more finegrained
484-
BundleMetadata: *vm.bundle,
485-
NetworkMode: client.networkMode(),
484+
BundleMetadata: *vm.bundle,
485+
NetworkMode: client.networkMode(),
486+
ModifyHostsFile: client.modifyHostsFile(),
486487
}
487488

488489
// Run the DNS server inside the VM
@@ -506,7 +507,11 @@ func (client *client) Start(ctx context.Context, startConfig types.StartConfig)
506507
logging.Info("Check DNS query from host...")
507508
if err := dns.CheckCRCLocalDNSReachableFromHost(servicePostStartConfig); err != nil {
508509
if !client.useVSock() {
509-
return nil, errors.Wrap(err, "Failed to query DNS from host")
510+
msg := "Failed to query DNS from host"
511+
if !servicePostStartConfig.ModifyHostsFile {
512+
msg += " (modify-hosts-file=false). Ensure your system DNS/hosts entries resolve the CRC domains."
513+
}
514+
return nil, errors.Wrap(err, msg)
510515
}
511516
logging.Warn(fmt.Sprintf("Failed to query DNS from host: %v", err))
512517
}
@@ -694,7 +699,7 @@ func createHost(machineConfig config.MachineConfig, preset crcPreset.Preset) err
694699
if err := cluster.GenerateUserPassword(constants.GetKubeAdminPasswordPath(), "kubeadmin"); err != nil {
695700
return errors.Wrap(err, "Error generating new kubeadmin password")
696701
}
697-
if err = os.WriteFile(constants.GetDeveloperPasswordPath(), []byte(constants.DefaultDeveloperPassword), 0600); err != nil {
702+
if err = os.WriteFile(constants.GetDeveloperPasswordPath(), []byte(constants.DefaultDeveloperPassword), 0o600); err != nil {
698703
return errors.Wrap(err, "Error writing developer password")
699704
}
700705
}
@@ -748,7 +753,7 @@ func enableEmergencyLogin(sshRunner *crcssh.Runner) error {
748753
for i := range b {
749754
b[i] = charset[rand.Intn(len(charset))] //nolint
750755
}
751-
if err := os.WriteFile(constants.PasswdFilePath, b, 0600); err != nil {
756+
if err := os.WriteFile(constants.PasswdFilePath, b, 0o600); err != nil {
752757
return err
753758
}
754759
logging.Infof("Emergency login password for core user is stored to %s", constants.PasswdFilePath)
@@ -775,7 +780,7 @@ func updateSSHKeyPair(sshRunner *crcssh.Runner) error {
775780
}
776781

777782
logging.Info("Updating authorized keys...")
778-
err = sshRunner.CopyData(publicKey, "/home/core/.ssh/authorized_keys", 0644)
783+
err = sshRunner.CopyData(publicKey, "/home/core/.ssh/authorized_keys", 0o644)
779784
if err != nil {
780785
return err
781786
}
@@ -874,10 +879,10 @@ func startMicroshift(ctx context.Context, sshRunner *crcssh.Runner, ocConfig oc.
874879
if _, _, err := sshRunner.RunPrivileged("Starting microshift service", "systemctl", "start", "microshift"); err != nil {
875880
return err
876881
}
877-
if err := sshRunner.CopyFileFromVM(fmt.Sprintf("/var/lib/microshift/resources/kubeadmin/api%s/kubeconfig", constants.ClusterDomain), constants.KubeconfigFilePath, 0600); err != nil {
882+
if err := sshRunner.CopyFileFromVM(fmt.Sprintf("/var/lib/microshift/resources/kubeadmin/api%s/kubeconfig", constants.ClusterDomain), constants.KubeconfigFilePath, 0o600); err != nil {
878883
return err
879884
}
880-
if err := sshRunner.CopyFile(constants.KubeconfigFilePath, "/opt/kubeconfig", 0644); err != nil {
885+
if err := sshRunner.CopyFile(constants.KubeconfigFilePath, "/opt/kubeconfig", 0o644); err != nil {
881886
return err
882887
}
883888

@@ -895,5 +900,5 @@ func ensurePullSecretPresentInVM(sshRunner *crcssh.Runner, pullSec cluster.PullS
895900
if err != nil {
896901
return err
897902
}
898-
return sshRunner.CopyDataPrivileged([]byte(content), "/etc/crio/openshift-pull-secret", 0600)
903+
return sshRunner.CopyDataPrivileged([]byte(content), "/etc/crio/openshift-pull-secret", 0o600)
899904
}

pkg/crc/services/dns/dns_darwin.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@ type resolverFileValues struct {
3333

3434
func runPostStartForOS(serviceConfig services.ServicePostStartConfig) error {
3535
// Update /etc/hosts file for host
36-
if err := addOpenShiftHosts(serviceConfig); err != nil {
37-
return err
36+
if serviceConfig.ModifyHostsFile {
37+
if err := addOpenShiftHosts(serviceConfig); err != nil {
38+
return err
39+
}
40+
} else {
41+
logging.Infof("Skipping hosts file modification")
3842
}
3943

4044
if serviceConfig.NetworkMode == network.UserNetworkingMode {

pkg/crc/services/dns/dns_linux.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
package dns
22

33
import (
4+
"github.com/crc-org/crc/v2/pkg/crc/logging"
45
"github.com/crc-org/crc/v2/pkg/crc/services"
56
)
67

78
func runPostStartForOS(serviceConfig services.ServicePostStartConfig) error {
89
// We might need to set the firewall here to forward
910
// Update /etc/hosts file for host
10-
return addOpenShiftHosts(serviceConfig)
11+
if serviceConfig.ModifyHostsFile {
12+
return addOpenShiftHosts(serviceConfig)
13+
} else {
14+
logging.Infof("Skipping hosts file modification")
15+
}
16+
17+
return nil
1118
}

pkg/crc/services/dns/dns_windows.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dns
33
import (
44
"fmt"
55

6+
"github.com/crc-org/crc/v2/pkg/crc/logging"
67
"github.com/crc-org/crc/v2/pkg/crc/network"
78
"github.com/crc-org/crc/v2/pkg/crc/services"
89
)
@@ -11,5 +12,12 @@ func runPostStartForOS(serviceConfig services.ServicePostStartConfig) error {
1112
if serviceConfig.NetworkMode != network.UserNetworkingMode {
1213
return fmt.Errorf("only user-mode networking is supported on Windows")
1314
}
14-
return addOpenShiftHosts(serviceConfig)
15+
16+
if serviceConfig.ModifyHostsFile {
17+
return addOpenShiftHosts(serviceConfig)
18+
} else {
19+
logging.Infof("Skipping hosts file modification")
20+
}
21+
22+
return nil
1523
}

pkg/crc/services/services.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import (
77
)
88

99
type ServicePostStartConfig struct {
10-
Name string
11-
SSHRunner *ssh.Runner
12-
BundleMetadata bundle.CrcBundleInfo
13-
IP string
14-
NetworkMode network.Mode
10+
Name string
11+
SSHRunner *ssh.Runner
12+
BundleMetadata bundle.CrcBundleInfo
13+
IP string
14+
NetworkMode network.Mode
15+
ModifyHostsFile bool
1516
}

0 commit comments

Comments
 (0)