Skip to content

Commit 01ba8ed

Browse files
authored
Merge pull request #3446 from kayrus/hostname-backport
nova: add support for hostname updates
2 parents 84fc916 + 79c64b0 commit 01ba8ed

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

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
@@ -651,6 +651,12 @@ type UpdateOpts struct {
651651

652652
// AccessIPv6 provides a new IPv6 address for the instance.
653653
AccessIPv6 string `json:"accessIPv6,omitempty"`
654+
655+
// Hostname changes the hostname of the server.
656+
// Requires microversion 2.90 or later.
657+
// Note: This information is published via the metadata service and requires
658+
// application such as cloud-init to propagate it through to the instance.
659+
Hostname *string `json:"hostname,omitempty"`
654660
}
655661

656662
// 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) {
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) {
1345+
th.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: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,3 +1182,18 @@ func TestCreateServerWithHypervisorHostname(t *testing.T) {
11821182
th.AssertNoErr(t, err)
11831183
th.CheckJSONEquals(t, expected, actual)
11841184
}
1185+
1186+
func TestUpdateServerHostname(t *testing.T) {
1187+
th.SetupHTTP()
1188+
defer th.TeardownHTTP()
1189+
HandleServerHostnameUpdateSuccessfully(t)
1190+
1191+
client := client.ServiceClient()
1192+
newHostname := "new-hostname"
1193+
actual, err := servers.Update(context.TODO(), client, "1234asdf", servers.UpdateOpts{Hostname: &newHostname}).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)