]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Handle the default LB policy in YAML configuration
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 27 Dec 2024 11:59:47 +0000 (12:59 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 16 Jan 2025 08:50:35 +0000 (09:50 +0100)
pdns/dnsdistdist/dnsdist-configuration-yaml.cc
pdns/dnsdistdist/dnsdist-rust-lib/rust/src/lib.rs
pdns/dnsdistdist/dnsdist-settings-definitions.yml
pdns/dnsdistdist/docs/reference/yaml-settings.rst

index 1ed9835171e2a1a0b65c55f8d98adb93de87e44e..da6dae586bfcd7317df2c3154c04e93e151a2338 100644 (file)
@@ -831,6 +831,13 @@ bool loadConfigurationFromFile(const std::string& fileName, bool isClient, bool
       }
     }
 
+    if (!globalConfig.load_balancing_policies.default_policy.empty()) {
+      auto policy = getRegisteredTypeByName<ServerPolicy>(globalConfig.load_balancing_policies.default_policy);
+      dnsdist::configuration::updateRuntimeConfiguration([&policy](dnsdist::configuration::RuntimeConfiguration& config) {
+        config.d_lbPolicy = std::move(policy);
+      });
+    }
+
     for (const auto& pool : globalConfig.pools) {
       std::shared_ptr<ServerPool> poolObj = createPoolIfNotExists(std::string(pool.name));
       if (!pool.packet_cache.empty()) {
index ac9a1845e4c3a62502dcb454dbc179d70b16f9b4..81f95759d2ebb981a093fd8b66d6135befdd19fd 100644 (file)
@@ -2010,6 +2010,8 @@ mod dnsdistsettings {
     #[derive(Deserialize, Serialize, Debug, PartialEq)]
     #[serde(deny_unknown_fields)]
     struct LoadBalancingPoliciesConfiguration {
+        #[serde(rename = "default-policy", default = "crate::default_value_load_balancing_policies_default_policy", skip_serializing_if = "crate::default_value_equal_load_balancing_policies_default_policy")]
+        default_policy: String,
         #[serde(rename = "servfail-on-no-server", default, skip_serializing_if = "crate::is_default")]
         servfail_on_no_server: bool,
         #[serde(rename = "round-robin-servfail-on-no-server", default, skip_serializing_if = "crate::is_default")]
@@ -3058,6 +3060,15 @@ impl Default for dnsdistsettings::CustomLoadBalancingPolicyConfiguration {
 }
 
 
+// DEFAULT HANDLING for load_balancing_policies_default_policy
+fn default_value_load_balancing_policies_default_policy() -> String {
+    String::from("leastOutstanding")
+}
+fn default_value_equal_load_balancing_policies_default_policy(value: &str)-> bool {
+    value == default_value_load_balancing_policies_default_policy()
+}
+
+
 impl Default for dnsdistsettings::LoadBalancingPoliciesConfiguration {
     fn default() -> Self {
         let deserialized: dnsdistsettings::LoadBalancingPoliciesConfiguration = serde_yaml::from_str("").unwrap();
index 1e42374d39acf0b692a8e118b01be70950b3cc89..513d1f12ac7caff54f3851ec0e91a54677d1846e 100644 (file)
@@ -1411,6 +1411,11 @@ custom-load-balancing-policy:
 
 load-balancing-policies:
   parameters:
+    - name: "default-policy"
+      type: "String"
+      default: "leastOutstanding"
+      lua-name: "setServerPolicy"
+      runtime-configurable: true
     - name: "servfail-on-no-server"
       type: "bool"
       default: "false"
index b887c5e8a3b858675f81a3a17a2b665b555aa86a..ee4c8d37c7d65b8246556c263f99186f8b68a9f5 100644 (file)
@@ -501,6 +501,7 @@ LazyHealthCheckConfiguration
 LoadBalancingPoliciesConfiguration
 ----------------------------------
 
+- **default-policy**: String ``(leastOutstanding)``
 - **servfail-on-no-server**: Boolean ``(false)``
 - **round-robin-servfail-on-no-server**: Boolean ``(false)``
 - **weighted-balancing-factor**: Double ``(0.0)``