首页 文章

Ansible,找不到角色错误

提问于
浏览
5

我尝试播放以下针对localhost的playbook来提供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

2 回答

  • 1

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

    ansible-galaxy install -p ROLES_PATH geerlingguy.java
    

    应该解决这个具体问题 .

    但是,best practice应该使用 requirements.yml 文件,您需要所有需要的角色,然后直接在您的剧本中安装 ansible-galaxy .

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

    这是解决方案:角色的必需路径是 roles/geerlingguy.java/ ,而不是 roles/geerlingguy/java/

相关问题