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