登録された変数をファイルに保存するにはどうすればよいですか?私はこれを 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を使用していますか?
パラメーターcontent=
でcopy
モジュールを使用できます。
私はここでまったく同じ答えをしました: Ansibleのファイルに変数を書き込む
あなたの場合、この変数をローカルログファイルに書きたいように見えるので、local_action
表記と組み合わせることができます:
- local_action: copy content={{ foo_result }} dest=/path/to/destination/file
私はAnsible 1.9.4を使用していますが、これが私のために働いたものです-
- local_action: copy content="{{ foo_result.stdout }}" dest="/path/to/destination/file"
ローカルアクションは、リモートホストごとに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
これを実現するより読みやすい方法(単一行のansibleタスクのファンではない)
- local_action:
module: copy
content={{ foo_result }}
dest=/path/to/destination/file
---
- 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