102 lines
3.0 KiB
Go
102 lines
3.0 KiB
Go
package structs
|
|
|
|
const (
|
|
// JobServiceRegistrationsRPCMethod is the RPC method for listing all
|
|
// service registrations assigned to a specific namespaced job.
|
|
//
|
|
// Args: JobServiceRegistrationsRequest
|
|
// Reply: JobServiceRegistrationsResponse
|
|
JobServiceRegistrationsRPCMethod = "Job.GetServiceRegistrations"
|
|
)
|
|
|
|
// JobServiceRegistrationsRequest is the request object used to list all
|
|
// service registrations belonging to the specified Job.ID.
|
|
type JobServiceRegistrationsRequest struct {
|
|
JobID string
|
|
QueryOptions
|
|
}
|
|
|
|
// JobServiceRegistrationsResponse is the response object when performing a
|
|
// listing of services belonging to a namespaced job.
|
|
type JobServiceRegistrationsResponse struct {
|
|
Services []*ServiceRegistration
|
|
QueryMeta
|
|
}
|
|
|
|
// RequiredNativeServiceDiscovery identifies which task groups, if any, within
|
|
// the job are utilising Nomad native service discovery.
|
|
func (j *Job) RequiredNativeServiceDiscovery() map[string]bool {
|
|
groups := make(map[string]bool)
|
|
|
|
for _, tg := range j.TaskGroups {
|
|
|
|
// It is possible for services using the Nomad provider to be
|
|
// configured at the task group level, so check here first.
|
|
if requiresNativeServiceDiscovery(tg.Services) {
|
|
groups[tg.Name] = true
|
|
continue
|
|
}
|
|
|
|
// Iterate the tasks within the task group to check the services
|
|
// configured at this more traditional level.
|
|
for _, task := range tg.Tasks {
|
|
if requiresNativeServiceDiscovery(task.Services) {
|
|
groups[tg.Name] = true
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
return groups
|
|
}
|
|
|
|
// requiresNativeServiceDiscovery identifies whether any of the services passed
|
|
// to the function are utilising Nomad native service discovery.
|
|
func requiresNativeServiceDiscovery(services []*Service) bool {
|
|
for _, tgService := range services {
|
|
if tgService.Provider == ServiceProviderNomad {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// RequiredConsulServiceDiscovery identifies which task groups, if any, within
|
|
// the job are utilising Consul service discovery.
|
|
func (j *Job) RequiredConsulServiceDiscovery() map[string]bool {
|
|
groups := make(map[string]bool)
|
|
|
|
for _, tg := range j.TaskGroups {
|
|
|
|
// It is possible for services using the Consul provider to be
|
|
// configured at the task group level, so check here first. This is
|
|
// a requirement for Consul Connect services.
|
|
if requiresConsulServiceDiscovery(tg.Services) {
|
|
groups[tg.Name] = true
|
|
continue
|
|
}
|
|
|
|
// Iterate the tasks within the task group to check the services
|
|
// configured at this more traditional level.
|
|
for _, task := range tg.Tasks {
|
|
if requiresConsulServiceDiscovery(task.Services) {
|
|
groups[tg.Name] = true
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
return groups
|
|
}
|
|
|
|
// requiresConsulServiceDiscovery identifies whether any of the services passed
|
|
// to the function are utilising Consul service discovery.
|
|
func requiresConsulServiceDiscovery(services []*Service) bool {
|
|
for _, tgService := range services {
|
|
if tgService.Provider == ServiceProviderConsul || tgService.Provider == "" {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|