You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible批量创建多站点WordPress用户时遇变量未定义错误求助

解决Ansible多站点WP-CLI任务报错问题

错误根源

报错'dict object' has no attribute 'domain_name'的核心原因是:你循环的item并非字典类型,而是字符串,但你却尝试用字典的方式访问item.domain_name——这说明group_vars/all.yml中domain_name的列表格式和Playbook的循环逻辑不匹配。

两种修复方案

方案1:使用字符串列表(适合仅需站点路径的场景)

如果你的group_vars/all.yml是字符串列表格式:

# group_vars/all.yml
domain_name:
  - "domain.tld/qa"
  - "domain.tld/staging"

那么Playbook中循环时直接使用item即可,无需加.domain_name:

- name: 创建WordPress管理员用户
  command: wp user create admin admin@{{ item }} --role=administrator --user_pass=SecurePass123
  args:
    chdir: "/var/www/{{ item }}"
  loop: "{{ domain_name }}"

方案2:使用字典列表(适合需扩展站点属性的场景)

如果后续需要为不同站点配置不同的管理员账号、密码等,可将domain_name改为字典列表:

# group_vars/all.yml
domain_name:
  - { site_path: "domain.tld/qa", admin_user: "qa_admin", admin_email: "qa_admin@domain.tld" }
  - { site_path: "domain.tld/staging", admin_user: "staging_admin", admin_email: "staging_admin@domain.tld" }

此时Playbook中需对应修改为访问字典的键:

- name: 创建WordPress管理员用户
  command: wp user create {{ item.admin_user }} {{ item.admin_email }} --role=administrator --user_pass=SecurePass123
  args:
    chdir: "/var/www/{{ item.site_path }}"
  loop: "{{ domain_name }}"

验证方法

如果不确定item的类型,可先添加一个debug任务确认:

- name: 打印循环item内容
  debug:
    var: item
  loop: "{{ domain_name }}"

执行后就能清楚看到item是字符串还是字典,再对应调整访问方式。

内容的提问来源于stack exchange,提问作者Roberto Jobet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:52:11