5

我正在尝试在 Ansible 中自动化 Debian 上的 exim4 配置——到目前为止,我们一直在手动配置——但我陷入了正常运行的阶段dpkg-reconfigure exim4-config

我可以很容易地自动化这些步骤:

  • 更新 conf 文件/etc/exim4/exim4-config.conf.conf
  • dpkg-reconfigure --frontend noninteractive exim4-config

它们在剧本中运行良好,但问题是我在交互式提示中看到的并非所有选项都在此 conf 文件中。例如,第二个设置System mail name未在 conf 文件中的任何位置指定。也不是最后一个设置,Root and postmaster mail recipient在第一次配置后,它也停止显示在交互式提示中(为什么会这样?)

然后我看到有些人建议使用debconf-set-selectionshere),我试着调查一下——我安装了debconf-utils包然后运行debconf-get-selections——然后我看到了那里的所有选项,但现在我想知道是否有一种方法可以debconf-set-selections不使用必须使用一次设置所有设置的文件,因为我只想更改与 exim4 关联的值。如果我需要再次运行剧本,我试图避免覆盖可能设置的任何其他值(与 exim4 无关)。

没有将输出写入debconf-get-selections文件然后使用 Ansible 的lineinfile/template模块来替换我想要更改的值,是否有更简单的方法来解决这个问题?我宁愿避免这种方法。

4

2 回答 2

5

有点晚了,但我建议你使用 ansible debconf 模块(它基本上是做 a debconf-set-selections)。

像这个例子:

- name: Debconf question dc_eximconfig_configtype
  debconf: name='exim4-config'
    question: 'exim4/dc_eximconfig_configtype'
    value: 'internet site; mail is sent and received directly using SMTP'
    vtype: select

或者这个:

- name: Debconf question mailname
  debconf: name='exim4-config'
    question: 'exim4/mailname'
    value: '{{ inventory_hostname }}'
    vtype: string

但是,如果您正在重新配置exim(在您配置一次之后),那么您必须在执行 a 之前删除 2 个文件dpkg-reconfigure,可以使用以下命令完成:

- name: remove exim config files
  file: path={{ item }} state=absent
  with_items:
    - "/etc/exim4/update-exim4.conf.conf"
    - "/etc/mailname"

最后,做一个dpkg-reconfigure,这也重新启动 exim。

- name: Reconfigure package exim4-config
  command: dpkg-reconfigure -fnoninteractive exim4-config
于 2016-11-16T15:51:28.003 回答
1

我在“debconf:name='exim4-config'”行中出现以下错误:

ERROR! Syntax Error while loading YAML.

我也更喜欢在 /etc/exim4/update-exim4.conf.conf 中使用“value:'smarthost'”来设置“dc_eximconfig_configtype='smarthost'”...

因此,我的角色/smtp_client/tasks/main.yml 文件包含以下几行:

- name: remove exim config files
  file: path={{ item }} state=absent
  with_items:
    - "/etc/exim4/update-exim4.conf.conf"
    - "/etc/mailname"

- name: Debconf question mailname
  debconf:
    name: 'ansible_hostname exim4-config'
    question: 'exim4/mailname'
    value: '{{ ansible_hostname }}'
    vtype: string

- name: Debconf question dc_eximconfig_configtype
  debconf:
    name: 'dc_eximconfig_configtype exim4-config'
    question: 'exim4/dc_eximconfig_configtype'
    value: 'smarthost'
    vtype: select

- name: Debconf question dc_smarthost
  debconf:
    name: 'dc_smarthost exim4-config'
    question: 'exim4/dc_smarthost'
    value: '{{ my_smtp_server }}'
    vtype: string

- name: Reconfigure package exim4-config
  command: dpkg-reconfigure -fnoninteractive exim4-config
于 2018-07-09T15:40:26.493 回答