8000 nameservers: Use nmcli to update the nameserver and search info by praveenkumar · Pull Request #4145 · crc-org/crc · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

nameservers: Use nmcli to update the nameserver and search info #4145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 37 additions & 3 deletions pkg/crc/network/nameservers.go
8000
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"strings"

"github.com/crc-org/crc/v2/pkg/crc/ssh"
"github.com/crc-org/crc/v2/pkg/crc/systemd"
"github.com/crc-org/crc/v2/pkg/crc/systemd/states"
)

// HasGivenNameserversConfigured returns true if the instance uses a provided nameserver.
Expand All @@ -31,16 +33,48 @@ func GetResolvValuesFromInstance(sshRunner *ssh.Runner) (*ResolvFileValues, erro
return parseResolveConfFile(out)
}

func CreateResolvFileOnInstance(sshRunner *ssh.Runner, resolvFileValues ResolvFileValues) error {
resolvFile, _ := CreateResolvFile(resolvFileValues)
func UpdateResolvFileOnInstance(sshRunner *ssh.Runner, resolvFileValues ResolvFileValues) error {
sd := systemd.NewInstanceSystemdCommander(sshRunner)
// Check if ovs-configuration.service exist and if not then it is old bundle and use the same way to
// update resolve.conf file
if state, err := sd.Status("ovs-configuration.service"); err != nil || state == states.NotFound {
if err := replaceResolvConfFile(sshRunner, resolvFileValues); err != nil {
return fmt.Errorf("error updating resolv.conf file: %s", err)
}
return nil
}

if err := sd.Start("ovs-configuration.service"); err != nil {
return err
}

return updateNetworkManagerConfig(sd, sshRunner, resolvFileValues)
}

err := sshRunner.CopyDataPrivileged([]byte(resolvFile), "/etc/resolv.conf", 0644)
func replaceResolvConfFile(sshRunner *ssh.Runner, resolvFileValues ResolvFileValues) error {
resolvFile, err := CreateResolvFile(resolvFileValues)
if err != nil {
return fmt.Errorf("error to create resolv conf file: %v", err)
}
err = sshRunner.CopyDataPrivileged([]byte(resolvFile), "/etc/resolv.conf", 0644)
if err != nil {
return fmt.Errorf("Error creating /etc/resolv on instance: %s", err.Error())
}
return nil
}

func updateNetworkManagerConfig(sd *systemd.Commander, sshRunner *ssh.Runner, resolvFileValues ResolvFileValues) error {
nameservers := strings.Join(resolvFileValues.GetNameServer(), ",")
searchDomains := strings.Join(resolvFileValues.GetSearchDomains(), ",")
// When ovs-configuration service is running, name of the connection should be ovs-if-br-ex
_, stderr, err := sshRunner.RunPrivileged("Update resolv.conf file", "nmcli", "con", "modify", "ovs-if-br-ex",
"ipv4.dns", nameservers, "ipv4.dns-search", searchDomains)
if err != nil {
return fmt.Errorf("failed to update resolv.conf file %s: %v", stderr, err)
}
return sd.Restart("NetworkManager.service")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/etc/resolv.conf update can also be achieved with nmcli conn up ovs-if-br-ex

}

// AddNameserversToInstance will add additional nameservers to the end of the
// /etc/resolv.conf file inside the instance.
func AddNameserversToInstance(sshRunner *ssh.Runner, nameservers []NameServer) error {
Expand Down
16 changes: 16 additions & 0 deletions pkg/crc/network/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,22 @@ type ResolvFileValues struct {
NameServers []NameServer
}

func (vals *ResolvFileValues) GetNameServer() []string {
var nameservers []string
for _, ns := range vals.NameServers {
nameservers = append(nameservers, ns.IPAddress)
}
return nameservers
}

func (vals *ResolvFileValues) GetSearchDomains() []string {
var searchDomains []string
for _, sd := range vals.SearchDomains {
searchDomains = append(searchDomains, sd.Domain)
}
return searchDomains
}

type Mode string

func (m Mode) String() string {
Expand Down
2 changes: 1 addition & 1 deletion pkg/crc/services/dns/dns.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func RunPostStart(serviceConfig services.ServicePostStartConfig) error {
return err
}
// override resolv.conf file
return network.CreateResolvFileOnInstance(serviceConfig.SSHRunner, resolvFileValues)
return network.UpdateResolvFileOnInstance(serviceConfig.SSHRunner, resolvFileValues)
}

func setupDnsmasq(serviceConfig services.ServicePostStartConfig) error {
Expand Down
0