l4d2 dynamic overlays

This commit is contained in:
CroneKorkN 2025-10-29 14:13:31 +01:00
parent a59d33ec03
commit 9572ac822f
Signed by: cronekorkn
SSH key fingerprint: SHA256:v0410ZKfuO1QHdgKBsdQNF64xmTxOF8osF1LIqwTcVw
4 changed files with 50 additions and 31 deletions

View file

@ -9,6 +9,9 @@ directories = {
'/opt/l4d2': {
'owner': 'steam', 'group': 'steam',
},
'/opt/l4d2/steam': {
'owner': 'steam', 'group': 'steam',
},
'/opt/l4d2/configs': {
'owner': 'steam', 'group': 'steam',
},
@ -31,7 +34,7 @@ files = {
'mode': '755',
'triggers': {
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': {
@ -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}'] = {
'source': f'scripts/overlays/{overlay}',
'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'] = {
'source': 'server.cfg',
'content_type': 'mako',

View file

@ -1,4 +1,5 @@
from re import match
from os import path, listdir
defaults = {
@ -10,7 +11,18 @@ defaults = {
'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': {
'input': {
'udp dport { 27005, 27020 } accept',
@ -45,9 +57,11 @@ defaults = {
def server_units(metadata):
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 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"]}'
@ -95,7 +109,7 @@ def server_units(metadata):
'nftables/input',
)
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 {
'nftables': {

View file

@ -27,30 +27,32 @@
},
},
'left4dead2': {
'vanilla': {
'port': 27015,
'overlays': ['vanilla'],
},
'tick100': {
'port': 27016,
'overlays': ['vanilla', 'tickrate'],
'arguments': ['-tickrate 100'],
'config': [
'exec server_original.cfg',
'sv_minupdaterate 100',
'sv_maxupdaterate 100',
'sv_mincmdrate 100',
'sv_maxcmdrate 100',
],
},
'server3_comp1': {
'port': 27017,
'overlays': ['competitive_rework'],
'arguments': ['-tickrate 60'],
'config': [
'exec server_original.cfg',
'sm_forcematch zonemod',
],
'servers': {
'vanilla': {
'port': 27015,
'overlays': ['vanilla'],
},
'tick100': {
'port': 27016,
'overlays': ['vanilla', 'tickrate'],
'arguments': ['-tickrate 100'],
'config': [
'exec server_original.cfg',
'sv_minupdaterate 100',
'sv_maxupdaterate 100',
'sv_mincmdrate 100',
'sv_maxcmdrate 100',
],
},
'server3_comp1': {
'port': 27017,
'overlays': ['competitive_rework'],
'arguments': ['-tickrate 60'],
'config': [
'exec server_original.cfg',
'sm_forcematch zonemod',
],
},
},
},
'bind': {

View file

@ -1,4 +1,4 @@
bundlewrap ~=4.0, >=4.17.2
bundlewrap ~=4.0, >=4.23.1
pycryptodome
PyNaCl
PyYAML