46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
for name, conf in node.metadata.get('dm-crypt').items():
 | 
						|
    actions[f'dm-crypt_format_{name}'] = {
 | 
						|
        'command': f"cryptsetup --batch-mode luksFormat --cipher aes-xts-plain64 --key-size 512 '{conf['device']}'",
 | 
						|
        'data_stdin': conf['password'],
 | 
						|
        'unless': f"blkid -t TYPE=crypto_LUKS '{conf['device']}'",
 | 
						|
        'comment': f"WARNING: This DESTROYS the contents of the device: '{conf['device']}'",
 | 
						|
        'needs': {
 | 
						|
            'pkg_apt:cryptsetup',
 | 
						|
        },
 | 
						|
    }
 | 
						|
    
 | 
						|
    actions[f'dm-crypt_test_{name}'] = {
 | 
						|
        'command': 'false',
 | 
						|
        'unless': f"! cryptsetup --batch-mode luksOpen --test-passphrase '{conf['device']}'",
 | 
						|
        'data_stdin': conf['password'],
 | 
						|
        'needs': {
 | 
						|
            f"action:dm-crypt_format_{name}",
 | 
						|
        },
 | 
						|
    }
 | 
						|
    
 | 
						|
    actions[f'dm-crypt_open_{name}'] = {
 | 
						|
        'command': f"cryptsetup --batch-mode luksOpen '{conf['device']}' '{name}'",
 | 
						|
        'data_stdin': conf['password'],
 | 
						|
        'unless': f"test -e /dev/mapper/{name}",
 | 
						|
        'comment': f"Unlocks the device '{conf['device']}' and makes it available in: '/dev/mapper/{name}'",
 | 
						|
        'needs': {
 | 
						|
            f"action:dm-crypt_test_{name}",
 | 
						|
        },
 | 
						|
        'needed_by': set(),
 | 
						|
    }
 | 
						|
 | 
						|
    if node.has_bundle('zfs'):
 | 
						|
        for pool, pool_conf in node.metadata.get('zfs/pools').items():
 | 
						|
            if f'/dev/mapper/{name}' in pool_conf['devices']:
 | 
						|
                actions[f'dm-crypt_open_{name}']['needed_by'].add(f'zfs_pool:{pool}')
 | 
						|
 | 
						|
            actions[f'zpool_import_{name}'] = {
 | 
						|
                'command': f"zpool import -d /dev/mapper/{name} {pool}",
 | 
						|
                'unless': f"zpool status {pool}",
 | 
						|
                'needs': {
 | 
						|
                    f"action:dm-crypt_open_{name}",
 | 
						|
                },
 | 
						|
                'needed_by': {
 | 
						|
                    f"zfs_pool:{pool}",
 | 
						|
                },
 | 
						|
            }
 |