Update wwctl upgrade to manage TLS configuration

Also fixed an omission for API configuration in wwctl upgrade.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2026-03-18 18:10:38 -06:00
parent 73a71abfe2
commit c211529689
7 changed files with 85 additions and 5 deletions

View File

@@ -260,7 +260,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
port := conf.Warewulf.Port
scheme := "http"
if conf.Warewulf.TLSEnabled() {
port = conf.Warewulf.TlsPort
port = conf.Warewulf.TLSPort
scheme = "https"
}

View File

@@ -42,7 +42,7 @@ func (conf TFTPConf) Enabled() bool {
// BaseConf.
type WarewulfConf struct {
Port int `yaml:"port,omitempty" default:"9873"`
TlsPort int `yaml:"tls port,omitempty" default:"9874"`
TLSPort int `yaml:"tls port,omitempty" default:"9874"`
SecureP *bool `yaml:"secure,omitempty" default:"true"`
TLSEnabledP *bool `yaml:"tls,omitempty"`
UpdateInterval int `yaml:"update interval,omitempty" default:"60"`

View File

@@ -25,6 +25,7 @@ type WarewulfYaml struct {
Ipv6net string `yaml:"ipv6net"`
Fqdn string `yaml:"fqdn"`
Warewulf *WarewulfConf `yaml:"warewulf"`
API *APIConf `yaml:"api"`
DHCP *DHCPConf `yaml:"dhcp"`
TFTP *TFTPConf `yaml:"tftp"`
NFS *NFSConf `yaml:"nfs"`
@@ -52,6 +53,9 @@ func (legacy *WarewulfYaml) Upgrade() (upgraded *config.WarewulfYaml) {
if legacy.Warewulf != nil {
upgraded.Warewulf = legacy.Warewulf.Upgrade()
}
if legacy.API != nil {
upgraded.API = legacy.API.Upgrade()
}
if legacy.DHCP != nil {
upgraded.DHCP = legacy.DHCP.Upgrade()
}
@@ -92,7 +96,9 @@ func (legacy *WarewulfYaml) Upgrade() (upgraded *config.WarewulfYaml) {
type WarewulfConf struct {
Port int `yaml:"port"`
TLSPort int `yaml:"tls port"`
Secure *bool `yaml:"secure"`
TLSEnabled *bool `yaml:"tls"`
UpdateInterval int `yaml:"update interval"`
AutobuildOverlays *bool `yaml:"autobuild overlays"`
EnableHostOverlay *bool `yaml:"host overlay"`
@@ -105,7 +111,9 @@ type WarewulfConf struct {
func (legacy *WarewulfConf) Upgrade() (upgraded *config.WarewulfConf) {
upgraded = new(config.WarewulfConf)
upgraded.Port = legacy.Port
upgraded.TLSPort = legacy.TLSPort
upgraded.SecureP = legacy.Secure
upgraded.TLSEnabledP = legacy.TLSEnabled
upgraded.UpdateInterval = legacy.UpdateInterval
upgraded.AutobuildOverlaysP = legacy.AutobuildOverlays
upgraded.EnableHostOverlayP = legacy.EnableHostOverlay
@@ -117,6 +125,20 @@ func (legacy *WarewulfConf) Upgrade() (upgraded *config.WarewulfConf) {
return upgraded
}
type APIConf struct {
Enabled *bool `yaml:"enabled"`
TLSEnabled *bool `yaml:"tls"`
AllowedNets []config.IPNet `yaml:"allowed subnets"`
}
func (legacy *APIConf) Upgrade() (upgraded *config.APIConf) {
upgraded = new(config.APIConf)
upgraded.EnabledP = legacy.Enabled
upgraded.TLSEnabledP = legacy.TLSEnabled
upgraded.AllowedNets = append([]config.IPNet{}, legacy.AllowedNets...)
return upgraded
}
type DHCPConf struct {
Enabled *bool `yaml:"enabled"`
Template string `yaml:"template"`

View File

@@ -580,6 +580,63 @@ image mounts:
readonly: true
paths:
datadir: /usr/share
`,
},
{
name: "v4.6.5-tls",
legacyYaml: `
ipaddr: 10.0.0.1
netmask: 255.255.252.0
network: 10.0.0.0
warewulf:
port: 9873
tls port: 9874
secure: true
tls: true
update interval: 60
autobuild overlays: true
host overlay: true
api:
enabled: true
tls: true
allowed subnets:
- 127.0.0.0/8
- ::1/128
dhcp:
enabled: true
range start: 10.0.1.1
range end: 10.0.1.255
systemd name: dhcpd
tftp:
enabled: true
systemd name: tftp
`,
upgradedYaml: `
ipaddr: 10.0.0.1
netmask: 255.255.252.0
network: 10.0.0.0
warewulf:
port: 9873
tls port: 9874
secure: true
tls: true
update interval: 60
autobuild overlays: true
host overlay: true
api:
enabled: true
tls: true
allowed subnets:
- 127.0.0.0/8
- ::1/128
dhcp:
enabled: true
range start: 10.0.1.1
range end: 10.0.1.255
systemd name: dhcpd
tftp:
enabled: true
systemd name: tftp
`,
},
}

View File

@@ -122,8 +122,8 @@ func RunServer() error {
}
httpsHandler := configureRootHandler(apiHandler)
go func() {
wwlog.Info("Starting HTTPS service on port %d", conf.Warewulf.TlsPort)
if err := http.ListenAndServeTLS(":"+strconv.Itoa(conf.Warewulf.TlsPort), crt, key, httpsHandler); err != nil {
wwlog.Info("Starting HTTPS service on port %d", conf.Warewulf.TLSPort)
if err := http.ListenAndServeTLS(":"+strconv.Itoa(conf.Warewulf.TLSPort), crt, key, httpsHandler); err != nil {
errChan <- fmt.Errorf("could not start HTTPS service: %w", err)
}
}()