我的 ansible playbook 包含多个角色,例如dovecot
、postfix
和。它们都需要 SSL 证书,这些证书由 (lets encrypt) 角色生成。出于这个原因,为了更容易处理,所有角色postgres
都遵循相同的数据结构来定义具有不同要求的 SSL 证书:rspamd
certbot
certbot_domains: []
dovecot_domains:
- name: imap1.example.com
subject_alternative_names: []
- name: imap1.department-a.example.com
subject_alternative_names: []
- name: pop3.example.com
subject_alternative_names: []
- name: pop3.department-a.example.com
subject_alternative_names: []
postfix_domains:
- name: smtp1.example.com
subject_alternative_names:
- smtp1.department-a.example.com
postgres_domains:
- name: postgres.example.com
subject_alternative_names: []
rspamd_domains:
- name: rspamd.example.com
subject_alternative_names:
- rspamd.department-a.example.com
certbot
但是,我想避免在角色dovecot
、postfix
和postgres
中包含rspamd
会自动创建证书的角色,因为每次都会安装nginx
、每个域的 vhosts.conf 文件和一些代码片段来提供路径/.well-known/acme-challange
作为别名。
为了避免每次都安装nginx
、配置代码片段等,这些任务应该只运行一次。变量应由、和certbot_domains
扩展,并且nginx 及其 vhosts 的安装应该是最后一项任务。也许下面的图可以更准确地描述这个问题。dovecot_domains
postfix_domains
postgres_domains
rspamd_domains
如果 ansible 中已经有了某些内容,我将非常感激能提供一个使解决方案更易于理解的小片段。