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
相关产品推荐
相关产品推荐

