私はこれを持っています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
を削除すると動作します。ただし、タスク内に変数を含めて、タスクごとに異なる変数を別々に保持できるようにします。
注:以下で説明するset_fact
を使用すると、タスクが実行されているリモートサーバーにファクト/変数が設定されます。その後、このファクト/変数は、プレイブック全体の期間中、後続のタスクにわたって持続します。
また、これらのファクトは(プレイブックの期間中)不変であり、一度設定すると変更できません。
タスクの前にset_fact
を使用して、変数と交換可能と思われるfactsを設定します。
- name: Set Apache URL
set_fact:
Apache_url: 'http://example.com/Apache'
- name: Download Apache
Shell: wget {{ Apache_url }}
公式のWordについては、 http://docs.ansible.com/set_fact_module.html を参照してください。
私は知っています、それはずっと前ですが、最も簡単な答えがまだ投稿されていなかったので、私は通り過ぎるかもしれない他のユーザーのためにそうします。
「名前」ブロック内で変数を移動するだけです。
- name: Download Apache
vars:
url: czxcxz
Shell: wget {{url}}
変数定義は、タスクで使用されることを意図しています。ただし、タスクにそれらを含める場合は、おそらく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
また、異なるロール ロール に応じてタスクを分離する方法として ロール を見ることができます。このようにして、ロールのそれぞれに個別の変数を設定できます。たとえば、Apache1
にはurl
変数があり、ロールApache2
には別のurl
変数があります。
あなたの例では、Apache.ymlはタスクリストですが、プレイブックではありません
目的のアーキテクチャに応じて、次のいずれかを実行できます。
Apache.ymlをロールに変換します。次に、roles/Apache/tasks/mail.ymlでタスクを定義し、roles/Apache/defaults/mail.ymlで変数を定義します(ロールの適用時にデフォルトの変数をオーバーライドできます)
Play.ymlプレイブックで変数を設定します
play.yml
---
- hosts: 127.0.0.1
connection: local
Sudo: false
vars:
url: czxcxz
tasks:
- include: Apache.yml
Apache.yml
- name: Download Apache
Shell: wget {{url}}
モジュールの後にansibleの同じ行に変数が続く場合、パーサーは参照変数をインライン辞書の始まりとして扱います。例えば:
- name: some example
command: {{ myapp }} -a foo
ここでのデフォルトは、{{ myapp }} -a foo
の最初の部分を文字列ではなく辞書として解析することであり、エラーが発生します。
したがって、次のように引数を引用する必要があります。
- name: some example
command: "{{ myapp }} -a foo"