diff --git a/.changelog/17280.txt b/.changelog/17280.txt new file mode 100644 index 000000000..621dba895 --- /dev/null +++ b/.changelog/17280.txt @@ -0,0 +1,3 @@ +```release-note:bug +api: add missing field NetworkStatus for Allocation +``` diff --git a/api/allocations.go b/api/allocations.go index 3ec147f21..121a75934 100644 --- a/api/allocations.go +++ b/api/allocations.go @@ -271,6 +271,7 @@ type Allocation struct { PreviousAllocation string NextAllocation string RescheduleTracker *RescheduleTracker + NetworkStatus *AllocNetworkStatus PreemptedAllocations []string PreemptedByAllocation string CreateIndex uint64 @@ -402,6 +403,15 @@ type AllocDeploymentStatus struct { ModifyIndex uint64 } +// AllocNetworkStatus captures the status of an allocation's network during runtime. +// Depending on the network mode, an allocation's address may need to be known to other +// systems in Nomad such as service registration. +type AllocNetworkStatus struct { + InterfaceName string + Address string + DNS *DNSConfig +} + type AllocatedResources struct { Tasks map[string]*AllocatedTaskResources Shared AllocatedSharedResources diff --git a/api/allocations_test.go b/api/allocations_test.go index 71586e004..a5d49ad73 100644 --- a/api/allocations_test.go +++ b/api/allocations_test.go @@ -161,6 +161,46 @@ func TestAllocations_CreateIndexSort(t *testing.T) { must.Eq(t, allocs, expect) } +func TestAllocations_Info(t *testing.T) { + testutil.RequireRoot(t) + testutil.Parallel(t) + + c, s := makeClient(t, nil, func(c *testutil.TestServerConfig) { + c.DevMode = true + }) + defer s.Stop() + a := c.Allocations() + + // wait for node + _ = oneNodeFromNodeList(t, c.Nodes()) + + // Create a job and attempt to register it + job := testJob() + resp, wm, err := c.Jobs().Register(job, nil) + must.NoError(t, err) + must.NotNil(t, resp) + must.UUIDv4(t, resp.EvalID) + assertWriteMeta(t, wm) + + // List allocations. + qo := &QueryOptions{ + WaitIndex: wm.LastIndex, + } + allocs, qm, err := a.List(qo) + must.NoError(t, err) + must.NonZero(t, qm.LastIndex) + + // Check that we got one allocation. + must.Len(t, 1, allocs) + must.Eq(t, resp.EvalID, allocs[0].EvalID) + + // Fetch alloc info. + qo.WaitIndex = qm.LastIndex + alloc, _, err := a.Info(allocs[0].ID, qo) + + must.NotNil(t, alloc.NetworkStatus) +} + func TestAllocations_RescheduleInfo(t *testing.T) { testutil.Parallel(t)