代码之家  ›  专栏  ›  技术社区  ›  Tuomas Toivonen

Ansible,字段args具有无效值[重复]

  •  2
  • Tuomas Toivonen  · 技术社区  · 8 年前

    我在剧本中添加了一个名为“共同”的角色。yml,并且配置失败,消息如下:

    TASK [common : Host is present] ************************************************
    ==> cd: fatal: [localhost]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'unicode object' has no attribute 'host_ip'\n\nThe error appears to have been in '/vagrant/ansible/roles/common/tasks/main.yml': line 7, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Host is present\n  ^ here\n"}
    

    以下是 roles/common/tasks/main.yml ,失败的特定任务

    - name: Host is present
      lineinfile:
        dest: /etc/hosts
        regexp: "^{{ item.host_ip }}"
        line: "{{ item.host_ip }} {{ item.host_name }}"
      with_items: hosts
      tags: [common]
    

    以下是 roles/common/defaults/main.yml

    hosts: [
      { host_ip: "10.100.198.200", host_name: "cd"},
      { host_ip: "10.100.198.201", host_name: "prod"},
      { host_ip: "10.100.198.202", host_name: "logging"},
      { host_ip: "10.100.194.201", host_name: "serv-disc-01"},
      { host_ip: "10.100.194.202", host_name: "serv-disc-02"},
      { host_ip: "10.100.194.203", host_name: "serv-disc-03"},
      { host_ip: "10.100.193.200", host_name: "proxy"},
      { host_ip: "10.100.192.200", host_name: "swarm-master"},
      { host_ip: "10.100.192.201", host_name: "swarm-node-1"},
      { host_ip: "10.100.192.202", host_name: "swarm-node-2"},
    ]
    
    obsolete_services:
      - puppet
      - chef-client
    

    为什么ansible声称args是未定义的。我使用的例子不是我自己做的,而且已经几个月了,所以我想知道ansible处理角色中变量的方式是否发生了变化,因此不起作用。

    1 回复  |  直到 8 年前
        1
  •  14
  •   Konstantin Suvorov    8 年前

    with_items:主机

    这是过时的语法。不能对循环使用裸变量。

    正确语法: with_items: "{{ hosts }}"