我正在尝试使用 Ansible 在多个 Debian 服务器上配置 exim 以进行邮件中继。
我想使用 Debian 的配置方式 - 使用 debconf。理想情况下,我只需传入几个基本配置选项,Debian 就会生成 Exim 配置。
我已经让它工作了,但它看起来过于复杂而且感觉不对。
任务:
- name: Install exim4
apt:
name:
- exim4
- exim4-daemon-light
- exim4-config
state: present
- name: install /etc/exim4/passwd.client
copy:
src: exim4-passwd.client
dest: /etc/exim4/passwd.client
owner: root
group: Debian-exim
mode: 0640
- name: configure exim4-config
debconf:
name: 'exim4-config'
question: '{{ item.key }}'
vtype: 'string'
value: '{{ item.value }}'
with_dict:
exim4/dc_eximconfig_configtype: mail sent by smarthost; no local mail
exim4/dc_localdelivery: mbox format in /var/mail/
exim4/dc_local_interfaces: '127.0.0.1 ; ::1'
exim4/dc_minimaldns: 'false'
exim4/dc_other_hostnames:
exim4/dc_postmaster:
exim4/dc_readhost: '{{ mail_domain }}'
exim4/dc_relay_domains:
exim4/dc_relay_nets:
exim4/dc_smarthost: '{{ mail_server }}'
exim4/exim4-config-title:
exim4/hide_mailname: 'false'
exim4/mailname: '{{ mail_domain }}'
exim4/no_config: 'false'
exim4/use_split_config: 'false'
notify:
- update exim4 configuration
- restart exim4
然后我必须使用以下带有 shell 脚本的处理程序来使其重新生成 Exim 4 配置:
- name: "update exim4 configuration"
become: true
shell: |
rm -f /etc/exim4/update-exim4.conf.conf
dpkg-reconfigure exim4-config -f noninteractive
/usr/sbin/update-exim4.conf
exit 0
- name: "restart exim4"
become: true
service:
name: exim4
enabled: yes
state: reloaded
这样做的问题是:
- 需要很长时间才能运行
- 每次运行时都会有变化
changed: [foo.example.com] => (item={'key': 'exim4/hide_mailname', 'value': 'false'})
- 使用 shell 脚本不太好
- 过于复杂,感觉应该很简单
是我忽略了什么,还是这不是大多数人会做的事情?
答案1
问:“运行起来需要相当长一段时间。“
答:使安装成为可选的。例如
- name: Install exim4
apt:
name:
- exim4
- exim4-daemon-light
- exim4-config
state: present
when: install_packages|default(false)|bool
tags: install
安装一次软件包并在下次运行中省略该任务。
shell> ansible_playbook playbook.yml -t install -e "install_packages=true"
(未经测试)
问:“每次运行时它都会改变线路。“
已更改:[foo.example.com] => (item={'key': 'exim4/hide_mailname', 'value': 'false'})
答:调试问题。标记任务,试运行(-C,--check)剧本并查看更改(-D,--diff)。例如
- name: configure exim4-config
debconf:
...
tags: conf
shell> ansible_playbook playbook.yml -t conf -C -D
确保处理程序“更新 exim4 配置”不会恢复循环移动的配置“conf->handler->conf-> ...”。