Skip to content

Commit

Permalink
[api] Add NetworkStatus to allocation response (#17280)
Browse files Browse the repository at this point in the history
Service discovery or mesh network systems consuming the Nomad event stream or API need to know the CNI assigned IP for the allocation. This data is returned by the underlying Nomad API but isn't mapped in the response struct.
  • Loading branch information
deverton-godaddy committed Jul 4, 2023
1 parent c883621 commit e75ae1d
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .changelog/17280.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
api: add missing field NetworkStatus for Allocation
```
10 changes: 10 additions & 0 deletions api/allocations.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ type Allocation struct {
PreviousAllocation string
NextAllocation string
RescheduleTracker *RescheduleTracker
NetworkStatus *AllocNetworkStatus
PreemptedAllocations []string
PreemptedByAllocation string
CreateIndex uint64
Expand Down Expand Up @@ -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
Expand Down
40 changes: 40 additions & 0 deletions api/allocations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down

0 comments on commit e75ae1d

Please sign in to comment.