2016-12-02 100 views
1

我正在開發維護Kubernetes羣集的劇本。有一個命令我必須執行添加在ETCD一個條目:冒號命令參數中冒號的語法錯誤

- command: etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" 

當試圖執行,Ansible給出了第一個冒號語法錯誤:

- command: etcdctl mk /kube-centos/network/config '{ "Network": "172.30.0.0/16", "SubnetLen": 24, "Backend": { "Type": "vxlan" } }' 
                  ^here 

我想不出如何逃避這些角色。將JSON參數傳遞給像這樣的命令的最佳方式是什麼?


實際上有兩種方法來解決這個問題:

回答1

環繞在單引號整個命令:

- command: 'etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"' 

答案2(首選)

環繞在雙引號中的所有冒號:

- command: etcdctl mk /kube-centos/network/config "{ \"Network\"":" \"172.30.0.0/16\", \"SubnetLen\"":" 24, \"Backend\"":" { \"Type\"":" \"vxlan\" } }" 
+0

只需用雙引號括起來。看到我的答案。 – helloV

回答

0

最簡單的方法是用雙引號括起冒號。始終工作。

- command: etcdctl mk /kube-centos/network/config "{ \"Network\"":" \"172.30.0.0/16\", \"SubnetLen\"":" 24, \"Backend\"":" { \"Type\"":" \"vxlan\" } }" 
+0

這是做這件事的首選方式嗎?顯然,有兩種方法可以解決問題 – verhage

+0

這是首選。如果你決定用單引號括住你的命令,並且你的命令體中有單引號,那麼你最終會逃避那個單引號。爲你選擇任何作品。 – helloV

+0

我想到了它,並且更喜歡您的解決方案。我會改變你接受的答案,謝謝:) – verhage

0

檢查this

你需要引用整個事情是這樣的:

- command: 'echo "semicolon is: bad"' 

原因ansible不喜歡分號了。