Skip to content

Commit 0666a4f

Browse files
committed
added support for consul EnableTagOverride hashicorp#2057
1 parent 86a6569 commit 0666a4f

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
@@ -695,6 +695,7 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t
695695
Meta: map[string]string{
696696
"external-source": "nomad",
697697
},
698+
EnableTagOverride: service.EnableTagOverride,
698699
}
699700
ops.regServices = append(ops.regServices, serviceReg)
700701

command/agent/consul/unit_test.go

+30
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,36 @@ func TestConsul_CanaryTags_NoTags(t *testing.T) {
12961296
require.Len(ctx.FakeConsul.services, 0)
12971297
}
12981298

1299+
// TestConsul_EnableTagOverrideEnabled asserts EnableTagOverride is set when EnableTagOverride=true
1300+
func TestConsul_EnableTagOverrideEnabled(t *testing.T) {
1301+
t.Parallel()
1302+
require := require.New(t)
1303+
ctx := setupFake(t)
1304+
1305+
ctx.Task.Services[0].EnableTagOverride = true
1306+
1307+
require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task))
1308+
require.NoError(ctx.syncOnce())
1309+
require.Len(ctx.FakeConsul.services, 1)
1310+
for _, service := range ctx.FakeConsul.services {
1311+
require.Equal(true, service.EnableTagOverride)
1312+
}
1313+
}
1314+
1315+
// TestConsul_EnableTagOverrideIsDisabledByDefault asserts EnableTagOverride is disabled by default
1316+
func TestConsul_EnableTagOverrideIsDisabledByDefault(t *testing.T) {
1317+
t.Parallel()
1318+
require := require.New(t)
1319+
ctx := setupFake(t)
1320+
1321+
require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task))
1322+
require.NoError(ctx.syncOnce())
1323+
require.Len(ctx.FakeConsul.services, 1)
1324+
for _, service := range ctx.FakeConsul.services {
1325+
require.Equal(false, service.EnableTagOverride)
1326+
}
1327+
}
1328+
12991329
// TestConsul_PeriodicSync asserts that Nomad periodically reconciles with
13001330
// Consul.
13011331
func TestConsul_PeriodicSync(t *testing.T) {

command/agent/job_endpoint.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -763,11 +763,12 @@ func ApiTaskToStructsTask(apiTask *api.Task, structsTask *structs.Task) {
763763
structsTask.Services = make([]*structs.Service, l)
764764
for i, service := range apiTask.Services {
765765
structsTask.Services[i] = &structs.Service{
766-
Name: service.Name,
767-
PortLabel: service.PortLabel,
768-
Tags: service.Tags,
769-
CanaryTags: service.CanaryTags,
770-
AddressMode: service.AddressMode,
766+
Name: service.Name,
767+
PortLabel: service.PortLabel,
768+
Tags: service.Tags,
769+
CanaryTags: service.CanaryTags,
770+
AddressMode: service.AddressMode,
771+
EnableTagOverride: service.EnableTagOverride,
771772
}
772773

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

command/agent/job_endpoint_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -1398,6 +1398,11 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) {
13981398
},
13991399
},
14001400
},
1401+
{
1402+
Id: "id_serviceB",
1403+
Name: "serviceB",
1404+
EnableTagOverride: true,
1405+
},
14011406
},
14021407
Resources: &api.Resources{
14031408
CPU: helper.IntToPtr(100),
@@ -1698,6 +1703,11 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) {
16981703
},
16991704
},
17001705
},
1706+
{
1707+
Name: "serviceB",
1708+
EnableTagOverride: true,
1709+
AddressMode: "auto",
1710+
},
17011711
},
17021712
Resources: &structs.Resources{
17031713
CPU: 100,

nomad/structs/structs.go

+1
Original file line numberDiff line numberDiff line change
@@ -5116,6 +5116,7 @@ type Service struct {
51165116
Tags []string // List of tags for the service
51175117
CanaryTags []string // List of tags for the service when it is a canary
51185118
Checks []*ServiceCheck // List of checks associated with the service
5119+
EnableTagOverride bool // Allow external agents to change the tags for a service
51195120
}
51205121

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

0 commit comments

Comments
 (0)