Dump load balancers belonging to the load_balancer groups attached to the
specified logical switch/logical router running ls-lb-list/lr-lb-list.
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2059261
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
tests/ovn-nbctl.at | 70 +++++++++++++++++++++++++++++++++++++++++--
utilities/ovn-nbctl.c | 54 +++++++++++++++++++++++++++++++++
2 files changed, 122 insertions(+), 2 deletions(-)
diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
index f9b9defd0..2388eba2e 100644
--- a/tests/ovn-nbctl.at
+++ b/tests/ovn-nbctl.at
@@ -997,6 +997,30 @@ AT_CHECK([ovn-nbctl ls-lb-del ls0 lb3])
AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [])
AT_CHECK([ovn-nbctl --if-exists ls-lb-del ls0 lb1])
+AT_CHECK([ovn-nbctl lb-add lb4 40.0.0.10 162.168.10.10,162.168.10.20])
+AT_CHECK([ovn-nbctl lb-add lb5 50.0.0.10 172.168.10.10,172.168.10.20])
+AT_CHECK([ovn-nbctl lb-add lb6 60.0.0.10 182.168.10.10,182.168.10.20])
+
+lb4=$(fetch_column nb:load_balancer _uuid name=lb4)
+lb5=$(fetch_column nb:load_balancer _uuid name=lb5)
+lb6=$(fetch_column nb:load_balancer _uuid name=lb6)
+
+lbg=$(ovn-nbctl create load_balancer_group name=lbg -- \
+ add load_balancer_group lbg load_balancer $lb4 -- \
+ add load_balancer_group lbg load_balancer $lb5 -- \
+ add load_balancer_group lbg load_balancer $lb6)
+
+AT_CHECK([ovn-nbctl add logical_switch ls0 load_balancer_group $lbg])
+
+AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [dnl
+UUID LB PROTO VIP
IPs
+<0> lb4 tcp 40.0.0.10 162.168.10.10,162.168.10.20
+<1> lb5 tcp 50.0.0.10 172.168.10.10,172.168.10.20
+<2> lb6 tcp 60.0.0.10 182.168.10.10,182.168.10.20
+])
+
+AT_CHECK([ovn-nbctl remove logical_switch ls0 load_balancer_group $lbg])
+
dnl Remove all load balancers from logical switch.
AT_CHECK([ovn-nbctl ls-lb-add ls0 lb0])
AT_CHECK([ovn-nbctl ls-lb-add ls0 lb1])
@@ -1046,7 +1070,16 @@ AT_CHECK([ovn-nbctl ls-lb-add ls0 lb1])
AT_CHECK([ovn-nbctl lb-del lb0])
AT_CHECK([ovn-nbctl lb-del lb1])
AT_CHECK([ovn-nbctl lr-lb-list lr0 | uuidfilt], [0], [])
-AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [])])
+AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [])
+
+AT_CHECK([ovn-nbctl add logical_router lr0 load_balancer_group $lbg])
+
+AT_CHECK([ovn-nbctl lr-lb-list lr0 | uuidfilt], [0], [dnl
+UUID LB PROTO VIP
IPs
+<0> lb4 tcp 40.0.0.10 162.168.10.10,162.168.10.20
+<1> lb5 tcp 50.0.0.10 172.168.10.10,172.168.10.20
+<2> lb6 tcp 60.0.0.10 182.168.10.10,182.168.10.20
+])])
dnl ---------------------------------------------------------------------
@@ -1271,6 +1304,30 @@ AT_CHECK([ovn-nbctl ls-lb-add ls0 lb3])
AT_CHECK([ovn-nbctl ls-lb-del ls0])
AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [])
+AT_CHECK([ovn-nbctl lb-add lb4 [[ae07::10]]:80 [[fd0f::10]]:80,[[fd0f::20]]:80])
+AT_CHECK([ovn-nbctl lb-add lb5 [[ae08::10]]:80 [[fd0f::10]]:80,[[fd0f::20]]:80
udp])
+AT_CHECK([ovn-nbctl lb-add lb6 ae09::10 fd0f::10,fd0f::20])
+
+lb4=$(fetch_column nb:load_balancer _uuid name=lb4)
+lb5=$(fetch_column nb:load_balancer _uuid name=lb5)
+lb6=$(fetch_column nb:load_balancer _uuid name=lb6)
+
+lbg=$(ovn-nbctl create load_balancer_group name=lbg -- \
+ add load_balancer_group lbg load_balancer $lb4 -- \
+ add load_balancer_group lbg load_balancer $lb5 -- \
+ add load_balancer_group lbg load_balancer $lb6)
+
+AT_CHECK([ovn-nbctl add logical_switch ls0 load_balancer_group $lbg])
+
+AT_CHECK([ovn-nbctl ls-lb-list ls0 | uuidfilt], [0], [dnl
+UUID LB PROTO VIP
IPs
+<0> lb4 tcp [[ae07::10]]:80
[[fd0f::10]]:80,[[fd0f::20]]:80
+<1> lb5 udp [[ae08::10]]:80
[[fd0f::10]]:80,[[fd0f::20]]:80
+<2> lb6 tcp ae09::10 fd0f::10,fd0f::20
+])
+
+AT_CHECK([ovn-nbctl remove logical_switch ls0 load_balancer_group $lbg])
+
dnl Add load balancer to logical router.
AT_CHECK([ovn-nbctl lr-add lr0])
AT_CHECK([ovn-nbctl lr-lb-add lr0 lb0])
@@ -1305,7 +1362,16 @@ AT_CHECK([ovn-nbctl lr-lb-add lr0 lb0])
AT_CHECK([ovn-nbctl lr-lb-add lr0 lb1])
AT_CHECK([ovn-nbctl lr-lb-add lr0 lb3])
AT_CHECK([ovn-nbctl lr-lb-del lr0])
-AT_CHECK([ovn-nbctl lr-lb-list lr0 | uuidfilt], [0], [])])
+AT_CHECK([ovn-nbctl lr-lb-list lr0 | uuidfilt], [0], [])
+
+AT_CHECK([ovn-nbctl add logical_router lr0 load_balancer_group $lbg])
+
+AT_CHECK([ovn-nbctl lr-lb-list lr0 | uuidfilt], [0], [dnl
+UUID LB PROTO VIP
IPs
+<0> lb4 tcp [[ae07::10]]:80
[[fd0f::10]]:80,[[fd0f::20]]:80
+<1> lb5 udp [[ae08::10]]:80
[[fd0f::10]]:80,[[fd0f::20]]:80
+<2> lb6 tcp ae09::10 fd0f::10,fd0f::20
+])])
dnl ---------------------------------------------------------------------
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index e747f6933..d09fd5963 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -3233,10 +3233,16 @@ nbctl_pre_lr_lb_list(struct ctl_context *ctx)
{
ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_col_name);
ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_col_load_balancer);
+ ovsdb_idl_add_column(ctx->idl,
+ &nbrec_logical_router_col_load_balancer_group);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_name);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_protocol);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_vips);
+
+ ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_group_col_name);
+ ovsdb_idl_add_column(ctx->idl,
+ &nbrec_load_balancer_group_col_load_balancer);
}
static void
@@ -3252,16 +3258,37 @@ nbctl_lr_lb_list(struct ctl_context *ctx)
ctx->error = error;
return;
}
+
for (int i = 0; i < lr->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
= lr->load_balancer[i];
vip_width = lb_get_max_vip_length(lb, vip_width);
}
+ for (int i = 0; i < lr->n_load_balancer_group; i++) {
+ const struct nbrec_load_balancer_group *lbg
+ = lr->load_balancer_group[i];
+ for (int j = 0; j < lbg->n_load_balancer; j++) {
+ const struct nbrec_load_balancer *lb
+ = lbg->load_balancer[j];
+ vip_width = lb_get_max_vip_length(lb, vip_width);
+ }
+ }
+
for (int i = 0; i < lr->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
= lr->load_balancer[i];
lb_info_add_smap(lb, &lbs, vip_width);
}
+ /* Add load balancer groups. */
+ for (int i = 0; i < lr->n_load_balancer_group; i++) {
+ const struct nbrec_load_balancer_group *lbg
+ = lr->load_balancer_group[i];
+ for (int j = 0; j < lbg->n_load_balancer; j++) {
+ const struct nbrec_load_balancer *lb
+ = lbg->load_balancer[j];
+ lb_info_add_smap(lb, &lbs, vip_width);
+ }
+ }
lb_info_print(ctx, &lbs, vip_width);
smap_destroy(&lbs);
@@ -3369,10 +3396,16 @@ nbctl_pre_ls_lb_list(struct ctl_context *ctx)
{
ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_col_name);
ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_col_load_balancer);
+ ovsdb_idl_add_column(ctx->idl,
+ &nbrec_logical_switch_col_load_balancer_group);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_name);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_protocol);
ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_col_vips);
+
+ ovsdb_idl_add_column(ctx->idl, &nbrec_load_balancer_group_col_name);
+ ovsdb_idl_add_column(ctx->idl,
+ &nbrec_load_balancer_group_col_load_balancer);
}
static void
@@ -3388,16 +3421,37 @@ nbctl_ls_lb_list(struct ctl_context *ctx)
ctx->error = error;
return;
}
+
for (int i = 0; i < ls->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
= ls->load_balancer[i];
vip_width = lb_get_max_vip_length(lb, vip_width);
}
+ for (int i = 0; i < ls->n_load_balancer_group; i++) {
+ const struct nbrec_load_balancer_group *lbg
+ = ls->load_balancer_group[i];
+ for (int j = 0; j < lbg->n_load_balancer; j++) {
+ const struct nbrec_load_balancer *lb
+ = lbg->load_balancer[j];
+ vip_width = lb_get_max_vip_length(lb, vip_width);
+ }
+ }
+
for (int i = 0; i < ls->n_load_balancer; i++) {
const struct nbrec_load_balancer *lb
= ls->load_balancer[i];
lb_info_add_smap(lb, &lbs, vip_width);
}
+ /* Add load balancer groups. */
+ for (int i = 0; i < ls->n_load_balancer_group; i++) {
+ const struct nbrec_load_balancer_group *lbg
+ = ls->load_balancer_group[i];
+ for (int j = 0; j < lbg->n_load_balancer; j++) {
+ const struct nbrec_load_balancer *lb
+ = lbg->load_balancer[j];
+ lb_info_add_smap(lb, &lbs, vip_width);
+ }
+ }
lb_info_print(ctx, &lbs, vip_width);
smap_destroy(&lbs);