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

时间:2016-12-02 16:04:24

标签: json command ansible ansible-playbook

我正在开发一个维护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\" } }"

2 个答案:

答案 0 :(得分:0)

检查this

你需要引用这样的全部内容:

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

因为ansible不喜欢分号。

答案 1 :(得分:0)

最简单的方法是将冒号括在双引号中。一直工作。

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