2016-04-13 11 views
0

Ich versuche, lokale Fakten aus Variablen zu erstellen.Ansible lokale Fakten aus Variablen erstellen

Meine Tatsache ist:

datadog_http_checks: 
    - name : {{ env }} ResourceManager 
    url : http://{{ inventory_hostname }}: 
    threshold : 5 
    window : 5 
    timeout : 10 

Meine Aufgabe ist:

- include_vars: clouderamanager.yml 

- lineinfile: dest=/etc/ansible/facts.d/datadog_http_checks.fact line={{ datadog_http_checks }} create=yes 

, die nicht die lokalen Fakten schafft, es scheitert mit folgendem Fehler

TASK [hadoop : lineinfile] ***************************************************** 
fatal: [hmn001.dev.abc.cc]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "Traceback (most recent call last):\r\n File \"/home/xyz/.ansible/tmp/ansible-tmp-1460581285.88-252089462921262/lineinfile\", line 2540, in <module>\r\n main()\r\n File \"/home/abc/.ansible/tmp/ansible-tmp-1460581285.88-252089462921262/lineinfile\", line 371, in main\r\n ins_aft, ins_bef, create, backup, backrefs)\r\n File \"/home/abc/.ansible/tmp/ansible-tmp-1460581285.88-252089462921262/lineinfile\", line 266, in present\r\n lines.append(line + os.linesep)\r\nTypeError: can only concatenate list (not \"str\") to list\r\n", "msg": "MODULE FAILURE", "parsed": false} 

Antwort

1

Lineinfile tut genau was es sagt, tut es: es ändert eine einzelne Zeile in einer Datei.

Wenn Sie eine lokale Tatsache zu schaffen, die wie folgt aussieht: müssen Sie

datadog_http_checks: 
    - name : {{ env }} ResourceManager 
    url : http://{{ inventory_hostname }}: 
    threshold : 5 
    window : 5 
    timeout : 10 

dann eine Datei erstellen, die wie folgt aussieht:

[datadog_http_checks] 
name={{ env }} ResourceManager 
url=http://{{ inventory_hostname }}: 
threshold=5 
window=5 
timeout=10 

Sie können dies mit dem template Modul Wenn, wie in Ihrem Beispiel, Variablen darin enthalten sind, die Sie dynamisch erstellen möchten. In diesem exakten Szenario bin ich verwirrt darüber, was der Vorteil davon ist, anstatt eine Variable einzurichten, wie Sie in Ihrer Frage haben, und diese zu verwenden, anstatt eine lokale Faktdatei zu templatieren und dann erneut zu lesen es später.