# Copyright 2020-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

---
- name: Run "apt update"
  apt:
    update_cache: yes

- name: Install ntp
  apt:
    name: ntp
    state: present
  when: ntp_enabled | bool
  tags: ntp

- name: Configure ntp file
  template:
    src: etc/ntp.conf.j2
    dest: /etc/ntp.conf
  when: ntp_enabled | bool
  notify: restart ntp
  tags: ntp

- name: Start the ntp service
  service:
    name: ntp
    state: started
    enabled: yes
  when: ntp_enabled | bool
  tags: ntp

- name: Set timezone to {{ ntp_timezone }}
  timezone:
    name: "{{ ntp_timezone }}"
  when: ntp_enabled | bool
  tags: ntp

- name: Remove swapfile from /etc/fstab
  mount:
    name: "{{ item }}"
    fstype: swap
    state: absent
  with_items:
    - swap
    - none
  tags: swapoff

- name: Check if swap is enabled
  command: /sbin/swapon -s
  register: swapon
  changed_when: no
  tags: swapoff

- name: Disable swap
  command: /sbin/swapoff -a
  when: swapon.stdout
  tags: swapoff

- name: Add internal service domains to /etc/hosts
  become: yes
  lineinfile:
    path: /etc/hosts
    line: "{{ item['ip'] }}\t\t{{ item['name'] }}"
    state: present
  with_items: "{{ etc_hosts_entries }}"
  tags: etc-hosts
