使用 Ansible 在 Debian 上将 Exim 配置为邮件中继

使用 Ansible 在 Debian 上将 Exim 配置为邮件中继

我正在尝试使用 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-> ...”。

相关内容