mirror of
https://github.com/openvswitch/ovs
synced 2025-10-15 14:17:18 +00:00
ovn: Add ovn-ctl to assist with OVN daemon lifecycle.
This patch introduces ovn-ctl, which is similar to ovs-ctl. I opted for a new script as everything in OVN so far is nicely isolated, so a new script seemed to make the most sense. If you'd like to run ovn-controller on a host already running ovs: # ovn-ctl start_controller If you'd like to run ovn-northd: # ovn-ctl start_northd Note that ovn-ctl assumes that ovn-northd is running on the same server as ovsdb-server hosting the OVN databases. Based on the current architecture this seems like a completely reasonable assumption. This can be improved later when needed. There's some additional stuff happening in start_northd to make the experience nicer and not require additional steps by the administrator. It creates the OVN dbs if they don't exist. If ovsdb-server hasn't loaded them, it tells it to load them, as well. ovn-ctl also supports running everything on the same host. This would be common in a test environment with a single host or small set of hosts. That would simply be: # ovs-ctl start --system-id=random # ovn-ctl start_northd # ovn-ctl start_controller Signed-off-by: Russell Bryant <rbryant@redhat.com> CC: Flavio Leitner <fbl@redhat.com> CC: Ben Pfaff <blp@nicira.com> [blp@nicira.com added configure.ac code to create ovn/utilities builddir] Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
committed by
Ben Pfaff
parent
6ad8ce88c3
commit
43d3e69415
@@ -186,6 +186,7 @@ AC_CONFIG_COMMANDS([include/openflow/openflow.h.stamp])
|
||||
|
||||
AC_CONFIG_COMMANDS([utilities/bugtool/dummy], [:])
|
||||
AC_CONFIG_COMMANDS([ovn/dummy], [:])
|
||||
AC_CONFIG_COMMANDS([ovn/utilities/dummy], [:])
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
|
||||
|
||||
|
@@ -86,3 +86,4 @@ ovn_ovn_nbctl_LDADD = ovn/lib/libovn.la ovsdb/libovsdb.la lib/libopenvswitch.la
|
||||
include ovn/controller/automake.mk
|
||||
include ovn/lib/automake.mk
|
||||
include ovn/northd/automake.mk
|
||||
include ovn/utilities/automake.mk
|
||||
|
1
ovn/utilities/.gitignore
vendored
Normal file
1
ovn/utilities/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/ovn-ctl.8
|
9
ovn/utilities/automake.mk
Normal file
9
ovn/utilities/automake.mk
Normal file
@@ -0,0 +1,9 @@
|
||||
scripts_SCRIPTS += \
|
||||
ovn/utilities/ovn-ctl
|
||||
|
||||
man_MANS += \
|
||||
ovn/utilities/ovn-ctl.8
|
||||
|
||||
EXTRA_DIST += \
|
||||
ovn/utilities/ovn-ctl \
|
||||
ovn/utilities/ovn-ctl.8.xml
|
255
ovn/utilities/ovn-ctl
Executable file
255
ovn/utilities/ovn-ctl
Executable file
@@ -0,0 +1,255 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
case $0 in
|
||||
*/*) dir0=`echo "$0" | sed 's,/[^/]*$,,'` ;;
|
||||
*) dir0=./ ;;
|
||||
esac
|
||||
. "$dir0/ovs-lib" || exit 1
|
||||
|
||||
for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin /usr/bin; do
|
||||
case :$PATH: in
|
||||
*:$dir:*) ;;
|
||||
*) PATH=$PATH:$dir ;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
## ----- ##
|
||||
## start ##
|
||||
## ----- ##
|
||||
|
||||
create_db () {
|
||||
DB_FILE=$1
|
||||
DB_SCHEMA=$2
|
||||
action "Creating empty database $DB_FILE" ovsdb-tool create "$DB_FILE" "$DB_SCHEMA"
|
||||
}
|
||||
|
||||
check_ovn_dbs () {
|
||||
if test ! -e "$DB_NB_FILE"; then
|
||||
create_db "$DB_NB_FILE" "$DB_NB_SCHEMA"
|
||||
fi
|
||||
|
||||
if test ! -e "$DB_SB_FILE"; then
|
||||
create_db "$DB_SB_FILE" "$DB_SB_SCHEMA"
|
||||
fi
|
||||
|
||||
running_ovn_dbs=$(ovs-appctl -t ovsdb-server ovsdb-server/list-dbs | grep OVN | wc -l)
|
||||
if [ "$running_ovn_dbs" != "2" ] ; then
|
||||
ovs-appctl -t ovsdb-server ovsdb-server/add-db $DB_NB_FILE
|
||||
ovs-appctl -t ovsdb-server ovsdb-server/add-db $DB_SB_FILE
|
||||
running_ovn_dbs=$(ovs-appctl -t ovsdb-server ovsdb-server/list-dbs | grep OVN | wc -l)
|
||||
if [ "$running_ovn_dbs" != "2" ] ; then
|
||||
echo >&2 "$0: Failed to add OVN dbs to ovsdb-server"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
start_northd () {
|
||||
# We expect ovn-northd to be co-located with ovsdb-server handling both the
|
||||
# OVN_Northbound and OVN_Southbound dbs.
|
||||
check_ovn_dbs
|
||||
|
||||
set ovn-northd
|
||||
set "$@" -vconsole:emer -vsyslog:err -vfile:info
|
||||
OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY" "$OVN_NORTHD_WRAPPER" "$@"
|
||||
}
|
||||
|
||||
start_controller () {
|
||||
set ovn-controller "unix:$DB_SOCK"
|
||||
set "$@" -vconsole:emer -vsyslog:err -vfile:info
|
||||
OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_CONTROLLER_PRIORITY" "$OVN_CONTROLLER_WRAPPER" "$@"
|
||||
}
|
||||
|
||||
## ---- ##
|
||||
## stop ##
|
||||
## ---- ##
|
||||
|
||||
stop_northd () {
|
||||
OVS_RUNDIR=${OVN_RUNDIR} stop_daemon ovn-northd
|
||||
}
|
||||
|
||||
stop_controller () {
|
||||
OVS_RUNDIR=${OVN_RUNDIR} stop_daemon ovn-controller
|
||||
}
|
||||
|
||||
## ------- ##
|
||||
## restart ##
|
||||
## ------- ##
|
||||
|
||||
restart_northd () {
|
||||
stop_northd
|
||||
start_northd
|
||||
}
|
||||
|
||||
restart_controller () {
|
||||
stop_controller
|
||||
start_controller
|
||||
}
|
||||
|
||||
## ---- ##
|
||||
## main ##
|
||||
## ---- ##
|
||||
|
||||
set_defaults () {
|
||||
DB_SOCK=$rundir/db.sock
|
||||
DB_NB_FILE=$dbdir/ovnnb.db
|
||||
DB_SB_FILE=$dbdir/ovnsb.db
|
||||
DB_NB_SCHEMA=$datadir/ovn-nb.ovsschema
|
||||
DB_SB_SCHEMA=$datadir/ovn-sb.ovsschema
|
||||
|
||||
OVN_NORTHD_PRIORITY=-10
|
||||
OVN_NORTHD_WRAPPER=
|
||||
OVN_CONTROLLER_PRIORITY=-10
|
||||
OVN_CONTROLLER_WRAPPER=
|
||||
|
||||
OVS_RUNDIR=${OVS_RUNDIR:-${rundir}}
|
||||
OVN_RUNDIR=${OVN_RUNDIR:-${OVS_RUNDIR}}
|
||||
}
|
||||
|
||||
set_option () {
|
||||
var=`echo "$option" | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_`
|
||||
eval set=\${$var+yes}
|
||||
eval old_value=\$$var
|
||||
if test X$set = X || \
|
||||
(test $type = bool && \
|
||||
test X"$old_value" != Xno && test X"$old_value" != Xyes); then
|
||||
echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
|
||||
return
|
||||
fi
|
||||
eval $var=\$value
|
||||
}
|
||||
|
||||
usage () {
|
||||
set_defaults
|
||||
cat << EOF
|
||||
$0: controls Open Virtual Network daemons
|
||||
usage: $0 [OPTIONS] COMMAND
|
||||
|
||||
This program is intended to be invoked internally by Open Virtual Network
|
||||
startup scripts. System administrators should not normally invoke it directly.
|
||||
|
||||
Commands:
|
||||
start_northd start ovn-northd
|
||||
start_controller start ovn-controller
|
||||
stop_northd stop ovn-northd
|
||||
stop_controller stop ovn-controller
|
||||
restart_northd restart ovn-northd
|
||||
restart_controller restart ovn-controller
|
||||
|
||||
Options:
|
||||
--ovn-northd-priority=NICE set ovn-northd's niceness (default: $OVN_NORTHD_PRIORITY)
|
||||
--ovn-northd-wrapper=WRAPPER run with a wrapper like valgrind for debugging
|
||||
--ovn-controller-priority=NICE set ovn-northd's niceness (default: $OVN_CONTROLLER_PRIORITY)
|
||||
--ovn-controller-wrapper=WRAPPER run with a wrapper like valgrind for debugging
|
||||
-h, --help display this help message
|
||||
|
||||
File location options:
|
||||
--db-sock=SOCKET JSON-RPC socket name (default: $DB_SOCK)
|
||||
--db-nb-file=FILE OVN_Northbound db file (default: $DB_NB_FILE)
|
||||
--db-sb-file=FILE OVN_Southbound db file (default: $DB_SB_FILE)
|
||||
--db-nb-schema=FILE OVN_Northbound db file (default: $DB_NB_SCHEMA)
|
||||
--db-sb-schema=FILE OVN_Southbound db file (default: $DB_SB_SCHEMA)
|
||||
|
||||
Default directories with "configure" option and environment variable override:
|
||||
logs: /usr/local/var/log/openvswitch (--with-logdir, OVS_LOGDIR)
|
||||
pidfiles and sockets: /usr/local/var/run/openvswitch (--with-rundir, OVS_RUNDIR)
|
||||
ovn-nb.db: /usr/local/etc/openvswitch (--with-dbdir, OVS_DBDIR)
|
||||
ovn-sb.db: /usr/local/etc/openvswitch (--with-dbdir, OVS_DBDIR)
|
||||
system configuration: /usr/local/etc (--sysconfdir, OVS_SYSCONFDIR)
|
||||
data files: /usr/local/share/openvswitch (--pkgdatadir, OVS_PKGDATADIR)
|
||||
user binaries: /usr/local/bin (--bindir, OVS_BINDIR)
|
||||
system binaries: /usr/local/sbin (--sbindir, OVS_SBINDIR)
|
||||
EOF
|
||||
}
|
||||
|
||||
set_defaults
|
||||
command=
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-h | --help)
|
||||
usage
|
||||
;;
|
||||
--[a-z]*=*)
|
||||
option=`expr X"$arg" : 'X--\([^=]*\)'`
|
||||
value=`expr X"$arg" : 'X[^=]*=\(.*\)'`
|
||||
type=string
|
||||
set_option
|
||||
;;
|
||||
--no-[a-z]*)
|
||||
option=`expr X"$arg" : 'X--no-\(.*\)'`
|
||||
value=no
|
||||
type=bool
|
||||
set_option
|
||||
;;
|
||||
--[a-z]*)
|
||||
option=`expr X"$arg" : 'X--\(.*\)'`
|
||||
value=yes
|
||||
type=bool
|
||||
set_option
|
||||
;;
|
||||
-*)
|
||||
echo >&2 "$0: unknown option \"$arg\" (use --help for help)"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if test X"$command" = X; then
|
||||
command=$arg
|
||||
else
|
||||
echo >&2 "$0: exactly one non-option argument required (use --help for help)"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
case $command in
|
||||
start_northd)
|
||||
start_northd
|
||||
;;
|
||||
start_controller)
|
||||
start_controller
|
||||
;;
|
||||
stop_northd)
|
||||
stop_northd
|
||||
;;
|
||||
stop_controller)
|
||||
stop_controller
|
||||
;;
|
||||
restart_northd)
|
||||
restart_northda
|
||||
;;
|
||||
restart_controller)
|
||||
restart_controller
|
||||
;;
|
||||
create_ovn_dbs)
|
||||
create_ovn_dbs
|
||||
;;
|
||||
help)
|
||||
usage
|
||||
;;
|
||||
preheat)
|
||||
echo >&2 "$0: preheating ovn to 350 degrees F."
|
||||
exit 1
|
||||
;;
|
||||
'')
|
||||
echo >&2 "$0: missing command name (use --help for help)"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
echo >&2 "$0: unknown command \"$command\" (use --help for help)"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
50
ovn/utilities/ovn-ctl.8.xml
Normal file
50
ovn/utilities/ovn-ctl.8.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manpage program="ovn-ctl" section="8" title="ovn-ctl">
|
||||
<h1>Name</h1>
|
||||
<p>ovn-ctl -- Open Virtual Network northbound daemon lifecycle utility</p>
|
||||
|
||||
<h1>Synopsys</h1>
|
||||
<p><code>ovn-ctl</code> [<var>options</var>] <var>command</var></p>
|
||||
|
||||
<h1>Description</h1>
|
||||
<p>This program is intended to be invoked internally by Open Virtual Network
|
||||
startup scripts. System administrators should not normally invoke it directly.</p>
|
||||
|
||||
<h1>Commands</h1>
|
||||
|
||||
<dl>
|
||||
<dt><code>start_northd</code></dt>
|
||||
<dt><code>start_controller</code></dt>
|
||||
<dt><code>stop_northd</code></dt>
|
||||
<dt><code>stop_controller</code></dt>
|
||||
<dt><code>restart_northd</code></dt>
|
||||
<dt><code>restart_controller</code></dt>
|
||||
</dl>
|
||||
|
||||
<h1>Options</h1>
|
||||
<p><code>--ovn-northd-priority=<var>NICE</var></code></p>
|
||||
<p><code>--ovn-northd-wrapper=<var>WRAPPER</var></code></p>
|
||||
<p><code>--ovn-controller-priority=<var>NICE</var></code></p>
|
||||
<p><code>--ovn-controller-wrapper=<var>WRAPPER</var></code></p>
|
||||
<p><code>-h</code> | <code>--help</code></p>
|
||||
|
||||
<h1>File location options</h1>
|
||||
<p><code>--db-sock==<var>SOCKET</var></code></p>
|
||||
<p><code>--db-nb-file==<var>FILE</var></code></p>
|
||||
<p><code>--db-sb-file==<var>FILE</var></code></p>
|
||||
<p><code>--db-nb-schema==<var>FILE</var></code></p>
|
||||
<p><code>--db-sb-schema==<var>FILE</var></code></p>
|
||||
|
||||
<h1>Example Usage</h1>
|
||||
<h2>Run ovn-controller on a host already running OVS</h2>
|
||||
<p><code># ovn-ctl start_controller</code></p>
|
||||
|
||||
<h2>Run ovn-northd on a host already running OVS</h2>
|
||||
<p><code># ovn-ctl start_northd</code></p>
|
||||
|
||||
<h2>All-in-one OVS+OVN for testing</h2>
|
||||
<p><code># ovs-ctl start --system-id="random"</code></p>
|
||||
<p><code># ovn-ctl start_northd</code></p>
|
||||
<p><code># ovn-ctl start_controller</code></p>
|
||||
|
||||
</manpage>
|
Reference in New Issue
Block a user