From 20b74cadd3106a7ca77da50e74b562f60d489e9f Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Tue, 31 May 2022 09:17:39 +0900 Subject: [PATCH] 2022-05-31-00 --- .azure-pipelines/azure-pipelines.yml | 2 - .../integration/targets/mount/tasks/main.yml | 818 +++++++++--------- 2 files changed, 412 insertions(+), 408 deletions(-) diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml index 5d9aafc..1be23e7 100644 --- a/.azure-pipelines/azure-pipelines.yml +++ b/.azure-pipelines/azure-pipelines.yml @@ -277,8 +277,6 @@ stages: dependsOn: - Remote_2_9 - Docker_2_9 - - Remote_2_10 - - Docker_2_10 - Remote_2_11 - Docker_2_11 - Remote_2_12 diff --git a/tests/integration/targets/mount/tasks/main.yml b/tests/integration/targets/mount/tasks/main.yml index be1850f..7028d7e 100644 --- a/tests/integration/targets/mount/tasks/main.yml +++ b/tests/integration/targets/mount/tasks/main.yml @@ -1,408 +1,414 @@ -- name: Create the mount point - file: - state: directory - path: '{{ output_dir }}/mount_dest' +#- 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 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 +- name: Create empty file + community.general.filesize: + path: /tmp/myfs.img + size: 20M when: ansible_system in ('Linux')