ansible.posix/tests/integration/targets/mount/tasks/main.yml
2022-05-26 12:12:34 +09:00

408 lines
11 KiB
YAML

- 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: 20
#
# - 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')