【问题标题】:Playbook (Ansible) syntax error剧本(Ansible)语法错误
【发布时间】:2016-01-20 17:09:48
【问题描述】:

我是 Ansible(或与此相关的任何脚本语言)的完全 n00b 并且希望对我的语法/缩进 (?) 问题提供一些帮助。

这是我的简单剧本,目标是在 AWS 中创建一个实例并将其添加到安全组。

我很困惑问题出在哪里,因为我从不同的 yaml 检查器收到 2 个不同的错误:

1) Yamllint 告诉我:“(): 在解析第 2 行第 3 列的块映射时没有找到预期的键”

2) Swagger 告诉我:“YAML 语法错误。第 6 行第 3 列的序列条目缩进错误:-名称:创建安全组 ^”(指向第二个“-名称”)

任何帮助都会很棒~

干杯~

---
- name: Provision an EC2 Instance and assign an SG
  hosts: local
  connection: local
  gather_facts: False
  - name: Create a security group
      local_action:
          module: ec2_group
          name: test_sg
          region: us-west-2
          rules:
            - proto: tcp
              type: ssh
              from_port: 22
              to_port: 22
              cidr_ip: 0.0.0.0/0
            - proto: tcp
              from_port: 80
              to_port: 80
              cidr_ip: 0.0.0.0/0
          rules_egress:
            - proto: all
              type: all
              cidr_ip: 0.0.0.0/0
  - name: Create new instance
        local_action: ec2
          group= test_sg
          instance_type= t1.micro
          image= ami-9ff7e8af
          wait= true
          region= us-west-2
          keypair= XXX-keypair
          count= 1
      register: ec2

【问题讨论】:

    标签: amazon-web-services amazon-ec2 yaml ansible ansible-playbook


    【解决方案1】:

    在第 6 行中,您将介绍一个列表的新项目(破折号)。但是 yaml 解析器不知道如何处理该项目。有两种方法。

    • Swagger 认为它是主列表的一部分,并且与第 2 行处于同一级别。因此它抱怨第 6 行的缩进错误。

    • Yamllint 知道它是一个子列表,但它不知道为子列表分配什么键。

    很可能,yamllint 是正确的,而您错过了一个名为 tasks 的密钥。即使修复了那一点,您也会发现还有其他识别问题。下面我粘贴了我理解的是正确的文本(从 Yaml 的角度来看)

    ---
    - name: Provision an EC2 Instance and assign an SG
      hosts: local
      connection: local
      gather_facts: False
      tasks: 
        - name: Create a security group
          local_action:
              module: ec2_group
              name: test_sg
              region: us-west-2
              rules:
                - proto: tcp
                  type: ssh
                  from_port: 22
                  to_port: 22
                  cidr_ip: 0.0.0.0/0
                - proto: tcp
                  from_port: 80
                  to_port: 80
                  cidr_ip: 0.0.0.0/0
              rules_egress:
                - proto: all
                  type: all
                  cidr_ip: 0.0.0.0/0
        - name: Create new instance
          local_action: ec2
              group= test_sg
              instance_type= t1.micro
              image= ami-9ff7e8af
              wait= true
              region= us-west-2
              keypair= XXX-keypair
              count= 1
          register: ec2
    

    【讨论】:

    • 非常感谢 Gonfva,帮助很大~ 除了您修复的问题之外,还有一些其他语法问题,但我设法让脚本运行。你能推荐一个有助于格式化 yaml 的脚本编辑器吗?我在 Mac 上。
    • 我使用 Atom,它有点帮助,但我时常受到缩进问题的伤害。另外,请允许我写两个关于 stackoverflow 用法的通用 cmets: 1.-尝试设置最相关的标签(在这个问题中,我不确定 AWS 或 EC2 是否与该问题相关)。 2.-如果您认为某个答案解决了您的问题,您应该考虑投票和/或关闭问题,因为这有助于其他人(已经回答的人、正在寻找答案的人以及正在寻找要回答的问题的人)
    • 我也使用 Atom。好的,谢谢将继续努力理解语法。好的注意到,会做的。抱歉,我是 Stackoverflow 的新手。现在会这样做。再次感谢~
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多