@@ -37,6 +37,7 @@ VLOG_DEFINE_THIS_MODULE(chassis);
#define HOST_NAME_MAX 255
#endif /* HOST_NAME_MAX */
+char *cli_system_id = NULL;
char *file_system_id = NULL;
/*
@@ -829,6 +830,10 @@ chassis_get_mac(const struct sbrec_chassis *chassis_rec,
const char *
get_ovs_chassis_id(const struct ovsrec_open_vswitch_table *ovs_table)
{
+ if (cli_system_id) {
+ return cli_system_id;
+ }
+
if (file_system_id) {
return file_system_id;
}
@@ -33,6 +33,7 @@ struct sset;
struct eth_addr;
struct smap;
+extern char *cli_system_id;
extern char *file_system_id;
void chassis_register_ovs_idl(struct ovsdb_idl *);
@@ -75,8 +75,10 @@
stale <code>Chassis</code> and <code>Chassis_Private</code> records
after changing the <code>system-id</code>. Note that the chassis name can
also be provided via the <code>system-id-override</code> file in the
- local OVN "etc" directory. The file configuration overrides the one from
- the database, if both are present.</dd>
+ local OVN "etc" directory or via the <code>-n</code> command-line option.
+ The following precedence is used: first, the command-line option is read;
+ if not present, the <code>system-id-override</code> file is read; if not
+ present, then the name configured in the database is used.</dd>
<dt><code>external_ids:hostname</code></dt>
<dd>The hostname to use in the Chassis table.</dd>
@@ -4627,6 +4627,9 @@ loop_done:
if (file_system_id) {
free(file_system_id);
}
+ if (cli_system_id) {
+ free(cli_system_id);
+ }
service_stop();
exit(retval);
@@ -4652,6 +4655,7 @@ parse_options(int argc, char *argv[])
STREAM_SSL_LONG_OPTIONS,
{"peer-ca-cert", required_argument, NULL, OPT_PEER_CA_CERT},
{"bootstrap-ca-cert", required_argument, NULL, OPT_BOOTSTRAP_CA_CERT},
+ {"chassis", required_argument, NULL, 'n'},
{"enable-dummy-vif-plug", no_argument, NULL,
OPT_ENABLE_DUMMY_VIF_PLUG},
{NULL, 0, NULL, 0}
@@ -4703,6 +4707,10 @@ parse_options(int argc, char *argv[])
vif_plug_dummy_enable();
break;
+ case 'n':
+ cli_system_id = xstrdup(optarg);
+ break;
+
case '?':
exit(EXIT_FAILURE);
@@ -4738,6 +4746,7 @@ usage(void)
daemon_usage();
vlog_usage();
printf("\nOther options:\n"
+ " -n custom chassis name\n"
" -h, --help display this help message\n"
" -V, --version display version information\n");
exit(EXIT_SUCCESS);
@@ -290,7 +290,7 @@ net_attach () {
# ovn_az_attach AZ NETWORK BRIDGE IP [MASKLEN] [ENCAP]
ovn_az_attach() {
- local az=$1 net=$2 bridge=$3 ip=$4 masklen=${5-24} encap=${6-geneve,vxlan} systemid=${7-$sandbox}
+ local az=$1 net=$2 bridge=$3 ip=$4 masklen=${5-24} encap=${6-geneve,vxlan} systemid=${7-$sandbox} cli_args=${@:8}
net_attach $net $bridge || return 1
mac=`ovs-vsctl get Interface $bridge mac_in_use | sed s/\"//g`
@@ -331,7 +331,7 @@ ovn_az_attach() {
ovs-vsctl set open . external_ids:ovn-monitor-all=true
fi
- start_daemon ovn-controller --enable-dummy-vif-plug || return 1
+ start_daemon ovn-controller --enable-dummy-vif-plug ${cli_args} || return 1
}
# ovn_attach NETWORK BRIDGE IP [MASKLEN] [ENCAP]
@@ -33527,3 +33527,42 @@ check_column "" Encap ip chassis_name=hv1 type=vxlan
OVN_CLEANUP([hv1],[hv2])
AT_CLEANUP
])
+
+OVN_FOR_EACH_NORTHD([
+AT_SETUP([chassis name override via CLI])
+ovn_start
+net_add n1
+
+sim_add hv1
+as hv1
+ovs-vsctl add-br br-phys
+
+ovs-vsctl \
+ -- set Open_vSwitch . external-ids:ovn-encap-type-hv3=geneve \
+ -- set Open_vSwitch . external-ids:ovn-encap-ip-hv3=192.168.1.1
+
+as hv1 ovs-vsctl set-ssl \
+ $PKIDIR/testpki-hv3-privkey.pem \
+ $PKIDIR/testpki-hv3-cert.pem \
+ $PKIDIR/testpki-cacert.pem
+
+# also validate that even with the override file present, CLI takes precedence
+echo hv3 > ${OVN_SYSCONFDIR}/test_hv
+
+# the last argument is passed to ovn-controller through cli
+ovn_attach n1 br-phys 192.168.0.1 24 vxlan hv1 -n hv3
+
+sim_add hv2
+as hv2
+ovs-vsctl add-br br-phys
+ovn_attach n1 br-phys 192.168.0.2 24 geneve
+
+# despite that we configured ovn-encap-ip=192.168.0.1, this setting is
+# overridden by chassis specific ovn-encap-ip-hv3
+wait_column 192.168.1.1 Encap ip chassis_name=hv3 type=geneve
+
+check_column "" Encap ip chassis_name=hv1 type=vxlan
+
+OVN_CLEANUP([hv1],[hv2])
+AT_CLEANUP
+])
This patch adds support for the desired system-id (chassis name) to be passed via CLI: $ ovn-controller -n <chassis-name> If passed, CLI overrides any settings stored in ovsdb or in system-id-override file. This may be useful when running multiple controller instances using the same vswitchd instance. Signed-off-by: Ihar Hrachyshka <ihrachys@redhat.com> --- controller/chassis.c | 5 +++++ controller/chassis.h | 1 + controller/ovn-controller.8.xml | 6 +++-- controller/ovn-controller.c | 9 ++++++++ tests/ovn-macros.at | 4 ++-- tests/ovn.at | 39 +++++++++++++++++++++++++++++++++ 6 files changed, 60 insertions(+), 4 deletions(-)