2017-08-31 25 views
0

一連の変数が設定されています。それらをホストとイントストと呼んでください。デバッグ出力に見られるように、それぞれに適切な値が設定されています。ホストにinthostsの値を割り当てようとすると、実際には同じではありません。二重引用符を一重引用符に変更し、各「アイテム」の前に「u」を入れます。テキストを解析せずに実際にリテラルを等しくするように強制する方法がありますか?テキストは単に文字列として扱う必要があります。この場合、「変更された」値がファイルに出力されており、その変更によって物が壊れてしまいます。 デフォルトのホストを使用し、問題のサーバーが別のサーバーセットを使用する必要がある場合は、それをinthostsで上書きするという計画でした。変数が設定されたときに変数値が変更される

デフォルト変数はAnsibleがである

filebeat_kafka_hosts: '["x.compute-1.amazonaws.com:9093", "y.compute-1.amazonaws.com:9093"]' 

filebeat_kafka_inthosts: '["x.compute-1.amazonaws.com:9093", "y.compute-1.amazonaws.com:9093", "z.compute-1.amazonaws.com:9093"]' 

Ansibleコード

- debug: 
    msg: "Hosts {{ filebeat_kafka_hosts }} " 

- debug: 
    msg: "IntHosts {{ filebeat_kafka_inthosts }} " 

- set_fact: 
    filebeat_kafka_hosts="{{ filebeat_kafka_inthosts }}" 

- debug: 
    msg: "Inthosts -> hosts {{ filebeat_kafka_hosts }} " 

出力(編集済み)

"msg": "Hosts [\"x.compute-1.amazonaws.com:9093\", \"y.compute-1.amazonaws.com:9093\"] "                                    | 

"msg": "IntHosts [\"x.compute-1.amazonaws.com:9093\", \"y.compute-1.amazonaws.com:9093\", \"z.compute-1.amazonaws.com:9093\"] " 

set {"ansible_facts": {"filebeat_kafka_hosts": ["x.compute-1.amazonaws.com:9093", "y.compute-1.amazonaws.com:9093", "z.compute-1.amazonaws.com:9093"]}, "changed": false} 

"msg": "Inthosts -> hosts [u'x.compute-1.amazonaws.com:9093', u'y.compute-1.amazonaws.com:9093', u'z.compute-1.amazonaws.com:9093'] " 

答えて

0

を設定します。リストとしてfilebeat_kafka_inthostsおよびfilebeat_kafka_hostsを解釈する。これはあなたのデバッグの各項目の前に 'u'文字を与えます。

- debug: 
     msg: "{{ item }}" 
    with_items: "{{ filebeat_kafka_hosts }}" 

    - debug: 
     msg: "{{ item }}" 
    with_items: "{{ filebeat_kafka_inthosts }}" 

以下のタスクは、あなたがファイルに次の行を書いているので、あなたに

TASK [debug] ******************************************************************* 
ok: [127.0.0.1] => (item=y.compute-1.amazonaws.com:9093) => { 
    "item": "y.compute-1.amazonaws.com:9093", 
    "msg": "y.compute-1.amazonaws.com:9093" 
} 
ok: [127.0.0.1] => (item=x.compute-1.amazonaws.com:9093) => { 
    "item": "x.compute-1.amazonaws.com:9093", 
    "msg": "x.compute-1.amazonaws.com:9093" 
} 

TASK [debug] ******************************************************************* 
ok: [127.0.0.1] => (item=x.compute-1.amazonaws.com:9093) => { 
    "item": "x.compute-1.amazonaws.com:9093", 
    "msg": "x.compute-1.amazonaws.com:9093" 
} 
ok: [127.0.0.1] => (item=y.compute-1.amazonaws.com:9093) => { 
    "item": "y.compute-1.amazonaws.com:9093", 
    "msg": "y.compute-1.amazonaws.com:9093" 
} 
ok: [127.0.0.1] => (item=z.compute-1.amazonaws.com:9093) => { 
    "item": "z.compute-1.amazonaws.com:9093", 
    "msg": "z.compute-1.amazonaws.com:9093" 
} 

を与えるだろう、あなたは、あまり心配する必要はありません。 'u'文字は、デバッグモジュールの副作用です。変数をファイルに書き込むと、同じ結果が得られます(ただし、doubleではなく単一引用符で囲みます)。

- lineinfile: 
    path: some_file 
    line: "{{ filebeat_kafka_hosts }}" 

some_file

['x.compute-1.amazonaws.com:9093', 'y.compute-1.amazonaws.com:9093', 'z.compute-1.amazonaws.com:9093'] 

あなたが本当に二重引用符が必要な場合は、to_jsonフィルタ

- lineinfile: 
    path: some_file 
    line: "{{ filebeat_kafka_hosts | to_json }}" 

some_file

["x.compute-1.amazonaws.com:9093", "y.compute-1.amazonaws.com:9093", "z.compute-1.amazonaws.com:9093"] 
を使用することができます
0

変数を文字列としてキャストすることも機能しているようです。助けてくれてありがとう!

関連する問題