76

私はこれを持っていますplay.yml

---
- hosts: 127.0.0.1
  connection: local
  sudo: false

  tasks:
     - include: apache.yml

私のApacheは次のようになります。

vars:
    url: czxcxz

- name: Download apache
  shell: wget {{url}} 

これは私にエラーを与えています。

削除するvarsと機能します。しかし、さまざまなタスクのさまざまな変数を別々に保持できるように、タスク内に変数を含めたいと思います。

4

6 に答える 6

92

注:set_fact以下で説明するように使用すると、タスクが実行されているリモート サーバーにファクト/変数が設定されます。このファクト/変数は、Playbook の全期間にわたって後続のタスク間で保持されます。

また、これらのファクトは (プレイブックの期間中) 不変であり、一度設定すると変更できません。


元の答え

set_factタスクの前に使用して、変数と交換可能と思われる事実を設定します。

- name: Set Apache URL
  set_fact:
    apache_url: 'http://example.com/apache'

- name: Download Apache
  shell: wget {{ apache_url }}

公式の言葉については、http://docs.ansible.com/set_fact_module.htmlを参照してください。

于 2015-01-16T02:40:04.513 に答える
13

変数定義は、タスクで使用するためのものです。ただし、それらをタスクに含めたい場合は、おそらくregisterディレクティブを使用してください。このような:

- name: Define variable in task.
  shell: echo "http://www.my.url.com"
  register: url

- name: Download apache
  shell: wget {{ item }}
  with_items: url.stdout

また、さまざまな役割roleに応じてタスクを分離する方法として、役割を検討することもできます。このようにして、役割ごとに個別の変数を持つことができます。たとえば、 role の変数と別の変数を持つことができます。urlapache1urlapache2

于 2014-03-22T02:27:53.163 に答える
-3

モジュールの後に変数が続く ansible の同じ行がある場合、パーサーは参照変数をインライン辞書の先頭として扱います。例えば:

- name: some example
  command: {{ myapp }} -a foo

ここでのデフォルトでは、 の最初の部分を{{ myapp }} -a foo文字列ではなく辞書として解析するため、エラーが発生します。

したがって、次のように引数を引用する必要があります。

- name: some example
  command: "{{ myapp }} -a foo"
于 2016-11-08T03:04:18.907 に答える