def test_inventory_dump(mocker): """ `inventory.dump` take a destination path and optional list of users to export then exports the existing user information. """ dest_file = tempfile.NamedTemporaryFile(delete=False) dest_file.close() # spwd.getspnam can't be used by non-root users normally. # Mock the implementation so that we can test. mocker.patch('spwd.getspnam', return_value=mocker.Mock(sp_pwd='password')) # grp.getgrall will return the values from the test machine. # To get consistant results we need to mock this. mocker.patch('grp.getgrall', return_value=[ mocker.Mock(gr_name='super', gr_mem=['bob']), mocker.Mock(gr_name='other', gr_mem=[]), mocker.Mock(gr_name='wheel', gr_mem=['bob', 'kevin']), ]) inventory.dump(dest_file.name, ['kevin', 'bob']) with open(dest_file.name) as f: assert f.read( ) == """[{"name": "kevin", "groups": ["wheel"], "password": "******"}, {"name": "bob", "groups": ["super", "wheel"], "password": "******"}]"""
def main(): args = create_parser().parse_args() if args.export: inventory.dump(args.path) #TODO: extend to specify which users else: user_dicts = inventory.parse(args.path) users.sync_system(user_dicts)
def main(): args = create_parser().parse_args() if args.export: inventory.dump(args.path) else: users_info = inventory.load(args.path) users.sync(users_info)
def main(): from hr import users, inventory args = create_parser().parse_args() if args.export: inventory.dump(args.inventory) else: user_list = inventory.load(args.inventory) users.sync(user_list)
def main(): from hr import inventory, user_mgmt args = create_parser().parse_args() if args.export: inventory.dump(args.path) else: users_info = inventory.read(args.path) user_mgmt.sync_users(users_info)
def main(): from hr import inventory, users args = create_parser().parse_args() if args.export: inventory.dump(args.path) else: load_data = inventory.load(args.path) users.sync(load_data)
def main(): from hr import inventory, users args = create_parser().parse_args() if os.getuid() == 0: if args.export: inventory.dump(args.filename) else: users_info = inventory.load(args.filename) users.sync(users_info) else: if args.export == True: print( f"Must be run as root! Try using:\n `sudo hr --export {args.filename}" ) return sys.exit(1) else: print( f"Must be run as root! Try using:\n `sudo hr {args.filename}")
def test_inventory_dump(mocker): """ `inventory.dump` takes a destination oath and optional list of users to export then exports the existing user information. """ #spwd.getspanm can't be used by non-root user normally. mocker.patch('spwd.getspnam', return_value=mocker.Mock(sp_pwd='password')) #grp.getgrall will return the values from th test machine. # For consistency results will be mocked. mocker.patch('grp.getgrall', return_value=[ mocker.Mock(gr_name='super', gr_mem=['bob']), mocker.Mock(gr_name='other', gr_mem=[]), mocker.Mock(gr_name='wheel', gr_mem=['bob', 'kevin']), ]) inventory.dump(dest_file.name, ['kevin', 'bob']) with open(dest_filename.name) as f: assert f.read() == """[{"name": "kevin", "groups": ["wheel"], "password": "******"}, {"name": "bob", "groups": ["super", "wheel"], "password": "******"}]"""
def test_inventory_dump(mocker): """ `inventory.dump` takes a destination path and optional list of users to export then exports the existing user information. """ dest_file = tempfile.NamedTemporaryFile(delete=False) dest_file.close() mocker.patch('spwd.getspnam', return_value=mocker.Mock(sp_pwd='password')) mocker.patch('grp.getgrall', return_value=[ mocker.Mock(gr_name='super', gr_mem=['bob']), mocker.Mock(gr_name='other', gr_mem=[]), mocker.Mock(gr_name='wheel', gr_mem=['bob', 'kevin']), ]) inventory.dump(dest_file.name, ['kevin', 'bob']) with open(dest_file.name) as f: assert f.read( ) == """[{"name": "kevin", "groups": ["wheel"], "password": "******"}, {"name": "bob", "groups": ["super", "wheel"], "password": "******"}]"""
def test_inventory_dump(mocker): ''' `inventory.dump` take as dest path and optional list of users to export then exports the existing user info ''' dest_file = tempfile.NamedTemporaryFile(delete=False) dest_file.close() # spwd.getspnam() cant be used by non-root user normally # mock the impl so that we can test mocker.patch('spwd.getspnam', return_value=mocker.Mock(sp_pwd='password')) mocker.patch('grp.getgrall', return_value=[ mocker.Mock(gr_name='sudo', gr_member=['kevin', 'bob']), mocker.Mock(gr_name='adm', gr_member=['bob']) ]) inventory.dump(dest_file.name, ['kevin', 'bob']) # inventory.dump(dest_file.name, ['kevin']) with open(dest_file.name) as f: assert f.read( ) == '''[{"name": "kevin", "groups": ["sudo"], "password": "******" }, { "name": "bob", "groups": ["sudo", "adm"], "password": "******"}]'''
sys.exit(1) def sync(users, existing_user_names=user_names()): user_names = [user['name'] for user in users] for user in users: if user['name'] not in existing_user_names: add(user) elif user['name'] in existing_user_names: update(user) for user_name in existing_user_names: if not user_name in user_names: remove({ 'name': user_name }) def _groups_str(user_info): return ','.join(user_info['groups'] or []) # Manually Test the Module # # Load the Python3.6 REPL as root to interact with the new inventory module: $ sudo python3.6 >>> from hr import inventory >>> inventory.dump('./inventory.json') >>> exit() # Now you can look at the new inventory.json file to see that it dumped the users properly. $ cat inventory.json [{"name": "kevin", "groups": ["wheel"], "password": "******"}]