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

Ansible中如何重命名或映射变量键,实现cert_item.name转cert_item.domains

方案1:修改循环表达式,直接生成符合要求的变量结构

通过Jinja2过滤器在循环时动态给每个vhost项新增要求的domains字段,不修改原始变量:

- include_tasks: create-cert-standalone.yml
  loop: "{{ apache2.vhost | map('combine', {'domains': [item.name]}) | list }}"
  when:
    - certbot_create_if_missing
    - certbot_create_method == 'standalone'
    - item.add_ssl | d(true)
  loop_control:
    loop_var: cert_item

说明:combine过滤器会保留原有vhost的所有属性,仅新增domains字段,值为单元素数组适配certbot的参数要求,处理后的变量直接用于循环即可满足被调用任务的参数要求。


方案2:保留原有循环逻辑,引入时动态补全属性

如果不想修改原有循环的遍历逻辑,可以在调用include任务时通过vars参数动态补全字段:

- include_tasks: create-cert-standalone.yml
  loop: "{{ apache2.vhost }}"
  when:
    - certbot_create_if_missing
    - certbot_create_method == 'standalone'
    - cert_item.add_ssl | d(true)
  loop_control:
    loop_var: cert_item
  vars:
    # 动态补全domains字段,优先级高于原始循环变量,不会修改源数据
    cert_item: "{{ cert_item | combine({'domains': [cert_item.name]}) }}"

注意:certbot要求domains为列表类型,必须把单个域名包裹在[]中转为数组格式,否则会出现传值格式错误。


内容的提问来源于stack exchange,提问作者Azer Tyker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:57:05