2017-08-31 46 views
0

我有一系列變量集。稱他們爲主機和Inthosts。每個都有一個適當的值集,如調試輸出中所示。當我嘗試將內聯值賦給主機時,它實際上並沒有使它們保持不變,它會將雙引號改爲單引號,並將「u」放在每個「項」前面。有沒有一種方法可以強制Ansible在這種情況下實際執行文字平等而不解析文本?文本應該被視爲一個字符串。在這種情況下,「修改」的值被輸出到一個文件,並且這個改變破壞了事情。 該計劃是使用默認主機,如果有問題的服務器應該使用不同的服務器集,則使用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

Ansible是在列出filebeat_kafka_inthostsfilebeat_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'字符是調試模塊的副作用。將變量寫入文件會得到相同的結果(儘管使用單引號而不是雙引號)。

- 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

似乎將該變量作爲字符串轉換也可以。感謝您的建議!