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

Syntax error on colon in ansible command argument

我正在开发一本手册来维护 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\" } }"

检查this

你需要像这样引用整件事:

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

因为 ansible 不太喜欢分号。

最简单的方法是用双引号将冒号引起来。一直有效。

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