Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Showing
6 changed files
with
317 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/ovn-ctl.8 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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> |