61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
defaults = {
 | 
						|
    'apt': {
 | 
						|
        'packages': {
 | 
						|
            'python3-pip': {},
 | 
						|
            'python3-dev': {},
 | 
						|
            'python3-venv': {},
 | 
						|
        },
 | 
						|
    },
 | 
						|
    'flask': {},
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'flask',
 | 
						|
)
 | 
						|
def app_defaults(metadata):
 | 
						|
    return {
 | 
						|
        'flask': {
 | 
						|
            name: {
 | 
						|
                'user': 'root',
 | 
						|
                'group': 'root',
 | 
						|
                'workers': 8,
 | 
						|
                'timeout': 30,
 | 
						|
                **conf,
 | 
						|
            }
 | 
						|
                for name, conf in metadata.get('flask').items()
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'systemd/units',
 | 
						|
)
 | 
						|
def units(metadata):
 | 
						|
    return {
 | 
						|
        'systemd': {
 | 
						|
            'units': {
 | 
						|
                f'{name}.service': {
 | 
						|
                    'Unit': {
 | 
						|
                        'Description': name,
 | 
						|
                        'After': 'network.target',
 | 
						|
                    },
 | 
						|
                    'Service': {
 | 
						|
                        'Environment': {
 | 
						|
                            f'{k}={v}'
 | 
						|
                                for k, v in conf.get('env', {}).items()
 | 
						|
                        },
 | 
						|
                        'User': conf['user'],
 | 
						|
                        'Group': conf['group'],
 | 
						|
                        'ExecStart': f"/opt/{name}/venv/bin/gunicorn -w {conf['workers']} -b 127.0.0.1:{conf['port']} --timeout {conf['timeout']} {conf['app_module']}:app"
 | 
						|
                    },
 | 
						|
                    'Install': {
 | 
						|
                        'WantedBy': {
 | 
						|
                            'multi-user.target'
 | 
						|
                        }
 | 
						|
                    },
 | 
						|
                }
 | 
						|
                    for name, conf in metadata.get('flask').items()
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 |