Ansible,找不到角色错误

Tuo*_*nen 7 configuration provisioning vagrant ansible ansible-playbook

我尝试播放以下针对localhost的playbook来提供Vagrant机器

---
- hosts: all
  become: yes
  roles:
    - base
    - jenkins
Run Code Online (Sandbox Code Playgroud)

我从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
Run Code Online (Sandbox Code Playgroud)

我克隆了丢失的依赖从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
Run Code Online (Sandbox Code Playgroud)

Die*_*rri 5

您应该在文件夹(或系统文件夹)中安装或克隆所有必需的角色/roles

ansible-galaxy install -p ROLES_PATH geerlingguy.java
Run Code Online (Sandbox Code Playgroud)

应该解决此特定问题。

但是,最佳实践应该是使用一个requirements.yml文件,在该文件中,您需要所有需要的角色,然后将其ansible-galaxy直接安装在您的剧本中。

- name: run ansible galaxy
  local_action: command ansible-galaxy install -r requirements.yml --ignore-errors
Run Code Online (Sandbox Code Playgroud)