Configuration Ansible,未找到角色错误

Configuration Ansible,未找到角色错误,configuration,vagrant,ansible,ansible-playbook,provisioning,Configuration,Vagrant,Ansible,Ansible Playbook,Provisioning,我试着对本地主机播放下面的剧本,以提供流浪者机器 --- - 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

我试着对本地主机播放下面的剧本,以提供流浪者机器

---
- 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/java
roles/geerlingguy/java
的相对路径中,但两者都没有解决问题,错误保持不变

我希望在不使用ansible galaxy runtime的情况下,将所有角色本地保留在Synched provisioning文件夹中,以使配置方法尽可能自包含

以下是当前的供应文件夹结构

.
├── 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

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

应该解决这个特定的问题

但是,最重要的是使用
requirements.yml
文件,在该文件中您需要所有需要的角色,然后将它们与
ansible galaxy
一起直接安装到您的剧本中

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

以下是解决方案:角色所需的路径是
roles/geerlingguy.java/
,而不是
roles/geerlingguy/java/
简单的符号链接在没有任何安装的情况下就像一个符咒:

$ mkdir /home/USER/ansible && ln -s /home/USER/GIT/ansible-root/roles

我尝试了第一个例子,但没有解决问题。我得到了要求文件是必需的错误,所以我尝试了ansible galaxy文档中的命令:sudo ansible galaxy install-p$ROLES\u PATH-r requirements.txt,其中requirements.txt的内容是geerlingguy.java。出现以下错误:requirements.txt未成功安装:文件==>默认值:下载的不是tar.gz,因为您可以看到tar文件的格式是否有误。我刚刚在我的开发盒上执行了
sudo-ansible-galaxy安装-p my folder-r requirements.txt
(内容只有
geerlingguy.java
)。顺便问一下,为什么是sudo?
$ mkdir /home/USER/ansible && ln -s /home/USER/GIT/ansible-root/roles