--- - name: Configure timezone and NTP hosts: all become: yes vars: timezone_region: "Asia/Kolkata" ntp_server: "0.in.pool.ntp.org" tasks: # ---------------------------------------------------------- # TIMEZONE (LXC + Ubuntu + Rocky safe) # ---------------------------------------------------------- - name: Copy timezone file ansible.builtin.copy: src: "/usr/share/zoneinfo/{{ timezone_region }}" dest: /etc/localtime remote_src: yes register: tz_copy - name: Write /etc/timezone ansible.builtin.copy: dest: /etc/timezone content: "{{ timezone_region }}\n" register: tz_write - name: Debug timezone set ansible.builtin.debug: msg: "Timezone set to {{ timezone_region }} successfully." when: tz_copy.changed or tz_write.changed # ---------------------------------------------------------- # UBUNTU NTP (systemd-timesyncd) # ---------------------------------------------------------- - name: Configure NTP for Ubuntu (systemd-timesyncd) ansible.builtin.copy: dest: /etc/systemd/timesyncd.conf content: | [Time] NTP={{ ntp_server }} FallbackNTP=1.in.pool.ntp.org 2.in.pool.ntp.org register: ubuntu_ntp when: ansible_facts['os_family'] == "Debian" - name: Restart timesyncd (Ubuntu) ansible.builtin.systemd: name: systemd-timesyncd state: restarted enabled: yes when: ansible_facts['os_family'] == "Debian" - name: Debug Ubuntu NTP ansible.builtin.debug: msg: "Ubuntu NTP configured with {{ ntp_server }}" when: - ansible_facts['os_family'] == "Debian" - ubuntu_ntp.changed # ---------------------------------------------------------- # ROCKY LINUX NTP (chrony) # ---------------------------------------------------------- - name: Install chrony ansible.builtin.package: name: chrony state: present when: ansible_facts['os_family'] == "RedHat" - name: Backup chrony.conf ansible.builtin.copy: src: /etc/chrony.conf dest: /etc/chrony.conf.bak remote_src: yes when: ansible_facts['os_family'] == "RedHat" - name: Remove existing server lines ansible.builtin.replace: path: /etc/chrony.conf regexp: '^server .*' replace: '' register: rocky_cleanup when: ansible_facts['os_family'] == "RedHat" - name: Add new NTP server ansible.builtin.lineinfile: path: /etc/chrony.conf line: "server {{ ntp_server }} iburst" register: rocky_add when: ansible_facts['os_family'] == "RedHat" - name: Restart chronyd ansible.builtin.systemd: name: chronyd state: restarted enabled: yes when: ansible_facts['os_family'] == "RedHat" - name: Debug Rocky NTP ansible.builtin.debug: msg: "Rocky Linux NTP configured with {{ ntp_server }}" when: - ansible_facts['os_family'] == "RedHat" - rocky_add.changed or rocky_cleanup.changed # ---------------------------------------------------------- # PRINT TIME & NTP SOURCE # ---------------------------------------------------------- - name: Read timedatectl status ansible.builtin.command: timedatectl status register: timedate_output - name: Print server time + NTP source ansible.builtin.debug: msg: | === {{ inventory_hostname }} === Current Time: {{ timedate_output.stdout | regex_search('Local time:\\s*(.*)', '\\1') }} Timezone: {{ timedate_output.stdout | regex_search('Time zone:\\s*(.*)', '\\1') }} NTP Source: {{ timedate_output.stdout | regex_search('System clock synchronized:\\s*(.*)', '\\1') }} NTP Server: {{ timedate_output.stdout | regex_search('NTP service:\\s*(.*)', '\\1') }} # ---------------------------------------------------------- # FINAL SUMMARY # ---------------------------------------------------------- - name: Final summary ansible.builtin.debug: msg: "Timezone + NTP successfully applied on {{ inventory_hostname }}"