如何基于host_vars列表从ansible在shell命令中生成参数列表

时间:2019-03-05 18:47:45

标签: bash ansible

在一个Ansible脚本中,我想通过certbot指定letencrypt证书的生成。通过域选项,我希望证书包含我希望注册的尽可能多的域。像这样进行硬编码时,一切都会按预期进行:

  command: |
    certbot certonly \
    --standalone \
    --non-interactive \
    --agree-tos \
    --email me@you.com \
    -d domain1.com \
    -d domain2.com \
    -d domain3.com

由于脚本将更特定于主机/通用,我想知道:是否有可能通过驻留在我的host_vars/<specific_host>.yml中的可访问项列表生成'-d domainx.com的上层列表?我不知道这是否更像是一个bash或一个与ansible相关的问题,这就是为什么我同时用:D

标记它

最好,谢谢! 安迪

1 个答案:

答案 0 :(得分:1)

@CharlesDuffy:很遗憾,您的解决方案不适用于我们。尽管如此,join()函数还是一个有价值的提示。使用join(),我们只需在主机文件中创建第二个变量即可处理域列表

 certbot_certificate_domains:
    - domain1.com
    - domain2.com
    - domain3.com

 certbot_domain_list: "-d {{ certbot_certificate_domains | join(' -d ') }}"

然后在我们的命令中引用变量的值:

 name: run initial letsencrypt
   command: 
     certbot certonly --standalone --non-interactive --agree-tos --rsa-key-size 4096 --email me@you.com {{ certbot_domain_list }}