mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-25 11:51:26 -07:00
Allow setting resource.RLIMIT_NOFILE in modules (#51989)
This commit is contained in:
parent
1db6d5598a
commit
f5c92f6bc1
7 changed files with 136 additions and 1 deletions
|
@ -94,6 +94,7 @@ _ANSIBALLZ_WRAPPER = True # For test-module script to tell this is a ANSIBALLZ_W
|
|||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
def _ansiballz_main():
|
||||
%(rlimit)s
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
|
@ -350,6 +351,22 @@ ANSIBALLZ_COVERAGE_TEMPLATE = '''
|
|||
cov.start()
|
||||
'''
|
||||
|
||||
ANSIBALLZ_RLIMIT_TEMPLATE = '''
|
||||
import resource
|
||||
|
||||
existing_soft, existing_hard = resource.getrlimit(resource.RLIMIT_NOFILE)
|
||||
|
||||
# adjust soft limit subject to existing hard limit
|
||||
requested_soft = min(existing_hard, %(rlimit_nofile)d)
|
||||
|
||||
if requested_soft != existing_soft:
|
||||
try:
|
||||
resource.setrlimit(resource.RLIMIT_NOFILE, (requested_soft, existing_hard))
|
||||
except ValueError:
|
||||
# some platforms (eg macOS) lie about their hard limit
|
||||
pass
|
||||
'''
|
||||
|
||||
|
||||
def _strip_comments(source):
|
||||
# Strip comments and blank lines from the wrapper
|
||||
|
@ -764,6 +781,19 @@ def _find_module_utils(module_name, b_module_data, module_path, module_args, tas
|
|||
interpreter_parts = interpreter.split(u' ')
|
||||
interpreter = u"'{0}'".format(u"', '".join(interpreter_parts))
|
||||
|
||||
# FUTURE: the module cache entry should be invalidated if we got this value from a host-dependent source
|
||||
rlimit_nofile = C.config.get_config_value('PYTHON_MODULE_RLIMIT_NOFILE', variables=task_vars)
|
||||
|
||||
if not isinstance(rlimit_nofile, int):
|
||||
rlimit_nofile = int(templar.template(rlimit_nofile))
|
||||
|
||||
if rlimit_nofile:
|
||||
rlimit = ANSIBALLZ_RLIMIT_TEMPLATE % dict(
|
||||
rlimit_nofile=rlimit_nofile,
|
||||
)
|
||||
else:
|
||||
rlimit = ''
|
||||
|
||||
coverage_config = os.environ.get('_ANSIBLE_COVERAGE_CONFIG')
|
||||
|
||||
if coverage_config:
|
||||
|
@ -791,6 +821,7 @@ def _find_module_utils(module_name, b_module_data, module_path, module_args, tas
|
|||
minute=now.minute,
|
||||
second=now.second,
|
||||
coverage=coverage,
|
||||
rlimit=rlimit,
|
||||
)))
|
||||
b_module_data = output.getvalue()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue