2016-04-13 3 views
0

変数からローカルファクトを作成しようとしています。変数からの可能なローカルファクトの作成

私の事実である:

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

私のタスクは次のとおりです。地元の事実を作成しません

- include_vars: clouderamanager.yml 

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

、それが次のエラーで

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} 

答えて

1

Lineinfileを失敗し、正確に行いますそれはそれが言っていること:それはファイル内の単一の行を変更します。

あなたがどのように見える地元の事実作成する場合:あなたはtemplateモジュールでこれを行うことができ

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

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

を次に、あなたは、このようなファイルを作成する必要がありますあなたの例のように、動的にビルドしたい変数があるとします。

このようなシナリオでは、あなたの質問にあるように変数を設定してローカルのファクトファイルをテンプレート化してから再読み込みするのではなく、これの利点が何であるか混乱していますそれは後で。

関連する問題