1
#include "source/extensions/clusters/common/dns_cluster_backcompat.h"
2

            
3
#include "envoy/common/exception.h"
4
#include "envoy/config/cluster/v3/cluster.pb.h"
5
#include "envoy/extensions/clusters/dns/v3/dns_cluster.pb.h"
6

            
7
namespace Envoy {
8
namespace Upstream {
9

            
10
void createDnsClusterFromLegacyFields(
11
    const envoy::config::cluster::v3::Cluster& cluster,
12
417
    envoy::extensions::clusters::dns::v3::DnsCluster& dns_cluster) {
13

            
14
  // We have to add all these guards because otherwise dns_cluster.mutable_FIELD will initialize the
15
  // field and dns_cluster.has_FIELD will return true
16
417
  if (cluster.has_dns_refresh_rate()) {
17
47
    dns_cluster.mutable_dns_refresh_rate()->CopyFrom(cluster.dns_refresh_rate());
18
47
  }
19

            
20
417
  if (cluster.has_dns_failure_refresh_rate()) {
21
22
    auto* new_refresh_rate = dns_cluster.mutable_dns_failure_refresh_rate();
22
22
    const auto& old_refresh_rate = cluster.dns_failure_refresh_rate();
23

            
24
22
    if (old_refresh_rate.has_max_interval()) {
25
21
      new_refresh_rate->mutable_max_interval()->CopyFrom(old_refresh_rate.max_interval());
26
21
    }
27
22
    if (old_refresh_rate.has_base_interval()) {
28
21
      new_refresh_rate->mutable_base_interval()->CopyFrom(old_refresh_rate.base_interval());
29
21
    }
30
22
  }
31

            
32
417
  dns_cluster.set_respect_dns_ttl(cluster.respect_dns_ttl());
33

            
34
417
  if (cluster.has_dns_jitter()) {
35
15
    dns_cluster.mutable_dns_jitter()->CopyFrom(cluster.dns_jitter());
36
15
  }
37

            
38
417
  switch (cluster.dns_lookup_family()) {
39
    PANIC_ON_PROTO_ENUM_SENTINEL_VALUES;
40
206
  case envoy::config::cluster::v3::Cluster::AUTO:
41
206
    dns_cluster.set_dns_lookup_family(envoy::extensions::clusters::common::dns::v3::AUTO);
42
206
    break;
43
157
  case envoy::config::cluster::v3::Cluster::V4_ONLY:
44
157
    dns_cluster.set_dns_lookup_family(envoy::extensions::clusters::common::dns::v3::V4_ONLY);
45
157
    break;
46
26
  case envoy::config::cluster::v3::Cluster::V6_ONLY:
47
26
    dns_cluster.set_dns_lookup_family(envoy::extensions::clusters::common::dns::v3::V6_ONLY);
48
26
    break;
49
1
  case envoy::config::cluster::v3::Cluster::V4_PREFERRED:
50
1
    dns_cluster.set_dns_lookup_family(envoy::extensions::clusters::common::dns::v3::V4_PREFERRED);
51
1
    break;
52
27
  case envoy::config::cluster::v3::Cluster::ALL:
53
27
    dns_cluster.set_dns_lookup_family(envoy::extensions::clusters::common::dns::v3::ALL);
54
27
    break;
55
417
  }
56
417
}
57

            
58
} // namespace Upstream
59
} // namespace Envoy