web-dev-qa-db-ja.com

Ansible Galaxyの役割を自動的にインストールする方法は?

すべてのAnsibleプレイブック/ロールがgitリポジトリにチェックインされます。

ただし、Ansible Galaxyの役割の場合は、Ansibleを実行するすべてのマシンで常に明示的に1つずつダウンロードする必要があります。

実行時にAnsibleが役割の欠落について不平を言うまで、どのAnsible Galaxyの役割が必要であるかを正確に事前に知ることは困難です。

Ansible Galaxyロールの依存関係をどのように管理するのですか? Ansibleの残りのコードと一緒にgitリポジトリにチェックインするか、Ansibleを新しいマシンで実行するときに自動的に識別されてダウンロードされるようにします。

103
pdeva

このユースケースには、requirements.ymlファイルを使用する必要があります。さまざまなインストール方法のいずれかを使用して、必要な役割を説明します。

# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight

# Install a role from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight

# Install a role from a specific git branch
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: Origin/master

# Install a role at a specific tag from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: 1.0.0

# Install a role at a specific commit from GitHub
- name: opendaylight
  src: https://github.com/dfarrell07/ansible-opendaylight
  version: <commit hash>

次に、それらをインストールします。

ansible-galaxy install -r requirements.yml

作業例 (VagrantプロビジョニングツールとしてAnsibleを使用してOpenDaylightをインストール)です。詳細については、 関連するAnsibleドキュメント を参照してください。

129
dfarrell07

提案されているように、この必要に応じてansible galaxyを使用できます。

Ansibleには、すべてのロールをリストしたrequirements.ymlファイルを作成できる機能があります。これについては、こちらで確認できます: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file

例(requirements.yml):

- src: yatesr.timezone

次に、このファイルに対してansible-galaxy install -r requirements.ymlを実行して、そこにリストされているすべての役割をダウンロードします。

さらに自動化する場合は、2つのコマンドを実行する単純なシェルスクリプトを作成できます。

例(ansible.sh):

./ansible.sh

ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory 
44
Kieran Andrews

私はJava JDKをインストールしてインストールすることがよくあります。ロールを使用すると、そのタッチが簡単になります。私はいくつかの異なる方法を試しました(多くの.gitmodulesおよびサブモジュールを含む...作業には複数のgitシステムを使用する必要があり、すべてがいです)。私の最大の要件は、プレイブックプロジェクトにロールコードをチェックインしないことです。ほとんどの場合、すべてを1か所に保持できます。

私の 'requirements.yml'ファイルの内容:

- src: https://github.com/staylorx/ansible-role-wls-prep.git
  version: master
  name: staylorx.wls-prep

- src: https://my-work-git-extravaganza.com
  version: 2.x
  name: coolplace.niftyrole

#From Ansible Galaxy
- src: staylorx.Oracle-jdk

別のプレイブックinstall-roles.ymlを実行します。

---

- hosts: localhost

  tasks:
    - file:
        path:  roles
        state: absent

    - local_action:
        command ansible-galaxy install -r requirements.yml --roles-path roles

    - lineinfile:
        dest:   .gitignore
        regexp: '^\/roles$'
        line:   '/roles'
        state:  present

この最初のプレイブックを実行し、その後、通常のプレイブックで役割を実行します。私にとっての秘密は、gitによって無視されることを保証することです。そのため、誤ってロールをチェックインすることはありません。また、毎回フォルダーを消去するため、エラーを強制したり無視したりする必要がないことを確認します。

17
staylorx

別の解決策は、gitサブモジュールを使用することです。結局のところ、Ansible Galaxyはgithubリポジトリのディレクトリにすぎません...

このコマンドを使用して、Galaxyロールをサブモジュールとして自動的に追加します。

ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh

変更をgitリポジトリにコミットします。将来リポジトリを複製する場合は、サブモジュールを使用して複製するようにしてください。 git clone ... --recursive

これの利点は、gitサブモジュールが常に特定のバージョンを参照していることです(git commit-hash)。これにより、実稼働環境で未テストの更新を実行できなくなります。 Galaxyロールの新しいバージョンにはバグがあったり、以前とはまったく異なる動作をする可能性があります。 gitサブモジュールを使用して、ロールを新しいバージョンに更新するかどうか、いつ更新するかを決定します。

また、コードをリポジトリにコミットすることを防ぐために、.gitignoreのギャラクシーロールをブラックリストに追加で追加する必要はありません。

4
udondan

この時点では、私が知る限り、実行時にロールを自動的にダウンロードする方法はありません。最善の方法は、それらを自分のリポジトリにコミットするか、すべての要件をリストした適切なドキュメントを用意することです。ロールをインストールするプリフライトプレイブックを作成することもできます。 :)

3
Mxx

Ansibleロールを使用して、 command module を使用して他の必要なロールをインストールできます。

ansible-galaxy install を実行する非常に基本的な例を次に示します。

- name: Install roles from Ansible Galaxy
  command: ansible-galaxy install {{ item.item }}
  with_items:
    - "{{ ansible_roles_list }}"

ansible_roles_listは、変数またはロールパラメーターとして指定できます。

このロールを実装したため、Ansibleを使用して制御マシン(の一部)をセットアップすることもできます: https://galaxy.ansible.com/ferrarimarco/install-roles/

このロールを適用する必要がありますbefore別のプレイブックで、それを使用してインストールする他のロール。これは、Ansibleが参照するプレイブックを実行する前に、すべてのロールが利用可能かどうかをチェックするためです。

3
Marco Ferrari