Skip to content

Commit

Permalink
nbctl: Add optional ha-chassis-group arg to ha-chassis-group-list
Browse files Browse the repository at this point in the history
This commit adds support for optional ha-chassis-group argument to
ha-chassis-group-list command to show one record.

Also add few tests to validate output from ha-chassis-group-list.

Signed-off-by: Evgenii Kovalev <ekovalev.off@gmail.com>
Signed-off-by: Numan Siddique <numans@ovn.org>
  • Loading branch information
aeko-empt authored and numansiddique committed Nov 3, 2023
1 parent c16e5da commit 12edbf7
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 20 deletions.
1 change: 1 addition & 0 deletions AUTHORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ Eric Garver e@erig.me
Eric Sesterhenn eric.sesterhenn@lsexperts.de
Ethan J. Jackson ejj@eecs.berkeley.edu
Ethan Rahn erahn@arista.com
Evgenii Kovalev ekovalev.off@gmail.com
Eziz Durdyyev ezizdurdy@gmail.com
Fabrizio D'Angelo fdangelo@redhat.com
Felix Huettner felix.huettner@mail.schwarz
Expand Down
53 changes: 53 additions & 0 deletions tests/ovn-nbctl.at
Original file line number Diff line number Diff line change
Expand Up @@ -2741,3 +2741,56 @@ cp $PKIDIR/$cert $cert
OVS_WAIT_UNTIL([ovn-appctl -t ovn-nbctl run show])

AT_CLEANUP

dnl ---------------------------------------------------------------------

AT_SETUP([ovn-nbctl - ha-chassis-group-list group])
OVN_NBCTL_TEST_START daemon
check ovn-nbctl ha-chassis-group-add chg1
chg1uuid=$(fetch_column nb:HA_Chassis_Group _uuid name=chg1)
check ovn-nbctl ha-chassis-group-add chg2
chg2uuid=$(fetch_column nb:HA_Chassis_Group _uuid name=chg2)
check ovn-nbctl ha-chassis-group-add-chassis chg1 hv1 1
check ovn-nbctl ha-chassis-group-add-chassis chg1 hv2 2
check ovn-nbctl ha-chassis-group-add-chassis chg2 hv3 3
check ovn-nbctl ha-chassis-group-add-chassis chg2 hv4 4
AT_CHECK([ovn-nbctl ha-chassis-group-list], [0], [ignore])

AT_CHECK_UNQUOTED([ovn-nbctl ha-chassis-group-list $chg1uuid | grep chg1 | awk '{print $1}'], [0], [dnl
$chg1uuid
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg1 | awk '{print $2}' | grep chg], [0], [dnl
(chg1)
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg1 | awk '{print $2}' | grep -A1 hv1], [0], [dnl
(hv1)
1
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg1 | awk '{print $2}' | grep -A1 hv2], [0], [dnl
(hv2)
2
])

AT_CHECK_UNQUOTED([ovn-nbctl ha-chassis-group-list $chg2uuid | grep chg2 | awk '{print $1}'], [0], [dnl
$chg2uuid
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg2 | awk '{print $2}' | grep chg], [0], [dnl
(chg2)
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg2 | awk '{print $2}' | grep -A1 hv3], [0], [dnl
(hv3)
3
])
AT_CHECK([ovn-nbctl ha-chassis-group-list chg2 | awk '{print $2}' | grep -A1 hv4], [0], [dnl
(hv4)
4
])

AT_CHECK([ovn-nbctl ha-chassis-group-list negative], [1], [], [dnl
ovn-nbctl: negative: ha_chassis_group name not found
])
AT_CHECK([ovn-nbctl ha-chassis-group-list 11111111-1111-1111-1111-111111111111], [1], [], [dnl
ovn-nbctl: 11111111-1111-1111-1111-111111111111: ha_chassis_group UUID not found
])
OVN_NBCTL_TEST_STOP "/terminating with signal 15/d"
AT_CLEANUP
8 changes: 5 additions & 3 deletions utilities/ovn-nbctl.8.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1466,10 +1466,12 @@
<code>group</code> does not exist.
</dd>

<dt><code>ha-chassis-group-list</code></dt>
<dt><code>ha-chassis-group-list</code> [<var>ha-chassis-group</var>]</dt>
<dd>
Lists the HA chassis group <code>group</code> along with the
<code>HA chassis</code> if any associated with it.
Lists all HA chassis groups along with the <code>HA chassis</code>
if any associated with it.
If <var>ha-chassis-group</var> is also specified, then only the
specified <var>ha-chassis-group</var> will be listed.
</dd>

