web-dev-qa-db-ja.com

Ansible-登録された変数をファイルに保存

登録された変数をファイルに保存するにはどうすればよいですか?私はこれを tutorial から取りました:

- hosts: web_servers

  tasks:

     - Shell: /usr/bin/foo
       register: foo_result
       ignore_errors: True

     - Shell: /usr/bin/bar
       when: foo_result.rc == 5

どのように保存しますかfoo_result変数からファイルへfoo_result.log ansibleを使用していますか?

35

パラメーターcontent=copyモジュールを使用できます。

私はここでまったく同じ答えをしました: Ansibleのファイルに変数を書き込む

あなたの場合、この変数をローカルログファイルに書きたいように見えるので、local_action表記と組み合わせることができます:

- local_action: copy content={{ foo_result }} dest=/path/to/destination/file
67

私はAnsible 1.9.4を使用していますが、これが私のために働いたものです-

- local_action: copy content="{{ foo_result.stdout }}" dest="/path/to/destination/file"
12
Umesh Tyagi

ローカルアクションは、リモートホストごとに1回実行されます(並行して)。ホストごとに一意のファイルが必要な場合は、ファイル名の一部としてinventory_hostnameを指定してください。

- local_action: copy content={{ foo_result }} dest=/path/to/destination/{{ inventory_hostname }}file

代わりに、すべてのホストの情報を含む単一のファイルが必要な場合、1つの方法は、シリアルタスクを持ち(並列に追加したくない)、モジュールでファイルに追加することです(lineinfileは可能、またはシェルでパイプ可能)コマンド)

- hosts: web_servers
  serial: 1
  tasks:
  - local_action: lineinfile line={{ foo_result }} path=/path/to/destination/file

または、ローカルホストのみに対して実行されるプレイブックに2番目のplay/role/taskを追加できます。次に、登録コマンドがテンプレート内で実行された各ホストから変数にアクセスします Access Other Hosts Variables DocsTemplate Module Docs

5
Chad Autry

これを実現するより読みやすい方法(単一行のansibleタスクのファンではない)

- local_action: 
    module: copy 
    content={{ foo_result }} 
    dest=/path/to/destination/file
1
bottaio
---
- hosts: all
  tasks:
  - name: Gather Version
    debug:
     msg: "The server Operating system is {{ ansible_distribution }} {{ ansible_distribution_major_version }}"
  - name: Write  Version
    local_action: Shell echo "This is  {{ ansible_distribution }} {{ ansible_distribution_major_version }}" >> /tmp/output
1
Mohd Aftab