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