2014-01-28 75 views
8

我在遠程系統上獲取命令的輸出並將其存儲在變量中。然後用它來填充放置在系統上的文件模板。將Ansible變量從Unicode轉換爲ASCII

- name: Retrieve Initiator Name 
    command: /usr/sbin/iscsi-iname 
    register: iscsiname 

- name: Setup InitiatorName File 
    template: src=initiatorname.iscsi.template dest=/etc/iscsi/initiatorname.iscsi 

的initiatorname.iscsi.template文件包含:

InitiatorName={{ iscsiname.stdout_lines }} 

然而,當我運行它,我得到以下文件:

InitiatorName=[u'iqn.2005-03.org.open-iscsi:2bb08ec8f94'] 

我想要什麼:

InitiatorName=iqn.2005-03.org.open-iscsi:2bb08ec8f94 

我在做什麼錯?

我知道我可以使用「echo」InitiatorName = $(/ usr/sbin/iscsi-iname)「> /etc/iscsi/initiatorname.iscsi」將此文件寫入該文件,但這看起來像一個不可思議的這樣做的方式。

在此先感謝。

+2

方括號的意思是你所擁有的是一個名單。如果您只想要列表中的第一行,您可以嘗試'stdout_lines [0]'。 – bobince

+0

謝謝,就是這樣。我應該知道這是python。 –

+0

真棒謝謝@bobince – JaseC

回答

5

FWIW,如果你真的有一個數組:

[u'string1', u'string2', u'string3'] 

你希望你的模板/不管結果是不是:

ABC=[u'string1', u'string2', u'string3'] 

但是你喜歡:

ABC=["string1", "string2", "string3"] 

然後,這將做伎倆:

ABC=["{{ iscsiname.stdout_lines | list | join("\", \"") }}"] 

(額外由於字符串我的代碼是最初反斜線。)

+2

輕微的錯字,應該是:'ABC = [「{{iscsiname.stdout_lines | list | join(」\「,\」「)}}」]' –