diff --git a/bundles/left4dead2/items.py b/bundles/left4dead2/items.py index 29c55da..5652df6 100644 --- a/bundles/left4dead2/items.py +++ b/bundles/left4dead2/items.py @@ -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', diff --git a/bundles/left4dead2/metadata.py b/bundles/left4dead2/metadata.py index c6a9a44..9f92c9f 100644 --- a/bundles/left4dead2/metadata.py +++ b/bundles/left4dead2/metadata.py @@ -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': { diff --git a/nodes/ovh.secondary.py b/nodes/ovh.secondary.py index 8e16a9b..5317cd4 100644 --- a/nodes/ovh.secondary.py +++ b/nodes/ovh.secondary.py @@ -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': { diff --git a/requirements.txt b/requirements.txt index 75cb897..2e81c9c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -bundlewrap ~=4.0, >=4.17.2 +bundlewrap ~=4.0, >=4.23.1 pycryptodome PyNaCl PyYAML