Exemplo n.º 1
0
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": "******"}]"""
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
Arquivo: cli.py Projeto: MacOG/hr
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}")
Exemplo n.º 8
0
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": "******"}]"""
Exemplo n.º 9
0
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": "******"}]"""
Exemplo n.º 10
0
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": "******"}]