78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from ipaddress import ip_interface
 | |
| 
 | |
| defaults = {
 | |
|     'flask': {
 | |
|         'build-server' : {
 | |
|             'git_url': "https://git.sublimity.de/cronekorkn/build-server.git",
 | |
|             'port': 4000,
 | |
|             'app_module': 'build_server',
 | |
|             'user': 'build-server',
 | |
|             'group': 'build-server',
 | |
|             'timeout': 900,
 | |
|             'env': {
 | |
|                 'CONFIG': '/etc/build-server.json',
 | |
|                 'STRATEGIES_DIR': '/opt/build-server/strategies',
 | |
|             },
 | |
|         },
 | |
|     },
 | |
|     'users': {
 | |
|         'build-server': {
 | |
|             'home': '/var/lib/build-server',
 | |
|         },
 | |
|     },
 | |
| }
 | |
| 
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'build-server',
 | |
| )
 | |
| def agent_conf(metadata):
 | |
|     download_server = repo.get_node(metadata.get('build-server/download_server'))
 | |
|     return {
 | |
|         'build-server': {
 | |
|             'architectures': {
 | |
|                 architecture: {
 | |
|                     'ip': str(ip_interface(repo.get_node(conf['node']).metadata.get('network/internal/ipv4')).ip),
 | |
|                 }
 | |
|                     for architecture, conf in metadata.get('build-server/architectures').items()
 | |
|             },
 | |
|             'download_server_ip': str(ip_interface(download_server.metadata.get('network/internal/ipv4')).ip),
 | |
|         },
 | |
|     }
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'build-server',
 | |
| )
 | |
| def ci(metadata):
 | |
|     return {
 | |
|         'build-server': {
 | |
|             'ci': {
 | |
|                 f'{repo}@{other_node.name}': {
 | |
|                     'hostname': other_node.metadata.get('hostname'),
 | |
|                     'repo': repo,
 | |
|                     **options,
 | |
|                 }
 | |
|                     for other_node in repo.nodes
 | |
|                     if other_node.has_bundle('build-ci')
 | |
|                     for repo, options in other_node.metadata.get('build-ci').items()
 | |
|             },
 | |
|         },
 | |
|     }
 | |
| 
 | |
| @metadata_reactor.provides(
 | |
|     'nginx/vhosts',
 | |
| )
 | |
| def nginx(metadata):
 | |
|     return {
 | |
|         'nginx': {
 | |
|             'vhosts': {
 | |
|                 metadata.get('build-server/hostname'): {
 | |
|                     'content': 'nginx/proxy_pass.conf',
 | |
|                     'context': {
 | |
|                         'target': 'http://127.0.0.1:4000',
 | |
|                     },
 | |
|                     'check_path': '/status',
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     }
 | 
