Skip to content

Commit f527cff

Browse files
committed
fix: allow HostnameConfig to be used with incomplete machine config
The controller incorrectly was waiting for `cfg.Machine()` which basically blocks `HostnameConfig` with partial machine config. Fix that, add missing unit-tests. Fixes #12564 Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com> (cherry picked from commit 2449ffe)
1 parent 1091813 commit f527cff

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

internal/app/machined/pkg/controllers/network/hostname_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (ctrl *HostnameConfigController) Run(ctx context.Context, r controller.Runt
9090
if !state.IsNotFoundError(err) {
9191
return fmt.Errorf("error getting config: %w", err)
9292
}
93-
} else if cfg.Config().Machine() != nil {
93+
} else {
9494
cfgProvider = cfg.Config()
9595
}
9696

internal/app/machined/pkg/controllers/network/hostname_config_test.go

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import (
2020
"github.com/siderolabs/talos/internal/app/machined/pkg/controllers/ctest"
2121
netctrl "github.com/siderolabs/talos/internal/app/machined/pkg/controllers/network"
2222
"github.com/siderolabs/talos/pkg/machinery/config/container"
23+
networkcfg "github.com/siderolabs/talos/pkg/machinery/config/types/network"
2324
"github.com/siderolabs/talos/pkg/machinery/config/types/v1alpha1"
25+
"github.com/siderolabs/talos/pkg/machinery/nethelpers"
2426
"github.com/siderolabs/talos/pkg/machinery/resources/cluster"
2527
"github.com/siderolabs/talos/pkg/machinery/resources/config"
2628
"github.com/siderolabs/talos/pkg/machinery/resources/network"
@@ -100,7 +102,7 @@ func (suite *HostnameConfigSuite) TestCmdline() {
100102
}, rtestutils.WithNamespace(network.ConfigNamespaceName))
101103
}
102104

103-
func (suite *HostnameConfigSuite) TestMachineConfiguration() {
105+
func (suite *HostnameConfigSuite) TestLegacyMachineConfiguration() {
104106
suite.Require().NoError(suite.Runtime().RegisterController(&netctrl.HostnameConfigController{}))
105107

106108
u, err := url.Parse("https://foo:6443")
@@ -146,6 +148,58 @@ func (suite *HostnameConfigSuite) TestMachineConfiguration() {
146148
ctest.AssertNoResource[*network.HostnameSpec](suite, "configuration/hostname", rtestutils.WithNamespace(network.ConfigNamespaceName))
147149
}
148150

151+
func (suite *HostnameConfigSuite) TestMachineConfigurationStaticHostname() {
152+
suite.Require().NoError(suite.Runtime().RegisterController(&netctrl.HostnameConfigController{}))
153+
154+
hostnameCfg := networkcfg.NewHostnameConfigV1Alpha1()
155+
hostnameCfg.ConfigAuto = pointer.To(nethelpers.AutoHostnameKindOff)
156+
hostnameCfg.ConfigHostname = "my-hostname"
157+
158+
ctr, err := container.New(hostnameCfg)
159+
suite.Require().NoError(err)
160+
161+
cfg := config.NewMachineConfig(ctr)
162+
suite.Create(cfg)
163+
164+
ctest.AssertResource(
165+
suite, "configuration/hostname", func(r *network.HostnameSpec, asrt *assert.Assertions) {
166+
asrt.Equal("my-hostname", r.TypedSpec().Hostname)
167+
asrt.Equal("", r.TypedSpec().Domainname)
168+
asrt.Equal(network.ConfigMachineConfiguration, r.TypedSpec().ConfigLayer)
169+
}, rtestutils.WithNamespace(network.ConfigNamespaceName),
170+
)
171+
172+
ctest.AssertNoResource[*network.HostnameSpec](suite, "default/hostname", rtestutils.WithNamespace(network.ConfigNamespaceName))
173+
174+
suite.Destroy(cfg)
175+
176+
ctest.AssertNoResource[*network.HostnameSpec](suite, "configuration/hostname", rtestutils.WithNamespace(network.ConfigNamespaceName))
177+
ctest.AssertNoResource[*network.HostnameSpec](suite, "default/hostname", rtestutils.WithNamespace(network.ConfigNamespaceName))
178+
}
179+
180+
func (suite *HostnameConfigSuite) TestMachineConfigurationDefaultStable() {
181+
suite.Require().NoError(suite.Runtime().RegisterController(&netctrl.HostnameConfigController{}))
182+
183+
hostnameCfg := networkcfg.NewHostnameConfigV1Alpha1()
184+
hostnameCfg.ConfigAuto = pointer.To(nethelpers.AutoHostnameKindStable)
185+
186+
ctr, err := container.New(hostnameCfg)
187+
suite.Require().NoError(err)
188+
189+
id := cluster.NewIdentity(cluster.NamespaceName, cluster.LocalIdentity)
190+
id.TypedSpec().NodeID = "fGdOI05hVrx3YMagLo0Bwxa2Nm9BAswWm8XLeEj0aS4"
191+
suite.Create(id)
192+
193+
cfg := config.NewMachineConfig(ctr)
194+
suite.Create(cfg)
195+
196+
ctest.AssertResource(suite, "default/hostname", func(r *network.HostnameSpec, asrt *assert.Assertions) {
197+
asrt.Equal("talos-hwz-sw5", r.TypedSpec().Hostname)
198+
asrt.Equal("", r.TypedSpec().Domainname)
199+
asrt.Equal(network.ConfigDefault, r.TypedSpec().ConfigLayer)
200+
}, rtestutils.WithNamespace(network.ConfigNamespaceName))
201+
}
202+
149203
func TestHostnameConfigSuite(t *testing.T) {
150204
t.Parallel()
151205

0 commit comments

Comments
 (0)