web-dev-qa-db-ja.com

Ansible、役割が見つからないエラー

Vagrantマシンをプロビジョニングするために、ローカルホストに対して次のプレイブックをプレイしようとしています

---
- hosts: all
  become: yes
  roles:
    - base
    - jenkins

私はgithubから必要な役割を複製しました、そしてそれらは相対パスroles/{role name}にあります

次のコマンドを実行すると、ansible-playbook -i "localhost," -c local playbook.ymlがこのエラーを出力します。

==> default: ERROR! the role 'geerlingguy.Java' was not found in /home/vagrant/provisioning/roles:/home/vagrant/provisioning:/etc/ansible/roles:/home/vagrant/provisioning/roles
==> default:
==> default: The error appears to have been in '/home/vagrant/provisioning/roles/jenkins/meta/main.yml': line 3, column 5, but may
==> default: be elsewhere in the file depending on the exact syntax problem.
==> default:
==> default: The offending line appears to be:
==> default:
==> default: dependencies:
==> default:   - geerlingguy.Java
==> default:     ^ here

不足している依存関係をgithubから複製し、roles/Javaroles/geerlingguy/Javaの相対パスに配置しようとしましたが、どちらも問題を解決せず、エラーは同じままです。

Ansible-galaxyランタイムを使用せずに、すべてのロールを同期されたプロビジョニングフォルダーにローカルに保持して、プロビジョニングメソッドをできるだけ自己完結型にしたいと考えています。

現在のプロビジョニングフォルダー構造は次のとおりです

.
├── playbook.yml
└── roles
    ├── base
    │   └── tasks
    │       └── main.yml
    ├── Java
    │   ├── defaults
    │   │   └── main.yml
    │   ├── meta
    │   │   └── main.yml
    │   ├── README.md
    │   ├── tasks
    │   │   ├── main.yml
    │   │   ├── setup-Debian.yml
    │   │   ├── setup-FreeBSD.yml
    │   │   └── setup-RedHat.yml
    │   ├── templates
    │   │   └── Java_home.sh.j2
    │   ├── tests
    │   │   └── test.yml
    │   └── vars
    │       ├── Debian.yml
    │       ├── Fedora.yml
    │       ├── FreeBSD.yml
    │       ├── RedHat.yml
    │       ├── Ubuntu-12.04.yml
    │       ├── Ubuntu-14.04.yml
    │       └── Ubuntu-16.04.yml
    └── jenkins
        ├── defaults
        │   └── main.yml
        ├── handlers
        │   └── main.yml
        ├── meta
        │   └── main.yml
        ├── README.md
        ├── tasks
        │   ├── main.yml
        │   ├── plugins.yml
        │   ├── settings.yml
        │   ├── setup-Debian.yml
        │   └── setup-RedHat.yml
        ├── templates
        │   └── basic-security.groovy
        ├── tests
        │   ├── requirements.yml
        │   ├── test-http-port.yml
        │   ├── test-jenkins-version.yml
        │   ├── test-plugins-with-pinning.yml
        │   ├── test-plugins.yml
        │   ├── test-prefix.yml
        │   └── test.yml
        └── vars
            ├── Debian.yml
            └── RedHat.yml
9
Tuomas Toivonen

/rolesフォルダー(またはシステムフォルダー)に必要なロールallをインストールまたは複製する必要があります

ansible-galaxy install -p ROLES_PATH geerlingguy.Java

この特定の問題を修正する必要があります。

ただし、 ベストプラクティス は、必要なすべての役割が必要なrequirements.ymlファイルを使用し、ansible-galaxyを使用して直接プレイブックにインストールする必要があります。

- name: run ansible galaxy
  local_action: command ansible-galaxy install -r requirements.yml --ignore-errors
5
Diego Ferri

これが解決策です:役割に必要なパスはroles/geerlingguy.Java/ではなくroles/geerlingguy/Java/です

1
Tuomas Toivonen