Пример #1
0
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 = 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
Пример #2
0
def ensure_release(client, params, check_mode):
    # Note: this looks identical to the diff_product() method.
    # Maybe we can generalize this.
    result = {'changed': False, 'stdout_lines': []}
    params = {param: val for param, val in params.items() if val is not None}

    # Special-case state_machine_rule_set, because it's an enum, and it's
    # important to be able to set this back to "null" if desired:
    if params.get('state_machine_rule_set') == '':
        params['state_machine_rule_set'] = None

    name = params['name']
    release = get_release(client, name)
    if not release:
        result['changed'] = True
        result['stdout_lines'] = ['created %s' % name]
        if not check_mode:
            create_release(client, params)
        return result
    differences = common_errata_tool.diff_settings(release, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            # CLOUDWF-6: we must send product_version_ids in every request,
            # or the server will reset the product versions to an empty list.
            keys = [difference[0] for difference in differences]
            if 'product_versions' not in keys:
                differences.append(
                    ('product_versions', params['product_versions'],
                     params['product_versions']))
            edit_release(client, release['id'], differences)
    return result
Пример #3
0
def ensure_release(client, params, check_mode):
    # Note: this looks identical to the diff_product() method.
    # Maybe we can generalize this.
    result = {'changed': False, 'stdout_lines': []}
    name = params['name']
    release = get_release(client, name)
    if not release:
        result['changed'] = True
        result['stdout_lines'] = ['created %s' % name]
        if not check_mode:
            create_release(client, params)
        return result
    differences = common_errata_tool.diff_settings(release, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            # ERRATA-9867: we must send product_version_ids in every request,
            # or the server will reset the product versions to an empty list.
            changing_product_versions = False
            for difference in differences:
                key, _, _ = difference
                if key == 'product_versions':
                    changing_product_versions = True
                    break
            if not changing_product_versions:
                differences.append(
                    ('product_versions', params['product_versions'],
                     params['product_versions']))
            edit_release(client, release['id'], differences)
    return result
def ensure_cdn_repo(client, check_mode, params):
    """
    Ensure that this CDN repo exists in the Errata Tool.

    :param client: Errata Client
    :param bool check_mode: describe what would happen, but don't do it.
    :param dict params: Parameters from ansible
    """
    result = {'changed': False, 'stdout_lines': []}
    params = {param: val for param, val in params.items() if val is not None}
    name = params['name']

    # Special handling for packages parameter:
    params = params.copy()
    packages = params.pop('packages')
    package_names = list(packages.keys())
    params['package_names'] = package_names
    packages = normalize_packages(packages)

    # main cdn_repo
    cdn_repo = get_cdn_repo(client, name)
    if not cdn_repo:
        result['changed'] = True
        result['stdout_lines'] = ['created %s' % name]
        result['diff'] = prepare_diff_data(cdn_repo, params, {}, packages)
        if check_mode:
            return result
        cdn_repo = create_cdn_repo(client, params)

    differences = common_errata_tool.diff_settings(cdn_repo, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            # CLOUDWF-316 to access cdn_repos directly by name.
            edit_cdn_repo(client, cdn_repo['id'], differences)

    # packages (from /api/v1/cdn_repo_package_tags):
    package_tag_changes, current_packages = \
        ensure_packages_tags(client, name, check_mode, packages)

    if package_tag_changes:
        result['changed'] = True
        result['stdout_lines'].extend(package_tag_changes)

    # (Don't redo the diff if the repo was just created)
    if result['changed'] and 'diff' not in result:
        result['diff'] = prepare_diff_data(cdn_repo, params, current_packages,
                                           packages)

    return result
def ensure_product(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    short_name = params['short_name']
    product = get_product(client, short_name)
    if not product:
        result['changed'] = True
        result['stdout_lines'] = ['created %s product' % short_name]
        if not check_mode:
            create_product(client, params)
        return result
    differences = common_errata_tool.diff_settings(product, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            edit_product(client, product['id'], params)
    return result
Пример #6
0
def ensure_user(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    login_name = params['login_name']
    user = 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:
            edit_user(client, user_id, differences)
    return result
Пример #7
0
def ensure_product_version(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    product = params['product']
    name = params['name']
    product_version = get_product_version(client, product, name)
    if not product_version:
        result['changed'] = True
        result['stdout_lines'] = ['created %s product version' % name]
        if not check_mode:
            create_product_version(client, product, params)
        return result
    differences = common_errata_tool.diff_settings(product_version, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            edit_product_version(client, product_version, differences)
    return result
def ensure_cdn_repo(client, check_mode, params):
    """
    Ensure that this CDN repo exists in the Errata Tool.

    :param client: Errata Client
    :param bool check_mode: describe what would happen, but don't do it.
    :param dict params: Parameters from ansible
    """
    result = {'changed': False, 'stdout_lines': []}
    name = params['name']

    # Special handling for packages parameter:
    params = params.copy()
    packages = params.pop('packages')
    package_names = list(packages.keys())
    params['package_names'] = package_names
    packages = normalize_packages(packages)

    # main cdn_repo
    cdn_repo = get_cdn_repo(client, name)
    if not cdn_repo:
        result['changed'] = True
        result['stdout_lines'] = ['created %s' % name]
        if check_mode:
            return result
        cdn_repo = create_cdn_repo(client, params)

    differences = common_errata_tool.diff_settings(cdn_repo, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            # ERRATA-9728 to access cdn_repos directly by name.
            edit_cdn_repo(client, cdn_repo['id'], differences)

    # packages (from /api/v1/cdn_repo_package_tags):
    package_tag_changes = ensure_packages_tags(client, name, check_mode,
                                               packages)
    if package_tag_changes:
        result['changed'] = True
        result['stdout_lines'].extend(package_tag_changes)
    return result
Пример #9
0
def ensure_variant(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    params = {param: val for param, val in params.items() if val is not None}
    name = params['name']
    variant = get_variant(client, name)

    if not variant:
        result['changed'] = True
        result['stdout_lines'] = ['created %s variant' % name]
        if not check_mode:
            create_variant(client, params)
        return result
    differences = common_errata_tool.diff_settings(variant, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            edit_variant(client, variant['id'], differences)
    return result
def ensure_variant(client, params, check_mode):
    result = {'changed': False, 'stdout_lines': []}
    name = params['name']
    variant = get_variant(client, name)
    if not variant:
        result['changed'] = True
        result['stdout_lines'] = ['created %s variant' % name]
        if not check_mode:
            create_variant(client, params)
        return result
    # Don't print a diff for CPE if it was omitted
    if params['cpe'] is None:
        params.pop('cpe')
    differences = common_errata_tool.diff_settings(variant, params)
    if differences:
        result['changed'] = True
        changes = common_errata_tool.describe_changes(differences)
        result['stdout_lines'].extend(changes)
        if not check_mode:
            edit_variant(client, variant['id'], differences)
    return result
 def test_list(self):
     settings = {'active': True, 'push_targets': ['cdn']}
     params = {'active': True, 'push_targets': ['cdn', 'cdn_stage']}
     differences = diff_settings(settings, params)
     assert differences == [('push_targets', ['cdn'], ['cdn', 'cdn_stage'])]
 def test_simple(self):
     settings = {'active': False, 'push_targets': ['cdn']}
     params = {'active': True, 'push_targets': ['cdn']}
     differences = diff_settings(settings, params)
     assert differences == [('active', False, True)]