<dt><code>ha-chassis-group-add-chassis</code> <var>group</var>
Expand Down
57 changes: 40 additions & 17 deletions utilities/ovn-nbctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,9 +464,10 @@ Port group commands:\n\
pg-set-ports PG PORTS Set PORTS on port group PG\n\
pg-del PG Delete port group PG\n\
HA chassis group commands:\n\
ha-chassis-group-add GRP Create an HA chassis group GRP\n\
ha-chassis-group-del GRP Delete the HA chassis group GRP\n\
ha-chassis-group-list List the HA chassis groups\n\
ha-chassis-group-add GRP Create an HA chassis group GRP\n\
ha-chassis-group-del GRP Delete the HA chassis group GRP\n\
ha-chassis-group-list [GRP] Print the supplied HA chassis group or all\n\
if none supplied\n\
ha-chassis-group-add-chassis GRP CHASSIS PRIORITY Adds an HA\
chassis with mandatory PRIORITY to the HA chassis group GRP\n\
ha-chassis-group-remove-chassis GRP CHASSIS Removes the HA chassis\
Expand Down Expand Up @@ -7260,7 +7261,7 @@ ha_chassis_group_by_name_or_uuid(struct ctl_context *ctx, const char *id,
}

if (!ha_ch_grp && must_exist) {
ctx->error = xasprintf("%s: ha_chassi_group %s not found",
ctx->error = xasprintf("%s: ha_chassis_group %s not found",
id, is_uuid ? "UUID" : "name");
}

Expand Down Expand Up @@ -7306,23 +7307,45 @@ pre_ha_ch_grp_list(struct ctl_context *ctx)
}

static void
cmd_ha_ch_grp_list(struct ctl_context *ctx)
ha_ch_grp_info_print(struct ctl_context *ctx,
const struct nbrec_ha_chassis_group *ha_ch_grp)
{
ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
UUID_ARGS(&ha_ch_grp->header_.uuid), ha_ch_grp->name);
const struct nbrec_ha_chassis *ha_ch;
for (size_t i = 0; i < ha_ch_grp->n_ha_chassis; i++) {
ha_ch = ha_ch_grp->ha_chassis[i];
ds_put_format(&ctx->output,
" "UUID_FMT " (%s)\n"
" priority %"PRId64"\n\n",
UUID_ARGS(&ha_ch->header_.uuid), ha_ch->chassis_name,
ha_ch->priority);
}
ds_put_cstr(&ctx->output, "\n");
}

static void
ha_ch_grp_list_all(struct ctl_context *ctx)
{
const struct nbrec_ha_chassis_group *ha_ch_grp;

NBREC_HA_CHASSIS_GROUP_FOR_EACH (ha_ch_grp, ctx->idl) {
ds_put_format(&ctx->output, UUID_FMT " (%s)\n",
UUID_ARGS(&ha_ch_grp->header_.uuid), ha_ch_grp->name);
const struct nbrec_ha_chassis *ha_ch;
for (size_t i = 0; i < ha_ch_grp->n_ha_chassis; i++) {
ha_ch = ha_ch_grp->ha_chassis[i];
ds_put_format(&ctx->output,
" "UUID_FMT " (%s)\n"
" priority %"PRId64"\n\n",
UUID_ARGS(&ha_ch->header_.uuid), ha_ch->chassis_name,
ha_ch->priority);
ha_ch_grp_info_print(ctx, ha_ch_grp);
}
}

static void
cmd_ha_ch_grp_list(struct ctl_context *ctx)
{
if (ctx->argc == 1) {
ha_ch_grp_list_all(ctx);
} else if (ctx->argc == 2) {
const char *name_or_id = ctx->argv[1];
const struct nbrec_ha_chassis_group *ha_ch_grp =
ha_chassis_group_by_name_or_uuid(ctx, name_or_id, true);
if (ha_ch_grp) {
ha_ch_grp_info_print(ctx, ha_ch_grp);
}
ds_put_cstr(&ctx->output, "\n");
}
}

Expand Down Expand Up @@ -7966,7 +7989,7 @@ static const struct ctl_command_syntax nbctl_commands[] = {
NULL, cmd_ha_ch_grp_add, NULL, "", RW },
{"ha-chassis-group-del", 1, 1, "[CHASSIS GROUP]",
pre_ha_ch_grp_del, cmd_ha_ch_grp_del, NULL, "", RW },
{"ha-chassis-group-list", 0, 0, "[CHASSIS GROUP]",
{"ha-chassis-group-list", 0, 1, "[CHASSIS GROUP]",
pre_ha_ch_grp_list, cmd_ha_ch_grp_list, NULL, "", RO },
{"ha-chassis-group-add-chassis", 3, 3, "[CHASSIS GROUP]",
pre_ha_ch_grp_add_chassis, cmd_ha_ch_grp_add_chassis, NULL, "", RW },
Expand Down

0 comments on commit 12edbf7

Please sign in to comment.