l4d2 dynamic overlays
This commit is contained in:
		
							parent
							
								
									a59d33ec03
								
							
						
					
					
						commit
						9572ac822f
					
				
					 4 changed files with 50 additions and 31 deletions
				
			
		|  | @ -9,6 +9,9 @@ directories = { | ||||||
|     '/opt/l4d2': { |     '/opt/l4d2': { | ||||||
|         'owner': 'steam', 'group': 'steam', |         'owner': 'steam', 'group': 'steam', | ||||||
|     }, |     }, | ||||||
|  |     '/opt/l4d2/steam': { | ||||||
|  |         'owner': 'steam', 'group': 'steam', | ||||||
|  |     }, | ||||||
|     '/opt/l4d2/configs': { |     '/opt/l4d2/configs': { | ||||||
|         'owner': 'steam', 'group': 'steam', |         'owner': 'steam', 'group': 'steam', | ||||||
|     }, |     }, | ||||||
|  | @ -31,7 +34,7 @@ files = { | ||||||
|         'mode': '755', |         'mode': '755', | ||||||
|         'triggers': { |         'triggers': { | ||||||
|             f'svc_systemd:left4dead2-{server_name}.service:restart' |             f'svc_systemd:left4dead2-{server_name}.service:restart' | ||||||
|                 for server_name in node.metadata.get('left4dead2').keys() |                 for server_name in node.metadata.get('left4dead2/servers').keys() | ||||||
|         }, |         }, | ||||||
|     }, |     }, | ||||||
|     '/opt/l4d2/scripts/helpers': { |     '/opt/l4d2/scripts/helpers': { | ||||||
|  | @ -43,7 +46,7 @@ files = { | ||||||
|     }, |     }, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| for overlay in ['vanilla', 'tickrate', 'competitive_rework', 'l4d2center_maps']: | for overlay in node.metadata.get('left4dead2/overlays'): | ||||||
|     files[f'/opt/l4d2/scripts/overlays/{overlay}'] = { |     files[f'/opt/l4d2/scripts/overlays/{overlay}'] = { | ||||||
|         'source': f'scripts/overlays/{overlay}', |         'source': f'scripts/overlays/{overlay}', | ||||||
|         'mode': '755', |         'mode': '755', | ||||||
|  | @ -63,7 +66,7 @@ svc_systemd = { | ||||||
|     }, |     }, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| for server_name, config in node.metadata.get('left4dead2').items(): | for server_name, config in node.metadata.get('left4dead2/servers').items(): | ||||||
|     files[f'/opt/l4d2/configs/{server_name}.cfg'] = { |     files[f'/opt/l4d2/configs/{server_name}.cfg'] = { | ||||||
|         'source': 'server.cfg', |         'source': 'server.cfg', | ||||||
|         'content_type': 'mako', |         'content_type': 'mako', | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| from re import match | from re import match | ||||||
|  | from os import path, listdir | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| defaults = { | defaults = { | ||||||
|  | @ -10,7 +11,18 @@ defaults = { | ||||||
|             'p7zip-full': {}, # l4d2center_maps_sync.sh |             'p7zip-full': {}, # l4d2center_maps_sync.sh | ||||||
|         }, |         }, | ||||||
|     }, |     }, | ||||||
|     'left4dead2': {}, |     'left4dead2': { | ||||||
|  |         'overlays': set(listdir(path.join(repo.path, 'bundles/left4dead2/files/scripts/overlays'))), | ||||||
|  |         'servers': { | ||||||
|  |             # 'port': 27017, | ||||||
|  |             # 'overlays': ['competitive_rework'], | ||||||
|  |             # 'arguments': ['-tickrate 60'], | ||||||
|  |             # 'config': [ | ||||||
|  |             #     'exec server_original.cfg', | ||||||
|  |             #     'sm_forcematch zonemod', | ||||||
|  |             # ], | ||||||
|  |         }, | ||||||
|  |     }, | ||||||
|     'nftables': { |     'nftables': { | ||||||
|         'input': { |         'input': { | ||||||
|             'udp dport { 27005, 27020 } accept', |             'udp dport { 27005, 27020 } accept', | ||||||
|  | @ -45,9 +57,11 @@ defaults = { | ||||||
| def server_units(metadata): | def server_units(metadata): | ||||||
|     units = {} |     units = {} | ||||||
| 
 | 
 | ||||||
|     for name, config in metadata.get('left4dead2').items(): |     for name, config in metadata.get('left4dead2/servers').items(): | ||||||
|         assert match(r'^[A-z0-9-_-]+$', name) |         assert match(r'^[A-z0-9-_-]+$', name) | ||||||
|         assert 27000 <= config["port"] <= 27100 |         assert 27000 <= config["port"] <= 27100 | ||||||
|  |         for overlay in config.get('overlays', []): | ||||||
|  |             assert overlay in metadata.get('left4dead2/overlays'), f"unknown overlay {overlay}, known: {metadata.get('left4dead2/overlays')}" | ||||||
| 
 | 
 | ||||||
|         cmd = f'/opt/l4d2/start -n {name} -p {config["port"]}' |         cmd = f'/opt/l4d2/start -n {name} -p {config["port"]}' | ||||||
| 
 | 
 | ||||||
|  | @ -95,7 +109,7 @@ def server_units(metadata): | ||||||
|     'nftables/input', |     'nftables/input', | ||||||
| ) | ) | ||||||
| def nftables(metadata): | def nftables(metadata): | ||||||
|     ports = sorted(str(config["port"]) for config in metadata.get('left4dead2', {}).values()) |     ports = sorted(str(config["port"]) for config in metadata.get('left4dead2/servers').values()) | ||||||
| 
 | 
 | ||||||
|     return { |     return { | ||||||
|         'nftables': { |         'nftables': { | ||||||
|  |  | ||||||
|  | @ -27,30 +27,32 @@ | ||||||
|             }, |             }, | ||||||
|         }, |         }, | ||||||
|         'left4dead2': { |         'left4dead2': { | ||||||
|             'vanilla': { |             'servers': { | ||||||
|                 'port': 27015, |                 'vanilla': { | ||||||
|                 'overlays': ['vanilla'], |                     'port': 27015, | ||||||
|             }, |                     'overlays': ['vanilla'], | ||||||
|             'tick100': { |                 }, | ||||||
|                 'port': 27016, |                 'tick100': { | ||||||
|                 'overlays': ['vanilla', 'tickrate'], |                     'port': 27016, | ||||||
|                 'arguments': ['-tickrate 100'], |                     'overlays': ['vanilla', 'tickrate'], | ||||||
|                 'config': [ |                     'arguments': ['-tickrate 100'], | ||||||
|                     'exec server_original.cfg', |                     'config': [ | ||||||
|                     'sv_minupdaterate 100', |                         'exec server_original.cfg', | ||||||
|                     'sv_maxupdaterate 100', |                         'sv_minupdaterate 100', | ||||||
|                     'sv_mincmdrate 100', |                         'sv_maxupdaterate 100', | ||||||
|                     'sv_maxcmdrate 100', |                         'sv_mincmdrate 100', | ||||||
|                 ], |                         'sv_maxcmdrate 100', | ||||||
|             }, |                     ], | ||||||
|             'server3_comp1': { |                 }, | ||||||
|                 'port': 27017, |                 'server3_comp1': { | ||||||
|                 'overlays': ['competitive_rework'], |                     'port': 27017, | ||||||
|                 'arguments': ['-tickrate 60'], |                     'overlays': ['competitive_rework'], | ||||||
|                 'config': [ |                     'arguments': ['-tickrate 60'], | ||||||
|                     'exec server_original.cfg', |                     'config': [ | ||||||
|                     'sm_forcematch zonemod', |                         'exec server_original.cfg', | ||||||
|                 ], |                         'sm_forcematch zonemod', | ||||||
|  |                     ], | ||||||
|  |                 }, | ||||||
|             }, |             }, | ||||||
|         }, |         }, | ||||||
|         'bind': { |         'bind': { | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| bundlewrap ~=4.0, >=4.17.2 | bundlewrap ~=4.0, >=4.23.1 | ||||||
| pycryptodome | pycryptodome | ||||||
| PyNaCl | PyNaCl | ||||||
| PyYAML | PyYAML | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue