From 4d35f6421c980a047f0bd5a1e9afaec0658a54e5 Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Tue, 31 May 2022 12:05:58 +0900 Subject: [PATCH] 2022-05-31-16 --- .../integration/targets/mount/tasks/main.yml | 813 +++++++++--------- 1 file changed, 403 insertions(+), 410 deletions(-) diff --git a/tests/integration/targets/mount/tasks/main.yml b/tests/integration/targets/mount/tasks/main.yml index d06bf7a..72b3ac6 100644 --- a/tests/integration/targets/mount/tasks/main.yml +++ b/tests/integration/targets/mount/tasks/main.yml @@ -1,412 +1,405 @@ -#- name: Create the mount point -# file: -# state: directory -# path: '{{ output_dir }}/mount_dest' -# -#- name: Create a directory to bind mount -# file: -# state: directory -# path: '{{ output_dir }}/mount_source' -# -#- name: Put something in the directory so we see that it worked -# copy: -# content: 'Testing -# -# ' -# dest: '{{ output_dir }}/mount_source/test_file' -# register: orig_info -# -#- name: Bind mount a filesystem (Linux) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: None -# opts: bind -# when: ansible_system == 'Linux' -# register: bind_result_linux -# -#- name: Bind mount a filesystem (FreeBSD) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: nullfs -# when: ansible_system == 'FreeBSD' -# register: bind_result_freebsd -# -#- name: get checksum for bind mounted file -# stat: -# path: '{{ output_dir }}/mount_dest/test_file' -# when: ansible_system in ('FreeBSD', 'Linux') -# register: dest_stat -# -#- name: assert the bind mount was successful -# assert: -# that: -# - (ansible_system == 'Linux' and bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and bind_result_freebsd['changed']) -# - dest_stat['stat']['exists'] -# - orig_info['checksum'] == dest_stat['stat']['checksum'] -# when: ansible_system in ('FreeBSD', 'Linux') -# -#- name: Bind mount a filesystem (Linux) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: None -# opts: bind -# when: ansible_system == 'Linux' -# register: bind_result_linux -# -#- name: Bind mount a filesystem (FreeBSD) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: nullfs -# when: ansible_system == 'FreeBSD' -# register: bind_result_freebsd -# -#- name: Make sure we didn't mount a second time -# assert: -# that: -# - (ansible_system == 'Linux' and not bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and not bind_result_freebsd['changed']) -# when: ansible_system in ('FreeBSD', 'Linux') -# -#- name: Remount filesystem with different opts (Linux) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: None -# opts: bind,ro -# when: ansible_system == 'Linux' -# register: bind_result_linux -# -#- name: Remount filesystem with different opts (FreeBSD) -# mount: -# src: '{{ output_dir }}/mount_source' -# name: '{{ output_dir }}/mount_dest' -# state: mounted -# fstype: nullfs -# opts: ro -# when: ansible_system == 'FreeBSD' -# register: bind_result_freebsd -# -#- name: Get mount options -# shell: mount | grep mount_dest | grep -E -w '(ro|read-only)' | wc -l -# register: remount_options -# -#- name: Make sure the filesystem now has the new opts -# assert: -# that: -# - (ansible_system == 'Linux' and bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and bind_result_freebsd['changed']) -# - '''1'' in remount_options.stdout' -# - 1 == remount_options.stdout_lines | length -# when: ansible_system in ('FreeBSD', 'Linux') -# -#- name: Unmount the bind mount -# mount: -# name: '{{ output_dir }}/mount_dest' -# state: absent -# when: ansible_system in ('Linux', 'FreeBSD') -# register: unmount_result -# -#- name: Make sure the file no longer exists in dest -# stat: -# path: '{{ output_dir }}/mount_dest/test_file' -# when: ansible_system in ('FreeBSD', 'Linux') -# register: dest_stat -# -#- name: Check that we unmounted -# assert: -# that: -# - unmount_result['changed'] -# - not dest_stat['stat']['exists'] -# when: ansible_system in ('FreeBSD', 'Linux') -# -#- name: Block to test remounted option -# block: -# - name: Create fstab record for the first swap file -# mount: -# name: none -# src: /tmp/swap1 -# opts: sw -# fstype: swap -# state: present -# register: swap1_created -# -# - name: Try to create fstab record for the first swap file again -# mount: -# name: none -# src: /tmp/swap1 -# opts: sw -# fstype: swap -# state: present -# register: swap1_created_again -# -# - name: Check that we created the swap1 record -# assert: -# that: -# - swap1_created['changed'] -# - not swap1_created_again['changed'] -# -# - name: Create fstab record for the second swap file -# mount: -# name: none -# src: /tmp/swap2 -# opts: sw -# fstype: swap -# state: present -# register: swap2_created -# -# - name: Try to create fstab record for the second swap file again -# mount: -# name: none -# src: /tmp/swap1 -# opts: sw -# fstype: swap -# state: present -# register: swap2_created_again -# -# - name: Check that we created the swap2 record -# assert: -# that: -# - swap2_created['changed'] -# - not swap2_created_again['changed'] -# -# - name: Remove the fstab record for the first swap file -# mount: -# name: none -# src: /tmp/swap1 -# state: absent -# register: swap1_removed -# -# - name: Try to remove the fstab record for the first swap file again -# mount: -# name: none -# src: /tmp/swap1 -# state: absent -# register: swap1_removed_again -# -# - name: Check that we removed the swap1 record -# assert: -# that: -# - swap1_removed['changed'] -# - not swap1_removed_again['changed'] -# -# - name: Remove the fstab record for the second swap file -# mount: -# name: none -# src: /tmp/swap2 -# state: absent -# register: swap2_removed -# -# - name: Try to remove the fstab record for the second swap file again -# mount: -# name: none -# src: /tmp/swap2 -# state: absent -# register: swap2_removed_again -# -# - name: Check that we removed the swap2 record -# assert: -# that: -# - swap2_removed['changed'] -# - not swap2_removed_again['changed'] -# -# - name: Create fstab record with missing last two fields -# copy: -# dest: /etc/fstab -# content: '//nas/photo /home/jik/pictures cifs defaults,credentials=/etc/security/nas.creds,uid=jik,gid=users,forceuid,forcegid,noserverino,_netdev -# -# ' -# -# - name: Try to change the fstab record with the missing last two fields -# mount: -# src: //nas/photo -# path: /home/jik/pictures -# fstype: cifs -# opts: defaults,credentials=/etc/security/nas.creds,uid=jik,gid=users,forceuid,forcegid,noserverino,_netdev,x-systemd.mount-timeout=0 -# state: present -# register: optional_fields_update -# -# - name: Get the content of the fstab file -# shell: cat /etc/fstab -# register: optional_fields_content -# -# - name: Check if the line containing the missing last two fields was changed -# assert: -# that: -# - optional_fields_update['changed'] -# - ''' 0 0'' in optional_fields_content.stdout' -# - 1 == optional_fields_content.stdout_lines | length -# -# - name: Create empty file -# community.general.filesize: -# path: /tmp/myfs.img -# size: 20M -# -# - name: Format FS -# community.general.filesystem: -# fstype: ext3 -# dev: /tmp/myfs.img -# -# - name: Mount the FS for the first time -# mount: -# path: /tmp/myfs -# src: /tmp/myfs.img -# fstype: ext2 -# state: mounted -# -# - name: Get the last write time -# shell: 'dumpe2fs /tmp/myfs.img 2>/dev/null | grep -i last write time: |cut -d: -f2-' -# register: last_write_time -# -# - name: Wait 2 second -# pause: -# seconds: 2 -# -# - name: Test if the FS is remounted -# mount: -# path: /tmp/myfs -# state: remounted -# -# - name: Get again the last write time -# shell: 'dumpe2fs /tmp/myfs.img 2>/dev/null | grep -i last write time: |cut -d: -f2-' -# register: last_write_time2 -# -# - name: Fail if they are the same -# fail: -# msg: Filesytem was not remounted, testing of the module failed! -# when: last_write is defined and last_write_time2 is defined and last_write_time.stdout == last_write_time2.stdout -# -# - name: Remount filesystem with different opts using remounted option (Linux only) -# mount: -# path: /tmp/myfs -# state: remounted -# opts: rw,noexec -# -# - name: Get remounted options (Linux only) -# shell: mount | grep myfs | grep -E -w 'noexec' | wc -l -# register: remounted_options -# -# - name: Make sure the filesystem now has the new opts after using remounted (Linux only) -# assert: -# that: -# - "'1' in remounted_options.stdout" -# - "1 == remounted_options.stdout_lines | length" -# -# - name: Mount the FS again to test backup -# mount: -# path: /tmp/myfs -# src: /tmp/myfs.img -# fstype: ext2 -# state: mounted -# backup: yes -# register: mount_backup_out -# -# - name: ensure backup_file in returned output -# assert: -# that: -# - "'backup_file' in mount_backup_out" -# -# always: -# - name: Umount the test FS -# mount: -# path: /tmp/myfs -# src: /tmp/myfs.img -# opts: loop -# state: absent -# -# - name: Remove the test FS -# file: -# path: '{{ item }}' -# state: absent -# loop: -# - /tmp/myfs.img -# - /tmp/myfs -# when: ansible_system in ('Linux') -# -#- name: Block to test boot option for Linux -# block: -# - name: Create empty file -# community.general.filesize: -# path: /tmp/myfs.img -# size: 20M -# -# - name: Format FS -# community.general.filesystem: -# fstype: ext3 -# dev: /tmp/myfs.img -# -# - name: Mount the FS with noauto option -# mount: -# path: /tmp/myfs -# src: /tmp/myfs.img -# fstype: ext3 -# state: mounted -# boot: no -# opts: rw,user,async -# register: mount_info -# -# - name: assert the mount without noauto was successful -# assert: -# that: -# - mount_info['opts'] == 'rw,user,async,noauto' -# -# - name: Unmount FS -# mount: -# path: /tmp/myfs -# state: absent -# -# - name: Remove the test FS -# file: -# path: '{{ item }}' -# state: absent -# loop: -# - /tmp/myfs.img -# - /tmp/myfs -# when: ansible_system in ('Linux') -# -#- name: Block to test missing newline at the EOF of fstab -# block: -# - name: Create empty file -# community.general.filesize: -# path: /tmp/myfs1.img -# size: 20M -# - name: Format FS -# community.general.filesystem: -# fstype: ext3 -# dev: /tmp/myfs1.img -# - name: Create custom fstab file without newline -# copy: -# content: '#TEST COMMENT WITHOUT NEWLINE' -# dest: /tmp/test_fstab -# - name: Mount the FS using the custom fstab -# mount: -# path: /tmp/myfs1 -# src: /tmp/myfs1.img -# fstype: ext3 -# state: mounted -# opts: defaults -# fstab: /tmp/test_fstab -# - name: Unmount the mount point in the custom fstab -# mount: -# path: /tmp/myfs1 -# state: absent -# fstab: /tmp/test_fstab -# - name: Remove the test FS and the custom fstab -# file: -# path: '{{ item }}' -# state: absent -# loop: -# - /tmp/myfs1.img -# - /tmp/myfs1 -# - /tmp/test_fstab -# when: ansible_system in ('Linux') +- name: Create the mount point + file: + state: directory + path: '{{ output_dir }}/mount_dest' -- name: Create empty file - command: dd if=/dev/zero of=/tmp/myfs.img bs=1048576 count=20 +- name: Create a directory to bind mount + file: + state: directory + path: '{{ output_dir }}/mount_source' + +- name: Put something in the directory so we see that it worked + copy: + content: 'Testing + + ' + dest: '{{ output_dir }}/mount_source/test_file' + register: orig_info + +- name: Bind mount a filesystem (Linux) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: None + opts: bind + when: ansible_system == 'Linux' + register: bind_result_linux + +- name: Bind mount a filesystem (FreeBSD) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: nullfs + when: ansible_system == 'FreeBSD' + register: bind_result_freebsd + +- name: get checksum for bind mounted file + stat: + path: '{{ output_dir }}/mount_dest/test_file' + when: ansible_system in ('FreeBSD', 'Linux') + register: dest_stat + +- name: assert the bind mount was successful + assert: + that: + - (ansible_system == 'Linux' and bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and bind_result_freebsd['changed']) + - dest_stat['stat']['exists'] + - orig_info['checksum'] == dest_stat['stat']['checksum'] + when: ansible_system in ('FreeBSD', 'Linux') + +- name: Bind mount a filesystem (Linux) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: None + opts: bind + when: ansible_system == 'Linux' + register: bind_result_linux + +- name: Bind mount a filesystem (FreeBSD) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: nullfs + when: ansible_system == 'FreeBSD' + register: bind_result_freebsd + +- name: Make sure we didn't mount a second time + assert: + that: + - (ansible_system == 'Linux' and not bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and not bind_result_freebsd['changed']) + when: ansible_system in ('FreeBSD', 'Linux') + +- name: Remount filesystem with different opts (Linux) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: None + opts: bind,ro + when: ansible_system == 'Linux' + register: bind_result_linux + +- name: Remount filesystem with different opts (FreeBSD) + mount: + src: '{{ output_dir }}/mount_source' + name: '{{ output_dir }}/mount_dest' + state: mounted + fstype: nullfs + opts: ro + when: ansible_system == 'FreeBSD' + register: bind_result_freebsd + +- name: Get mount options + shell: mount | grep mount_dest | grep -E -w '(ro|read-only)' | wc -l + register: remount_options + +- name: Make sure the filesystem now has the new opts + assert: + that: + - (ansible_system == 'Linux' and bind_result_linux['changed']) or (ansible_system == 'FreeBSD' and bind_result_freebsd['changed']) + - '''1'' in remount_options.stdout' + - 1 == remount_options.stdout_lines | length + when: ansible_system in ('FreeBSD', 'Linux') + +- name: Unmount the bind mount + mount: + name: '{{ output_dir }}/mount_dest' + state: absent + when: ansible_system in ('Linux', 'FreeBSD') + register: unmount_result + +- name: Make sure the file no longer exists in dest + stat: + path: '{{ output_dir }}/mount_dest/test_file' + when: ansible_system in ('FreeBSD', 'Linux') + register: dest_stat + +- name: Check that we unmounted + assert: + that: + - unmount_result['changed'] + - not dest_stat['stat']['exists'] + when: ansible_system in ('FreeBSD', 'Linux') + +- name: Block to test remounted option + block: + - name: Create fstab record for the first swap file + mount: + name: none + src: /tmp/swap1 + opts: sw + fstype: swap + state: present + register: swap1_created + + - name: Try to create fstab record for the first swap file again + mount: + name: none + src: /tmp/swap1 + opts: sw + fstype: swap + state: present + register: swap1_created_again + + - name: Check that we created the swap1 record + assert: + that: + - swap1_created['changed'] + - not swap1_created_again['changed'] + + - name: Create fstab record for the second swap file + mount: + name: none + src: /tmp/swap2 + opts: sw + fstype: swap + state: present + register: swap2_created + + - name: Try to create fstab record for the second swap file again + mount: + name: none + src: /tmp/swap1 + opts: sw + fstype: swap + state: present + register: swap2_created_again + + - name: Check that we created the swap2 record + assert: + that: + - swap2_created['changed'] + - not swap2_created_again['changed'] + + - name: Remove the fstab record for the first swap file + mount: + name: none + src: /tmp/swap1 + state: absent + register: swap1_removed + + - name: Try to remove the fstab record for the first swap file again + mount: + name: none + src: /tmp/swap1 + state: absent + register: swap1_removed_again + + - name: Check that we removed the swap1 record + assert: + that: + - swap1_removed['changed'] + - not swap1_removed_again['changed'] + + - name: Remove the fstab record for the second swap file + mount: + name: none + src: /tmp/swap2 + state: absent + register: swap2_removed + + - name: Try to remove the fstab record for the second swap file again + mount: + name: none + src: /tmp/swap2 + state: absent + register: swap2_removed_again + + - name: Check that we removed the swap2 record + assert: + that: + - swap2_removed['changed'] + - not swap2_removed_again['changed'] + + - name: Create fstab record with missing last two fields + copy: + dest: /etc/fstab + content: '//nas/photo /home/jik/pictures cifs defaults,credentials=/etc/security/nas.creds,uid=jik,gid=users,forceuid,forcegid,noserverino,netdev + + ' + + - name: Try to change the fstab record with the missing last two fields + mount: + src: //nas/photo + path: /home/jik/pictures + fstype: cifs + opts: defaults,credentials=/etc/security/nas.creds,uid=jik,gid=users,forceuid,forcegid,noserverino,_netdev,x-systemd.mount-timeout=0 + state: present + register: optional_fields_update + + - name: Get the content of the fstab file + shell: cat /etc/fstab + register: optional_fields_content + + - name: Check if the line containing the missing last two fields was changed + assert: + that: + - optional_fields_update['changed'] + - ''' 0 0'' in optional_fields_content.stdout' + - 1 == optional_fields_content.stdout_lines | length + + - name: Create empty file + command: dd if=/dev/zero of=/tmp/myfs.img bs=1048576 count=20 + when: ansible_system in ('Linux') + + - name: Format FS + community.general.filesystem: + fstype: ext3 + dev: /tmp/myfs.img + + - name: Mount the FS for the first time + mount: + path: /tmp/myfs + src: /tmp/myfs.img + fstype: ext2 + state: mounted + + - name: Get the last write time + shell: 'dumpe2fs /tmp/myfs.img 2>/dev/null | grep -i last write time: |cut -d: -f2-' + register: last_write_time + + - name: Wait 2 second + pause: + seconds: 2 + + - name: Test if the FS is remounted + mount: + path: /tmp/myfs + state: remounted + + - name: Get again the last write time + shell: 'dumpe2fs /tmp/myfs.img 2>/dev/null | grep -i last write time: |cut -d: -f2-' + register: last_write_time2 + + - name: Fail if they are the same + fail: + msg: Filesytem was not remounted, testing of the module failed! + when: last_write is defined and last_write_time2 is defined and last_write_time.stdout == last_write_time2.stdout + + - name: Remount filesystem with different opts using remounted option (Linux only) + mount: + path: /tmp/myfs + state: remounted + opts: rw,noexec + + - name: Get remounted options (Linux only) + shell: mount | grep myfs | grep -E -w 'noexec' | wc -l + register: remounted_options + + - name: Make sure the filesystem now has the new opts after using remounted (Linux only) + assert: + that: + - "'1' in remounted_options.stdout" + - "1 == remounted_options.stdout_lines | length" + + - name: Mount the FS again to test backup + mount: + path: /tmp/myfs + src: /tmp/myfs.img + fstype: ext2 + state: mounted + backup: yes + register: mount_backup_out + + - name: ensure backup_file in returned output + assert: + that: + - "'backup_file' in mount_backup_out" + + always: + - name: Umount the test FS + mount: + path: /tmp/myfs + src: /tmp/myfs.img + opts: loop + state: absent + + - name: Remove the test FS + file: + path: '{{ item }}' + state: absent + loop: + - /tmp/myfs.img + - /tmp/myfs + when: ansible_system in ('Linux') + +- name: Block to test boot option for Linux + block: + - name: Create empty file + command: dd if=/dev/zero of=/tmp/myfs.img bs=1048576 count=20 + when: ansible_system in ('Linux') + + - name: Format FS + community.general.filesystem: + fstype: ext3 + dev: /tmp/myfs.img + + - name: Mount the FS with noauto option + mount: + path: /tmp/myfs + src: /tmp/myfs.img + fstype: ext3 + state: mounted + boot: no + opts: rw,user,async + register: mount_info + + - name: assert the mount without noauto was successful + assert: + that: + - mount_info['opts'] == 'rw,user,async,noauto' + + - name: Unmount FS + mount: + path: /tmp/myfs + state: absent + + - name: Remove the test FS + file: + path: '{{ item }}' + state: absent + loop: + - /tmp/myfs.img + - /tmp/myfs + when: ansible_system in ('Linux') + +- name: Block to test missing newline at the EOF of fstab + block: + - name: Create empty file + command: dd if=/dev/zero of=/tmp/myfs1.img bs=1048576 count=20 + when: ansible_system in ('Linux') + - name: Format FS + community.general.filesystem: + fstype: ext3 + dev: /tmp/myfs1.img + - name: Create custom fstab file without newline + copy: + content: '#TEST COMMENT WITHOUT NEWLINE' + dest: /tmp/test_fstab + - name: Mount the FS using the custom fstab + mount: + path: /tmp/myfs1 + src: /tmp/myfs1.img + fstype: ext3 + state: mounted + opts: defaults + fstab: /tmp/test_fstab + - name: Unmount the mount point in the custom fstab + mount: + path: /tmp/myfs1 + state: absent + fstab: /tmp/test_fstab + - name: Remove the test FS and the custom fstab + file: + path: '{{ item }}' + state: absent + loop: + - /tmp/myfs1.img + - /tmp/myfs1 + - /tmp/test_fstab when: ansible_system in ('Linux')