ansible角色无法找到模块

ansible role unable to find module

我有一个 test.yml 文件,它可以从 git 中检出代码(都复制在下面):

site.yml

---
- hosts: webservers
  user: me
  roles: 
  - role: test-role

main.yml 文件在 test-role/tasks

---

- name: fetching my repo
  vars: 
    my_repo_url: git@bitbucket.org:myrepo/my-server.git
    my_proj_path: /tmp/repos/my-server/ 
  tasks: 
   - name: check out git repository on host
     git: repo={{ my_repo_url }} dest={{ my_proj_path }} accept_hostkey=yes

主机:

[webservers]
testserver ansible_ssh_host=xxx.xxx.xxx.xxxx ansible_ssh_port=xxxx

当我 运行 以下内容时:

ansible-playbook -i hosts site.yml

我在下面复制了异常,引用了角色任务部分中的 main.yml 文件。任何我可能配置错误的想法。

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/home/user/git/roles/test-role/tasks/main.yml': line 3, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


- name: fetching my repo
  ^ here


The error appears to have been in '/home/user/git/test/roles/test-role/tasks/main.yml': line 3, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


- name: fetching my repo
  ^ here

更新 尝试根据 Konstantin 的反馈进行更改,但我或多或少遇到了相同的异常:

roles/test-role/defaults/main.yml

---
  vars: 
    my_repo_url: git@bitbucket.org:myrepo/my-server.git
    my_proj_path: /tmp/repos/my-server/ 

tasks/main.yml

---
- name: fetching my repo
  tasks: 
   - name: check out git repository on host
     git: repo={{ my_repo_url }} dest={{ my_proj_path }} accept_hostkey=yes

异常: 现在它抱怨下面的行。我在 运行 语法检查时得到相同的响应。

---
- name: fetching my repo
  ^ here

更新 按照 Konstantin 和 Avalon 的回答 - 我能够 运行 成功完成任务。

main.yml 角色应该只包含任务列表,没有别的。

将您的文件拆分为 test-role/defaults/main.yml(变量):

---
my_repo_url: git@bitbucket.org:myrepo/my-server.git
my_proj_path: /tmp/repos/my-server/ 

test-role/tasks/main.yml(任务):

---
# fetching my repo
- name: check out git repository on host
  git: repo={{ my_repo_url }} dest={{ my_proj_path }} accept_hostkey=yes

补充一下 Konstantin 所说的,您的任务应该只包含任务。变量需要在单独的文件中定义。此外,您的 syntax/formatting 还可以改进。

site.yml

---
- hosts: webservers
  user: me
  roles: 
    - test-role

roles/test-role/tasks/main.yml

---
- name: fetching my repo
  git: repo={{ my_repo_url }} dest={{ my_proj_path }} accept_hostkey=yes

roles/test-role/vars/main.yml

---
my_repo_url: git@bitbucket.org:myrepo/my-server.git
my_proj_path: /tmp/repos/my-server/ 

此外,我建议在 ansible.cfg 文件中设置库存路径。配置文件可以在 /etc/ansible.cfg 中,也可以与您的剧本在同一目录中(我个人的剧本与我的剧本在同一目录中)。

ansible.cfg

inventory      = inventory/hosts

如果这样做,您在 运行 剧本时就不必指定库存文件位置。如果不出意外,它将为您节省几次击键。

您应该查看 this URL 以了解创建角色结构的最佳做法和示例。