This is an old revision of the document!
# cat pretask.yml --- - name: Set Python interpreter based on AIX version hosts: aix_hosts gather_facts: false # we'll do manual version check become: yes pre_tasks: - name: Get AIX version ansible.builtin.shell: oslevel register: aix_version changed_when: false - name: Set Python interpreter for AIX 7.2 ansible.builtin.set_fact: ansible_python_interpreter: "/opt/freeware/bin/python3" when: "'7.2' in aix_version.stdout" - name: Set Python interpreter for AIX 7.3 ansible.builtin.set_fact: ansible_python_interpreter: "/opt/freeware/bin/python3_73" when: "'7.3' in aix_version.stdout" tasks: - name: Debug current interpreter ansible.builtin.debug: msg: "Using interpreter: {{ ansible_python_interpreter }}" # You can continue here with other tasks
# cat inventory.ini [aix_hosts] aixserver1 ansible_user=root ansible_connection=ssh ansible_python_interpreter=/opt/freeware/bin/python3
# cat lv_config.json [ { "vgname": "datavg", "lvname": "lv_data", "mount_point": "/data", "size": "2G" }, { "vgname": "appvg", "lvname": "lv_app", "mount_point": "/app", "size": "5G" } ]
Create filesystems
# cat create_aix_lvs.yml --- - name: Create Logical Volumes and Filesystems on AIX hosts: aix_hosts become: yes vars_files: - lv_config.json tasks: - name: Create logical volume ansible.builtin.shell: | mklv -t jfs2 -y {{ item.lvname }} {{ item.vgname }} {{ item.size }} args: creates: "/dev/{{ item.lvname }}" loop: "{{ lv_config }}" - name: Create file system ansible.builtin.shell: | crfs -v jfs2 -d {{ item.lvname }} -m {{ item.mount_point }} -A yes args: creates: "{{ item.mount_point }}" loop: "{{ lv_config }}" - name: Create mount point directory ansible.builtin.file: path: "{{ item.mount_point }}" state: directory mode: '0755' loop: "{{ lv_config }}" - name: Mount filesystem ansible.builtin.shell: | mount {{ item.mount_point }} loop: "{{ lv_config }}" - name: Ensure filesystem is in /etc/filesystems (automount) ansible.builtin.shell: | chfs -A yes {{ item.mount_point }} loop: "{{ lv_config }}"
Extend filesystems if smaller than desired
# cat extend_aix_lvs.yml --- - name: Extend filesystems on AIX if current size is smaller hosts: aix_hosts become: yes vars_files: - lv_config.json tasks: - name: Get current size of filesystem ansible.builtin.shell: | lsfs {{ item.mount_point }} | awk 'NR>1 {print $3}' register: current_fs_size changed_when: false loop: "{{ lv_config }}" loop_control: label: "{{ item.mount_point }}" delegate_to: localhost - name: Set fact with comparison results ansible.builtin.set_fact: fs_resize_list: >- {{ fs_resize_list | default([]) + [{ 'mount_point': item.1.mount_point, 'lvname': item.1.lvname, 'vgname': item.1.vgname, 'current_size': (item.0.stdout | trim), 'desired_size': item.1.size }] if (item.0.stdout | trim is version(item.1.size, '<')) else fs_resize_list | default([]) }} loop: "{{ zip(current_fs_size.results, lv_config) }}" loop_control: label: "{{ item.1.mount_point }}" - name: Extend filesystem only if current size is less than desired ansible.builtin.shell: | chfs -a size={{ item.desired_size }} {{ item.mount_point }} loop: "{{ fs_resize_list }}" when: fs_resize_list | length > 0
Note
AIX lsfs returns sizes in 512-byte blocks. So 4194304 blocks = 2G. You may need a helper function to normalize that if you want more accuracy.
You could replace size parsing with something like: lsfs /data | awk 'NR>1 {printf "%.0fG\n", $3*512/1024/1024/1024}'