冒号命令参数中冒号的语法错误

问题描述:

我正在开发维护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

最简单的方法是用双引号括起冒号。始终工作。

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

这是做这件事的首选方式吗?显然,有两种方法可以解决问题 – verhage

+0

这是首选。如果你决定用单引号括住你的命令,并且你的命令体中有单引号,那么你最终会逃避那个单引号。为你选择任何作品。 – helloV

+0

我想到了它,并且更喜欢您的解决方案。我会改变你接受的答案,谢谢:) – verhage

检查this

你需要引用整个事情是这样的:

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

原因ansible不喜欢分号了。