from os.path import join, exists for group, attrs in node.metadata.get('groups', {}).items(): groups[group] = attrs for username, attrs in node.metadata['users'].items(): home = attrs.get('home', '/home/{}'.format(username)) user = users.setdefault(username, {}) user['home'] = home user['shell'] = attrs.get('shell', '/bin/bash') if 'password' in attrs: user['password'] = attrs['password'] else: user['password_hash'] = 'x' if node.use_shadow_passwords else '*' if 'groups' in attrs: user['groups'] = attrs['groups'] directories[home] = { 'owner': username, 'mode': attrs.get('home-mode', '0700'), } if 'ssh_pubkey' in attrs: files[home + '/.ssh/authorized_keys'] = { 'content': '\n'.join(sorted(attrs['ssh_pubkey'])) + '\n', 'owner': username, 'mode': '0600', } elif not attrs.get('do_not_remove_authorized_keys_from_home', False): files[home + '/.ssh/authorized_keys'] = {'delete': True}