Ansible角色YAML错误

Ansible角色YAML错误,ansible,ansible-role,Ansible,Ansible Role,测试一个基本的Ansible角色设置,但是在角色main.yml的第一行出现了一个错误,我相信这是很愚蠢的 play.yml - hosts: myhosts remote_user: myuser roles: - test - hosts: all user: myuser gather_facts: no tasks: - name: ping all hosts ping: 目录结构 play.yml roles/test/tasks/main

测试一个基本的Ansible角色设置,但是在角色
main.yml
的第一行出现了一个错误,我相信这是很愚蠢的

play.yml

- hosts: myhosts
  remote_user: myuser
  roles:
    - test
- hosts: all
  user: myuser
  gather_facts: no
  tasks:
  - name: ping all hosts
    ping:
目录结构

play.yml
roles/test/tasks/main.yml
main.yml

- hosts: myhosts
  remote_user: myuser
  roles:
    - test
- hosts: all
  user: myuser
  gather_facts: no
  tasks:
  - name: ping all hosts
    ping:
当我运行ansible playbook play.yml时,我得到了错误

The offending line appears to be:


- hosts: all
  ^ here

这看起来像是一个简单的YAML解析错误,但如果我运行
ansible playbook main.yml
,它工作正常,所以不确定发生了什么。有什么想法吗?

您不能在
角色/test/tasks/main.yml
中指定主机。主机在
play.yml
文件中指定

roles/test/tasks/main.yml
用于定义希望Ansible执行的操作。在ping主机的情况下,它可能只是如下所示:

 ---

 - ping:
这将对您的
play.yml
中指定的主机执行
ping
操作

- hosts: myhosts
  remote_user: myuser
  roles:
    - test
- hosts: all
  user: myuser
  gather_facts: no
  tasks:
  - name: ping all hosts
    ping:
Ansible有一套文件夹结构,可以用来分解剧本。
play.yml
文件指定了目标主机以及与其他顶级控件一起应用的角色

play.yml
文件中指定的单个角色位于
roles/X/
中,Ansible需要特定的文件夹结构。它将在这里的
roles/test/tasks/main.yml
角色中查找要运行的任务

play.yml
只是一个剧本。您可以在同一文件夹中创建多个,并使用
ansible playbook
调用它们


官方文档中有一个更详细的推荐示例

(在线)YAML验证器将向您显示,这与YAML解析错误无关,而是一个可能的相关问题。是的,我已经知道这不是YAML问题,因为
ansible playbook main.yml
工作正常,我说这看起来像是一个简单的YAML解析错误,表明问题在别处。谢谢,这是可行的,但我应该注意,我不能,而不是不需要,在
main.yml
中指定主机。我认为Ansible正在做一些基本的事情,比如按照YAML规范连接两个文件并缩进
main.yml
中的内容。顺便问一下,
--
是做什么的?“我对Ansible不熟悉。”鲍勃,你说得对。我已经更新了答案,使之更清晰,并添加了一个到官方文档的链接,其中有一个文件夹布局的好例子。---只是yaml语法的一部分,它表示文档的开始。使用它是一种很好的做法,尽管并不总是严格要求。我还建议您看看哪些角色有很多示例可供尝试。