Skip to content

Commit 04ac30e

Browse files
committed
added support for consul EnableTagOverride hashicorp#2057
1 parent 23c4597 commit 04ac30e

File tree

6 files changed

+49
-5
lines changed

6 files changed

+49
-5
lines changed

api/tasks.go

+1
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ type Service struct {
372372
AddressMode string `mapstructure:"address_mode"`
373373
Checks []ServiceCheck
374374
CheckRestart *CheckRestart `mapstructure:"check_restart"`
375+
EnableTagOverride bool
375376
}
376377

377378
func (s *Service) Canonicalize(t *Task, tg *TaskGroup, job *Job) {

command/agent/consul/client.go

+1
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,7 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t
671671
Meta: map[string]string{
672672
"external-source": "nomad",
673673
},
674+
EnableTagOverride: service.EnableTagOverride,
674675
}
675676
ops.regServices = append(ops.regServices, serviceReg)
676677

command/agent/consul/unit_test.go

+30
Original file line numberDiff line numberDiff line change
@@ -1404,6 +1404,36 @@ func TestConsul_CanaryTags_NoTags(t *testing.T) {
14041404
require.Len(ctx.FakeConsul.services, 0)
14051405
}
14061406

1407+
// TestConsul_EnableTagOverrideEnabled asserts EnableTagOverride is set when EnableTagOverride=true
1408+
func TestConsul_EnableTagOverrideEnabled(t *testing.T) {
1409+
t.Parallel()
1410+
require := require.New(t)
1411+
ctx := setupFake(t)
1412+
1413+
ctx.Task.Services[0].EnableTagOverride = true
1414+
1415+
require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task))
1416+
require.NoError(ctx.syncOnce())
1417+
require.Len(ctx.FakeConsul.services, 1)
1418+
for _, service := range ctx.FakeConsul.services {
1419+
require.Equal(true, service.EnableTagOverride)
1420+
}
1421+
}
1422+
1423+
// TestConsul_EnableTagOverrideIsDisabledByDefault asserts EnableTagOverride is disabled by default
1424+
func TestConsul_EnableTagOverrideIsDisabledByDefault(t *testing.T) {
1425+
t.Parallel()
1426+
require := require.New(t)
1427+
ctx := setupFake(t)
1428+
1429+
require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task))
1430+
require.NoError(ctx.syncOnce())
1431+
require.Len(ctx.FakeConsul.services, 1)
1432+
for _, service := range ctx.FakeConsul.services {
1433+
require.Equal(false, service.EnableTagOverride)
1434+
}
1435+
}
1436+
14071437
// TestConsul_PeriodicSync asserts that Nomad periodically reconciles with
14081438
// Consul.
14091439
func TestConsul_PeriodicSync(t *testing.T) {

command/agent/job_endpoint.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -751,11 +751,12 @@ func ApiTaskToStructsTask(apiTask *api.Task, structsTask *structs.Task) {
751751
structsTask.Services = make([]*structs.Service, l)
752752
for i, service := range apiTask.Services {
753753
structsTask.Services[i] = &structs.Service{
754-
Name: service.Name,
755-
PortLabel: service.PortLabel,
756-
Tags: service.Tags,
757-
CanaryTags: service.CanaryTags,
758-
AddressMode: service.AddressMode,
754+
Name: service.Name,
755+
PortLabel: service.PortLabel,
756+
Tags: service.Tags,
757+
CanaryTags: service.CanaryTags,
758+
AddressMode: service.AddressMode,
759+
EnableTagOverride: service.EnableTagOverride,
759760
}
760761

761762
if l := len(service.Checks); l != 0 {

command/agent/job_endpoint_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,11 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) {
13941394
},
13951395
},
13961396
},
1397+
{
1398+
Id: "id_serviceB",
1399+
Name: "serviceB",
1400+
EnableTagOverride: true,
1401+
},
13971402
},
13981403
Resources: &api.Resources{
13991404
CPU: helper.IntToPtr(100),
@@ -1693,6 +1698,11 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) {
16931698
},
16941699
},
16951700
},
1701+
{
1702+
Name: "serviceB",
1703+
EnableTagOverride: true,
1704+
AddressMode: "auto",
1705+
},
16961706
},
16971707
Resources: &structs.Resources{
16981708
CPU: 100,

nomad/structs/structs.go

+1
Original file line numberDiff line numberDiff line change
@@ -4958,6 +4958,7 @@ type Service struct {
49584958
Tags []string // List of tags for the service
49594959
CanaryTags []string // List of tags for the service when it is a canary
49604960
Checks []*ServiceCheck // List of checks associated with the service
4961+
EnableTagOverride bool // Allow external agents to change the tags for a service
49614962
}
49624963

49634964
func (s *Service) Copy() *Service {

0 commit comments

Comments
 (0)