89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
assert node.has_bundle('steam')
|
|
|
|
from shlex import quote
|
|
|
|
defaults = {
|
|
'steam': {
|
|
'games': {
|
|
'left4dead2': '222860',
|
|
},
|
|
},
|
|
'left4dead2': {
|
|
'servers': {},
|
|
'admins': set(),
|
|
'workshop': set(),
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'systemd/units',
|
|
)
|
|
def workshop(metadata):
|
|
command = (
|
|
'set -x; '
|
|
'for ID in ' + ' '.join(metadata.get('left4dead2/workshop')) + '; '
|
|
'do '
|
|
'if ! ls /opt/left4dead2/left4dead2/addons/$ID/*.vpk; '
|
|
'then '
|
|
'cd /opt/left4dead2/left4dead2/addons/$ID; '
|
|
'/opt/steam-workshop-downloader https://steamcommunity.com/sharedfiles/filedetails\?id\=$ID; '
|
|
'unzip $ID.zip; '
|
|
'fi; '
|
|
'done'
|
|
)
|
|
|
|
return {
|
|
'systemd': {
|
|
'units': {
|
|
'left4dead2-workshop.service': {
|
|
'Unit': {
|
|
'Description': 'install workshop items',
|
|
'After': 'network.target',
|
|
'Requires': 'steam-update.service',
|
|
'PartOf': 'steam-update.service'
|
|
},
|
|
'Service': {
|
|
'Type': 'oneshot',
|
|
'User': 'steam',
|
|
'ExecStart': f'/bin/bash -c {quote(command)}',
|
|
},
|
|
'Install': {
|
|
'WantedBy': {'multi-user.target'},
|
|
},
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'systemd/units',
|
|
)
|
|
def server_units(metadata):
|
|
units = {}
|
|
|
|
for name, config in metadata.get('left4dead2/servers').items():
|
|
units[f'left4dead2-server-{name}.service'] = {
|
|
'Unit': {
|
|
'Description': f'left4dead2 server {name}',
|
|
'After': 'network.target',
|
|
'Requires': 'steam-update.service',
|
|
},
|
|
'Service': {
|
|
'User': 'steam',
|
|
'Group': 'steam',
|
|
'WorkingDirectory': '/opt/left4dead2',
|
|
'ExecStart': f'/opt/left4dead2/srcds_run -port {config["port"]} -insecure +map {config["map"]} +exec server-{name}.cfg',
|
|
'Restart': 'on-failure',
|
|
},
|
|
'Install': {
|
|
'WantedBy': {'multi-user.target'},
|
|
},
|
|
}
|
|
|
|
return {
|
|
'systemd': {
|
|
'units': units,
|
|
},
|
|
}
|