From b6ebc4cfc0d7fdf492e06370403adef827a97a12 Mon Sep 17 00:00:00 2001 From: Ben Formosa Date: Tue, 20 Jun 2023 09:09:11 +1000 Subject: [PATCH] content_views role: multiple filter rules Update the content_views role to allow content view filters to have multiple rules, using the module added in #1558 --- roles/content_views/README.md | 12 +++++ .../tasks/_create_content_view.yml | 31 ++--------- .../tasks/_create_content_view_filter.yml | 52 +++++++++++++++++++ 3 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 roles/content_views/tasks/_create_content_view_filter.yml diff --git a/roles/content_views/README.md b/roles/content_views/README.md index 67069882a6..4d5c9011d1 100644 --- a/roles/content_views/README.md +++ b/roles/content_views/README.md @@ -31,6 +31,9 @@ This role also allows you to create Content View Filters and add them to the Con Additionally you can pass any other parameters accepted by the `content_view_filter` module. +Optionally, set multiple rules by passing a list of dicts in the `rules` field. +Each rule must have a `name`, and optionally any parameters accepted by the `content_view_filter_rule` module. + Example Playbooks ----------------- @@ -67,4 +70,13 @@ Example Playbooks latest: true - content_view: BearApp latest: true + filters: + - name: "exclude packages from all repositories" + filter_type: "rpm" + inclusion: false + repositories: [] + rule_state: absent + rules: + - name: bad-package + - name: worse-package ``` diff --git a/roles/content_views/tasks/_create_content_view.yml b/roles/content_views/tasks/_create_content_view.yml index 04257584f4..69e099714f 100644 --- a/roles/content_views/tasks/_create_content_view.yml +++ b/roles/content_views/tasks/_create_content_view.yml @@ -15,31 +15,8 @@ repositories: "{{ content_view.repositories | default(omit) }}" solve_dependencies: "{{ content_view.solve_dependencies | default(omit) }}" -- name: Add content view filters - theforeman.foreman.content_view_filter: - username: "{{ foreman_username | default(omit) }}" - password: "{{ foreman_password | default(omit) }}" - server_url: "{{ foreman_server_url | default(omit) }}" - validate_certs: "{{ foreman_validate_certs | default(omit) }}" - organization: "{{ foreman_organization }}" - name: "{{ item.name }}" - content_view: "{{ content_view.name }}" - repositories: "{{ item.repositories | default(omit) }}" - filter_type: "{{ item.filter_type }}" - start_date: "{{ item.start_date | default(omit) }}" - end_date: "{{ item.end_date | default(omit) }}" - types: "{{ item.types | default(omit) }}" - date_type: "{{ item.date_type | default(omit) }}" - inclusion: "{{ item.inclusion | default(omit) }}" - errata_id: "{{ item.errata_id | default(omit) }}" - max_version: "{{ item.max_version | default(omit) }}" - min_version: "{{ item.min_version | default(omit) }}" - rule_name: "{{ item.rule_name | default(omit) }}" - version: "{{ item.version | default(omit) }}" - description: "{{ item.description | default(omit) }}" - architecture: "{{ item.architecture | default(omit) }}" - filter_state: "{{ item.filter_state | default(omit) }}" - original_packages: "{{ item.original_packages | default(omit) }}" - original_module_streams: "{{ item.original_module_streams | default(omit) }}" - rule_state: "{{ item.rule_state | default(omit) }}" +- name: Create content view filters + ansible.builtin.include_tasks: '_create_content_view_filter.yml' loop: "{{ content_view.filters | default([]) }}" + loop_control: + loop_var: content_view_filter diff --git a/roles/content_views/tasks/_create_content_view_filter.yml b/roles/content_views/tasks/_create_content_view_filter.yml new file mode 100644 index 0000000000..f6c511b63e --- /dev/null +++ b/roles/content_views/tasks/_create_content_view_filter.yml @@ -0,0 +1,52 @@ +--- +- name: Add content view filters + theforeman.foreman.content_view_filter: + username: "{{ foreman_username | default(omit) }}" + password: "{{ foreman_password | default(omit) }}" + server_url: "{{ foreman_server_url | default(omit) }}" + validate_certs: "{{ foreman_validate_certs | default(omit) }}" + organization: "{{ foreman_organization }}" + name: "{{ content_view_filter.name }}" + content_view: "{{ content_view.name }}" + repositories: "{{ content_view_filter.repositories | default(omit) }}" + filter_type: "{{ content_view_filter.filter_type }}" + start_date: "{{ content_view_filter.start_date | default(omit) }}" + end_date: "{{ content_view_filter.end_date | default(omit) }}" + types: "{{ content_view_filter.types | default(omit) }}" + date_type: "{{ content_view_filter.date_type | default(omit) }}" + inclusion: "{{ content_view_filter.inclusion | default(omit) }}" + errata_id: "{{ content_view_filter.errata_id | default(omit) }}" + max_version: "{{ content_view_filter.max_version | default(omit) }}" + min_version: "{{ content_view_filter.min_version | default(omit) }}" + rule_name: "{{ content_view_filter.rule_name | default(omit) }}" + version: "{{ content_view_filter.version | default(omit) }}" + description: "{{ content_view_filter.description | default(omit) }}" + architecture: "{{ content_view_filter.architecture | default(omit) }}" + filter_state: "{{ content_view_filter.filter_state | default(omit) }}" + original_packages: "{{ content_view_filter.original_packages | default(omit) }}" + original_module_streams: "{{ content_view_filter.original_module_streams | default(omit) }}" + rule_state: "{{ content_view_filter.rule_state | default(omit) }}" + +- name: Add content view filter rules + theforeman.foreman.content_view_filter_rule: + username: "{{ foreman_username | default(omit) }}" + password: "{{ foreman_password | default(omit) }}" + server_url: "{{ foreman_server_url | default(omit) }}" + validate_certs: "{{ foreman_validate_certs | default(omit) }}" + organization: "{{ foreman_organization }}" + content_view: "{{ content_view.name }}" + content_view_filter: "{{ content_view_filter.name }}" + context: "{{ content_view_filter_rule.context | default(omit) }}" + date_type: "{{ content_view_filter_rule.date_type | default(omit) }}" + end_date: "{{ content_view_filter_rule.end_date | default(omit) }}" + errata_id: "{{ content_view_filter_rule.errata_id | default(omit) }}" + max_version: "{{ content_view_filter_rule.max_version | default(omit) }}" + min_version: "{{ content_view_filter_rule.min_version | default(omit) }}" + name: "{{ content_view_filter_rule.name | default(omit) }}" + start_date: "{{ content_view_filter_rule.start_date | default(omit) }}" + stream: "{{ content_view_filter_rule.stream | default(omit) }}" + types: "{{ content_view_filter_rule.types | default(omit) }}" + version: "{{ content_view_filter_rule.version | default(omit) }}" + loop: "{{ content_view_filter.rules | default([]) }}" + loop_control: + loop_var: content_view_filter_rule