68 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from importlib.metadata import metadata
 | 
						|
 | 
						|
 | 
						|
defaults = {
 | 
						|
    'apt': {
 | 
						|
        'packages': {
 | 
						|
            'samba': {},
 | 
						|
        },
 | 
						|
    },
 | 
						|
    'nftables': {
 | 
						|
        'input': {
 | 
						|
            'tcp dport 445 accept',
 | 
						|
        },
 | 
						|
    },
 | 
						|
    'samba': {
 | 
						|
        'shares': {},
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'zfs/datasets',
 | 
						|
)
 | 
						|
def zfs(metadata):
 | 
						|
    return {
 | 
						|
        'zfs': {
 | 
						|
            'datasets': {
 | 
						|
                f"{metadata.get('zfs/storage_classes/hdd')}/samba": {
 | 
						|
                    'mountpoint': '/var/lib/samba',
 | 
						|
                },
 | 
						|
                **{
 | 
						|
                    f"{metadata.get('zfs/storage_classes/hdd')}/samba/{name}": {
 | 
						|
                        'mountpoint': f'/var/lib/samba/usershares/{name}',
 | 
						|
                    }
 | 
						|
                        for name in metadata.get('samba/shares')
 | 
						|
                },
 | 
						|
            },
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'samba/shares',
 | 
						|
)
 | 
						|
def passwords(metadata):
 | 
						|
    return {
 | 
						|
        'samba': {
 | 
						|
            'shares': {
 | 
						|
                name: {
 | 
						|
                    'password': repo.vault.password_for(f'samba {name}'),
 | 
						|
                }
 | 
						|
                    for name, conf in metadata.get('samba/shares').items()
 | 
						|
                    if not conf.get('password', None)
 | 
						|
            },
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'users',
 | 
						|
)
 | 
						|
def users(metadata):
 | 
						|
    return {
 | 
						|
        'users': {
 | 
						|
            name: {}
 | 
						|
                for name in metadata.get('samba/shares')
 | 
						|
        },
 | 
						|
    }
 |