--- # ------------------------------------------------------------------------------ # FILE: roles/common/tasks/main.yml # DESCRIPTION: Baseline configuration applied to all managed Ubuntu hosts. # Handles hostname, timezone, core packages, NTP, ansible user, # and optional LVM root volume expansion. # ------------------------------------------------------------------------------ - name: Set hostname hostname: name: "{{ inventory_hostname | replace('_', '-') }}" - name: Set timezone timezone: name: "{{ common_timezone }}" - name: Update apt cache apt: update_cache: yes cache_valid_time: 3600 - name: Install base utility packages apt: name: "{{ common_packages }}" state: present - name: Install chrony apt: name: chrony state: present - name: Configure chrony to use sundial template: src: chrony.conf.j2 dest: /etc/chrony/chrony.conf mode: '0644' notify: restart chrony - name: Ensure chrony is enabled and running systemd: name: chrony state: started enabled: yes - name: Ensure ansible user has passwordless sudo lineinfile: path: /etc/sudoers.d/{{ ansible_user }} line: "{{ ansible_user }} ALL=(ALL) NOPASSWD:ALL" create: yes mode: '0440' validate: 'visudo -cf %s' # ------------------------------------------------------------------------------ # LVM root volume expansion # Extends the root PV to the full disk size and grows the LV + filesystem. # This codifies what was previously done manually after provisioning. # Runs only when common_expand_root_lvm is true (default: true). # Safe to re-run — pvresize and lvextend are idempotent when already at max. # ------------------------------------------------------------------------------ - name: Expand root PV to full disk size command: pvresize {{ common_root_pv }} register: pvresize_result changed_when: "'changed' in pvresize_result.stdout or pvresize_result.rc == 0" when: common_expand_root_lvm | bool - name: Extend root LV to 100% of free VG space lvol: vg: "{{ common_root_vg }}" lv: "{{ common_root_lv }}" size: +100%FREE resizefs: yes when: - common_expand_root_lvm | bool ignore_errors: yes # ignore_errors because lvextend returns non-zero when already at max size. # resizefs: yes handles the resize2fs call inline — no separate task needed.