Allow setting resource.RLIMIT_NOFILE in modules (#51989)

This commit is contained in:
Matt Clay 2019-02-15 17:52:35 -08:00 committed by GitHub
parent 1db6d5598a
commit f5c92f6bc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 136 additions and 1 deletions

View file

@ -0,0 +1,56 @@
- name: get the ansible-test imposed file descriptor limit
check_rlimit_and_maxfd:
register: rlimit_limited_return
- name: get existing file descriptor limit
check_rlimit_and_maxfd:
register: rlimit_original_return
vars:
ansible_python_module_rlimit_nofile: 0 # ignore limit set by ansible-test
- name: attempt to set a value lower than existing soft limit
check_rlimit_and_maxfd:
vars:
ansible_python_module_rlimit_nofile: '{{ rlimit_original_return.rlimit_nofile[0] - 1 }}'
register: rlimit_below_soft_return
- name: attempt to set a value higher than existing soft limit
check_rlimit_and_maxfd:
vars:
ansible_python_module_rlimit_nofile: '{{ rlimit_original_return.rlimit_nofile[0] + 1 }}'
register: rlimit_above_soft_return
- name: attempt to set a value lower than existing hard limit
check_rlimit_and_maxfd:
vars:
ansible_python_module_rlimit_nofile: '{{ rlimit_original_return.rlimit_nofile[1] - 1 }}'
register: rlimit_below_hard_return
- name: attempt to set a value higher than existing hard limit
check_rlimit_and_maxfd:
vars:
ansible_python_module_rlimit_nofile: '{{ rlimit_original_return.rlimit_nofile[1] + 1 }}'
register: rlimit_above_hard_return
- assert:
that:
# make sure ansible-test was able to set the limit unless it exceeds the hard limit or the value is lower on macOS
- rlimit_limited_return.rlimit_nofile[0] == 1024 or rlimit_original_return.rlimit_nofile[1] < 1024 or (rlimit_limited_return.rlimit_nofile[0] < 1024 and ansible_distribution == 'MacOSX')
# make sure that maxfd matches the soft limit on Python 2.x (-1 on Python 3.x)
- rlimit_limited_return.maxfd == rlimit_limited_return.rlimit_nofile[0] or rlimit_limited_return.maxfd == -1
# we should always be able to set the limit lower than the existing soft limit
- rlimit_below_soft_return.rlimit_nofile[0] == rlimit_original_return.rlimit_nofile[0] - 1
# the hard limit should not have changed
- rlimit_below_soft_return.rlimit_nofile[1] == rlimit_original_return.rlimit_nofile[1]
# lowering the limit should also lower the max file descriptors reported by Python 2.x (-1 on Python 3.x)
- rlimit_below_soft_return.maxfd == rlimit_original_return.rlimit_nofile[0] - 1 or rlimit_below_soft_return.maxfd == -1
# we should be able to set the limit higher than the existing soft limit if it does not exceed the hard limit (except on macOS)
- rlimit_above_soft_return.rlimit_nofile[0] == rlimit_original_return.rlimit_nofile[0] + 1 or rlimit_original_return.rlimit_nofile[0] == rlimit_original_return.rlimit_nofile[1] or ansible_distribution == 'MacOSX'
# we should be able to set the limit lower than the existing hard limit (except on macOS)
- rlimit_below_hard_return.rlimit_nofile[0] == rlimit_original_return.rlimit_nofile[1] - 1 or ansible_distribution == 'MacOSX'
# setting the limit higher than the existing hard limit should use the hard limit (except on macOS)
- rlimit_above_hard_return.rlimit_nofile[0] == rlimit_original_return.rlimit_nofile[1] or ansible_distribution == 'MacOSX'