Dictionary inside Dictionary in Ansible



我有以下Ansible剧本文件:

  1 ---                                                                                                                                           
  2 -   name: Provision cluster                                                                                                
  3     connection: local                                                                                                                         
  4     hosts: localhost                                                                                                                          
  5     gather_facts: False                                                                                                                       
  6     vars_files:                                                                                                                               
  7     -   ../vars_files/credentials/foo.yml                                                                                         
  8     -   ../vars_files/credentials/bar.yml                                                                                          
  9                                                                                                                                               
 10     vars:                                                                                                                                     
 11       - ec2_hosts:                                                                                                                            
 12         - node1:                                                                                                                              
 13           - address: 1.1.1.1                                                                                                               
 14         - node2:                                                                                                                              
 15           - address: 1.1.1.2                                                                                                               
 16         - node3:                                                                                                                              
 17           - address: 1.1.1.3                                                                                                              
 18         - node4:                                                                                                                              
 19           - address: 1.1.1.4

我想做的是暗示在另一本字典里放一本字典。在第二节中,我将声明主机名和它的IP地址之间的字典。然而,我得到了以下错误:

ERROR: Syntax Error while loading YAML script, provision.yml
Note: The error may actually appear before this position: line 10, column 1

        vars:

在定义复杂变量时,我个人更喜欢使用JSON(或Python’ish)表达式,因为与YAML语法中定义的复杂变量相比,这些表达式更可读。例如:

vars:
  ec2_hosts: {
      node1: {
          address: 1.1.1.1,
          hostname: ec2_node1
      },
      node2: {
          address: 1.1.1.2,
          hostname: ec2_node2
      },
    },

如果你必须使用YAML,希望这确实是你想要的结构,它与前一个不同:

vars:
  - ec2_hosts:
    - host1:
      - address: 1.1.1.1
    - host2:
      - address: 1.1.1.2

以下是测试的代码,以防出现其他语法错误:

- name: Provision cluster
  connection: local
  hosts: localhost
  gather_facts: False
  # vars_files:
  # - ../vars_files/credentials/foo.yml
  # - ../vars_files/credentials/bar.yml
  vars:
    - ec2_hosts:
      - host1:
        - address: 1.1.1.1
      - host2:
        - address: 1.1.1.2
  tasks:
  - debug: msg="{{ec2_hosts}}"

附言:我从你的帖子中复制了很多尾随空格,希望它们不存在于你的实际剧本YAML中

最新更新