mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2025-10-25 05:23:58 -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