diff mbox series

[ovs-dev,v4] ovn-ctl: Handle whitespaces when using eval for start_ovsdb:

Message ID 1523940938-6404-1-git-send-email-aginwala@ebay.com
State Accepted
Headers show
Series [ovs-dev,v4] ovn-ctl: Handle whitespaces when using eval for start_ovsdb: | expand

Commit Message

aginwala aginwala April 17, 2018, 4:55 a.m. UTC
eval doesn't understand white space for local var which was introduced in commit
79c7961b8b3c4b7ea0251dea2ffacfa84c84fecb for starting clustered ovn dbs.
As ovn-ctl uses sh instead of bash, parsing local var with white space will fail.

e.g. /usr/share/openvswitch/scripts/ovn-ctl --db-nb-addr=192.168.220.101 --db-nb-create-insecure-remote=yes \
     --db-sb-addr=192.168.220.101 --db-sb-create-insecure-remote=yes \
     --db-nb-cluster-local-addr=192.168.220.101 \
     --db-sb-cluster-local-addr=192.168.220.101 \
     --ovn-northd-nb-db=tcp:192.168.220.101:6641,tcp:192.168.220.102:6641,tcp:192.168.220.103:6641 \
     --ovn-northd-sb-db=tcp:192.168.220.101:6642,tcp:192.168.220.102:6642,tcp:192.168.220.103:6642 \
     start_northd

gives error: /usr/share/openvswitch/scripts/ovn-ctl: 1: local: -vfile:info: bad variable name

As a result ovsdb fails to even initialize and start. Hence, we need to seperate local keyword for all
variables used with eval to make it work with both dash and bash.

Signed-off-by: aginwala <aginwala@ebay.com>
---
 ovn/utilities/ovn-ctl | 60 ++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 20 deletions(-)

Comments

Ben Pfaff May 7, 2018, 9:11 p.m. UTC | #1
On Mon, Apr 16, 2018 at 09:55:38PM -0700, aginwala wrote:
> eval doesn't understand white space for local var which was introduced in commit
> 79c7961b8b3c4b7ea0251dea2ffacfa84c84fecb for starting clustered ovn dbs.
> As ovn-ctl uses sh instead of bash, parsing local var with white space will fail.
> 
> e.g. /usr/share/openvswitch/scripts/ovn-ctl --db-nb-addr=192.168.220.101 --db-nb-create-insecure-remote=yes \
>      --db-sb-addr=192.168.220.101 --db-sb-create-insecure-remote=yes \
>      --db-nb-cluster-local-addr=192.168.220.101 \
>      --db-sb-cluster-local-addr=192.168.220.101 \
>      --ovn-northd-nb-db=tcp:192.168.220.101:6641,tcp:192.168.220.102:6641,tcp:192.168.220.103:6641 \
>      --ovn-northd-sb-db=tcp:192.168.220.101:6642,tcp:192.168.220.102:6642,tcp:192.168.220.103:6642 \
>      start_northd
> 
> gives error: /usr/share/openvswitch/scripts/ovn-ctl: 1: local: -vfile:info: bad variable name
> 
> As a result ovsdb fails to even initialize and start. Hence, we need to seperate local keyword for all
> variables used with eval to make it work with both dash and bash.
> 
> Signed-off-by: aginwala <aginwala@ebay.com>

Thanks, applied to master and branch-2.9.
diff mbox series

Patch

diff --git a/ovn/utilities/ovn-ctl b/ovn/utilities/ovn-ctl
index 25dda52..4b7eef5 100755
--- a/ovn/utilities/ovn-ctl
+++ b/ovn/utilities/ovn-ctl
@@ -95,26 +95,46 @@  promote_ovnsb() {
 
 start_ovsdb__() {
     local DB=$1 db=$2 schema_name=$3 table_name=$4
-    eval local pid=\$DB_${DB}_PID
-    eval local cluster_local_addr=\$DB_${DB}_CLUSTER_LOCAL_ADDR
-    eval local cluster_local_port=\$DB_${DB}_CLUSTER_LOCAL_PORT
-    eval local cluster_local_proto=\$DB_${DB}_CLUSTER_LOCAL_PROTO
-    eval local cluster_remote_addr=\$DB_${DB}_CLUSTER_REMOTE_ADDR
-    eval local cluster_remote_port=\$DB_${DB}_CLUSTER_REMOTE_PORT
-    eval local cluster_remote_proto=\$DB_${DB}_CLUSTER_REMOTE_PROTO
-    eval local sync_from_proto=\$DB_${DB}_SYNC_FROM_PROTO
-    eval local sync_from_addr=\$DB_${DB}_SYNC_FROM_ADDR
-    eval local sync_from_port=\$DB_${DB}_SYNC_FROM_PORT
-    eval local file=\$DB_${DB}_FILE
-    eval local schema=\$DB_${DB}_SCHEMA
-    eval local logfile=\$OVN_${DB}_LOGFILE
-    eval local log=\$OVN_${DB}_LOG
-    eval local sock=\$DB_${DB}_SOCK
-    eval local detach=\$DB_${DB}_DETACH
-    eval local create_insecure_remote=\$DB_${DB}_CREATE_INSECURE_REMOTE
-    eval local port=\$DB_${DB}_PORT
-    eval local addr=\$DB_${DB}_ADDR
-    eval local active_conf_file=\$ovn${db}_active_conf_file
+    local pid
+    local cluster_local_addr
+    local cluster_local_port
+    local cluster_local_proto
+    local cluster_remote_addr
+    local cluster_remote_port
+    local cluster_remote_proto
+    local sync_from_proto
+    local sync_from_addr
+    local sync_from_port
+    local file
+    local schema
+    local logfile
+    local log
+    local sock
+    local detach
+    local create_insecure_remote
+    local port
+    local addr
+    local active_conf_file
+    eval pid=\$DB_${DB}_PID
+    eval cluster_local_addr=\$DB_${DB}_CLUSTER_LOCAL_ADDR
+    eval cluster_local_port=\$DB_${DB}_CLUSTER_LOCAL_PORT
+    eval cluster_local_proto=\$DB_${DB}_CLUSTER_LOCAL_PROTO
+    eval cluster_remote_addr=\$DB_${DB}_CLUSTER_REMOTE_ADDR
+    eval cluster_remote_port=\$DB_${DB}_CLUSTER_REMOTE_PORT
+    eval cluster_remote_proto=\$DB_${DB}_CLUSTER_REMOTE_PROTO
+    eval sync_from_proto=\$DB_${DB}_SYNC_FROM_PROTO
+    eval sync_from_addr=\$DB_${DB}_SYNC_FROM_ADDR
+    eval sync_from_port=\$DB_${DB}_SYNC_FROM_PORT
+    eval file=\$DB_${DB}_FILE
+    eval schema=\$DB_${DB}_SCHEMA
+    eval logfile=\$OVN_${DB}_LOGFILE
+    eval log=\$OVN_${DB}_LOG
+    eval sock=\$DB_${DB}_SOCK
+    eval detach=\$DB_${DB}_DETACH
+    eval create_insecure_remote=\$DB_${DB}_CREATE_INSECURE_REMOTE
+    eval port=\$DB_${DB}_PORT
+    eval addr=\$DB_${DB}_ADDR
+    eval active_conf_file=\$ovn${db}_active_conf_file
 
     # Check and eventually start ovsdb-server for DB
     if pidfile_is_running $pid; then