148

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

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

Ansible が実行時に不足しているロールについて文句を言うまで、必要な Ansible Galaxy ロールを事前に正確に知ることはさらに困難です。

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

4

9 に答える 9

167

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 ドキュメントを参照してください。

于 2015-05-11T20:01:45.260 に答える
19

私はよく、Java JDK をインストールしていることに気づきます。ロールを使用すると、そのタッチが簡単になります。私はいくつかの異なる方法を試しました(多くの.gitmodulesとサブモジュールを含む...仕事のために複数のgitシステムを使用する必要があり、すべてが醜くなります)。私の最大の要件は、役割コードを Playbook プロジェクトにチェックインしないことです。ほとんどの場合、すべてを 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

この最初の Playbook を実行してから、通常の Playbook でロールを実行します。私にとっての秘訣は、ロールを誤ってチェックインしないように、git によって確実に無視されるようにすることです。また、毎回フォルダーを消去するので、エラーを強制したり無視したりする必要はありません。

于 2016-02-10T15:27:17.860 に答える
10

Ansible ロールを使用して、コマンド モジュールを使用して必要なロールをインストールできます。

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

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

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

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

于 2016-04-04T09:09:59.803 に答える
1

ここで、私の要件は役割にあり、install.yml で使用されます

main.yml

 # tasks file for MY_ROLE
- name: Install requirements
  local_action: command ansible-galaxy install -r {{ role_path }}/requirements.yml -p /etc/ansible/roles

- include_tasks: install.yml 
.  
├── playbook.yml  
├── inventory  
├── roles  
│    └── My_Role   
│        ├── tasks  
│        │   └── main.yml  
│        │   └── install.yml  
│        └── requirements.yml
于 2020-01-22T11:03:24.787 に答える