変数をAnsibleのファイルに書き込む


101

URIモジュールを介してJSONを取得していて、受信したコンテンツをファイルに書き出したいです。コンテンツを取得してデバッガに出力できるので、コンテンツが受信されたことがわかりますが、ファイルを書き込むためのベストプラクティスがわかりません。

回答:


200

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

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

ここのドキュメント:モジュールのコピー


5
content = "{{your_json_feed}}"は、空白と改行を扱います。引用符は重要です。
m.kocikowski 2015年

@RamondelaFuente複数のvarsコンテンツをファイルに追加したい場合、「コピー」モジュールを複数回使用する必要がありますか、それとも他の方法がありますか?
KishoreReddy 2016年

1
@KishoreReddy jinja2構文を使用して変数を追加できると思います。「{{variable〜another_variable}}」のようなもの。きれいではありませんが、状況がさらに複雑になった場合は、template:モジュールを使用して、実行時に登録された変数をこのモジュールに入力できます。
Ramon de la Fuente 2016年

これは、形式でsha256 sumファイルを生成しshahash /path/to/file(間にスペースが2つあることに注意)、sha256sum -c shafileAnsibleを介して生成したものを(を介して)コマンドラインから検証する場合に適しています。
Daniel AndreiMincă2017年

11

非常に小さなファイルを作成しているのでない限り、おそらくテンプレートを使用する必要があります。

例:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"

2
Ramonの回答は、質問された内容に正確に対応していますが、この回答は一般的に最良のアプローチです。たとえば、クラウドにVMを作成するプレイブックがあり、別のプレイブックのホストのインベントリを生成する場合は、テンプレートが適しています。
Luis Artola

なぜこれが良いのか説明できますか?
渦度

@渦度は何より良いですか?
Janus Troelsen

@JanusTroelsen申し訳ありませんが、大きなファイルを書き込むときに、これが受け入れられた回答よりも優れている理由を説明できますか?
渦度

1
@渦度は、ファイルを別のファイルに埋め込むと扱いにくくなるためです。エスケープが必要で、構文の強調表示が機能しません。テンプレート化メカニズムにより、必要に応じて中間にオブジェクトを挿入できます。
Janus Troelsen

9

Ramonの回答に基づいて、エラーが発生しました。記述しようとしたJSONのスペースの問題は、プレイブックのタスクを次のように変更することで修正されました。

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"

今のところ、なぜこれが必要だったのかわかりません。私の推測では、これは変数がAnsibleでどのように置き換えられ、結果のファイルが解析されるかに関係していると考えられます。


0

destオプションで宛先ファイルを直接指定できるようになりました。以下の例では、出力jsonは/tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
  uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
      "X-Requested-By": "ambari"
      "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.