我正在开发一个维护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 :(得分:0)
答案 1 :(得分:0)
最简单的方法是将冒号括在双引号中。一直工作。
- command: etcdctl mk /kube-centos/network/config "{ \"Network\"":" \"172.30.0.0/16\", \"SubnetLen\"":" 24, \"Backend\"":" { \"Type\"":" \"vxlan\" } }"