From 3bb2c6f064a716871b564a4a3560e33d51b7230e Mon Sep 17 00:00:00 2001 From: Marcel Arentz Date: Fri, 31 Mar 2023 19:14:10 +0000 Subject: [PATCH 01/37] Migrate user module to centralized utils In this part the log functionality is not included. It may be added rather in the invocation part of the result? Also some parts are not yet nice and clear to read/understand. --- plugins/modules/user.py | 457 +++++++----------- tests/integration/targets/user/tasks/test.yml | 60 ++- 2 files changed, 209 insertions(+), 308 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index ccc096bd0..f0ee8b8d1 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -156,268 +156,175 @@ sample: 'User created.' """ -LOG = [] -import copy import json from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.urls import fetch_url - -def exit_failed(module, msg): - result = { - "msg": "%s, log: %s" % (msg, " § ".join(LOG)), - "changed": False, - "failed": True, - } - module.fail_json(**result) - - -def exit_changed(module, msg): - result = { - "msg": "%s, log: %s" % (msg, " § ".join(LOG)), - "changed": True, - "failed": False, +from ansible_collections.tribe29.checkmk.plugins.module_utils.api import CheckmkAPI +from ansible_collections.tribe29.checkmk.plugins.module_utils.utils import ( + result_as_dict, +) + +USER = ( + "username", + "fullname", + "password", + "enforce_password_change", + "auth_type", + "disable_login", + "email", + "fallback_contact", + "pager_address", + "idle_timout_option", + "idle_timeout_duration", + "roles", + "authorized_sites", + "contactgroups", + "disable_notifications", + "language", +) + + +class UserHTTPCodes: + # http_code: (changed, failed, "Message") + get = { + 200: (False, False, "User found, nothing changed"), + 404: (False, False, "User not found"), } - module.exit_json(**result) - - -def exit_ok(module, msg): - result = { - "msg": "%s, log: %s" % (msg, " § ".join(LOG)), - "changed": False, - "failed": False, - } - module.exit_json(**result) - - -def log(msg): - LOG.append(msg) - - -class User: - - default_attributes = { - "disable_login": False, - "contact_options": {"email": "", "fallback_contact": False}, - "idle_timeout": {"option": "global"}, - "roles": ["user"], - "contactgroups": [], - "pager_address": "", - "disable_notifications": {}, - } - - def __init__(self, username, state="present", attributes=None, etag=None): - if attributes is None: - self.attributes = self.default_attributes - else: - self.attributes = attributes - self.state = state - self.username = username - self.etag = etag - - def __repr__(self): - return "User(name: %s, state: %s, attributes: %s, etag: %s)" % ( - self.username, - self.state, - str(self.attributes), - self.etag, - ) - - @classmethod - def from_api_response(cls, module, api_params): - - # Determine the current state of this particular user - api_attributes, state, etag = get_current_user_state(module, api_params) - - attributes = copy.deepcopy(api_attributes) - - return cls(module.params["name"], state, attributes, etag) - - @classmethod - def from_module(cls, params): - - attributes = cls.default_attributes - - attributes["username"] = params["name"] - - def _exists(key): - return key in params and params[key] is not None - - if _exists("fullname"): - attributes["fullname"] = params["fullname"] - - if _exists("disable_login"): - attributes["disable_login"] = params["disable_login"] - - if _exists("pager_address"): - attributes["pager_address"] = params["pager_address"] - - if _exists("language") and params["language"] != "default": - attributes["language"] = params["language"] - - if _exists("auth_type"): - auth_option = {} - - if params.get("auth_type") == "password" and _exists("password"): - auth_option["password"] = params["password"] - auth_option["auth_type"] = "password" - auth_option["enforce_password_change"] = bool( - params["enforce_password_change"] - ) - elif params.get("auth_type") == "automation" and _exists("password"): - auth_option["secret"] = params["password"] - auth_option["auth_type"] = "automation" - else: - log("Incomplete auth_type/password/secret combination.") - return - attributes["auth_option"] = auth_option - - if _exists("idle_timeout_option"): - idle_timeout = {} - idle_timeout["idle_timeout_option"] = params["idle_timeout_option"] - if params["idle_timeout_option"] == "individual": - if "idle_timeout_duration" in params: - idle_timeout["idle_timeout_duration"] = params[ - "idle_timeout_duration" - ] - else: - idle_timeout["idle_timeout_duration"] = 3600 - attributes["idle_timeout"] = idle_timeout - - if _exists("email"): - contact_options = {} - contact_options["email"] = params["email"] - if "fallback_contact" in params: - contact_options["fallback_contact"] = params["fallback_contact"] - attributes["contact_options"] = contact_options - - if _exists("disable_notifications"): - disable_notifications = {} - try: - disable_notifications = json.loads(params["disable_notifications"]) - except json.decoder.JSONDecodeError: - log("json.decoder.JSONDecodeError while parsing disable_notifications.") - return - attributes["disable_notifications"] = disable_notifications - - if _exists("roles"): - attributes["roles"] = params["roles"] - - if _exists("contactgroups"): - attributes["contactgroups"] = params["contactgroups"] - - if _exists("authorized_sites"): - attributes["authorized_sites"] = params["authorized_sites"] - - return cls(params["name"], state=params["state"], attributes=attributes) - - def satisfies(self, other_instance): - for key, value in other_instance.attributes.items(): - if key in ["auth_option", "password"]: + create = {200: (True, False, "User created")} + edit = {200: (True, False, "User modified")} + delete = {204: (True, False, "User deleted")} + + +class UserEndpoints: + default = "/objects/user_config" + create = "/domain-types/user_config/collections/all" + + +class UserAPI(CheckmkAPI): + def _build_user_data(self): + user = {} + + # For some keys the API has required sub keys. We can use them as indicator, + # that the key must be used + if self.required.get("auth_type"): + user["auth_option"] = {} + if self.required.get("email"): + user["contact_options"] = {} + if self.required.get("idle_timeout_option"): + user["idle_timeout"] = {} + + for key, value in self.required.items(): + if key in ( + "username", + "fullname", + "disable_login", + "pager_address", + "roles", + "authorized_sites", + "contactgroups", + "language", + ): + user[key] = value + + if key in ("auth_type", "password", "enforce_password_change"): + if key == "password" and self.params.get("auth_type") == "automation": + # Unfortunately the API uses different strings for the password + # depending on the kind of user... + key = "secret" + user["auth_option"][key] = value + + if key in ("email", "fallback_contact"): + user["contact_options"][key] = value + + if key in ("idle_timeout_option", "idle_timeout_duration"): + user["idle_timeout"] = value + + if key == "disable_notifications": + user["disable_notifications"]["disable"] = value + + return user + + def _set_current(self, result): + # A flat hierarchy allows an easy comparison of differences + if result.http_code == 200: + content = json.loads(result.content)["extensions"] + for key in USER: + if key in content: + self.current[key] = content[key] + + def _build_default_endpoint(self): + return "%s/%s" % (UserEndpoints.default, self.params.get("name")) + + def build_required(self): + # A flat hierarchy allows an easy comparison of differences + for key in USER: + if key == "username": + self.required[key] = self.params["name"] continue - if key in self.attributes and value != self.attributes[key]: - return False - - return True - - -def get_current_user_state(module, api_params): - extensions = {} - etag = "" - current_state = "" - - api_endpoint = "/objects/user_config/" + module.params.get("name") - url = api_params["base_url"] + api_endpoint - - response, info = fetch_url( - module, url, data=None, headers=api_params["headers"], method="GET" - ) - - if info["status"] == 200: - body = json.loads(response.read()) - current_state = "present" - etag = info.get("etag", "") - extensions = body.get("extensions", {}) - - elif info["status"] == 404: - current_state = "absent" - - else: - exit_failed( - module, - "[get_current_user_state] Error calling API. HTTP code %d. Details: %s. Body: %s" - % (info["status"], info["body"], body), + if self.params.get(key) is None: + continue + self.required[key] = self.params[key] + + def needs_editing(self): + black_list = ("username", "password", "auth_type", "authorized_sites") + for key, value in self.required.items(): + if key not in black_list and self.current.get(key) != value: + return True + return False + + def get(self): + result = self._fetch( + code_mapping=UserHTTPCodes.get, + endpoint=self._build_default_endpoint(), + method="GET", ) - return extensions, current_state, etag + self.state = "present" if result.http_code == 200 else "absent" + self._set_current(result) + return result -def set_user_attributes(module, desired_user, api_params): - api_endpoint = "/objects/user_config/" + desired_user.username - url = api_params["base_url"] + api_endpoint - desired_attributes = desired_user.attributes - del desired_attributes["username"] # Not needed as a param, as it's part of the URI + def create(self): + data = self._build_user_data() + # It's allowed in Ansible to skip the fullname, but it's not allowed + # in the Checkmk API... + data.setdefault("fullname", data["username"]) - response, info = fetch_url( - module, - url, - module.jsonify(desired_attributes), - headers=api_params["headers"], - method="PUT", - ) - - if info["status"] != 200: - exit_failed( - module, - "[set_user_attributes] Error calling API. HTTP code %d. Details: %s, " - % (info["status"], info["body"]), + result = self._fetch( + code_mapping=UserHTTPCodes.create, + endpoint=UserEndpoints.create, + data=data, + method="POST", ) + return result -def create_user(module, desired_user, api_params): - api_endpoint = "/domain-types/user_config/collections/all" - url = api_params["base_url"] + api_endpoint - desired_attributes = desired_user.attributes - - if desired_attributes["fullname"] is None or "fullname" not in desired_attributes: - desired_attributes["fullname"] = desired_attributes["username"] - - response, info = fetch_url( - module, - url, - module.jsonify(desired_attributes), - headers=api_params["headers"], - method="POST", - ) + def edit(self, etag): + data = self._build_user_data() + self.headers["if-Match"] = etag - if info["status"] != 200: - exit_failed( - module, - "[create_user] Error calling API. HTTP code %d. Details: %s, " - % (info["status"], info["body"]), + result = self._fetch( + code_mapping=UserHTTPCodes.edit, + endpoint=self._build_default_endpoint(), + data=data, + method="PUT", ) + return result -def delete_user(module, api_params): - api_endpoint = "/objects/user_config/" + module.params.get("name") - url = api_params["base_url"] + api_endpoint - - response, info = fetch_url( - module, url, data=None, headers=api_params["headers"], method="DELETE" - ) - - if info["status"] != 204: - exit_failed( - module, - "[delete_user] Error calling API. HTTP code %d. Details: %s, " - % (info["status"], info["body"]), + def delete(self): + result = self._fetch( + code_mapping=UserHTTPCodes.delete, + endpoint=self._build_default_endpoint(), + method="DELETE", ) + return result -def run_module(): +def run_module(): # define available arguments/parameters a user can pass to the module module_args = dict( server_url=dict(type="str", required=True), @@ -453,57 +360,27 @@ def run_module(): module = AnsibleModule(argument_spec=module_args, supports_check_mode=False) # Use the parameters to initialize some common api variables - api_params = {} - api_params["headers"] = { - "Accept": "application/json", - "Content-Type": "application/json", - "Authorization": "Bearer %s %s" - % ( - module.params.pop("automation_user", ""), - module.params.pop("automation_secret", ""), - ), - } - - api_params["base_url"] = "%s/%s/check_mk/api/1.0" % ( - module.params.pop("server_url", ""), - module.params.pop("site", ""), - ) - - # Determine desired state and attributes - desired_user = User.from_module(module.params) - log("desired_user: %s" % str(desired_user)) - desired_state = desired_user.state - - current_user = User.from_api_response(module, api_params) - current_state = current_user.state - log("current_user: %s" % str(current_user)) - - # Handle the user accordingly to above findings and desired state - if desired_state in ["present", "reset_password"] and current_state == "present": - api_params["headers"]["If-Match"] = current_user.etag - - if ( - not current_user.satisfies(desired_user) - or desired_state == "reset_password" - ): - set_user_attributes(module, desired_user, api_params) - exit_changed(module, "User attributes changed.") - else: - exit_ok(module, "User already present. All explicit attributes as desired.") - - elif desired_state == "present" and current_state == "absent": - create_user(module, desired_user, api_params) - exit_changed(module, "User created.") - - elif desired_state == "absent" and current_state == "absent": - exit_ok(module, "User already absent.") - - elif desired_state == "absent" and current_state == "present": - delete_user(module, api_params) - exit_changed(module, "User deleted.") - - else: - exit_failed(module, "[run_module] Unknown error") + user = UserAPI(module) + + user.build_required() + result = user.get() + etag = result.etag + + required_state = user.params.get("state") + if user.state == "present": + if required_state == "reset_password": + user.required.pop("username") + result = user.edit(etag) + elif required_state == "absent": + result = user.delete() + elif user.needs_editing(): + user.required.pop("username") + result = user.edit(etag) + elif user.state == "absent": + if required_state in ("present", "reset_password"): + result = user.create() + + module.exit_json(**result_as_dict(result)) def main(): diff --git a/tests/integration/targets/user/tasks/test.yml b/tests/integration/targets/user/tasks/test.yml index 13cad1d3e..dce469826 100644 --- a/tests/integration/targets/user/tasks/test.yml +++ b/tests/integration/targets/user/tasks/test.yml @@ -9,7 +9,7 @@ title: "{{ item }}" state: "present" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] loop: "{{ checkmk_contact_groups }}" - name: "{{ outer_item.version }} - Activate." @@ -22,7 +22,7 @@ sites: - "{{ outer_item.site }}" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Create users." user: @@ -40,9 +40,17 @@ - "{{ outer_item.site }}" state: "present" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] + register: rule_result loop: "{{ checkmk_users }}" +- name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler + ansible.builtin.fail: + msg: "Users not created! Maybe already existing?" + when: rule_result is not changed + delegate_to: localhost + run_once: true # noqa run-once[task] + - name: "{{ outer_item.version }} - Activate." activation: server_url: "{{ server_url }}" @@ -53,7 +61,7 @@ sites: - "{{ outer_item.site }}" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Create same users again." user: @@ -71,16 +79,16 @@ - "{{ outer_item.site }}" state: "present" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] register: rule_result loop: "{{ checkmk_users }}" -- name: "{{ outer_item.version }} - Fail if changed." # noqa no-handler +- name: "{{ outer_item.version }} - Fail if changed." # noqa no-handler ansible.builtin.fail: - msg: "Rule changed!" + msg: "Tried to create the same user twice!" when: "rule_result.changed" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Edit users." user: @@ -92,7 +100,7 @@ contactgroups: "{{ item.contactgroups }}" state: "present" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] loop: "{{ checkmk_users }}" - name: "{{ outer_item.version }} - Activate." @@ -105,7 +113,7 @@ sites: - "{{ outer_item.site }}" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Change PW of users." user: @@ -115,12 +123,20 @@ automation_secret: "{{ automation_secret }}" name: "{{ item.name }}" password: "{{ item.newpassword }}" - state: "present" + auth_type: "{{ item.auth_type }}" + state: "reset_password" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] register: rule_result loop: "{{ checkmk_users }}" +- name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler + ansible.builtin.fail: + msg: "Password not changed" + when: rule_result is not changed + delegate_to: localhost + run_once: true # noqa run-once[task] + - name: "{{ outer_item.version }} - Activate." activation: server_url: "{{ server_url }}" @@ -131,7 +147,7 @@ sites: - "{{ outer_item.site }}" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Delete users." user: @@ -142,9 +158,17 @@ name: "{{ item.name }}" state: "absent" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] + register: rule_result loop: "{{ checkmk_users }}" +- name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler + ansible.builtin.fail: + msg: "Users not deleted" + when: rule_result is not changed + delegate_to: localhost + run_once: true # noqa run-once[task] + - name: "{{ outer_item.version }} - Activate." activation: server_url: "{{ server_url }}" @@ -155,7 +179,7 @@ sites: - "{{ outer_item.site }}" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] - name: "{{ outer_item.version }} - Delete same users again." user: @@ -166,13 +190,13 @@ name: "{{ item.name }}" state: "absent" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] register: rule_result loop: "{{ checkmk_users }}" -- name: "{{ outer_item.version }} - Fail if changed." # noqa no-handler +- name: "{{ outer_item.version }} - Fail if changed." # noqa no-handler ansible.builtin.fail: msg: "Rule changed!" when: "rule_result.changed" delegate_to: localhost - run_once: true # noqa run-once[task] + run_once: true # noqa run-once[task] From af446a68a780e6053a51d9d1f0fdbf8b607a6eba Mon Sep 17 00:00:00 2001 From: Marcel Arentz Date: Fri, 31 Mar 2023 19:32:06 +0000 Subject: [PATCH 02/37] change last test user to automation type --- tests/integration/targets/user/vars/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index 1f22bad38..f63d80221 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -47,7 +47,7 @@ checkmk_users: fullname: Automation User 1 password: "0123456789" newpassword: "abcdefghij" - auth_type: password + auth_type: automation contactgroups: [] roles: - admin From 3ad42525feb350886270674bf0b5c9fde39402bd Mon Sep 17 00:00:00 2001 From: Marcel Arentz Date: Fri, 31 Mar 2023 19:37:54 +0000 Subject: [PATCH 03/37] Again some formatting... --- plugins/modules/user.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index f0ee8b8d1..37f66f69a 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -160,7 +160,6 @@ import json from ansible.module_utils.basic import AnsibleModule - from ansible_collections.tribe29.checkmk.plugins.module_utils.api import CheckmkAPI from ansible_collections.tribe29.checkmk.plugins.module_utils.utils import ( result_as_dict, From 9a9c5fee7eac831284a62f9babfd21dc61d59dec Mon Sep 17 00:00:00 2001 From: Marcel Arentz Date: Sat, 1 Apr 2023 12:01:56 +0000 Subject: [PATCH 04/37] Be save again with the response --- plugins/module_utils/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/module_utils/api.py b/plugins/module_utils/api.py index 2ebb1124d..5eeabb266 100644 --- a/plugins/module_utils/api.py +++ b/plugins/module_utils/api.py @@ -60,7 +60,7 @@ def _fetch(self, code_mapping, endpoint="", data=None, method="GET"): http_readable, ) = http_mapping.get(http_code, (False, True, "Error calling API")) # Better translate to json later and keep the original response here. - content = response.read() + content = response.read() if response else "" msg = "%s - %s" % (str(http_code), http_readable) result = RESULT( From e01f98e881d0263f752d34ddc62b1ae7f17511a5 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Thu, 30 Nov 2023 09:40:54 +0100 Subject: [PATCH 05/37] Update imports with new collection name. --- plugins/modules/user.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 06882962c..b56197d70 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -167,8 +167,8 @@ import json from ansible.module_utils.basic import AnsibleModule -from ansible_collections.tribe29.checkmk.plugins.module_utils.api import CheckmkAPI -from ansible_collections.tribe29.checkmk.plugins.module_utils.utils import ( +from ansible_collections.checkmk.general.plugins.module_utils.api import CheckmkAPI +from ansible_collections.checkmk.general.plugins.module_utils.utils import ( result_as_dict, ) From ad0ba74c0465acb8857b550333e1e3f4c1bb96d6 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Fri, 22 Dec 2023 15:31:54 +0100 Subject: [PATCH 06/37] Inital push of rewrite --- plugins/modules/tag_group.py | 467 ++++++++---------- .../targets/tag_group/tasks/test.yml | 52 +- .../targets/tag_group/vars/main.yml | 60 ++- 3 files changed, 261 insertions(+), 318 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 5e3868158..1cb9770d7 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -1,7 +1,8 @@ #!/usr/bin/python # -*- encoding: utf-8; py-indent-offset: 4 -*- -# Copyright: (c) 2022, Stefan Mühling & +# Copyright: (c) 2023, Max Sickora & +# Stefan Mühling & # Robin Gierse # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) @@ -25,11 +26,12 @@ extends_documentation_fragment: [checkmk.general.common] options: - id: - description: The id of the tag_group to be created/ + name: + description: The name of the tag_group to be created/ modified/deleted. default: "" type: str + aliases: ["id"] title: description: The title of the tag_group default: "" @@ -38,11 +40,20 @@ description: The topic of the tag_group default: "" type: str - choices: + help: + description: The help of the tag_group + default: "" + type: str + tags: description: The list of the tags for the tag_group as dicts. default: [] type: list elements: dict + aliases: ["choices"] + repair: + description: Give permission to update or remove the tag automatically on hosts using it. + default: "False" + type: bool state: description: The desired state default: "present" @@ -50,7 +61,7 @@ type: str author: - - Stefan Mühling (@muehlings) + - Max Sickora (@Max-checkmk) """ EXAMPLES = r""" @@ -60,20 +71,21 @@ site: "my_site" automation_user: "my_user" automation_secret: "my_secret" - id: Virtualization - title: Virtualization - topic: My_Tags - choices: - - id: No_Virtualization - title: No Virtualization - - id: ESXi - title: ESXi - - id: vCenter - title: vCenter - - id: HyperV - title: HyperV - - id: KVM - title: KVM + name: Datacenter + title: Datacenter + topic: Custom_Tags + help: "something useful" + tags: + - ident: No_Datacenter + title: No Datacenter + - ident: Datacenter 1 + title: Datacenter 2 + - ident: Datacenter 2 + title: Datacenter 2 + - ident: Datacenter US + title: Datacenter US + - ident: Datacenter ASIA + title: Datacenter ASIA state: present """ @@ -90,180 +102,137 @@ sample: 'OK' """ - -import json +import time from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.urls import fetch_url - - -def read_tag_group(module, base_url, headers): - result = dict( - changed=False, failed=False, http_code="", msg="", current_tag_group={}, etag="" - ) - - current_state = "unknown" - current_tag_group = dict(title="", topic="", tags=[], ident="") - etag = "" - - ident = module.params.get("id", "") - - api_endpoint = "/objects/host_tag_group/" + ident - url = base_url + api_endpoint - - response, info = fetch_url(module, url, data=None, headers=headers, method="GET") - - response_content = "" - - http_code = info["status"] - try: - response_content = response.read() - except Exception: - response_content = {} - - msg = info["msg"] - - if info["status"] == 200: - current_state = "present" - etag = info.get("etag", "") - - extensions = json.loads(response_content).get("extensions", {}) - current_tag_group["tags"] = extensions["tags"] - current_tag_group["topic"] = extensions["topic"] - current_tag_group["title"] = json.loads(response_content).get("title", "") - current_tag_group["ident"] = json.loads(response_content).get("id", "") - - for d in current_tag_group["tags"]: - d["ident"] = d.pop("id") - d.pop("aux_tags") - - else: - current_state = "absent" - - result["current_tag_group"] = current_tag_group - result["msg"] = str(http_code) + " - " + msg - result["http_code"] = http_code - result["state"] = current_state - result["etag"] = etag - - return result - - -def create_tag_group(module, base_url, headers): - result = dict(changed=False, failed=False, http_code="", msg="") - - changed = False - failed = False - http_code = "" - - ident = module.params.get("id", "") - tag_group = {} - tag_group["ident"] = ident - tag_group["title"] = module.params.get("title", "") - tag_group["topic"] = module.params.get("topic", "") - tag_group["tags"] = module.params.get("choices", "") - for d in tag_group["tags"]: - d["ident"] = d.pop("id") - - api_endpoint = "/domain-types/host_tag_group/collections/all" - url = base_url + api_endpoint - response, info = fetch_url( - module, url, module.jsonify(tag_group), headers=headers, method="POST" - ) - - http_code = info["status"] - msg = info["msg"] - - if info["status"] != 200: - failed = True - - result["msg"] = str(http_code) + " - " + msg - result["changed"] = changed - result["failed"] = failed - result["http_code"] = http_code - result["info"] = info - - return result - - -def update_tag_group(module, base_url, headers, etag): - result = dict(changed=False, failed=False, http_code="", msg="") - - changed = False - failed = False - http_code = "" - - ident = module.params.get("id", "") - tag_group = {} - tag_group["repair"] = True - tag_group["title"] = module.params.get("title", "") - tag_group["topic"] = module.params.get("topic", "") - tag_group["tags"] = module.params.get("choices", "") - for d in tag_group["tags"]: - d["ident"] = d.pop("id") - - api_endpoint = "/objects/host_tag_group/" + ident - url = base_url + api_endpoint - headers["If-Match"] = etag - response, info = fetch_url( - module, url, module.jsonify(tag_group), headers=headers, method="PUT" - ) - - http_code = info["status"] - msg = info["msg"] - - if info["status"] != 200: - failed = True - - result["msg"] = str(http_code) + " - " + msg - result["changed"] = changed - result["failed"] = failed - result["http_code"] = http_code - result["info"] = info - - return result - - -def delete_tag_group(module, base_url, headers, etag): - result = dict(changed=False, failed=False, http_code="", msg="") - - changed = False - failed = False - http_code = "" - - ident = module.params.get("id") - tag_group = {} - tag_group["repair"] = True - tag_group["title"] = module.params.get("title", "") - tag_group["topic"] = module.params.get("topic", "") - tag_group["tags"] = module.params.get("choices", "") - for d in tag_group["tags"]: - d["ident"] = d.pop("id") - - api_endpoint = "/objects/host_tag_group/" + ident - url = base_url + api_endpoint - headers["If-Match"] = etag - response, info = fetch_url( - module, url, module.jsonify(tag_group), headers=headers, method="DELETE" - ) - - http_code = info["status"] - msg = info["msg"] - - if info["status"] != 204: - failed = True - - result["msg"] = str(http_code) + " - " + msg - result["changed"] = changed - result["failed"] = failed - result["http_code"] = http_code - result["info"] = info - - return result +from ansible_collections.checkmk.general.plugins.module_utils.api import CheckmkAPI +from ansible_collections.checkmk.general.plugins.module_utils.types import RESULT +from ansible_collections.checkmk.general.plugins.module_utils.utils import ( + result_as_dict, +) + +# from ansible_collections.checkmk.general.plugins.module_utils.version import ( +# CheckmkVersion, +# ) + +# We count 404 not as failed, because we want to know if the taggroup exists or not. +HTTP_CODES_GET = { + # http_code: (changed, failed, "Message") + 200: (True, False, "OK: The operation was done successfully."), + 404: (False, False, "Not Found: The requested object has not been found."), + 500: (False, True, "General Server Error."), +} + +HTTP_CODES_DELETE = { + # http_code: (changed, failed, "Message") + 405: ( + False, + True, + "Method Not Allowed: This request is only allowed with other HTTP methods", + ), + 500: (False, True, "General Server Error."), +} + +HTTP_CODES_CREATE = { + # http_code: (changed, failed, "Message") + 200: (True, False, "OK: The operation was done successfully."), + 500: (False, True, "General Server Error."), +} + +HTTP_CODES_UPDATE = { + # http_code: (changed, failed, "Message") + 200: (True, False, "OK: The operation was done successfully."), + 401: (False, True, "Unauthorized: The user is not authorized to do this request"), + 405: ( + False, + True, + "Method Not Allowed: This request is only allowed with other HTTP methods", + ), + 500: (False, True, "General Server Error."), +} + + +class TaggroupCreateAPI(CheckmkAPI): + def post(self): + if not self.params.get("title") or not self.params.get("tags"): + result = RESULT( + http_code=0, + msg="Need parameter title and tags to create hosttag", + content="", + etag="", + failed=True, + changed=False, + ) + return result + + else: + data = { + "ident": self.params.get("name", ""), + "title": self.params.get("title", ""), + "topic": self.params.get("topic", ""), + "help": self.params.get("help", ""), + "tags": self.params.get("tags", ""), + } + + # Remove all keys without value, as otherwise they would be None. + data = {key: val for key, val in data.items() if val} + + return self._fetch( + code_mapping=HTTP_CODES_CREATE, + endpoint="/domain-types/host_tag_group/collections/all", + data=data, + method="POST", + ) + + +class TaggroupUpdateAPI(CheckmkAPI): + def put(self): + data = { + "title": self.params.get("title", ""), + "topic": self.params.get("topic", ""), + "help": self.params.get("help", ""), + "tags": self.params.get("tags", ""), + "repair": self.params.get("repair"), + } + + # Remove all keys without value, as they would be emptied. + data = {key: val for key, val in data.items() if val} + + return self._fetch( + code_mapping=HTTP_CODES_UPDATE, + endpoint="/objects/host_tag_group/%s" % self.params.get("name"), + data=data, + method="PUT", + ) + + +class TaggroupDeleteAPI(CheckmkAPI): + def delete(self): + data = { + "repair": self.params.get("repair"), + } + + return self._fetch( + code_mapping=HTTP_CODES_DELETE, + endpoint="/objects/host_tag_group/%s" % self.params.get("name"), + data=data, + method="DELETE", + ) + + +class TaggroupGetAPI(CheckmkAPI): + def get(self): + data = {} + + return self._fetch( + code_mapping=HTTP_CODES_GET, + endpoint="/objects/host_tag_group/%s" % self.params.get("name"), + data=data, + method="GET", + ) def run_module(): - # define available arguments/parameters a user can pass to the module module_args = dict( server_url=dict(type="str", required=True), site=dict(type="str", required=True), @@ -271,100 +240,50 @@ def run_module(): automation_user=dict(type="str", required=True), automation_secret=dict(type="str", required=True, no_log=True), title=dict(type="str", default=""), - id=dict(type="str", default=""), + name=dict(type="str", default="", aliases=["id"]), topic=dict(type="str", default=""), - choices=dict(type="list", elements="dict", default=[]), + help=dict(type="str", default=""), + tags=dict(type="list", elements="dict", default=[], aliases=["choices"]), + repair=dict(type="bool", default="False"), state=dict(type="str", default="present", choices=["present", "absent"]), ) module = AnsibleModule(argument_spec=module_args, supports_check_mode=False) - # Declare headers including authentication to send to the Checkmk API - headers = { - "Accept": "application/json", - "Content-Type": "application/json", - "Authorization": "Bearer %s %s" - % ( - module.params.get("automation_user", ""), - module.params.get("automation_secret", ""), - ), - } - - state = module.params.get("state", "present") - - base_url = "%s/%s/check_mk/api/1.0" % ( - module.params.get("server_url", ""), - module.params.get("site", ""), + result = RESULT( + http_code=0, + msg="Nothing to be done", + content="", + etag="", + failed=False, + changed=False, ) - # read current state (GET) - result = read_tag_group(module, base_url, headers) - msg_tokens = [] - - # tag_group is "present" - if result["etag"] != "": - # tag_group needs to be deleted (DELETE) - if state == "absent": - result = delete_tag_group(module, base_url, headers, result["etag"]) - msg_tokens.append("Tag group deleted.") - result["changed"] = True - # tag_group needs to be updated (PUT) - elif state == "present": - choices = module.params.get("choices") - current_choices = result["current_tag_group"]["tags"] - for d in current_choices: - d["id"] = d.pop("ident") - pairs = zip(choices, current_choices) - current_len = len(current_choices) - current_etag = result["etag"] - current_title = result["current_tag_group"]["title"] - current_topic = result["current_tag_group"]["topic"] - changed_len = False - changed_content = False - changed_title = False - changed_topic = False - if not all(a == b for a, b in pairs): - changed_content = True - msg_tokens.append("Content of choices changed.") - if len(module.params.get("choices")) != current_len: - changed_len = True - msg_tokens.append("Number of choices changed.") - if module.params.get("title") != current_title: - changed_title = True - msg_tokens.append("Title changed.") - if module.params.get("topic") != current_topic: - changed_topic = True - msg_tokens.append("Topic changed.") - if ( - changed_content is True - or changed_len is True - or changed_title is True - or changed_topic is True - ): - result = update_tag_group(module, base_url, headers, current_etag) - result["changed"] = True - else: - msg_tokens.append("Tag group as desired. Nothing to do.") - - else: - # tag_group is "absent" - if state == "absent": - # nothing to do - msg_tokens.append("Nothing to do.") - result["changed"] = False - elif state == "present": - # tag_group needs to be created (POST) - result = create_tag_group(module, base_url, headers) - msg_tokens.append("Tag group created.") - result["changed"] = True - - if len(msg_tokens) > 0: - result["msg"] = " ".join(msg_tokens) - - if result["failed"]: - module.fail_json(**result) - - module.exit_json(**result) + if module.params.get("state") == "present": + taggroupget = TaggroupGetAPI(module) + result = taggroupget.get() + + if result.http_code == 200: + taggroupupdate = TaggroupUpdateAPI(module) + taggroupupdate.headers["If-Match"] = result.etag + result = taggroupupdate.put() + + time.sleep(3) + + elif result.http_code == 404: + taggroupcreate = TaggroupCreateAPI(module) + + result = taggroupcreate.post() + + time.sleep(3) + + if module.params.get("state") == "absent": + taggroupdelete = TaggroupDeleteAPI(module) + result = taggroupdelete.delete() + + time.sleep(3) + + module.exit_json(**result_as_dict(result)) def main(): diff --git a/tests/integration/targets/tag_group/tasks/test.yml b/tests/integration/targets/tag_group/tasks/test.yml index 4e1e98299..b590d338d 100644 --- a/tests/integration/targets/tag_group/tasks/test.yml +++ b/tests/integration/targets/tag_group/tasks/test.yml @@ -5,22 +5,14 @@ site: "{{ outer_item.site }}" automation_user: "{{ checkmk_var_automation_user }}" automation_secret: "{{ checkmk_var_automation_secret }}" - id: Virtualization - title: Virtualization - topic: My_Tag_Group - choices: - - id: No_Virtualization - title: No Virtualization - - id: ESXi - title: ESXi - - id: vCenter - title: vCenter - - id: HyperV - title: Hyper - - id: KVM - title: KVM + name: "{{ item.name }}" + title: "{{ item.title }}" + topic: "{{ item.topic }}" + help: "{{ item.help }}" + tags: "{{ item.tags }}" state: "present" delegate_to: localhost + loop: "{{ checkmk_taggroups_create }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate changes." activation: @@ -37,20 +29,14 @@ site: "{{ outer_item.site }}" automation_user: "{{ checkmk_var_automation_user }}" automation_secret: "{{ checkmk_var_automation_secret }}" - id: Virtualization - title: Hypervisors - topic: My_Tag_Group - choices: - - id: No_Virtualization - title: No Virtualization - - id: ESXi - title: ESXi - - id: vCenter - title: vCenter - - id: HyperV - title: Hyper + name: "{{ item.name }}" + title: "{{ item.title }}" + topic: "{{ item.topic }}" + help: "{{ item.help }}" + tags: "{{ item.tags }}" state: "present" delegate_to: localhost + loop: "{{ checkmk_taggroups_update }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate changes." activation: @@ -67,20 +53,10 @@ site: "{{ outer_item.site }}" automation_user: "{{ checkmk_var_automation_user }}" automation_secret: "{{ checkmk_var_automation_secret }}" - id: Virtualization - title: Hypervisors - topic: My_Tag_Group - choices: - - id: No_Virtualization - title: No Virtualization - - id: ESXi - title: ESXi - - id: vCenter - title: vCenter - - id: HyperV - title: Hyper + name: "{{ item.name }}" state: "absent" delegate_to: localhost + loop: "{{ checkmk_taggroups_delete }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate changes." activation: diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index e8f3dea77..19861446b 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -1,14 +1,8 @@ --- test_sites: - - version: "2.2.0p17" - edition: "cme" - site: "stable_cme" - version: "2.2.0p17" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" - edition: "cee" - site: "stable_ent" - version: "2.1.0p37" edition: "cre" site: "old_raw" @@ -31,3 +25,57 @@ checkmk_server_edition_mapping: cee: enterprise cce: cloud cme: managed + +checkmk_taggroups_create: + - name: Datacenter + title: Datacenter + topic: Custom_Tags + help: "something useful" + tags: + - ident: No_Datacenter + title: No Datacenter + - ident: Datacenter 1 + title: Datacenter 2 + - ident: Datacenter 2 + title: Datacenter 2 + - ident: Datacenter US + title: Datacenter US + - ident: Datacenter ASIA + title: Datacenter ASIA + - name: Supporter + title: Supporter + topic: Custom_Tags + help: "Who to blame" + tags: + - ident: Nobody + title: Nobody + - ident: RoyTrenneman + title: Roy Trenneman + - ident: MauriceMoss + title: Maurice Moss + - ident: JenBarber + title: Jen Barber + +checkmk_taggroups_update: + - name: Datacenter + title: Datacenter + topic: Custom_Tags + help: "something even more useful" + tags: + - ident: No_Datacenter + title: No Datacenter + - ident: Datacenter 1 + title: Datacenter 2 + - ident: Datacenter 2 + title: Datacenter 2 + - ident: Datacenter 3 + title: Datacenter 3 + - ident: Datacenter US + title: Datacenter US + - ident: Datacenter ASIA + title: Datacenter ASIA + - ident: Datacenter AFRICA + title: Datacenter AFRICA + +checkmk_taggroups_delete: + - name: Supporter \ No newline at end of file From 22e537325f80a1595415a52fe15ce1a9787bd081 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 06:15:55 +0000 Subject: [PATCH 07/37] Bump actions/setup-python from 4 to 5 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/ans-int-test-lkp-rules.yaml | 2 +- .github/workflows/ans-int-test-lkp-rulesets.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ans-int-test-lkp-rules.yaml b/.github/workflows/ans-int-test-lkp-rules.yaml index ca55668b3..61d8b5ebf 100644 --- a/.github/workflows/ans-int-test-lkp-rules.yaml +++ b/.github/workflows/ans-int-test-lkp-rules.yaml @@ -54,7 +54,7 @@ jobs: path: ansible_collections/${{env.NAMESPACE}}/${{env.COLLECTION_NAME}} - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' diff --git a/.github/workflows/ans-int-test-lkp-rulesets.yaml b/.github/workflows/ans-int-test-lkp-rulesets.yaml index 392fa5e76..601979fd8 100644 --- a/.github/workflows/ans-int-test-lkp-rulesets.yaml +++ b/.github/workflows/ans-int-test-lkp-rulesets.yaml @@ -54,7 +54,7 @@ jobs: path: ansible_collections/${{env.NAMESPACE}}/${{env.COLLECTION_NAME}} - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' From deb46c04226fb4d53c7b6c80e519173ceb2d4bbc Mon Sep 17 00:00:00 2001 From: meni2029 <56351431+meni2029@users.noreply.github.com> Date: Wed, 27 Dec 2023 17:28:12 +0100 Subject: [PATCH 08/37] Fix idempotency for relative rule location --- changelogs/fragments/rule.yml | 2 ++ plugins/modules/rule.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 changelogs/fragments/rule.yml diff --git a/changelogs/fragments/rule.yml b/changelogs/fragments/rule.yml new file mode 100644 index 000000000..43442066a --- /dev/null +++ b/changelogs/fragments/rule.yml @@ -0,0 +1,2 @@ +bugfixes: + - Rule module - Fix idempotency for rule location relative to another rule_id, by getting the target folder from neighbour rule. diff --git a/plugins/modules/rule.py b/plugins/modules/rule.py index f3c24e578..01c280ccf 100644 --- a/plugins/modules/rule.py +++ b/plugins/modules/rule.py @@ -258,6 +258,23 @@ def get_rules_in_ruleset(module, base_url, headers, ruleset): return json.loads(response.read().decode("utf-8")) +def get_rule_by_id(module, base_url, headers, rule_id): + api_endpoint = "/objects/rule/" + rule_id + + url = base_url + api_endpoint + + response, info = fetch_url(module, url, headers=headers, method="GET") + + if info["status"] not in [200, 204]: + exit_failed( + module, + "Error calling API. HTTP code %d. Details: %s, " + % (info["status"], info["body"]), + ) + + return json.loads(response.read().decode("utf-8")) + + def get_existing_rule(module, base_url, headers, ruleset, rule): # Get rules in ruleset rules = get_rules_in_ruleset(module, base_url, headers, ruleset) @@ -266,6 +283,13 @@ def get_existing_rule(module, base_url, headers, ruleset, rule): if exc is not None: exit_failed(module, "value_raw in rule has invalid format") + # Get folder from neighbour rule if relative rule_id is given in location + if rule["location"]["rule_id"] is not None: + neighbour_rule = get_rule_by_id( + module, base_url, headers, rule["location"]["rule_id"] + ) + rule["folder"] = neighbour_rule["extensions"]["folder"] + if rules is not None: # Loop through all rules for r in rules.get("value"): From a03758dea76e595ffc6ab697c92ad70e4d18031c Mon Sep 17 00:00:00 2001 From: meni2029 <56351431+meni2029@users.noreply.github.com> Date: Wed, 27 Dec 2023 17:56:37 +0100 Subject: [PATCH 09/37] Fix idempotency for relative rule location --- changelogs/fragments/rule.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelogs/fragments/rule.yml b/changelogs/fragments/rule.yml index 43442066a..4141603de 100644 --- a/changelogs/fragments/rule.yml +++ b/changelogs/fragments/rule.yml @@ -1,2 +1,2 @@ -bugfixes: - - Rule module - Fix idempotency for rule location relative to another rule_id, by getting the target folder from neighbour rule. +bugfixes: + - Rule module - Fix idempotency for rule location relative to another rule_id, by getting the target folder from neighbour rule. From 25328529283748d2ecf49e739e0d1814e480cccb Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 29 Dec 2023 12:38:21 +0100 Subject: [PATCH 10/37] Add conditionals to skip tasks. --- roles/server/tasks/Debian.yml | 1 + roles/server/tasks/RedHat.yml | 1 + roles/server/tasks/main.yml | 125 ++++++++++++++++++---------------- 3 files changed, 68 insertions(+), 59 deletions(-) diff --git a/roles/server/tasks/Debian.yml b/roles/server/tasks/Debian.yml index b7493eb94..d333332ff 100644 --- a/roles/server/tasks/Debian.yml +++ b/roles/server/tasks/Debian.yml @@ -1,5 +1,6 @@ --- - name: "Install Checkmk Server." + when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages become: true ansible.builtin.apt: deb: "/tmp/{{ checkmk_server_setup_file }}" diff --git a/roles/server/tasks/RedHat.yml b/roles/server/tasks/RedHat.yml index 485bef303..94685ff74 100644 --- a/roles/server/tasks/RedHat.yml +++ b/roles/server/tasks/RedHat.yml @@ -77,6 +77,7 @@ - enable-repos - name: "Install Checkmk Server." + when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages become: true ansible.builtin.yum: name: "/tmp/{{ checkmk_server_setup_file }}" diff --git a/roles/server/tasks/main.yml b/roles/server/tasks/main.yml index b75edf746..125818fb4 100644 --- a/roles/server/tasks/main.yml +++ b/roles/server/tasks/main.yml @@ -17,73 +17,80 @@ - include-os-family-vars - install-package -- name: "Update APT Cache." - become: true - ansible.builtin.apt: - update_cache: true - when: ansible_os_family == "Debian" +- name: "Get installed Packages." + ansible.builtin.package_facts: -- name: "Install Checkmk Prerequisites." - become: true - ansible.builtin.package: - name: "{{ item }}" - state: present - loop: - - "{{ checkmk_server_prerequisites }}" - tags: - - install-package - - install-prerequisites - -- name: "Download Checkmk Server Setup." - ansible.builtin.get_url: - url: "{{ checkmk_server_download_url }}" - dest: "/tmp/{{ checkmk_server_setup_file }}" - mode: "0640" - url_username: "{{ checkmk_server_download_user | default(omit) }}" - url_password: "{{ checkmk_server_download_pass | default(omit) }}" - retries: 3 - tags: - - download-package - -- name: "Download Checkmk GPG Key." - ansible.builtin.get_url: - url: "https://download.checkmk.com/checkmk/Check_MK-pubkey.gpg" - dest: "/tmp/Check_MK-pubkey.gpg" - mode: "0640" - when: checkmk_server_verify_setup | bool - retries: 3 - tags: - - download-gpg-key +- name: "Ensure Prerequisites are met." + when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages + block: + + - name: "Update APT Cache." + become: true + ansible.builtin.apt: + update_cache: true + when: ansible_os_family == "Debian" + + - name: "Install Checkmk Prerequisites." + become: true + ansible.builtin.package: + name: "{{ item }}" + state: present + loop: + - "{{ checkmk_server_prerequisites }}" + tags: + - install-package + - install-prerequisites -- name: "GPG Verification on Debian Derivatives." - when: checkmk_server_verify_setup | bool and ansible_os_family == "Debian" +- name: "Perform Downloads." + when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages block: - - name: "Import Checkmk GPG Key." - ansible.builtin.command: "gpg --import /tmp/Check_MK-pubkey.gpg" - register: checkmk_server_gpg_import + + - name: "Download Checkmk Server Setup." + ansible.builtin.get_url: + url: "{{ checkmk_server_download_url }}" + dest: "/tmp/{{ checkmk_server_setup_file }}" + mode: "0640" + url_username: "{{ checkmk_server_download_user | default(omit) }}" + url_password: "{{ checkmk_server_download_pass | default(omit) }}" + retries: 3 + tags: + - download-package + + - name: "Download Checkmk GPG Key." + ansible.builtin.get_url: + url: "https://download.checkmk.com/checkmk/Check_MK-pubkey.gpg" + dest: "/tmp/Check_MK-pubkey.gpg" + mode: "0640" when: checkmk_server_verify_setup | bool - changed_when: "'imported: 1' in checkmk_server_gpg_import" + retries: 3 tags: - - import-gpg-key + - download-gpg-key - - name: "Verify Checkmk Setup." - ansible.builtin.command: gpg --verify "/tmp/{{ checkmk_server_setup_file }}" - register: checkmk_server_verify_state - changed_when: false - failed_when: "'Bad signature' in checkmk_server_verify_state.stderr" + - name: "GPG Verification on Debian Derivatives." + when: checkmk_server_verify_setup | bool and ansible_os_family == "Debian" + block: + - name: "Import Checkmk GPG Key." + ansible.builtin.command: "gpg --import /tmp/Check_MK-pubkey.gpg" + register: checkmk_server_gpg_import + when: checkmk_server_verify_setup | bool + changed_when: "'imported: 1' in checkmk_server_gpg_import" + tags: + - import-gpg-key - - name: "Print Verification Output." - ansible.builtin.debug: - msg: "{{ checkmk_server_verify_state.stderr_lines }}" + - name: "Verify Checkmk Setup." + ansible.builtin.command: gpg --verify "/tmp/{{ checkmk_server_setup_file }}" + register: checkmk_server_verify_state + changed_when: false + failed_when: "'Bad signature' in checkmk_server_verify_state.stderr" -- name: "Import Checkmk GPG Key." - become: true - ansible.builtin.rpm_key: - key: "/tmp/Check_MK-pubkey.gpg" - state: present - when: checkmk_server_verify_setup | bool and ansible_os_family == "RedHat" - tags: - - import-gpg-key + - name: "Import Checkmk GPG Key." + become: true + ansible.builtin.rpm_key: + key: "/tmp/Check_MK-pubkey.gpg" + state: present + when: checkmk_server_verify_setup | bool and ansible_os_family == "RedHat" + tags: + - import-gpg-key - name: Include OS Family specific Playbook. ansible.builtin.include_tasks: "{{ ansible_os_family }}.yml" From 87cab653b2c3a28d1b80dc447b7ad1411cbeda49 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 29 Dec 2023 13:03:30 +0100 Subject: [PATCH 11/37] Revert first "speed up", as it can break, if required packages change. --- roles/server/tasks/main.yml | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/roles/server/tasks/main.yml b/roles/server/tasks/main.yml index 125818fb4..7f9461700 100644 --- a/roles/server/tasks/main.yml +++ b/roles/server/tasks/main.yml @@ -20,28 +20,24 @@ - name: "Get installed Packages." ansible.builtin.package_facts: -- name: "Ensure Prerequisites are met." - when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages - block: - - - name: "Update APT Cache." - become: true - ansible.builtin.apt: - update_cache: true - when: ansible_os_family == "Debian" +- name: "Update APT Cache." + become: true + ansible.builtin.apt: + update_cache: true + when: ansible_os_family == "Debian" - - name: "Install Checkmk Prerequisites." - become: true - ansible.builtin.package: - name: "{{ item }}" - state: present - loop: - - "{{ checkmk_server_prerequisites }}" - tags: - - install-package - - install-prerequisites +- name: "Install Checkmk Prerequisites." + become: true + ansible.builtin.package: + name: "{{ item }}" + state: present + loop: + - "{{ checkmk_server_prerequisites }}" + tags: + - install-package + - install-prerequisites -- name: "Perform Downloads." +- name: "Downloads Management." when: not 'check-mk-' + checkmk_server_edition_mapping[checkmk_server_edition] + '-' +checkmk_server_version in ansible_facts.packages block: From 39d6ca1a6c3eb03337bb6bae044dd4ac1551becd Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 29 Dec 2023 13:03:58 +0100 Subject: [PATCH 12/37] Add some facts files. --- misc/debian-12.package_facts | 5408 ++++++++++++++++++++++++ misc/ubuntu-22.package_facts | 7588 ++++++++++++++++++++++++++++++++++ 2 files changed, 12996 insertions(+) create mode 100644 misc/debian-12.package_facts create mode 100644 misc/ubuntu-22.package_facts diff --git a/misc/debian-12.package_facts b/misc/debian-12.package_facts new file mode 100644 index 000000000..ab7f5f3d6 --- /dev/null +++ b/misc/debian-12.package_facts @@ -0,0 +1,5408 @@ +debsible | SUCCESS => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python3", + "packages": { + "adduser": [ + { + "arch": "all", + "category": "admin", + "name": "adduser", + "origin": "Debian", + "source": "apt", + "version": "3.134" + } + ], + "apache2": [ + { + "arch": "amd64", + "category": "httpd", + "name": "apache2", + "origin": "Debian", + "source": "apt", + "version": "2.4.57-2" + } + ], + "apache2-bin": [ + { + "arch": "amd64", + "category": "httpd", + "name": "apache2-bin", + "origin": "Debian", + "source": "apt", + "version": "2.4.57-2" + } + ], + "apache2-data": [ + { + "arch": "all", + "category": "httpd", + "name": "apache2-data", + "origin": "Debian", + "source": "apt", + "version": "2.4.57-2" + } + ], + "apache2-utils": [ + { + "arch": "amd64", + "category": "httpd", + "name": "apache2-utils", + "origin": "Debian", + "source": "apt", + "version": "2.4.57-2" + } + ], + "apparmor": [ + { + "arch": "amd64", + "category": "admin", + "name": "apparmor", + "origin": "Debian", + "source": "apt", + "version": "3.0.8-3" + } + ], + "apt": [ + { + "arch": "amd64", + "category": "admin", + "name": "apt", + "origin": "Debian", + "source": "apt", + "version": "2.6.1" + } + ], + "apt-listchanges": [ + { + "arch": "all", + "category": "utils", + "name": "apt-listchanges", + "origin": "Debian", + "source": "apt", + "version": "3.24" + } + ], + "apt-utils": [ + { + "arch": "amd64", + "category": "admin", + "name": "apt-utils", + "origin": "Debian", + "source": "apt", + "version": "2.6.1" + } + ], + "base-files": [ + { + "arch": "amd64", + "category": "admin", + "name": "base-files", + "origin": "", + "source": "apt", + "version": "12.4+deb12u2" + } + ], + "base-passwd": [ + { + "arch": "amd64", + "category": "admin", + "name": "base-passwd", + "origin": "Debian", + "source": "apt", + "version": "3.6.1" + } + ], + "bash": [ + { + "arch": "amd64", + "category": "shells", + "name": "bash", + "origin": "Debian", + "source": "apt", + "version": "5.2.15-2+b2" + } + ], + "bash-completion": [ + { + "arch": "all", + "category": "shells", + "name": "bash-completion", + "origin": "Debian", + "source": "apt", + "version": "1:2.11-6" + } + ], + "bind9-dnsutils": [ + { + "arch": "amd64", + "category": "net", + "name": "bind9-dnsutils", + "origin": "Debian", + "source": "apt", + "version": "1:9.18.19-1~deb12u1" + } + ], + "bind9-host": [ + { + "arch": "amd64", + "category": "net", + "name": "bind9-host", + "origin": "Debian", + "source": "apt", + "version": "1:9.18.19-1~deb12u1" + } + ], + "bind9-libs": [ + { + "arch": "amd64", + "category": "libs", + "name": "bind9-libs", + "origin": "Debian", + "source": "apt", + "version": "1:9.18.19-1~deb12u1" + } + ], + "binutils": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "binutils-common": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils-common", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "binutils-x86-64-linux-gnu": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils-x86-64-linux-gnu", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "bsdextrautils": [ + { + "arch": "amd64", + "category": "utils", + "name": "bsdextrautils", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "bsdutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "bsdutils", + "origin": "Debian", + "source": "apt", + "version": "1:2.38.1-5+b1" + } + ], + "busybox": [ + { + "arch": "amd64", + "category": "utils", + "name": "busybox", + "origin": "Debian", + "source": "apt", + "version": "1:1.35.0-4+b3" + } + ], + "bzip2": [ + { + "arch": "amd64", + "category": "utils", + "name": "bzip2", + "origin": "Debian", + "source": "apt", + "version": "1.0.8-5+b1" + } + ], + "ca-certificates": [ + { + "arch": "all", + "category": "misc", + "name": "ca-certificates", + "origin": "Debian", + "source": "apt", + "version": "20230311" + } + ], + "check-mk-raw-2.2.0p8": [ + { + "arch": "amd64", + "category": "admin", + "name": "check-mk-raw-2.2.0p8", + "origin": "", + "source": "apt", + "version": "0.bookworm" + } + ], + "console-setup": [ + { + "arch": "all", + "category": "utils", + "name": "console-setup", + "origin": "Debian", + "source": "apt", + "version": "1.221" + } + ], + "console-setup-linux": [ + { + "arch": "all", + "category": "utils", + "name": "console-setup-linux", + "origin": "Debian", + "source": "apt", + "version": "1.221" + } + ], + "coreutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "coreutils", + "origin": "Debian", + "source": "apt", + "version": "9.1-1" + } + ], + "cpio": [ + { + "arch": "amd64", + "category": "utils", + "name": "cpio", + "origin": "Debian", + "source": "apt", + "version": "2.13+dfsg-7.1" + } + ], + "cron": [ + { + "arch": "amd64", + "category": "admin", + "name": "cron", + "origin": "Debian", + "source": "apt", + "version": "3.0pl1-162" + } + ], + "cron-daemon-common": [ + { + "arch": "all", + "category": "admin", + "name": "cron-daemon-common", + "origin": "Debian", + "source": "apt", + "version": "3.0pl1-162" + } + ], + "curl": [ + { + "arch": "amd64", + "category": "web", + "name": "curl", + "origin": "Debian", + "source": "apt", + "version": "7.88.1-10+deb12u5" + } + ], + "dash": [ + { + "arch": "amd64", + "category": "shells", + "name": "dash", + "origin": "Debian", + "source": "apt", + "version": "0.5.12-2" + } + ], + "dbus": [ + { + "arch": "amd64", + "category": "admin", + "name": "dbus", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "dbus-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "dbus-bin", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "dbus-daemon": [ + { + "arch": "amd64", + "category": "admin", + "name": "dbus-daemon", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "dbus-session-bus-common": [ + { + "arch": "all", + "category": "admin", + "name": "dbus-session-bus-common", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "dbus-system-bus-common": [ + { + "arch": "all", + "category": "admin", + "name": "dbus-system-bus-common", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "dbus-user-session": [ + { + "arch": "amd64", + "category": "admin", + "name": "dbus-user-session", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "debconf": [ + { + "arch": "all", + "category": "admin", + "name": "debconf", + "origin": "Debian", + "source": "apt", + "version": "1.5.82" + } + ], + "debconf-i18n": [ + { + "arch": "all", + "category": "localization", + "name": "debconf-i18n", + "origin": "Debian", + "source": "apt", + "version": "1.5.82" + } + ], + "debian-archive-keyring": [ + { + "arch": "all", + "category": "misc", + "name": "debian-archive-keyring", + "origin": "Debian", + "source": "apt", + "version": "2023.3+deb12u1" + } + ], + "debian-faq": [ + { + "arch": "all", + "category": "doc", + "name": "debian-faq", + "origin": "Debian", + "source": "apt", + "version": "11.1" + } + ], + "debianutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "debianutils", + "origin": "Debian", + "source": "apt", + "version": "5.7-0.5~deb12u1" + } + ], + "debugedit": [ + { + "arch": "amd64", + "category": "admin", + "name": "debugedit", + "origin": "Debian", + "source": "apt", + "version": "1:5.0-5" + } + ], + "dialog": [ + { + "arch": "amd64", + "category": "misc", + "name": "dialog", + "origin": "Debian", + "source": "apt", + "version": "1.3-20230209-1" + } + ], + "dictionaries-common": [ + { + "arch": "all", + "category": "text", + "name": "dictionaries-common", + "origin": "Debian", + "source": "apt", + "version": "1.29.5" + } + ], + "diffutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "diffutils", + "origin": "Debian", + "source": "apt", + "version": "1:3.8-4" + } + ], + "dirmngr": [ + { + "arch": "amd64", + "category": "utils", + "name": "dirmngr", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "discover": [ + { + "arch": "amd64", + "category": "admin", + "name": "discover", + "origin": "Debian", + "source": "apt", + "version": "2.1.2-10" + } + ], + "discover-data": [ + { + "arch": "all", + "category": "libs", + "name": "discover-data", + "origin": "Debian", + "source": "apt", + "version": "2.2013.01.13" + } + ], + "distro-info-data": [ + { + "arch": "all", + "category": "devel", + "name": "distro-info-data", + "origin": "", + "source": "apt", + "version": "0.58" + } + ], + "dmidecode": [ + { + "arch": "amd64", + "category": "utils", + "name": "dmidecode", + "origin": "Debian", + "source": "apt", + "version": "3.4-1" + } + ], + "dmsetup": [ + { + "arch": "amd64", + "category": "admin", + "name": "dmsetup", + "origin": "Debian", + "source": "apt", + "version": "2:1.02.185-2" + } + ], + "doc-debian": [ + { + "arch": "all", + "category": "doc", + "name": "doc-debian", + "origin": "Debian", + "source": "apt", + "version": "11.3+nmu1" + } + ], + "dpkg": [ + { + "arch": "amd64", + "category": "admin", + "name": "dpkg", + "origin": "Debian", + "source": "apt", + "version": "1.21.22" + } + ], + "e2fsprogs": [ + { + "arch": "amd64", + "category": "admin", + "name": "e2fsprogs", + "origin": "Debian", + "source": "apt", + "version": "1.47.0-2" + } + ], + "eject": [ + { + "arch": "amd64", + "category": "utils", + "name": "eject", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "emacsen-common": [ + { + "arch": "all", + "category": "editors", + "name": "emacsen-common", + "origin": "Debian", + "source": "apt", + "version": "3.0.5" + } + ], + "fdisk": [ + { + "arch": "amd64", + "category": "utils", + "name": "fdisk", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "file": [ + { + "arch": "amd64", + "category": "utils", + "name": "file", + "origin": "Debian", + "source": "apt", + "version": "1:5.44-3" + } + ], + "findutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "findutils", + "origin": "Debian", + "source": "apt", + "version": "4.9.0-4" + } + ], + "firmware-linux-free": [ + { + "arch": "all", + "category": "kernel", + "name": "firmware-linux-free", + "origin": "Debian", + "source": "apt", + "version": "20200122-1" + } + ], + "fontconfig": [ + { + "arch": "amd64", + "category": "fonts", + "name": "fontconfig", + "origin": "Debian", + "source": "apt", + "version": "2.14.1-4" + } + ], + "fontconfig-config": [ + { + "arch": "amd64", + "category": "fonts", + "name": "fontconfig-config", + "origin": "Debian", + "source": "apt", + "version": "2.14.1-4" + } + ], + "fonts-dejavu-core": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-dejavu-core", + "origin": "Debian", + "source": "apt", + "version": "2.37-6" + } + ], + "fonts-liberation2": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-liberation2", + "origin": "Debian", + "source": "apt", + "version": "2.1.5-1" + } + ], + "freeipmi": [ + { + "arch": "all", + "category": "admin", + "name": "freeipmi", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1" + } + ], + "freeipmi-bmc-watchdog": [ + { + "arch": "amd64", + "category": "admin", + "name": "freeipmi-bmc-watchdog", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "freeipmi-common": [ + { + "arch": "all", + "category": "admin", + "name": "freeipmi-common", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1" + } + ], + "freeipmi-ipmidetect": [ + { + "arch": "amd64", + "category": "admin", + "name": "freeipmi-ipmidetect", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "freeipmi-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "freeipmi-tools", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "gcc-12-base": [ + { + "arch": "amd64", + "category": "libs", + "name": "gcc-12-base", + "origin": "Debian", + "source": "apt", + "version": "12.2.0-14" + } + ], + "gettext-base": [ + { + "arch": "amd64", + "category": "utils", + "name": "gettext-base", + "origin": "Debian", + "source": "apt", + "version": "0.21-12" + } + ], + "git": [ + { + "arch": "amd64", + "category": "vcs", + "name": "git", + "origin": "Debian", + "source": "apt", + "version": "1:2.39.2-1.1" + } + ], + "git-man": [ + { + "arch": "all", + "category": "doc", + "name": "git-man", + "origin": "Debian", + "source": "apt", + "version": "1:2.39.2-1.1" + } + ], + "gnupg": [ + { + "arch": "all", + "category": "utils", + "name": "gnupg", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gnupg-l10n": [ + { + "arch": "all", + "category": "localization", + "name": "gnupg-l10n", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gnupg-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "gnupg-utils", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpg": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpg-agent": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-agent", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpg-wks-client": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-wks-client", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpg-wks-server": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-wks-server", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpgconf": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgconf", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpgsm": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgsm", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "gpgv": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgv", + "origin": "Debian", + "source": "apt", + "version": "2.2.40-1.1" + } + ], + "graphviz": [ + { + "arch": "amd64", + "category": "graphics", + "name": "graphviz", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "grep": [ + { + "arch": "amd64", + "category": "utils", + "name": "grep", + "origin": "Debian", + "source": "apt", + "version": "3.8-5" + } + ], + "groff-base": [ + { + "arch": "amd64", + "category": "text", + "name": "groff-base", + "origin": "Debian", + "source": "apt", + "version": "1.22.4-10" + } + ], + "grub-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-common", + "origin": "Debian", + "source": "apt", + "version": "2.06-13+deb12u1" + } + ], + "grub-pc": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-pc", + "origin": "Debian", + "source": "apt", + "version": "2.06-13+deb12u1" + } + ], + "grub-pc-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-pc-bin", + "origin": "Debian", + "source": "apt", + "version": "2.06-13+deb12u1" + } + ], + "grub2-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub2-common", + "origin": "Debian", + "source": "apt", + "version": "2.06-13+deb12u1" + } + ], + "gzip": [ + { + "arch": "amd64", + "category": "utils", + "name": "gzip", + "origin": "Debian", + "source": "apt", + "version": "1.12-1" + } + ], + "haveged": [ + { + "arch": "amd64", + "category": "misc", + "name": "haveged", + "origin": "Debian", + "source": "apt", + "version": "1.9.14-1+b1" + } + ], + "hostname": [ + { + "arch": "amd64", + "category": "admin", + "name": "hostname", + "origin": "Debian", + "source": "apt", + "version": "3.23+nmu1" + } + ], + "htop": [ + { + "arch": "amd64", + "category": "utils", + "name": "htop", + "origin": "Debian", + "source": "apt", + "version": "3.2.2-2" + } + ], + "iamerican": [ + { + "arch": "all", + "category": "text", + "name": "iamerican", + "origin": "Debian", + "source": "apt", + "version": "3.4.05-1" + } + ], + "ibritish": [ + { + "arch": "all", + "category": "text", + "name": "ibritish", + "origin": "Debian", + "source": "apt", + "version": "3.4.05-1" + } + ], + "ienglish-common": [ + { + "arch": "all", + "category": "text", + "name": "ienglish-common", + "origin": "Debian", + "source": "apt", + "version": "3.4.05-1" + } + ], + "ifplugd": [ + { + "arch": "amd64", + "category": "net", + "name": "ifplugd", + "origin": "Debian", + "source": "apt", + "version": "0.28-19.5" + } + ], + "ifupdown": [ + { + "arch": "amd64", + "category": "admin", + "name": "ifupdown", + "origin": "Debian", + "source": "apt", + "version": "0.8.41" + } + ], + "inetutils-telnet": [ + { + "arch": "amd64", + "category": "net", + "name": "inetutils-telnet", + "origin": "Debian", + "source": "apt", + "version": "2:2.4-2+deb12u1" + } + ], + "init": [ + { + "arch": "amd64", + "category": "metapackages", + "name": "init", + "origin": "Debian", + "source": "apt", + "version": "1.65.2" + } + ], + "init-system-helpers": [ + { + "arch": "all", + "category": "admin", + "name": "init-system-helpers", + "origin": "Debian", + "source": "apt", + "version": "1.65.2" + } + ], + "initramfs-tools": [ + { + "arch": "all", + "category": "utils", + "name": "initramfs-tools", + "origin": "Debian", + "source": "apt", + "version": "0.142" + } + ], + "initramfs-tools-core": [ + { + "arch": "all", + "category": "utils", + "name": "initramfs-tools-core", + "origin": "Debian", + "source": "apt", + "version": "0.142" + } + ], + "inotify-tools": [ + { + "arch": "amd64", + "category": "misc", + "name": "inotify-tools", + "origin": "Debian", + "source": "apt", + "version": "3.22.6.0-4" + } + ], + "intel-microcode": [ + { + "arch": "amd64", + "category": "non-free-firmware/admin", + "name": "intel-microcode", + "origin": "Debian", + "source": "apt", + "version": "3.20231114.1~deb12u1" + } + ], + "iproute2": [ + { + "arch": "amd64", + "category": "net", + "name": "iproute2", + "origin": "Debian", + "source": "apt", + "version": "6.1.0-3" + } + ], + "iputils-ping": [ + { + "arch": "amd64", + "category": "net", + "name": "iputils-ping", + "origin": "Debian", + "source": "apt", + "version": "3:20221126-1" + } + ], + "isc-dhcp-client": [ + { + "arch": "amd64", + "category": "net", + "name": "isc-dhcp-client", + "origin": "Debian", + "source": "apt", + "version": "4.4.3-P1-2" + } + ], + "isc-dhcp-common": [ + { + "arch": "amd64", + "category": "net", + "name": "isc-dhcp-common", + "origin": "Debian", + "source": "apt", + "version": "4.4.3-P1-2" + } + ], + "iso-codes": [ + { + "arch": "all", + "category": "misc", + "name": "iso-codes", + "origin": "Debian", + "source": "apt", + "version": "4.15.0-1" + } + ], + "ispell": [ + { + "arch": "amd64", + "category": "text", + "name": "ispell", + "origin": "Debian", + "source": "apt", + "version": "3.4.05-1" + } + ], + "iucode-tool": [ + { + "arch": "amd64", + "category": "utils", + "name": "iucode-tool", + "origin": "Debian", + "source": "apt", + "version": "2.3.1-3" + } + ], + "kbd": [ + { + "arch": "amd64", + "category": "utils", + "name": "kbd", + "origin": "Debian", + "source": "apt", + "version": "2.5.1-1+b1" + } + ], + "keyboard-configuration": [ + { + "arch": "all", + "category": "utils", + "name": "keyboard-configuration", + "origin": "Debian", + "source": "apt", + "version": "1.221" + } + ], + "klibc-utils": [ + { + "arch": "amd64", + "category": "libs", + "name": "klibc-utils", + "origin": "Debian", + "source": "apt", + "version": "2.0.12-1" + } + ], + "kmod": [ + { + "arch": "amd64", + "category": "admin", + "name": "kmod", + "origin": "Debian", + "source": "apt", + "version": "30+20221128-1" + } + ], + "krb5-locales": [ + { + "arch": "all", + "category": "localization", + "name": "krb5-locales", + "origin": "Debian", + "source": "apt", + "version": "1.20.1-2+deb12u1" + } + ], + "laptop-detect": [ + { + "arch": "all", + "category": "utils", + "name": "laptop-detect", + "origin": "Debian", + "source": "apt", + "version": "0.16" + } + ], + "less": [ + { + "arch": "amd64", + "category": "text", + "name": "less", + "origin": "Debian", + "source": "apt", + "version": "590-2" + } + ], + "libabsl20220623": [ + { + "arch": "amd64", + "category": "libs", + "name": "libabsl20220623", + "origin": "Debian", + "source": "apt", + "version": "20220623.1-1" + } + ], + "libacl1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libacl1", + "origin": "Debian", + "source": "apt", + "version": "2.3.1-3" + } + ], + "libann0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libann0", + "origin": "Debian", + "source": "apt", + "version": "1.1.2+doc-9+b1" + } + ], + "libaom3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaom3", + "origin": "Debian", + "source": "apt", + "version": "3.6.0-1" + } + ], + "libapache2-mod-php8.2": [ + { + "arch": "amd64", + "category": "httpd", + "name": "libapache2-mod-php8.2", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "libapparmor1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapparmor1", + "origin": "Debian", + "source": "apt", + "version": "3.0.8-3" + } + ], + "libapr1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapr1", + "origin": "Debian", + "source": "apt", + "version": "1.7.2-3" + } + ], + "libaprutil1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1", + "origin": "Debian", + "source": "apt", + "version": "1.6.3-1" + } + ], + "libaprutil1-dbd-sqlite3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1-dbd-sqlite3", + "origin": "Debian", + "source": "apt", + "version": "1.6.3-1" + } + ], + "libaprutil1-ldap": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1-ldap", + "origin": "Debian", + "source": "apt", + "version": "1.6.3-1" + } + ], + "libapt-pkg6.0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapt-pkg6.0", + "origin": "Debian", + "source": "apt", + "version": "2.6.1" + } + ], + "libarchive13": [ + { + "arch": "amd64", + "category": "libs", + "name": "libarchive13", + "origin": "Debian", + "source": "apt", + "version": "3.6.2-1" + } + ], + "libargon2-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libargon2-1", + "origin": "Debian", + "source": "apt", + "version": "0~20171227-0.3+deb12u1" + } + ], + "libassuan0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libassuan0", + "origin": "Debian", + "source": "apt", + "version": "2.5.5-5" + } + ], + "libattr1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libattr1", + "origin": "Debian", + "source": "apt", + "version": "1:2.5.1-4" + } + ], + "libaudit-common": [ + { + "arch": "all", + "category": "libs", + "name": "libaudit-common", + "origin": "Debian", + "source": "apt", + "version": "1:3.0.9-1" + } + ], + "libaudit1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaudit1", + "origin": "Debian", + "source": "apt", + "version": "1:3.0.9-1" + } + ], + "libavahi-client3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-client3", + "origin": "Debian", + "source": "apt", + "version": "0.8-10" + } + ], + "libavahi-common-data": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-common-data", + "origin": "Debian", + "source": "apt", + "version": "0.8-10" + } + ], + "libavahi-common3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-common3", + "origin": "Debian", + "source": "apt", + "version": "0.8-10" + } + ], + "libavif15": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavif15", + "origin": "Debian", + "source": "apt", + "version": "0.11.1-1" + } + ], + "libbinutils": [ + { + "arch": "amd64", + "category": "devel", + "name": "libbinutils", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "libblkid1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblkid1", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "libbpf1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbpf1", + "origin": "Debian", + "source": "apt", + "version": "1:1.1.0-1" + } + ], + "libbrotli1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbrotli1", + "origin": "Debian", + "source": "apt", + "version": "1.0.9-2+b6" + } + ], + "libbsd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbsd0", + "origin": "Debian", + "source": "apt", + "version": "0.11.7-2" + } + ], + "libbz2-1.0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbz2-1.0", + "origin": "Debian", + "source": "apt", + "version": "1.0.8-5+b1" + } + ], + "libc-bin": [ + { + "arch": "amd64", + "category": "libs", + "name": "libc-bin", + "origin": "Debian", + "source": "apt", + "version": "2.36-9+deb12u3" + } + ], + "libc-l10n": [ + { + "arch": "all", + "category": "localization", + "name": "libc-l10n", + "origin": "Debian", + "source": "apt", + "version": "2.36-9+deb12u3" + } + ], + "libc6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libc6", + "origin": "Debian", + "source": "apt", + "version": "2.36-9+deb12u3" + } + ], + "libcairo2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcairo2", + "origin": "Debian", + "source": "apt", + "version": "1.16.0-7" + } + ], + "libcap-ng0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcap-ng0", + "origin": "Debian", + "source": "apt", + "version": "0.8.3-1+b3" + } + ], + "libcap2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcap2", + "origin": "Debian", + "source": "apt", + "version": "1:2.66-4" + } + ], + "libcap2-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "libcap2-bin", + "origin": "Debian", + "source": "apt", + "version": "1:2.66-4" + } + ], + "libcbor0.8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcbor0.8", + "origin": "Debian", + "source": "apt", + "version": "0.8.0-2+b1" + } + ], + "libcdb1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcdb1", + "origin": "Debian", + "source": "apt", + "version": "0.78+b1" + } + ], + "libcdt5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcdt5", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "libcgraph6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcgraph6", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "libcom-err2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcom-err2", + "origin": "Debian", + "source": "apt", + "version": "1.47.0-2" + } + ], + "libcrypt1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcrypt1", + "origin": "Debian", + "source": "apt", + "version": "1:4.4.33-2" + } + ], + "libcryptsetup12": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcryptsetup12", + "origin": "Debian", + "source": "apt", + "version": "2:2.6.1-4~deb12u1" + } + ], + "libctf-nobfd0": [ + { + "arch": "amd64", + "category": "devel", + "name": "libctf-nobfd0", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "libctf0": [ + { + "arch": "amd64", + "category": "devel", + "name": "libctf0", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "libcups2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcups2", + "origin": "Debian", + "source": "apt", + "version": "2.4.2-3+deb12u5" + } + ], + "libcurl3-gnutls": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcurl3-gnutls", + "origin": "Debian", + "source": "apt", + "version": "7.88.1-10+deb12u5" + } + ], + "libcurl4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcurl4", + "origin": "Debian", + "source": "apt", + "version": "7.88.1-10+deb12u5" + } + ], + "libdaemon0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdaemon0", + "origin": "Debian", + "source": "apt", + "version": "0.14-7.1" + } + ], + "libdatrie1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdatrie1", + "origin": "Debian", + "source": "apt", + "version": "0.2.13-2+b1" + } + ], + "libdav1d6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdav1d6", + "origin": "Debian", + "source": "apt", + "version": "1.0.0-2" + } + ], + "libdb5.3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdb5.3", + "origin": "Debian", + "source": "apt", + "version": "5.3.28+dfsg2-1" + } + ], + "libdbus-1-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdbus-1-3", + "origin": "Debian", + "source": "apt", + "version": "1.14.10-1~deb12u1" + } + ], + "libde265-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libde265-0", + "origin": "Debian", + "source": "apt", + "version": "1.0.11-1+deb12u1" + } + ], + "libdebconfclient0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdebconfclient0", + "origin": "Debian", + "source": "apt", + "version": "0.270" + } + ], + "libdeflate0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdeflate0", + "origin": "Debian", + "source": "apt", + "version": "1.14-1" + } + ], + "libdevmapper1.02.1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdevmapper1.02.1", + "origin": "Debian", + "source": "apt", + "version": "2:1.02.185-2" + } + ], + "libdiscover2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdiscover2", + "origin": "Debian", + "source": "apt", + "version": "2.1.2-10" + } + ], + "libdw1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdw1", + "origin": "Debian", + "source": "apt", + "version": "0.188-2.1" + } + ], + "libedit2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libedit2", + "origin": "Debian", + "source": "apt", + "version": "3.1-20221030-2" + } + ], + "libefiboot1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libefiboot1", + "origin": "Debian", + "source": "apt", + "version": "37-6" + } + ], + "libefivar1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libefivar1", + "origin": "Debian", + "source": "apt", + "version": "37-6" + } + ], + "libelf1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libelf1", + "origin": "Debian", + "source": "apt", + "version": "0.188-2.1" + } + ], + "liberror-perl": [ + { + "arch": "all", + "category": "perl", + "name": "liberror-perl", + "origin": "Debian", + "source": "apt", + "version": "0.17029-2" + } + ], + "libestr0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libestr0", + "origin": "Debian", + "source": "apt", + "version": "0.1.11-1" + } + ], + "libevent-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-2.1-7", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libevent-core-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-core-2.1-7", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libevent-dev": [ + { + "arch": "amd64", + "category": "libdevel", + "name": "libevent-dev", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libevent-extra-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-extra-2.1-7", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libevent-openssl-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-openssl-2.1-7", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libevent-pthreads-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-pthreads-2.1-7", + "origin": "Debian", + "source": "apt", + "version": "2.1.12-stable-8" + } + ], + "libexpat1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libexpat1", + "origin": "Debian", + "source": "apt", + "version": "2.5.0-1" + } + ], + "libext2fs2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libext2fs2", + "origin": "Debian", + "source": "apt", + "version": "1.47.0-2" + } + ], + "libfastjson4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfastjson4", + "origin": "Debian", + "source": "apt", + "version": "1.2304.0-1" + } + ], + "libfdisk1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfdisk1", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "libffi8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libffi8", + "origin": "Debian", + "source": "apt", + "version": "3.4.4-1" + } + ], + "libfido2-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfido2-1", + "origin": "Debian", + "source": "apt", + "version": "1.12.0-2+b1" + } + ], + "libfontconfig1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfontconfig1", + "origin": "Debian", + "source": "apt", + "version": "2.14.1-4" + } + ], + "libfreeipmi17": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfreeipmi17", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "libfreeradius3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfreeradius3", + "origin": "Debian", + "source": "apt", + "version": "3.2.1+dfsg-4+deb12u1" + } + ], + "libfreetype6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfreetype6", + "origin": "Debian", + "source": "apt", + "version": "2.12.1+dfsg-5" + } + ], + "libfribidi0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfribidi0", + "origin": "Debian", + "source": "apt", + "version": "1.0.8-2.1" + } + ], + "libfstrm0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfstrm0", + "origin": "Debian", + "source": "apt", + "version": "0.6.1-1" + } + ], + "libfsverity0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfsverity0", + "origin": "Debian", + "source": "apt", + "version": "1.5-1.1" + } + ], + "libfuse2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfuse2", + "origin": "Debian", + "source": "apt", + "version": "2.9.9-6+b1" + } + ], + "libgav1-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgav1-1", + "origin": "Debian", + "source": "apt", + "version": "0.18.0-1+b1" + } + ], + "libgcc-s1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgcc-s1", + "origin": "Debian", + "source": "apt", + "version": "12.2.0-14" + } + ], + "libgcrypt20": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgcrypt20", + "origin": "Debian", + "source": "apt", + "version": "1.10.1-3" + } + ], + "libgd3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgd3", + "origin": "Debian", + "source": "apt", + "version": "2.3.3-9" + } + ], + "libgdbm-compat4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgdbm-compat4", + "origin": "Debian", + "source": "apt", + "version": "1.23-3" + } + ], + "libgdbm6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgdbm6", + "origin": "Debian", + "source": "apt", + "version": "1.23-3" + } + ], + "libglib2.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libglib2.0-0", + "origin": "Debian", + "source": "apt", + "version": "2.74.6-2" + } + ], + "libglib2.0-data": [ + { + "arch": "all", + "category": "libs", + "name": "libglib2.0-data", + "origin": "Debian", + "source": "apt", + "version": "2.74.6-2" + } + ], + "libgmp10": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgmp10", + "origin": "Debian", + "source": "apt", + "version": "2:6.2.1+dfsg1-1.1" + } + ], + "libgnutls30": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgnutls30", + "origin": "", + "source": "apt", + "version": "3.7.9-2" + } + ], + "libgomp1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgomp1", + "origin": "Debian", + "source": "apt", + "version": "12.2.0-14" + } + ], + "libgpg-error0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpg-error0", + "origin": "Debian", + "source": "apt", + "version": "1.46-1" + } + ], + "libgpgme11": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpgme11", + "origin": "Debian", + "source": "apt", + "version": "1.18.0-3+b1" + } + ], + "libgpm2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpm2", + "origin": "Debian", + "source": "apt", + "version": "1.20.7-10+b1" + } + ], + "libgprofng0": [ + { + "arch": "amd64", + "category": "devel", + "name": "libgprofng0", + "origin": "Debian", + "source": "apt", + "version": "2.40-2" + } + ], + "libgraphite2-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgraphite2-3", + "origin": "Debian", + "source": "apt", + "version": "1.3.14-1" + } + ], + "libgsf-1-114": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgsf-1-114", + "origin": "Debian", + "source": "apt", + "version": "1.14.50-1" + } + ], + "libgsf-1-common": [ + { + "arch": "all", + "category": "libs", + "name": "libgsf-1-common", + "origin": "Debian", + "source": "apt", + "version": "1.14.50-1" + } + ], + "libgssapi-krb5-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgssapi-krb5-2", + "origin": "Debian", + "source": "apt", + "version": "1.20.1-2+deb12u1" + } + ], + "libgts-0.7-5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgts-0.7-5", + "origin": "Debian", + "source": "apt", + "version": "0.7.6+darcs121130-5+b1" + } + ], + "libgts-bin": [ + { + "arch": "amd64", + "category": "math", + "name": "libgts-bin", + "origin": "Debian", + "source": "apt", + "version": "0.7.6+darcs121130-5+b1" + } + ], + "libgvc6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgvc6", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "libgvpr2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgvpr2", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "libharfbuzz0b": [ + { + "arch": "amd64", + "category": "libs", + "name": "libharfbuzz0b", + "origin": "Debian", + "source": "apt", + "version": "6.0.0+dfsg-3" + } + ], + "libhavege2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libhavege2", + "origin": "Debian", + "source": "apt", + "version": "1.9.14-1+b1" + } + ], + "libheif1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libheif1", + "origin": "Debian", + "source": "apt", + "version": "1.15.1-1" + } + ], + "libhogweed6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libhogweed6", + "origin": "Debian", + "source": "apt", + "version": "3.8.1-2" + } + ], + "libice6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libice6", + "origin": "Debian", + "source": "apt", + "version": "2:1.0.10-1" + } + ], + "libicu72": [ + { + "arch": "amd64", + "category": "libs", + "name": "libicu72", + "origin": "Debian", + "source": "apt", + "version": "72.1-3" + } + ], + "libidn2-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libidn2-0", + "origin": "Debian", + "source": "apt", + "version": "2.3.3-1+b1" + } + ], + "libinotifytools0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libinotifytools0", + "origin": "Debian", + "source": "apt", + "version": "3.22.6.0-4" + } + ], + "libip4tc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libip4tc2", + "origin": "Debian", + "source": "apt", + "version": "1.8.9-2" + } + ], + "libipmiconsole2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libipmiconsole2", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "libipmidetect0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libipmidetect0", + "origin": "Debian", + "source": "apt", + "version": "1.6.10-1+b1" + } + ], + "libjansson4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjansson4", + "origin": "Debian", + "source": "apt", + "version": "2.14-2" + } + ], + "libjbig0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjbig0", + "origin": "Debian", + "source": "apt", + "version": "2.1-6.1" + } + ], + "libjemalloc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjemalloc2", + "origin": "Debian", + "source": "apt", + "version": "5.3.0-1" + } + ], + "libjpeg62-turbo": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjpeg62-turbo", + "origin": "Debian", + "source": "apt", + "version": "1:2.1.5-2" + } + ], + "libjson-c5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjson-c5", + "origin": "Debian", + "source": "apt", + "version": "0.16-2" + } + ], + "libk5crypto3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libk5crypto3", + "origin": "Debian", + "source": "apt", + "version": "1.20.1-2+deb12u1" + } + ], + "libkeyutils1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkeyutils1", + "origin": "Debian", + "source": "apt", + "version": "1.6.3-2" + } + ], + "libklibc": [ + { + "arch": "amd64", + "category": "libs", + "name": "libklibc", + "origin": "Debian", + "source": "apt", + "version": "2.0.12-1" + } + ], + "libkmod2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkmod2", + "origin": "Debian", + "source": "apt", + "version": "30+20221128-1" + } + ], + "libkrb5-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkrb5-3", + "origin": "Debian", + "source": "apt", + "version": "1.20.1-2+deb12u1" + } + ], + "libkrb5support0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkrb5support0", + "origin": "Debian", + "source": "apt", + "version": "1.20.1-2+deb12u1" + } + ], + "libksba8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libksba8", + "origin": "Debian", + "source": "apt", + "version": "1.6.3-2" + } + ], + "liblab-gamut1": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblab-gamut1", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "liblcms2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblcms2-2", + "origin": "Debian", + "source": "apt", + "version": "2.14-2" + } + ], + "libldap-2.5-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libldap-2.5-0", + "origin": "Debian", + "source": "apt", + "version": "2.5.13+dfsg-5" + } + ], + "libldap-common": [ + { + "arch": "all", + "category": "libs", + "name": "libldap-common", + "origin": "Debian", + "source": "apt", + "version": "2.5.13+dfsg-5" + } + ], + "libldb2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libldb2", + "origin": "Debian", + "source": "apt", + "version": "2:2.6.2+samba4.17.12+dfsg-0+deb12u1" + } + ], + "liblerc4": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblerc4", + "origin": "Debian", + "source": "apt", + "version": "4.0.0+ds-2" + } + ], + "liblmdb0": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblmdb0", + "origin": "Debian", + "source": "apt", + "version": "0.9.24-1" + } + ], + "liblocale-gettext-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "liblocale-gettext-perl", + "origin": "Debian", + "source": "apt", + "version": "1.07-5" + } + ], + "liblockfile-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "liblockfile-bin", + "origin": "Debian", + "source": "apt", + "version": "1.17-1+b1" + } + ], + "liblognorm5": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblognorm5", + "origin": "Debian", + "source": "apt", + "version": "2.0.6-4" + } + ], + "libltdl7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libltdl7", + "origin": "Debian", + "source": "apt", + "version": "2.4.7-5" + } + ], + "liblua5.3-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblua5.3-0", + "origin": "Debian", + "source": "apt", + "version": "5.3.6-2" + } + ], + "liblz4-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblz4-1", + "origin": "Debian", + "source": "apt", + "version": "1.9.4-1" + } + ], + "liblzma5": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblzma5", + "origin": "Debian", + "source": "apt", + "version": "5.4.1-0.2" + } + ], + "libmagic-mgc": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmagic-mgc", + "origin": "Debian", + "source": "apt", + "version": "1:5.44-3" + } + ], + "libmagic1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmagic1", + "origin": "Debian", + "source": "apt", + "version": "1:5.44-3" + } + ], + "libmaxminddb0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmaxminddb0", + "origin": "Debian", + "source": "apt", + "version": "1.7.1-1" + } + ], + "libmd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmd0", + "origin": "Debian", + "source": "apt", + "version": "1.0.4-2" + } + ], + "libmnl0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmnl0", + "origin": "Debian", + "source": "apt", + "version": "1.0.4-3" + } + ], + "libmount1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmount1", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "libncurses6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libncurses6", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "libncursesw6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libncursesw6", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "libnettle8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnettle8", + "origin": "Debian", + "source": "apt", + "version": "3.8.1-2" + } + ], + "libnewt0.52": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnewt0.52", + "origin": "Debian", + "source": "apt", + "version": "0.52.23-1+b1" + } + ], + "libnftables1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnftables1", + "origin": "Debian", + "source": "apt", + "version": "1.0.6-2+deb12u2" + } + ], + "libnftnl11": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnftnl11", + "origin": "Debian", + "source": "apt", + "version": "1.2.4-2" + } + ], + "libnghttp2-14": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnghttp2-14", + "origin": "", + "source": "apt", + "version": "1.52.0-1" + } + ], + "libnl-3-200": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnl-3-200", + "origin": "Debian", + "source": "apt", + "version": "3.7.0-0.2+b1" + } + ], + "libnl-genl-3-200": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnl-genl-3-200", + "origin": "Debian", + "source": "apt", + "version": "3.7.0-0.2+b1" + } + ], + "libnpth0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnpth0", + "origin": "Debian", + "source": "apt", + "version": "1.6-3" + } + ], + "libnsl2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnsl2", + "origin": "Debian", + "source": "apt", + "version": "1.3.0-2" + } + ], + "libnspr4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnspr4", + "origin": "Debian", + "source": "apt", + "version": "2:4.35-1" + } + ], + "libnss-systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "libnss-systemd", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "libnss3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnss3", + "origin": "Debian", + "source": "apt", + "version": "2:3.87.1-1" + } + ], + "libnuma1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnuma1", + "origin": "Debian", + "source": "apt", + "version": "2.0.16-1" + } + ], + "libopenjp2-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libopenjp2-7", + "origin": "Debian", + "source": "apt", + "version": "2.5.0-2" + } + ], + "libp11-kit0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libp11-kit0", + "origin": "Debian", + "source": "apt", + "version": "0.24.1-2" + } + ], + "libpam-modules": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-modules", + "origin": "Debian", + "source": "apt", + "version": "1.5.2-6+deb12u1" + } + ], + "libpam-modules-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-modules-bin", + "origin": "Debian", + "source": "apt", + "version": "1.5.2-6+deb12u1" + } + ], + "libpam-runtime": [ + { + "arch": "all", + "category": "admin", + "name": "libpam-runtime", + "origin": "Debian", + "source": "apt", + "version": "1.5.2-6+deb12u1" + } + ], + "libpam-systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-systemd", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "libpam0g": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpam0g", + "origin": "Debian", + "source": "apt", + "version": "1.5.2-6+deb12u1" + } + ], + "libpango-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpango-1.0-0", + "origin": "Debian", + "source": "apt", + "version": "1.50.12+ds-1" + } + ], + "libpango1.0-0": [ + { + "arch": "amd64", + "category": "oldlibs", + "name": "libpango1.0-0", + "origin": "Debian", + "source": "apt", + "version": "1.50.12+ds-1" + } + ], + "libpangocairo-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpangocairo-1.0-0", + "origin": "Debian", + "source": "apt", + "version": "1.50.12+ds-1" + } + ], + "libpangoft2-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpangoft2-1.0-0", + "origin": "Debian", + "source": "apt", + "version": "1.50.12+ds-1" + } + ], + "libpangoxft-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpangoxft-1.0-0", + "origin": "Debian", + "source": "apt", + "version": "1.50.12+ds-1" + } + ], + "libpathplan4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpathplan4", + "origin": "Debian", + "source": "apt", + "version": "2.42.2-7+b3" + } + ], + "libpcap0.8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcap0.8", + "origin": "Debian", + "source": "apt", + "version": "1.10.3-1" + } + ], + "libpci3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpci3", + "origin": "Debian", + "source": "apt", + "version": "1:3.9.0-4" + } + ], + "libpcre2-8-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcre2-8-0", + "origin": "Debian", + "source": "apt", + "version": "10.42-1" + } + ], + "libpcre3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcre3", + "origin": "Debian", + "source": "apt", + "version": "2:8.39-15" + } + ], + "libperl5.36": [ + { + "arch": "amd64", + "category": "libs", + "name": "libperl5.36", + "origin": "", + "source": "apt", + "version": "5.36.0-7" + } + ], + "libpipeline1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpipeline1", + "origin": "Debian", + "source": "apt", + "version": "1.5.7-1" + } + ], + "libpixman-1-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpixman-1-0", + "origin": "Debian", + "source": "apt", + "version": "0.42.2-1" + } + ], + "libpng16-16": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpng16-16", + "origin": "Debian", + "source": "apt", + "version": "1.6.39-2" + } + ], + "libpoppler126": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpoppler126", + "origin": "Debian", + "source": "apt", + "version": "22.12.0-2+b1" + } + ], + "libpopt0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpopt0", + "origin": "Debian", + "source": "apt", + "version": "1.19+dfsg-1" + } + ], + "libpq5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpq5", + "origin": "Debian", + "source": "apt", + "version": "15.5-0+deb12u1" + } + ], + "libproc2-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libproc2-0", + "origin": "Debian", + "source": "apt", + "version": "2:4.0.2-3" + } + ], + "libprotobuf-c1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libprotobuf-c1", + "origin": "Debian", + "source": "apt", + "version": "1.4.1-1+b1" + } + ], + "libpsl5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpsl5", + "origin": "Debian", + "source": "apt", + "version": "0.21.2-1" + } + ], + "libpython3-stdlib": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3-stdlib", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-1+b1" + } + ], + "libpython3.11": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpython3.11", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-6" + } + ], + "libpython3.11-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3.11-minimal", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-6" + } + ], + "libpython3.11-stdlib": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3.11-stdlib", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-6" + } + ], + "librav1e0": [ + { + "arch": "amd64", + "category": "libs", + "name": "librav1e0", + "origin": "Debian", + "source": "apt", + "version": "0.5.1-6" + } + ], + "libreadline8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libreadline8", + "origin": "Debian", + "source": "apt", + "version": "8.2-1.3" + } + ], + "librpm9": [ + { + "arch": "amd64", + "category": "libs", + "name": "librpm9", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "librpmbuild9": [ + { + "arch": "amd64", + "category": "libs", + "name": "librpmbuild9", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "librpmio9": [ + { + "arch": "amd64", + "category": "libs", + "name": "librpmio9", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "librpmsign9": [ + { + "arch": "amd64", + "category": "libs", + "name": "librpmsign9", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "librtmp1": [ + { + "arch": "amd64", + "category": "libs", + "name": "librtmp1", + "origin": "Debian", + "source": "apt", + "version": "2.4+20151223.gitfa8646d.1-2+b2" + } + ], + "libsasl2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsasl2-2", + "origin": "Debian", + "source": "apt", + "version": "2.1.28+dfsg-10" + } + ], + "libsasl2-modules": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsasl2-modules", + "origin": "Debian", + "source": "apt", + "version": "2.1.28+dfsg-10" + } + ], + "libsasl2-modules-db": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsasl2-modules-db", + "origin": "Debian", + "source": "apt", + "version": "2.1.28+dfsg-10" + } + ], + "libseccomp2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libseccomp2", + "origin": "Debian", + "source": "apt", + "version": "2.5.4-1+b3" + } + ], + "libselinux1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libselinux1", + "origin": "Debian", + "source": "apt", + "version": "3.4-1+b6" + } + ], + "libsemanage-common": [ + { + "arch": "all", + "category": "libs", + "name": "libsemanage-common", + "origin": "Debian", + "source": "apt", + "version": "3.4-1" + } + ], + "libsemanage2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsemanage2", + "origin": "Debian", + "source": "apt", + "version": "3.4-1+b5" + } + ], + "libsensors-config": [ + { + "arch": "all", + "category": "utils", + "name": "libsensors-config", + "origin": "Debian", + "source": "apt", + "version": "1:3.6.0-7.1" + } + ], + "libsensors5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsensors5", + "origin": "Debian", + "source": "apt", + "version": "1:3.6.0-7.1" + } + ], + "libsepol2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsepol2", + "origin": "Debian", + "source": "apt", + "version": "3.4-2.1" + } + ], + "libslang2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libslang2", + "origin": "Debian", + "source": "apt", + "version": "2.3.3-3" + } + ], + "libsm6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsm6", + "origin": "Debian", + "source": "apt", + "version": "2:1.2.3-1" + } + ], + "libsmartcols1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsmartcols1", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "libsmbclient": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsmbclient", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "libsodium23": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsodium23", + "origin": "Debian", + "source": "apt", + "version": "1.0.18-1" + } + ], + "libsqlite3-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsqlite3-0", + "origin": "Debian", + "source": "apt", + "version": "3.40.1-2" + } + ], + "libss2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libss2", + "origin": "Debian", + "source": "apt", + "version": "1.47.0-2" + } + ], + "libssh2-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libssh2-1", + "origin": "Debian", + "source": "apt", + "version": "1.10.0-3+b1" + } + ], + "libssl3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libssl3", + "origin": "Debian", + "source": "apt", + "version": "3.0.11-1~deb12u2" + } + ], + "libstdc++6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libstdc++6", + "origin": "Debian", + "source": "apt", + "version": "12.2.0-14" + } + ], + "libsvtav1enc1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsvtav1enc1", + "origin": "Debian", + "source": "apt", + "version": "1.4.1+dfsg-1" + } + ], + "libsystemd-shared": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsystemd-shared", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "libsystemd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsystemd0", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "libtalloc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtalloc2", + "origin": "Debian", + "source": "apt", + "version": "2.4.0-f2" + } + ], + "libtasn1-6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtasn1-6", + "origin": "Debian", + "source": "apt", + "version": "4.19.0-2" + } + ], + "libtdb1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtdb1", + "origin": "Debian", + "source": "apt", + "version": "1.4.8-2" + } + ], + "libtevent0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtevent0", + "origin": "Debian", + "source": "apt", + "version": "0.14.1-1" + } + ], + "libtext-charwidth-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libtext-charwidth-perl", + "origin": "Debian", + "source": "apt", + "version": "0.04-11" + } + ], + "libtext-iconv-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libtext-iconv-perl", + "origin": "Debian", + "source": "apt", + "version": "1.7-8" + } + ], + "libtext-wrapi18n-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libtext-wrapi18n-perl", + "origin": "Debian", + "source": "apt", + "version": "0.06-10" + } + ], + "libthai-data": [ + { + "arch": "all", + "category": "libs", + "name": "libthai-data", + "origin": "Debian", + "source": "apt", + "version": "0.1.29-1" + } + ], + "libthai0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libthai0", + "origin": "Debian", + "source": "apt", + "version": "0.1.29-1" + } + ], + "libtiff6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtiff6", + "origin": "Debian", + "source": "apt", + "version": "4.5.0-6+deb12u1" + } + ], + "libtinfo6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtinfo6", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "libtirpc-common": [ + { + "arch": "all", + "category": "libs", + "name": "libtirpc-common", + "origin": "Debian", + "source": "apt", + "version": "1.3.3+ds-1" + } + ], + "libtirpc3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtirpc3", + "origin": "Debian", + "source": "apt", + "version": "1.3.3+ds-1" + } + ], + "libuchardet0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuchardet0", + "origin": "Debian", + "source": "apt", + "version": "0.0.7-1" + } + ], + "libudev1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libudev1", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "libunistring2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libunistring2", + "origin": "Debian", + "source": "apt", + "version": "1.0-2" + } + ], + "liburing2": [ + { + "arch": "amd64", + "category": "libs", + "name": "liburing2", + "origin": "Debian", + "source": "apt", + "version": "2.3-3" + } + ], + "libusb-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libusb-1.0-0", + "origin": "Debian", + "source": "apt", + "version": "2:1.0.26-1" + } + ], + "libuuid1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuuid1", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "libuv1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuv1", + "origin": "Debian", + "source": "apt", + "version": "1.44.2-1" + } + ], + "libwbclient0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwbclient0", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "libwebp7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwebp7", + "origin": "Debian", + "source": "apt", + "version": "1.2.4-0.2+deb12u1" + } + ], + "libwrap0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwrap0", + "origin": "Debian", + "source": "apt", + "version": "7.6.q-32" + } + ], + "libx11-6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libx11-6", + "origin": "Debian", + "source": "apt", + "version": "2:1.8.4-2+deb12u2" + } + ], + "libx11-data": [ + { + "arch": "all", + "category": "x11", + "name": "libx11-data", + "origin": "Debian", + "source": "apt", + "version": "2:1.8.4-2+deb12u2" + } + ], + "libx265-199": [ + { + "arch": "amd64", + "category": "libs", + "name": "libx265-199", + "origin": "Debian", + "source": "apt", + "version": "3.5-2+b1" + } + ], + "libxau6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxau6", + "origin": "Debian", + "source": "apt", + "version": "1:1.0.9-1" + } + ], + "libxaw7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxaw7", + "origin": "Debian", + "source": "apt", + "version": "2:1.0.14-1" + } + ], + "libxcb-render0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb-render0", + "origin": "Debian", + "source": "apt", + "version": "1.15-1" + } + ], + "libxcb-shm0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb-shm0", + "origin": "Debian", + "source": "apt", + "version": "1.15-1" + } + ], + "libxcb1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb1", + "origin": "Debian", + "source": "apt", + "version": "1.15-1" + } + ], + "libxdmcp6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxdmcp6", + "origin": "Debian", + "source": "apt", + "version": "1:1.1.2-3" + } + ], + "libxext6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxext6", + "origin": "Debian", + "source": "apt", + "version": "2:1.3.4-1+b1" + } + ], + "libxft2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxft2", + "origin": "Debian", + "source": "apt", + "version": "2.3.6-1" + } + ], + "libxml2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxml2", + "origin": "Debian", + "source": "apt", + "version": "2.9.14+dfsg-1.3~deb12u1" + } + ], + "libxmu6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmu6", + "origin": "Debian", + "source": "apt", + "version": "2:1.1.3-3" + } + ], + "libxmuu1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmuu1", + "origin": "Debian", + "source": "apt", + "version": "2:1.1.3-3" + } + ], + "libxpm4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxpm4", + "origin": "Debian", + "source": "apt", + "version": "1:3.5.12-1.1+deb12u1" + } + ], + "libxrender1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxrender1", + "origin": "Debian", + "source": "apt", + "version": "1:0.9.10-1.1" + } + ], + "libxslt1.1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxslt1.1", + "origin": "Debian", + "source": "apt", + "version": "1.1.35-1" + } + ], + "libxt6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxt6", + "origin": "Debian", + "source": "apt", + "version": "1:1.2.1-1.1" + } + ], + "libxtables12": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxtables12", + "origin": "Debian", + "source": "apt", + "version": "1.8.9-2" + } + ], + "libxxhash0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxxhash0", + "origin": "Debian", + "source": "apt", + "version": "0.8.1-1" + } + ], + "libyuv0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libyuv0", + "origin": "Debian", + "source": "apt", + "version": "0.0~git20230123.b2528b0-1" + } + ], + "libzstd1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libzstd1", + "origin": "Debian", + "source": "apt", + "version": "1.5.4+dfsg2-5" + } + ], + "linux-base": [ + { + "arch": "all", + "category": "kernel", + "name": "linux-base", + "origin": "Debian", + "source": "apt", + "version": "4.9" + } + ], + "linux-image-6.1.0-13-amd64": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-image-6.1.0-13-amd64", + "origin": "Debian", + "source": "apt", + "version": "6.1.55-1" + } + ], + "linux-image-amd64": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-image-amd64", + "origin": "", + "source": "apt", + "version": "6.1.55-1" + } + ], + "locales": [ + { + "arch": "all", + "category": "localization", + "name": "locales", + "origin": "Debian", + "source": "apt", + "version": "2.36-9+deb12u3" + } + ], + "login": [ + { + "arch": "amd64", + "category": "admin", + "name": "login", + "origin": "Debian", + "source": "apt", + "version": "1:4.13+dfsg1-1+b1" + } + ], + "logrotate": [ + { + "arch": "amd64", + "category": "admin", + "name": "logrotate", + "origin": "Debian", + "source": "apt", + "version": "3.21.0-1" + } + ], + "logsave": [ + { + "arch": "amd64", + "category": "admin", + "name": "logsave", + "origin": "Debian", + "source": "apt", + "version": "1.47.0-2" + } + ], + "lsb-release": [ + { + "arch": "all", + "category": "misc", + "name": "lsb-release", + "origin": "Debian", + "source": "apt", + "version": "12.0-1" + } + ], + "lsof": [ + { + "arch": "amd64", + "category": "utils", + "name": "lsof", + "origin": "Debian", + "source": "apt", + "version": "4.95.0-1" + } + ], + "mailcap": [ + { + "arch": "all", + "category": "utils", + "name": "mailcap", + "origin": "Debian", + "source": "apt", + "version": "3.70+nmu1" + } + ], + "man-db": [ + { + "arch": "amd64", + "category": "doc", + "name": "man-db", + "origin": "Debian", + "source": "apt", + "version": "2.11.2-2" + } + ], + "manpages": [ + { + "arch": "all", + "category": "doc", + "name": "manpages", + "origin": "Debian", + "source": "apt", + "version": "6.03-2" + } + ], + "mawk": [ + { + "arch": "amd64", + "category": "interpreters", + "name": "mawk", + "origin": "Debian", + "source": "apt", + "version": "1.3.4.20200120-3.1" + } + ], + "media-types": [ + { + "arch": "all", + "category": "net", + "name": "media-types", + "origin": "Debian", + "source": "apt", + "version": "10.0.0" + } + ], + "memcached": [ + { + "arch": "amd64", + "category": "web", + "name": "memcached", + "origin": "Debian", + "source": "apt", + "version": "1.6.18-1" + } + ], + "mime-support": [ + { + "arch": "all", + "category": "net", + "name": "mime-support", + "origin": "Debian", + "source": "apt", + "version": "3.66" + } + ], + "mlocate": [ + { + "arch": "all", + "category": "utils", + "name": "mlocate", + "origin": "Debian", + "source": "apt", + "version": "1.1.18-1" + } + ], + "mount": [ + { + "arch": "amd64", + "category": "admin", + "name": "mount", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "nano": [ + { + "arch": "amd64", + "category": "editors", + "name": "nano", + "origin": "Debian", + "source": "apt", + "version": "7.2-1" + } + ], + "ncurses-base": [ + { + "arch": "all", + "category": "misc", + "name": "ncurses-base", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "ncurses-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "ncurses-bin", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "ncurses-term": [ + { + "arch": "all", + "category": "misc", + "name": "ncurses-term", + "origin": "Debian", + "source": "apt", + "version": "6.4-4" + } + ], + "net-tools": [ + { + "arch": "amd64", + "category": "net", + "name": "net-tools", + "origin": "Debian", + "source": "apt", + "version": "2.10-0.1" + } + ], + "netbase": [ + { + "arch": "all", + "category": "admin", + "name": "netbase", + "origin": "Debian", + "source": "apt", + "version": "6.4" + } + ], + "netcat-traditional": [ + { + "arch": "amd64", + "category": "net", + "name": "netcat-traditional", + "origin": "Debian", + "source": "apt", + "version": "1.10-47" + } + ], + "nftables": [ + { + "arch": "amd64", + "category": "net", + "name": "nftables", + "origin": "Debian", + "source": "apt", + "version": "1.0.6-2+deb12u2" + } + ], + "openssh-client": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-client", + "origin": "Debian", + "source": "apt", + "version": "1:9.2p1-2+deb12u1" + } + ], + "openssh-server": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-server", + "origin": "Debian", + "source": "apt", + "version": "1:9.2p1-2+deb12u1" + } + ], + "openssh-sftp-server": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-sftp-server", + "origin": "Debian", + "source": "apt", + "version": "1:9.2p1-2+deb12u1" + } + ], + "openssl": [ + { + "arch": "amd64", + "category": "utils", + "name": "openssl", + "origin": "Debian", + "source": "apt", + "version": "3.0.11-1~deb12u2" + } + ], + "os-prober": [ + { + "arch": "amd64", + "category": "utils", + "name": "os-prober", + "origin": "Debian", + "source": "apt", + "version": "1.81" + } + ], + "passwd": [ + { + "arch": "amd64", + "category": "admin", + "name": "passwd", + "origin": "Debian", + "source": "apt", + "version": "1:4.13+dfsg1-1+b1" + } + ], + "patch": [ + { + "arch": "amd64", + "category": "vcs", + "name": "patch", + "origin": "Debian", + "source": "apt", + "version": "2.7.6-7" + } + ], + "pci.ids": [ + { + "arch": "all", + "category": "admin", + "name": "pci.ids", + "origin": "Debian", + "source": "apt", + "version": "0.0~2023.04.11-1" + } + ], + "pciutils": [ + { + "arch": "amd64", + "category": "admin", + "name": "pciutils", + "origin": "Debian", + "source": "apt", + "version": "1:3.9.0-4" + } + ], + "perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "perl", + "origin": "", + "source": "apt", + "version": "5.36.0-7" + } + ], + "perl-base": [ + { + "arch": "amd64", + "category": "perl", + "name": "perl-base", + "origin": "", + "source": "apt", + "version": "5.36.0-7" + } + ], + "perl-modules-5.36": [ + { + "arch": "all", + "category": "libs", + "name": "perl-modules-5.36", + "origin": "", + "source": "apt", + "version": "5.36.0-7" + } + ], + "php": [ + { + "arch": "all", + "category": "php", + "name": "php", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php-cgi": [ + { + "arch": "all", + "category": "php", + "name": "php-cgi", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php-cli": [ + { + "arch": "all", + "category": "php", + "name": "php-cli", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php-common": [ + { + "arch": "all", + "category": "php", + "name": "php-common", + "origin": "Debian", + "source": "apt", + "version": "2:93" + } + ], + "php-gd": [ + { + "arch": "all", + "category": "php", + "name": "php-gd", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php-pear": [ + { + "arch": "all", + "category": "php", + "name": "php-pear", + "origin": "Debian", + "source": "apt", + "version": "1:1.10.13+submodules+notgz+2022032202-2" + } + ], + "php-sqlite3": [ + { + "arch": "all", + "category": "php", + "name": "php-sqlite3", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php-xml": [ + { + "arch": "all", + "category": "php", + "name": "php-xml", + "origin": "Debian", + "source": "apt", + "version": "2:8.2+93" + } + ], + "php8.2": [ + { + "arch": "all", + "category": "php", + "name": "php8.2", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-cgi": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-cgi", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-cli": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-cli", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-common": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-common", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-gd": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-gd", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-opcache": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-opcache", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-readline": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-readline", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-sqlite3": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-sqlite3", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "php8.2-xml": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.2-xml", + "origin": "Debian", + "source": "apt", + "version": "8.2.7-1~deb12u1" + } + ], + "pinentry-curses": [ + { + "arch": "amd64", + "category": "utils", + "name": "pinentry-curses", + "origin": "Debian", + "source": "apt", + "version": "1.2.1-1" + } + ], + "plocate": [ + { + "arch": "amd64", + "category": "utils", + "name": "plocate", + "origin": "Debian", + "source": "apt", + "version": "1.1.18-1" + } + ], + "poppler-data": [ + { + "arch": "all", + "category": "misc", + "name": "poppler-data", + "origin": "Debian", + "source": "apt", + "version": "0.4.12-1" + } + ], + "poppler-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "poppler-utils", + "origin": "Debian", + "source": "apt", + "version": "22.12.0-2+b1" + } + ], + "postfix": [ + { + "arch": "amd64", + "category": "mail", + "name": "postfix", + "origin": "Debian", + "source": "apt", + "version": "3.7.6-0+deb12u2" + } + ], + "postfix-cdb": [ + { + "arch": "amd64", + "category": "mail", + "name": "postfix-cdb", + "origin": "Debian", + "source": "apt", + "version": "3.7.6-0+deb12u2" + } + ], + "procps": [ + { + "arch": "amd64", + "category": "admin", + "name": "procps", + "origin": "Debian", + "source": "apt", + "version": "2:4.0.2-3" + } + ], + "psmisc": [ + { + "arch": "amd64", + "category": "admin", + "name": "psmisc", + "origin": "Debian", + "source": "apt", + "version": "23.6-1" + } + ], + "publicsuffix": [ + { + "arch": "all", + "category": "net", + "name": "publicsuffix", + "origin": "Debian", + "source": "apt", + "version": "20230209.2326-1" + } + ], + "python-apt-common": [ + { + "arch": "all", + "category": "python", + "name": "python-apt-common", + "origin": "Debian", + "source": "apt", + "version": "2.6.0" + } + ], + "python3": [ + { + "arch": "amd64", + "category": "python", + "name": "python3", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-1+b1" + } + ], + "python3-apt": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-apt", + "origin": "Debian", + "source": "apt", + "version": "2.6.0" + } + ], + "python3-certifi": [ + { + "arch": "all", + "category": "python", + "name": "python3-certifi", + "origin": "Debian", + "source": "apt", + "version": "2022.9.24-1" + } + ], + "python3-chardet": [ + { + "arch": "all", + "category": "python", + "name": "python3-chardet", + "origin": "Debian", + "source": "apt", + "version": "5.1.0+dfsg-2" + } + ], + "python3-charset-normalizer": [ + { + "arch": "all", + "category": "python", + "name": "python3-charset-normalizer", + "origin": "Debian", + "source": "apt", + "version": "3.0.1-2" + } + ], + "python3-debconf": [ + { + "arch": "all", + "category": "python", + "name": "python3-debconf", + "origin": "Debian", + "source": "apt", + "version": "1.5.82" + } + ], + "python3-debian": [ + { + "arch": "all", + "category": "python", + "name": "python3-debian", + "origin": "Debian", + "source": "apt", + "version": "0.1.49" + } + ], + "python3-debianbts": [ + { + "arch": "all", + "category": "python", + "name": "python3-debianbts", + "origin": "Debian", + "source": "apt", + "version": "4.0.1" + } + ], + "python3-gpg": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-gpg", + "origin": "Debian", + "source": "apt", + "version": "1.18.0-3+b1" + } + ], + "python3-httplib2": [ + { + "arch": "all", + "category": "python", + "name": "python3-httplib2", + "origin": "Debian", + "source": "apt", + "version": "0.20.4-3" + } + ], + "python3-idna": [ + { + "arch": "all", + "category": "python", + "name": "python3-idna", + "origin": "Debian", + "source": "apt", + "version": "3.3-1" + } + ], + "python3-ldb": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-ldb", + "origin": "Debian", + "source": "apt", + "version": "2:2.6.2+samba4.17.12+dfsg-0+deb12u1" + } + ], + "python3-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-minimal", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-1+b1" + } + ], + "python3-pkg-resources": [ + { + "arch": "all", + "category": "python", + "name": "python3-pkg-resources", + "origin": "Debian", + "source": "apt", + "version": "66.1.1-1" + } + ], + "python3-pycurl": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-pycurl", + "origin": "Debian", + "source": "apt", + "version": "7.45.2-3" + } + ], + "python3-pyparsing": [ + { + "arch": "all", + "category": "python", + "name": "python3-pyparsing", + "origin": "Debian", + "source": "apt", + "version": "3.0.9-1" + } + ], + "python3-pysimplesoap": [ + { + "arch": "all", + "category": "python", + "name": "python3-pysimplesoap", + "origin": "Debian", + "source": "apt", + "version": "1.16.2-5" + } + ], + "python3-reportbug": [ + { + "arch": "all", + "category": "python", + "name": "python3-reportbug", + "origin": "Debian", + "source": "apt", + "version": "12.0.0" + } + ], + "python3-requests": [ + { + "arch": "all", + "category": "python", + "name": "python3-requests", + "origin": "Debian", + "source": "apt", + "version": "2.28.1+dfsg-1" + } + ], + "python3-samba": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-samba", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "python3-six": [ + { + "arch": "all", + "category": "python", + "name": "python3-six", + "origin": "Debian", + "source": "apt", + "version": "1.16.0-4" + } + ], + "python3-talloc": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-talloc", + "origin": "Debian", + "source": "apt", + "version": "2.4.0-f2" + } + ], + "python3-tdb": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-tdb", + "origin": "Debian", + "source": "apt", + "version": "1.4.8-2" + } + ], + "python3-urllib3": [ + { + "arch": "all", + "category": "python", + "name": "python3-urllib3", + "origin": "Debian", + "source": "apt", + "version": "1.26.12-1" + } + ], + "python3.11": [ + { + "arch": "amd64", + "category": "python", + "name": "python3.11", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-6" + } + ], + "python3.11-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "python3.11-minimal", + "origin": "Debian", + "source": "apt", + "version": "3.11.2-6" + } + ], + "qemu-guest-agent": [ + { + "arch": "amd64", + "category": "otherosfs", + "name": "qemu-guest-agent", + "origin": "", + "source": "apt", + "version": "1:7.2+dfsg-7+deb12u2" + } + ], + "readline-common": [ + { + "arch": "all", + "category": "utils", + "name": "readline-common", + "origin": "Debian", + "source": "apt", + "version": "8.2-1.3" + } + ], + "reportbug": [ + { + "arch": "all", + "category": "utils", + "name": "reportbug", + "origin": "Debian", + "source": "apt", + "version": "12.0.0" + } + ], + "resolvconf": [ + { + "arch": "all", + "category": "net", + "name": "resolvconf", + "origin": "Debian", + "source": "apt", + "version": "1.91+nmu1" + } + ], + "rpcbind": [ + { + "arch": "amd64", + "category": "net", + "name": "rpcbind", + "origin": "Debian", + "source": "apt", + "version": "1.2.6-6+b1" + } + ], + "rpm": [ + { + "arch": "amd64", + "category": "admin", + "name": "rpm", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "rpm-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "rpm-common", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "rpm2cpio": [ + { + "arch": "amd64", + "category": "admin", + "name": "rpm2cpio", + "origin": "Debian", + "source": "apt", + "version": "4.18.0+dfsg-1+b1" + } + ], + "rsync": [ + { + "arch": "amd64", + "category": "net", + "name": "rsync", + "origin": "Debian", + "source": "apt", + "version": "3.2.7-1" + } + ], + "rsyslog": [ + { + "arch": "amd64", + "category": "admin", + "name": "rsyslog", + "origin": "Debian", + "source": "apt", + "version": "8.2302.0-1" + } + ], + "runit-helper": [ + { + "arch": "all", + "category": "admin", + "name": "runit-helper", + "origin": "Debian", + "source": "apt", + "version": "2.15.2" + } + ], + "samba-common": [ + { + "arch": "all", + "category": "net", + "name": "samba-common", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "samba-common-bin": [ + { + "arch": "amd64", + "category": "net", + "name": "samba-common-bin", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "samba-dsdb-modules": [ + { + "arch": "amd64", + "category": "libs", + "name": "samba-dsdb-modules", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "samba-libs": [ + { + "arch": "amd64", + "category": "libs", + "name": "samba-libs", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "sed": [ + { + "arch": "amd64", + "category": "utils", + "name": "sed", + "origin": "Debian", + "source": "apt", + "version": "4.9-1" + } + ], + "sensible-utils": [ + { + "arch": "all", + "category": "utils", + "name": "sensible-utils", + "origin": "Debian", + "source": "apt", + "version": "0.0.17+nmu1" + } + ], + "shared-mime-info": [ + { + "arch": "amd64", + "category": "misc", + "name": "shared-mime-info", + "origin": "Debian", + "source": "apt", + "version": "2.2-1" + } + ], + "smbclient": [ + { + "arch": "amd64", + "category": "net", + "name": "smbclient", + "origin": "Debian", + "source": "apt", + "version": "2:4.17.12+dfsg-0+deb12u1" + } + ], + "ssl-cert": [ + { + "arch": "all", + "category": "utils", + "name": "ssl-cert", + "origin": "Debian", + "source": "apt", + "version": "1.1.2" + } + ], + "sudo": [ + { + "arch": "amd64", + "category": "admin", + "name": "sudo", + "origin": "Debian", + "source": "apt", + "version": "1.9.13p3-1+deb12u1" + } + ], + "sysstat": [ + { + "arch": "amd64", + "category": "admin", + "name": "sysstat", + "origin": "Debian", + "source": "apt", + "version": "12.6.1-1" + } + ], + "systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "systemd-sysv": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd-sysv", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "systemd-timesyncd": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd-timesyncd", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "sysvinit-utils": [ + { + "arch": "amd64", + "category": "admin", + "name": "sysvinit-utils", + "origin": "Debian", + "source": "apt", + "version": "3.06-4" + } + ], + "tar": [ + { + "arch": "amd64", + "category": "utils", + "name": "tar", + "origin": "Debian", + "source": "apt", + "version": "1.34+dfsg-1.2" + } + ], + "task-english": [ + { + "arch": "all", + "category": "tasks", + "name": "task-english", + "origin": "Debian", + "source": "apt", + "version": "3.73" + } + ], + "tasksel": [ + { + "arch": "all", + "category": "admin", + "name": "tasksel", + "origin": "Debian", + "source": "apt", + "version": "3.73" + } + ], + "tasksel-data": [ + { + "arch": "all", + "category": "admin", + "name": "tasksel-data", + "origin": "Debian", + "source": "apt", + "version": "3.73" + } + ], + "time": [ + { + "arch": "amd64", + "category": "utils", + "name": "time", + "origin": "Debian", + "source": "apt", + "version": "1.9-0.2" + } + ], + "traceroute": [ + { + "arch": "amd64", + "category": "net", + "name": "traceroute", + "origin": "Debian", + "source": "apt", + "version": "1:2.1.2-1" + } + ], + "tzdata": [ + { + "arch": "all", + "category": "localization", + "name": "tzdata", + "origin": "", + "source": "apt", + "version": "2023c-5" + } + ], + "ucf": [ + { + "arch": "all", + "category": "utils", + "name": "ucf", + "origin": "Debian", + "source": "apt", + "version": "3.0043+nmu1" + } + ], + "udev": [ + { + "arch": "amd64", + "category": "admin", + "name": "udev", + "origin": "", + "source": "apt", + "version": "252.17-1~deb12u1" + } + ], + "unzip": [ + { + "arch": "amd64", + "category": "utils", + "name": "unzip", + "origin": "Debian", + "source": "apt", + "version": "6.0-28" + } + ], + "update-inetd": [ + { + "arch": "all", + "category": "admin", + "name": "update-inetd", + "origin": "Debian", + "source": "apt", + "version": "4.53" + } + ], + "usr-is-merged": [ + { + "arch": "all", + "category": "oldlibs", + "name": "usr-is-merged", + "origin": "Debian", + "source": "apt", + "version": "35" + } + ], + "util-linux": [ + { + "arch": "amd64", + "category": "utils", + "name": "util-linux", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "util-linux-extra": [ + { + "arch": "amd64", + "category": "utils", + "name": "util-linux-extra", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5+b1" + } + ], + "util-linux-locales": [ + { + "arch": "all", + "category": "localization", + "name": "util-linux-locales", + "origin": "Debian", + "source": "apt", + "version": "2.38.1-5" + } + ], + "vim": [ + { + "arch": "amd64", + "category": "editors", + "name": "vim", + "origin": "Debian", + "source": "apt", + "version": "2:9.0.1378-2" + } + ], + "vim-common": [ + { + "arch": "all", + "category": "editors", + "name": "vim-common", + "origin": "Debian", + "source": "apt", + "version": "2:9.0.1378-2" + } + ], + "vim-runtime": [ + { + "arch": "all", + "category": "editors", + "name": "vim-runtime", + "origin": "Debian", + "source": "apt", + "version": "2:9.0.1378-2" + } + ], + "vim-tiny": [ + { + "arch": "amd64", + "category": "editors", + "name": "vim-tiny", + "origin": "Debian", + "source": "apt", + "version": "2:9.0.1378-2" + } + ], + "wamerican": [ + { + "arch": "all", + "category": "text", + "name": "wamerican", + "origin": "Debian", + "source": "apt", + "version": "2020.12.07-2" + } + ], + "wget": [ + { + "arch": "amd64", + "category": "web", + "name": "wget", + "origin": "Debian", + "source": "apt", + "version": "1.21.3-1+b2" + } + ], + "whiptail": [ + { + "arch": "amd64", + "category": "utils", + "name": "whiptail", + "origin": "Debian", + "source": "apt", + "version": "0.52.23-1+b1" + } + ], + "x11-common": [ + { + "arch": "all", + "category": "x11", + "name": "x11-common", + "origin": "Debian", + "source": "apt", + "version": "1:7.7+23" + } + ], + "xauth": [ + { + "arch": "amd64", + "category": "x11", + "name": "xauth", + "origin": "Debian", + "source": "apt", + "version": "1:1.1.2-1" + } + ], + "xdg-user-dirs": [ + { + "arch": "amd64", + "category": "utils", + "name": "xdg-user-dirs", + "origin": "Debian", + "source": "apt", + "version": "0.18-1" + } + ], + "xinetd": [ + { + "arch": "amd64", + "category": "net", + "name": "xinetd", + "origin": "Debian", + "source": "apt", + "version": "1:2.3.15.3-1+b1" + } + ], + "xkb-data": [ + { + "arch": "all", + "category": "x11", + "name": "xkb-data", + "origin": "Debian", + "source": "apt", + "version": "2.35.1-1" + } + ], + "xz-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "xz-utils", + "origin": "Debian", + "source": "apt", + "version": "5.4.1-0.2" + } + ], + "zlib1g": [ + { + "arch": "amd64", + "category": "libs", + "name": "zlib1g", + "origin": "Debian", + "source": "apt", + "version": "1:1.2.13.dfsg-1" + } + ], + "zstd": [ + { + "arch": "amd64", + "category": "utils", + "name": "zstd", + "origin": "Debian", + "source": "apt", + "version": "1.5.4+dfsg2-5" + } + ] + } + }, + "changed": false +} diff --git a/misc/ubuntu-22.package_facts b/misc/ubuntu-22.package_facts new file mode 100644 index 000000000..acd490bd4 --- /dev/null +++ b/misc/ubuntu-22.package_facts @@ -0,0 +1,7588 @@ +ansibuntu | SUCCESS => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python3", + "packages": { + "adduser": [ + { + "arch": "all", + "category": "admin", + "name": "adduser", + "origin": "Ubuntu", + "source": "apt", + "version": "3.118ubuntu5" + } + ], + "amd64-microcode": [ + { + "arch": "amd64", + "category": "admin", + "name": "amd64-microcode", + "origin": "Ubuntu", + "source": "apt", + "version": "3.20191218.1ubuntu2.2" + } + ], + "apache2": [ + { + "arch": "amd64", + "category": "web", + "name": "apache2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.52-1ubuntu4.7" + } + ], + "apache2-bin": [ + { + "arch": "amd64", + "category": "httpd", + "name": "apache2-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.52-1ubuntu4.7" + } + ], + "apache2-data": [ + { + "arch": "all", + "category": "httpd", + "name": "apache2-data", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.52-1ubuntu4.7" + } + ], + "apache2-utils": [ + { + "arch": "amd64", + "category": "net", + "name": "apache2-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.52-1ubuntu4.7" + } + ], + "apparmor": [ + { + "arch": "amd64", + "category": "admin", + "name": "apparmor", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.4-2ubuntu2.3" + } + ], + "apport": [ + { + "arch": "all", + "category": "utils", + "name": "apport", + "origin": "Ubuntu", + "source": "apt", + "version": "2.20.11-0ubuntu82.5" + } + ], + "apport-symptoms": [ + { + "arch": "all", + "category": "utils", + "name": "apport-symptoms", + "origin": "Ubuntu", + "source": "apt", + "version": "0.24" + } + ], + "apt": [ + { + "arch": "amd64", + "category": "admin", + "name": "apt", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.11" + } + ], + "apt-utils": [ + { + "arch": "amd64", + "category": "admin", + "name": "apt-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.11" + } + ], + "base-files": [ + { + "arch": "amd64", + "category": "admin", + "name": "base-files", + "origin": "Ubuntu", + "source": "apt", + "version": "12ubuntu4.4" + } + ], + "base-passwd": [ + { + "arch": "amd64", + "category": "admin", + "name": "base-passwd", + "origin": "Ubuntu", + "source": "apt", + "version": "3.5.52build1" + } + ], + "bash": [ + { + "arch": "amd64", + "category": "shells", + "name": "bash", + "origin": "Ubuntu", + "source": "apt", + "version": "5.1-6ubuntu1" + } + ], + "bash-completion": [ + { + "arch": "all", + "category": "shells", + "name": "bash-completion", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.11-5ubuntu1" + } + ], + "bc": [ + { + "arch": "amd64", + "category": "math", + "name": "bc", + "origin": "Ubuntu", + "source": "apt", + "version": "1.07.1-3build1" + } + ], + "bcache-tools": [ + { + "arch": "amd64", + "category": "utils", + "name": "bcache-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.8-4ubuntu3" + } + ], + "bind9-dnsutils": [ + { + "arch": "amd64", + "category": "net", + "name": "bind9-dnsutils", + "origin": "Ubuntu", + "source": "apt", + "version": "1:9.18.18-0ubuntu0.22.04.1" + } + ], + "bind9-host": [ + { + "arch": "amd64", + "category": "net", + "name": "bind9-host", + "origin": "Ubuntu", + "source": "apt", + "version": "1:9.18.18-0ubuntu0.22.04.1" + } + ], + "bind9-libs": [ + { + "arch": "amd64", + "category": "libs", + "name": "bind9-libs", + "origin": "Ubuntu", + "source": "apt", + "version": "1:9.18.18-0ubuntu0.22.04.1" + } + ], + "binutils": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "binutils-common": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils-common", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "binutils-x86-64-linux-gnu": [ + { + "arch": "amd64", + "category": "devel", + "name": "binutils-x86-64-linux-gnu", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "bolt": [ + { + "arch": "amd64", + "category": "admin", + "name": "bolt", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.2-1" + } + ], + "bsdextrautils": [ + { + "arch": "amd64", + "category": "utils", + "name": "bsdextrautils", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "bsdutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "bsdutils", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.37.2-4ubuntu3" + } + ], + "btrfs-progs": [ + { + "arch": "amd64", + "category": "admin", + "name": "btrfs-progs", + "origin": "Ubuntu", + "source": "apt", + "version": "5.16.2-1" + } + ], + "busybox-initramfs": [ + { + "arch": "amd64", + "category": "shells", + "name": "busybox-initramfs", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.30.1-7ubuntu3" + } + ], + "busybox-static": [ + { + "arch": "amd64", + "category": "shells", + "name": "busybox-static", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.30.1-7ubuntu3" + } + ], + "byobu": [ + { + "arch": "all", + "category": "misc", + "name": "byobu", + "origin": "Ubuntu", + "source": "apt", + "version": "5.133-1" + } + ], + "bzip2": [ + { + "arch": "amd64", + "category": "utils", + "name": "bzip2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.8-5build1" + } + ], + "ca-certificates": [ + { + "arch": "all", + "category": "misc", + "name": "ca-certificates", + "origin": "Ubuntu", + "source": "apt", + "version": "20230311ubuntu0.22.04.1" + } + ], + "check-mk-raw-2.2.0p8": [ + { + "arch": "amd64", + "category": "admin", + "name": "check-mk-raw-2.2.0p8", + "origin": "", + "source": "apt", + "version": "0.jammy" + } + ], + "cloud-guest-utils": [ + { + "arch": "all", + "category": "admin", + "name": "cloud-guest-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "0.32-22-g45fe84a5-0ubuntu1" + } + ], + "cloud-initramfs-copymods": [ + { + "arch": "all", + "category": "admin", + "name": "cloud-initramfs-copymods", + "origin": "Ubuntu", + "source": "apt", + "version": "0.47ubuntu1" + } + ], + "cloud-initramfs-dyn-netconf": [ + { + "arch": "all", + "category": "admin", + "name": "cloud-initramfs-dyn-netconf", + "origin": "Ubuntu", + "source": "apt", + "version": "0.47ubuntu1" + } + ], + "command-not-found": [ + { + "arch": "all", + "category": "admin", + "name": "command-not-found", + "origin": "Ubuntu", + "source": "apt", + "version": "22.04.0" + } + ], + "console-setup": [ + { + "arch": "all", + "category": "utils", + "name": "console-setup", + "origin": "Ubuntu", + "source": "apt", + "version": "1.205ubuntu3" + } + ], + "console-setup-linux": [ + { + "arch": "all", + "category": "utils", + "name": "console-setup-linux", + "origin": "Ubuntu", + "source": "apt", + "version": "1.205ubuntu3" + } + ], + "coreutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "coreutils", + "origin": "Ubuntu", + "source": "apt", + "version": "8.32-4.1ubuntu1" + } + ], + "cpio": [ + { + "arch": "amd64", + "category": "utils", + "name": "cpio", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13+dfsg-7" + } + ], + "cron": [ + { + "arch": "amd64", + "category": "admin", + "name": "cron", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0pl1-137ubuntu3" + } + ], + "cryptsetup": [ + { + "arch": "amd64", + "category": "admin", + "name": "cryptsetup", + "origin": "", + "source": "apt", + "version": "2:2.4.3-1ubuntu1.1" + } + ], + "cryptsetup-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "cryptsetup-bin", + "origin": "", + "source": "apt", + "version": "2:2.4.3-1ubuntu1.1" + } + ], + "cryptsetup-initramfs": [ + { + "arch": "all", + "category": "admin", + "name": "cryptsetup-initramfs", + "origin": "", + "source": "apt", + "version": "2:2.4.3-1ubuntu1.1" + } + ], + "curl": [ + { + "arch": "amd64", + "category": "web", + "name": "curl", + "origin": "Ubuntu", + "source": "apt", + "version": "7.81.0-1ubuntu1.15" + } + ], + "dash": [ + { + "arch": "amd64", + "category": "shells", + "name": "dash", + "origin": "Ubuntu", + "source": "apt", + "version": "0.5.11+git20210903+057cd650a4ed-3build1" + } + ], + "dbus": [ + { + "arch": "amd64", + "category": "devel", + "name": "dbus", + "origin": "Ubuntu", + "source": "apt", + "version": "1.12.20-2ubuntu4.1" + } + ], + "dbus-user-session": [ + { + "arch": "amd64", + "category": "admin", + "name": "dbus-user-session", + "origin": "Ubuntu", + "source": "apt", + "version": "1.12.20-2ubuntu4.1" + } + ], + "debconf": [ + { + "arch": "all", + "category": "admin", + "name": "debconf", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.79ubuntu1" + } + ], + "debconf-i18n": [ + { + "arch": "all", + "category": "admin", + "name": "debconf-i18n", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.79ubuntu1" + } + ], + "debianutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "debianutils", + "origin": "Ubuntu", + "source": "apt", + "version": "5.5-1ubuntu2" + } + ], + "debugedit": [ + { + "arch": "amd64", + "category": "admin", + "name": "debugedit", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.0-4build1" + } + ], + "dialog": [ + { + "arch": "amd64", + "category": "universe/misc", + "name": "dialog", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3-20211214-1" + } + ], + "diffutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "diffutils", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.8-0ubuntu2" + } + ], + "dirmngr": [ + { + "arch": "amd64", + "category": "utils", + "name": "dirmngr", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "distro-info": [ + { + "arch": "amd64", + "category": "devel", + "name": "distro-info", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1ubuntu0.1" + } + ], + "distro-info-data": [ + { + "arch": "all", + "category": "devel", + "name": "distro-info-data", + "origin": "Ubuntu", + "source": "apt", + "version": "0.52ubuntu0.5" + } + ], + "dmeventd": [ + { + "arch": "amd64", + "category": "admin", + "name": "dmeventd", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.02.175-2.1ubuntu4" + } + ], + "dmidecode": [ + { + "arch": "amd64", + "category": "utils", + "name": "dmidecode", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-3ubuntu0.1" + } + ], + "dmsetup": [ + { + "arch": "amd64", + "category": "admin", + "name": "dmsetup", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.02.175-2.1ubuntu4" + } + ], + "dosfstools": [ + { + "arch": "amd64", + "category": "otherosfs", + "name": "dosfstools", + "origin": "Ubuntu", + "source": "apt", + "version": "4.2-1build3" + } + ], + "dpkg": [ + { + "arch": "amd64", + "category": "admin", + "name": "dpkg", + "origin": "Ubuntu", + "source": "apt", + "version": "1.21.1ubuntu2.2" + } + ], + "e2fsprogs": [ + { + "arch": "amd64", + "category": "admin", + "name": "e2fsprogs", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46.5-2ubuntu1.1" + } + ], + "ed": [ + { + "arch": "amd64", + "category": "editors", + "name": "ed", + "origin": "Ubuntu", + "source": "apt", + "version": "1.18-1" + } + ], + "eject": [ + { + "arch": "amd64", + "category": "utils", + "name": "eject", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "ethtool": [ + { + "arch": "amd64", + "category": "utils", + "name": "ethtool", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.16-1" + } + ], + "fdisk": [ + { + "arch": "amd64", + "category": "utils", + "name": "fdisk", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "file": [ + { + "arch": "amd64", + "category": "utils", + "name": "file", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.41-3ubuntu0.1" + } + ], + "finalrd": [ + { + "arch": "all", + "category": "utils", + "name": "finalrd", + "origin": "Ubuntu", + "source": "apt", + "version": "9build1" + } + ], + "findutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "findutils", + "origin": "Ubuntu", + "source": "apt", + "version": "4.8.0-1ubuntu3" + } + ], + "firmware-sof-signed": [ + { + "arch": "all", + "category": "restricted/kernel", + "name": "firmware-sof-signed", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0-1ubuntu4.4" + } + ], + "fontconfig": [ + { + "arch": "amd64", + "category": "utils", + "name": "fontconfig", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13.1-4.2ubuntu5" + } + ], + "fontconfig-config": [ + { + "arch": "all", + "category": "libs", + "name": "fontconfig-config", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13.1-4.2ubuntu5" + } + ], + "fonts-dejavu-core": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-dejavu-core", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37-2build1" + } + ], + "fonts-lato": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-lato", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0-2.1" + } + ], + "fonts-liberation": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-liberation", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.07.4-11" + } + ], + "fonts-ubuntu-console": [ + { + "arch": "all", + "category": "fonts", + "name": "fonts-ubuntu-console", + "origin": "Ubuntu", + "source": "apt", + "version": "0.83-6ubuntu1" + } + ], + "freeipmi": [ + { + "arch": "all", + "category": "universe/admin", + "name": "freeipmi", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "freeipmi-bmc-watchdog": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "freeipmi-bmc-watchdog", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "freeipmi-common": [ + { + "arch": "all", + "category": "admin", + "name": "freeipmi-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "freeipmi-ipmidetect": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "freeipmi-ipmidetect", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "freeipmi-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "freeipmi-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "freeradius-common": [ + { + "arch": "all", + "category": "net", + "name": "freeradius-common", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.1" + } + ], + "freeradius-config": [ + { + "arch": "amd64", + "category": "net", + "name": "freeradius-config", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.1" + } + ], + "freeradius-utils": [ + { + "arch": "amd64", + "category": "net", + "name": "freeradius-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.1" + } + ], + "friendly-recovery": [ + { + "arch": "all", + "category": "admin", + "name": "friendly-recovery", + "origin": "Ubuntu", + "source": "apt", + "version": "0.2.42" + } + ], + "ftp": [ + { + "arch": "all", + "category": "net", + "name": "ftp", + "origin": "Ubuntu", + "source": "apt", + "version": "20210827-4build1" + } + ], + "fuse3": [ + { + "arch": "amd64", + "category": "utils", + "name": "fuse3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.5-1build1" + } + ], + "fwupd": [ + { + "arch": "amd64", + "category": "admin", + "name": "fwupd", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.9-1~22.04.3" + } + ], + "fwupd-signed": [ + { + "arch": "amd64", + "category": "utils", + "name": "fwupd-signed", + "origin": "Ubuntu", + "source": "apt", + "version": "1.51.1~22.04.1+1.4-0ubuntu0.1" + } + ], + "gawk": [ + { + "arch": "amd64", + "category": "interpreters", + "name": "gawk", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.1.0-1ubuntu0.1" + } + ], + "gcc-12-base": [ + { + "arch": "amd64", + "category": "libs", + "name": "gcc-12-base", + "origin": "Ubuntu", + "source": "apt", + "version": "12.3.0-1ubuntu1~22.04" + } + ], + "gdisk": [ + { + "arch": "amd64", + "category": "admin", + "name": "gdisk", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.8-4build1" + } + ], + "gettext-base": [ + { + "arch": "amd64", + "category": "utils", + "name": "gettext-base", + "origin": "Ubuntu", + "source": "apt", + "version": "0.21-4ubuntu4" + } + ], + "gir1.2-glib-2.0": [ + { + "arch": "amd64", + "category": "introspection", + "name": "gir1.2-glib-2.0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.72.0-1" + } + ], + "gir1.2-packagekitglib-1.0": [ + { + "arch": "amd64", + "category": "introspection", + "name": "gir1.2-packagekitglib-1.0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.5-2ubuntu2" + } + ], + "git": [ + { + "arch": "amd64", + "category": "vcs", + "name": "git", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.34.1-1ubuntu1.10" + } + ], + "git-man": [ + { + "arch": "all", + "category": "vcs", + "name": "git-man", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.34.1-1ubuntu1.10" + } + ], + "gnupg": [ + { + "arch": "all", + "category": "utils", + "name": "gnupg", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gnupg-l10n": [ + { + "arch": "all", + "category": "utils", + "name": "gnupg-l10n", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gnupg-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "gnupg-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpg": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpg-agent": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-agent", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpg-wks-client": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-wks-client", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpg-wks-server": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpg-wks-server", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpgconf": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgconf", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpgsm": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgsm", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "gpgv": [ + { + "arch": "amd64", + "category": "utils", + "name": "gpgv", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.27-3ubuntu2.1" + } + ], + "graphviz": [ + { + "arch": "amd64", + "category": "universe/graphics", + "name": "graphviz", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "grep": [ + { + "arch": "amd64", + "category": "utils", + "name": "grep", + "origin": "Ubuntu", + "source": "apt", + "version": "3.7-1build1" + } + ], + "groff-base": [ + { + "arch": "amd64", + "category": "text", + "name": "groff-base", + "origin": "Ubuntu", + "source": "apt", + "version": "1.22.4-8build1" + } + ], + "grub-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2.06-2ubuntu7.2" + } + ], + "grub-gfxpayload-lists": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-gfxpayload-lists", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7" + } + ], + "grub-pc": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-pc", + "origin": "Ubuntu", + "source": "apt", + "version": "2.06-2ubuntu7.2" + } + ], + "grub-pc-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub-pc-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "2.06-2ubuntu7.2" + } + ], + "grub2-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "grub2-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2.06-2ubuntu7.2" + } + ], + "gzip": [ + { + "arch": "amd64", + "category": "utils", + "name": "gzip", + "origin": "Ubuntu", + "source": "apt", + "version": "1.10-4ubuntu4.1" + } + ], + "haveged": [ + { + "arch": "amd64", + "category": "universe/misc", + "name": "haveged", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9.14-1ubuntu1" + } + ], + "hdparm": [ + { + "arch": "amd64", + "category": "admin", + "name": "hdparm", + "origin": "Ubuntu", + "source": "apt", + "version": "9.60+ds-1build3" + } + ], + "hostname": [ + { + "arch": "amd64", + "category": "admin", + "name": "hostname", + "origin": "Ubuntu", + "source": "apt", + "version": "3.23ubuntu2" + } + ], + "htop": [ + { + "arch": "amd64", + "category": "utils", + "name": "htop", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.5-7build2" + } + ], + "ifplugd": [ + { + "arch": "amd64", + "category": "universe/net", + "name": "ifplugd", + "origin": "Ubuntu", + "source": "apt", + "version": "0.28-19.5" + } + ], + "ifupdown": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "ifupdown", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8.36+nmu1ubuntu3.1" + } + ], + "info": [ + { + "arch": "amd64", + "category": "doc", + "name": "info", + "origin": "Ubuntu", + "source": "apt", + "version": "6.8-4build1" + } + ], + "init": [ + { + "arch": "amd64", + "category": "metapackages", + "name": "init", + "origin": "Ubuntu", + "source": "apt", + "version": "1.62" + } + ], + "init-system-helpers": [ + { + "arch": "all", + "category": "admin", + "name": "init-system-helpers", + "origin": "Ubuntu", + "source": "apt", + "version": "1.62" + } + ], + "initramfs-tools": [ + { + "arch": "all", + "category": "utils", + "name": "initramfs-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "0.140ubuntu13.4" + } + ], + "initramfs-tools-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "initramfs-tools-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "0.140ubuntu13.4" + } + ], + "initramfs-tools-core": [ + { + "arch": "all", + "category": "utils", + "name": "initramfs-tools-core", + "origin": "Ubuntu", + "source": "apt", + "version": "0.140ubuntu13.4" + } + ], + "install-info": [ + { + "arch": "amd64", + "category": "doc", + "name": "install-info", + "origin": "Ubuntu", + "source": "apt", + "version": "6.8-4build1" + } + ], + "intel-microcode": [ + { + "arch": "amd64", + "category": "admin", + "name": "intel-microcode", + "origin": "Ubuntu", + "source": "apt", + "version": "3.20231114.0ubuntu0.22.04.1" + } + ], + "iproute2": [ + { + "arch": "amd64", + "category": "net", + "name": "iproute2", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-1ubuntu2" + } + ], + "iptables": [ + { + "arch": "amd64", + "category": "net", + "name": "iptables", + "origin": "Ubuntu", + "source": "apt", + "version": "1.8.7-1ubuntu5.1" + } + ], + "iputils-ping": [ + { + "arch": "amd64", + "category": "net", + "name": "iputils-ping", + "origin": "Ubuntu", + "source": "apt", + "version": "3:20211215-1" + } + ], + "iputils-tracepath": [ + { + "arch": "amd64", + "category": "net", + "name": "iputils-tracepath", + "origin": "Ubuntu", + "source": "apt", + "version": "3:20211215-1" + } + ], + "irqbalance": [ + { + "arch": "amd64", + "category": "utils", + "name": "irqbalance", + "origin": "", + "source": "apt", + "version": "1.8.0-1ubuntu0.1" + } + ], + "isc-dhcp-client": [ + { + "arch": "amd64", + "category": "net", + "name": "isc-dhcp-client", + "origin": "Ubuntu", + "source": "apt", + "version": "4.4.1-2.3ubuntu2.4" + } + ], + "isc-dhcp-common": [ + { + "arch": "amd64", + "category": "net", + "name": "isc-dhcp-common", + "origin": "Ubuntu", + "source": "apt", + "version": "4.4.1-2.3ubuntu2.4" + } + ], + "iso-codes": [ + { + "arch": "all", + "category": "libs", + "name": "iso-codes", + "origin": "Ubuntu", + "source": "apt", + "version": "4.9.0-1" + } + ], + "iucode-tool": [ + { + "arch": "amd64", + "category": "utils", + "name": "iucode-tool", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.1-1build1" + } + ], + "javascript-common": [ + { + "arch": "all", + "category": "web", + "name": "javascript-common", + "origin": "Ubuntu", + "source": "apt", + "version": "11+nmu1" + } + ], + "kbd": [ + { + "arch": "amd64", + "category": "utils", + "name": "kbd", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.0-3ubuntu4.22.04" + } + ], + "keyboard-configuration": [ + { + "arch": "all", + "category": "utils", + "name": "keyboard-configuration", + "origin": "Ubuntu", + "source": "apt", + "version": "1.205ubuntu3" + } + ], + "klibc-utils": [ + { + "arch": "amd64", + "category": "libs", + "name": "klibc-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0.10-4" + } + ], + "kmod": [ + { + "arch": "amd64", + "category": "admin", + "name": "kmod", + "origin": "Ubuntu", + "source": "apt", + "version": "29-1ubuntu1" + } + ], + "kpartx": [ + { + "arch": "amd64", + "category": "admin", + "name": "kpartx", + "origin": "", + "source": "apt", + "version": "0.8.8-1ubuntu1.22.04.3" + } + ], + "landscape-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "landscape-common", + "origin": "Ubuntu", + "source": "apt", + "version": "19.12-0ubuntu13" + } + ], + "lcab": [ + { + "arch": "amd64", + "category": "universe/utils", + "name": "lcab", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0b12-7" + } + ], + "less": [ + { + "arch": "amd64", + "category": "text", + "name": "less", + "origin": "Ubuntu", + "source": "apt", + "version": "590-1ubuntu0.22.04.1" + } + ], + "libacl1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libacl1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.1-1" + } + ], + "libaio1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaio1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.3.112-13build1" + } + ], + "libann0": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libann0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.2+doc-7build1" + } + ], + "libapparmor1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapparmor1", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.4-2ubuntu2.3" + } + ], + "libappstream4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libappstream4", + "origin": "Ubuntu", + "source": "apt", + "version": "0.15.2-2" + } + ], + "libapr1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapr1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.0-8ubuntu0.22.04.1" + } + ], + "libaprutil1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.1-5ubuntu4.22.04.2" + } + ], + "libaprutil1-dbd-sqlite3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1-dbd-sqlite3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.1-5ubuntu4.22.04.2" + } + ], + "libaprutil1-ldap": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaprutil1-ldap", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.1-5ubuntu4.22.04.2" + } + ], + "libapt-pkg6.0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libapt-pkg6.0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.11" + } + ], + "libarchive13": [ + { + "arch": "amd64", + "category": "libs", + "name": "libarchive13", + "origin": "Ubuntu", + "source": "apt", + "version": "3.6.0-1ubuntu1" + } + ], + "libargon2-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libargon2-1", + "origin": "Ubuntu", + "source": "apt", + "version": "0~20171227-0.3" + } + ], + "libassuan0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libassuan0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.5.5-1build1" + } + ], + "libatasmart4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libatasmart4", + "origin": "Ubuntu", + "source": "apt", + "version": "0.19-5build2" + } + ], + "libatm1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libatm1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.5.1-4build2" + } + ], + "libattr1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libattr1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.5.1-1build1" + } + ], + "libaudit-common": [ + { + "arch": "all", + "category": "libs", + "name": "libaudit-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.0.7-1build1" + } + ], + "libaudit1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libaudit1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.0.7-1build1" + } + ], + "libavahi-client3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-client3", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8-5ubuntu5.2" + } + ], + "libavahi-common-data": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-common-data", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8-5ubuntu5.2" + } + ], + "libavahi-common3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libavahi-common3", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8-5ubuntu5.2" + } + ], + "libbinutils": [ + { + "arch": "amd64", + "category": "devel", + "name": "libbinutils", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "libblkid1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblkid1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "libblockdev-crypto2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-crypto2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-fs2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-fs2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-loop2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-loop2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-part-err2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-part-err2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-part2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-part2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-swap2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-swap2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev-utils2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev-utils2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libblockdev2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libblockdev2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.26-1" + } + ], + "libbpf0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbpf0", + "origin": "Ubuntu", + "source": "apt", + "version": "1:0.5.0-1ubuntu22.04.1" + } + ], + "libbrotli1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbrotli1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.9-2build6" + } + ], + "libbsd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbsd0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.11.5-1" + } + ], + "libbz2-1.0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libbz2-1.0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.8-5build1" + } + ], + "libc-bin": [ + { + "arch": "amd64", + "category": "libs", + "name": "libc-bin", + "origin": "", + "source": "apt", + "version": "2.35-0ubuntu3.4" + } + ], + "libc6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libc6", + "origin": "", + "source": "apt", + "version": "2.35-0ubuntu3.4" + } + ], + "libcairo2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcairo2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.16.0-5ubuntu2" + } + ], + "libcap-ng0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcap-ng0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7.9-2.2build3" + } + ], + "libcap2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcap2", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.44-1ubuntu0.22.04.1" + } + ], + "libcap2-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "libcap2-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.44-1ubuntu0.22.04.1" + } + ], + "libcbor0.8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcbor0.8", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8.0-2ubuntu1" + } + ], + "libcdt5": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libcdt5", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "libcgraph6": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libcgraph6", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "libcom-err2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcom-err2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46.5-2ubuntu1.1" + } + ], + "libcrypt1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcrypt1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:4.4.27-1" + } + ], + "libcryptsetup12": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcryptsetup12", + "origin": "", + "source": "apt", + "version": "2:2.4.3-1ubuntu1.1" + } + ], + "libctf-nobfd0": [ + { + "arch": "amd64", + "category": "devel", + "name": "libctf-nobfd0", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "libctf0": [ + { + "arch": "amd64", + "category": "devel", + "name": "libctf0", + "origin": "", + "source": "apt", + "version": "2.38-4ubuntu2.3" + } + ], + "libcups2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcups2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.1op1-1ubuntu4.7" + } + ], + "libcurl3-gnutls": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcurl3-gnutls", + "origin": "", + "source": "apt", + "version": "7.81.0-1ubuntu1.14" + } + ], + "libcurl4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libcurl4", + "origin": "Ubuntu", + "source": "apt", + "version": "7.81.0-1ubuntu1.15" + } + ], + "libdaemon0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdaemon0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.14-7.1ubuntu3" + } + ], + "libdatrie1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdatrie1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.2.13-2" + } + ], + "libdb5.3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdb5.3", + "origin": "Ubuntu", + "source": "apt", + "version": "5.3.28+dfsg1-0.8ubuntu3" + } + ], + "libdbi-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libdbi-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.643-3build3" + } + ], + "libdbus-1-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdbus-1-3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.12.20-2ubuntu4.1" + } + ], + "libdbus-glib-1-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdbus-glib-1-2", + "origin": "Ubuntu", + "source": "apt", + "version": "0.112-2build1" + } + ], + "libdebconfclient0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdebconfclient0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.261ubuntu1" + } + ], + "libdeflate0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdeflate0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.10-2" + } + ], + "libdevmapper-event1.02.1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdevmapper-event1.02.1", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.02.175-2.1ubuntu4" + } + ], + "libdevmapper1.02.1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdevmapper1.02.1", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.02.175-2.1ubuntu4" + } + ], + "libdns-export1110": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdns-export1110", + "origin": "Ubuntu", + "source": "apt", + "version": "1:9.11.19+dfsg-2.1ubuntu3" + } + ], + "libdrm-common": [ + { + "arch": "all", + "category": "libs", + "name": "libdrm-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.113-2~ubuntu0.22.04.1" + } + ], + "libdrm2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdrm2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.113-2~ubuntu0.22.04.1" + } + ], + "libdw1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libdw1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.186-1build1" + } + ], + "libedit2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libedit2", + "origin": "Ubuntu", + "source": "apt", + "version": "3.1-20210910-1build1" + } + ], + "libefiboot1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libefiboot1", + "origin": "Ubuntu", + "source": "apt", + "version": "37-6ubuntu2" + } + ], + "libefivar1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libefivar1", + "origin": "Ubuntu", + "source": "apt", + "version": "37-6ubuntu2" + } + ], + "libelf1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libelf1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.186-1build1" + } + ], + "liberror-perl": [ + { + "arch": "all", + "category": "perl", + "name": "liberror-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "0.17029-1" + } + ], + "libestr0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libestr0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.10-2.1build3" + } + ], + "libevdev2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevdev2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.12.1+dfsg-1" + } + ], + "libevent-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-2.1-7", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.12-stable-1build3" + } + ], + "libevent-core-2.1-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libevent-core-2.1-7", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.12-stable-1build3" + } + ], + "libexpat1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libexpat1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.7-1ubuntu0.2" + } + ], + "libext2fs2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libext2fs2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46.5-2ubuntu1.1" + } + ], + "libfastjson4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfastjson4", + "origin": "Ubuntu", + "source": "apt", + "version": "0.99.9-1build2" + } + ], + "libfdisk1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfdisk1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "libffi8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libffi8", + "origin": "Ubuntu", + "source": "apt", + "version": "3.4.2-4" + } + ], + "libfido2-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfido2-1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.10.0-1" + } + ], + "libfl2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfl2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.6.4-8build2" + } + ], + "libflashrom1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libflashrom1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2-5build1" + } + ], + "libfontconfig1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfontconfig1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13.1-4.2ubuntu5" + } + ], + "libfreeipmi17": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfreeipmi17", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "libfreeradius3": [ + { + "arch": "amd64", + "category": "net", + "name": "libfreeradius3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.26~dfsg~git20220223.1.00ed0241fa-0ubuntu3.1" + } + ], + "libfreetype6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfreetype6", + "origin": "Ubuntu", + "source": "apt", + "version": "2.11.1+dfsg-1ubuntu0.2" + } + ], + "libfribidi0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfribidi0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.8-2ubuntu3.1" + } + ], + "libfsverity0": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libfsverity0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4-1~exp1build1" + } + ], + "libftdi1-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libftdi1-2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5-5build3" + } + ], + "libfuse3-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfuse3-3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.5-1build1" + } + ], + "libfwupd2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfwupd2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.9-1~22.04.3" + } + ], + "libfwupdplugin5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libfwupdplugin5", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.9-1~22.04.3" + } + ], + "libgcab-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgcab-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4-3build2" + } + ], + "libgcc-s1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgcc-s1", + "origin": "Ubuntu", + "source": "apt", + "version": "12.3.0-1ubuntu1~22.04" + } + ], + "libgcrypt20": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgcrypt20", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9.4-3ubuntu3" + } + ], + "libgd3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgd3", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.0-2ubuntu2" + } + ], + "libgdbm-compat4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgdbm-compat4", + "origin": "Ubuntu", + "source": "apt", + "version": "1.23-1" + } + ], + "libgdbm6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgdbm6", + "origin": "Ubuntu", + "source": "apt", + "version": "1.23-1" + } + ], + "libgirepository-1.0-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgirepository-1.0-1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.72.0-1" + } + ], + "libglib2.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libglib2.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.72.4-0ubuntu2.2" + } + ], + "libglib2.0-bin": [ + { + "arch": "amd64", + "category": "misc", + "name": "libglib2.0-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "2.72.4-0ubuntu2.2" + } + ], + "libglib2.0-data": [ + { + "arch": "all", + "category": "misc", + "name": "libglib2.0-data", + "origin": "Ubuntu", + "source": "apt", + "version": "2.72.4-0ubuntu2.2" + } + ], + "libgmp10": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgmp10", + "origin": "Ubuntu", + "source": "apt", + "version": "2:6.2.1+dfsg-3ubuntu1" + } + ], + "libgnutls30": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgnutls30", + "origin": "Ubuntu", + "source": "apt", + "version": "3.7.3-4ubuntu1.3" + } + ], + "libgomp1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgomp1", + "origin": "Ubuntu", + "source": "apt", + "version": "12.3.0-1ubuntu1~22.04" + } + ], + "libgpg-error0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpg-error0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.43-3" + } + ], + "libgpgme11": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpgme11", + "origin": "Ubuntu", + "source": "apt", + "version": "1.16.0-1.2ubuntu4.1" + } + ], + "libgpm2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgpm2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.20.7-10build1" + } + ], + "libgraphite2-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgraphite2-3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.14-1build2" + } + ], + "libgsf-1-114": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgsf-1-114", + "origin": "Ubuntu", + "source": "apt", + "version": "1.14.47-1build2" + } + ], + "libgsf-1-common": [ + { + "arch": "all", + "category": "libs", + "name": "libgsf-1-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1.14.47-1build2" + } + ], + "libgssapi-krb5-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgssapi-krb5-2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.19.2-2ubuntu0.3" + } + ], + "libgstreamer1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgstreamer1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.20.3-0ubuntu1" + } + ], + "libgts-0.7-5": [ + { + "arch": "amd64", + "category": "universe/devel", + "name": "libgts-0.7-5", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7.6+darcs121130-5" + } + ], + "libgts-bin": [ + { + "arch": "amd64", + "category": "universe/math", + "name": "libgts-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7.6+darcs121130-5" + } + ], + "libgudev-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgudev-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1:237-2build1" + } + ], + "libgusb2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libgusb2", + "origin": "Ubuntu", + "source": "apt", + "version": "0.3.10-1" + } + ], + "libgvc6": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libgvc6", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "libgvpr2": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libgvpr2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "libharfbuzz0b": [ + { + "arch": "amd64", + "category": "libs", + "name": "libharfbuzz0b", + "origin": "Ubuntu", + "source": "apt", + "version": "2.7.4-1ubuntu3.1" + } + ], + "libhavege2": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libhavege2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9.14-1ubuntu1" + } + ], + "libhogweed6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libhogweed6", + "origin": "Ubuntu", + "source": "apt", + "version": "3.7.3-1build2" + } + ], + "libice6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libice6", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.0.10-1build2" + } + ], + "libicu70": [ + { + "arch": "amd64", + "category": "libs", + "name": "libicu70", + "origin": "Ubuntu", + "source": "apt", + "version": "70.1-2" + } + ], + "libidn2-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libidn2-0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.2-2build1" + } + ], + "libimobiledevice6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libimobiledevice6", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.0-6build3" + } + ], + "libinih1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libinih1", + "origin": "Ubuntu", + "source": "apt", + "version": "53-1ubuntu3" + } + ], + "libintl-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libintl-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.26-3build2" + } + ], + "libintl-xs-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libintl-xs-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.26-3build2" + } + ], + "libip4tc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libip4tc2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.8.7-1ubuntu5.1" + } + ], + "libip6tc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libip6tc2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.8.7-1ubuntu5.1" + } + ], + "libipmiconsole2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libipmiconsole2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "libipmidetect0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libipmidetect0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.9-2ubuntu0.22.04.2" + } + ], + "libisc-export1105": [ + { + "arch": "amd64", + "category": "libs", + "name": "libisc-export1105", + "origin": "Ubuntu", + "source": "apt", + "version": "1:9.11.19+dfsg-2.1ubuntu3" + } + ], + "libisns0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libisns0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.101-0ubuntu2" + } + ], + "libjansson4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjansson4", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13.1-1.1build3" + } + ], + "libjbig0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjbig0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1-3.1ubuntu0.22.04.1" + } + ], + "libjcat1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjcat1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.9-1" + } + ], + "libjpeg-turbo8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjpeg-turbo8", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.2-0ubuntu1" + } + ], + "libjpeg8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjpeg8", + "origin": "Ubuntu", + "source": "apt", + "version": "8c-2ubuntu10" + } + ], + "libjs-jquery": [ + { + "arch": "all", + "category": "web", + "name": "libjs-jquery", + "origin": "Ubuntu", + "source": "apt", + "version": "3.6.0+dfsg+~3.5.13-1" + } + ], + "libjson-c5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjson-c5", + "origin": "Ubuntu", + "source": "apt", + "version": "0.15-3~ubuntu1.22.04.2" + } + ], + "libjson-glib-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libjson-glib-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.6-1build1" + } + ], + "libjson-glib-1.0-common": [ + { + "arch": "all", + "category": "libs", + "name": "libjson-glib-1.0-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.6-1build1" + } + ], + "libk5crypto3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libk5crypto3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.19.2-2ubuntu0.3" + } + ], + "libkeyutils1": [ + { + "arch": "amd64", + "category": "misc", + "name": "libkeyutils1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.1-2ubuntu3" + } + ], + "libklibc": [ + { + "arch": "amd64", + "category": "libs", + "name": "libklibc", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0.10-4" + } + ], + "libkmod2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkmod2", + "origin": "Ubuntu", + "source": "apt", + "version": "29-1ubuntu1" + } + ], + "libkrb5-3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkrb5-3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.19.2-2ubuntu0.3" + } + ], + "libkrb5support0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libkrb5support0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.19.2-2ubuntu0.3" + } + ], + "libksba8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libksba8", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.0-2ubuntu0.2" + } + ], + "liblab-gamut1": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "liblab-gamut1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "liblcms2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblcms2-2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.12~rc1-2build2" + } + ], + "libldap-2.5-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libldap-2.5-0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.5.16+dfsg-0ubuntu0.22.04.1" + } + ], + "libldap-common": [ + { + "arch": "all", + "category": "libs", + "name": "libldap-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2.5.16+dfsg-0ubuntu0.22.04.1" + } + ], + "libldb2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libldb2", + "origin": "Ubuntu", + "source": "apt", + "version": "2:2.4.4-0ubuntu0.22.04.2" + } + ], + "liblmdb0": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblmdb0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.24-1build2" + } + ], + "liblocale-gettext-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "liblocale-gettext-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.07-4build3" + } + ], + "libltdl7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libltdl7", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.6-15build2" + } + ], + "liblua5.2-0": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "liblua5.2-0", + "origin": "Ubuntu", + "source": "apt", + "version": "5.2.4-2" + } + ], + "liblua5.3-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblua5.3-0", + "origin": "Ubuntu", + "source": "apt", + "version": "5.3.6-1build1" + } + ], + "liblvm2cmd2.03": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblvm2cmd2.03", + "origin": "Ubuntu", + "source": "apt", + "version": "2.03.11-2.1ubuntu4" + } + ], + "liblz4-1": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblz4-1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9.3-2build2" + } + ], + "liblzma5": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblzma5", + "origin": "Ubuntu", + "source": "apt", + "version": "5.2.5-2ubuntu1" + } + ], + "liblzo2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "liblzo2-2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.10-2build3" + } + ], + "libmagic-mgc": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmagic-mgc", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.41-3ubuntu0.1" + } + ], + "libmagic1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmagic1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:5.41-3ubuntu0.1" + } + ], + "libmaxminddb0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmaxminddb0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.2-1build2" + } + ], + "libmbim-glib4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmbim-glib4", + "origin": "Ubuntu", + "source": "apt", + "version": "1.28.0-1~ubuntu20.04.1" + } + ], + "libmbim-proxy": [ + { + "arch": "amd64", + "category": "net", + "name": "libmbim-proxy", + "origin": "Ubuntu", + "source": "apt", + "version": "1.28.0-1~ubuntu20.04.1" + } + ], + "libmd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmd0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.4-1build1" + } + ], + "libmm-glib0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmm-glib0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.20.0-1~ubuntu22.04.2" + } + ], + "libmnl0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmnl0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.4-3build2" + } + ], + "libmodule-find-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libmodule-find-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "0.15-1" + } + ], + "libmodule-scandeps-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libmodule-scandeps-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.31-1" + } + ], + "libmount1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmount1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "libmpdec3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmpdec3", + "origin": "Ubuntu", + "source": "apt", + "version": "2.5.1-2build2" + } + ], + "libmpfr6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmpfr6", + "origin": "Ubuntu", + "source": "apt", + "version": "4.1.0-3build3" + } + ], + "libmspack0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libmspack0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.10.1-2build2" + } + ], + "libncurses6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libncurses6", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "libncursesw6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libncursesw6", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "libnetfilter-conntrack3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnetfilter-conntrack3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.9-1" + } + ], + "libnetplan0": [ + { + "arch": "amd64", + "category": "net", + "name": "libnetplan0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.106.1-7ubuntu0.22.04.2" + } + ], + "libnettle8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnettle8", + "origin": "Ubuntu", + "source": "apt", + "version": "3.7.3-1build2" + } + ], + "libnewt0.52": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnewt0.52", + "origin": "Ubuntu", + "source": "apt", + "version": "0.52.21-5ubuntu2" + } + ], + "libnfnetlink0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnfnetlink0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.1-3build3" + } + ], + "libnftables1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnftables1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.2-1ubuntu3" + } + ], + "libnftnl11": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnftnl11", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.1-1build1" + } + ], + "libnghttp2-14": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnghttp2-14", + "origin": "Ubuntu", + "source": "apt", + "version": "1.43.0-1ubuntu0.1" + } + ], + "libnl-3-200": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnl-3-200", + "origin": "Ubuntu", + "source": "apt", + "version": "3.5.0-0.1" + } + ], + "libnl-genl-3-200": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnl-genl-3-200", + "origin": "Ubuntu", + "source": "apt", + "version": "3.5.0-0.1" + } + ], + "libnpth0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnpth0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6-3build2" + } + ], + "libnsl2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnsl2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.0-2build2" + } + ], + "libnspr4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnspr4", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.32-3build1" + } + ], + "libnss-systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "libnss-systemd", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "libnss3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnss3", + "origin": "Ubuntu", + "source": "apt", + "version": "2:3.68.2-0ubuntu1.2" + } + ], + "libntfs-3g89": [ + { + "arch": "amd64", + "category": "libs", + "name": "libntfs-3g89", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2021.8.22-3ubuntu1.2" + } + ], + "libnuma1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libnuma1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0.14-3ubuntu2" + } + ], + "libopeniscsiusr": [ + { + "arch": "amd64", + "category": "net", + "name": "libopeniscsiusr", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.5-1ubuntu1" + } + ], + "libopenjp2-7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libopenjp2-7", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.0-6" + } + ], + "libp11-kit0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libp11-kit0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.24.0-6build1" + } + ], + "libpackagekit-glib2-18": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpackagekit-glib2-18", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.5-2ubuntu2" + } + ], + "libpam-cap": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpam-cap", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.44-1ubuntu0.22.04.1" + } + ], + "libpam-modules": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-modules", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.0-11ubuntu2.3" + } + ], + "libpam-modules-bin": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-modules-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.0-11ubuntu2.3" + } + ], + "libpam-runtime": [ + { + "arch": "all", + "category": "admin", + "name": "libpam-runtime", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.0-11ubuntu2.3" + } + ], + "libpam-systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "libpam-systemd", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "libpam0g": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpam0g", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.0-11ubuntu2.3" + } + ], + "libpango-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpango-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.50.6+ds-2ubuntu1" + } + ], + "libpangocairo-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpangocairo-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.50.6+ds-2ubuntu1" + } + ], + "libpangoft2-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpangoft2-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.50.6+ds-2ubuntu1" + } + ], + "libparted-fs-resize0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libparted-fs-resize0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.4-2build1" + } + ], + "libparted2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libparted2", + "origin": "Ubuntu", + "source": "apt", + "version": "3.4-2build1" + } + ], + "libpathplan4": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "libpathplan4", + "origin": "Ubuntu", + "source": "apt", + "version": "2.42.2-6" + } + ], + "libpcap0.8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcap0.8", + "origin": "Ubuntu", + "source": "apt", + "version": "1.10.1-4build1" + } + ], + "libpci3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpci3", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.7.0-6" + } + ], + "libpcre2-8-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcre2-8-0", + "origin": "Ubuntu", + "source": "apt", + "version": "10.39-3ubuntu0.1" + } + ], + "libpcre3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpcre3", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.39-13ubuntu0.22.04.1" + } + ], + "libperl5.34": [ + { + "arch": "amd64", + "category": "libs", + "name": "libperl5.34", + "origin": "Ubuntu", + "source": "apt", + "version": "5.34.0-3ubuntu1.3" + } + ], + "libpipeline1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpipeline1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.5-1" + } + ], + "libpixman-1-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpixman-1-0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.40.0-1ubuntu0.22.04.1" + } + ], + "libplist3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libplist3", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.0-6build2" + } + ], + "libplymouth5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libplymouth5", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.5+git20211018-1ubuntu3" + } + ], + "libpng16-16": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpng16-16", + "origin": "Ubuntu", + "source": "apt", + "version": "1.6.37-3build5" + } + ], + "libpolkit-agent-1-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpolkit-agent-1-0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.105-33" + } + ], + "libpolkit-gobject-1-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpolkit-gobject-1-0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.105-33" + } + ], + "libpoppler118": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpoppler118", + "origin": "Ubuntu", + "source": "apt", + "version": "22.02.0-2ubuntu0.3" + } + ], + "libpopt0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpopt0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.18-3build1" + } + ], + "libpq5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpq5", + "origin": "Ubuntu", + "source": "apt", + "version": "14.10-0ubuntu0.22.04.1" + } + ], + "libproc-processtable-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libproc-processtable-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "0.634-1build1" + } + ], + "libprocps8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libprocps8", + "origin": "Ubuntu", + "source": "apt", + "version": "2:3.3.17-6ubuntu2.1" + } + ], + "libpsl5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpsl5", + "origin": "Ubuntu", + "source": "apt", + "version": "0.21.0-1.2build2" + } + ], + "libpython3-stdlib": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3-stdlib", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.6-1~22.04" + } + ], + "libpython3.10": [ + { + "arch": "amd64", + "category": "libs", + "name": "libpython3.10", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.12-1~22.04.3" + } + ], + "libpython3.10-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3.10-minimal", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.12-1~22.04.3" + } + ], + "libpython3.10-stdlib": [ + { + "arch": "amd64", + "category": "python", + "name": "libpython3.10-stdlib", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.12-1~22.04.3" + } + ], + "libqmi-glib5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libqmi-glib5", + "origin": "Ubuntu", + "source": "apt", + "version": "1.32.0-1ubuntu0.22.04.1" + } + ], + "libqmi-proxy": [ + { + "arch": "amd64", + "category": "net", + "name": "libqmi-proxy", + "origin": "Ubuntu", + "source": "apt", + "version": "1.32.0-1ubuntu0.22.04.1" + } + ], + "libreadline8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libreadline8", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1" + } + ], + "librpm9": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "librpm9", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "librpmbuild9": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "librpmbuild9", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "librpmio9": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "librpmio9", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "librpmsign9": [ + { + "arch": "amd64", + "category": "universe/libs", + "name": "librpmsign9", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "librtmp1": [ + { + "arch": "amd64", + "category": "libs", + "name": "librtmp1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4+20151223.gitfa8646d.1-2build4" + } + ], + "libruby3.0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libruby3.0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.2-7ubuntu2.4" + } + ], + "libsasl2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsasl2-2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.27+dfsg2-3ubuntu1.2" + } + ], + "libsasl2-modules": [ + { + "arch": "amd64", + "category": "devel", + "name": "libsasl2-modules", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.27+dfsg2-3ubuntu1.2" + } + ], + "libsasl2-modules-db": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsasl2-modules-db", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.27+dfsg2-3ubuntu1.2" + } + ], + "libseccomp2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libseccomp2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.5.3-2ubuntu2" + } + ], + "libselinux1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libselinux1", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-1build2" + } + ], + "libsemanage-common": [ + { + "arch": "all", + "category": "libs", + "name": "libsemanage-common", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-1build2" + } + ], + "libsemanage2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsemanage2", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-1build2" + } + ], + "libsensors-config": [ + { + "arch": "all", + "category": "utils", + "name": "libsensors-config", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.6.0-7ubuntu1" + } + ], + "libsensors5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsensors5", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.6.0-7ubuntu1" + } + ], + "libsepol2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsepol2", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-1build1" + } + ], + "libsgutils2-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsgutils2-2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46-1ubuntu0.22.04.1" + } + ], + "libsigsegv2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsigsegv2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.13-1ubuntu3" + } + ], + "libslang2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libslang2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.2-5build4" + } + ], + "libsm6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsm6", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.2.3-1build2" + } + ], + "libsmartcols1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsmartcols1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "libsmbclient": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsmbclient", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "libsmbios-c2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsmbios-c2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.3-1build1" + } + ], + "libsodium23": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsodium23", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.18-1build2" + } + ], + "libsort-naturally-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libsort-naturally-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.03-2" + } + ], + "libsqlite3-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsqlite3-0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.37.2-2ubuntu0.1" + } + ], + "libss2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libss2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46.5-2ubuntu1.1" + } + ], + "libssh-4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libssh-4", + "origin": "", + "source": "apt", + "version": "0.9.6-2ubuntu0.22.04.1" + } + ], + "libssl3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libssl3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.2-0ubuntu1.12" + } + ], + "libstdc++6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libstdc++6", + "origin": "Ubuntu", + "source": "apt", + "version": "12.3.0-1ubuntu1~22.04" + } + ], + "libstemmer0d": [ + { + "arch": "amd64", + "category": "libs", + "name": "libstemmer0d", + "origin": "Ubuntu", + "source": "apt", + "version": "2.2.0-1build1" + } + ], + "libsystemd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libsystemd0", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "libtalloc2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtalloc2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.3-2build1" + } + ], + "libtasn1-6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtasn1-6", + "origin": "Ubuntu", + "source": "apt", + "version": "4.18.0-4build1" + } + ], + "libtcl8.6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtcl8.6", + "origin": "Ubuntu", + "source": "apt", + "version": "8.6.12+dfsg-1build1" + } + ], + "libtdb1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtdb1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.5-2build1" + } + ], + "libterm-readkey-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libterm-readkey-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "2.38-1build4" + } + ], + "libtevent0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtevent0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.11.0-1build1" + } + ], + "libtext-charwidth-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libtext-charwidth-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "0.04-10build3" + } + ], + "libtext-iconv-perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "libtext-iconv-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7-7build3" + } + ], + "libtext-wrapi18n-perl": [ + { + "arch": "all", + "category": "perl", + "name": "libtext-wrapi18n-perl", + "origin": "Ubuntu", + "source": "apt", + "version": "0.06-9" + } + ], + "libthai-data": [ + { + "arch": "all", + "category": "libs", + "name": "libthai-data", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.29-1build1" + } + ], + "libthai0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libthai0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.29-1build1" + } + ], + "libtiff5": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtiff5", + "origin": "Ubuntu", + "source": "apt", + "version": "4.3.0-6ubuntu0.7" + } + ], + "libtinfo6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtinfo6", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "libtirpc-common": [ + { + "arch": "all", + "category": "libs", + "name": "libtirpc-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.2-2ubuntu0.1" + } + ], + "libtirpc3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtirpc3", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.2-2ubuntu0.1" + } + ], + "libtss2-esys-3.0.2-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-esys-3.0.2-0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-mu0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-mu0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-sys1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-sys1", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-tcti-cmd0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-tcti-cmd0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-tcti-device0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-tcti-device0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-tcti-mssim0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-tcti-mssim0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libtss2-tcti-swtpm0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libtss2-tcti-swtpm0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu1" + } + ], + "libuchardet0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuchardet0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.0.7-1build2" + } + ], + "libudev1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libudev1", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "libudisks2-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libudisks2-0", + "origin": "Ubuntu", + "source": "apt", + "version": "2.9.4-1ubuntu2" + } + ], + "libunistring2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libunistring2", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0-1" + } + ], + "libunwind8": [ + { + "arch": "amd64", + "category": "libs", + "name": "libunwind8", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.2-2build2.1" + } + ], + "libupower-glib3": [ + { + "arch": "amd64", + "category": "libs", + "name": "libupower-glib3", + "origin": "Ubuntu", + "source": "apt", + "version": "0.99.17-1" + } + ], + "liburcu8": [ + { + "arch": "amd64", + "category": "libs", + "name": "liburcu8", + "origin": "Ubuntu", + "source": "apt", + "version": "0.13.1-1" + } + ], + "liburing2": [ + { + "arch": "amd64", + "category": "libs", + "name": "liburing2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1-2build1" + } + ], + "libusb-1.0-0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libusb-1.0-0", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.0.25-1ubuntu2" + } + ], + "libusbmuxd6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libusbmuxd6", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0.2-3build2" + } + ], + "libutempter0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libutempter0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.1-2build2" + } + ], + "libuuid1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuuid1", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "libuv1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libuv1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.43.0-1" + } + ], + "libvolume-key1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libvolume-key1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.3.12-3.1build3" + } + ], + "libwbclient0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwbclient0", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "libwebp7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwebp7", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.2-2ubuntu0.22.04.2" + } + ], + "libwrap0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libwrap0", + "origin": "Ubuntu", + "source": "apt", + "version": "7.6.q-31build2" + } + ], + "libx11-6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libx11-6", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.7.5-1ubuntu0.3" + } + ], + "libx11-data": [ + { + "arch": "all", + "category": "x11", + "name": "libx11-data", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.7.5-1ubuntu0.3" + } + ], + "libxau6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxau6", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.0.9-1build5" + } + ], + "libxaw7": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxaw7", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.0.14-1" + } + ], + "libxcb-render0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb-render0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.14-3ubuntu3" + } + ], + "libxcb-shm0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb-shm0", + "origin": "Ubuntu", + "source": "apt", + "version": "1.14-3ubuntu3" + } + ], + "libxcb1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxcb1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.14-3ubuntu3" + } + ], + "libxdmcp6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxdmcp6", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.1.3-0ubuntu5" + } + ], + "libxext6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxext6", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.3.4-1build1" + } + ], + "libxml2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxml2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.9.13+dfsg-1ubuntu0.3" + } + ], + "libxmlb2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmlb2", + "origin": "Ubuntu", + "source": "apt", + "version": "0.3.6-2build1" + } + ], + "libxmlsec1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmlsec1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.33-1build2" + } + ], + "libxmlsec1-openssl": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmlsec1-openssl", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.33-1build2" + } + ], + "libxmu6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmu6", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.1.3-3" + } + ], + "libxmuu1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxmuu1", + "origin": "Ubuntu", + "source": "apt", + "version": "2:1.1.3-3" + } + ], + "libxpm4": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxpm4", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.5.12-1ubuntu0.22.04.2" + } + ], + "libxrender1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxrender1", + "origin": "Ubuntu", + "source": "apt", + "version": "1:0.9.10-1build4" + } + ], + "libxslt1.1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxslt1.1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.34-4ubuntu0.22.04.1" + } + ], + "libxt6": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxt6", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.2.1-1" + } + ], + "libxtables12": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxtables12", + "origin": "Ubuntu", + "source": "apt", + "version": "1.8.7-1ubuntu5.1" + } + ], + "libxxhash0": [ + { + "arch": "amd64", + "category": "libs", + "name": "libxxhash0", + "origin": "Ubuntu", + "source": "apt", + "version": "0.8.1-1" + } + ], + "libyaml-0-2": [ + { + "arch": "amd64", + "category": "libs", + "name": "libyaml-0-2", + "origin": "Ubuntu", + "source": "apt", + "version": "0.2.2-1build2" + } + ], + "libzstd1": [ + { + "arch": "amd64", + "category": "libs", + "name": "libzstd1", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.8+dfsg-3build1" + } + ], + "linux-base": [ + { + "arch": "all", + "category": "kernel", + "name": "linux-base", + "origin": "Ubuntu", + "source": "apt", + "version": "4.5ubuntu9" + } + ], + "linux-cloud-tools-5.15.0-89": [ + { + "arch": "amd64", + "category": "devel", + "name": "linux-cloud-tools-5.15.0-89", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-cloud-tools-5.15.0-89-generic": [ + { + "arch": "amd64", + "category": "devel", + "name": "linux-cloud-tools-5.15.0-89-generic", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-cloud-tools-common": [ + { + "arch": "all", + "category": "kernel", + "name": "linux-cloud-tools-common", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-cloud-tools-virtual": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-cloud-tools-virtual", + "origin": "", + "source": "apt", + "version": "5.15.0.89.86" + } + ], + "linux-firmware": [ + { + "arch": "all", + "category": "misc", + "name": "linux-firmware", + "origin": "Ubuntu", + "source": "apt", + "version": "20220329.git681281e4-0ubuntu3.23" + } + ], + "linux-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-generic", + "origin": "", + "source": "apt", + "version": "5.15.0.89.86" + } + ], + "linux-headers-5.15.0-89": [ + { + "arch": "all", + "category": "devel", + "name": "linux-headers-5.15.0-89", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-headers-5.15.0-89-generic": [ + { + "arch": "amd64", + "category": "devel", + "name": "linux-headers-5.15.0-89-generic", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-headers-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-headers-generic", + "origin": "", + "source": "apt", + "version": "5.15.0.89.86" + } + ], + "linux-image-5.15.0-89-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-image-5.15.0-89-generic", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-image-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-image-generic", + "origin": "", + "source": "apt", + "version": "5.15.0.89.86" + } + ], + "linux-modules-5.15.0-89-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-modules-5.15.0-89-generic", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "linux-modules-extra-5.15.0-89-generic": [ + { + "arch": "amd64", + "category": "kernel", + "name": "linux-modules-extra-5.15.0-89-generic", + "origin": "Ubuntu", + "source": "apt", + "version": "5.15.0-89.99" + } + ], + "locales": [ + { + "arch": "all", + "category": "localization", + "name": "locales", + "origin": "", + "source": "apt", + "version": "2.35-0ubuntu3.4" + } + ], + "login": [ + { + "arch": "amd64", + "category": "admin", + "name": "login", + "origin": "Ubuntu", + "source": "apt", + "version": "1:4.8.1-2ubuntu2.1" + } + ], + "logrotate": [ + { + "arch": "amd64", + "category": "admin", + "name": "logrotate", + "origin": "Ubuntu", + "source": "apt", + "version": "3.19.0-1ubuntu1.1" + } + ], + "logsave": [ + { + "arch": "amd64", + "category": "admin", + "name": "logsave", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46.5-2ubuntu1.1" + } + ], + "lsb-base": [ + { + "arch": "all", + "category": "misc", + "name": "lsb-base", + "origin": "Ubuntu", + "source": "apt", + "version": "11.1.0ubuntu4" + } + ], + "lsb-release": [ + { + "arch": "all", + "category": "misc", + "name": "lsb-release", + "origin": "Ubuntu", + "source": "apt", + "version": "11.1.0ubuntu4" + } + ], + "lshw": [ + { + "arch": "amd64", + "category": "utils", + "name": "lshw", + "origin": "Ubuntu", + "source": "apt", + "version": "02.19.git.2021.06.19.996aaad9c7-2build1" + } + ], + "lsof": [ + { + "arch": "amd64", + "category": "utils", + "name": "lsof", + "origin": "Ubuntu", + "source": "apt", + "version": "4.93.2+dfsg-1.1build2" + } + ], + "lvm2": [ + { + "arch": "amd64", + "category": "admin", + "name": "lvm2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.03.11-2.1ubuntu4" + } + ], + "lxd-agent-loader": [ + { + "arch": "all", + "category": "misc", + "name": "lxd-agent-loader", + "origin": "Ubuntu", + "source": "apt", + "version": "0.5" + } + ], + "mailcap": [ + { + "arch": "all", + "category": "utils", + "name": "mailcap", + "origin": "Ubuntu", + "source": "apt", + "version": "3.70+nmu1ubuntu1" + } + ], + "make": [ + { + "arch": "amd64", + "category": "devel", + "name": "make", + "origin": "Ubuntu", + "source": "apt", + "version": "4.3-4.1build1" + } + ], + "man-db": [ + { + "arch": "amd64", + "category": "doc", + "name": "man-db", + "origin": "Ubuntu", + "source": "apt", + "version": "2.10.2-1" + } + ], + "manpages": [ + { + "arch": "all", + "category": "doc", + "name": "manpages", + "origin": "Ubuntu", + "source": "apt", + "version": "5.10-1ubuntu1" + } + ], + "mawk": [ + { + "arch": "amd64", + "category": "utils", + "name": "mawk", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.4.20200120-3" + } + ], + "mdadm": [ + { + "arch": "amd64", + "category": "admin", + "name": "mdadm", + "origin": "Ubuntu", + "source": "apt", + "version": "4.2-0ubuntu2" + } + ], + "media-types": [ + { + "arch": "all", + "category": "net", + "name": "media-types", + "origin": "Ubuntu", + "source": "apt", + "version": "7.0.0" + } + ], + "mime-support": [ + { + "arch": "all", + "category": "net", + "name": "mime-support", + "origin": "Ubuntu", + "source": "apt", + "version": "3.66" + } + ], + "mlocate": [ + { + "arch": "all", + "category": "utils", + "name": "mlocate", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.15-1ubuntu2" + } + ], + "modemmanager": [ + { + "arch": "amd64", + "category": "net", + "name": "modemmanager", + "origin": "Ubuntu", + "source": "apt", + "version": "1.20.0-1~ubuntu22.04.2" + } + ], + "motd-news-config": [ + { + "arch": "all", + "category": "admin", + "name": "motd-news-config", + "origin": "Ubuntu", + "source": "apt", + "version": "12ubuntu4.4" + } + ], + "mount": [ + { + "arch": "amd64", + "category": "admin", + "name": "mount", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "mtr-tiny": [ + { + "arch": "amd64", + "category": "net", + "name": "mtr-tiny", + "origin": "Ubuntu", + "source": "apt", + "version": "0.95-1" + } + ], + "multipath-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "multipath-tools", + "origin": "", + "source": "apt", + "version": "0.8.8-1ubuntu1.22.04.3" + } + ], + "nano": [ + { + "arch": "amd64", + "category": "editors", + "name": "nano", + "origin": "Ubuntu", + "source": "apt", + "version": "6.2-1" + } + ], + "ncurses-base": [ + { + "arch": "all", + "category": "utils", + "name": "ncurses-base", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "ncurses-bin": [ + { + "arch": "amd64", + "category": "utils", + "name": "ncurses-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "ncurses-term": [ + { + "arch": "all", + "category": "admin", + "name": "ncurses-term", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3-2ubuntu0.1" + } + ], + "needrestart": [ + { + "arch": "all", + "category": "admin", + "name": "needrestart", + "origin": "Ubuntu", + "source": "apt", + "version": "3.5-5ubuntu2.1" + } + ], + "netbase": [ + { + "arch": "all", + "category": "admin", + "name": "netbase", + "origin": "Ubuntu", + "source": "apt", + "version": "6.3" + } + ], + "netcat-openbsd": [ + { + "arch": "amd64", + "category": "net", + "name": "netcat-openbsd", + "origin": "Ubuntu", + "source": "apt", + "version": "1.218-4ubuntu1" + } + ], + "netplan.io": [ + { + "arch": "amd64", + "category": "net", + "name": "netplan.io", + "origin": "Ubuntu", + "source": "apt", + "version": "0.106.1-7ubuntu0.22.04.2" + } + ], + "networkd-dispatcher": [ + { + "arch": "all", + "category": "utils", + "name": "networkd-dispatcher", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1-2ubuntu0.22.04.2" + } + ], + "nftables": [ + { + "arch": "amd64", + "category": "net", + "name": "nftables", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.2-1ubuntu3" + } + ], + "ntfs-3g": [ + { + "arch": "amd64", + "category": "otherosfs", + "name": "ntfs-3g", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2021.8.22-3ubuntu1.2" + } + ], + "open-iscsi": [ + { + "arch": "amd64", + "category": "net", + "name": "open-iscsi", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1.5-1ubuntu1" + } + ], + "open-vm-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "open-vm-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "2:12.1.5-3~ubuntu0.22.04.4" + } + ], + "openssh-client": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-client", + "origin": "", + "source": "apt", + "version": "1:8.9p1-3ubuntu0.4" + } + ], + "openssh-server": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-server", + "origin": "", + "source": "apt", + "version": "1:8.9p1-3ubuntu0.4" + } + ], + "openssh-sftp-server": [ + { + "arch": "amd64", + "category": "net", + "name": "openssh-sftp-server", + "origin": "", + "source": "apt", + "version": "1:8.9p1-3ubuntu0.4" + } + ], + "openssl": [ + { + "arch": "amd64", + "category": "utils", + "name": "openssl", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.2-0ubuntu1.12" + } + ], + "os-prober": [ + { + "arch": "amd64", + "category": "utils", + "name": "os-prober", + "origin": "Ubuntu", + "source": "apt", + "version": "1.79ubuntu2" + } + ], + "overlayroot": [ + { + "arch": "all", + "category": "admin", + "name": "overlayroot", + "origin": "Ubuntu", + "source": "apt", + "version": "0.47ubuntu1" + } + ], + "packagekit": [ + { + "arch": "amd64", + "category": "admin", + "name": "packagekit", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.5-2ubuntu2" + } + ], + "packagekit-tools": [ + { + "arch": "amd64", + "category": "libs", + "name": "packagekit-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.5-2ubuntu2" + } + ], + "parted": [ + { + "arch": "amd64", + "category": "admin", + "name": "parted", + "origin": "Ubuntu", + "source": "apt", + "version": "3.4-2build1" + } + ], + "passwd": [ + { + "arch": "amd64", + "category": "admin", + "name": "passwd", + "origin": "Ubuntu", + "source": "apt", + "version": "1:4.8.1-2ubuntu2.1" + } + ], + "pastebinit": [ + { + "arch": "all", + "category": "misc", + "name": "pastebinit", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.1-1ubuntu1" + } + ], + "patch": [ + { + "arch": "amd64", + "category": "utils", + "name": "patch", + "origin": "Ubuntu", + "source": "apt", + "version": "2.7.6-7build2" + } + ], + "pci.ids": [ + { + "arch": "all", + "category": "admin", + "name": "pci.ids", + "origin": "Ubuntu", + "source": "apt", + "version": "0.0~2022.01.22-1" + } + ], + "pciutils": [ + { + "arch": "amd64", + "category": "admin", + "name": "pciutils", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.7.0-6" + } + ], + "perl": [ + { + "arch": "amd64", + "category": "perl", + "name": "perl", + "origin": "Ubuntu", + "source": "apt", + "version": "5.34.0-3ubuntu1.3" + } + ], + "perl-base": [ + { + "arch": "amd64", + "category": "perl", + "name": "perl-base", + "origin": "Ubuntu", + "source": "apt", + "version": "5.34.0-3ubuntu1.3" + } + ], + "perl-modules-5.34": [ + { + "arch": "all", + "category": "libs", + "name": "perl-modules-5.34", + "origin": "Ubuntu", + "source": "apt", + "version": "5.34.0-3ubuntu1.3" + } + ], + "php-cgi": [ + { + "arch": "all", + "category": "php", + "name": "php-cgi", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php-cli": [ + { + "arch": "all", + "category": "php", + "name": "php-cli", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php-common": [ + { + "arch": "all", + "category": "php", + "name": "php-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2:92ubuntu1" + } + ], + "php-gd": [ + { + "arch": "all", + "category": "php", + "name": "php-gd", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php-json": [ + { + "arch": "all", + "category": "php", + "name": "php-json", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php-pear": [ + { + "arch": "all", + "category": "php", + "name": "php-pear", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.10.12+submodules+notgz+20210212-1ubuntu3" + } + ], + "php-sqlite3": [ + { + "arch": "all", + "category": "php", + "name": "php-sqlite3", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php-xml": [ + { + "arch": "all", + "category": "php", + "name": "php-xml", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.1+92ubuntu1" + } + ], + "php8.1-cgi": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-cgi", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-cli": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-cli", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-common": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-common", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-gd": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-gd", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-opcache": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-opcache", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-readline": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-readline", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-sqlite3": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-sqlite3", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "php8.1-xml": [ + { + "arch": "amd64", + "category": "php", + "name": "php8.1-xml", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1ubuntu2.14" + } + ], + "pinentry-curses": [ + { + "arch": "amd64", + "category": "utils", + "name": "pinentry-curses", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.1-1build2" + } + ], + "pkexec": [ + { + "arch": "amd64", + "category": "admin", + "name": "pkexec", + "origin": "Ubuntu", + "source": "apt", + "version": "0.105-33" + } + ], + "plocate": [ + { + "arch": "amd64", + "category": "utils", + "name": "plocate", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.15-1ubuntu2" + } + ], + "plymouth": [ + { + "arch": "amd64", + "category": "x11", + "name": "plymouth", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.5+git20211018-1ubuntu3" + } + ], + "plymouth-theme-ubuntu-text": [ + { + "arch": "amd64", + "category": "x11", + "name": "plymouth-theme-ubuntu-text", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.5+git20211018-1ubuntu3" + } + ], + "policykit-1": [ + { + "arch": "amd64", + "category": "admin", + "name": "policykit-1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.105-33" + } + ], + "polkitd": [ + { + "arch": "amd64", + "category": "admin", + "name": "polkitd", + "origin": "Ubuntu", + "source": "apt", + "version": "0.105-33" + } + ], + "pollinate": [ + { + "arch": "all", + "category": "admin", + "name": "pollinate", + "origin": "Ubuntu", + "source": "apt", + "version": "4.33-3ubuntu2" + } + ], + "poppler-data": [ + { + "arch": "all", + "category": "misc", + "name": "poppler-data", + "origin": "Ubuntu", + "source": "apt", + "version": "0.4.11-1" + } + ], + "poppler-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "poppler-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "22.02.0-2ubuntu0.3" + } + ], + "powermgmt-base": [ + { + "arch": "all", + "category": "utils", + "name": "powermgmt-base", + "origin": "Ubuntu", + "source": "apt", + "version": "1.36" + } + ], + "procps": [ + { + "arch": "amd64", + "category": "admin", + "name": "procps", + "origin": "Ubuntu", + "source": "apt", + "version": "2:3.3.17-6ubuntu2.1" + } + ], + "psmisc": [ + { + "arch": "amd64", + "category": "admin", + "name": "psmisc", + "origin": "Ubuntu", + "source": "apt", + "version": "23.4-2build3" + } + ], + "publicsuffix": [ + { + "arch": "all", + "category": "net", + "name": "publicsuffix", + "origin": "Ubuntu", + "source": "apt", + "version": "20211207.1025-1" + } + ], + "python-apt-common": [ + { + "arch": "all", + "category": "python", + "name": "python-apt-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.0ubuntu2" + } + ], + "python3": [ + { + "arch": "amd64", + "category": "python", + "name": "python3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.6-1~22.04" + } + ], + "python3-apport": [ + { + "arch": "all", + "category": "python", + "name": "python3-apport", + "origin": "Ubuntu", + "source": "apt", + "version": "2.20.11-0ubuntu82.5" + } + ], + "python3-apt": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-apt", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.0ubuntu2" + } + ], + "python3-attr": [ + { + "arch": "all", + "category": "python", + "name": "python3-attr", + "origin": "Ubuntu", + "source": "apt", + "version": "21.2.0-1" + } + ], + "python3-automat": [ + { + "arch": "all", + "category": "python", + "name": "python3-automat", + "origin": "Ubuntu", + "source": "apt", + "version": "20.2.0-1" + } + ], + "python3-bcrypt": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-bcrypt", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1build1" + } + ], + "python3-blinker": [ + { + "arch": "all", + "category": "python", + "name": "python3-blinker", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4+dfsg1-0.4" + } + ], + "python3-cffi-backend": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-cffi-backend", + "origin": "Ubuntu", + "source": "apt", + "version": "1.15.0-1build2" + } + ], + "python3-chardet": [ + { + "arch": "all", + "category": "python", + "name": "python3-chardet", + "origin": "Ubuntu", + "source": "apt", + "version": "4.0.0-1" + } + ], + "python3-click": [ + { + "arch": "all", + "category": "python", + "name": "python3-click", + "origin": "Ubuntu", + "source": "apt", + "version": "8.0.3-1" + } + ], + "python3-colorama": [ + { + "arch": "all", + "category": "python", + "name": "python3-colorama", + "origin": "Ubuntu", + "source": "apt", + "version": "0.4.4-1" + } + ], + "python3-commandnotfound": [ + { + "arch": "all", + "category": "python", + "name": "python3-commandnotfound", + "origin": "Ubuntu", + "source": "apt", + "version": "22.04.0" + } + ], + "python3-configobj": [ + { + "arch": "all", + "category": "python", + "name": "python3-configobj", + "origin": "Ubuntu", + "source": "apt", + "version": "5.0.6-5" + } + ], + "python3-constantly": [ + { + "arch": "all", + "category": "python", + "name": "python3-constantly", + "origin": "Ubuntu", + "source": "apt", + "version": "15.1.0-2" + } + ], + "python3-cryptography": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-cryptography", + "origin": "Ubuntu", + "source": "apt", + "version": "3.4.8-1ubuntu2" + } + ], + "python3-dbus": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-dbus", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.18-3build1" + } + ], + "python3-debconf": [ + { + "arch": "all", + "category": "python", + "name": "python3-debconf", + "origin": "Ubuntu", + "source": "apt", + "version": "1.5.79ubuntu1" + } + ], + "python3-debian": [ + { + "arch": "all", + "category": "python", + "name": "python3-debian", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.43ubuntu1.1" + } + ], + "python3-distro": [ + { + "arch": "all", + "category": "python", + "name": "python3-distro", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.0-1" + } + ], + "python3-distro-info": [ + { + "arch": "all", + "category": "python", + "name": "python3-distro-info", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1ubuntu0.1" + } + ], + "python3-distupgrade": [ + { + "arch": "all", + "category": "python", + "name": "python3-distupgrade", + "origin": "Ubuntu", + "source": "apt", + "version": "1:22.04.17" + } + ], + "python3-distutils": [ + { + "arch": "all", + "category": "python", + "name": "python3-distutils", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.8-1~22.04" + } + ], + "python3-gdbm": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-gdbm", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.8-1~22.04" + } + ], + "python3-gi": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-gi", + "origin": "Ubuntu", + "source": "apt", + "version": "3.42.1-0ubuntu1" + } + ], + "python3-gpg": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-gpg", + "origin": "Ubuntu", + "source": "apt", + "version": "1.16.0-1.2ubuntu4.1" + } + ], + "python3-hamcrest": [ + { + "arch": "all", + "category": "python", + "name": "python3-hamcrest", + "origin": "Ubuntu", + "source": "apt", + "version": "2.0.2-2" + } + ], + "python3-httplib2": [ + { + "arch": "all", + "category": "python", + "name": "python3-httplib2", + "origin": "Ubuntu", + "source": "apt", + "version": "0.20.2-2" + } + ], + "python3-hyperlink": [ + { + "arch": "all", + "category": "python", + "name": "python3-hyperlink", + "origin": "Ubuntu", + "source": "apt", + "version": "21.0.0-3" + } + ], + "python3-idna": [ + { + "arch": "all", + "category": "python", + "name": "python3-idna", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3-1" + } + ], + "python3-importlib-metadata": [ + { + "arch": "all", + "category": "python", + "name": "python3-importlib-metadata", + "origin": "Ubuntu", + "source": "apt", + "version": "4.6.4-1" + } + ], + "python3-incremental": [ + { + "arch": "all", + "category": "python", + "name": "python3-incremental", + "origin": "Ubuntu", + "source": "apt", + "version": "21.3.0-1" + } + ], + "python3-jeepney": [ + { + "arch": "all", + "category": "python", + "name": "python3-jeepney", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7.1-3" + } + ], + "python3-jwt": [ + { + "arch": "all", + "category": "python", + "name": "python3-jwt", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.0-1ubuntu0.2" + } + ], + "python3-keyring": [ + { + "arch": "all", + "category": "python", + "name": "python3-keyring", + "origin": "Ubuntu", + "source": "apt", + "version": "23.5.0-1" + } + ], + "python3-launchpadlib": [ + { + "arch": "all", + "category": "python", + "name": "python3-launchpadlib", + "origin": "Ubuntu", + "source": "apt", + "version": "1.10.16-1" + } + ], + "python3-lazr.restfulclient": [ + { + "arch": "all", + "category": "python", + "name": "python3-lazr.restfulclient", + "origin": "Ubuntu", + "source": "apt", + "version": "0.14.4-1" + } + ], + "python3-lazr.uri": [ + { + "arch": "all", + "category": "python", + "name": "python3-lazr.uri", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.6-2" + } + ], + "python3-ldb": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-ldb", + "origin": "Ubuntu", + "source": "apt", + "version": "2:2.4.4-0ubuntu0.22.04.2" + } + ], + "python3-lib2to3": [ + { + "arch": "all", + "category": "python", + "name": "python3-lib2to3", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.8-1~22.04" + } + ], + "python3-magic": [ + { + "arch": "all", + "category": "python", + "name": "python3-magic", + "origin": "Ubuntu", + "source": "apt", + "version": "2:0.4.24-2" + } + ], + "python3-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-minimal", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.6-1~22.04" + } + ], + "python3-more-itertools": [ + { + "arch": "all", + "category": "python", + "name": "python3-more-itertools", + "origin": "Ubuntu", + "source": "apt", + "version": "8.10.0-2" + } + ], + "python3-netifaces": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-netifaces", + "origin": "Ubuntu", + "source": "apt", + "version": "0.11.0-1build2" + } + ], + "python3-newt": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-newt", + "origin": "Ubuntu", + "source": "apt", + "version": "0.52.21-5ubuntu2" + } + ], + "python3-oauthlib": [ + { + "arch": "all", + "category": "python", + "name": "python3-oauthlib", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.0-1ubuntu0.1" + } + ], + "python3-openssl": [ + { + "arch": "all", + "category": "python", + "name": "python3-openssl", + "origin": "Ubuntu", + "source": "apt", + "version": "21.0.0-1" + } + ], + "python3-pexpect": [ + { + "arch": "all", + "category": "python", + "name": "python3-pexpect", + "origin": "Ubuntu", + "source": "apt", + "version": "4.8.0-2ubuntu1" + } + ], + "python3-pkg-resources": [ + { + "arch": "all", + "category": "python", + "name": "python3-pkg-resources", + "origin": "Ubuntu", + "source": "apt", + "version": "59.6.0-1.2ubuntu0.22.04.1" + } + ], + "python3-problem-report": [ + { + "arch": "all", + "category": "python", + "name": "python3-problem-report", + "origin": "Ubuntu", + "source": "apt", + "version": "2.20.11-0ubuntu82.5" + } + ], + "python3-ptyprocess": [ + { + "arch": "all", + "category": "python", + "name": "python3-ptyprocess", + "origin": "Ubuntu", + "source": "apt", + "version": "0.7.0-3" + } + ], + "python3-pyasn1": [ + { + "arch": "all", + "category": "python", + "name": "python3-pyasn1", + "origin": "Ubuntu", + "source": "apt", + "version": "0.4.8-1" + } + ], + "python3-pyasn1-modules": [ + { + "arch": "all", + "category": "python", + "name": "python3-pyasn1-modules", + "origin": "Ubuntu", + "source": "apt", + "version": "0.2.1-1" + } + ], + "python3-pyparsing": [ + { + "arch": "all", + "category": "python", + "name": "python3-pyparsing", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.7-1" + } + ], + "python3-samba": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-samba", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "python3-secretstorage": [ + { + "arch": "all", + "category": "python", + "name": "python3-secretstorage", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3.1-1" + } + ], + "python3-serial": [ + { + "arch": "all", + "category": "python", + "name": "python3-serial", + "origin": "Ubuntu", + "source": "apt", + "version": "3.5-1" + } + ], + "python3-service-identity": [ + { + "arch": "all", + "category": "python", + "name": "python3-service-identity", + "origin": "Ubuntu", + "source": "apt", + "version": "18.1.0-6" + } + ], + "python3-setuptools": [ + { + "arch": "all", + "category": "python", + "name": "python3-setuptools", + "origin": "Ubuntu", + "source": "apt", + "version": "59.6.0-1.2ubuntu0.22.04.1" + } + ], + "python3-six": [ + { + "arch": "all", + "category": "python", + "name": "python3-six", + "origin": "Ubuntu", + "source": "apt", + "version": "1.16.0-3ubuntu1" + } + ], + "python3-software-properties": [ + { + "arch": "all", + "category": "python", + "name": "python3-software-properties", + "origin": "Ubuntu", + "source": "apt", + "version": "0.99.22.8" + } + ], + "python3-systemd": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-systemd", + "origin": "Ubuntu", + "source": "apt", + "version": "234-3ubuntu2" + } + ], + "python3-talloc": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-talloc", + "origin": "Ubuntu", + "source": "apt", + "version": "2.3.3-2build1" + } + ], + "python3-tdb": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-tdb", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.5-2build1" + } + ], + "python3-twisted": [ + { + "arch": "all", + "category": "python", + "name": "python3-twisted", + "origin": "Ubuntu", + "source": "apt", + "version": "22.1.0-2ubuntu2.3" + } + ], + "python3-update-manager": [ + { + "arch": "all", + "category": "python", + "name": "python3-update-manager", + "origin": "", + "source": "apt", + "version": "1:22.04.10" + } + ], + "python3-wadllib": [ + { + "arch": "all", + "category": "python", + "name": "python3-wadllib", + "origin": "Ubuntu", + "source": "apt", + "version": "1.3.6-1" + } + ], + "python3-xkit": [ + { + "arch": "all", + "category": "python", + "name": "python3-xkit", + "origin": "Ubuntu", + "source": "apt", + "version": "0.5.0ubuntu5" + } + ], + "python3-yaml": [ + { + "arch": "amd64", + "category": "python", + "name": "python3-yaml", + "origin": "Ubuntu", + "source": "apt", + "version": "5.4.1-1ubuntu1" + } + ], + "python3-zipp": [ + { + "arch": "all", + "category": "python", + "name": "python3-zipp", + "origin": "Ubuntu", + "source": "apt", + "version": "1.0.0-3" + } + ], + "python3-zope.interface": [ + { + "arch": "amd64", + "category": "zope", + "name": "python3-zope.interface", + "origin": "Ubuntu", + "source": "apt", + "version": "5.4.0-1build1" + } + ], + "python3.10": [ + { + "arch": "amd64", + "category": "python", + "name": "python3.10", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.12-1~22.04.3" + } + ], + "python3.10-minimal": [ + { + "arch": "amd64", + "category": "python", + "name": "python3.10-minimal", + "origin": "Ubuntu", + "source": "apt", + "version": "3.10.12-1~22.04.3" + } + ], + "qemu-guest-agent": [ + { + "arch": "amd64", + "category": "universe/misc", + "name": "qemu-guest-agent", + "origin": "Ubuntu", + "source": "apt", + "version": "1:6.2+dfsg-2ubuntu6.15" + } + ], + "rake": [ + { + "arch": "all", + "category": "devel", + "name": "rake", + "origin": "Ubuntu", + "source": "apt", + "version": "13.0.6-2" + } + ], + "readline-common": [ + { + "arch": "all", + "category": "utils", + "name": "readline-common", + "origin": "Ubuntu", + "source": "apt", + "version": "8.1.2-1" + } + ], + "rpcbind": [ + { + "arch": "amd64", + "category": "net", + "name": "rpcbind", + "origin": "Ubuntu", + "source": "apt", + "version": "1.2.6-2build1" + } + ], + "rpm": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "rpm", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "rpm-common": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "rpm-common", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "rpm2cpio": [ + { + "arch": "amd64", + "category": "universe/admin", + "name": "rpm2cpio", + "origin": "Ubuntu", + "source": "apt", + "version": "4.17.0+dfsg1-4build1" + } + ], + "rsync": [ + { + "arch": "amd64", + "category": "net", + "name": "rsync", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2.7-0ubuntu0.22.04.2" + } + ], + "rsyslog": [ + { + "arch": "amd64", + "category": "admin", + "name": "rsyslog", + "origin": "Ubuntu", + "source": "apt", + "version": "8.2112.0-2ubuntu2.2" + } + ], + "ruby": [ + { + "arch": "amd64", + "category": "interpreters", + "name": "ruby", + "origin": "Ubuntu", + "source": "apt", + "version": "1:3.0~exp1" + } + ], + "ruby-net-telnet": [ + { + "arch": "all", + "category": "ruby", + "name": "ruby-net-telnet", + "origin": "Ubuntu", + "source": "apt", + "version": "0.1.1-2" + } + ], + "ruby-rubygems": [ + { + "arch": "all", + "category": "ruby", + "name": "ruby-rubygems", + "origin": "Ubuntu", + "source": "apt", + "version": "3.3.5-2" + } + ], + "ruby-webrick": [ + { + "arch": "all", + "category": "universe/ruby", + "name": "ruby-webrick", + "origin": "Ubuntu", + "source": "apt", + "version": "1.7.0-3" + } + ], + "ruby-xmlrpc": [ + { + "arch": "all", + "category": "ruby", + "name": "ruby-xmlrpc", + "origin": "Ubuntu", + "source": "apt", + "version": "0.3.2-1ubuntu0.1" + } + ], + "ruby3.0": [ + { + "arch": "amd64", + "category": "ruby", + "name": "ruby3.0", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0.2-7ubuntu2.4" + } + ], + "rubygems-integration": [ + { + "arch": "all", + "category": "ruby", + "name": "rubygems-integration", + "origin": "Ubuntu", + "source": "apt", + "version": "1.18" + } + ], + "run-one": [ + { + "arch": "all", + "category": "admin", + "name": "run-one", + "origin": "Ubuntu", + "source": "apt", + "version": "1.17-0ubuntu1" + } + ], + "samba-common": [ + { + "arch": "all", + "category": "net", + "name": "samba-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "samba-common-bin": [ + { + "arch": "amd64", + "category": "net", + "name": "samba-common-bin", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "samba-dsdb-modules": [ + { + "arch": "amd64", + "category": "libs", + "name": "samba-dsdb-modules", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "samba-libs": [ + { + "arch": "amd64", + "category": "libs", + "name": "samba-libs", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "sbsigntool": [ + { + "arch": "amd64", + "category": "utils", + "name": "sbsigntool", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.4-2ubuntu2" + } + ], + "screen": [ + { + "arch": "amd64", + "category": "misc", + "name": "screen", + "origin": "Ubuntu", + "source": "apt", + "version": "4.9.0-1" + } + ], + "secureboot-db": [ + { + "arch": "amd64", + "category": "utils", + "name": "secureboot-db", + "origin": "Ubuntu", + "source": "apt", + "version": "1.8" + } + ], + "sed": [ + { + "arch": "amd64", + "category": "utils", + "name": "sed", + "origin": "Ubuntu", + "source": "apt", + "version": "4.8-1ubuntu2" + } + ], + "sensible-utils": [ + { + "arch": "all", + "category": "utils", + "name": "sensible-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "0.0.17" + } + ], + "sg3-utils": [ + { + "arch": "amd64", + "category": "admin", + "name": "sg3-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46-1ubuntu0.22.04.1" + } + ], + "sg3-utils-udev": [ + { + "arch": "all", + "category": "admin", + "name": "sg3-utils-udev", + "origin": "Ubuntu", + "source": "apt", + "version": "1.46-1ubuntu0.22.04.1" + } + ], + "shared-mime-info": [ + { + "arch": "amd64", + "category": "misc", + "name": "shared-mime-info", + "origin": "Ubuntu", + "source": "apt", + "version": "2.1-2" + } + ], + "smbclient": [ + { + "arch": "amd64", + "category": "net", + "name": "smbclient", + "origin": "Ubuntu", + "source": "apt", + "version": "2:4.15.13+dfsg-0ubuntu1.5" + } + ], + "snapd": [ + { + "arch": "amd64", + "category": "devel", + "name": "snapd", + "origin": "Ubuntu", + "source": "apt", + "version": "2.58+22.04.1" + } + ], + "software-properties-common": [ + { + "arch": "all", + "category": "admin", + "name": "software-properties-common", + "origin": "Ubuntu", + "source": "apt", + "version": "0.99.22.8" + } + ], + "sosreport": [ + { + "arch": "amd64", + "category": "admin", + "name": "sosreport", + "origin": "Ubuntu", + "source": "apt", + "version": "4.5.6-0ubuntu1~22.04.2" + } + ], + "squashfs-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "squashfs-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "1:4.5-3build1" + } + ], + "ssh-import-id": [ + { + "arch": "all", + "category": "misc", + "name": "ssh-import-id", + "origin": "Ubuntu", + "source": "apt", + "version": "5.11-0ubuntu1" + } + ], + "ssl-cert": [ + { + "arch": "all", + "category": "utils", + "name": "ssl-cert", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.2" + } + ], + "strace": [ + { + "arch": "amd64", + "category": "utils", + "name": "strace", + "origin": "Ubuntu", + "source": "apt", + "version": "5.16-0ubuntu3" + } + ], + "sudo": [ + { + "arch": "amd64", + "category": "admin", + "name": "sudo", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9.9-1ubuntu2.4" + } + ], + "sysstat": [ + { + "arch": "amd64", + "category": "admin", + "name": "sysstat", + "origin": "Ubuntu", + "source": "apt", + "version": "12.5.2-2ubuntu0.2" + } + ], + "systemd": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "systemd-hwe-hwdb": [ + { + "arch": "all", + "category": "admin", + "name": "systemd-hwe-hwdb", + "origin": "", + "source": "apt", + "version": "249.11.3" + } + ], + "systemd-sysv": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd-sysv", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "systemd-timesyncd": [ + { + "arch": "amd64", + "category": "admin", + "name": "systemd-timesyncd", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "sysvinit-utils": [ + { + "arch": "amd64", + "category": "admin", + "name": "sysvinit-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "3.01-1ubuntu1" + } + ], + "tar": [ + { + "arch": "amd64", + "category": "utils", + "name": "tar", + "origin": "", + "source": "apt", + "version": "1.34+dfsg-1ubuntu0.1.22.04.1" + } + ], + "tcl": [ + { + "arch": "amd64", + "category": "interpreters", + "name": "tcl", + "origin": "Ubuntu", + "source": "apt", + "version": "8.6.11+1build2" + } + ], + "tcl8.6": [ + { + "arch": "amd64", + "category": "interpreters", + "name": "tcl8.6", + "origin": "Ubuntu", + "source": "apt", + "version": "8.6.12+dfsg-1build1" + } + ], + "tcpdump": [ + { + "arch": "amd64", + "category": "net", + "name": "tcpdump", + "origin": "Ubuntu", + "source": "apt", + "version": "4.99.1-3ubuntu0.1" + } + ], + "telnet": [ + { + "arch": "amd64", + "category": "net", + "name": "telnet", + "origin": "Ubuntu", + "source": "apt", + "version": "0.17-44build1" + } + ], + "thermald": [ + { + "arch": "amd64", + "category": "admin", + "name": "thermald", + "origin": "Ubuntu", + "source": "apt", + "version": "2.4.9-1ubuntu0.4" + } + ], + "thin-provisioning-tools": [ + { + "arch": "amd64", + "category": "admin", + "name": "thin-provisioning-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "0.9.0-2ubuntu1" + } + ], + "time": [ + { + "arch": "amd64", + "category": "utils", + "name": "time", + "origin": "Ubuntu", + "source": "apt", + "version": "1.9-0.1build2" + } + ], + "tmux": [ + { + "arch": "amd64", + "category": "admin", + "name": "tmux", + "origin": "Ubuntu", + "source": "apt", + "version": "3.2a-4ubuntu0.2" + } + ], + "tnftp": [ + { + "arch": "amd64", + "category": "net", + "name": "tnftp", + "origin": "Ubuntu", + "source": "apt", + "version": "20210827-4build1" + } + ], + "tpm-udev": [ + { + "arch": "all", + "category": "admin", + "name": "tpm-udev", + "origin": "Ubuntu", + "source": "apt", + "version": "0.6" + } + ], + "traceroute": [ + { + "arch": "amd64", + "category": "universe/net", + "name": "traceroute", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.1.0-2" + } + ], + "tzdata": [ + { + "arch": "all", + "category": "libs", + "name": "tzdata", + "origin": "Ubuntu", + "source": "apt", + "version": "2023c-0ubuntu0.22.04.2" + } + ], + "ubuntu-advantage-tools": [ + { + "arch": "amd64", + "category": "misc", + "name": "ubuntu-advantage-tools", + "origin": "Ubuntu", + "source": "apt", + "version": "30~22.04" + } + ], + "ubuntu-drivers-common": [ + { + "arch": "amd64", + "category": "admin", + "name": "ubuntu-drivers-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1:0.9.6.2~0.22.04.6" + } + ], + "ubuntu-keyring": [ + { + "arch": "all", + "category": "misc", + "name": "ubuntu-keyring", + "origin": "Ubuntu", + "source": "apt", + "version": "2021.03.26" + } + ], + "ubuntu-minimal": [ + { + "arch": "amd64", + "category": "metapackages", + "name": "ubuntu-minimal", + "origin": "Ubuntu", + "source": "apt", + "version": "1.481.1" + } + ], + "ubuntu-pro-client-l10n": [ + { + "arch": "amd64", + "category": "misc", + "name": "ubuntu-pro-client-l10n", + "origin": "Ubuntu", + "source": "apt", + "version": "30~22.04" + } + ], + "ubuntu-release-upgrader-core": [ + { + "arch": "all", + "category": "admin", + "name": "ubuntu-release-upgrader-core", + "origin": "Ubuntu", + "source": "apt", + "version": "1:22.04.17" + } + ], + "ubuntu-server": [ + { + "arch": "amd64", + "category": "metapackages", + "name": "ubuntu-server", + "origin": "Ubuntu", + "source": "apt", + "version": "1.481.1" + } + ], + "ubuntu-standard": [ + { + "arch": "amd64", + "category": "metapackages", + "name": "ubuntu-standard", + "origin": "Ubuntu", + "source": "apt", + "version": "1.481.1" + } + ], + "ucf": [ + { + "arch": "all", + "category": "utils", + "name": "ucf", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0043" + } + ], + "udev": [ + { + "arch": "amd64", + "category": "admin", + "name": "udev", + "origin": "Ubuntu", + "source": "apt", + "version": "249.11-0ubuntu3.11" + } + ], + "udisks2": [ + { + "arch": "amd64", + "category": "admin", + "name": "udisks2", + "origin": "Ubuntu", + "source": "apt", + "version": "2.9.4-1ubuntu2" + } + ], + "ufw": [ + { + "arch": "all", + "category": "admin", + "name": "ufw", + "origin": "Ubuntu", + "source": "apt", + "version": "0.36.1-4ubuntu0.1" + } + ], + "unattended-upgrades": [ + { + "arch": "all", + "category": "admin", + "name": "unattended-upgrades", + "origin": "Ubuntu", + "source": "apt", + "version": "2.8ubuntu1" + } + ], + "unzip": [ + { + "arch": "amd64", + "category": "utils", + "name": "unzip", + "origin": "Ubuntu", + "source": "apt", + "version": "6.0-26ubuntu3.1" + } + ], + "update-inetd": [ + { + "arch": "all", + "category": "admin", + "name": "update-inetd", + "origin": "Ubuntu", + "source": "apt", + "version": "4.51" + } + ], + "update-manager-core": [ + { + "arch": "all", + "category": "admin", + "name": "update-manager-core", + "origin": "", + "source": "apt", + "version": "1:22.04.10" + } + ], + "update-notifier-common": [ + { + "arch": "all", + "category": "gnome", + "name": "update-notifier-common", + "origin": "Ubuntu", + "source": "apt", + "version": "3.192.54.6" + } + ], + "upower": [ + { + "arch": "amd64", + "category": "admin", + "name": "upower", + "origin": "Ubuntu", + "source": "apt", + "version": "0.99.17-1" + } + ], + "usb-modeswitch": [ + { + "arch": "amd64", + "category": "comm", + "name": "usb-modeswitch", + "origin": "Ubuntu", + "source": "apt", + "version": "2.6.1-3ubuntu2" + } + ], + "usb-modeswitch-data": [ + { + "arch": "all", + "category": "comm", + "name": "usb-modeswitch-data", + "origin": "Ubuntu", + "source": "apt", + "version": "20191128-4" + } + ], + "usb.ids": [ + { + "arch": "all", + "category": "admin", + "name": "usb.ids", + "origin": "Ubuntu", + "source": "apt", + "version": "2022.04.02-1" + } + ], + "usbmuxd": [ + { + "arch": "amd64", + "category": "utils", + "name": "usbmuxd", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.1-2build2" + } + ], + "usbutils": [ + { + "arch": "amd64", + "category": "utils", + "name": "usbutils", + "origin": "Ubuntu", + "source": "apt", + "version": "1:014-1build1" + } + ], + "usrmerge": [ + { + "arch": "all", + "category": "admin", + "name": "usrmerge", + "origin": "Ubuntu", + "source": "apt", + "version": "25ubuntu2" + } + ], + "util-linux": [ + { + "arch": "amd64", + "category": "utils", + "name": "util-linux", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "uuid-runtime": [ + { + "arch": "amd64", + "category": "libs", + "name": "uuid-runtime", + "origin": "Ubuntu", + "source": "apt", + "version": "2.37.2-4ubuntu3" + } + ], + "vim": [ + { + "arch": "amd64", + "category": "editors", + "name": "vim", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.15" + } + ], + "vim-common": [ + { + "arch": "all", + "category": "editors", + "name": "vim-common", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.15" + } + ], + "vim-nox": [ + { + "arch": "amd64", + "category": "universe/editors", + "name": "vim-nox", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.15" + } + ], + "vim-runtime": [ + { + "arch": "all", + "category": "editors", + "name": "vim-runtime", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.15" + } + ], + "vim-tiny": [ + { + "arch": "amd64", + "category": "editors", + "name": "vim-tiny", + "origin": "Ubuntu", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.15" + } + ], + "wget": [ + { + "arch": "amd64", + "category": "web", + "name": "wget", + "origin": "Ubuntu", + "source": "apt", + "version": "1.21.2-2ubuntu1" + } + ], + "whiptail": [ + { + "arch": "amd64", + "category": "utils", + "name": "whiptail", + "origin": "Ubuntu", + "source": "apt", + "version": "0.52.21-5ubuntu2" + } + ], + "wireless-regdb": [ + { + "arch": "all", + "category": "net", + "name": "wireless-regdb", + "origin": "Ubuntu", + "source": "apt", + "version": "2022.06.06-0ubuntu1~22.04.1" + } + ], + "x11-common": [ + { + "arch": "all", + "category": "x11", + "name": "x11-common", + "origin": "Ubuntu", + "source": "apt", + "version": "1:7.7+23ubuntu2" + } + ], + "xauth": [ + { + "arch": "amd64", + "category": "x11", + "name": "xauth", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.1-1build2" + } + ], + "xdg-user-dirs": [ + { + "arch": "amd64", + "category": "utils", + "name": "xdg-user-dirs", + "origin": "Ubuntu", + "source": "apt", + "version": "0.17-2ubuntu4" + } + ], + "xfsprogs": [ + { + "arch": "amd64", + "category": "admin", + "name": "xfsprogs", + "origin": "Ubuntu", + "source": "apt", + "version": "5.13.0-1ubuntu2" + } + ], + "xinetd": [ + { + "arch": "amd64", + "category": "universe/net", + "name": "xinetd", + "origin": "Ubuntu", + "source": "apt", + "version": "1:2.3.15.3-1" + } + ], + "xkb-data": [ + { + "arch": "all", + "category": "x11", + "name": "xkb-data", + "origin": "Ubuntu", + "source": "apt", + "version": "2.33-1" + } + ], + "xxd": [ + { + "arch": "amd64", + "category": "editors", + "name": "xxd", + "origin": "", + "source": "apt", + "version": "2:8.2.3995-1ubuntu2.13" + } + ], + "xz-utils": [ + { + "arch": "amd64", + "category": "utils", + "name": "xz-utils", + "origin": "Ubuntu", + "source": "apt", + "version": "5.2.5-2ubuntu1" + } + ], + "zerofree": [ + { + "arch": "amd64", + "category": "admin", + "name": "zerofree", + "origin": "Ubuntu", + "source": "apt", + "version": "1.1.1-1build3" + } + ], + "zip": [ + { + "arch": "amd64", + "category": "utils", + "name": "zip", + "origin": "Ubuntu", + "source": "apt", + "version": "3.0-12build2" + } + ], + "zlib1g": [ + { + "arch": "amd64", + "category": "libs", + "name": "zlib1g", + "origin": "Ubuntu", + "source": "apt", + "version": "1:1.2.11.dfsg-2ubuntu9.2" + } + ], + "zstd": [ + { + "arch": "amd64", + "category": "utils", + "name": "zstd", + "origin": "Ubuntu", + "source": "apt", + "version": "1.4.8+dfsg-3build1" + } + ] + } + }, + "changed": false +} From ab24234a179c14554d03bb71d716b199bb7483ad Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 29 Dec 2023 13:06:00 +0100 Subject: [PATCH 13/37] Extend Makefile and libvirt support. --- .gitignore | 2 ++ Makefile | 23 ++++++++++++++++++ Vagrantfile.kvm | 43 ++++++++++++++++----------------- playbooks/hosts.kvm | 30 +++++++++++++++++++++++ playbooks/{hosts => hosts.vbox} | 10 ++++---- 5 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 playbooks/hosts.kvm rename playbooks/{hosts => hosts.vbox} (77%) diff --git a/.gitignore b/.gitignore index 347bd362c..cbf6858b8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,7 @@ build/ tests/output playbooks/vars/config.yml playbooks/test*.yml +playbooks/hosts +playbooks/hosts.bak Vagrantfile Vagrantfile.bak \ No newline at end of file diff --git a/Makefile b/Makefile index 5f5691207..305053e0d 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,10 @@ help: @echo "" @echo "vm - Create a virtual development environment." @echo "molecule - Create a virtual environment for molecule tests." + @echo "vms - Create a virtual environment with all boxes (exept for the development ones and ansidows)." + @echo "vms-debian - Create a virtual environment with all Debian family OSes." + @echo "vms-redhat - Create a virtual environment with all RedHat family OSes." + @echo "vms-suse - Create a virtual environment with all Suse family OSes." @echo "" @echo "clean - Clean up several things" @echo "clean-vm - Clean up virtual development environment." @@ -52,6 +56,8 @@ setup-python: kvm: if [ -f Vagrantfile ] ; then cp Vagrantfile Vagrantfile.bak ; fi cp Vagrantfile.kvm Vagrantfile + if [ -f playbooks/hosts ] ; then cp playbooks/hosts playbooks/hosts.bak ; fi + cp playbooks/hosts.kvm playbooks/hosts setup-kvm: kvm @sudo apt update -y @@ -74,6 +80,8 @@ setup-kvm: kvm vbox: if [ -f Vagrantfile ] ; then cp Vagrantfile Vagrantfile.bak ; fi cp Vagrantfile.vbox Vagrantfile + if [ -f playbooks/hosts ] ; then cp playbooks/hosts playbooks/hosts.bak ; fi + cp playbooks/hosts.vbox playbooks/hosts setup-vbox: vbox @@ -91,3 +99,18 @@ molecule: vm: @vagrant up collection + +vms: + @vagrant up debsible ansibuntu anstream ansuse ansoracle # ansles ## currently no SLES box for libvirt! + +vms-debian: + @vagrant up debsible ansibuntu + +vms-redhat: + @vagrant up anstream ansoracle + +vms-suse: + @vagrant up ansuse # ansles ## currently no SLES box for libvirt! + +vms-windows: + @vagrant up ansidows diff --git a/Vagrantfile.kvm b/Vagrantfile.kvm index 62496792e..abfda44f3 100644 --- a/Vagrantfile.kvm +++ b/Vagrantfile.kvm @@ -177,28 +177,27 @@ Vagrant.configure("2") do |config| inline: "zypper --quiet up -y" end - # SLES15 (No Box for libvirt found!!) - config.vm.define "ansles", autostart: false , primary: false do |srv| - srv.vm.box = "saltstack/cicd-sles15" - srv.vm.network :private_network, - :ip => "192.168.123.64", - :libvirt__netmask => "255.255.255.0", - :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" - srv.ssh.insert_key = false - srv.vm.provider "libvirt" do |libvirt| - libvirt.default_prefix = "ansible_" - libvirt.description = 'This box is used to test roles against.' - libvirt.memory = 2048 - libvirt.cpus = 2 - libvirt.title = "ansles" - libvirt.memorybacking :access, :mode => 'shared' - libvirt.memorybacking :source, :type => 'memfd' - end - srv.vm.provision "shell", - inline: "zypper --quiet up -y" - end - + # # SLES15 (No Box for libvirt found!!) + # config.vm.define "ansles", autostart: false , primary: false do |srv| + # srv.vm.box = "saltstack/cicd-sles15" + # srv.vm.network :private_network, + # :ip => "192.168.123.64", + # :libvirt__netmask => "255.255.255.0", + # :libvirt__network_name => "ansible_collection", + # :libvirt__network_address => "192.168.123.0" + # srv.ssh.insert_key = false + # srv.vm.provider "libvirt" do |libvirt| + # libvirt.default_prefix = "ansible_" + # libvirt.description = 'This box is used to test roles against.' + # libvirt.memory = 2048 + # libvirt.cpus = 2 + # libvirt.title = "ansles" + # libvirt.memorybacking :access, :mode => 'shared' + # libvirt.memorybacking :source, :type => 'memfd' + # end + # srv.vm.provision "shell", + # inline: "zypper --quiet up -y" + # end # Oracle Linux config.vm.define "ansoracle", autostart: false , primary: false do |srv| diff --git a/playbooks/hosts.kvm b/playbooks/hosts.kvm new file mode 100644 index 000000000..b7a7941ee --- /dev/null +++ b/playbooks/hosts.kvm @@ -0,0 +1,30 @@ +[test] +test1.tld checkmk_var_folder_path="/test" +test2.tld checkmk_var_folder_path="/foo" +test3.tld checkmk_var_folder_path="/bar" +test4.tld checkmk_var_folder_path="/" +test5.tld checkmk_var_folder_path="/foo/bar" + +[linux] +ansibuntu ansible_host=192.168.123.61 checkmk_var_folder_path="/test" +debsible ansible_host=192.168.123.62 checkmk_var_folder_path="/foo" +anstream ansible_host=192.168.123.63 checkmk_var_folder_path="foo/bar" +ansuse ansible_host=192.168.123.64 checkmk_var_folder_path="/bar" +ansles ansible_host=192.168.123.65 checkmk_var_folder_path="/bar/foo" +ansoracle ansible_host=192.168.123.66 checkmk_var_folder_path="/foo" + +[windows] +ansidows ansible_host=192.168.123.67 checkmk_var_folder_path="/" + +[windows:vars] +ansible_shell_type = cmd +ansible_winrm_scheme = http +ansible_winrm_transport = basic +ansible_winrm_server_cert_validation = ignore + +[vagrant:children] +linux +windows + +[vagrant:vars] +ansible_user=vagrant diff --git a/playbooks/hosts b/playbooks/hosts.vbox similarity index 77% rename from playbooks/hosts rename to playbooks/hosts.vbox index b203118a0..8c0bee301 100644 --- a/playbooks/hosts +++ b/playbooks/hosts.vbox @@ -1,9 +1,9 @@ [test] -test1.tld checkmk_var_folder_path="/test" -test2.tld checkmk_var_folder_path="/foo" -test3.tld checkmk_var_folder_path="/bar" -test4.tld checkmk_var_folder_path="/" -test5.tld checkmk_var_folder_path="/foo/bar" +test1.tld checkmk_var_folder_path="/test" +test2.tld checkmk_var_folder_path="/foo" +test3.tld checkmk_var_folder_path="/bar" +test4.tld checkmk_var_folder_path="/" +test5.tld checkmk_var_folder_path="/foo/bar" [linux] ansibuntu ansible_host=192.168.56.61 checkmk_var_folder_path="/test" From 0ef1697640f1170a92fd72d98877cd5ccb26d2da Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Mon, 8 Jan 2024 16:25:02 +0100 Subject: [PATCH 14/37] Small changes --- plugins/modules/tag_group.py | 13 ++++++++++++- tests/integration/targets/tag_group/vars/main.yml | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 1cb9770d7..2e7e0eae3 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -65,6 +65,7 @@ """ EXAMPLES = r""" +# Create a tag group - name: "Create tag_group" checkmk.general.tag_group: server_url: "https://localhost/" @@ -73,7 +74,7 @@ automation_secret: "my_secret" name: Datacenter title: Datacenter - topic: Custom_Tags + topic: Tags help: "something useful" tags: - ident: No_Datacenter @@ -87,6 +88,16 @@ - ident: Datacenter ASIA title: Datacenter ASIA state: present + +# Delete a tag group +- name: "Delete tag_group." + checkmk.general.tag_group: + server_url: "https://localhost/" + site: "my_site" + automation_user: "my_user" + automation_secret: "my_secret" + name: Datacenter + state: "absent" """ RETURN = r""" diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index 19861446b..6b536cfde 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -29,7 +29,7 @@ checkmk_server_edition_mapping: checkmk_taggroups_create: - name: Datacenter title: Datacenter - topic: Custom_Tags + topic: Tags help: "something useful" tags: - ident: No_Datacenter @@ -44,7 +44,7 @@ checkmk_taggroups_create: title: Datacenter ASIA - name: Supporter title: Supporter - topic: Custom_Tags + topic: Tags help: "Who to blame" tags: - ident: Nobody @@ -59,7 +59,7 @@ checkmk_taggroups_create: checkmk_taggroups_update: - name: Datacenter title: Datacenter - topic: Custom_Tags + topic: Tags help: "something even more useful" tags: - ident: No_Datacenter From c58627f251117757b02ea62eee50ea2482870706 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Mon, 8 Jan 2024 17:05:57 +0100 Subject: [PATCH 15/37] customer variable added --- plugins/modules/user.py | 1 + tests/integration/targets/user/tasks/test.yml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index b56197d70..044e9bbfe 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -226,6 +226,7 @@ def _build_user_data(self): if key in ( "username", "fullname", + "customer", "disable_login", "pager_address", "roles", diff --git a/tests/integration/targets/user/tasks/test.yml b/tests/integration/targets/user/tasks/test.yml index e1204d39c..5986b133c 100644 --- a/tests/integration/targets/user/tasks/test.yml +++ b/tests/integration/targets/user/tasks/test.yml @@ -2,12 +2,12 @@ - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Set customer when needed." ansible.builtin.set_fact: customer: "provider" - when: (outer_item.edition == "cme") or (outer_item.edition == "cce") + when: outer_item.edition == "cme" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Unset customer when needed." ansible.builtin.set_fact: customer: null - when: not ((outer_item.edition == "cme") or (outer_item.edition == "cce")) + when: not outer_item.edition == "cme" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Create contact groups." contact_group: From 9775d6ca5889c076e796291cf36d94e9a9789922 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Tue, 9 Jan 2024 16:56:32 +0100 Subject: [PATCH 16/37] More tests, parameters and idempotency --- plugins/modules/user.py | 72 ++++++--- tests/integration/targets/user/tasks/test.yml | 47 ++++-- tests/integration/targets/user/vars/main.yml | 138 ++++++++++++++++-- 3 files changed, 214 insertions(+), 43 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 044e9bbfe..cd3118335 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -53,12 +53,13 @@ fallback_contact: description: In case none of your notification rules handles a certain event a notification will be sent to the specified email. type: bool - pager_address: + pager: description: The pager address. type: str + aliases: ["pager_address"] idle_timeout_duration: description: The duration in seconds of the individual idle timeout if individual is selected as idle timeout option. - type: str + type: int idle_timeout_option: description: Specify if the idle timeout should use the global configuration, be disabled or use an individual duration type: str @@ -74,7 +75,10 @@ type: raw disable_notifications: description: Option if all notifications should be temporarily disabled. - type: raw + type: bool + disable_notifications_timerange: + description: A custom timerange during which notifications are disabled. + type: dict language: description: Configure the language to be used by the user in the user interface. Omitting this will configure the default language. type: str @@ -140,12 +144,13 @@ enforce_password_change: True email: "checker@grevenbroich.de" fallback_contact: True - pager_address: 089-123456789 + pager: 089-123456789 contactgroups: - "sport" - "vereinsgeschehen" - "lokalpolitik" - disable_notifications: '{"disable": true, "timerange": { "start_time": "2023-02-23T15:06:48+00:00", "end_time": "2023-02-23T16:06:48+00:00"}}' + disable_notifications: True + disable_notifications_timerange: { "start_time": "2023-02-23T15:06:48+00:00", "end_time": "2023-02-23T16:06:48+00:00"} language: "de" roles: - "user" @@ -175,6 +180,7 @@ USER = ( "username", "fullname", + "customer", "password", "enforce_password_change", "auth_type", @@ -182,12 +188,13 @@ "email", "fallback_contact", "pager_address", - "idle_timout_option", + "idle_timeout_option", "idle_timeout_duration", "roles", "authorized_sites", "contactgroups", "disable_notifications", + "disable_notifications_timerange", "language", ) @@ -213,6 +220,8 @@ class UserAPI(CheckmkAPI): def _build_user_data(self): user = {} + user["disable_notifications"] = {} + # For some keys the API has required sub keys. We can use them as indicator, # that the key must be used if self.required.get("auth_type"): @@ -232,10 +241,13 @@ def _build_user_data(self): "roles", "authorized_sites", "contactgroups", - "language", ): user[key] = value + if key in "language": + if value != "default": + user["language"] = value + if key in ("auth_type", "password", "enforce_password_change"): if key == "password" and self.params.get("auth_type") == "automation": # Unfortunately the API uses different strings for the password @@ -246,21 +258,40 @@ def _build_user_data(self): if key in ("email", "fallback_contact"): user["contact_options"][key] = value - if key in ("idle_timeout_option", "idle_timeout_duration"): - user["idle_timeout"] = value + if key == "idle_timeout_option": + user["idle_timeout"]["option"] = value + if key == "idle_timeout_duration": + user["idle_timeout"]["duration"] = value if key == "disable_notifications": user["disable_notifications"]["disable"] = value + if key == "disable_notifications_timerange": + user["disable_notifications"]["timerange"] = value return user def _set_current(self, result): # A flat hierarchy allows an easy comparison of differences - if result.http_code == 200: - content = json.loads(result.content)["extensions"] - for key in USER: - if key in content: + content = json.loads(result.content)["extensions"] + for key in USER: + if key in content: + if key != "disable_notifications": self.current[key] = content[key] + if key in ("email", "fallback_contact"): + self.current[key] = content["contact_options"][key] + if key == "idle_timeout_option": + self.current[key] = content["idle_timeout"]["option"] + if key == "idle_timeout_duration": + if "duration" in content["idle_timeout"]: + self.current[key] = content["idle_timeout"]["duration"] + if key == "disable_notifications": + if "disable" in content["disable_notifications"]: + self.current[key] = content["disable_notifications"]["disable"] + else: + self.current[key] = False + if key == "disable_notifications_timerange": + if "timerange" in content["disable_notifications"]: + self.current[key] = content["disable_notifications"]["timerange"] def _build_default_endpoint(self): return "%s/%s" % (UserEndpoints.default, self.params.get("name")) @@ -289,9 +320,11 @@ def get(self): method="GET", ) - self.state = "present" if result.http_code == 200 else "absent" - self._set_current(result) - + if result.http_code == 200: + self.state = "present" + self._set_current(result) + else: + self.state = "absent" return result def create(self): @@ -349,15 +382,16 @@ def run_module(): disable_login=dict(type="bool"), email=dict(type="str"), fallback_contact=dict(type="bool"), - pager_address=dict(type="str"), - idle_timeout_duration=dict(type="str"), + pager=dict(type="str", aliases=["pager_address"]), + idle_timeout_duration=dict(type="int"), idle_timeout_option=dict( type="str", choices=["global", "disable", "individual"] ), roles=dict(type="raw"), authorized_sites=dict(type="raw"), contactgroups=dict(type="raw"), - disable_notifications=dict(type="raw"), + disable_notifications=dict(type="bool"), + disable_notifications_timerange=dict(type="dict"), language=dict(type="str", choices=["default", "en", "de", "ro"]), state=dict( type="str", diff --git a/tests/integration/targets/user/tasks/test.yml b/tests/integration/targets/user/tasks/test.yml index 5986b133c..65ab3fbcf 100644 --- a/tests/integration/targets/user/tasks/test.yml +++ b/tests/integration/targets/user/tasks/test.yml @@ -44,17 +44,25 @@ customer: "{{ (customer != None) | ternary(customer, omit) }}" # See PR #427 name: "{{ item.name }}" fullname: "{{ item.fullname }}" + email: "{{ item.email | default(omit) }}" + disable_notifications: "{{ item.disable_notifications | default(omit) }}" + disable_notifications_timerange: "{{ item.disable_notifications_timerange | default(omit) }}" + pager_address: "{{ item.pager_address | default(omit) }}" + language: "{{ item.language | default(omit) }}" + disable_login: "{{ item.disable_login | default(omit) }}" auth_type: "{{ item.auth_type }}" password: "{{ item.password }}" - roles: - - "admin" + contactgroups: "{{ item.contactgroups | default(omit) }}" + idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" + idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + roles: "{{ item.roles }}" authorized_sites: - "{{ outer_item.site }}" state: "present" delegate_to: localhost run_once: true # noqa run-once[task] register: rule_result - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_create }}" - name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler ansible.builtin.fail: @@ -83,17 +91,25 @@ customer: "{{ (customer != None) | ternary(customer, omit) }}" # See PR #427 name: "{{ item.name }}" fullname: "{{ item.fullname }}" + email: "{{ item.email | default(omit) }}" + disable_notifications: "{{ item.disable_notifications | default(omit) }}" + disable_notifications_timerange: "{{ item.disable_notifications_timerange | default(omit) }}" + pager_address: "{{ item.pager_address | default(omit) }}" + language: "{{ item.language | default(omit) }}" + disable_login: "{{ item.disable_login | default(omit) }}" auth_type: "{{ item.auth_type }}" password: "{{ item.password }}" - roles: - - "admin" + contactgroups: "{{ item.contactgroups | default(omit) }}" + idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" + idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + roles: "{{ item.roles }}" authorized_sites: - "{{ outer_item.site }}" state: "present" delegate_to: localhost run_once: true # noqa run-once[task] register: rule_result - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_create }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Fail if changed." # noqa no-handler ansible.builtin.fail: @@ -110,11 +126,20 @@ automation_secret: "{{ checkmk_var_automation_secret }}" customer: "{{ (customer != None) | ternary(customer, omit) }}" # See PR #427 name: "{{ item.name }}" + email: "{{ item.email | default(omit) }}" + disable_notifications: "{{ item.disable_notifications | default(omit) }}" + disable_notifications_timerange: "{{ item.disable_notifications_timerange | default(omit) }}" + pager_address: "{{ item.pager_address | default(omit) }}" + language: "{{ item.language | default(omit) }}" + disable_login: "{{ item.disable_login | default(omit) }}" contactgroups: "{{ item.contactgroups }}" + idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" + idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + roles: "{{ item.roles }}" state: "present" delegate_to: localhost run_once: true # noqa run-once[task] - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_edit }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate." activation: @@ -136,13 +161,13 @@ automation_secret: "{{ checkmk_var_automation_secret }}" customer: "{{ (customer != None) | ternary(customer, omit) }}" # See PR #427 name: "{{ item.name }}" - password: "{{ item.newpassword }}" + password: "{{ item.password }}" auth_type: "{{ item.auth_type }}" state: "reset_password" delegate_to: localhost run_once: true # noqa run-once[task] register: rule_result - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_newpw }}" - name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler ansible.builtin.fail: @@ -174,7 +199,7 @@ delegate_to: localhost run_once: true # noqa run-once[task] register: rule_result - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_create }}" - name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler ansible.builtin.fail: @@ -206,7 +231,7 @@ delegate_to: localhost run_once: true # noqa run-once[task] register: rule_result - loop: "{{ checkmk_var_users }}" + loop: "{{ checkmk_var_users_create }}" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Fail if changed." # noqa no-handler ansible.builtin.fail: diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index 666cedc8a..a968081ec 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p14" + - version: "2.2.0p17" edition: "cme" site: "stable_cme" - - version: "2.2.0p14" + - version: "2.2.0p17" edition: "cre" site: "stable_raw" - - version: "2.2.0p14" + - version: "2.2.0p17" edition: "cee" site: "stable_ent" - - version: "2.1.0p36" + - version: "2.1.0p37" edition: "cre" site: "old_raw" @@ -18,8 +18,11 @@ checkmk_var_automation_user: "cmkadmin" checkmk_var_automation_secret: "d7589df1" download_url: "https://download.checkmk.com/checkmk/{{ item.version }}/check-mk-{{ checkmk_server_edition_mapping[item.edition] }}-{{ item.version }}_0.{{ ansible_distribution_release }}_amd64.deb" # noqa yaml[line-length] -download_user: "d-gh-ansible-dl" -download_pass: "{{ lookup('ansible.builtin.file', '/root/ansible_collections/checkmk/general/tests/integration/files/.dl-secret', errors='ignore') | default(omit) }}" # noqa yaml[line-length] +#download_user: "d-gh-ansible-dl" +#download_pass: "{{ lookup('ansible.builtin.file', '/root/ansible_collections/checkmk/general/tests/integration/files/.dl-secret', errors='ignore') | default(omit) }}" # noqa yaml[line-length] + +download_user: "d-intern" +download_pass: "77TbjY23" # Due to inconsistent naming of editions, we normalize them here for convenience checkmk_server_edition_mapping: @@ -33,50 +36,159 @@ checkmk_var_contact_groups: - team1 - team2 - team3 + - noteam -checkmk_var_users: +checkmk_var_users_create: - name: admin1 fullname: Admin Eins password: "123" - newpassword: "abc" auth_type: password email: 123@company.com contactgroups: [] roles: - admin fallback_contact: true + idle_timeout_duration: 5400 + idle_timeout_option: individual - name: user1 fullname: User Eins password: "123" - newpassword: "abc" auth_type: password email: 123@company.com + pager_address: "0123/4567890" contactgroups: - team1 fallback_contact: true + roles: + - admin + disable_notifications: true + disable_notifications_timerange: { "end_time": "2024-01-09T12:10:00+00:00", "start_time": "2024-01-09T10:10:00+00:00" } - name: user2 fullname: User Zwei password: "234" - newpassword: "bcd" + auth_type: password + contactgroups: + - team2 + roles: + - guest + language: en + - name: user3 + fullname: User Drei + password: "345" + auth_type: password + email: 345@company.com + contactgroups: + - noteam + fallback_contact: false + roles: + - user + language: de + disable_login: true + - name: user4 + fullname: User four + password: "4444" + auth_type: password + contactgroups: + - noteam + fallback_contact: false + roles: + - user + disable_notifications: false + - name: auto1 + fullname: Automation User 1 + password: "0123456789" + auth_type: automation + contactgroups: [] + roles: + - admin + +checkmk_var_users_newpw: + - name: admin1 + password: "abc" + auth_type: password + - name: user1 + password: "abc" + auth_type: password + - name: user2 + password: "bcd" + auth_type: password + - name: user3 + password: "cde" + auth_type: password + - name: auto1 + password: "abcdefghij" + auth_type: automation + +checkmk_var_users_edit: + - name: admin1 + fullname: Admin Eins + auth_type: password + email: 123@company.com + contactgroups: [] + roles: + - admin + fallback_contact: true + idle_timeout_option: global + - name: user1 + fullname: User One + password: "345egtd" + auth_type: password + email: user1@company.com + pager_address: "4567/9753210" + contactgroups: + - team1 + fallback_contact: true + roles: + - user + idle_timeout_duration: 5400 + idle_timeout_option: individual + disable_notifications: false + disable_notifications_timerange: { "end_time": "2024-01-09T08:10:00+00:00", "start_time": "2024-01-09T18:10:00+00:00" } + - name: user2 + fullname: User Zwei auth_type: password email: 234@company.com + pager_address: "0123/4567890" contactgroups: - team2 fallback_contact: true + roles: + - guest + idle_timeout_option: disable + disable_login: true + disable_notifications: true - name: user3 fullname: User Drei - password: "345" - newpassword: "cde" auth_type: password email: 345@company.com contactgroups: - team3 fallback_contact: false + roles: + - admin + language: default + disable_login: false + disable_notifications: false + - name: user4 + fullname: User four + password: "4444" + auth_type: password + contactgroups: + - noteam + fallback_contact: false + roles: + - user + disable_notifications_timerange: { "end_time": "2024-04-01T08:00:00+00:00", "start_time": "2024-04-01T20:00:00+00:00" } - name: auto1 fullname: Automation User 1 password: "0123456789" - newpassword: "abcdefghij" auth_type: automation contactgroups: [] roles: - admin + - name: auto1 + fullname: Automation User 1 + auth_type: automation + contactgroups: [] + roles: + - admin \ No newline at end of file From 3168f484366966675652da569a8a9f2b91ccca9f Mon Sep 17 00:00:00 2001 From: Lars Getwan Date: Wed, 10 Jan 2024 08:54:21 +0100 Subject: [PATCH 17/37] Added a check if an existing tag group HAS to be changed, at all. --- plugins/modules/tag_group.py | 47 ++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 2e7e0eae3..263f6bc11 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -113,6 +113,7 @@ sample: 'OK' """ +import json import time from ansible.module_utils.basic import AnsibleModule @@ -243,6 +244,35 @@ def get(self): ) +def changes_detected(module, current): + if module.params.get("title") != current.get("title"): + # The title has changed + return True + + if module.params.get("topic") != current.get("extensions", {}).get("topic"): + # The topic has changed + return True + + desired_tags = module.params.get("tags") + current_tags = current.get("extensions", {}).get("tags", []) + + if len(desired_tags) != len(current_tags): + # The number of tags has changed + return True + + for d in current_tags: + d["ident"] = d.pop("id") + d.pop("aux_tags") + + pairs = zip(desired_tags, current_tags) + + if not all(a == b for a, b in pairs): + # At least one of the tags or the order has changed + return True + + return False + + def run_module(): module_args = dict( server_url=dict(type="str", required=True), @@ -272,16 +302,19 @@ def run_module(): if module.params.get("state") == "present": taggroupget = TaggroupGetAPI(module) - result = taggroupget.get() + current = taggroupget.get() - if result.http_code == 200: - taggroupupdate = TaggroupUpdateAPI(module) - taggroupupdate.headers["If-Match"] = result.etag - result = taggroupupdate.put() + if current.http_code == 200: + # If tag group has changed then update it. + if changes_detected(module, json.loads(current.content.decode("utf-8"))): + taggroupupdate = TaggroupUpdateAPI(module) + taggroupupdate.headers["If-Match"] = current.etag + result = taggroupupdate.put() - time.sleep(3) + time.sleep(3) - elif result.http_code == 404: + elif current.http_code == 404: + # Tag group is not there. Create it. taggroupcreate = TaggroupCreateAPI(module) result = taggroupcreate.post() From bcf30bd7fd05410a2ed2062c59c3f5552bf8dbe4 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Wed, 10 Jan 2024 09:45:26 +0100 Subject: [PATCH 18/37] Added interface-options --- plugins/modules/user.py | 61 +++++++++++++++++-- tests/integration/targets/user/tasks/test.yml | 15 +++++ tests/integration/targets/user/vars/main.yml | 15 +++++ 3 files changed, 87 insertions(+), 4 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 3d36a93e3..41b8caa59 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -1,7 +1,9 @@ #!/usr/bin/python # -*- encoding: utf-8; py-indent-offset: 4 -*- -# Copyright: (c) 2023, Lars Getwan +# Copyright: (c) 2023, Lars Getwan & +# Marcel Arentz & +# Max Sickora # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -88,9 +90,31 @@ type: str default: present choices: [present, absent, reset_password] + interface_theme: + description: The theme of the interface + type: str + choices: [default, dark, light] + sidebar_position: + description: The position of the sidebar + type: str + choices: [left, right] + navigation_bar_icons: + description: This option decides if icons in the navigation bar should show/hide the respective titles + type: str + choices: [hide, show] + mega_menu_icons: + description: This option decides if colored icon should be shown foe every entry in the mega menus or alternatively only for the headlines (the 'topics') + type: str + choices: [topic, entry] + show_mode: + description: This option decides what show mode should be used for unvisited menus. Alternatively, this option can also be used to enforce show more removing the three dots for all menus. + type: str + choices: [default, default_show_less, default_show_more, enforce_show_more] author: - Lars Getwan (@lgetwan) + - Marcel Arentz (@godspeed-you) + - Max Sickora (@max-checkmk) """ EXAMPLES = r""" @@ -111,7 +135,6 @@ - "glimmer_twins" - "x-pensive_winos" - "potc_cast" - state: "present" # Create an automation user. - name: "Create an automation user." @@ -156,6 +179,11 @@ - "user" authorized_sites: - "{{ my_site }}" + interface_theme: "dark" + sidebar_position: "right" + navigation_bar_icons: "show" + mega_menu_icons: "entry" + show_mode: "default_show_more" state: "present" """ @@ -187,7 +215,7 @@ "disable_login", "email", "fallback_contact", - "pager_address", + "pager", "idle_timeout_option", "idle_timeout_duration", "roles", @@ -196,6 +224,11 @@ "disable_notifications", "disable_notifications_timerange", "language", + "interface_theme", + "sidebar_position", + "navigation_bar_icons", + "mega_menu_icons", + "show_mode", ) @@ -221,6 +254,7 @@ def _build_user_data(self): user = {} user["disable_notifications"] = {} + user["interface_options"] = {} # For some keys the API has required sub keys. We can use them as indicator, # that the key must be used @@ -237,13 +271,16 @@ def _build_user_data(self): "fullname", "customer", "disable_login", - "pager_address", "roles", "authorized_sites", "contactgroups", ): user[key] = value + if key in "pager": + key = "pager_address" + user[key] = value + if key in "language": if value != "default": user["language"] = value @@ -268,6 +305,9 @@ def _build_user_data(self): if key == "disable_notifications_timerange": user["disable_notifications"]["timerange"] = value + if key in ("interface_theme", "sidebar_position", "navigation_bar_icons", "mega_menu_icons", "show_mode"): + user["interface_options"][key] = value + return user def _set_current(self, result): @@ -277,6 +317,8 @@ def _set_current(self, result): if key in content: if key != "disable_notifications": self.current[key] = content[key] + if key in "pager": + self.current[key] = content["pager_address"] if key in ("email", "fallback_contact"): self.current[key] = content["contact_options"][key] if key == "idle_timeout_option": @@ -293,6 +335,9 @@ def _set_current(self, result): if "timerange" in content["disable_notifications"]: self.current[key] = content["disable_notifications"]["timerange"] + if key in ("interface_theme", "sidebar_position", "navigation_bar_icons", "mega_menu_icons", "show_mode"): + self.current[key] = content["interface_options"][key] + def _build_default_endpoint(self): return "%s/%s" % (UserEndpoints.default, self.params.get("name")) @@ -393,6 +438,14 @@ def run_module(): disable_notifications=dict(type="bool"), disable_notifications_timerange=dict(type="dict"), language=dict(type="str", choices=["default", "en", "de", "ro"]), + interface_theme=dict(type="str", choices=["default", "dark", "light"]), + sidebar_position=dict(type="str", choices=["left", "right"]), + navigation_bar_icons=dict(type="str", choices=["hide", "show"]), + mega_menu_icons=dict(type="str", choices=["topic", "entry"]), + show_mode=dict( + type="str", + choices=["default", "default_show_less", "default_show_more", "enforce_show_more"], + ), state=dict( type="str", default="present", diff --git a/tests/integration/targets/user/tasks/test.yml b/tests/integration/targets/user/tasks/test.yml index 65ab3fbcf..3ede7f895 100644 --- a/tests/integration/targets/user/tasks/test.yml +++ b/tests/integration/targets/user/tasks/test.yml @@ -55,6 +55,11 @@ contactgroups: "{{ item.contactgroups | default(omit) }}" idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + interface_theme: "{{ item.interface_theme | default(omit) }}" + sidebar_position: "{{ item.sidebar_position | default(omit) }}" + navigation_bar_icons: "{{ item.navigation_bar_icons | default(omit) }}" + mega_menu_icons: "{{ item.mega_menu_icons | default(omit) }}" + show_mode: "{{ item.show_mode | default(omit) }}" roles: "{{ item.roles }}" authorized_sites: - "{{ outer_item.site }}" @@ -102,6 +107,11 @@ contactgroups: "{{ item.contactgroups | default(omit) }}" idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + interface_theme: "{{ item.interface_theme | default(omit) }}" + sidebar_position: "{{ item.sidebar_position | default(omit) }}" + navigation_bar_icons: "{{ item.navigation_bar_icons | default(omit) }}" + mega_menu_icons: "{{ item.mega_menu_icons | default(omit) }}" + show_mode: "{{ item.show_mode | default(omit) }}" roles: "{{ item.roles }}" authorized_sites: - "{{ outer_item.site }}" @@ -135,6 +145,11 @@ contactgroups: "{{ item.contactgroups }}" idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" + interface_theme: "{{ item.interface_theme | default(omit) }}" + sidebar_position: "{{ item.sidebar_position | default(omit) }}" + navigation_bar_icons: "{{ item.navigation_bar_icons | default(omit) }}" + mega_menu_icons: "{{ item.mega_menu_icons | default(omit) }}" + show_mode: "{{ item.show_mode | default(omit) }}" roles: "{{ item.roles }}" state: "present" delegate_to: localhost diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index a968081ec..fe1b69a4a 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -94,6 +94,11 @@ checkmk_var_users_create: roles: - user disable_notifications: false + interface_theme: "dark" + sidebar_position: "right" + navigation_bar_icons: "show" + mega_menu_icons: "entry" + show_mode: "default_show_more" - name: auto1 fullname: Automation User 1 password: "0123456789" @@ -129,6 +134,11 @@ checkmk_var_users_edit: - admin fallback_contact: true idle_timeout_option: global + interface_theme: "dark" + sidebar_position: "right" + navigation_bar_icons: "show" + mega_menu_icons: "entry" + show_mode: "default_show_more" - name: user1 fullname: User One password: "345egtd" @@ -179,6 +189,11 @@ checkmk_var_users_edit: roles: - user disable_notifications_timerange: { "end_time": "2024-04-01T08:00:00+00:00", "start_time": "2024-04-01T20:00:00+00:00" } + interface_theme: "light" + sidebar_position: "left" + navigation_bar_icons: "hide" + mega_menu_icons: "topic" + show_mode: "enforce_show_more" - name: auto1 fullname: Automation User 1 password: "0123456789" From 8fe6b804c6b688bf46c58156a9e2205b6336cdfd Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Wed, 10 Jan 2024 09:52:21 +0100 Subject: [PATCH 19/37] fix_formating --- plugins/modules/user.py | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 41b8caa59..070e5cc57 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -103,11 +103,14 @@ type: str choices: [hide, show] mega_menu_icons: - description: This option decides if colored icon should be shown foe every entry in the mega menus or alternatively only for the headlines (the 'topics') + description: + - This option decides if colored icon should be shown foe every entry in the mega menus or alternatively only for the headlines (the 'topics') type: str choices: [topic, entry] show_mode: - description: This option decides what show mode should be used for unvisited menus. Alternatively, this option can also be used to enforce show more removing the three dots for all menus. + description: + - This option decides what show mode should be used for unvisited menus. + Alternatively, this option can also be used to enforce show more removing the three dots for all menus. type: str choices: [default, default_show_less, default_show_more, enforce_show_more] @@ -305,7 +308,13 @@ def _build_user_data(self): if key == "disable_notifications_timerange": user["disable_notifications"]["timerange"] = value - if key in ("interface_theme", "sidebar_position", "navigation_bar_icons", "mega_menu_icons", "show_mode"): + if key in ( + "interface_theme", + "sidebar_position", + "navigation_bar_icons", + "mega_menu_icons", + "show_mode", + ): user["interface_options"][key] = value return user @@ -335,7 +344,13 @@ def _set_current(self, result): if "timerange" in content["disable_notifications"]: self.current[key] = content["disable_notifications"]["timerange"] - if key in ("interface_theme", "sidebar_position", "navigation_bar_icons", "mega_menu_icons", "show_mode"): + if key in ( + "interface_theme", + "sidebar_position", + "navigation_bar_icons", + "mega_menu_icons", + "show_mode", + ): self.current[key] = content["interface_options"][key] def _build_default_endpoint(self): @@ -444,7 +459,12 @@ def run_module(): mega_menu_icons=dict(type="str", choices=["topic", "entry"]), show_mode=dict( type="str", - choices=["default", "default_show_less", "default_show_more", "enforce_show_more"], + choices=[ + "default", + "default_show_less", + "default_show_more", + "enforce_show_more", + ], ), state=dict( type="str", From cc8a30e66c55541337cd7b2688e6e3af7d6e6804 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Wed, 10 Jan 2024 12:50:02 +0100 Subject: [PATCH 20/37] repaired repair and added test --- plugins/modules/tag_group.py | 31 +++++-- .../targets/tag_group/tasks/test.yml | 91 ++++++++++++++++++- .../targets/tag_group/vars/main.yml | 28 +++++- 3 files changed, 135 insertions(+), 15 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 263f6bc11..036f1e2a7 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -62,6 +62,7 @@ author: - Max Sickora (@Max-checkmk) + - Stefan Mühling (@muehlings) """ EXAMPLES = r""" @@ -220,13 +221,12 @@ def put(self): class TaggroupDeleteAPI(CheckmkAPI): def delete(self): - data = { - "repair": self.params.get("repair"), - } + data = {} return self._fetch( code_mapping=HTTP_CODES_DELETE, - endpoint="/objects/host_tag_group/%s" % self.params.get("name"), + endpoint="/objects/host_tag_group/%s?repair=%s" + % (self.params.get("name"), self.params.get("repair")), data=data, method="DELETE", ) @@ -300,10 +300,10 @@ def run_module(): changed=False, ) - if module.params.get("state") == "present": - taggroupget = TaggroupGetAPI(module) - current = taggroupget.get() + taggroupget = TaggroupGetAPI(module) + current = taggroupget.get() + if module.params.get("state") == "present": if current.http_code == 200: # If tag group has changed then update it. if changes_detected(module, json.loads(current.content.decode("utf-8"))): @@ -322,10 +322,21 @@ def run_module(): time.sleep(3) if module.params.get("state") == "absent": - taggroupdelete = TaggroupDeleteAPI(module) - result = taggroupdelete.delete() + # Only delete if the Taggroup exists + if current.http_code == 200: + taggroupdelete = TaggroupDeleteAPI(module) + result = taggroupdelete.delete() - time.sleep(3) + time.sleep(3) + elif current.http_code == 404: + result = RESULT( + http_code=0, + msg="Taggroup doesn't exist.", + content="", + etag="", + failed=False, + changed=False, + ) module.exit_json(**result_as_dict(result)) diff --git a/tests/integration/targets/tag_group/tasks/test.yml b/tests/integration/targets/tag_group/tasks/test.yml index b590d338d..216f8d83d 100644 --- a/tests/integration/targets/tag_group/tasks/test.yml +++ b/tests/integration/targets/tag_group/tasks/test.yml @@ -12,8 +12,15 @@ tags: "{{ item.tags }}" state: "present" delegate_to: localhost + register: create_result loop: "{{ checkmk_taggroups_create }}" +- name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler + ansible.builtin.fail: + msg: "Tag groups not created! Maybe already existing?" + when: create_result is not changed + run_once: true # noqa run-once[task] + - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate changes." activation: server_url: "{{ checkmk_var_server_url }}" @@ -23,6 +30,58 @@ delegate_to: localhost run_once: true # noqa run-once[task] +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Create tag_group again." + tag_group: + server_url: "{{ checkmk_var_server_url }}" + site: "{{ outer_item.site }}" + automation_user: "{{ checkmk_var_automation_user }}" + automation_secret: "{{ checkmk_var_automation_secret }}" + name: "{{ item.name }}" + title: "{{ item.title }}" + topic: "{{ item.topic }}" + help: "{{ item.help }}" + tags: "{{ item.tags }}" + state: "present" + delegate_to: localhost + register: createagain_result + loop: "{{ checkmk_taggroups_create }}" + +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Fail if changed." # noqa no-handler + ansible.builtin.fail: + msg: "Tried to create the same tag group twice!" + when: "createagain_result.changed" + delegate_to: localhost + run_once: true # noqa run-once[task] + +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Create Host" + host: + server_url: "{{ checkmk_var_server_url }}" + site: "{{ outer_item.site }}" + automation_user: "{{ checkmk_var_automation_user }}" + automation_secret: "{{ checkmk_var_automation_secret }}" + name: "repairtest" + attributes: + tag_Datacenter: "Datacenter 1" + tag_Supporter: "Nobody" + state: "present" + +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Update tag_group without repair. (Should fail)" + tag_group: + server_url: "{{ checkmk_var_server_url }}" + site: "{{ outer_item.site }}" + automation_user: "{{ checkmk_var_automation_user }}" + automation_secret: "{{ checkmk_var_automation_secret }}" + name: "{{ item.name }}" + title: "{{ item.title }}" + topic: "{{ item.topic }}" + help: "{{ item.help }}" + tags: "{{ item.tags }}" + state: "present" + delegate_to: localhost + loop: "{{ checkmk_taggroups_update }}" + register: update_taggroup_status + failed_when: "'You must authorize Checkmk to update the relevant instances using the repair parameter' not in update_taggroup_status.msg" + - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Update tag_group." tag_group: server_url: "{{ checkmk_var_server_url }}" @@ -34,6 +93,7 @@ topic: "{{ item.topic }}" help: "{{ item.help }}" tags: "{{ item.tags }}" + repair: "{{ item.repair | default(omit) }}" state: "present" delegate_to: localhost loop: "{{ checkmk_taggroups_update }}" @@ -47,17 +107,26 @@ delegate_to: localhost run_once: true # noqa run-once[task] -- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Delete tag_group." +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Delete tag_groups." tag_group: server_url: "{{ checkmk_var_server_url }}" site: "{{ outer_item.site }}" automation_user: "{{ checkmk_var_automation_user }}" automation_secret: "{{ checkmk_var_automation_secret }}" name: "{{ item.name }}" + repair: "{{ item.repair | default(omit) }}" state: "absent" delegate_to: localhost + register: delete_result loop: "{{ checkmk_taggroups_delete }}" +- name: "{{ outer_item.version }} - Fail if not changed." # noqa no-handler + ansible.builtin.fail: + msg: "Tag groups not deleted" + when: delete_result is not changed + delegate_to: localhost + run_once: true # noqa run-once[task] + - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Activate changes." activation: server_url: "{{ checkmk_var_server_url }}" @@ -66,3 +135,23 @@ automation_secret: "{{ checkmk_var_automation_secret }}" delegate_to: localhost run_once: true # noqa run-once[task] + +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Delete tag_groups again." + tag_group: + server_url: "{{ checkmk_var_server_url }}" + site: "{{ outer_item.site }}" + automation_user: "{{ checkmk_var_automation_user }}" + automation_secret: "{{ checkmk_var_automation_secret }}" + name: "{{ item.name }}" + repair: "{{ item.repair | default(omit) }}" + state: "absent" + delegate_to: localhost + register: deleteagain_result + loop: "{{ checkmk_taggroups_delete }}" + +- name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Fail if changed." # noqa no-handler + ansible.builtin.fail: + msg: "Rule changed!" + when: "deleteagain_result.changed" + delegate_to: localhost + run_once: true # noqa run-once[task] diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index 6b536cfde..d93d86b80 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -3,6 +3,9 @@ test_sites: - version: "2.2.0p17" edition: "cre" site: "stable_raw" + - version: "2.2.0p17" + edition: "cee" + site: "stable_ent" - version: "2.1.0p37" edition: "cre" site: "old_raw" @@ -35,7 +38,7 @@ checkmk_taggroups_create: - ident: No_Datacenter title: No Datacenter - ident: Datacenter 1 - title: Datacenter 2 + title: Datacenter 1 - ident: Datacenter 2 title: Datacenter 2 - ident: Datacenter US @@ -61,11 +64,12 @@ checkmk_taggroups_update: title: Datacenter topic: Tags help: "something even more useful" + repair: True tags: - ident: No_Datacenter title: No Datacenter - - ident: Datacenter 1 - title: Datacenter 2 + - ident: Datacenter 1000 + title: Datacenter 1000 - ident: Datacenter 2 title: Datacenter 2 - ident: Datacenter 3 @@ -76,6 +80,22 @@ checkmk_taggroups_update: title: Datacenter ASIA - ident: Datacenter AFRICA title: Datacenter AFRICA + - name: Supporter + title: Supporter + topic: Tags + help: "Who to blame" + repair: True + tags: + - ident: Somebody + title: Somebody + - ident: RoyTrenneman + title: Roy Trenneman + - ident: MauriceMoss + title: Maurice Moss + - ident: JenBarber + title: Jen Barber + checkmk_taggroups_delete: - - name: Supporter \ No newline at end of file + - name: Supporter + repair: True \ No newline at end of file From 3d87045f722b501ef971025815ed6002b1324de5 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Thu, 11 Jan 2024 08:53:09 -0500 Subject: [PATCH 21/37] Bump Checkmk Versions. --- roles/agent/README.md | 2 +- roles/agent/defaults/main.yml | 2 +- roles/agent/molecule/2.1.0/group_vars/all.yml | 2 +- roles/agent/molecule/2.2.0/group_vars/all.yml | 2 +- roles/server/README.md | 2 +- roles/server/defaults/main.yml | 2 +- roles/server/molecule/2.1.0/group_vars/all.yml | 2 +- roles/server/molecule/2.2.0/group_vars/all.yml | 2 +- scripts/release.sh | 4 ++-- tests/integration/targets/activation/vars/main.yml | 6 +++--- tests/integration/targets/bakery/vars/main.yml | 4 ++-- tests/integration/targets/contact_group/vars/main.yml | 6 +++--- tests/integration/targets/discovery/vars/main.yml | 6 +++--- tests/integration/targets/downtime/vars/main.yml | 6 +++--- tests/integration/targets/folder/vars/main.yml | 6 +++--- tests/integration/targets/host/vars/main.yml | 6 +++--- tests/integration/targets/host_group/vars/main.yml | 8 ++++---- tests/integration/targets/lookup_bakery/vars/main.yml | 4 ++-- tests/integration/targets/lookup_folder/vars/main.yml | 6 +++--- tests/integration/targets/lookup_folders/vars/main.yml | 6 +++--- tests/integration/targets/lookup_host/vars/main.yml | 6 +++--- tests/integration/targets/lookup_hosts/vars/main.yml | 6 +++--- tests/integration/targets/lookup_rules/vars/main.yml | 6 +++--- tests/integration/targets/lookup_rulesets/vars/main.yml | 6 +++--- tests/integration/targets/lookup_version/vars/main.yml | 6 +++--- tests/integration/targets/password/vars/main.yml | 8 ++++---- tests/integration/targets/rule/vars/main.yml | 6 +++--- tests/integration/targets/service_group/vars/main.yml | 8 ++++---- tests/integration/targets/tag_group/vars/main.yml | 8 ++++---- tests/integration/targets/timeperiod/vars/main.yml | 6 +++--- tests/integration/targets/user/vars/main.yml | 8 ++++---- 31 files changed, 79 insertions(+), 79 deletions(-) diff --git a/roles/agent/README.md b/roles/agent/README.md index 1333f93fa..fd472f2e2 100644 --- a/roles/agent/README.md +++ b/roles/agent/README.md @@ -13,7 +13,7 @@ It can be installed as easy as running: ## Role Variables - checkmk_agent_version: "2.2.0p17" + checkmk_agent_version: "2.2.0p18" The Checkmk version of the site your agents will talk to. diff --git a/roles/agent/defaults/main.yml b/roles/agent/defaults/main.yml index c49841d5b..9abd2eed6 100644 --- a/roles/agent/defaults/main.yml +++ b/roles/agent/defaults/main.yml @@ -1,5 +1,5 @@ --- -checkmk_agent_version: "2.2.0p17" +checkmk_agent_version: "2.2.0p18" checkmk_agent_edition: cre checkmk_agent_server_protocol: http checkmk_agent_server: localhost diff --git a/roles/agent/molecule/2.1.0/group_vars/all.yml b/roles/agent/molecule/2.1.0/group_vars/all.yml index 2479268a0..1a2081859 100644 --- a/roles/agent/molecule/2.1.0/group_vars/all.yml +++ b/roles/agent/molecule/2.1.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.1.0p37" +checkmk_var_version: "2.1.0p38" checkmk_var_edition: "cre" checkmk_var_checkmk_site: "my_site" checkmk_var_automation_user: "cmkadmin" diff --git a/roles/agent/molecule/2.2.0/group_vars/all.yml b/roles/agent/molecule/2.2.0/group_vars/all.yml index df8ee467f..802d077e7 100644 --- a/roles/agent/molecule/2.2.0/group_vars/all.yml +++ b/roles/agent/molecule/2.2.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.2.0p17" +checkmk_var_version: "2.2.0p18" checkmk_var_edition: "cre" checkmk_var_checkmk_site: "my_site" checkmk_var_automation_user: "cmkadmin" diff --git a/roles/server/README.md b/roles/server/README.md index 91b5d7626..b3847433c 100644 --- a/roles/server/README.md +++ b/roles/server/README.md @@ -25,7 +25,7 @@ To learn about the distributions used in automated tests, inspect the correspond ## Role Variables - checkmk_server_version: "2.2.0p17" + checkmk_server_version: "2.2.0p18" The global Checkmk version. This is used for installing Checkmk. To manage sites and their version, see `checkmk_server_sites`. diff --git a/roles/server/defaults/main.yml b/roles/server/defaults/main.yml index 05c7fbd3e..1a0512351 100644 --- a/roles/server/defaults/main.yml +++ b/roles/server/defaults/main.yml @@ -24,7 +24,7 @@ checkmk_server_server_stable_os: - Ubuntu-20 - Ubuntu-22 -checkmk_server_version: "2.2.0p17" +checkmk_server_version: "2.2.0p18" checkmk_server_edition: cre checkmk_server_verify_setup: 'true' diff --git a/roles/server/molecule/2.1.0/group_vars/all.yml b/roles/server/molecule/2.1.0/group_vars/all.yml index a06d5ffe9..db44b60ee 100644 --- a/roles/server/molecule/2.1.0/group_vars/all.yml +++ b/roles/server/molecule/2.1.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.1.0p37" +checkmk_var_version: "2.1.0p38" checkmk_var_edition: "cre" checkmk_server_verify_setup: 'true' checkmk_var_server_url: "http://127.0.0.1/" diff --git a/roles/server/molecule/2.2.0/group_vars/all.yml b/roles/server/molecule/2.2.0/group_vars/all.yml index 08ce048ac..c811ad385 100644 --- a/roles/server/molecule/2.2.0/group_vars/all.yml +++ b/roles/server/molecule/2.2.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.2.0p17" +checkmk_var_version: "2.2.0p18" checkmk_var_edition: "cre" checkmk_server_verify_setup: 'true' checkmk_var_server_url: "http://127.0.0.1/" diff --git a/scripts/release.sh b/scripts/release.sh index 2bcb1f66d..feea1d2a1 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -16,8 +16,8 @@ collection_dir="${script_dir%/*}" # Update these as necessary: checkmk_ancient="2.0.0p39" -checkmk_oldstable="2.1.0p37" -checkmk_stable="2.2.0p17" +checkmk_oldstable="2.1.0p38" +checkmk_stable="2.2.0p18" while getopts 's:t:' OPTION; do case "$OPTION" in diff --git a/tests/integration/targets/activation/vars/main.yml b/tests/integration/targets/activation/vars/main.yml index f15733639..758ebb44f 100644 --- a/tests/integration/targets/activation/vars/main.yml +++ b/tests/integration/targets/activation/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/bakery/vars/main.yml b/tests/integration/targets/bakery/vars/main.yml index defc73c1c..b7d951e3c 100644 --- a/tests/integration/targets/bakery/vars/main.yml +++ b/tests/integration/targets/bakery/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cee" site: "old_ent" diff --git a/tests/integration/targets/contact_group/vars/main.yml b/tests/integration/targets/contact_group/vars/main.yml index 1160c115f..a8e644207 100644 --- a/tests/integration/targets/contact_group/vars/main.yml +++ b/tests/integration/targets/contact_group/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/discovery/vars/main.yml b/tests/integration/targets/discovery/vars/main.yml index 3733a00a4..90ec95bef 100644 --- a/tests/integration/targets/discovery/vars/main.yml +++ b/tests/integration/targets/discovery/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/downtime/vars/main.yml b/tests/integration/targets/downtime/vars/main.yml index f15733639..758ebb44f 100644 --- a/tests/integration/targets/downtime/vars/main.yml +++ b/tests/integration/targets/downtime/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/folder/vars/main.yml b/tests/integration/targets/folder/vars/main.yml index 66ceca89b..85890bba9 100644 --- a/tests/integration/targets/folder/vars/main.yml +++ b/tests/integration/targets/folder/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/host/vars/main.yml b/tests/integration/targets/host/vars/main.yml index 619212f1d..ffd0c707e 100644 --- a/tests/integration/targets/host/vars/main.yml +++ b/tests/integration/targets/host/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/host_group/vars/main.yml b/tests/integration/targets/host_group/vars/main.yml index 937774ccc..5c1f5d729 100644 --- a/tests/integration/targets/host_group/vars/main.yml +++ b/tests/integration/targets/host_group/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cme" site: "stable_cme" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/lookup_bakery/vars/main.yml b/tests/integration/targets/lookup_bakery/vars/main.yml index 579714e59..4a4d6fb8e 100644 --- a/tests/integration/targets/lookup_bakery/vars/main.yml +++ b/tests/integration/targets/lookup_bakery/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cee" site: "old_ent" diff --git a/tests/integration/targets/lookup_folder/vars/main.yml b/tests/integration/targets/lookup_folder/vars/main.yml index ed640c71a..b1ce307da 100644 --- a/tests/integration/targets/lookup_folder/vars/main.yml +++ b/tests/integration/targets/lookup_folder/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/lookup_folders/vars/main.yml b/tests/integration/targets/lookup_folders/vars/main.yml index 8909c0ef8..e90e6f5fa 100644 --- a/tests/integration/targets/lookup_folders/vars/main.yml +++ b/tests/integration/targets/lookup_folders/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/lookup_host/vars/main.yml b/tests/integration/targets/lookup_host/vars/main.yml index 283de8833..c18aee29e 100644 --- a/tests/integration/targets/lookup_host/vars/main.yml +++ b/tests/integration/targets/lookup_host/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/lookup_hosts/vars/main.yml b/tests/integration/targets/lookup_hosts/vars/main.yml index 61765aa62..27743bace 100644 --- a/tests/integration/targets/lookup_hosts/vars/main.yml +++ b/tests/integration/targets/lookup_hosts/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/lookup_rules/vars/main.yml b/tests/integration/targets/lookup_rules/vars/main.yml index e1c7fb35d..407a25e9a 100644 --- a/tests/integration/targets/lookup_rules/vars/main.yml +++ b/tests/integration/targets/lookup_rules/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" diff --git a/tests/integration/targets/lookup_rulesets/vars/main.yml b/tests/integration/targets/lookup_rulesets/vars/main.yml index aa21c410c..e168cee57 100644 --- a/tests/integration/targets/lookup_rulesets/vars/main.yml +++ b/tests/integration/targets/lookup_rulesets/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" diff --git a/tests/integration/targets/lookup_version/vars/main.yml b/tests/integration/targets/lookup_version/vars/main.yml index 4e4fb9cdc..1c163cd70 100644 --- a/tests/integration/targets/lookup_version/vars/main.yml +++ b/tests/integration/targets/lookup_version/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/password/vars/main.yml b/tests/integration/targets/password/vars/main.yml index 1835319f4..800268752 100644 --- a/tests/integration/targets/password/vars/main.yml +++ b/tests/integration/targets/password/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cme" site: "stable_cme" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/rule/vars/main.yml b/tests/integration/targets/rule/vars/main.yml index 0241fc7ad..98581471a 100644 --- a/tests/integration/targets/rule/vars/main.yml +++ b/tests/integration/targets/rule/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" diff --git a/tests/integration/targets/service_group/vars/main.yml b/tests/integration/targets/service_group/vars/main.yml index 3c9e4cafc..c3ad49ae8 100644 --- a/tests/integration/targets/service_group/vars/main.yml +++ b/tests/integration/targets/service_group/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cme" site: "stable_cme" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index e8f3dea77..19ee223b1 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cme" site: "stable_cme" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" - version: "2.0.0p39" diff --git a/tests/integration/targets/timeperiod/vars/main.yml b/tests/integration/targets/timeperiod/vars/main.yml index 8882ad269..ee8415697 100644 --- a/tests/integration/targets/timeperiod/vars/main.yml +++ b/tests/integration/targets/timeperiod/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index 444ee4ea6..b161686a9 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -1,15 +1,15 @@ --- test_sites: - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cme" site: "stable_cme" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cre" site: "stable_raw" - - version: "2.2.0p17" + - version: "2.2.0p18" edition: "cee" site: "stable_ent" - - version: "2.1.0p37" + - version: "2.1.0p38" edition: "cre" site: "old_raw" From 694a7deb1995dafd7093d9e3a92b7351b8816554 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Thu, 11 Jan 2024 15:56:59 -0500 Subject: [PATCH 22/37] Update documentation section. --- plugins/modules/user.py | 110 +++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 41 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 070e5cc57..e368a9762 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -20,7 +20,7 @@ version_added: "0.18.0" description: -- Create and delete users within Checkmk. +- Manage users in Checkmk. extends_documentation_fragment: [checkmk.general.common] @@ -30,81 +30,88 @@ required: true type: str fullname: - description: The alias or full name of the user. + description: A alias or the full name of the user. type: str customer: - description: For the Checkmk Managed Edition (CME), you need to specify which customer ID this object belongs to. - required: false + description: + - For the Checkmk Managed Edition (CME), you need to specify which customer ID this object belongs to. type: str + authorized_sites: + description: The names of the sites the user is authorized to access. + type: raw + auth_type: + description: + - The authentication type. + Setting this to C(password) will create a normal user, C(automation) will create an automation user. + type: str + choices: [password, automation] password: - description: The password or secret for login. + description: + - The password or secret for login. Depending on the C(auth_type), this is interpreted as a password or secret. type: str enforce_password_change: - description: If set to true, the user will be forced to change his/her password at the next login. + description: If set to C(true), the user will be forced to change their password on the next login. type: bool - auth_type: - description: The authentication type. - type: str - choices: [password, automation] disable_login: - description: The user can be blocked from login but will remain part of the site. The disabling does not affect notification and alerts. + description: + - If set to C(true), the user cannot log in anymore, but will remain part of the site. + Disabling a user does not affect notifications. type: bool email: - description: The mail address of the user. Required if the user is a monitoring contact and receives notifications via mail. + description: + - The mail address of the user. Required if the user is a monitoring contact and should receive notifications via mail. type: str - fallback_contact: - description: In case none of your notification rules handles a certain event a notification will be sent to the specified email. - type: bool pager: - description: The pager address. + description: A (mobile) phone number, used to receive e.g., SMS. type: str aliases: ["pager_address"] - idle_timeout_duration: - description: The duration in seconds of the individual idle timeout if individual is selected as idle timeout option. - type: int + fallback_contact: + description: + - This user will receive fallback notifications. + This means, if no notification rules match a certain event, they are sent to the fallback contacts. + type: bool idle_timeout_option: - description: Specify if the idle timeout should use the global configuration, be disabled or use an individual duration + description: + - Specify, whether the idle timeout should use the global configuration, use an individual duration or be disabled entirely. type: str choices: [global, disable, individual] + idle_timeout_duration: + description: The duration in seconds, if C(idle_timeout_option) is set to C(individual). + type: int roles: - description: The list of assigned roles to the user. - type: raw - authorized_sites: - description: The names of the sites the user is authorized to handle. + description: A list of roles assigned to the user. type: raw contactgroups: - description: Assign the user to one or multiple contact groups. If no contact group is specified then no monitoring contact will be created. + description: A list of contact groups assigned to the user. type: raw disable_notifications: - description: Option if all notifications should be temporarily disabled. + description: Temporarily disable B(all) notifications for this user. type: bool disable_notifications_timerange: - description: A custom timerange during which notifications are disabled. + description: The duration, for how log notifications should be disabled, if C(disable_notifications) is set to C(true). type: dict language: - description: Configure the language to be used by the user in the user interface. Omitting this will configure the default language. - type: str - choices: [default, en, de, ro] - state: - description: Desired state + description: + - Configure the language to be used by the user in the user interface. + Omitting this will configure the default language. type: str - default: present - choices: [present, absent, reset_password] + choices: [default, en, de] interface_theme: - description: The theme of the interface + description: The theme of the user interface. type: str choices: [default, dark, light] sidebar_position: - description: The position of the sidebar + description: The position of the sidebar. type: str choices: [left, right] navigation_bar_icons: - description: This option decides if icons in the navigation bar should show/hide the respective titles + description: This option decides if icons in the navigation bar should show/hide the respective titles. type: str choices: [hide, show] mega_menu_icons: description: - - This option decides if colored icon should be shown foe every entry in the mega menus or alternatively only for the headlines (the 'topics') + - This option decides if colored icons should be shown for every entry in the mega menus + or only for the headlines (the 'topics'). type: str choices: [topic, entry] show_mode: @@ -113,6 +120,11 @@ Alternatively, this option can also be used to enforce show more removing the three dots for all menus. type: str choices: [default, default_show_less, default_show_more, enforce_show_more] + state: + description: Desired state + type: str + default: present + choices: [present, absent, reset_password] author: - Lars Getwan (@lgetwan) @@ -130,7 +142,6 @@ automation_secret: "my_secret" name: "krichards" fullname: "Keith Richards" - customer: "provider" email: "keith.richards@rollingstones.com" password: "Open-G" contactgroups: @@ -148,15 +159,32 @@ automation_secret: "my_secret" name: "registration" fullname: "Registration User" - customer: "provider" auth_type: "automation" password: "ZGSDHUVDSKJHSDF" roles: - "registration" state: "present" +# Create a user with the Checkmk Managed Edition (CME), using the `customer` parameter. +- name: "Create a user." + checkmk.general.user: + server_url: "http://my_server/" + site: "local" + automation_user: "my_user" + automation_secret: "my_secret" + name: "krichards" + fullname: "Keith Richards" + email: "keith.richards@rollingstones.com" + customer: "provider" + password: "Open-G" + contactgroups: + - "rolling_stones" + - "glimmer_twins" + - "x-pensive_winos" + - "potc_cast" + # Create a detailed user. -- name: "Create a detailed user." +- name: "Create a more complex user." checkmk.general.user: server_url: "http://my_server/" site: "local" From e931f0255c01f6f829aaf2ebf89a926c4bfe7fd3 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Thu, 11 Jan 2024 15:58:08 -0500 Subject: [PATCH 23/37] Align module options. --- plugins/modules/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index e368a9762..11a579133 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -480,7 +480,7 @@ def run_module(): contactgroups=dict(type="raw"), disable_notifications=dict(type="bool"), disable_notifications_timerange=dict(type="dict"), - language=dict(type="str", choices=["default", "en", "de", "ro"]), + language=dict(type="str", choices=["default", "en", "de"]), interface_theme=dict(type="str", choices=["default", "dark", "light"]), sidebar_position=dict(type="str", choices=["left", "right"]), navigation_bar_icons=dict(type="str", choices=["hide", "show"]), From 2ca3121c56758e34571fd03ef3d9822fcb40a097 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Thu, 11 Jan 2024 15:59:42 -0500 Subject: [PATCH 24/37] Change KVM network to avoid collisions. --- Vagrantfile.kvm | 36 ++++++++++++++++++------------------ playbooks/hosts.kvm | 14 +++++++------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Vagrantfile.kvm b/Vagrantfile.kvm index abfda44f3..e277ae318 100644 --- a/Vagrantfile.kvm +++ b/Vagrantfile.kvm @@ -12,10 +12,10 @@ Vagrant.configure("2") do |config| config.vm.define "collection", primary: true do |srv| srv.vm.box = "generic/ubuntu2204" srv.vm.network :private_network, - :ip => "192.168.123.42", + :ip => "192.168.124.42", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -52,10 +52,10 @@ Vagrant.configure("2") do |config| config.vm.define "molecule", autostart: false , primary: false do |srv| srv.vm.box = "generic/ubuntu2004" srv.vm.network :private_network, - :ip => "192.168.123.43", + :ip => "192.168.124.43", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -93,10 +93,10 @@ Vagrant.configure("2") do |config| config.vm.define "ansibuntu", autostart: false , primary: false do |srv| srv.vm.box = "generic/ubuntu2204" srv.vm.network :private_network, - :ip => "192.168.123.61", + :ip => "192.168.124.61", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -115,10 +115,10 @@ Vagrant.configure("2") do |config| config.vm.define "debsible", autostart: false , primary: false do |srv| srv.vm.box = "generic/debian12" srv.vm.network :private_network, - :ip => "192.168.123.62", + :ip => "192.168.124.62", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -137,10 +137,10 @@ Vagrant.configure("2") do |config| config.vm.define "anstream", autostart: false , primary: false do |srv| srv.vm.box = "generic/centos9s" srv.vm.network :private_network, - :ip => "192.168.123.63", + :ip => "192.168.124.63", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -159,10 +159,10 @@ Vagrant.configure("2") do |config| config.vm.define "ansuse", autostart: false , primary: false do |srv| srv.vm.box = "generic/opensuse42" srv.vm.network :private_network, - :ip => "192.168.123.64", + :ip => "192.168.124.64", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -181,10 +181,10 @@ Vagrant.configure("2") do |config| # config.vm.define "ansles", autostart: false , primary: false do |srv| # srv.vm.box = "saltstack/cicd-sles15" # srv.vm.network :private_network, - # :ip => "192.168.123.64", + # :ip => "192.168.124.64", # :libvirt__netmask => "255.255.255.0", # :libvirt__network_name => "ansible_collection", - # :libvirt__network_address => "192.168.123.0" + # :libvirt__network_address => "192.168.124.0" # srv.ssh.insert_key = false # srv.vm.provider "libvirt" do |libvirt| # libvirt.default_prefix = "ansible_" @@ -203,10 +203,10 @@ Vagrant.configure("2") do |config| config.vm.define "ansoracle", autostart: false , primary: false do |srv| srv.vm.box = "generic/oracle8" srv.vm.network :private_network, - :ip => "192.168.123.66", + :ip => "192.168.124.66", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.ssh.insert_key = false srv.vm.provider "libvirt" do |libvirt| libvirt.default_prefix = "ansible_" @@ -225,10 +225,10 @@ Vagrant.configure("2") do |config| config.vm.define "ansidows", autostart: false , primary: false do |srv| srv.vm.box = "peru/windows-server-2019-standard-x64-eval" srv.vm.network :private_network, - :ip => "192.168.123.67", + :ip => "192.168.124.67", :libvirt__netmask => "255.255.255.0", :libvirt__network_name => "ansible_collection", - :libvirt__network_address => "192.168.123.0" + :libvirt__network_address => "192.168.124.0" srv.winrm.max_tries = 100 srv.winrm.retry_delay = 2 srv.vm.boot_timeout = 180 diff --git a/playbooks/hosts.kvm b/playbooks/hosts.kvm index b7a7941ee..aeae816e8 100644 --- a/playbooks/hosts.kvm +++ b/playbooks/hosts.kvm @@ -6,15 +6,15 @@ test4.tld checkmk_var_folder_path="/" test5.tld checkmk_var_folder_path="/foo/bar" [linux] -ansibuntu ansible_host=192.168.123.61 checkmk_var_folder_path="/test" -debsible ansible_host=192.168.123.62 checkmk_var_folder_path="/foo" -anstream ansible_host=192.168.123.63 checkmk_var_folder_path="foo/bar" -ansuse ansible_host=192.168.123.64 checkmk_var_folder_path="/bar" -ansles ansible_host=192.168.123.65 checkmk_var_folder_path="/bar/foo" -ansoracle ansible_host=192.168.123.66 checkmk_var_folder_path="/foo" +ansibuntu ansible_host=192.168.124.61 checkmk_var_folder_path="/test" +debsible ansible_host=192.168.124.62 checkmk_var_folder_path="/foo" +anstream ansible_host=192.168.124.63 checkmk_var_folder_path="foo/bar" +ansuse ansible_host=192.168.124.64 checkmk_var_folder_path="/bar" +ansles ansible_host=192.168.124.65 checkmk_var_folder_path="/bar/foo" +ansoracle ansible_host=192.168.124.66 checkmk_var_folder_path="/foo" [windows] -ansidows ansible_host=192.168.123.67 checkmk_var_folder_path="/" +ansidows ansible_host=192.168.124.67 checkmk_var_folder_path="/" [windows:vars] ansible_shell_type = cmd From 8129c1624ad160f658ac180476ece470514c597d Mon Sep 17 00:00:00 2001 From: Lars Getwan Date: Fri, 12 Jan 2024 11:09:00 +0100 Subject: [PATCH 25/37] Renamed the parameter ident to id and made the parameter definitions more precise. --- plugins/modules/tag_group.py | 81 ++++++++++++------- .../targets/tag_group/vars/main.yml | 42 +++++----- 2 files changed, 72 insertions(+), 51 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 036f1e2a7..555fe2717 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -29,7 +29,7 @@ name: description: The name of the tag_group to be created/ modified/deleted. - default: "" + required: true type: str aliases: ["id"] title: @@ -50,6 +50,15 @@ type: list elements: dict aliases: ["choices"] + suboptions: + id: + description: The id of the tag + required: true + type: str + title: + description: The title of the tag + required: true + type: str repair: description: Give permission to update or remove the tag automatically on hosts using it. default: "False" @@ -78,15 +87,15 @@ topic: Tags help: "something useful" tags: - - ident: No_Datacenter + - id: No_Datacenter title: No Datacenter - - ident: Datacenter 1 + - id: Datacenter 1 title: Datacenter 2 - - ident: Datacenter 2 + - id: Datacenter 2 title: Datacenter 2 - - ident: Datacenter US + - id: Datacenter US title: Datacenter US - - ident: Datacenter ASIA + - id: Datacenter ASIA title: Datacenter ASIA state: present @@ -165,6 +174,27 @@ } +def normalize_data(raw_data): + data = { + "title": raw_data.get("title", ""), + "topic": raw_data.get("topic", ""), + "help": raw_data.get("help", ""), + "tags": raw_data.get("tags", ""), + "repair": raw_data.get("repair"), + } + + # Remove all keys without value, as they would be emptied. + data = {key: val for key, val in data.items() if val} + + # The API uses "ident" instead of "id" for the put & post endpoints + if "tags" in data: + for d in data["tags"]: + if "id" in d: + d["ident"] = d.pop("id") + + return data + + class TaggroupCreateAPI(CheckmkAPI): def post(self): if not self.params.get("title") or not self.params.get("tags"): @@ -179,16 +209,8 @@ def post(self): return result else: - data = { - "ident": self.params.get("name", ""), - "title": self.params.get("title", ""), - "topic": self.params.get("topic", ""), - "help": self.params.get("help", ""), - "tags": self.params.get("tags", ""), - } - - # Remove all keys without value, as otherwise they would be None. - data = {key: val for key, val in data.items() if val} + data = normalize_data(self.params) + data["ident"] = self.params.get("name") return self._fetch( code_mapping=HTTP_CODES_CREATE, @@ -200,16 +222,7 @@ def post(self): class TaggroupUpdateAPI(CheckmkAPI): def put(self): - data = { - "title": self.params.get("title", ""), - "topic": self.params.get("topic", ""), - "help": self.params.get("help", ""), - "tags": self.params.get("tags", ""), - "repair": self.params.get("repair"), - } - - # Remove all keys without value, as they would be emptied. - data = {key: val for key, val in data.items() if val} + data = normalize_data(self.params) return self._fetch( code_mapping=HTTP_CODES_UPDATE, @@ -227,7 +240,7 @@ def delete(self): code_mapping=HTTP_CODES_DELETE, endpoint="/objects/host_tag_group/%s?repair=%s" % (self.params.get("name"), self.params.get("repair")), - data=data, + # data=data, method="DELETE", ) @@ -261,7 +274,6 @@ def changes_detected(module, current): return True for d in current_tags: - d["ident"] = d.pop("id") d.pop("aux_tags") pairs = zip(desired_tags, current_tags) @@ -281,10 +293,19 @@ def run_module(): automation_user=dict(type="str", required=True), automation_secret=dict(type="str", required=True, no_log=True), title=dict(type="str", default=""), - name=dict(type="str", default="", aliases=["id"]), + name=dict(type="str", required=True, aliases=["id"]), topic=dict(type="str", default=""), help=dict(type="str", default=""), - tags=dict(type="list", elements="dict", default=[], aliases=["choices"]), + tags=dict( + type="list", + elements="dict", + default=[], + aliases=["choices"], + options=dict( + id=dict(type="str", required=True), + title=dict(type="str", required=True), + ), + ), repair=dict(type="bool", default="False"), state=dict(type="str", default="present", choices=["present", "absent"]), ) diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index d93d86b80..c3f657a87 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -35,28 +35,28 @@ checkmk_taggroups_create: topic: Tags help: "something useful" tags: - - ident: No_Datacenter + - id: No_Datacenter title: No Datacenter - - ident: Datacenter 1 + - id: Datacenter 1 title: Datacenter 1 - - ident: Datacenter 2 + - id: Datacenter 2 title: Datacenter 2 - - ident: Datacenter US + - id: Datacenter US title: Datacenter US - - ident: Datacenter ASIA + - id: Datacenter ASIA title: Datacenter ASIA - name: Supporter title: Supporter topic: Tags help: "Who to blame" tags: - - ident: Nobody + - id: Nobody title: Nobody - - ident: RoyTrenneman + - id: RoyTrenneman title: Roy Trenneman - - ident: MauriceMoss + - id: MauriceMoss title: Maurice Moss - - ident: JenBarber + - id: JenBarber title: Jen Barber checkmk_taggroups_update: @@ -66,19 +66,19 @@ checkmk_taggroups_update: help: "something even more useful" repair: True tags: - - ident: No_Datacenter + - id: No_Datacenter title: No Datacenter - - ident: Datacenter 1000 + - id: Datacenter 1000 title: Datacenter 1000 - - ident: Datacenter 2 + - id: Datacenter 2 title: Datacenter 2 - - ident: Datacenter 3 + - id: Datacenter 3 title: Datacenter 3 - - ident: Datacenter US + - id: Datacenter US title: Datacenter US - - ident: Datacenter ASIA + - id: Datacenter ASIA title: Datacenter ASIA - - ident: Datacenter AFRICA + - id: Datacenter AFRICA title: Datacenter AFRICA - name: Supporter title: Supporter @@ -86,16 +86,16 @@ checkmk_taggroups_update: help: "Who to blame" repair: True tags: - - ident: Somebody + - id: Somebody title: Somebody - - ident: RoyTrenneman + - id: RoyTrenneman title: Roy Trenneman - - ident: MauriceMoss + - id: MauriceMoss title: Maurice Moss - - ident: JenBarber + - id: JenBarber title: Jen Barber checkmk_taggroups_delete: - name: Supporter - repair: True \ No newline at end of file + repair: True From 23b0e6fe623c30f4e96a6ba291453a7692d6b65e Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Fri, 12 Jan 2024 13:59:11 +0100 Subject: [PATCH 26/37] Added checks for missing parameters of cmkadmin --- plugins/modules/user.py | 6 +++--- tests/integration/targets/user/tasks/test.yml | 4 ++-- tests/integration/targets/user/vars/main.yml | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index 11a579133..af3d4e74c 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -354,9 +354,9 @@ def _set_current(self, result): if key in content: if key != "disable_notifications": self.current[key] = content[key] - if key in "pager": + if key in "pager" and "pager_address"in content: self.current[key] = content["pager_address"] - if key in ("email", "fallback_contact"): + if key in ("email", "fallback_contact") and "contact_options" in content: self.current[key] = content["contact_options"][key] if key == "idle_timeout_option": self.current[key] = content["idle_timeout"]["option"] @@ -378,7 +378,7 @@ def _set_current(self, result): "navigation_bar_icons", "mega_menu_icons", "show_mode", - ): + ) and key in content["interface_options"]: self.current[key] = content["interface_options"][key] def _build_default_endpoint(self): diff --git a/tests/integration/targets/user/tasks/test.yml b/tests/integration/targets/user/tasks/test.yml index 3ede7f895..041fdbe66 100644 --- a/tests/integration/targets/user/tasks/test.yml +++ b/tests/integration/targets/user/tasks/test.yml @@ -142,7 +142,7 @@ pager_address: "{{ item.pager_address | default(omit) }}" language: "{{ item.language | default(omit) }}" disable_login: "{{ item.disable_login | default(omit) }}" - contactgroups: "{{ item.contactgroups }}" + contactgroups: "{{ item.contactgroups | default(omit) }}" idle_timeout_duration: "{{ item.idle_timeout_duration | default(omit) }}" idle_timeout_option: "{{ item.idle_timeout_option | default(omit) }}" interface_theme: "{{ item.interface_theme | default(omit) }}" @@ -150,7 +150,7 @@ navigation_bar_icons: "{{ item.navigation_bar_icons | default(omit) }}" mega_menu_icons: "{{ item.mega_menu_icons | default(omit) }}" show_mode: "{{ item.show_mode | default(omit) }}" - roles: "{{ item.roles }}" + roles: "{{ item.roles | default(omit) }}" state: "present" delegate_to: localhost run_once: true # noqa run-once[task] diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index fe1b69a4a..fcee805fd 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -185,7 +185,7 @@ checkmk_var_users_edit: auth_type: password contactgroups: - noteam - fallback_contact: false + fallback_contact: true roles: - user disable_notifications_timerange: { "end_time": "2024-04-01T08:00:00+00:00", "start_time": "2024-04-01T20:00:00+00:00" } @@ -206,4 +206,6 @@ checkmk_var_users_edit: auth_type: automation contactgroups: [] roles: - - admin \ No newline at end of file + - admin + - name: cmkadmin + show_mode: "enforce_show_more" \ No newline at end of file From 9d940a4bdbb875a71ed0fb6b76cf415b804607a3 Mon Sep 17 00:00:00 2001 From: "max.sickora" Date: Fri, 12 Jan 2024 14:01:03 +0100 Subject: [PATCH 27/37] blacked file --- plugins/modules/user.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index af3d4e74c..ece3d9c99 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -354,7 +354,7 @@ def _set_current(self, result): if key in content: if key != "disable_notifications": self.current[key] = content[key] - if key in "pager" and "pager_address"in content: + if key in "pager" and "pager_address" in content: self.current[key] = content["pager_address"] if key in ("email", "fallback_contact") and "contact_options" in content: self.current[key] = content["contact_options"][key] @@ -372,13 +372,17 @@ def _set_current(self, result): if "timerange" in content["disable_notifications"]: self.current[key] = content["disable_notifications"]["timerange"] - if key in ( - "interface_theme", - "sidebar_position", - "navigation_bar_icons", - "mega_menu_icons", - "show_mode", - ) and key in content["interface_options"]: + if ( + key + in ( + "interface_theme", + "sidebar_position", + "navigation_bar_icons", + "mega_menu_icons", + "show_mode", + ) + and key in content["interface_options"] + ): self.current[key] = content["interface_options"][key] def _build_default_endpoint(self): From cfc19577dd062dd0338337ed966d577f527813d6 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:10:17 -0500 Subject: [PATCH 28/37] Update documentation. --- plugins/modules/tag_group.py | 48 +++++++++++++++++------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 555fe2717..b25c37b56 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -3,7 +3,6 @@ # Copyright: (c) 2023, Max Sickora & # Stefan Mühling & -# Robin Gierse # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -14,38 +13,37 @@ --- module: tag_group -short_description: Manage tag_group within Checkmk +short_description: Manage tag groups in Checkmk. # If this is part of a collection, you need to use semantic versioning, # i.e. the version is of the form "2.5.0" and not "2.4". version_added: "0.11.0" description: -- Manage tag_group within Checkmk. +- Manage tag groups in Checkmk. extends_documentation_fragment: [checkmk.general.common] options: name: - description: The name of the tag_group to be created/ - modified/deleted. + description: The name of the tag group to manage. required: true type: str aliases: ["id"] title: - description: The title of the tag_group + description: The title of the tag group. default: "" type: str topic: - description: The topic of the tag_group + description: The topic of the tag group. default: "" type: str help: - description: The help of the tag_group + description: The help text for the tag group. default: "" type: str tags: - description: The list of the tags for the tag_group as dicts. + description: A list of the tag groups to be created. default: [] type: list elements: dict @@ -60,11 +58,13 @@ required: true type: str repair: - description: Give permission to update or remove the tag automatically on hosts using it. + description: + - Give permission to update or remove the tag on hosts using it automatically. + B(Use with caution!) default: "False" type: bool state: - description: The desired state + description: The desired state. default: "present" choices: ["present", "absent"] type: str @@ -76,37 +76,35 @@ EXAMPLES = r""" # Create a tag group -- name: "Create tag_group" +- name: "Create tag group" checkmk.general.tag_group: - server_url: "https://localhost/" + server_url: "https://my_server/" site: "my_site" automation_user: "my_user" automation_secret: "my_secret" - name: Datacenter + name: datacenter title: Datacenter topic: Tags - help: "something useful" + help: "The datacenter this host resides in." tags: - - id: No_Datacenter + - id: datacenter_none title: No Datacenter - - id: Datacenter 1 + - id: datacenter_1 title: Datacenter 2 - - id: Datacenter 2 + - id: datacenter_2 title: Datacenter 2 - - id: Datacenter US - title: Datacenter US - - id: Datacenter ASIA - title: Datacenter ASIA + - id: datacenter_3 + title: Datacenter 3 state: present # Delete a tag group -- name: "Delete tag_group." +- name: "Delete tag group." checkmk.general.tag_group: - server_url: "https://localhost/" + server_url: "https://my_server/" site: "my_site" automation_user: "my_user" automation_secret: "my_secret" - name: Datacenter + name: datacenter state: "absent" """ From a59a225d044d4a5a7bb04afd29338ee02b51a650 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:27:56 -0500 Subject: [PATCH 29/37] Sort module options. --- plugins/modules/user.py | 96 ++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/plugins/modules/user.py b/plugins/modules/user.py index ece3d9c99..d2a00f13b 100644 --- a/plugins/modules/user.py +++ b/plugins/modules/user.py @@ -25,103 +25,103 @@ extends_documentation_fragment: [checkmk.general.common] options: - name: - description: The user you want to manage. - required: true - type: str - fullname: - description: A alias or the full name of the user. - type: str - customer: - description: - - For the Checkmk Managed Edition (CME), you need to specify which customer ID this object belongs to. - type: str - authorized_sites: - description: The names of the sites the user is authorized to access. - type: raw auth_type: description: - The authentication type. Setting this to C(password) will create a normal user, C(automation) will create an automation user. type: str choices: [password, automation] - password: + authorized_sites: + description: The names of the sites the user is authorized to access. + type: raw + contactgroups: + description: A list of contact groups assigned to the user. + type: raw + customer: description: - - The password or secret for login. Depending on the C(auth_type), this is interpreted as a password or secret. + - For the Checkmk Managed Edition (CME), you need to specify which customer ID this object belongs to. type: str - enforce_password_change: - description: If set to C(true), the user will be forced to change their password on the next login. + disable_notifications: + description: Temporarily disable B(all) notifications for this user. type: bool disable_login: description: - If set to C(true), the user cannot log in anymore, but will remain part of the site. Disabling a user does not affect notifications. type: bool + disable_notifications_timerange: + description: The duration, for how log notifications should be disabled, if C(disable_notifications) is set to C(true). + type: dict email: description: - The mail address of the user. Required if the user is a monitoring contact and should receive notifications via mail. type: str - pager: - description: A (mobile) phone number, used to receive e.g., SMS. - type: str - aliases: ["pager_address"] + enforce_password_change: + description: If set to C(true), the user will be forced to change their password on the next login. + type: bool fallback_contact: description: - This user will receive fallback notifications. This means, if no notification rules match a certain event, they are sent to the fallback contacts. type: bool + fullname: + description: A alias or the full name of the user. + type: str + idle_timeout_duration: + description: The duration in seconds, if C(idle_timeout_option) is set to C(individual). + type: int idle_timeout_option: description: - Specify, whether the idle timeout should use the global configuration, use an individual duration or be disabled entirely. type: str choices: [global, disable, individual] - idle_timeout_duration: - description: The duration in seconds, if C(idle_timeout_option) is set to C(individual). - type: int - roles: - description: A list of roles assigned to the user. - type: raw - contactgroups: - description: A list of contact groups assigned to the user. - type: raw - disable_notifications: - description: Temporarily disable B(all) notifications for this user. - type: bool - disable_notifications_timerange: - description: The duration, for how log notifications should be disabled, if C(disable_notifications) is set to C(true). - type: dict + interface_theme: + description: The theme of the user interface. + type: str + choices: [default, dark, light] language: description: - Configure the language to be used by the user in the user interface. Omitting this will configure the default language. type: str choices: [default, en, de] - interface_theme: - description: The theme of the user interface. + mega_menu_icons: + description: + - This option decides if colored icons should be shown for every entry in the mega menus + or only for the headlines (the 'topics'). type: str - choices: [default, dark, light] - sidebar_position: - description: The position of the sidebar. + choices: [topic, entry] + name: + description: The user you want to manage. + required: true type: str - choices: [left, right] navigation_bar_icons: description: This option decides if icons in the navigation bar should show/hide the respective titles. type: str choices: [hide, show] - mega_menu_icons: + pager: + description: A (mobile) phone number, used to receive e.g., SMS. + type: str + aliases: ["pager_address"] + password: description: - - This option decides if colored icons should be shown for every entry in the mega menus - or only for the headlines (the 'topics'). + - The password or secret for login. Depending on the C(auth_type), this is interpreted as a password or secret. type: str - choices: [topic, entry] + roles: + description: A list of roles assigned to the user. + type: raw show_mode: description: - This option decides what show mode should be used for unvisited menus. Alternatively, this option can also be used to enforce show more removing the three dots for all menus. type: str choices: [default, default_show_less, default_show_more, enforce_show_more] + sidebar_position: + description: The position of the sidebar. + type: str + choices: [left, right] state: - description: Desired state + description: The desired state. type: str default: present choices: [present, absent, reset_password] From f665885b5d515021a3c835ef38dd3630bf464128 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:42:08 -0500 Subject: [PATCH 30/37] Sort options. --- plugins/modules/tag_group.py | 44 ++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index b25c37b56..6be369833 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -2,7 +2,7 @@ # -*- encoding: utf-8; py-indent-offset: 4 -*- # Copyright: (c) 2023, Max Sickora & -# Stefan Mühling & +# Stefan Mühling # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import absolute_import, division, print_function @@ -25,22 +25,25 @@ extends_documentation_fragment: [checkmk.general.common] options: + help: + description: The help text for the tag group. + default: "" + type: str name: description: The name of the tag group to manage. required: true type: str aliases: ["id"] - title: - description: The title of the tag group. - default: "" - type: str - topic: - description: The topic of the tag group. - default: "" - type: str - help: - description: The help text for the tag group. - default: "" + repair: + description: + - Give permission to update or remove the tag on hosts using it automatically. + B(Use with caution!) + default: "False" + type: bool + state: + description: The desired state. + default: "present" + choices: ["present", "absent"] type: str tags: description: A list of the tag groups to be created. @@ -57,16 +60,13 @@ description: The title of the tag required: true type: str - repair: - description: - - Give permission to update or remove the tag on hosts using it automatically. - B(Use with caution!) - default: "False" - type: bool - state: - description: The desired state. - default: "present" - choices: ["present", "absent"] + title: + description: The title of the tag group. + default: "" + type: str + topic: + description: The topic of the tag group. + default: "" type: str author: From 1d18f91a510171cc8a8a92fd8467fa688353b818 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:45:46 -0500 Subject: [PATCH 31/37] Fix [FEED] typo in host_group.py #524 --- plugins/modules/host_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/host_group.py b/plugins/modules/host_group.py index 80a53e44b..4f0d01dbd 100644 --- a/plugins/modules/host_group.py +++ b/plugins/modules/host_group.py @@ -96,7 +96,7 @@ state: "present" # Delete a single host group. -- name: "Create a single host group." +- name: "Delete a single host group." checkmk.general.host_group: server_url: "http://my_server/" site: "my_site" From febeb00ff7ac63f69c9521c51600de635fac0443 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:53:25 -0500 Subject: [PATCH 32/37] Clean up tests. --- .../targets/tag_group/tasks/test.yml | 4 +- .../targets/tag_group/vars/main.yml | 49 ++++++++----------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/tests/integration/targets/tag_group/tasks/test.yml b/tests/integration/targets/tag_group/tasks/test.yml index 216f8d83d..31399c9bf 100644 --- a/tests/integration/targets/tag_group/tasks/test.yml +++ b/tests/integration/targets/tag_group/tasks/test.yml @@ -61,8 +61,8 @@ automation_secret: "{{ checkmk_var_automation_secret }}" name: "repairtest" attributes: - tag_Datacenter: "Datacenter 1" - tag_Supporter: "Nobody" + tag_Datacenter: "datacenter_1" + tag_Supporter: "nobody" state: "present" - name: "{{ outer_item.version }} - {{ outer_item.edition | upper }} - Update tag_group without repair. (Should fail)" diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index 1248f8280..2b511d356 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -38,28 +38,26 @@ checkmk_taggroups_create: topic: Tags help: "something useful" tags: - - id: No_Datacenter + - id: datacenter_none title: No Datacenter - - id: Datacenter 1 + - id: datacenter_1 title: Datacenter 1 - - id: Datacenter 2 + - id: datacenter_2 title: Datacenter 2 - - id: Datacenter US - title: Datacenter US - - id: Datacenter ASIA - title: Datacenter ASIA + - id: datacenter_3 + title: Datacenter 3 - name: Supporter title: Supporter topic: Tags help: "Who to blame" tags: - - id: Nobody + - id: nobody title: Nobody - - id: RoyTrenneman + - id: roytrenneman title: Roy Trenneman - - id: MauriceMoss + - id: mauricemoss title: Maurice Moss - - id: JenBarber + - id: jenbarber title: Jen Barber checkmk_taggroups_update: @@ -67,38 +65,31 @@ checkmk_taggroups_update: title: Datacenter topic: Tags help: "something even more useful" - repair: True + repair: true tags: - - id: No_Datacenter + - id: datacenter_none title: No Datacenter - - id: Datacenter 1000 + - id: datacenter_1000 title: Datacenter 1000 - - id: Datacenter 2 + - id: datacenter_2 title: Datacenter 2 - - id: Datacenter 3 + - id: datacenter_3 title: Datacenter 3 - - id: Datacenter US - title: Datacenter US - - id: Datacenter ASIA - title: Datacenter ASIA - - id: Datacenter AFRICA - title: Datacenter AFRICA - name: Supporter title: Supporter topic: Tags help: "Who to blame" - repair: True + repair: true tags: - - id: Somebody + - id: somebody title: Somebody - - id: RoyTrenneman + - id: roytrenneman title: Roy Trenneman - - id: MauriceMoss + - id: mauricemoss title: Maurice Moss - - id: JenBarber + - id: jenbarber title: Jen Barber - checkmk_taggroups_delete: - name: Supporter - repair: True + repair: true From 6b5cc0b999bf67d8dec03806d60689bc68dce676 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 12 Jan 2024 17:57:31 -0500 Subject: [PATCH 33/37] Make option `repair` a real boolean. --- plugins/modules/tag_group.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/modules/tag_group.py b/plugins/modules/tag_group.py index 6be369833..054439fa1 100644 --- a/plugins/modules/tag_group.py +++ b/plugins/modules/tag_group.py @@ -38,7 +38,7 @@ description: - Give permission to update or remove the tag on hosts using it automatically. B(Use with caution!) - default: "False" + default: False type: bool state: description: The desired state. @@ -304,7 +304,7 @@ def run_module(): title=dict(type="str", required=True), ), ), - repair=dict(type="bool", default="False"), + repair=dict(type="bool", default=False), state=dict(type="str", default="present", choices=["present", "absent"]), ) From 617cbd0015dff112087a427866a2a4d6d4549dcc Mon Sep 17 00:00:00 2001 From: Max-checkmk <127388954+Max-checkmk@users.noreply.github.com> Date: Mon, 15 Jan 2024 08:43:24 +0100 Subject: [PATCH 34/37] Update main.yml --- tests/integration/targets/user/vars/main.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index fcee805fd..e2654479e 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -18,11 +18,8 @@ checkmk_var_automation_user: "cmkadmin" checkmk_var_automation_secret: "d7589df1" download_url: "https://download.checkmk.com/checkmk/{{ item.version }}/check-mk-{{ checkmk_server_edition_mapping[item.edition] }}-{{ item.version }}_0.{{ ansible_distribution_release }}_amd64.deb" # noqa yaml[line-length] -#download_user: "d-gh-ansible-dl" -#download_pass: "{{ lookup('ansible.builtin.file', '/root/ansible_collections/checkmk/general/tests/integration/files/.dl-secret', errors='ignore') | default(omit) }}" # noqa yaml[line-length] - -download_user: "d-intern" -download_pass: "77TbjY23" +download_user: "d-gh-ansible-dl" +download_pass: "{{ lookup('ansible.builtin.file', '/root/ansible_collections/checkmk/general/tests/integration/files/.dl-secret', errors='ignore') | default(omit) }}" # noqa yaml[line-length] # Due to inconsistent naming of editions, we normalize them here for convenience checkmk_server_edition_mapping: @@ -208,4 +205,4 @@ checkmk_var_users_edit: roles: - admin - name: cmkadmin - show_mode: "enforce_show_more" \ No newline at end of file + show_mode: "enforce_show_more" From 62250d0e4665e1f75a77c04512a274dc31292d26 Mon Sep 17 00:00:00 2001 From: mueller-ma Date: Tue, 16 Jan 2024 15:13:47 +0100 Subject: [PATCH 35/37] Don't become in checkmk_agent_auto_activate Root isn't required for this step. --- roles/agent/handlers/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/agent/handlers/main.yml b/roles/agent/handlers/main.yml index 0cd1f3246..2d708a577 100644 --- a/roles/agent/handlers/main.yml +++ b/roles/agent/handlers/main.yml @@ -8,6 +8,7 @@ automation_secret: "{{ checkmk_agent_auth }}" force_foreign_changes: "{{ checkmk_agent_force_foreign_changes }}" validate_certs: "{{ checkmk_agent_server_validate_certs }}" + become: false delegate_to: "{{ checkmk_agent_delegate_api_calls }}" run_once: true # noqa run-once[task] when: checkmk_agent_auto_activate | bool From 185460c2c28e01126c4f8bc6bce0cd8c56502636 Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 19 Jan 2024 13:36:07 -0500 Subject: [PATCH 36/37] Bump Checkmk and collection versions. --- SUPPORT.md | 1 + galaxy.yml | 2 +- roles/agent/README.md | 2 +- roles/agent/defaults/main.yml | 2 +- roles/agent/molecule/2.2.0/group_vars/all.yml | 2 +- roles/server/README.md | 2 +- roles/server/defaults/main.yml | 2 +- roles/server/molecule/2.2.0/group_vars/all.yml | 2 +- scripts/release.sh | 2 +- tests/integration/targets/activation/vars/main.yml | 4 ++-- tests/integration/targets/bakery/vars/main.yml | 2 +- tests/integration/targets/contact_group/vars/main.yml | 4 ++-- tests/integration/targets/discovery/vars/main.yml | 4 ++-- tests/integration/targets/downtime/vars/main.yml | 4 ++-- tests/integration/targets/folder/vars/main.yml | 4 ++-- tests/integration/targets/host/vars/main.yml | 4 ++-- tests/integration/targets/host_group/vars/main.yml | 6 +++--- tests/integration/targets/lookup_bakery/vars/main.yml | 2 +- tests/integration/targets/lookup_folder/vars/main.yml | 4 ++-- tests/integration/targets/lookup_folders/vars/main.yml | 4 ++-- tests/integration/targets/lookup_host/vars/main.yml | 4 ++-- tests/integration/targets/lookup_hosts/vars/main.yml | 4 ++-- tests/integration/targets/lookup_rules/vars/main.yml | 4 ++-- tests/integration/targets/lookup_rulesets/vars/main.yml | 4 ++-- tests/integration/targets/lookup_version/vars/main.yml | 4 ++-- tests/integration/targets/password/vars/main.yml | 6 +++--- tests/integration/targets/rule/vars/main.yml | 4 ++-- tests/integration/targets/service_group/vars/main.yml | 6 +++--- tests/integration/targets/tag_group/vars/main.yml | 6 +++--- tests/integration/targets/timeperiod/vars/main.yml | 4 ++-- tests/integration/targets/user/vars/main.yml | 6 +++--- 31 files changed, 56 insertions(+), 55 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index 588a1d717..80ebb253a 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -48,3 +48,4 @@ Collection Version | Checkmk Versions | Ansible Versions | Remarks 4.0.0 | 2.0.0p39, 2.1.0p36, 2.2.0p16 | 2.14, 2.15, 2.16 | Breaking changes to the following roles: `agent`, `server`. 4.0.1 | 2.0.0p39, 2.1.0p36, 2.2.0p16 | 2.14, 2.15, 2.16 | None 4.1.0 | 2.0.0p39, 2.1.0p37, 2.2.0p17 | 2.14, 2.15, 2.16 | None +4.2.0 | 2.0.0p39, 2.1.0p38, 2.2.0p19 | 2.14, 2.15, 2.16 | None diff --git a/galaxy.yml b/galaxy.yml index be53ad0d4..8e1ad3332 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -10,7 +10,7 @@ name: general # The version of the collection. Must be compatible with semantic versioning -version: 4.1.0 +version: 4.2.0 # The path to the Markdown (.md) readme file. This path is relative to the root of the collection readme: README.md diff --git a/roles/agent/README.md b/roles/agent/README.md index fd472f2e2..cbd697aec 100644 --- a/roles/agent/README.md +++ b/roles/agent/README.md @@ -13,7 +13,7 @@ It can be installed as easy as running: ## Role Variables - checkmk_agent_version: "2.2.0p18" + checkmk_agent_version: "2.2.0p19" The Checkmk version of the site your agents will talk to. diff --git a/roles/agent/defaults/main.yml b/roles/agent/defaults/main.yml index 9abd2eed6..134a878e6 100644 --- a/roles/agent/defaults/main.yml +++ b/roles/agent/defaults/main.yml @@ -1,5 +1,5 @@ --- -checkmk_agent_version: "2.2.0p18" +checkmk_agent_version: "2.2.0p19" checkmk_agent_edition: cre checkmk_agent_server_protocol: http checkmk_agent_server: localhost diff --git a/roles/agent/molecule/2.2.0/group_vars/all.yml b/roles/agent/molecule/2.2.0/group_vars/all.yml index 802d077e7..fe4bdf2f3 100644 --- a/roles/agent/molecule/2.2.0/group_vars/all.yml +++ b/roles/agent/molecule/2.2.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.2.0p18" +checkmk_var_version: "2.2.0p19" checkmk_var_edition: "cre" checkmk_var_checkmk_site: "my_site" checkmk_var_automation_user: "cmkadmin" diff --git a/roles/server/README.md b/roles/server/README.md index b3847433c..40b4e195e 100644 --- a/roles/server/README.md +++ b/roles/server/README.md @@ -25,7 +25,7 @@ To learn about the distributions used in automated tests, inspect the correspond ## Role Variables - checkmk_server_version: "2.2.0p18" + checkmk_server_version: "2.2.0p19" The global Checkmk version. This is used for installing Checkmk. To manage sites and their version, see `checkmk_server_sites`. diff --git a/roles/server/defaults/main.yml b/roles/server/defaults/main.yml index 1a0512351..5d965d8e9 100644 --- a/roles/server/defaults/main.yml +++ b/roles/server/defaults/main.yml @@ -24,7 +24,7 @@ checkmk_server_server_stable_os: - Ubuntu-20 - Ubuntu-22 -checkmk_server_version: "2.2.0p18" +checkmk_server_version: "2.2.0p19" checkmk_server_edition: cre checkmk_server_verify_setup: 'true' diff --git a/roles/server/molecule/2.2.0/group_vars/all.yml b/roles/server/molecule/2.2.0/group_vars/all.yml index c811ad385..9b04ff2e5 100644 --- a/roles/server/molecule/2.2.0/group_vars/all.yml +++ b/roles/server/molecule/2.2.0/group_vars/all.yml @@ -1,6 +1,6 @@ --- # General -checkmk_var_version: "2.2.0p18" +checkmk_var_version: "2.2.0p19" checkmk_var_edition: "cre" checkmk_server_verify_setup: 'true' checkmk_var_server_url: "http://127.0.0.1/" diff --git a/scripts/release.sh b/scripts/release.sh index feea1d2a1..3c0cd27f1 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -17,7 +17,7 @@ collection_dir="${script_dir%/*}" # Update these as necessary: checkmk_ancient="2.0.0p39" checkmk_oldstable="2.1.0p38" -checkmk_stable="2.2.0p18" +checkmk_stable="2.2.0p19" while getopts 's:t:' OPTION; do case "$OPTION" in diff --git a/tests/integration/targets/activation/vars/main.yml b/tests/integration/targets/activation/vars/main.yml index 758ebb44f..0bba852c8 100644 --- a/tests/integration/targets/activation/vars/main.yml +++ b/tests/integration/targets/activation/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/bakery/vars/main.yml b/tests/integration/targets/bakery/vars/main.yml index b7d951e3c..8b44f506d 100644 --- a/tests/integration/targets/bakery/vars/main.yml +++ b/tests/integration/targets/bakery/vars/main.yml @@ -1,6 +1,6 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/contact_group/vars/main.yml b/tests/integration/targets/contact_group/vars/main.yml index a8e644207..6bf1e7061 100644 --- a/tests/integration/targets/contact_group/vars/main.yml +++ b/tests/integration/targets/contact_group/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/discovery/vars/main.yml b/tests/integration/targets/discovery/vars/main.yml index 90ec95bef..566293e15 100644 --- a/tests/integration/targets/discovery/vars/main.yml +++ b/tests/integration/targets/discovery/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/downtime/vars/main.yml b/tests/integration/targets/downtime/vars/main.yml index 758ebb44f..0bba852c8 100644 --- a/tests/integration/targets/downtime/vars/main.yml +++ b/tests/integration/targets/downtime/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/folder/vars/main.yml b/tests/integration/targets/folder/vars/main.yml index 85890bba9..14226946b 100644 --- a/tests/integration/targets/folder/vars/main.yml +++ b/tests/integration/targets/folder/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/host/vars/main.yml b/tests/integration/targets/host/vars/main.yml index ffd0c707e..49653fb8e 100644 --- a/tests/integration/targets/host/vars/main.yml +++ b/tests/integration/targets/host/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/host_group/vars/main.yml b/tests/integration/targets/host_group/vars/main.yml index 5c1f5d729..d971d1a67 100644 --- a/tests/integration/targets/host_group/vars/main.yml +++ b/tests/integration/targets/host_group/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cme" site: "stable_cme" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_bakery/vars/main.yml b/tests/integration/targets/lookup_bakery/vars/main.yml index 4a4d6fb8e..5b64785c8 100644 --- a/tests/integration/targets/lookup_bakery/vars/main.yml +++ b/tests/integration/targets/lookup_bakery/vars/main.yml @@ -1,6 +1,6 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_folder/vars/main.yml b/tests/integration/targets/lookup_folder/vars/main.yml index b1ce307da..73da1614d 100644 --- a/tests/integration/targets/lookup_folder/vars/main.yml +++ b/tests/integration/targets/lookup_folder/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_folders/vars/main.yml b/tests/integration/targets/lookup_folders/vars/main.yml index e90e6f5fa..906ef2df7 100644 --- a/tests/integration/targets/lookup_folders/vars/main.yml +++ b/tests/integration/targets/lookup_folders/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_host/vars/main.yml b/tests/integration/targets/lookup_host/vars/main.yml index c18aee29e..e4a446da7 100644 --- a/tests/integration/targets/lookup_host/vars/main.yml +++ b/tests/integration/targets/lookup_host/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_hosts/vars/main.yml b/tests/integration/targets/lookup_hosts/vars/main.yml index 27743bace..dc8f757b3 100644 --- a/tests/integration/targets/lookup_hosts/vars/main.yml +++ b/tests/integration/targets/lookup_hosts/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_rules/vars/main.yml b/tests/integration/targets/lookup_rules/vars/main.yml index 407a25e9a..e822a4228 100644 --- a/tests/integration/targets/lookup_rules/vars/main.yml +++ b/tests/integration/targets/lookup_rules/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_rulesets/vars/main.yml b/tests/integration/targets/lookup_rulesets/vars/main.yml index e168cee57..09c78e78e 100644 --- a/tests/integration/targets/lookup_rulesets/vars/main.yml +++ b/tests/integration/targets/lookup_rulesets/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/lookup_version/vars/main.yml b/tests/integration/targets/lookup_version/vars/main.yml index 1c163cd70..d8b5c79ca 100644 --- a/tests/integration/targets/lookup_version/vars/main.yml +++ b/tests/integration/targets/lookup_version/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/password/vars/main.yml b/tests/integration/targets/password/vars/main.yml index 800268752..b16366822 100644 --- a/tests/integration/targets/password/vars/main.yml +++ b/tests/integration/targets/password/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cme" site: "stable_cme" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/rule/vars/main.yml b/tests/integration/targets/rule/vars/main.yml index 98581471a..801a18c37 100644 --- a/tests/integration/targets/rule/vars/main.yml +++ b/tests/integration/targets/rule/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/service_group/vars/main.yml b/tests/integration/targets/service_group/vars/main.yml index c3ad49ae8..55d6e4000 100644 --- a/tests/integration/targets/service_group/vars/main.yml +++ b/tests/integration/targets/service_group/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cme" site: "stable_cme" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/tag_group/vars/main.yml b/tests/integration/targets/tag_group/vars/main.yml index 2b511d356..318ee07e8 100644 --- a/tests/integration/targets/tag_group/vars/main.yml +++ b/tests/integration/targets/tag_group/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cme" site: "stable_cme" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/timeperiod/vars/main.yml b/tests/integration/targets/timeperiod/vars/main.yml index ee8415697..76ea4c611 100644 --- a/tests/integration/targets/timeperiod/vars/main.yml +++ b/tests/integration/targets/timeperiod/vars/main.yml @@ -1,9 +1,9 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" diff --git a/tests/integration/targets/user/vars/main.yml b/tests/integration/targets/user/vars/main.yml index 261341782..5efd5ef49 100644 --- a/tests/integration/targets/user/vars/main.yml +++ b/tests/integration/targets/user/vars/main.yml @@ -1,12 +1,12 @@ --- test_sites: - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cme" site: "stable_cme" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cre" site: "stable_raw" - - version: "2.2.0p18" + - version: "2.2.0p19" edition: "cee" site: "stable_ent" - version: "2.1.0p38" From f3675c6bd483bea4dcef3cae8148ff454b34a51e Mon Sep 17 00:00:00 2001 From: Robin Gierse Date: Fri, 19 Jan 2024 13:55:19 -0500 Subject: [PATCH 37/37] Add changelogs. --- changelogs/fragments/release_summary.yml | 1 + changelogs/fragments/roles.yml | 5 +++++ changelogs/fragments/tag_group.yml | 5 +++++ changelogs/fragments/user.yml | 5 +++++ 4 files changed, 16 insertions(+) create mode 100644 changelogs/fragments/release_summary.yml create mode 100644 changelogs/fragments/roles.yml create mode 100644 changelogs/fragments/tag_group.yml create mode 100644 changelogs/fragments/user.yml diff --git a/changelogs/fragments/release_summary.yml b/changelogs/fragments/release_summary.yml new file mode 100644 index 000000000..5efd79d4d --- /dev/null +++ b/changelogs/fragments/release_summary.yml @@ -0,0 +1 @@ +release_summary: "Happy New Year!" diff --git a/changelogs/fragments/roles.yml b/changelogs/fragments/roles.yml new file mode 100644 index 000000000..b3546f5e3 --- /dev/null +++ b/changelogs/fragments/roles.yml @@ -0,0 +1,5 @@ +bugfixes: + - Agent role - Fix `become` in handler, which could cause errors on delegation. + +minor_changes: + - Server role - Improve role speed by skipping downloads. diff --git a/changelogs/fragments/tag_group.yml b/changelogs/fragments/tag_group.yml new file mode 100644 index 000000000..947e779e1 --- /dev/null +++ b/changelogs/fragments/tag_group.yml @@ -0,0 +1,5 @@ +major_changes: + - Tag_group module - Rewrite module and migrate to new collection API. + +minor_changes: + - Tag_group module - Enable `help` and `repair` options. diff --git a/changelogs/fragments/user.yml b/changelogs/fragments/user.yml new file mode 100644 index 000000000..7e7734ef1 --- /dev/null +++ b/changelogs/fragments/user.yml @@ -0,0 +1,5 @@ +major_changes: + - User module - Rewrite module and migrate to new collection API. + +minor_changes: + - User module - Enable several interface options.