diff --git a/.changelog/14912.txt b/.changelog/14912.txt new file mode 100644 index 000000000000..6cafa5a53e51 --- /dev/null +++ b/.changelog/14912.txt @@ -0,0 +1,3 @@ +```release-note:bug +variables: Fixed a bug where Nomad version checking was not enforced for writing to variables +``` diff --git a/nomad/leader.go b/nomad/leader.go index 7e9bea28a8fb..86ad646e80f0 100644 --- a/nomad/leader.go +++ b/nomad/leader.go @@ -1991,14 +1991,7 @@ func (s *Server) initializeKeyring(stopCh <-chan struct{}) { default: } - members := s.serf.Members() - regionMembers := []serf.Member{} - for _, member := range members { - if member.Tags["region"] == s.Region() { - regionMembers = append(regionMembers, member) - } - } - if ServersMeetMinimumVersion(regionMembers, minVersionKeyring, true) { + if RegionServersMeetMinimumVersion(s.serf.Members(), s.Region(), minVersionKeyring, true) { break } } diff --git a/nomad/variables_endpoint.go b/nomad/variables_endpoint.go index 2bfa430ab08a..a2d650ae8b2c 100644 --- a/nomad/variables_endpoint.go +++ b/nomad/variables_endpoint.go @@ -46,6 +46,11 @@ func (sv *Variables) Apply(args *structs.VariablesApplyRequest, reply *structs.V args.Var.Namespace = targetNS } + if RegionServersMeetMinimumVersion( + sv.srv.serf.Members(), sv.srv.Region(), minVersionKeyring, true) { + return fmt.Errorf("all servers must be running version 1.4.0 or later to apply variables") + } + canRead, err := svePreApply(sv, args, args.Var) if err != nil { return err