@@ -26,7 +26,7 @@ INACTIVE_PROBE=${OCF_RESKEY_inactive_probe_interval:-${INACTIVE_PROBE_DEFAULT}}
# a master is promoted and the IPAddr2 resource is started.
INVALID_IP_ADDRESS=192.0.2.254
-host_name=$(ocf_local_nodename)
+host_name=$(ocf_attribute_target)
: ${slave_score=5}
: ${master_score=10}
@@ -120,7 +120,11 @@ ovsdb_server_metadata() {
<action name="stop" timeout="20s" />
<action name="promote" timeout="50s" />
<action name="demote" timeout="50s" />
- <action name="monitor" timeout="20s" depth="0" interval="10s" />
+ <action name="monitor" timeout="20s" depth="0" interval="30s" />
+ <action name="monitor" timeout="20s" depth="0" interval="10s"
+ role="Master" />
+ <action name="monitor" timeout="20s" depth="0" interval="30s"
+ role="Slave"/>
<action name="meta-data" timeout="5s" />
<action name="validate-all" timeout="20s" />
</actions>
@@ -247,7 +251,7 @@ ovsdb_server_master_update() {
}
ovsdb_server_monitor() {
- ovsdb_server_check_status
+ ovsdb_server_check_status $@
rc=$?
ovsdb_server_master_update $rc
@@ -262,8 +266,21 @@ ovsdb_server_check_status() {
return $OCF_SUCCESS
fi
+ check_northd="no"
+ if [ "$MANAGE_NORTHD" == "yes" ] && [ "$1" != "ignore_northd" ]; then
+ check_northd="yes"
+ fi
+
if [[ $sb_status == "running/active" && $nb_status == "running/active" ]]; then
- return $OCF_RUNNING_MASTER
+ if [ "$check_northd" == "yes" ]; then
+ # Verify if ovn-northd is running or not.
+ ${OVN_CTL} status_northd | grep "ovn-northd is running"
+ if [ "$?" == "0" ] ; then
+ return $OCF_RUNNING_MASTER
+ fi
+ else
+ return $OCF_RUNNING_MASTER
+ fi
fi
# TODO: What about service running but not in either state above?
@@ -317,8 +334,13 @@ ovsdb_server_start() {
$@ start_ovsdb
while [ 1 = 1 ]; do
- # It is important that we don't return until we're in a functional state
- ovsdb_server_monitor
+ # It is important that we don't return until we're in a functional
+ # state. When checking the status of the ovsdb-server's ignore northd.
+ # It is possible that when the resource is restarted ovsdb-server's
+ # can be started as masters and ovn-northd would not have been started.
+ # ovn-northd will be started once a node is promoted to master and
+ # 'manage_northd' is set to yes.
+ ovsdb_server_monitor ignore_northd
rc=$?
case $rc in
$OCF_SUCCESS) return $rc;;
@@ -350,7 +372,7 @@ ovsdb_server_stop() {
${OVN_CTL} --ovn-manage-ovsdb=no stop_northd
fi
- ovsdb_server_check_status
+ ovsdb_server_check_status ignore_northd
case $? in
$OCF_NOT_RUNNING) return ${OCF_SUCCESS};;
esac
@@ -360,7 +382,7 @@ ovsdb_server_stop() {
while [ 1 = 1 ]; do
# It is important that we don't return until we're stopped
- ovsdb_server_check_status
+ ovsdb_server_check_status ignore_northd
rc=$?
case $rc in
$OCF_SUCCESS)
@@ -381,7 +403,7 @@ ovsdb_server_stop() {
}
ovsdb_server_promote() {
- ovsdb_server_check_status
+ ovsdb_server_check_status ignore_northd
rc=$?
case $rc in
${OCF_SUCCESS}) ;;
@@ -395,6 +417,11 @@ ovsdb_server_promote() {
${OVN_CTL} promote_ovnnb
${OVN_CTL} promote_ovnsb
+ if [ "$MANAGE_NORTHD" = "yes" ]; then
+ # Startup ovn-northd service
+ ${OVN_CTL} --ovn-manage-ovsdb=no start_northd
+ fi
+
ocf_log debug "ovndb_servers: Promoting $host_name as the master"
# Record ourselves so that the agent has a better chance of doing
# the right thing at startup
@@ -404,7 +431,7 @@ ovsdb_server_promote() {
}
ovsdb_server_demote() {
- ovsdb_server_check_status
+ ovsdb_server_check_status ignore_northd
if [ $? = $OCF_NOT_RUNNING ]; then
return $OCF_NOT_RUNNING
fi
@@ -452,6 +479,10 @@ ovsdb_server_demote() {
${OVN_CTL} demote_ovnsb --db-sb-sync-from-addr=${INVALID_IP_ADDRESS}
fi
+ if [ "$MANAGE_NORTHD" = "yes" ]; then
+ # Stop ovn-northd service
+ ${OVN_CTL} --ovn-manage-ovsdb=no stop_northd
+ fi
ovsdb_server_master_update $OCF_SUCCESS
return $OCF_SUCCESS
}