hashicorp/nomad · error

Consul Terminating Gateway requires at least one service

Error message

Consul Terminating Gateway requires at least one service

What it means

ConsulTerminatingConfigEntry.Validate found an empty Services list on a terminating gateway. A terminating gateway must link to at least one upstream Consul service it can proxy for mesh workloads.

Source

Thrown at nomad/structs/services.go:2696

		Services: services,
	}
}

func (e *ConsulTerminatingConfigEntry) Equal(o *ConsulTerminatingConfigEntry) bool {
	if e == nil || o == nil {
		return e == o
	}

	return linkedServicesEqual(e.Services, o.Services)
}

func (e *ConsulTerminatingConfigEntry) Validate() error {
	if e == nil {
		return nil
	}

	if len(e.Services) == 0 {
		return fmt.Errorf("Consul Terminating Gateway requires at least one service")
	}

	for _, service := range e.Services {
		if err := service.Validate(); err != nil {
			return err
		}
	}

	return nil
}

// ConsulMeshConfigEntry is a stub used to represent that the gateway service
// type should be for a Mesh Gateway. Unlike Ingress and Terminating, there is no
// dedicated Consul Config Entry type for "mesh-gateway", for now. We still
// create a type for future proofing, and to keep underlying job-spec marshaling
// consistent with the other types.
type ConsulMeshConfigEntry struct {
	// nothing in here

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Add one or more service blocks naming the linked Consul services
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at nomad/structs/services.go:2696 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/894f4591fbd46760. Report an issue: GitHub.