diff --git a/client/consul/sync.go b/client/consul/sync.go index 5b341cf84..8a68ee301 100644 --- a/client/consul/sync.go +++ b/client/consul/sync.go @@ -117,13 +117,14 @@ func (c *ConsulService) SyncTask(task *structs.Task) error { services[srv.ID] = srv for _, chk := range service.Checks { - if _, ok := c.checks[chk.ID]; !ok { + checkID := chk.Hash(srv.ID) + if _, ok := c.checks[checkID]; !ok { if err := c.registerCheck(chk, srv); err != nil { mErr.Errors = append(mErr.Errors, err) } } - c.checks[chk.ID] = chk - checks[chk.ID] = chk + c.checks[checkID] = chk + checks[checkID] = chk } } @@ -138,12 +139,12 @@ func (c *ConsulService) SyncTask(task *structs.Task) error { } // Remove the checks that are not present anymore - for _, check := range c.checks { - if _, ok := checks[check.ID]; !ok { - if err := c.deregisterCheck(check.ID); err != nil { + for checkID, _ := range c.checks { + if _, ok := checks[checkID]; !ok { + if err := c.deregisterCheck(checkID); err != nil { mErr.Errors = append(mErr.Errors, err) } - delete(c.checks, check.ID) + delete(c.checks, checkID) } } return mErr.ErrorOrNil() @@ -169,7 +170,7 @@ func (c *ConsulService) RemoveServices(tasks []*structs.Task) error { var services map[string]struct{} for _, task := range tasks { for _, service := range task.Services { - services[service.ID] = struct{}{} + services[service.ID()] = struct{}{} } } @@ -192,7 +193,7 @@ func (c *ConsulService) RemoveServices(tasks []*structs.Task) error { // registerCheck registers a check definition with Consul func (c *ConsulService) registerCheck(check *structs.ServiceCheck, service *consul.AgentService) error { chkReg := consul.AgentCheckRegistration{ - ID: check.ID, + ID: check.Hash(service.ID), Name: check.Name, ServiceID: service.ID, } @@ -228,7 +229,7 @@ func (c *ConsulService) createService(service *structs.Service) (*consul.AgentSe return nil, fmt.Errorf("port for the service %q couldn't be found", service.Name) } srv := consul.AgentService{ - ID: service.ID, + ID: service.ID(), Service: service.Name, Tags: service.Tags, Address: host, diff --git a/nomad/structs/structs.go b/nomad/structs/structs.go index f512f49ea..7e4166b81 100644 --- a/nomad/structs/structs.go +++ b/nomad/structs/structs.go @@ -1418,7 +1418,6 @@ const ( // The ServiceCheck data model represents the consul health check that // Nomad registers for a Task type ServiceCheck struct { - ID string Name string // Name of the check, defaults to id Type string // Type of the check - tcp, http, docker and script Script string // Script to invoke for script check @@ -1476,7 +1475,6 @@ const ( // The Service model represents a Consul service defintion type Service struct { - ID string // ID of the service Name string // Name of the service, defaults to id Tags []string // List of tags for the service PortLabel string `mapstructure:"port"` // port for the service @@ -1512,16 +1510,18 @@ func (s *Service) InitFields(job string, taskGroup string, task string) { "BASE": fmt.Sprintf("%s-%s-%s", job, taskGroup, task), }, ) - s.ID = fmt.Sprintf("%s-%s", NomadConsulPrefix, s.Hash()) for _, check := range s.Checks { if check.Name == "" { check.Name = fmt.Sprintf("service: %q check", s.Name) } - check.ID = check.Hash(s.ID) } } +func (s *Service) ID() string { + return fmt.Sprintf("%s-%s", NomadConsulPrefix, s.Hash()) +} + // Validate checks if the Check definition is valid func (s *Service) Validate() error { var mErr multierror.Error