
Mailman's newlist command helpfully prompts on the TTY waiting for the user to press enter so that a message will be sent to the list admin containing the initial configuration password or ctrl-C to abort notifying. Unfortunately, Ansible's command tasks look enough like an interactive TTY to confuse newlist into thinking it should do the same when orchestrated. Pass an empty stdin as part of the task to work around this. We didn't encounter the issue in our test jobs, because we avoid sending notifications by passing newlist a --quiet option which skips that step, and thus the problematic prompting behavior we observed in production deployment. Change-Id: I345bda61802f93a52386b7d3057163e30f0e1b65
40 lines
1.5 KiB
YAML
40 lines
1.5 KiB
YAML
# The bulk of this role can likely be replaced with:
|
|
# https://github.com/CCI-MOC/moc-ansible-mailman
|
|
# Just a note for possible future improvement.
|
|
|
|
- name: Block for multihost lists
|
|
block:
|
|
- name: Set mailman site root fact
|
|
set_fact:
|
|
mm_site_root: "/srv/mailman/{{ mm_site_name }}"
|
|
cacheable: no
|
|
- name: Check if the site list exists
|
|
command: list_lists --bare
|
|
environment:
|
|
MAILMAN_SITE_DIR: "{{ mm_site_root }}"
|
|
register: listlists
|
|
- name: Create the site list if it doesn't exist
|
|
command:
|
|
cmd: "newlist {% if mailman_test_mode is defined and mailman_test_mode %} -q {% endif %} {{ mm_list_name }} {{ mm_list_admin }} {{ mm_list_password }}"
|
|
stdin: ''
|
|
environment:
|
|
MAILMAN_SITE_DIR: "{{ mm_site_root }}"
|
|
when:
|
|
- ( listlists.stdout_lines | intersect([ mm_list_name ]) | length | int ) == 0
|
|
when: mm_site_name != "_default"
|
|
|
|
- name: Block for normal lists
|
|
block:
|
|
- name: Check if the list exists
|
|
command: list_lists --bare
|
|
register: listlists
|
|
- name: Create the list if it doesn't exist
|
|
command:
|
|
cmd: "newlist {% if mailman_test_mode is defined and mailman_test_mode %} -q {% endif %} {{ mm_list_name }} {{ mm_list_admin }} {{ mm_list_password }}"
|
|
stdin: ''
|
|
when:
|
|
- ( listlists.stdout_lines | intersect([ mm_list_name ]) | length | int ) == 0
|
|
when: mm_site_name == "_default"
|
|
|
|
# TODO we accept a description parameter but don't do anything with it
|