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',
 | 
						|
                },
 | 
						|
            },
 | 
						|
        },
 | 
						|
    }
 |