Skip to content
Snippets Groups Projects
main.yml 3.08 KiB
Newer Older
---

- name: Check if ferm is installed.
  shell:
    cmd: type ferm
  check_mode: false
  failed_when: ferm_installed.rc not in [0, 1, 127]
  changed_when: false
  register: ferm_installed

- name: Check version of ferm.
  command:
    cmd: ferm --version
  check_mode: false
  changed_when: false
  register: ferm_current_version
  when: ferm_installed.rc == 0

- name: Ensure differing version of ferm is not installed.
  assert:
    that: ferm_installed.rc or
          ferm_current_version.stdout_lines[0] == "ferm {{ ferm_version }}"
    fail_msg: "A different version of ferm is currently installed. Remove it
               before continuing."

- name: Gather service facts.
  service_facts:

# Unfortunately, as of Ansible v2.9.3, service_facts incorrectly reports the
# state of active "oneshot" services as stopped: such services are listed by
# systemd as "active exited" while they are active, rather than "active
# running," as for services that contain running processes. Thus, this task will
# not capture the case where ufw is active but disabled.
- name: Ensure conflicting firewall managers are not running.
  assert:
    that:
      - "'ufw' not in ansible_facts.services or
         ansible_facts.services['ufw.service'].status == 'disabled'"
      - "'firewalld' not in ansible_facts.services or
         ansible_facts.services['firewalld.service'].status == 'disabled'
         and ansible_facts.services['firewalld.service'].state != 'running'"
    fail_msg: "A conflicting firewall manager appears to be enabled. Remove it
               before continuing."
  when: not ferm_skip_conflicts_in_check_mode or not ansible_check_mode

- name: Install ferm.
  block:
  - name: Install dependencies.
    package:
      name:
        - make
        - perl
      state: present

  - name: Download ferm.
    get_url:
      url: "{{ ferm_url }}"
      dest: /usr/local/src/{{ ferm_url | basename }}
      owner: root
      mode: 0644
      checksum: "{{ ferm_checksum }}"

  - name: Create temporary directory.
    tempfile:
      state: directory
    register: tmpdir

  - name: Extract ferm.
    unarchive:
      dest: "{{ tmpdir.path }}"
      src: /usr/local/src/{{ ferm_url | basename }}
      remote_src: true
    when: tmpdir.path is defined

  - name: Install ferm.
    command:
      cmd: make PREFIX=/usr/local install
      chdir: "{{ tmpdir.path }}/ferm-{{ ferm_version }}"
    when: tmpdir.path is defined

  - name: Correct paths in unit file.
    command:
      cmd: "sed -i 's|/usr/sbin/|/usr/local/sbin/|'
            /usr/local/lib/systemd/system/ferm.service"

  - name: Remove temporary directory.
    file:
      path: "{{ tmpdir.path }}"
      state: absent
    when: tmpdir.path is defined
  when: ferm_installed.rc

- name: Install base ferm configuration.
  copy:
    dest: /etc/ferm.conf
    content: "@include ferm.d/;\n"
    owner: root
    mode: 0644
  notify: restart_ferm

- name: Create ferm.d.
  file:
    path: /etc/ferm.d
    state: directory
    owner: root
    mode: 0755

- name: Enable and start ferm service.
  service:
    name: ferm
    enabled: true
    state: started
    daemon_reload: true