move NetworkManager.conf check to template_manager.go

This commit is contained in:
Max Erenberg 2024-01-13 17:46:58 -05:00
parent 8cc537f79b
commit 08d3ec2804
2 changed files with 36 additions and 21 deletions

View File

@ -45,21 +45,7 @@ func (mgr *OpensuseTumbleweedTemplateManager) InstallNetworkManager(handle *gues
if err != nil {
return fmt.Errorf("Could not install NetworkManager: %w", err)
}
// Make sure dhcp-client is installed because we use it as the
// DHCP backend
dhclientIsPresent, err := handle.Is_file("/sbin/dhclient", nil)
if err != nil {
return fmt.Errorf("Could not determine if /sbin/dhclient is a file: %w", err)
}
if !dhclientIsPresent {
return errors.New("dhclient is not present")
}
// Workaround for bug in cloud-init which prevents the NetworkManager
// backend from being selected if NetworkManager.conf does not exist
// https://github.com/canonical/cloud-init/blob/23.1.x/cloudinit/net/network_manager.py#L381
const cfgFilePath = "/etc/NetworkManager/NetworkManager.conf"
mgr.logger.Debug().Msg("Creating " + cfgFilePath)
return handle.Touch(cfgFilePath)
return nil
}
func (mgr *OpensuseTumbleweedTemplateManager) removeWelcomeMessage(handle *guestfs.Guestfs) error {

View File

@ -405,13 +405,42 @@ func (mgr *TemplateManager) setupCommonNTPConfigs(handle *guestfs.Guestfs) error
return errors.New("could not determine NTP backend")
}
func (mgr *TemplateManager) setNetworkManagerOptions(handle *guestfs.Guestfs) (err error) {
if err = handle.Mkdir_p("/etc/NetworkManager/conf.d"); err != nil {
return
func (mgr *TemplateManager) setNetworkManagerOptions(handle *guestfs.Guestfs) error {
// We will force NetworkManager to use dhclient instead of its built-in DHCP
// client. This is necessary because cloud-init is unable to read the DHCP
// server identifier from NetworkManager's state files, and will always try
// to read dhclient lease files even if NetworkManager is being used
// https://github.com/canonical/cloud-init/blob/23.3.x/cloudinit/sources/DataSourceCloudStack.py#L233
dhclientIsPresent, err := handle.Is_file("/sbin/dhclient", nil)
if err != nil {
return fmt.Errorf("Could not determine if /sbin/dhclient is a file: %w", err)
}
path := "/etc/NetworkManager/conf.d/99_csclub.conf"
mgr.logger.Debug().Msg("Writing to " + path)
return handle.Write(path, getResource("network-manager-snippet"))
if !dhclientIsPresent {
return errors.New("dhclient is not present")
}
if err = handle.Mkdir_p("/etc/NetworkManager/conf.d"); err != nil {
return err
}
snippetPath := "/etc/NetworkManager/conf.d/99_csclub.conf"
mgr.logger.Debug().Msg("Writing to " + snippetPath)
if err = handle.Write(snippetPath, getResource("network-manager-snippet")); err != nil {
return err
}
// Workaround for bug in cloud-init which prevents the NetworkManager
// backend from being selected if NetworkManager.conf does not exist
// https://github.com/canonical/cloud-init/blob/23.3.x/cloudinit/net/network_manager.py#L413
const cfgFilePath = "/etc/NetworkManager/NetworkManager.conf"
nmCfgIsPresent, err := handle.Is_file(cfgFilePath, nil)
if err != nil {
return fmt.Errorf("Could not determine if %s is a file: %w", cfgFilePath, err)
}
if !nmCfgIsPresent {
mgr.logger.Debug().Msg("Creating " + cfgFilePath)
if err = handle.Touch(cfgFilePath); err != nil {
return fmt.Errorf("Could not create %s: %w", cfgFilePath, err)
}
}
return nil
}
func (mgr *TemplateManager) usesNetworkManager(handle *guestfs.Guestfs) (bool, error) {