@@ -47,6 +47,33 @@ function quit {
47
47
/usr/share/ovn/scripts/ovn-ctl stop_northd
48
48
exit 0
49
49
}
50
+
51
+ function is_clustered {
52
+ t=$( echo -n " ${NODE_IPS} " | sed ' s/,/ /g' )
53
+ if [[ " $ENABLE_SSL " == " false" ]]; then
54
+ x=$( for i in ${t} ; do echo -n " tcp:[${i} ]:6641," ; done | sed ' s/,/ /g' )
55
+ for i in ${x} ;
56
+ do
57
+ nb_leader=$( timeout 10 ovsdb-client query ${i} " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Northbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
58
+ if [[ $nb_leader =~ " true" ]]
59
+ then
60
+ return 0
61
+ fi
62
+ done
63
+ else
64
+ x=$( for i in ${t} ; do echo -n " ssl:[${i} ]:6641," ; done| sed ' s/,/ /g' )
65
+ for i in ${x} ;
66
+ do
67
+ nb_leader=$( timeout 10 ovsdb-client -p /var/run/tls/key -c /var/run/tls/cert -C /var/run/tls/cacert query ${i} " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Northbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
68
+ if [[ $nb_leader =~ " true" ]]
69
+ then
70
+ return 0
71
+ fi
72
+ done
73
+ fi
74
+ return 1
75
+ }
76
+
50
77
trap quit EXIT
51
78
if [[ " $ENABLE_SSL " == " false" ]]; then
52
79
if [[ -z " $NODE_IPS " ]]; then
@@ -66,7 +93,12 @@ if [[ "$ENABLE_SSL" == "false" ]]; then
66
93
67
94
nb_leader_ip=$( get_leader_ip nb)
68
95
sb_leader_ip=$( get_leader_ip sb)
69
- if [[ " $nb_leader_ip " == " ${POD_IP} " ]]; then
96
+ set +eo pipefail
97
+ is_clustered
98
+ result=$?
99
+ set -eo pipefail
100
+ # leader up only when no cluster and on first node
101
+ if [[ ${result} -eq 1 && " $nb_leader_ip " == " ${POD_IP} " ]]; then
70
102
# Start ovn-northd, ovn-nb and ovn-sb
71
103
/usr/share/ovn/scripts/ovn-ctl \
72
104
--db-nb-create-insecure-remote=yes \
@@ -85,6 +117,31 @@ if [[ "$ENABLE_SSL" == "false" ]]; then
85
117
ovn-sbctl --no-leader-only set-connection ptcp:" ${DB_SB_PORT} " :[::]
86
118
ovn-sbctl --no-leader-only set Connection . inactivity_probe=180000
87
119
else
120
+ # known leader always first
121
+ set +eo pipefail
122
+ if [ ${result} -eq 0 ]; then
123
+ t=$( echo -n " ${NODE_IPS} " | sed ' s/,/ /g' )
124
+ for i in ${t} ;
125
+ do
126
+ nb_leader=$( timeout 10 ovsdb-client query " tcp:${i} :6641" " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Northbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
127
+ if [[ $nb_leader =~ " true" ]]
128
+ then
129
+ nb_leader_ip=${i}
130
+ break
131
+ fi
132
+ done
133
+ for i in ${t} ;
134
+ do
135
+ nb_leader=$( timeout 10 ovsdb-client query " tcp:${i} :6642" " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Southbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
136
+ if [[ $nb_leader =~ " true" ]]
137
+ then
138
+ sb_leader_ip=${i}
139
+ break
140
+ fi
141
+ done
142
+ fi
143
+ set -eo pipefail
144
+ # otherwise go to first node
88
145
# Start ovn-northd, ovn-nb and ovn-sb
89
146
/usr/share/ovn/scripts/ovn-ctl \
90
147
--db-nb-create-insecure-remote=yes \
@@ -128,7 +185,11 @@ else
128
185
129
186
nb_leader_ip=$( get_leader_ip nb)
130
187
sb_leader_ip=$( get_leader_ip sb)
131
- if [[ " $nb_leader_ip " == " ${POD_IP} " ]]; then
188
+ set +eo pipefail
189
+ is_clustered
190
+ result=$?
191
+ set -eo pipefail
192
+ if [[ ${result} -eq 1 && " $nb_leader_ip " == " ${POD_IP} " ]]; then
132
193
# Start ovn-northd, ovn-nb and ovn-sb
133
194
/usr/share/ovn/scripts/ovn-ctl \
134
195
--ovn-nb-db-ssl-key=/var/run/tls/key \
@@ -154,6 +215,30 @@ else
154
215
ovn-sbctl --no-leader-only -p /var/run/tls/key -c /var/run/tls/cert -C /var/run/tls/cacert set-connection pssl:" ${DB_SB_PORT} " :[::]
155
216
ovn-sbctl --no-leader-only -p /var/run/tls/key -c /var/run/tls/cert -C /var/run/tls/cacert set Connection . inactivity_probe=180000
156
217
else
218
+ # get leader if cluster exists
219
+ set +eo pipefail
220
+ if [[ ${result} -eq 0 ]]; then
221
+ t=$( echo -n " ${NODE_IPS} " | sed ' s/,/ /g' )
222
+ for i in ${t} ;
223
+ do
224
+ nb_leader=$( timeout 10 ovsdb-client -p /var/run/tls/key -c /var/run/tls/cert -C /var/run/tls/cacert query " ssl:[${i} ]:6641" " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Northbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
225
+ if [[ $nb_leader =~ " true" ]]
226
+ then
227
+ nb_leader_ip=${i}
228
+ break
229
+ fi
230
+ done
231
+ for i in ${t} ;
232
+ do
233
+ nb_leader=$( timeout 10 ovsdb-client -p /var/run/tls/key -c /var/run/tls/cert -C /var/run/tls/cacert query " ssl:[${i} ]:6642" " [\" _Server\" ,{\" table\" :\" Database\" ,\" where\" :[[\" name\" ,\" ==\" , \" OVN_Southbound\" ]],\" columns\" : [\" leader\" ],\" op\" :\" select\" }]" )
234
+ if [[ $nb_leader =~ " true" ]]
235
+ then
236
+ sb_leader_ip=${i}
237
+ break
238
+ fi
239
+ done
240
+ fi
241
+ set -eo pipefail
157
242
# Start ovn-northd, ovn-nb and ovn-sb
158
243
/usr/share/ovn/scripts/ovn-ctl \
159
244
--ovn-nb-db-ssl-key=/var/run/tls/key \
0 commit comments