2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 09:57:41 +00:00

[#2629] added origin for ha lease commands

This commit is contained in:
Razvan Becheriu 2023-05-16 16:31:08 +03:00
parent 5aa1ecfbd5
commit fda083c259
3 changed files with 58 additions and 0 deletions

View File

@ -425,6 +425,26 @@ Examples:
2018-01-06 01:02:12 CET Administrator deleted a lease for a device identified by: hw-address of 1a:1b:1c:1d:1e:1f 2018-01-06 01:02:12 CET Administrator deleted a lease for a device identified by: hw-address of 1a:1b:1c:1d:1e:1f
If High availability module is enabled, the partner will periodically send lease
commands which have a similar format, the only difference is that the issuer of
the command is 'HA partner' instead of 'Administrator'.
::
*timestamp* HA partner added ...
or
::
*timestamp* HA partner updated ...
or
::
*timestamp* HA partner deleted ...
The ``request-parser-format`` and ``response-parser-format`` options can be used to The ``request-parser-format`` and ``response-parser-format`` options can be used to
extract and log data from the incoming packet and server response packet, extract and log data from the incoming packet and server response packet,
respectively. The configured value is an evaluated parsed expression returning a respectively. The configured value is an evaluated parsed expression returning a
@ -730,6 +750,26 @@ Examples:
2018-01-06 01:02:11 PST Administrator deleted a lease for a device identified by: duid of 1a:1b:1c:1d:1e:1f:20:21:22:23:24 2018-01-06 01:02:11 PST Administrator deleted a lease for a device identified by: duid of 1a:1b:1c:1d:1e:1f:20:21:22:23:24
If High availability module is enabled, the partner will periodically send lease
commands which have a similar format, the only difference is that the issuer of
the command is 'HA partner' instead of 'Administrator'.
::
*timestamp* HA partner added ...
or
::
*timestamp* HA partner updated ...
or
::
*timestamp* HA partner deleted ...
The ``request-parser-format`` and ``response-parser-format`` options can be used to The ``request-parser-format`` and ``response-parser-format`` options can be used to
extract and log data from the incoming packet and server response packet, extract and log data from the incoming packet and server response packet,
respectively. The configured value is an evaluated parsed expression returning a respectively. The configured value is an evaluated parsed expression returning a

View File

@ -81,6 +81,7 @@ CommandCreator::createLease4Update(const Lease4& lease4) {
ElementPtr lease_as_json = lease4.toElement(); ElementPtr lease_as_json = lease4.toElement();
insertLeaseExpireTime(lease_as_json); insertLeaseExpireTime(lease_as_json);
lease_as_json->set("force-create", Element::create(true)); lease_as_json->set("force-create", Element::create(true));
lease_as_json->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease4-update", lease_as_json); ConstElementPtr command = config::createCommand("lease4-update", lease_as_json);
insertService(command, HAServerType::DHCPv4); insertService(command, HAServerType::DHCPv4);
return (command); return (command);
@ -90,6 +91,7 @@ ConstElementPtr
CommandCreator::createLease4Delete(const Lease4& lease4) { CommandCreator::createLease4Delete(const Lease4& lease4) {
ElementPtr lease_as_json = lease4.toElement(); ElementPtr lease_as_json = lease4.toElement();
insertLeaseExpireTime(lease_as_json); insertLeaseExpireTime(lease_as_json);
lease_as_json->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease4-del", lease_as_json); ConstElementPtr command = config::createCommand("lease4-del", lease_as_json);
insertService(command, HAServerType::DHCPv4); insertService(command, HAServerType::DHCPv4);
return (command); return (command);
@ -149,6 +151,7 @@ CommandCreator::createLease6BulkApply(const Lease6CollectionPtr& leases,
ElementPtr args = Element::createMap(); ElementPtr args = Element::createMap();
args->set("deleted-leases", deleted_leases_list); args->set("deleted-leases", deleted_leases_list);
args->set("leases", leases_list); args->set("leases", leases_list);
args->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease6-bulk-apply", args); ConstElementPtr command = config::createCommand("lease6-bulk-apply", args);
insertService(command, HAServerType::DHCPv6); insertService(command, HAServerType::DHCPv6);
@ -175,6 +178,7 @@ CommandCreator::createLease6BulkApply(LeaseUpdateBacklog& leases) {
ElementPtr args = Element::createMap(); ElementPtr args = Element::createMap();
args->set("deleted-leases", deleted_leases_list); args->set("deleted-leases", deleted_leases_list);
args->set("leases", leases_list); args->set("leases", leases_list);
args->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease6-bulk-apply", args); ConstElementPtr command = config::createCommand("lease6-bulk-apply", args);
insertService(command, HAServerType::DHCPv6); insertService(command, HAServerType::DHCPv6);
@ -186,6 +190,7 @@ CommandCreator::createLease6Update(const Lease6& lease6) {
ElementPtr lease_as_json = lease6.toElement(); ElementPtr lease_as_json = lease6.toElement();
insertLeaseExpireTime(lease_as_json); insertLeaseExpireTime(lease_as_json);
lease_as_json->set("force-create", Element::create(true)); lease_as_json->set("force-create", Element::create(true));
lease_as_json->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease6-update", lease_as_json); ConstElementPtr command = config::createCommand("lease6-update", lease_as_json);
insertService(command, HAServerType::DHCPv6); insertService(command, HAServerType::DHCPv6);
return (command); return (command);
@ -195,6 +200,7 @@ ConstElementPtr
CommandCreator::createLease6Delete(const Lease6& lease6) { CommandCreator::createLease6Delete(const Lease6& lease6) {
ElementPtr lease_as_json = lease6.toElement(); ElementPtr lease_as_json = lease6.toElement();
insertLeaseExpireTime(lease_as_json); insertLeaseExpireTime(lease_as_json);
lease_as_json->set("origin", Element::create("ha-partner"));
ConstElementPtr command = config::createCommand("lease6-del", lease_as_json); ConstElementPtr command = config::createCommand("lease6-del", lease_as_json);
insertService(command, HAServerType::DHCPv6); insertService(command, HAServerType::DHCPv6);
return (command); return (command);

View File

@ -208,6 +208,7 @@ TEST(CommandCreatorTest, createLease4Update) {
// The lease update must contain the "force-create" parameter indicating that // The lease update must contain the "force-create" parameter indicating that
// the lease must be created if it doesn't exist. // the lease must be created if it doesn't exist.
lease_as_json->set("force-create", Element::create(true)); lease_as_json->set("force-create", Element::create(true));
lease_as_json->set("origin", Element::create("ha-partner"));
EXPECT_EQ(lease_as_json->str(), arguments->str()); EXPECT_EQ(lease_as_json->str(), arguments->str());
} }
@ -219,6 +220,7 @@ TEST(CommandCreatorTest, createLease4Delete) {
ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease4-del", "dhcp4", ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease4-del", "dhcp4",
arguments)); arguments));
ElementPtr lease_as_json = leaseAsJson(createLease4()); ElementPtr lease_as_json = leaseAsJson(createLease4());
lease_as_json->set("origin", Element::create("ha-partner"));
EXPECT_EQ(lease_as_json->str(), arguments->str()); EXPECT_EQ(lease_as_json->str(), arguments->str());
} }
@ -334,6 +336,7 @@ TEST(CommandCreatorTest, createLease6Update) {
// The lease update must contain the "force-create" parameter indicating that // The lease update must contain the "force-create" parameter indicating that
// the lease must be created if it doesn't exist. // the lease must be created if it doesn't exist.
lease_as_json->set("force-create", Element::create(true)); lease_as_json->set("force-create", Element::create(true));
lease_as_json->set("origin", Element::create("ha-partner"));
EXPECT_EQ(lease_as_json->str(), arguments->str()); EXPECT_EQ(lease_as_json->str(), arguments->str());
} }
@ -345,6 +348,7 @@ TEST(CommandCreatorTest, createLease6Delete) {
ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-del", "dhcp6", ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-del", "dhcp6",
arguments)); arguments));
ElementPtr lease_as_json = leaseAsJson(createLease6()); ElementPtr lease_as_json = leaseAsJson(createLease6());
lease_as_json->set("origin", Element::create("ha-partner"));
EXPECT_EQ(lease_as_json->str(), arguments->str()); EXPECT_EQ(lease_as_json->str(), arguments->str());
} }
@ -364,6 +368,10 @@ TEST(CommandCreatorTest, createLease6BulkApply) {
ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply", ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply",
"dhcp6", arguments)); "dhcp6", arguments));
ConstElementPtr origin = arguments->get("origin");
ASSERT_TRUE(origin);
ASSERT_EQ("ha-partner", origin->stringValue());
// Verify deleted-leases. // Verify deleted-leases.
auto deleted_leases_json = arguments->get("deleted-leases"); auto deleted_leases_json = arguments->get("deleted-leases");
ASSERT_TRUE(deleted_leases_json); ASSERT_TRUE(deleted_leases_json);
@ -396,6 +404,10 @@ TEST(CommandCreatorTest, createLease6BulkApplyFromBacklog) {
ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply", ASSERT_NO_FATAL_FAILURE(testCommandBasics(command, "lease6-bulk-apply",
"dhcp6", arguments)); "dhcp6", arguments));
ConstElementPtr origin = arguments->get("origin");
ASSERT_TRUE(origin);
ASSERT_EQ("ha-partner", origin->stringValue());
// Verify deleted-leases. // Verify deleted-leases.
auto deleted_leases_json = arguments->get("deleted-leases"); auto deleted_leases_json = arguments->get("deleted-leases");
ASSERT_TRUE(deleted_leases_json); ASSERT_TRUE(deleted_leases_json);