1
#pragma once
2

            
3
#include "envoy/config/config_validator.h"
4
#include "envoy/extensions/config/validators/minimum_clusters/v3/minimum_clusters.pb.h"
5

            
6
namespace Envoy {
7
namespace Extensions {
8
namespace Config {
9
namespace Validators {
10

            
11
/**
12
 * A config validator extension that validates that the number of clusters do
13
 * not decrease below some threshold.
14
 */
15
class MinimumClustersValidator : public Envoy::Config::ConfigValidator {
16
public:
17
  MinimumClustersValidator(
18
      const envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator&
19
          config)
20
21
      : min_clusters_num_(config.min_clusters_num()) {}
21

            
22
  // ConfigValidator
23
  void validate(const Server::Instance& server,
24
                const std::vector<Envoy::Config::DecodedResourcePtr>& resources) override;
25

            
26
  void validate(const Server::Instance& server,
27
                const std::vector<Envoy::Config::DecodedResourcePtr>& added_resources,
28
                const Protobuf::RepeatedPtrField<std::string>& removed_resources) override;
29

            
30
private:
31
  const uint64_t min_clusters_num_;
32
};
33

            
34
} // namespace Validators
35
} // namespace Config
36
} // namespace Extensions
37
} // namespace Envoy