Example #1
0
 def test_not_found_fatal(self, client):
     client.adapter.register_uri(
         'GET',
         'https://errata.devel.redhat.com/api/v1/user/[email protected]',
         json={'errors': {
             'login_name': '[email protected] not found.'
         }},
         status_code=400)
     with pytest.raises(UserNotFoundError) as e:
         get_user(client, '*****@*****.**', fatal=True)
     assert str(e.value) == '*****@*****.**'
Example #2
0
 def test_basic(self, client, user):
     client.adapter.register_uri(
         'GET',
         'https://errata.devel.redhat.com/api/v1/user/[email protected]',
         json=user)
     result = get_user(client, '*****@*****.**')
     assert result == user
def ensure_user(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    params = {param: val for param, val in params.items() if val is not None}
    login_name = params['login_name']
    user = common_errata_tool.get_user(client, login_name)
    if not user:
        result['changed'] = True
        result['stdout_lines'] = ['created %s user' % login_name]
        if not check_mode:
            create_user(client, params)
        return result
    user_id = user.pop('id')

    differences = common_errata_tool.diff_settings(user, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            # Hack for CLOUDWF-2817 - If the user's receives_mail attribute is
            # true, we must always send the intended email_address as well.
            if params['receives_mail']:
                keys = [difference[0] for difference in differences]
                if 'email_address' not in keys:
                    differences.append(
                        ('email_address', '', user['email_address']))
            edit_user(client, user_id, differences)
    return result
def run_module():
    module_args = dict(
        short_name=dict(required=True),
        name=dict(required=True),
        description=dict(required=True),
        bugzilla_product_name=dict(default=''),
        valid_bug_states=dict(type='list', default=['MODIFIED', 'VERIFIED']),
        active=dict(type='bool', default=True),
        ftp_path=dict(default=""),
        ftp_subdir=dict(),
        internal=dict(type='bool', default=False),
        default_docs_reviewer=dict(),
        push_targets=dict(type='list', required=True),
        default_solution=dict(required=True),
        state_machine_rule_set=dict(required=True),
        move_bugs_on_qe=dict(type='bool', default=False),
        text_only_advisories_require_dists=dict(type='bool', default=True),
        exd_org_group=dict(choices=EXD_ORG_GROUPS.keys()),
    )
    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)
    # Ignore this attribute since it doesn't exist any more in ET
    del module.params['text_only_advisories_require_dists']

    check_mode = module.check_mode
    params = module.params

    try:
        validate_params(params)
    except InvalidInputError as e:
        msg = 'invalid %s value "%s"' % (e.param, e.value)
        module.fail_json(msg=msg, changed=False, rc=1)

    client = common_errata_tool.Client()

    try:
        result = ensure_product(client, params, check_mode)
    except DocsReviewerNotFoundError as e:
        msg = 'default_docs_reviewer %s account not found' % e
        module.fail_json(msg=msg, changed=False, rc=1)

    if (check_mode and result['changed'] and params['default_docs_reviewer']
            and boolean(os.getenv('ANSIBLE_STRICT_USER_CHECK_MODE', False))):
        try:
            user = common_errata_tool.get_user(client,
                                               params['default_docs_reviewer'],
                                               True)
        except UserNotFoundError as e:
            msg = 'default_docs_reviewer %s account not found' % e
            module.fail_json(msg=msg, changed=False, rc=1)

        if 'docs' not in user['roles']:
            msg = ("User %s does not have 'docs' role in ET" %
                   params['default_docs_reviewer'])
            module.fail_json(msg=msg, changed=False, rc=1)

    module.exit_json(**result)
Example #5
0
 def test_not_found(self, client):
     client.adapter.register_uri(
         'GET',
         'https://errata.devel.redhat.com/api/v1/user/[email protected]',
         json={'errors': {
             'login_name': '[email protected] not found.'
         }},
         status_code=400)
     user = get_user(client, '*****@*****.**')
     assert user is None
def run_module():
    module_args = dict(
        product=dict(),
        name=dict(required=True),
        description=dict(required=True),
        type=dict(required=True, choices=common_errata_tool.RELEASE_TYPES),
        product_versions=dict(type='list', required=True),
        enabled=dict(type='bool', default=True),
        active=dict(type='bool', default=True),
        enable_batching=dict(type='bool', default=True),
        program_manager=dict(),
        blocker_flags=dict(type='list'),
        internal_target_release=dict(),
        zstream_target_release=dict(),
        ship_date=dict(),
        allow_shadow=dict(type='bool', default=False),
        allow_blocker=dict(type='bool', default=False),
        allow_exception=dict(type='bool', default=False),
        allow_pkg_dupes=dict(type='bool', default=False),
        supports_component_acl=dict(type='bool', default=False),
        limit_bugs_by_product=dict(type='bool', default=False),
        state_machine_rule_set=dict(),
        pelc_product_version_name=dict(),
        brew_tags=dict(type='list', default=[]),
    )
    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    check_mode = module.check_mode
    params = module.params

    client = common_errata_tool.Client()

    try:
        result = ensure_release(client, params, check_mode)
    except ProgramManagerNotFoundError as e:
        msg = 'program_manager %s account not found' % e
        module.fail_json(msg=msg, changed=False, rc=1)

    if (check_mode and result['changed'] and params['program_manager']
            and boolean(os.getenv('ANSIBLE_STRICT_USER_CHECK_MODE', False))):
        try:
            _ = common_errata_tool.get_user(client, params['program_manager'],
                                            True)
        except UserNotFoundError as e:
            msg = 'program_manager %s account not found' % e
            module.fail_json(msg=msg, changed=False, rc=1)

    module.exit_json(**result)