Skip to content

Commit dd53b00

Browse files
committed
nova: add support for hostname updates
1 parent c3046e0 commit dd53b00

4 files changed

Lines changed: 71 additions & 0 deletions

File tree

internal/acceptance/openstack/compute/v2/servers_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,3 +631,40 @@ func TestServerNoNetworkCreateDestroy(t *testing.T) {
631631
t.Fatalf("Instance must not be a member of specified network")
632632
}
633633
}
634+
635+
func TestServersUpdateHostname(t *testing.T) {
636+
clients.RequireLong(t)
637+
638+
client, err := clients.NewComputeV2Client()
639+
th.AssertNoErr(t, err)
640+
client.Microversion = "2.90"
641+
642+
server, err := CreateMicroversionServer(t, client)
643+
th.AssertNoErr(t, err)
644+
defer DeleteServer(t, client, server)
645+
646+
alternateHostname := tools.RandomString("ACPTTEST", 16)
647+
for alternateHostname == *server.Hostname {
648+
alternateHostname = tools.RandomString("ACPTTEST", 16)
649+
}
650+
651+
t.Logf("Attempting to change the server's hostname to %s.", alternateHostname)
652+
653+
updateOpts := servers.UpdateOpts{
654+
Hostname: &alternateHostname,
655+
}
656+
657+
updated, err := servers.Update(context.TODO(), client, server.ID, updateOpts).Extract()
658+
th.AssertNoErr(t, err)
659+
660+
th.AssertEquals(t, server.ID, updated.ID)
661+
662+
err = tools.WaitFor(func(ctx context.Context) (bool, error) {
663+
latest, err := servers.Get(ctx, client, updated.ID).Extract()
664+
if err != nil {
665+
return false, err
666+
}
667+
return *latest.Hostname == alternateHostname, nil
668+
})
669+
th.AssertNoErr(t, err)
670+
}

openstack/compute/v2/servers/requests.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,12 @@ type UpdateOpts struct {
654654

655655
// AccessIPv6 provides a new IPv6 address for the instance.
656656
AccessIPv6 *string `json:"accessIPv6,omitempty"`
657+
658+
// Hostname changes the hostname of the server.
659+
// Requires microversion 2.90 or later.
660+
// Note: This information is published via the metadata service and requires
661+
// application such as cloud-init to propagate it through to the instance.
662+
Hostname *string `json:"hostname,omitempty"`
657663
}
658664

659665
// ToServerUpdateMap formats an UpdateOpts structure into a request body.

openstack/compute/v2/servers/testing/fixtures_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,3 +1338,17 @@ func HandleServerWithTagsCreationSuccessfully(t *testing.T, fakeServer th.FakeSe
13381338
fmt.Fprint(w, SingleServerWithTagsBody)
13391339
})
13401340
}
1341+
1342+
// HandleServerHostnameUpdateSuccessfully sets up the test server to respond to a server update
1343+
// request changing the hostname.
1344+
func HandleServerHostnameUpdateSuccessfully(t *testing.T, fakeServer th.FakeServer) {
1345+
fakeServer.Mux.HandleFunc("/servers/1234asdf", func(w http.ResponseWriter, r *http.Request) {
1346+
th.TestMethod(t, r, "PUT")
1347+
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
1348+
th.TestHeader(t, r, "Accept", "application/json")
1349+
th.TestHeader(t, r, "Content-Type", "application/json")
1350+
th.TestJSONRequest(t, r, `{ "server": { "hostname": "new-hostname" } }`)
1351+
1352+
fmt.Fprint(w, SingleServerBody)
1353+
})
1354+
}

openstack/compute/v2/servers/testing/requests_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,3 +1183,17 @@ func TestCreateServerWithHypervisorHostname(t *testing.T) {
11831183
th.AssertNoErr(t, err)
11841184
th.CheckJSONEquals(t, expected, actual)
11851185
}
1186+
1187+
func TestUpdateServerHostname(t *testing.T) {
1188+
fakeServer := th.SetupHTTP()
1189+
defer fakeServer.Teardown()
1190+
HandleServerHostnameUpdateSuccessfully(t, fakeServer)
1191+
1192+
client := client.ServiceClient(fakeServer)
1193+
actual, err := servers.Update(context.TODO(), client, "1234asdf", servers.UpdateOpts{Hostname: ptr.To("new-hostname")}).Extract()
1194+
if err != nil {
1195+
t.Fatalf("Unexpected Update error: %v", err)
1196+
}
1197+
1198+
th.CheckDeepEquals(t, ServerDerp, *actual)
1199+
}

0 commit comments

Comments
 (0)