2016-12-02 13 views
1

Kubernetesクラスタを維持するためのプレイブックを作成しています。コロンで構文エラーが発生する可能性があります。

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

私が把握することはできません。

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

実行しようとし、Ansibleは最初のコロンの構文エラーを与える:私はetcdにエントリを追加するために実行する必要があるコマンドがありますこれらの文字をエスケープする方法。このようなコマンドにJSON引数を渡す最善の方法は何ですか?


これを修正するには、2つの方法実際にあります。

回答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

答えて

0

最も簡単な方法は、コロンを二重引用符で囲むことです。常に動作します。

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

これを行うのが好ましい方法ですか?どうやら、問題を解決するには2つの方法があります。 – verhage

+0

これが望ましいです。あなたのコマンドを一重引用符で囲むことにし、一重引用符がコマンド本体にある場合、その一重引用符をエスケープすることになります。何でもあなたのために働くものを選んでください。 – helloV

+0

私はそれについて考えて、あなたの解決策をよくしています。私はあなたに受け入れられた答えを変更します、ありがとう:) – verhage

0

チェックthis

あなたは、このような全体のことを引用する必要があります。

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

原因ansibleは、多くのセミコロンが好きではありません。

関連する問題