From 44b0e61aa3e5d2cbeb901f58e2f9ebde2872a35a Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 16 May 2023 06:09:33 +0000 Subject: [PATCH] import rhel-system-roles-1.21.1-1.el8_8 --- .gitignore | 28 + .rhel-system-roles.metadata | 28 + SOURCES/CHANGELOG.md | 609 +++++++++++ SOURCES/CHANGELOG.rst | 1 + SOURCES/collection_readme.sh | 14 + SOURCES/extrasources.inc | 10 + SOURCES/redhat_subscription.py | 1187 +++++++++++++++++++++ SPECS/rhel-system-roles.spec | 1821 ++++++++++++++++++++++++++++++++ 8 files changed, 3698 insertions(+) create mode 100644 .gitignore create mode 100644 .rhel-system-roles.metadata create mode 100644 SOURCES/CHANGELOG.md create mode 100644 SOURCES/CHANGELOG.rst create mode 100755 SOURCES/collection_readme.sh create mode 100644 SOURCES/extrasources.inc create mode 100644 SOURCES/redhat_subscription.py create mode 100644 SPECS/rhel-system-roles.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1386e9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +SOURCES/ad_integration-1.0.2.tar.gz +SOURCES/ansible-posix-1.5.1.tar.gz +SOURCES/ansible-sshd-v0.18.1.tar.gz +SOURCES/auto-maintenance-d6a8e0167e9ed8d089093b7ead1e298241b534e1.tar.gz +SOURCES/certificate-1.1.9.tar.gz +SOURCES/cockpit-1.4.3.tar.gz +SOURCES/community-general-6.4.0.tar.gz +SOURCES/containers-podman-1.10.1.tar.gz +SOURCES/crypto_policies-1.2.7.tar.gz +SOURCES/firewall-1.4.2.tar.gz +SOURCES/ha_cluster-1.8.7.tar.gz +SOURCES/journald-1.0.0.tar.gz +SOURCES/kdump-1.2.6.tar.gz +SOURCES/kernel_settings-1.1.11.tar.gz +SOURCES/logging-1.11.5.tar.gz +SOURCES/metrics-1.8.1.tar.gz +SOURCES/nbde_client-1.2.10.tar.gz +SOURCES/nbde_server-1.3.3.tar.gz +SOURCES/network-1.11.2.tar.gz +SOURCES/podman-1.1.2.tar.gz +SOURCES/postfix-1.3.3.tar.gz +SOURCES/rhc-1.1.1.tar.gz +SOURCES/selinux-1.5.6.tar.gz +SOURCES/ssh-1.1.12.tar.gz +SOURCES/storage-1.9.6.tar.gz +SOURCES/timesync-1.7.2.tar.gz +SOURCES/tlog-1.2.11.tar.gz +SOURCES/vpn-1.5.3.tar.gz diff --git a/.rhel-system-roles.metadata b/.rhel-system-roles.metadata new file mode 100644 index 0000000..ed4a059 --- /dev/null +++ b/.rhel-system-roles.metadata @@ -0,0 +1,28 @@ +c531e83edf95f96389a6c1c10ea80ccd2b42cc75 SOURCES/ad_integration-1.0.2.tar.gz +f36cb7b1662ecda55c27f5bc15e0a22a1f11a361 SOURCES/ansible-posix-1.5.1.tar.gz +71c988d6ad9b916727cd93b8e2a2154183f5035a SOURCES/ansible-sshd-v0.18.1.tar.gz +a59d5ba01d5e536e800bc847528f16c16b961375 SOURCES/auto-maintenance-d6a8e0167e9ed8d089093b7ead1e298241b534e1.tar.gz +0e3826af628625ef7b16e3f57b6156128fd982c0 SOURCES/certificate-1.1.9.tar.gz +05148744a2d69d469dc3c678bb1a9fb9747dea26 SOURCES/cockpit-1.4.3.tar.gz +687a4e36e9d8f73a8a44a448da1c205eb0ce5f1c SOURCES/community-general-6.4.0.tar.gz +ccb070885fd455bb6e7f2b8ca050d40d30609fec SOURCES/containers-podman-1.10.1.tar.gz +47e3a2db8790c98fd5c09ab1887318b6ba56ce49 SOURCES/crypto_policies-1.2.7.tar.gz +1c414411b4960040eebcef2ddd528eea0b47f05f SOURCES/firewall-1.4.2.tar.gz +7cfd7d6fa2164fcb757a316e123cbe048f8f0ac9 SOURCES/ha_cluster-1.8.7.tar.gz +97edc58624de8ccb3f4b628a48811094a0dc1513 SOURCES/journald-1.0.0.tar.gz +439ea600c242c914c90933f287f3caf8c7869c12 SOURCES/kdump-1.2.6.tar.gz +49f4bc8f273339cde0cdecccffa7b902359b2601 SOURCES/kernel_settings-1.1.11.tar.gz +7fe83b26f954e55a282a4d5398e3064a7783a83a SOURCES/logging-1.11.5.tar.gz +e217af697b4e3205177360726f579d01b145be77 SOURCES/metrics-1.8.1.tar.gz +cf27267d3d54f1537ddda89f6d4db7abbe55b357 SOURCES/nbde_client-1.2.10.tar.gz +274986399c55eb35f281173621e75eb2d7ae00e6 SOURCES/nbde_server-1.3.3.tar.gz +857b1c3ea5a1a48dc964fb5c139861ba01c9e732 SOURCES/network-1.11.2.tar.gz +fe48a68775bcb87daf3f62ab58a1998ffaa4e6be SOURCES/podman-1.1.2.tar.gz +9244301089661fecca31dfee431b32d4876063be SOURCES/postfix-1.3.3.tar.gz +d96fbd17bc40b40787cc77be61499ea1b15e07fd SOURCES/rhc-1.1.1.tar.gz +bac983e0dcc5041a4c7d4d25849ed31aaf462df7 SOURCES/selinux-1.5.6.tar.gz +1bb35bc413249ce3209e471687afd60e0e25dddb SOURCES/ssh-1.1.12.tar.gz +0eea1b45136cb807740fa12435b02eccdb35a7ac SOURCES/storage-1.9.6.tar.gz +fefc5b4bd9635bb8fe70a9af9fc178cb5d3e8193 SOURCES/timesync-1.7.2.tar.gz +07c42ba749c110a87469a5c477579582c4d0c538 SOURCES/tlog-1.2.11.tar.gz +5b5ee7283092a16e9ec1aba47ee651274f784416 SOURCES/vpn-1.5.3.tar.gz diff --git a/SOURCES/CHANGELOG.md b/SOURCES/CHANGELOG.md new file mode 100644 index 0000000..1974631 --- /dev/null +++ b/SOURCES/CHANGELOG.md @@ -0,0 +1,609 @@ +Changelog +========= + +[1.21.1] - 2023-03-16 +---------------------------- + +### New Features + +- [rhc - New Role - Red Hat subscription management, insights management](https://bugzilla.redhat.com/show_bug.cgi?id=2144877) + +### Bug Fixes + +- none + +[1.21.0] - 2023-02-20 +---------------------------- + +### New Features + +- [ad_integration - [RFE] new role to support AD integration, join to AD domain](https://bugilla.redhat.com/show_bug.cgi?id=2144876) +- [cockpit - [RFE] convert cockpit role to use firewall, selinux role, and certificate role](https://bugzilla.redhat.com/show_bug.cgi?id=2137667) +- [ha_cluster - Allow quorum device configuration](https://bugzilla.redhat.com/show_bug.cgi?id=2143814) +- [ha_cluster - [RFE] convert ha_cluster role to use firewall, selinux and certificate role](https://bugzilla.redhat.com/show_bug.cgi?id=2130019) +- [journald - New role - journald - manage systemd-journald](https://bugzilla.redhat.com/show_bug.cgi?id=2165176) +- [logging - [RFE] convert logging role to use firewall, selinux role, and certificate role](https://bugzilla.redhat.com/show_bug.cgi?id=2130362) +- [metrics - [RFE] convert metrics role to use firewall and selinux role](https://bugzilla.redhat.com/show_bug.cgi?id=2133532) +- [nbde_server - [RFE] convert nbde_server role to use firewall and selinux role](https://bugzilla.redhat.com/show_bug.cgi?id=2133931) +- [network - Support cloned MAC address](https://bugzilla.redhat.com/show_bug.cgi?id=2143458) +- [network - [RFE] Support setting the metric of the default route for initscripts provider](https://bugzilla.redhat.com/show_bug.cgi?id=2134201) +- [network - [RFE] Support the DNS priority](https://bugzilla.redhat.com/show_bug.cgi?id=2133856) +- [network - Support looking up named route table in routing rule](https://bugzilla.redhat.com/show_bug.cgi?id=2129620) +- [podman - [RFE] role for managing podman containers and systemd](https://bugzilla.redhat.com/show_bug.cgi?id=2066864) +- [postfix - [RFE] convert postfix role to use firewall and selinux role](https://bugzilla.redhat.com/show_bug.cgi?id=2130332) +- [selinux - add support for the 'local' parameter](https://bugzilla.redhat.com/show_bug.cgi?id=2143385) +- [vpn - Add parameters shared_key_content, ike, esp, type, leftid, rightid](https://bugzilla.redhat.com/show_bug.cgi?id=2119600) +- [vpn - [RFE] convert vpn role to use firewall and selinux role](https://bugzilla.redhat.com/show_bug.cgi?id=2130345) + +### Bug Fixes + +- [ha_cluster - Fix stonith watchdog timeout](https://bugzilla.redhat.com/show_bug.cgi?id=2167941) +- [ha_cluster - Allow enabled SBD on disabled cluster](https://bugzilla.redhat.com/show_bug.cgi?id=2153081) +- [ha_cluster - use no_log in tasks looping over pot. secret parameters](https://bugzilla.redhat.com/show_bug.cgi?id=2127497) +- [nbde_client - nbde_client_clevis fails with a traceback and prints sensitive data](https://bugzilla.redhat.com/show_bug.cgi?id=2159972) +- [nbde_client - must handle clevis-luks-askpass and clevis-luks-askpass@ systemd unit names](https://bugzilla.redhat.com/show_bug.cgi?id=2126960) +- [network - should route traffic via correct bond](https://bugzilla.redhat.com/show_bug.cgi?id=2168733) +- [selinux - managing modules is not idempotent](https://bugzilla.redhat.com/show_bug.cgi?id=2164879) +- [sshd,ssh,timesync - Unexpected templating type error - expected str instance, int found](https://bugzilla.redhat.com/show_bug.cgi?id=2143401) +- [tlog - Unconditionally enable the files provider](https://bugzilla.redhat.com/show_bug.cgi?id=2153080) + +[1.20.0] - 2022-08-09 +---------------------------- + +### New Features + +- [cockpit - Add customization of port](https://bugzilla.redhat.com/show_bug.cgi?id=2115159) +- [firewall - RFE: firewall-system-role: add ability to add interface to zone by PCI device ID](https://bugzilla.redhat.com/show_bug.cgi?id=2100939) +- [firewall - support for firewall_config - gather firewall facts](https://bugzilla.redhat.com/show_bug.cgi?id=2115160) +- [logging - [RFE] Support startmsg.regex and endmsg.regex in the files inputs](https://bugzilla.redhat.com/show_bug.cgi?id=2112143) +- [selinux - Added setting of seuser and selevel for completeness](https://bugzilla.redhat.com/show_bug.cgi?id=2115162) + +### Bug Fixes + +- [nbde_client - Sets proper spacing for parameter rd.neednet=1](https://bugzilla.redhat.com/show_bug.cgi?id=2115161) +- [network - fix IPRouteUtils.get_route_tables_mapping() to accept any whitespace sequence](https://bugzilla.redhat.com/show_bug.cgi?id=2115884) +- [ssh sshd - ssh, sshd: RSAMinSize parameter definition is missing](https://bugzilla.redhat.com/show_bug.cgi?id=2109997) +- [storage - [RHEL8] [WARNING]: The loop variable 'storage_test_volume' is already in use. You should set the `loop_var` value in the `loop_control` option for the task to something else to avoid variable collisions and unexpected behavior.](https://bugzilla.redhat.com/show_bug.cgi?id=2082391) + +[1.19.3] - 2022-07-01 +---------------------------- + +### New Features + +- [firewall - support add/modify/delete services](https://bugzilla.redhat.com/show_bug.cgi?id=2100297) +- [network - [RFE] [network] Support managing the network through nmstate schema](https://bugzilla.redhat.com/show_bug.cgi?id=2100979) +- [storage - support for adding/removing disks to/from storage pools](https://bugzilla.redhat.com/show_bug.cgi?id=2066880) +- [storage - support for attaching cache volumes to existing volumes](https://bugzilla.redhat.com/show_bug.cgi?id=2066881) + +### Bug Fixes + +- [firewall - forward_port should accept list of string or list of dict](https://bugzilla.redhat.com/show_bug.cgi?id=2101607) +- [metrics - document minimum supported redis version required by rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=2100285) +- [metrics - restart pmie, pmlogger if changed, do not wait for handler](https://bugzilla.redhat.com/show_bug.cgi?id=2100298) + +[1.19.2] - 2022-06-15 +---------------------------- + +### New Features + +- [sshd - system role should be able to optionally manage /etc/ssh/sshd_config on RHEL 9](https://bugzilla.redhat.com/show_bug.cgi?id=2086935) + +### Bug Fixes + +- none + +[1.19.1] - 2022-06-13 +---------------------------- + +### New Features + +- [storage - support for creating and managing LVM thin pools/LVs](https://bugzilla.redhat.com/show_bug.cgi?id=2066876) +- [All roles should support running with gather_facts: false](https://bugzilla.redhat.com/show_bug.cgi?id=2079008) + +### Bug Fixes + +- none + +[1.19.0] - 2022-06-06 +---------------------------- + +### New Features + +- [storage - support for creating and managing LVM thin pools/LVs](https://bugzilla.redhat.com/show_bug.cgi?id=2066876) +- [firewall - state no longer required for masquerade and ICMP block inversion](https://bugzilla.redhat.com/show_bug.cgi?id=2093437) + +### Bug Fixes + +- [storage - role raid_level "striped" is not supported](https://bugzilla.redhat.com/show_bug.cgi?id=2083426) + +[1.18.0] - 2022-05-26 +---------------------------- + +### New Features + +- [firewall - [Improvement] Allow System Role to reset to default Firewalld Settings](https://bugzilla.redhat.com/show_bug.cgi?id=2043009) +- [metrics - [RFE] add an option to the metrics role to enable postfix metric collection](https://bugzilla.redhat.com/show_bug.cgi?id=2079114) +- [network - Rework the infiniband support](https://bugzilla.redhat.com/show_bug.cgi?id=2086869) +- [sshd - system role should not assume that RHEL 9 /etc/ssh/sshd_config has "Include > /etc/ssh/sshd_config.d/*.conf"](https://bugzilla.redhat.com/show_bug.cgi?id=2086934) +- [sshd - system role should be able to optionally manage /etc/ssh/sshd_config on RHEL 9](https://bugzilla.redhat.com/show_bug.cgi?id=2086935) + +### Bug Fixes + +- [storage - role cannot set mount_options for volumes](https://bugzilla.redhat.com/show_bug.cgi?id=2083378) + +[1.17.0] - 2022-04-25 +---------------------------- + +### New Features + +- [All roles should support running with gather_facts: false](https://bugzilla.redhat.com/show_bug.cgi?id=2079008) +- [ha_cluster - support advanced corosync configuration](https://bugzilla.redhat.com/show_bug.cgi?id=2065339) +- [ha_cluster - support SBD fencing](https://bugzilla.redhat.com/show_bug.cgi?id=2066868) +- [ha_cluster - add support for configuring bundle resources](https://bugzilla.redhat.com/show_bug.cgi?id=2073518) +- [logging - Logging - RFE - support template, severity and facility options](https://bugzilla.redhat.com/show_bug.cgi?id=2075116) +- [metrics - consistently use ansible_managed in configuration files managed by role [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2065215) +- [metrics - [RFE] add an option to the metrics role to enable postfix metric collection](https://bugzilla.redhat.com/show_bug.cgi?id=2079114) +- [network - [RFE] Extend rhel-system-roles.network feature set to support routing rules](https://bugzilla.redhat.com/show_bug.cgi?id=1996731) +- [network - consistently use ansible_managed in configuration files managed by role [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2065670) +- [postfix - consistently use ansible_managed in configuration files managed by role [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2065216) +- [postfix - Postfix RHEL System Role should provide the ability to replace config and reset configuration back to default [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2065218) + +### Bug Fixes + +- [firewall - Firewall system role Ansible deprecation warning related to "include"](https://bugzilla.redhat.com/show_bug.cgi?id=2078650) +- [kernel_settings - error configobj not found on RHEL 8.6 managed hosts [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2060378) +- [metrics - Metrics role, with "metrics_from_mssql" option does not configure /var/lib/pcp/pmdas/mssql/mssql.conf on first run [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2060377) +- [nbde_client - NBDE client system role does not support servers with static IP addresses [rhel-8.7.0]](https://bugzilla.redhat.com/show_bug.cgi?id=2071011) +- [network - bond: fix typo in supporting the infiniband ports in active-backup mode](https://bugzilla.redhat.com/show_bug.cgi?id=2064067) +- [sshd - FIPS mode detection in SSHD role is wrong](https://bugzilla.redhat.com/show_bug.cgi?id=2075338) +- [storage - RFE storage Less verbosity by default](https://bugzilla.redhat.com/show_bug.cgi?id=2056480) +- [tlog - Tlog role - Enabling session recording configuration does not work due to RHEL9 SSSD files provider default](https://bugzilla.redhat.com/show_bug.cgi?id=2072749) + +[1.16.3] - 2022-04-07 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [tlog - Tlog role - Enabling session recording configuration does not work due to RHEL9 SSSD files provider default](https://bugzilla.redhat.com/show_bug.cgi?id=2072749) + +[1.16.2] - 2022-04-06 +---------------------------- + +### New Features + +- [nbde_client - NBDE client system role does not support servers with static IP addresses](https://bugzilla.redhat.com/show_bug.cgi?id=1985022) + +### Bug Fixes + +- none + +[1.16.1] - 2022-03-29 +---------------------------- + +### New Features + +- [nbde_client - NBDE client system role does not support servers with static IP addresses](https://bugzilla.redhat.com/show_bug.cgi?id=1985022) + +### Bug Fixes + +- none + +[1.16.0] - 2022-03-22 +---------------------------- + +### New Features + +- [network - consistently use ansible_managed in configuration files managed by role](https://bugzilla.redhat.com/show_bug.cgi?id=2057656) +- [metrics - consistently use ansible_managed in configuration files managed by role](https://bugzilla.redhat.com/show_bug.cgi?id=2057645) +- [postfix - consistently use ansible_managed in configuration files managed by role](https://bugzilla.redhat.com/show_bug.cgi?id=2057661) +- [postfix - Postfix RHEL System Role should provide the ability to replace config and reset configuration back to default](https://bugzilla.redhat.com/show_bug.cgi?id=2044657) + +### Bug Fixes + +- [network - bond: fix typo in supporting the infiniband ports in active-backup mode](https://bugzilla.redhat.com/show_bug.cgi?id=2064388) + +[1.15.1] - 2022-03-03 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [kernel_settings - error configobj not found on RHEL 8.6 managed hosts](https://bugzilla.redhat.com/show_bug.cgi?id=2058772) +- [timesync - timesync: basic-smoke test failure in timesync/tests_ntp.yml](https://bugzilla.redhat.com/show_bug.cgi?id=2058645) + +[1.15.0] - 2022-03-01 +---------------------------- + +### New Features + +- [firewall - [RFE] - Firewall RHEL System Role should be able to set default zone](https://bugzilla.redhat.com/show_bug.cgi?id=2022458) + +### Bug Fixes + +- [metrics - Metrics role, with "metrics_from_mssql" option does not configure /var/lib/pcp/pmdas/mssql/mssql.conf on first run](https://bugzilla.redhat.com/show_bug.cgi?id=2058655) +- [firewall - ensure target changes take effect immediately](https://bugzilla.redhat.com/show_bug.cgi?id=2057172) + +[1.14.0] - 2022-02-14 +---------------------------- + +### New Features + +- [network - [RFE] Add more bonding options to rhel-system-roles.network](https://bugzilla.redhat.com/show_bug.cgi?id=2008931) +- [certificate - should consistently use ansible_managed in hook scripts](https://bugzilla.redhat.com/show_bug.cgi?id=2054364) +- [tlog - consistently use ansible_managed in configuration files managed by role](https://bugzilla.redhat.com/show_bug.cgi?id=2054363) +- [vpn - consistently use ansible_managed in configuration files managed by role](https://bugzilla.redhat.com/show_bug.cgi?id=2054365) + +### Bug Fixes + +- [ha_cluster - set permissions for haclient group](https://bugzilla.redhat.com/show_bug.cgi?id=2049747) + +[1.13.1] - 2022-02-08 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [vpn - vpn: template error while templating string: no filter named 'vpn_ipaddr'](https://bugzilla.redhat.com/show_bug.cgi?id=2050341) +- [kdump - kdump: Unable to start service kdump: Job for kdump.service failed because the control process exited with error code.](https://bugzilla.redhat.com/show_bug.cgi?id=2052105) + +[1.13.0] - 2022-02-01 +---------------------------- + +### New Features + +- [storage - RFE: Add support for RAID volumes (lvm-only)](https://bugzilla.redhat.com/show_bug.cgi?id=2016514) +- [storage - RFE: Add support for cached volumes (lvm-only)](https://bugzilla.redhat.com/show_bug.cgi?id=2016511) +- [nbde_client - NBDE client system role does not support servers with static IP addresses](https://bugzilla.redhat.com/show_bug.cgi?id=1985022) +- [ha_cluster - [RFE] ha_cluster - Support for creating resource constraints (Location, Ordering, etc.)](https://bugzilla.redhat.com/show_bug.cgi?id=2041635) +- [network - RFE: Support Routing Tables in static routes in Network Role](https://bugzilla.redhat.com/show_bug.cgi?id=2031521) + +### Bug Fixes + +- [metrics - role can't be re-run if the Grafana admin password has been changed](https://bugzilla.redhat.com/show_bug.cgi?id=1967321) +- [network - Failure to activate connection: nm-manager-error-quark: No suitable device found for this connection](https://bugzilla.redhat.com/show_bug.cgi?id=2034908) +- [network - Set DNS search setting only for enabled IP protocols](https://bugzilla.redhat.com/show_bug.cgi?id=2041627) + +[1.12.0] - 2022-01-27 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [logging - Logging role "logging_purge_confs" option not properly working](https://bugzilla.redhat.com/show_bug.cgi?id=2040812) +- [kernel_settings - role should use ansible_managed in its configuration file](https://bugzilla.redhat.com/show_bug.cgi?id=2047504) + +[1.11.0] - 2022-01-20 +---------------------------- + +### New Features + +- [Support ansible-core 2.11+](https://bugzilla.redhat.com/show_bug.cgi?id=2012316) +- [cockpit - Please include "cockpit" role](https://bugzilla.redhat.com/show_bug.cgi?id=2021661) +- [ssh - ssh/tests_all_options.yml: "assertion": "'StdinNull yes' in config.content | b64decode ", failure](https://bugzilla.redhat.com/show_bug.cgi?id=2029614) + +### Bug Fixes + +- [timesync - timesync: Failure related to missing ntp/ntpd package/service on RHEL-9 host](https://bugzilla.redhat.com/show_bug.cgi?id=2029463) +- [logging - role missing quotes for immark module interval value](https://bugzilla.redhat.com/show_bug.cgi?id=2021678) +- [kdump - kdump: support reboot required and reboot ok](https://bugzilla.redhat.com/show_bug.cgi?id=2029605) +- [sshd - should detect FIPS mode and handle tasks correctly in FIPS mode](https://bugzilla.redhat.com/show_bug.cgi?id=1979714) + +[1.10.0] - 2021-11-08 +---------------------------- + +### New Features + +- [cockpit - Please include "cockpit" role](https://bugzilla.redhat.com/show_bug.cgi?id=2021661) +- [firewall - Ansible Roles for RHEL Firewall](https://bugzilla.redhat.com/show_bug.cgi?id=1854988) +- [firewall - RFE: firewall-system-role: add ability to add-source](https://bugzilla.redhat.com/show_bug.cgi?id=1932678) +- [firewall - RFE: firewall-system-role: allow user defined zones](https://bugzilla.redhat.com/show_bug.cgi?id=1850768) +- [firewall - RFE: firewall-system-role: allow specifying the zone](https://bugzilla.redhat.com/show_bug.cgi?id=1850753) +- [Support ansible-core 2.11+](https://bugzilla.redhat.com/show_bug.cgi?id=2012316) +- [network - role: Allow to specify PCI address to configure profiles](https://bugzilla.redhat.com/show_bug.cgi?id=1695634) +- [network - [RFE] support wifi Enhanced Open (OWE)](https://bugzilla.redhat.com/show_bug.cgi?id=1993379) +- [network - [RFE] support WPA3 Simultaneous Authentication of Equals(SAE)](https://bugzilla.redhat.com/show_bug.cgi?id=1993311) +- [network - [Network] RFE: Support ignoring default gateway retrieved by DHCP/IPv6-RA](https://bugzilla.redhat.com/show_bug.cgi?id=1897565) +- [logging - [RFE] logging - Add user and password](https://bugzilla.redhat.com/show_bug.cgi?id=2010327) + +### Bug Fixes + +- [Replace `# {{ ansible_managed }}` with `{{ ansible_managed | comment }}`](https://bugzilla.redhat.com/show_bug.cgi?id=2006230) +- [logging - role missing quotes for immark module interval value](https://bugzilla.redhat.com/show_bug.cgi?id=2021678) +- [logging - Logging - Performance improvement](https://bugzilla.redhat.com/show_bug.cgi?id=2005727) +- [nbde_client - add regenerate-all to the dracut command](https://bugzilla.redhat.com/show_bug.cgi?id=2021682) +- [certificate - certificates: "group" option keeps certificates inaccessible to the group](https://bugzilla.redhat.com/show_bug.cgi?id=2021683) + +[1.7.3] - 2021-08-26 +---------------------------- + +### New Features + +- [storage - RFE: Request that VDO be added to the Ansible (redhat-system-roles)](https://bugzilla.redhat.com/show_bug.cgi?id=1978488) + +### Bug Fixes + +- none + +[1.7.2] - 2021-08-24 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [logging - Update the certificates copy tasks](https://bugzilla.redhat.com/show_bug.cgi?id=1996777) + +[1.7.1] - 2021-08-16 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [metrics - role: the bpftrace role does not properly configure bpftrace agent](https://bugzilla.redhat.com/show_bug.cgi?id=1994180) + +[1.7.0] - 2021-08-12 +---------------------------- + +### New Features + +- [drop support for Ansible 2.8](https://bugzilla.redhat.com/show_bug.cgi?id=1989197) + +### Bug Fixes + +- [sshd - sshd: failed to validate: error:Missing Match criteria for all Bad Match condition](https://bugzilla.redhat.com/show_bug.cgi?id=1991598) + +[1.6.6] - 2021-08-06 +---------------------------- + +### New Features + +- [logging - [RFE] logging - Add a support for list value to server_host in the elasticsearch output](https://bugzilla.redhat.com/show_bug.cgi?id=1986460) + +### Bug Fixes + +- none + +[1.6.2] - 2021-07-30 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [metrics - role: Grafana dashboard not working after metrics role run unless services manually restarted](https://bugzilla.redhat.com/show_bug.cgi?id=1984150) + +[1.6.0] - 2021-07-28 +---------------------------- + +### New Features + +- [storage - [RFE] storage: support volume sizes as a percentage of pool](https://bugzilla.redhat.com/show_bug.cgi?id=1984583) + +### Bug Fixes + +- none + +[1.5.0] - 2021-07-15 +---------------------------- + +### New Features + +- [ha_cluster - RFE: ha_cluster - add pacemaker cluster properties configuration](https://bugzilla.redhat.com/show_bug.cgi?id=1982913) + +### Bug Fixes + +- none + +[1.4.3] - 2021-07-15 +---------------------------- + +### New Features + +- [crypto_policies - rename 'policy modules' to 'subpolicies'](https://bugzilla.redhat.com/show_bug.cgi?id=1982896) + +### Bug Fixes + +- none + +[1.4.2] - 2021-07-15 +---------------------------- + +### New Features + +- [storage - storage: relabel doesn't support](https://bugzilla.redhat.com/show_bug.cgi?id=1876315) + +### Bug Fixes + +- none + +[1.4.1] - 2021-07-09 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [network - Re-running the network system role results in "changed: true" when nothing has actually changed](https://bugzilla.redhat.com/show_bug.cgi?id=1943384) + +[1.4.0] - 2021-07-08 +---------------------------- + +### New Features + +- [storage - RFE: Request that VDO be added to the Ansible (redhat-system-roles)](https://bugzilla.redhat.com/show_bug.cgi?id=1882475) + +### Bug Fixes + +- none + +[1.3.0] - 2021-06-23 +---------------------------- + +### New Features + +- [ha_cluster - RFE: add pacemaker resources configuration](https://bugzilla.redhat.com/show_bug.cgi?id=1963283) +- [network - [Network] RFE: Support ignoring default gateway retrieved by DHCP/IPv6-RA](https://bugzilla.redhat.com/show_bug.cgi?id=1897565) +- [storage - RFE: Request that VDO be added to the Ansible (redhat-system-roles)](https://bugzilla.redhat.com/show_bug.cgi?id=1882475) +- [sshd - RFE: sshd - support for appending a snippet to configuration file](https://bugzilla.redhat.com/show_bug.cgi?id=1970642) +- [timesync - RFE: timesync support for Network Time Security (NTS)](https://bugzilla.redhat.com/show_bug.cgi?id=1970664) + +### Bug Fixes + +- [postfix - Postfix RHEL system role README.md missing variables under the "Role Variables" section](https://bugzilla.redhat.com/show_bug.cgi?id=1961858) +- [postfix - the postfix role is not idempotent](https://bugzilla.redhat.com/show_bug.cgi?id=1960375) +- [selinux - task for semanage says Fedora in name but also runs on RHEL/CentOS 8](https://bugzilla.redhat.com/show_bug.cgi?id=1966681) +- [metrics - role task to enable logging for targeted hosts not working](https://bugzilla.redhat.com/show_bug.cgi?id=1967335) +- [sshd ssh - Unable to set sshd_hostkey_group and sshd_hostkey_mode](https://bugzilla.redhat.com/show_bug.cgi?id=1966711) + +[1.2.3] - 2021-06-17 +---------------------------- + +### New Features + +- [main.yml: Add EL 9 support for all roles](https://bugzilla.redhat.com/show_bug.cgi?id=1952887) + +### Bug Fixes + +- none + +[1.2.2] - 2021-06-15 +---------------------------- + +### New Features + +- [timesync - Add hybrid_e2e option to PTP domain](https://bugzilla.redhat.com/show_bug.cgi?id=1957849) + +### Bug Fixes + +- [Internal links in README.md are broken](https://bugzilla.redhat.com/show_bug.cgi?id=1962976) +- [ha_cluster - cannot read preshared key in binary format](https://bugzilla.redhat.com/show_bug.cgi?id=1952620) + +[1.2.1] - 2021-05-21 +---------------------------- + +### New Features + +- none + +### Bug Fixes + +- [Internal links in README.md are broken](https://bugzilla.redhat.com/show_bug.cgi?id=1962976) + +[1.2.0] - 2021-05-17 +---------------------------- + +### New Features + +- [network - role: Support ethtool -G|--set-ring options](https://bugzilla.redhat.com/show_bug.cgi?id=1959649) + +### Bug Fixes + +- [postfix - postfix: Use FQRN in README](https://bugzilla.redhat.com/show_bug.cgi?id=1958963) +- [postfix - Documentation error in rhel-system-roles postfix readme file](https://bugzilla.redhat.com/show_bug.cgi?id=1866544) +- [storage - storage: calltrace observed when set type: partition for storage_pools](https://bugzilla.redhat.com/show_bug.cgi?id=1854187) + +[1.1.0] - 2021-05-13 +---------------------------- + +### New Features + +- [timesync - [RFE] support for free form configuration for chrony](https://bugzilla.redhat.com/show_bug.cgi?id=1938023) +- [timesync - [RFE] support for timesync_max_distance to configure maxdistance/maxdist parameter](https://bugzilla.redhat.com/show_bug.cgi?id=1938016) +- [timesync - [RFE] support for ntp xleave, filter, and hw timestamping](https://bugzilla.redhat.com/show_bug.cgi?id=1938020) +- [selinux - [RFE] Ability to install custom SELinux module via Ansible](https://bugzilla.redhat.com/show_bug.cgi?id=1848683) +- [network - support for ipv6_disabled to disable ipv6 for address](https://bugzilla.redhat.com/show_bug.cgi?id=1939711) +- [vpn - [RFE] Release Ansible role for vpn in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1943679) + +### Bug Fixes + +- [Bug fixes for Collection/Automation Hub](https://bugzilla.redhat.com/show_bug.cgi?id=1954747) +- [timesync - do not use ignore_errors in timesync role](https://bugzilla.redhat.com/show_bug.cgi?id=1938014) +- [selinux - rhel-system-roles should not reload the SELinux policy if its not changed](https://bugzilla.redhat.com/show_bug.cgi?id=1757869) + +[1.0.0] - 2021-02-23 +---------------------------- + +### New Features + +- [network - RFE: [network] Support of DNS with options](https://bugzilla.redhat.com/show_bug.cgi?id=1893959) +- [network - RFE: [network] Embrace Inclusive language](https://bugzilla.redhat.com/show_bug.cgi?id=1893957) +- [ssh - [8.4] [RFE] Release Ansible role for ssh client in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1893712) +- [clusterha - [8.4] [RFE] Release Ansible role for cluster HA in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1893743) +- [logging - Logging - Support RELP secure transport in the logging role configuration](https://bugzilla.redhat.com/show_bug.cgi?id=1889484) +- [metrics - [8.4] [RFE] add exporting-metric-data-to-elasticsearch functionality in the metrics role](https://bugzilla.redhat.com/show_bug.cgi?id=1895188) +- [metrics - release SQL server configuration support in the metrics role](https://bugzilla.redhat.com/show_bug.cgi?id=1893908) +- [[8.4] Package rhel-system-roles in the collection format in addition to the legacy role format](https://bugzilla.redhat.com/show_bug.cgi?id=1893906) + +### Bug Fixes + +- [logging - Logging - Integrating ELK with RHV-4.4 fails as RHVH is missing 'rsyslog-gnutls' package.](https://bugzilla.redhat.com/show_bug.cgi?id=1927943) +- [storage - storage: omitted parameters on existing pool/volume is interpreted as "use the default"](https://bugzilla.redhat.com/show_bug.cgi?id=1894651) +- [storage - storage: must list disks in order to identify an existing pool](https://bugzilla.redhat.com/show_bug.cgi?id=1894676) +- [storage - storage: pool metadata usage must be accounted for by the user](https://bugzilla.redhat.com/show_bug.cgi?id=1894647) +- [selinux - Merged fix incorrect default value (there is no variable named "present")](https://bugzilla.redhat.com/show_bug.cgi?id=1926947) +- [storage - storage: tests_luks.yml partition case failed with nvme disk](https://bugzilla.redhat.com/show_bug.cgi?id=1865990) + +[1.0] - 2021-01-15 +---------------------------- + +### New Features + +- [tlog - Add exclude_users and exclude_groups support](https://bugzilla.redhat.com/show_bug.cgi?id=1895472) +- [crypto_policies - [8.4] [RFE] Release Ansible role for crypto policies in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1893699) +- [sshd - [8.4] [RFE] Release Ansible role for sshd in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1893696) +- [metrics - role should automate the setup of Grafana datasources](https://bugzilla.redhat.com/show_bug.cgi?id=1855544) +- [network role: Support -K|--features|--offload ethtool options](https://bugzilla.redhat.com/show_bug.cgi?id=1696703) +- [network role: Atomic changes](https://bugzilla.redhat.com/show_bug.cgi?id=1695161) + +### Bug Fixes + +- [storage - safe mode of storage role does not prevent accidentally losing data when toggling encryption on a volume, disk or pool](https://bugzilla.redhat.com/show_bug.cgi?id=1881524) +- [storage - storage: ext2/3/4 resize function doesn't work](https://bugzilla.redhat.com/show_bug.cgi?id=1862867) +- [logging - [logging role] cannot setup machine with tls](https://bugzilla.redhat.com/show_bug.cgi?id=1861318) +- [certificate - role: The role is not idempotent in rhel7](https://bugzilla.redhat.com/show_bug.cgi?id=1859547) +- [logging - Logging - Bug fixes](https://bugzilla.redhat.com/show_bug.cgi?id=1854546) +- [logging - [logging role] support scenario for client without key/cert, just CA cert](https://bugzilla.redhat.com/show_bug.cgi?id=1860896) +- [metrics - role incorrectly sets up multiple primary pmie processes in multi-host mode](https://bugzilla.redhat.com/show_bug.cgi?id=1855539) +- [certificate - role cannot manage EL7 hosts](https://bugzilla.redhat.com/show_bug.cgi?id=1848745) +- [network - [network] Support state:down persistent_state:absent for non-existent profile](https://bugzilla.redhat.com/show_bug.cgi?id=1822777) +- [network - Creating active bonded interface fails with the initscripts provider](https://bugzilla.redhat.com/show_bug.cgi?id=1848472) +- [logging - Logging role had performance issues](https://bugzilla.redhat.com/show_bug.cgi?id=1848762) +- [certificate - role does not work on controller hosts which use jinja2 2.10](https://bugzilla.redhat.com/show_bug.cgi?id=1848742) +- [nbde_client - fix idempotency, check_mode issues with nbde_client role](https://bugzilla.redhat.com/show_bug.cgi?id=1848766) +- [storage - Storage role can remove existing filesystems and volume groups without warning](https://bugzilla.redhat.com/show_bug.cgi?id=1763242) +- [network role: Minimize service disruption](https://bugzilla.redhat.com/show_bug.cgi?id=1695157) +- [typo in selinux/tests/tests_selinux_disabled.yml: Invalid options for assert: mgs](https://bugzilla.redhat.com/show_bug.cgi?id=1677743) +- [Check mode problems in rhel-system-roles](https://bugzilla.redhat.com/show_bug.cgi?id=1685904) + +[0.6] - 2018-05-11 +---------------------------- + +### New Features + +- [RFE: Ansible rhel-system-roles.network: add ETHTOOL_OPTS, LINKDELAY, IPV4_FAILURE_FATAL](https://bugzilla.redhat.com/show_bug.cgi?id=1478576) + +### Bug Fixes + +- none diff --git a/SOURCES/CHANGELOG.rst b/SOURCES/CHANGELOG.rst new file mode 100644 index 0000000..cf9ac93 --- /dev/null +++ b/SOURCES/CHANGELOG.rst @@ -0,0 +1 @@ +See docs/CHANGELOG.md diff --git a/SOURCES/collection_readme.sh b/SOURCES/collection_readme.sh new file mode 100755 index 0000000..94e8cae --- /dev/null +++ b/SOURCES/collection_readme.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euxo pipefail + +readme_md=${1:-"lsr_role2collection/collection_readme.md"} + +sed -i -e '/## Currently supported distributions/{:1;/## Dependencies/!{N;b 1};s|.*|## Dependencies|}' \ + -e 's/Linux/Red Hat Enterprise Linux/g' \ + -e 's/Ansible Galaxy/Automation Hub/g' \ + -e 's/fedora\(.\)linux_system_roles/redhat\1rhel_system_roles/g' \ + -e 's/linux-system-roles/rhel-system-roles/g' \ + -e '/## Documentation/{:a;/## Support/!{N;b a};s|.*|## Documentation\nThe official RHEL System Roles documentation can be found in the [Product Documentation section of the Red Hat Customer Portal](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/administration_and_configuration_tasks_using_system_roles_in_rhel/index).\n\n## Support|}' \ + -e 's/ $//' \ + $readme_md diff --git a/SOURCES/extrasources.inc b/SOURCES/extrasources.inc new file mode 100644 index 0000000..d2d3175 --- /dev/null +++ b/SOURCES/extrasources.inc @@ -0,0 +1,10 @@ +Source801: https://galaxy.ansible.com/download/ansible-posix-1.5.1.tar.gz +Source901: https://galaxy.ansible.com/download/community-general-6.4.0.tar.gz +Source902: https://galaxy.ansible.com/download/containers-podman-1.10.1.tar.gz + +Provides: bundled(ansible-collection(ansible.posix)) = 1.5.1 +Provides: bundled(ansible-collection(community.general)) = 6.4.0 +Provides: bundled(ansible-collection(containers.podman)) = 1.10.1 + +Source996: CHANGELOG.rst +Source998: collection_readme.sh diff --git a/SOURCES/redhat_subscription.py b/SOURCES/redhat_subscription.py new file mode 100644 index 0000000..2995e5a --- /dev/null +++ b/SOURCES/redhat_subscription.py @@ -0,0 +1,1187 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright (c) James Laska (jlaska@redhat.com) +# +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +DOCUMENTATION = ''' +--- +module: redhat_subscription +short_description: Manage registration and subscriptions to RHSM using C(subscription-manager) +description: + - Manage registration and subscription to the Red Hat Subscription Management entitlement platform using the C(subscription-manager) command, + registering using D-Bus if possible. +author: "Barnaby Court (@barnabycourt)" +notes: + - In order to register a system, subscription-manager requires either a username and password, or an activationkey and an Organization ID. + - Since 2.5 values for I(server_hostname), I(server_insecure), I(rhsm_baseurl), + I(server_proxy_hostname), I(server_proxy_port), I(server_proxy_user) and + I(server_proxy_password) are no longer taken from the C(/etc/rhsm/rhsm.conf) + config file and default to None. +requirements: + - subscription-manager + - Optionally the C(dbus) Python library; this is usually included in the OS + as it is used by C(subscription-manager). +extends_documentation_fragment: + - community.general.attributes +attributes: + check_mode: + support: none + diff_mode: + support: none +options: + state: + description: + - whether to register and subscribe (C(present)), or unregister (C(absent)) a system + choices: [ "present", "absent" ] + default: "present" + type: str + username: + description: + - access.redhat.com or Red Hat Satellite or Katello username + type: str + password: + description: + - access.redhat.com or Red Hat Satellite or Katello password + type: str + token: + description: + - sso.redhat.com API access token. + type: str + version_added: 6.3.0 + server_hostname: + description: + - Specify an alternative Red Hat Subscription Management or Red Hat Satellite or Katello server + type: str + server_insecure: + description: + - Enable or disable https server certificate verification when connecting to C(server_hostname) + type: str + server_prefix: + description: + - Specify the prefix when registering to the Red Hat Subscription Management or Red Hat Satellite or Katello server. + type: str + version_added: 3.3.0 + server_port: + description: + - Specify the port when registering to the Red Hat Subscription Management or Red Hat Satellite or Katello server. + type: str + version_added: 3.3.0 + rhsm_baseurl: + description: + - Specify CDN baseurl + type: str + rhsm_repo_ca_cert: + description: + - Specify an alternative location for a CA certificate for CDN + type: str + server_proxy_hostname: + description: + - Specify an HTTP proxy hostname. + type: str + server_proxy_scheme: + description: + - Specify an HTTP proxy scheme, for example C(http) or C(https). + type: str + version_added: 6.2.0 + server_proxy_port: + description: + - Specify an HTTP proxy port. + type: str + server_proxy_user: + description: + - Specify a user for HTTP proxy with basic authentication + type: str + server_proxy_password: + description: + - Specify a password for HTTP proxy with basic authentication + type: str + auto_attach: + description: + - Upon successful registration, auto-consume available subscriptions + - Added in favor of deprecated autosubscribe in 2.5. + type: bool + aliases: [autosubscribe] + activationkey: + description: + - supply an activation key for use with registration + type: str + org_id: + description: + - Organization ID to use in conjunction with activationkey + type: str + environment: + description: + - Register with a specific environment in the destination org. Used with Red Hat Satellite or Katello + type: str + pool: + description: + - | + Specify a subscription pool name to consume. Regular expressions accepted. Use I(pool_ids) instead if + possible, as it is much faster. Mutually exclusive with I(pool_ids). + default: '^$' + type: str + pool_ids: + description: + - | + Specify subscription pool IDs to consume. Prefer over I(pool) when possible as it is much faster. + A pool ID may be specified as a C(string) - just the pool ID (ex. C(0123456789abcdef0123456789abcdef)), + or as a C(dict) with the pool ID as the key, and a quantity as the value (ex. + C(0123456789abcdef0123456789abcdef: 2). If the quantity is provided, it is used to consume multiple + entitlements from a pool (the pool must support this). Mutually exclusive with I(pool). + default: [] + type: list + elements: raw + consumer_type: + description: + - The type of unit to register, defaults to system + type: str + consumer_name: + description: + - Name of the system to register, defaults to the hostname + type: str + consumer_id: + description: + - | + References an existing consumer ID to resume using a previous registration + for this system. If the system's identity certificate is lost or corrupted, + this option allows it to resume using its previous identity and subscriptions. + The default is to not specify a consumer ID so a new ID is created. + type: str + force_register: + description: + - Register the system even if it is already registered + type: bool + default: false + release: + description: + - Set a release version + type: str + syspurpose: + description: + - Set syspurpose attributes in file C(/etc/rhsm/syspurpose/syspurpose.json) + and synchronize these attributes with RHSM server. Syspurpose attributes help attach + the most appropriate subscriptions to the system automatically. When C(syspurpose.json) file + already contains some attributes, then new attributes overwrite existing attributes. + When some attribute is not listed in the new list of attributes, the existing + attribute will be removed from C(syspurpose.json) file. Unknown attributes are ignored. + type: dict + suboptions: + usage: + description: Syspurpose attribute usage + type: str + role: + description: Syspurpose attribute role + type: str + service_level_agreement: + description: Syspurpose attribute service_level_agreement + type: str + addons: + description: Syspurpose attribute addons + type: list + elements: str + sync: + description: + - When this option is true, then syspurpose attributes are synchronized with + RHSM server immediately. When this option is false, then syspurpose attributes + will be synchronized with RHSM server by rhsmcertd daemon. + type: bool + default: false +''' + +EXAMPLES = ''' +- name: Register as user (joe_user) with password (somepass) and auto-subscribe to available content. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + auto_attach: true + +- name: Same as above but subscribe to a specific pool by ID. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + pool_ids: 0123456789abcdef0123456789abcdef + +- name: Register and subscribe to multiple pools. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + pool_ids: + - 0123456789abcdef0123456789abcdef + - 1123456789abcdef0123456789abcdef + +- name: Same as above but consume multiple entitlements. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + pool_ids: + - 0123456789abcdef0123456789abcdef: 2 + - 1123456789abcdef0123456789abcdef: 4 + +- name: Register and pull existing system data. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + consumer_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + +- name: Register with activationkey and consume subscriptions matching Red Hat Enterprise Server or Red Hat Virtualization + community.general.redhat_subscription: + state: present + activationkey: 1-222333444 + org_id: 222333444 + pool: '^(Red Hat Enterprise Server|Red Hat Virtualization)$' + +- name: Update the consumed subscriptions from the previous example (remove Red Hat Virtualization subscription) + community.general.redhat_subscription: + state: present + activationkey: 1-222333444 + org_id: 222333444 + pool: '^Red Hat Enterprise Server$' + +- name: Register as user credentials into given environment (against Red Hat Satellite or Katello), and auto-subscribe. + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + environment: Library + auto_attach: true + +- name: Register as user (joe_user) with password (somepass) and a specific release + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + release: 7.4 + +- name: Register as user (joe_user) with password (somepass), set syspurpose attributes and synchronize them with server + community.general.redhat_subscription: + state: present + username: joe_user + password: somepass + auto_attach: true + syspurpose: + usage: "Production" + role: "Red Hat Enterprise Server" + service_level_agreement: "Premium" + addons: + - addon1 + - addon2 + sync: true +''' + +RETURN = ''' +subscribed_pool_ids: + description: List of pool IDs to which system is now subscribed + returned: success + type: dict + sample: { + "8a85f9815ab905d3015ab928c7005de4": "1" + } +''' + +from os.path import isfile +from os import unlink +import re +import shutil +import tempfile +import json + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.common.text.converters import to_native +from ansible.module_utils.six.moves import configparser +from ansible.module_utils import distro + + +SUBMAN_CMD = None + + +class RegistrationBase(object): + + REDHAT_REPO = "/etc/yum.repos.d/redhat.repo" + + def __init__(self, module, username=None, password=None, token=None): + self.module = module + self.username = username + self.password = password + self.token = token + + def configure(self): + raise NotImplementedError("Must be implemented by a sub-class") + + def enable(self): + # Remove any existing redhat.repo + if isfile(self.REDHAT_REPO): + unlink(self.REDHAT_REPO) + + def register(self): + raise NotImplementedError("Must be implemented by a sub-class") + + def unregister(self): + raise NotImplementedError("Must be implemented by a sub-class") + + def unsubscribe(self): + raise NotImplementedError("Must be implemented by a sub-class") + + def update_plugin_conf(self, plugin, enabled=True): + plugin_conf = '/etc/yum/pluginconf.d/%s.conf' % plugin + + if isfile(plugin_conf): + tmpfd, tmpfile = tempfile.mkstemp() + shutil.copy2(plugin_conf, tmpfile) + cfg = configparser.ConfigParser() + cfg.read([tmpfile]) + + if enabled: + cfg.set('main', 'enabled', '1') + else: + cfg.set('main', 'enabled', '0') + + fd = open(tmpfile, 'w+') + cfg.write(fd) + fd.close() + self.module.atomic_move(tmpfile, plugin_conf) + + def subscribe(self, **kwargs): + raise NotImplementedError("Must be implemented by a sub-class") + + +class Rhsm(RegistrationBase): + def __init__(self, module, username=None, password=None, token=None): + RegistrationBase.__init__(self, module, username, password, token) + self.module = module + + def enable(self): + ''' + Enable the system to receive updates from subscription-manager. + This involves updating affected yum plugins and removing any + conflicting yum repositories. + ''' + RegistrationBase.enable(self) + self.update_plugin_conf('rhnplugin', False) + self.update_plugin_conf('subscription-manager', True) + + def configure(self, **kwargs): + ''' + Configure the system as directed for registration with RHSM + Raises: + * Exception - if error occurs while running command + ''' + + args = [SUBMAN_CMD, 'config'] + + # Pass supplied **kwargs as parameters to subscription-manager. Ignore + # non-configuration parameters and replace '_' with '.'. For example, + # 'server_hostname' becomes '--server.hostname'. + options = [] + for k, v in sorted(kwargs.items()): + if re.search(r'^(server|rhsm)_', k) and v is not None: + options.append('--%s=%s' % (k.replace('_', '.', 1), v)) + + # When there is nothing to configure, then it is not necessary + # to run config command, because it only returns current + # content of current configuration file + if len(options) == 0: + return + + args.extend(options) + + self.module.run_command(args, check_rc=True) + + @property + def is_registered(self): + ''' + Determine whether the current system + Returns: + * Boolean - whether the current system is currently registered to + RHSM. + ''' + + args = [SUBMAN_CMD, 'identity'] + rc, stdout, stderr = self.module.run_command(args, check_rc=False) + if rc == 0: + return True + else: + return False + + def _can_connect_to_dbus(self): + """ + Checks whether it is possible to connect to the system D-Bus bus. + + :returns: bool -- whether it is possible to connect to the system D-Bus bus. + """ + + try: + # Technically speaking, subscription-manager uses dbus-python + # as D-Bus library, so this ought to work; better be safe than + # sorry, I guess... + import dbus + except ImportError: + self.module.debug('dbus Python module not available, will use CLI') + return False + + try: + bus = dbus.SystemBus() + msg = dbus.lowlevel.SignalMessage('/', 'com.example', 'test') + bus.send_message(msg) + bus.flush() + + except dbus.exceptions.DBusException as e: + self.module.debug('Failed to connect to system D-Bus bus, will use CLI: %s' % e) + return False + + self.module.debug('Verified system D-Bus bus as usable') + return True + + def register(self, username, password, token, auto_attach, activationkey, org_id, + consumer_type, consumer_name, consumer_id, force_register, environment, + release): + ''' + Register the current system to the provided RHSM or Red Hat Satellite + or Katello server + + Raises: + * Exception - if any error occurs during the registration + ''' + # There is no support for token-based registration in the D-Bus API + # of rhsm, so always use the CLI in that case. + if not token and self._can_connect_to_dbus(): + self._register_using_dbus(username, password, auto_attach, + activationkey, org_id, consumer_type, + consumer_name, consumer_id, + force_register, environment, release) + return + self._register_using_cli(username, password, token, auto_attach, + activationkey, org_id, consumer_type, + consumer_name, consumer_id, + force_register, environment, release) + + def _register_using_cli(self, username, password, token, auto_attach, + activationkey, org_id, consumer_type, consumer_name, + consumer_id, force_register, environment, release): + ''' + Register using the 'subscription-manager' command + + Raises: + * Exception - if error occurs while running command + ''' + args = [SUBMAN_CMD, 'register'] + + # Generate command arguments + if force_register: + args.extend(['--force']) + + if org_id: + args.extend(['--org', org_id]) + + if auto_attach: + args.append('--auto-attach') + + if consumer_type: + args.extend(['--type', consumer_type]) + + if consumer_name: + args.extend(['--name', consumer_name]) + + if consumer_id: + args.extend(['--consumerid', consumer_id]) + + if environment: + args.extend(['--environment', environment]) + + if activationkey: + args.extend(['--activationkey', activationkey]) + elif token: + args.extend(['--token', token]) + else: + if username: + args.extend(['--username', username]) + if password: + args.extend(['--password', password]) + + if release: + args.extend(['--release', release]) + + rc, stderr, stdout = self.module.run_command(args, check_rc=True, expand_user_and_vars=False) + + def _register_using_dbus(self, username, password, auto_attach, + activationkey, org_id, consumer_type, consumer_name, + consumer_id, force_register, environment, release): + ''' + Register using D-Bus (connecting to the rhsm service) + + Raises: + * Exception - if error occurs during the D-Bus communication + ''' + import dbus + + SUBSCRIPTION_MANAGER_LOCALE = 'C' + # Seconds to wait for Registration to complete over DBus; + # 10 minutes should be a pretty generous timeout. + REGISTRATION_TIMEOUT = 600 + + def str2int(s, default=0): + try: + return int(s) + except ValueError: + return default + + distro_id = distro.id() + distro_version = tuple(str2int(p) for p in distro.version_parts()) + + # Stop the rhsm service when using systemd (which means Fedora or + # RHEL 7+): this is because the service may not use new configuration bits + # - with subscription-manager < 1.26.5-1 (in RHEL < 8.2); + # fixed later by https://github.com/candlepin/subscription-manager/pull/2175 + # - sporadically: https://bugzilla.redhat.com/show_bug.cgi?id=2049296 + if distro_id == 'fedora' or distro_version[0] >= 7: + cmd = ['systemctl', 'stop', 'rhsm'] + self.module.run_command(cmd, check_rc=True, expand_user_and_vars=False) + + # While there is a 'force' options for the registration, it is actually + # not implemented (and thus it does not work) + # - in RHEL 7 and earlier + # - in RHEL 8 before 8.8: https://bugzilla.redhat.com/show_bug.cgi?id=2118486 + # - in RHEL 9 before 9.2: https://bugzilla.redhat.com/show_bug.cgi?id=2121350 + # Hence, use it only when implemented, manually unregistering otherwise. + # Match it on RHEL, since we know about it; other distributions + # will need their own logic. + dbus_force_option_works = False + if (distro_id == 'rhel' and + ((distro_version[0] == 8 and distro_version[1] >= 8) or + (distro_version[0] == 9 and distro_version[1] >= 2) or + distro_version[0] > 9)): + dbus_force_option_works = True + + if force_register and not dbus_force_option_works: + self.unregister() + + register_opts = {} + if consumer_type: + register_opts['consumer_type'] = consumer_type + if consumer_name: + register_opts['name'] = consumer_name + if consumer_id: + register_opts['consumerid'] = consumer_id + if environment: + # The option for environments used to be 'environment' in versions + # of RHEL before 8.6, and then it changed to 'environments'; since + # the Register*() D-Bus functions reject unknown options, we have + # to pass the right option depending on the version -- funky. + environment_key = 'environment' + if distro_id == 'fedora' or \ + (distro_id == 'rhel' and + ((distro_version[0] == 8 and distro_version[1] >= 6) or + distro_version[0] >= 9)): + environment_key = 'environments' + register_opts[environment_key] = environment + if force_register and dbus_force_option_works: + register_opts['force'] = True + # Wrap it as proper D-Bus dict + register_opts = dbus.Dictionary(register_opts, signature='sv', variant_level=1) + + connection_opts = {} + # Wrap it as proper D-Bus dict + connection_opts = dbus.Dictionary(connection_opts, signature='sv', variant_level=1) + + bus = dbus.SystemBus() + register_server = bus.get_object('com.redhat.RHSM1', + '/com/redhat/RHSM1/RegisterServer') + address = register_server.Start( + SUBSCRIPTION_MANAGER_LOCALE, + dbus_interface='com.redhat.RHSM1.RegisterServer', + ) + + try: + # Use the private bus to register the system + self.module.debug('Connecting to the private DBus') + private_bus = dbus.connection.Connection(address) + + try: + if activationkey: + args = ( + org_id, + [activationkey], + register_opts, + connection_opts, + SUBSCRIPTION_MANAGER_LOCALE, + ) + private_bus.call_blocking( + 'com.redhat.RHSM1', + '/com/redhat/RHSM1/Register', + 'com.redhat.RHSM1.Register', + 'RegisterWithActivationKeys', + 'sasa{sv}a{sv}s', + args, + timeout=REGISTRATION_TIMEOUT, + ) + else: + args = ( + org_id or '', + username, + password, + register_opts, + connection_opts, + SUBSCRIPTION_MANAGER_LOCALE, + ) + private_bus.call_blocking( + 'com.redhat.RHSM1', + '/com/redhat/RHSM1/Register', + 'com.redhat.RHSM1.Register', + 'Register', + 'sssa{sv}a{sv}s', + args, + timeout=REGISTRATION_TIMEOUT, + ) + + except dbus.exceptions.DBusException as e: + # Sometimes we get NoReply but the registration has succeeded. + # Check the registration status before deciding if this is an error. + if e.get_dbus_name() == 'org.freedesktop.DBus.Error.NoReply': + if not self.is_registered(): + # Host is not registered so re-raise the error + raise + else: + raise + # Host was registered so continue + finally: + # Always shut down the private bus + self.module.debug('Shutting down private DBus instance') + register_server.Stop( + SUBSCRIPTION_MANAGER_LOCALE, + dbus_interface='com.redhat.RHSM1.RegisterServer', + ) + + # Make sure to refresh all the local data: this will fetch all the + # certificates, update redhat.repo, etc. + self.module.run_command([SUBMAN_CMD, 'refresh'], + check_rc=True, expand_user_and_vars=False) + + if auto_attach: + args = [SUBMAN_CMD, 'attach', '--auto'] + self.module.run_command(args, check_rc=True, expand_user_and_vars=False) + + # There is no support for setting the release via D-Bus, so invoke + # the CLI for this. + if release: + args = [SUBMAN_CMD, 'release', '--set', release] + self.module.run_command(args, check_rc=True, expand_user_and_vars=False) + + def unsubscribe(self, serials=None): + ''' + Unsubscribe a system from subscribed channels + Args: + serials(list or None): list of serials to unsubscribe. If + serials is none or an empty list, then + all subscribed channels will be removed. + Raises: + * Exception - if error occurs while running command + ''' + items = [] + if serials is not None and serials: + items = ["--serial=%s" % s for s in serials] + if serials is None: + items = ["--all"] + + if items: + args = [SUBMAN_CMD, 'remove'] + items + rc, stderr, stdout = self.module.run_command(args, check_rc=True) + return serials + + def unregister(self): + ''' + Unregister a currently registered system + Raises: + * Exception - if error occurs while running command + ''' + args = [SUBMAN_CMD, 'unregister'] + rc, stderr, stdout = self.module.run_command(args, check_rc=True) + self.update_plugin_conf('rhnplugin', False) + self.update_plugin_conf('subscription-manager', False) + + def subscribe(self, regexp): + ''' + Subscribe current system to available pools matching the specified + regular expression. It matches regexp against available pool ids first. + If any pool ids match, subscribe to those pools and return. + + If no pool ids match, then match regexp against available pool product + names. Note this can still easily match many many pools. Then subscribe + to those pools. + + Since a pool id is a more specific match, we only fallback to matching + against names if we didn't match pool ids. + + Raises: + * Exception - if error occurs while running command + ''' + # See https://github.com/ansible/ansible/issues/19466 + + # subscribe to pools whose pool id matches regexp (and only the pool id) + subscribed_pool_ids = self.subscribe_pool(regexp) + + # If we found any matches, we are done + # Don't attempt to match pools by product name + if subscribed_pool_ids: + return subscribed_pool_ids + + # We didn't match any pool ids. + # Now try subscribing to pools based on product name match + # Note: This can match lots of product names. + subscribed_by_product_pool_ids = self.subscribe_product(regexp) + if subscribed_by_product_pool_ids: + return subscribed_by_product_pool_ids + + # no matches + return [] + + def subscribe_by_pool_ids(self, pool_ids): + """ + Try to subscribe to the list of pool IDs + """ + available_pools = RhsmPools(self.module) + + available_pool_ids = [p.get_pool_id() for p in available_pools] + + for pool_id, quantity in sorted(pool_ids.items()): + if pool_id in available_pool_ids: + args = [SUBMAN_CMD, 'attach', '--pool', pool_id] + if quantity is not None: + args.extend(['--quantity', to_native(quantity)]) + rc, stderr, stdout = self.module.run_command(args, check_rc=True) + else: + self.module.fail_json(msg='Pool ID: %s not in list of available pools' % pool_id) + return pool_ids + + def subscribe_pool(self, regexp): + ''' + Subscribe current system to available pools matching the specified + regular expression + Raises: + * Exception - if error occurs while running command + ''' + + # Available pools ready for subscription + available_pools = RhsmPools(self.module) + + subscribed_pool_ids = [] + for pool in available_pools.filter_pools(regexp): + pool.subscribe() + subscribed_pool_ids.append(pool.get_pool_id()) + return subscribed_pool_ids + + def subscribe_product(self, regexp): + ''' + Subscribe current system to available pools matching the specified + regular expression + Raises: + * Exception - if error occurs while running command + ''' + + # Available pools ready for subscription + available_pools = RhsmPools(self.module) + + subscribed_pool_ids = [] + for pool in available_pools.filter_products(regexp): + pool.subscribe() + subscribed_pool_ids.append(pool.get_pool_id()) + return subscribed_pool_ids + + def update_subscriptions(self, regexp): + changed = False + consumed_pools = RhsmPools(self.module, consumed=True) + pool_ids_to_keep = [p.get_pool_id() for p in consumed_pools.filter_pools(regexp)] + pool_ids_to_keep.extend([p.get_pool_id() for p in consumed_pools.filter_products(regexp)]) + + serials_to_remove = [p.Serial for p in consumed_pools if p.get_pool_id() not in pool_ids_to_keep] + serials = self.unsubscribe(serials=serials_to_remove) + + subscribed_pool_ids = self.subscribe(regexp) + + if subscribed_pool_ids or serials: + changed = True + return {'changed': changed, 'subscribed_pool_ids': subscribed_pool_ids, + 'unsubscribed_serials': serials} + + def update_subscriptions_by_pool_ids(self, pool_ids): + changed = False + consumed_pools = RhsmPools(self.module, consumed=True) + + existing_pools = {} + serials_to_remove = [] + for p in consumed_pools: + pool_id = p.get_pool_id() + quantity_used = p.get_quantity_used() + existing_pools[pool_id] = quantity_used + + quantity = pool_ids.get(pool_id, 0) + if quantity is not None and quantity != quantity_used: + serials_to_remove.append(p.Serial) + + serials = self.unsubscribe(serials=serials_to_remove) + + missing_pools = {} + for pool_id, quantity in sorted(pool_ids.items()): + quantity_used = existing_pools.get(pool_id, 0) + if quantity is None and quantity_used == 0 or quantity not in (None, 0, quantity_used): + missing_pools[pool_id] = quantity + + self.subscribe_by_pool_ids(missing_pools) + + if missing_pools or serials: + changed = True + return {'changed': changed, 'subscribed_pool_ids': list(missing_pools.keys()), + 'unsubscribed_serials': serials} + + def sync_syspurpose(self): + """ + Try to synchronize syspurpose attributes with server + """ + args = [SUBMAN_CMD, 'status'] + rc, stdout, stderr = self.module.run_command(args, check_rc=False) + + +class RhsmPool(object): + ''' + Convenience class for housing subscription information + ''' + + def __init__(self, module, **kwargs): + self.module = module + for k, v in kwargs.items(): + setattr(self, k, v) + + def __str__(self): + return str(self.__getattribute__('_name')) + + def get_pool_id(self): + return getattr(self, 'PoolId', getattr(self, 'PoolID')) + + def get_quantity_used(self): + return int(getattr(self, 'QuantityUsed')) + + def subscribe(self): + args = "subscription-manager attach --pool %s" % self.get_pool_id() + rc, stdout, stderr = self.module.run_command(args, check_rc=True) + if rc == 0: + return True + else: + return False + + +class RhsmPools(object): + """ + This class is used for manipulating pools subscriptions with RHSM + """ + + def __init__(self, module, consumed=False): + self.module = module + self.products = self._load_product_list(consumed) + + def __iter__(self): + return self.products.__iter__() + + def _load_product_list(self, consumed=False): + """ + Loads list of all available or consumed pools for system in data structure + + Args: + consumed(bool): if True list consumed pools, else list available pools (default False) + """ + args = "subscription-manager list" + if consumed: + args += " --consumed" + else: + args += " --available" + lang_env = dict(LANG='C', LC_ALL='C', LC_MESSAGES='C') + rc, stdout, stderr = self.module.run_command(args, check_rc=True, environ_update=lang_env) + + products = [] + for line in stdout.split('\n'): + # Remove leading+trailing whitespace + line = line.strip() + # An empty line implies the end of a output group + if len(line) == 0: + continue + # If a colon ':' is found, parse + elif ':' in line: + (key, value) = line.split(':', 1) + key = key.strip().replace(" ", "") # To unify + value = value.strip() + if key in ['ProductName', 'SubscriptionName']: + # Remember the name for later processing + products.append(RhsmPool(self.module, _name=value, key=value)) + elif products: + # Associate value with most recently recorded product + products[-1].__setattr__(key, value) + # FIXME - log some warning? + # else: + # warnings.warn("Unhandled subscription key/value: %s/%s" % (key,value)) + return products + + def filter_pools(self, regexp='^$'): + ''' + Return a list of RhsmPools whose pool id matches the provided regular expression + ''' + r = re.compile(regexp) + for product in self.products: + if r.search(product.get_pool_id()): + yield product + + def filter_products(self, regexp='^$'): + ''' + Return a list of RhsmPools whose product name matches the provided regular expression + ''' + r = re.compile(regexp) + for product in self.products: + if r.search(product._name): + yield product + + +class SysPurpose(object): + """ + This class is used for reading and writing to syspurpose.json file + """ + + SYSPURPOSE_FILE_PATH = "/etc/rhsm/syspurpose/syspurpose.json" + + ALLOWED_ATTRIBUTES = ['role', 'usage', 'service_level_agreement', 'addons'] + + def __init__(self, path=None): + """ + Initialize class used for reading syspurpose json file + """ + self.path = path or self.SYSPURPOSE_FILE_PATH + + def update_syspurpose(self, new_syspurpose): + """ + Try to update current syspurpose with new attributes from new_syspurpose + """ + syspurpose = {} + syspurpose_changed = False + for key, value in new_syspurpose.items(): + if key in self.ALLOWED_ATTRIBUTES: + if value is not None: + syspurpose[key] = value + elif key == 'sync': + pass + else: + raise KeyError("Attribute: %s not in list of allowed attributes: %s" % + (key, self.ALLOWED_ATTRIBUTES)) + current_syspurpose = self._read_syspurpose() + if current_syspurpose != syspurpose: + syspurpose_changed = True + # Update current syspurpose with new values + current_syspurpose.update(syspurpose) + # When some key is not listed in new syspurpose, then delete it from current syspurpose + # and ignore custom attributes created by user (e.g. "foo": "bar") + for key in list(current_syspurpose): + if key in self.ALLOWED_ATTRIBUTES and key not in syspurpose: + del current_syspurpose[key] + self._write_syspurpose(current_syspurpose) + return syspurpose_changed + + def _write_syspurpose(self, new_syspurpose): + """ + This function tries to update current new_syspurpose attributes to + json file. + """ + with open(self.path, "w") as fp: + fp.write(json.dumps(new_syspurpose, indent=2, ensure_ascii=False, sort_keys=True)) + + def _read_syspurpose(self): + """ + Read current syspurpuse from json file. + """ + current_syspurpose = {} + try: + with open(self.path, "r") as fp: + content = fp.read() + except IOError: + pass + else: + current_syspurpose = json.loads(content) + return current_syspurpose + + +def main(): + + # Load RHSM configuration from file + rhsm = Rhsm(None) + + # Note: the default values for parameters are: + # 'type': 'str', 'default': None, 'required': False + # So there is no need to repeat these values for each parameter. + module = AnsibleModule( + argument_spec={ + 'state': {'default': 'present', 'choices': ['present', 'absent']}, + 'username': {}, + 'password': {'no_log': True}, + 'token': {'no_log': True}, + 'server_hostname': {}, + 'server_insecure': {}, + 'server_prefix': {}, + 'server_port': {}, + 'rhsm_baseurl': {}, + 'rhsm_repo_ca_cert': {}, + 'auto_attach': {'aliases': ['autosubscribe'], 'type': 'bool'}, + 'activationkey': {'no_log': True}, + 'org_id': {}, + 'environment': {}, + 'pool': {'default': '^$'}, + 'pool_ids': {'default': [], 'type': 'list', 'elements': 'raw'}, + 'consumer_type': {}, + 'consumer_name': {}, + 'consumer_id': {}, + 'force_register': {'default': False, 'type': 'bool'}, + 'server_proxy_hostname': {}, + 'server_proxy_scheme': {}, + 'server_proxy_port': {}, + 'server_proxy_user': {}, + 'server_proxy_password': {'no_log': True}, + 'release': {}, + 'syspurpose': { + 'type': 'dict', + 'options': { + 'role': {}, + 'usage': {}, + 'service_level_agreement': {}, + 'addons': {'type': 'list', 'elements': 'str'}, + 'sync': {'type': 'bool', 'default': False} + } + } + }, + required_together=[['username', 'password'], + ['server_proxy_hostname', 'server_proxy_port'], + ['server_proxy_user', 'server_proxy_password']], + mutually_exclusive=[['activationkey', 'username'], + ['activationkey', 'token'], + ['token', 'username'], + ['activationkey', 'consumer_id'], + ['activationkey', 'environment'], + ['activationkey', 'auto_attach'], + ['pool', 'pool_ids']], + required_if=[['state', 'present', ['username', 'activationkey', 'token'], True]], + ) + + rhsm.module = module + state = module.params['state'] + username = module.params['username'] + password = module.params['password'] + token = module.params['token'] + server_hostname = module.params['server_hostname'] + server_insecure = module.params['server_insecure'] + server_prefix = module.params['server_prefix'] + server_port = module.params['server_port'] + rhsm_baseurl = module.params['rhsm_baseurl'] + rhsm_repo_ca_cert = module.params['rhsm_repo_ca_cert'] + auto_attach = module.params['auto_attach'] + activationkey = module.params['activationkey'] + org_id = module.params['org_id'] + if activationkey and not org_id: + module.fail_json(msg='org_id is required when using activationkey') + environment = module.params['environment'] + pool = module.params['pool'] + pool_ids = {} + for value in module.params['pool_ids']: + if isinstance(value, dict): + if len(value) != 1: + module.fail_json(msg='Unable to parse pool_ids option.') + pool_id, quantity = list(value.items())[0] + else: + pool_id, quantity = value, None + pool_ids[pool_id] = quantity + consumer_type = module.params["consumer_type"] + consumer_name = module.params["consumer_name"] + consumer_id = module.params["consumer_id"] + force_register = module.params["force_register"] + server_proxy_hostname = module.params['server_proxy_hostname'] + server_proxy_port = module.params['server_proxy_port'] + server_proxy_user = module.params['server_proxy_user'] + server_proxy_password = module.params['server_proxy_password'] + release = module.params['release'] + syspurpose = module.params['syspurpose'] + + global SUBMAN_CMD + SUBMAN_CMD = module.get_bin_path('subscription-manager', True) + + syspurpose_changed = False + if syspurpose is not None: + try: + syspurpose_changed = SysPurpose().update_syspurpose(syspurpose) + except Exception as err: + module.fail_json(msg="Failed to update syspurpose attributes: %s" % to_native(err)) + + # Ensure system is registered + if state == 'present': + + # Register system + if rhsm.is_registered and not force_register: + if syspurpose and 'sync' in syspurpose and syspurpose['sync'] is True: + try: + rhsm.sync_syspurpose() + except Exception as e: + module.fail_json(msg="Failed to synchronize syspurpose attributes: %s" % to_native(e)) + if pool != '^$' or pool_ids: + try: + if pool_ids: + result = rhsm.update_subscriptions_by_pool_ids(pool_ids) + else: + result = rhsm.update_subscriptions(pool) + except Exception as e: + module.fail_json(msg="Failed to update subscriptions for '%s': %s" % (server_hostname, to_native(e))) + else: + module.exit_json(**result) + else: + if syspurpose_changed is True: + module.exit_json(changed=True, msg="Syspurpose attributes changed.") + else: + module.exit_json(changed=False, msg="System already registered.") + else: + try: + rhsm.enable() + rhsm.configure(**module.params) + rhsm.register(username, password, token, auto_attach, activationkey, org_id, + consumer_type, consumer_name, consumer_id, force_register, + environment, release) + if syspurpose and 'sync' in syspurpose and syspurpose['sync'] is True: + rhsm.sync_syspurpose() + if pool_ids: + subscribed_pool_ids = rhsm.subscribe_by_pool_ids(pool_ids) + elif pool != '^$': + subscribed_pool_ids = rhsm.subscribe(pool) + else: + subscribed_pool_ids = [] + except Exception as e: + module.fail_json(msg="Failed to register with '%s': %s" % (server_hostname, to_native(e))) + else: + module.exit_json(changed=True, + msg="System successfully registered to '%s'." % server_hostname, + subscribed_pool_ids=subscribed_pool_ids) + + # Ensure system is *not* registered + if state == 'absent': + if not rhsm.is_registered: + module.exit_json(changed=False, msg="System already unregistered.") + else: + try: + rhsm.unsubscribe() + rhsm.unregister() + except Exception as e: + module.fail_json(msg="Failed to unregister: %s" % to_native(e)) + else: + module.exit_json(changed=True, msg="System successfully unregistered from %s." % server_hostname) + + +if __name__ == '__main__': + main() diff --git a/SPECS/rhel-system-roles.spec b/SPECS/rhel-system-roles.spec new file mode 100644 index 0000000..3575c39 --- /dev/null +++ b/SPECS/rhel-system-roles.spec @@ -0,0 +1,1821 @@ +# NOTE: Even though ansible-core is in 8.6, it is only available +# at *runtime*, not at *buildtime* - so we can't have +# ansible-core as a build_dep on RHEL8 +%if 0%{?fedora} || 0%{?rhel} >= 9 +%bcond_without ansible +%if 0%{?fedora} +BuildRequires: ansible-packaging +%else +BuildRequires: ansible-core >= 2.11.0 +%endif +%else +%bcond_with ansible +%endif + +%bcond_with collection_artifact + +%if 0%{?fedora} || 0%{?rhel} >= 8 +%bcond_without html +%else +# pandoc is not supported in rhel 7 and older, +# which is needed for converting .md to .html. +%bcond_with html +%endif + +%if 0%{?rhel} +Name: rhel-system-roles +%else +Name: linux-system-roles +%endif +Url: https://github.com/linux-system-roles +Summary: Set of interfaces for unified system management +Version: 1.21.1 +Release: 1%{?dist} + +License: GPLv3+ and MIT and BSD and Python +%global _pkglicensedir %{_licensedir}/%{name} +%global roleinstprefix %{name}. +%if 0%{?rhel} +%global collection_namespace redhat +%global collection_name rhel_system_roles +%else +%global collection_namespace fedora +%global collection_name linux_system_roles +%endif + +%global collection_version %{version} + +# Helper macros originally from macros.ansible by Igor Raits +# On RHEL, not available, so we must define those macros locally +# On Fedora, provided by ansible-packager +# Not used (yet). Could be made to point to AH in RHEL - but what about CentOS Stream? +#%%{!?ansible_collection_url:%%define ansible_collection_url() https://galaxy.ansible.com/%%{collection_namespace}/%%{collection_name}} +%if 0%{?rhel} +Provides: ansible-collection(%{collection_namespace}.%{collection_name}) = %{collection_version} +%global ansible_collection_files %{_datadir}/ansible/collections/ansible_collections/%{collection_namespace}/ +%define ansible_roles_dir %{_datadir}/ansible/roles +%if %{without ansible} +# Untar and copy everything instead of galaxy-installing the built artifact when ansible is not available +%define ansible_collection_build() tar -cf %{_tmppath}/%{collection_namespace}-%{collection_name}-%{version}.tar.gz . +%define ansible_collection_install() mkdir -p %{buildroot}%{ansible_collection_files}%{collection_name}; (cd %{buildroot}%{ansible_collection_files}%{collection_name}; tar -xf %{_tmppath}/%{collection_namespace}-%{collection_name}-%{version}.tar.gz) +%else +%define ansible_collection_build() ansible-galaxy collection build +%define ansible_collection_install() ansible-galaxy collection install -n -p %{buildroot}%{_datadir}/ansible/collections %{collection_namespace}-%{collection_name}-%{version}.tar.gz +%endif +%endif +# be compatible with the usual Fedora Provides: +Provides: ansible-collection-%{collection_namespace}-%{collection_name} = %{collection_version}-%{release} + +# ansible-core is in rhel 8.6 and later - default to ansible-core, but allow +# the use of ansible if present - we may revisit this if the automatic dependency +# generator is added to ansible-core in RHEL +# Fedora - the automatic generator will add this - no need to explicit declare +# it in the spec file +# EL7 - no dependency on ansible because there is no ansible in el7 - user is +# responsible for knowing they have to install ansible +%if 0%{?rhel} >= 8 +Requires: (ansible-core >= 2.11.0 or ansible >= 2.9.0) +%endif + +# For each role, call either defcommit() or deftag(). The other macros +# (%%id and %%shortid) can be then used in the same way in both cases. +# This way the rest of the spec file des not need to know whether we are +# dealing with a tag or a commit. +%global archiveext tar.gz +# list of role names +%global rolenames %nil +# list of assignments that can be used to populate a bash associative array variable +%global rolestodir %nil +%define getarchivedir() %(p=%{basename:%{S:%{1}}}; echo ${p%%.%{archiveext}}) + +%define defcommit() %{expand:%%global ref%{1} %{2} +%%global shortcommit%{1} %%(c=%%{ref%{1}}; echo ${c:0:7}) +%%global extractdir%{1} %%{expand:%%getarchivedir %{1}} +%%{!?repo%{1}:%%global repo%{1} %%{rolename%{1}}} +%%global archiveurl%{1} %%{?forgeorg%{1}}%%{!?forgeorg%{1}:%%{url}}/%%{repo%{1}}/archive/%%{ref%{1}}/%%{repo%{1}}-%%{ref%{1}}.tar.gz +%%global rolenames %%{?rolenames} %%{rolename%{1}} +%%global roletodir%{1} [%{rolename%{1}}]="%{extractdir%{1}}" +%%global rolestodir %%{?rolestodir} %{roletodir%{1}} +} + +%define deftag() %{expand:%%global ref%{1} %{2} +%%global extractdir%{1} %%{expand:%%getarchivedir %{1}} +%%{!?repo%{1}:%%global repo%{1} %%{rolename%{1}}} +%%global archiveurl%{1} %%{?forgeorg%{1}}%%{!?forgeorg%{1}:%%{url}}/%%{repo%{1}}/archive/%%{ref%{1}}/%%{repo%{1}}-%%{ref%{1}}.tar.gz +%%global rolenames %%{?rolenames} %%{rolename%{1}} +%%global roletodir%{1} [%{rolename%{1}}]="%{extractdir%{1}}" +%%global rolestodir %%{?rolestodir} %%{roletodir%{1}} +} + +%global mainid d6a8e0167e9ed8d089093b7ead1e298241b534e1 +Source: %{url}/auto-maintenance/archive/%{mainid}/auto-maintenance-%{mainid}.tar.gz + +# BEGIN AUTOGENERATED SOURCES +%global rolename1 postfix +%deftag 1 1.3.3 + +%global rolename2 selinux +%deftag 2 1.5.6 + +%global rolename3 timesync +%deftag 3 1.7.2 + +%global rolename4 kdump +%deftag 4 1.2.6 + +%global rolename5 network +%deftag 5 1.11.2 + +%global rolename6 storage +%deftag 6 1.9.6 + +%global rolename7 metrics +%deftag 7 1.8.1 + +%global rolename8 tlog +%deftag 8 1.2.11 + +%global rolename9 kernel_settings +%deftag 9 1.1.11 + +%global rolename10 logging +%deftag 10 1.11.5 + +%global rolename11 nbde_server +%deftag 11 1.3.3 + +%global rolename12 nbde_client +%deftag 12 1.2.10 + +%global rolename13 certificate +%deftag 13 1.1.9 + +%global rolename14 crypto_policies +%deftag 14 1.2.7 + +%global forgeorg15 https://github.com/willshersystems +%global repo15 ansible-sshd +%global rolename15 sshd +%deftag 15 v0.18.1 + +%global rolename16 ssh +%deftag 16 1.1.12 + +%global rolename17 ha_cluster +%deftag 17 1.8.7 + +%global rolename18 vpn +%deftag 18 1.5.3 + +%global rolename19 firewall +%deftag 19 1.4.2 + +%global rolename20 cockpit +%deftag 20 1.4.3 + +%global rolename21 podman +%deftag 21 1.1.2 + +%global rolename22 ad_integration +%deftag 22 1.0.2 + +%global rolename23 rhc +%deftag 23 1.1.1 + +%global rolename24 journald +%deftag 24 1.0.0 + +Source1: %{archiveurl1} +Source2: %{archiveurl2} +Source3: %{archiveurl3} +Source4: %{archiveurl4} +Source5: %{archiveurl5} +Source6: %{archiveurl6} +Source7: %{archiveurl7} +Source8: %{archiveurl8} +Source9: %{archiveurl9} +Source10: %{archiveurl10} +Source11: %{archiveurl11} +Source12: %{archiveurl12} +Source13: %{archiveurl13} +Source14: %{archiveurl14} +Source15: %{archiveurl15} +Source16: %{archiveurl16} +Source17: %{archiveurl17} +Source18: %{archiveurl18} +Source19: %{archiveurl19} +Source20: %{archiveurl20} +Source21: %{archiveurl21} +Source22: %{archiveurl22} +Source23: %{archiveurl23} +Source24: %{archiveurl24} +# END AUTOGENERATED SOURCES + +# Includes with definitions/tags that differ between RHEL and Fedora +Source2301: redhat_subscription.py +Source1001: extrasources.inc + +%include %{SOURCE1001} + +Source995: CHANGELOG.md + +BuildArch: noarch + +%if %{with html} +# Requirements for md2html.sh to build the documentation +%if 0%{?fedora} || 0%{?rhel} >= 9 +BuildRequires: rubygem-kramdown-parser-gfm +%else +BuildRequires: pandoc +BuildRequires: asciidoc +BuildRequires: highlight +%endif +%endif + +# Requirements for galaxy_transform.py +BuildRequires: python3 +BuildRequires: python%{python3_pkgversion}-ruamel-yaml + +# We must put %%description within the if block to avoid empty lines showing up. +%if 0%{?rhel} +%description +Collection of Ansible roles and modules that provide a stable and +consistent configuration interface for managing multiple versions +of Red Hat Enterprise Linux. +%else +%description +Collection of Ansible roles and modules that provide a stable and +consistent configuration interface for managing multiple versions +of Fedora, Red Hat Enterprise Linux & CentOS. +%endif + +%if %{with collection_artifact} +%package collection-artifact +Summary: Collection artifact to import to Automation Hub / Ansible Galaxy + +%description collection-artifact +Collection artifact for %{name}. This package contains %{collection_namespace}-%{collection_name}-%{version}.tar.gz +%endif + +# Fix issue with package update introduce with changing symlink to directory +# in 1.21.1-5 +%pretrans -p +roles = { + "certificate", "cockpit", "crypto_policies", "firewall", "ha_cluster", + "kdump", "kernel_settings", "logging", "metrics", "nbde_client", + "nbde_server", "network", "postfix", "selinux", "ssh", "sshd", "storage", + "timesync", "tlog", "vpn" +} +for i,v in ipairs(roles) do + path = "/usr/share/ansible/roles/linux-system-roles." .. v + st = posix.stat(path) + if st and st.type == "link" then + os.remove(path) + end +end + +%prep +# BEGIN AUTOGENERATED SETUP +%setup -q -a1 -a2 -a3 -a4 -a5 -a6 -a7 -a8 -a9 -a10 -a11 -a12 -a13 -a14 -a15 -a16 -a17 -a18 -a19 -a20 -a21 -a22 -a23 -a24 -n %{getarchivedir 0} +# END AUTOGENERATED SETUP + +%if 0%{?rhel} +# Untar vendored collection tarballs to corresponding directories +for file in %{SOURCE801} %{SOURCE901} %{SOURCE902}; do + if [[ "$(basename $file)" =~ ([^-]+)-([^-]+)-(.+).tar.gz ]]; then + ns=${BASH_REMATCH[1]} + name=${BASH_REMATCH[2]} + ver=${BASH_REMATCH[3]} + mkdir -p .external/$ns/$name + pushd .external/$ns/$name > /dev/null + tar xfz "$file" + popd > /dev/null + fi +done +%endif + +declare -A ROLESTODIR=(%{rolestodir}) +for rolename in %{rolenames}; do + dir_from_archive="${ROLESTODIR[${rolename}]}" + if [ ! -d "$dir_from_archive" ]; then + # ansible-sshd uses tags like vX.Y.Z + # using the github archive/ link with a tag like this strips + # the leading v from the tag used to construct the directory + # name in the archive + if [[ "$dir_from_archive" =~ %{repo15}-v([0-9]+[.][0-9]+.*) ]]; then + dir_from_archive="%{repo15}-${BASH_REMATCH[1]}" + fi + fi + mv "$dir_from_archive" ${rolename} +done + +%if 0%{?rhel} +cd %{rolename2}/tests +# this test causes avcs we want to ignore +sed -r -i -e '/hosts: all/a\ + tags:\ + - tests::avc' tests_selinux_disabled.yml +cd ../.. +%endif + +cd %{rolename15} +find -P tests examples -name \*.yml | while read file; do + sed -r -i -e "s/ansible-sshd/linux-system-roles.sshd/" \ + -e "s/ willshersystems.sshd/ linux-system-roles.sshd/" "$file" +done +sed -r -i -e "s/ willshersystems.sshd/ linux-system-roles.sshd/" README.md +sed -r -i -e "s/min_ansible_version: 2.8/min_ansible_version: 2.9/" meta/main.yml +cd .. + +cd %{rolename7} +# metrics roles dir is a symlink to the vendored dir. +# rpm upgrade doesn't like the symlink. Replace the +# symlink with the real dir +rolesdir=$(pwd)/roles +realrolesdir=$(realpath "$rolesdir") +if [ "$rolesdir" != "$realrolesdir" ]; then + rm -rf roles + mv "$realrolesdir" . + rm -rf vendor +fi +cd .. + +%if 0%{?rhel} +# Unpack tar.gz to retrieve to be vendored modules and place them in the roles library. +# ansible.posix: +# - library: +# - Module selinux and seboolean for the selinux role +# - Module mount for the storage role +declare -A module_map=( ["selinux.py"]="selinux" ["seboolean.py"]="selinux" ["mount.py"]="storage" ) +for module in "${!module_map[@]}"; do + role="${module_map[${module}]}" + if [ ! -d $role/library ]; then + mkdir $role/library + fi + cp -pL .external/ansible/posix/plugins/modules/$module $role/library/$module + sed -i -e ':a;N;$!ba;s/description:\n\( *\)/description:\n\1- WARNING: Do not use this module directly! It is only for role internal use.\n\1/' -e "s/ansible_collections.ansible.posix.plugins.module_utils/ansible.module_utils.${role}_lsr/" $role/library/$module +done + +# ansible.posix: +# - module_utils: +# - Module_util mount for the storage role +module_map=( ["mount.py"]="storage" ) +for module in "${!module_map[@]}"; do + role="${module_map[${module}]}" + if [ ! -d $role/module_utils/${role}_lsr ]; then + mkdir -p $role/module_utils/${role}_lsr + fi + cp -pL .external/ansible/posix/plugins/module_utils/$module $role/module_utils/${role}_lsr/$module +done + +# community.general: +# - library: +# - Module seport, sefcontext and selogin for the selinux role rolename2 +# - Module ini_file for role tlog +# - rhc modules +module_map=( ["seport.py"]="selinux" ["sefcontext.py"]="selinux" ["selogin.py"]="selinux" ["ini_file.py"]="tlog" + ["redhat_subscription.py"]="rhc" ["rhsm_release.py"]="rhc" ["rhsm_repository.py"]="rhc" ) +for module in "${!module_map[@]}"; do + role="${module_map[${module}]}" + if [ ! -d $role/library ]; then + mkdir $role/library + fi + # version 5.x seems to be broken? + moduledir=.external/community/general/plugins/modules + if [ ! -f $moduledir/$module ]; then + moduledir=.external/community/general/plugins/modules/system + fi + if [ ! -f $moduledir/$module ]; then + moduledir=.external/community/general/plugins/modules/files + fi + cp -pL $moduledir/$module $role/library/$module + ls -alrtF $role/library/$module + sed -i -e ':a;N;$!ba;s/description:\n\( *\)/description:\n\1- WARNING: Do not use this module directly! It is only for role internal use.\n\1/' $role/library/$module +done + +# Fix until the updated redhat_subscription.py is in community.general +cp %{SOURCE2301} rhc/library/redhat_subscription.py +sed -i -e ':a;N;$!ba;s/description:\n\( *\)/description:\n\1- WARNING: Do not use this module directly! It is only for role internal use.\n\1/' rhc/library/redhat_subscription.py + +# containers.podman: +# - library: +# - Module podman_container_info, podman_image and podman_play for the podman role +module_map=( ["podman_container_info.py"]="podman" ["podman_image.py"]="podman" ["podman_play.py"]="podman" ) +for module in "${!module_map[@]}"; do + role="${module_map[${module}]}" + if [ ! -d $role/library ]; then + mkdir $role/library + fi + moduledir=.external/containers/podman/plugins/modules + cp -pL $moduledir/$module $role/library/$module + ls -alrtF $role/library/$module + sed -i -e ':a;N;$!ba;s/description:\n\( *\)/description:\n\1- WARNING: Do not use this module directly! It is only for role internal use.\n\1/' \ + -e "s/ansible_collections.containers.podman.plugins.module_utils.podman/ansible.module_utils.${role}_lsr/" \ + $role/library/$module +done + +# containers.podman: +# - module_utils: +# - Module_util common for the podman role +module_map=( ["common.py"]="podman" ) +for module in "${!module_map[@]}"; do + role="${module_map[${module}]}" + if [ ! -d $role/module_utils/${role}_lsr ]; then + mkdir -p $role/module_utils/${role}_lsr + fi + cp -pL .external/containers/podman/plugins/module_utils/podman/$module $role/module_utils/${role}_lsr/$module +done + +# remove the temporary .external directory after vendoring +rm -rf .external + +# Replacing "linux-system-roles.rolename" with "rhel-system-roles.rolename" in each role +# Replacing "fedora.linux_system_roles." with "redhat.rhel_system_roles" in each role +# This is for the "roles calling other roles" case +# for podman, change the FQCN - using a non-FQCN module name doesn't seem to work, +# even for the legacy role format +# replace community.general for rhc +for rolename in %{rolenames}; do + find $rolename -type f -exec \ + sed -e "s/linux-system-roles[.]${rolename}\\>/%{roleinstprefix}${rolename}/g" \ + -e "s/fedora[.]linux_system_roles[.]/%{collection_namespace}.%{collection_name}./g" \ + -e "s/containers[.]podman[.]/%{collection_namespace}.%{collection_name}./g" \ + -e "s/community[.]general[.]/%{collection_namespace}.%{collection_name}./g" \ + -i {} \; +done +%endif + +# Removing symlinks in tests/roles +for rolename in %{rolenames}; do + if [ -d ${rolename}/tests/roles ]; then + find ${rolename}/tests/roles -type l -exec rm {} \; + if [ -d ${rolename}/tests/roles/linux-system-roles.${rolename} ]; then + rm -r ${rolename}/tests/roles/linux-system-roles.${rolename} + fi + fi +done +rm %{rolename5}/tests/modules +rm %{rolename5}/tests/module_utils +rm %{rolename5}/tests/playbooks/roles +# Drop network/{scripts/print_all_options.py,tests/ensure_provider_tests.py} +# from rpm. These 2 files fail in brp-python-bytecompile due to f-strings +# when python2 is default python. +rm %{rolename5}/scripts/print_all_options.py +rm %{rolename5}/tests/ensure_provider_tests.py +# Drop storage tests/scripts +rm -rf %{rolename6}/tests/scripts + +# transform ambiguous #!/usr/bin/env python shebangs to python3 to stop brp-mangle-shebangs complaining +find -type f -executable -name '*.py' -exec \ + sed -i -r -e '1s@^(#! */usr/bin/env python)(\s|$)@#\13\2@' '{}' + + +%build +%if %{with html} +readmes="" +for role in %{rolenames}; do + readmes="${readmes} $role/README.md" +done +sh md2html.sh $readmes +%endif + +mkdir .collections +%if 0%{?rhel} +# Convert the upstream collection readme to the downstream one +%{SOURCE998} lsr_role2collection/collection_readme.md +./galaxy_transform.py "%{collection_namespace}" "%{collection_name}" "%{collection_version}" \ + "Red Hat Enterprise Linux System Roles Ansible Collection" \ + "https://linux-system-roles.github.io" \ + "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/administration_and_configuration_tasks_using_system_roles_in_rhel" \ + "https://access.redhat.com/articles/3050101" \ + "https://bugzilla.redhat.com/enter_bug.cgi?product=Red%20Hat%20Enterprise%20Linux%208&component=rhel-system-roles" \ + > galaxy.yml.tmp +# we vendor-in all of the dependencies on rhel, so remove them +rm -f lsr_role2collection/collection_requirements.txt +# but leave bindep.txt +%else +./galaxy_transform.py "%{collection_namespace}" "%{collection_name}" "%{collection_version}" \ + "Linux System Roles Ansible Collection" \ + > galaxy.yml.tmp +%endif +mv galaxy.yml.tmp galaxy.yml + +includes="" +for role in %{rolenames}; do + includes="$includes --include $role" +%if 0%{?rhel} + # we vendor-in all of the dependencies on rhel, so remove them + rm -f "$role/meta/requirements.yml" "$role/meta/collection-requirements.yml" \ + "$role/tests/collection-requirements.yml" +%endif +done + +# do not process changelogs on RHEL +%if 0%{?rhel} +extra_mapping="--extra-mapping fedora.linux_system_roles:%{collection_namespace}.%{collection_name}" +%else +extra_mapping="" +%endif +LANG=C.utf-8 LC_ALL=C.utf-8 python3 release_collection.py --galaxy-yml galaxy.yml \ + --src-path $(pwd) --dest-path $(pwd)/.collections $includes --force --no-update \ + --src-owner %{name} --skip-git --skip-check --skip-changelog $extra_mapping --debug + +# Remove table of contents from logging README.md +# It is not needed for html and AH/Galaxy +sed -i -e 's/^\(## Table of Contents\)/## Background\n\1/' \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/roles/logging/README.md +sed -i -e '/^## Table of Contents/,/^## Background/d' \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/roles/logging/README.md + +# Remove internal links from readme files +# They are not rendered properly on AH. +for role in %{rolenames}; do + sed -r -i -e 's/\[([^[]+)\]\(#[^)]+\)/\1/g' \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/roles/$role/README.md +done + +# Remove test only collection dependencies +# NOTE: These should not be in meta/collection-requirements.yml, they should be +# in tests/collection-requirements.yml, but they can't be moved yet +sed -i -e '/community[.]mysql:/d' -e '/community[.]postgresql:/d' \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/galaxy.yml + +cp %{SOURCE995} \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/docs/CHANGELOG.md +%if 0%{?rhel} +cp %{SOURCE996} \ + .collections/ansible_collections/%{collection_namespace}/%{collection_name}/CHANGELOG.rst +%endif + +# Build the collection +pushd .collections/ansible_collections/%{collection_namespace}/%{collection_name}/ +%ansible_collection_build +popd + +%install +mkdir -p %{buildroot}%{ansible_roles_dir} + +for role in %{rolenames}; do + cp -pR "$role" "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role" +done + +%if 0%{?rhel} +# Create symlinks for roles in /usr/share/ansible/roles/linux-system-roles.$rolename +# That's required to make roles work with upstream naming too +for role in %{rolenames}; do + ln -s "%{name}.$role" "%{buildroot}%{ansible_roles_dir}/linux-system-roles.$role" +done +%endif + +mkdir -p %{buildroot}%{_pkglicensedir} +rm %{buildroot}%{ansible_roles_dir}/%{roleinstprefix}network/examples/roles +for role in %{rolenames}; do + mkdir -p "%{buildroot}%{_pkgdocdir}/$role" + ln -sr "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/CHANGELOG.md" \ + "%{buildroot}%{_pkgdocdir}/$role" + ln -sr "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/README.md" \ + "%{buildroot}%{_pkgdocdir}/$role" +%if %{with html} + ln -sr "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/README.html" \ + "%{buildroot}%{_pkgdocdir}/$role" +%endif + if [ -f "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/COPYING" ]; then + ln -sr "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/COPYING" \ + "%{buildroot}%{_pkglicensedir}/$role.COPYING" + fi + if [ -f "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/LICENSE" ]; then + ln -sr "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/LICENSE" \ + "%{buildroot}%{_pkglicensedir}/$role.LICENSE" + fi + if [ -d "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples" ]; then + for file in "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples/"*.yml ; do + basename=$(basename "$file" .yml) + newname="$basename" + if [[ "$newname" != example-* ]]; then + newname="example-$newname" + fi + if [[ "$newname" != *-playbook ]]; then + newname="${newname}-playbook" + fi + cp "$file" "%{buildroot}%{_pkgdocdir}/$role/${newname}.yml" + rm "$file" + done + if [ -f "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples/inventory" ]; then + cp "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples/inventory" \ + "%{buildroot}%{_pkgdocdir}/$role/example-inventory" + rm "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples/inventory" + fi + # special case for network + # this will error if the directory is unexpectedly empty + rmdir "%{buildroot}%{ansible_roles_dir}/%{roleinstprefix}$role/examples" + fi +done + +rm %{buildroot}%{ansible_roles_dir}/%{roleinstprefix}*/semaphore +rm -r %{buildroot}%{ansible_roles_dir}/%{roleinstprefix}*/molecule + +rm -r %{buildroot}%{ansible_roles_dir}/%{roleinstprefix}*/.[A-Za-z]* +rm %{buildroot}%{ansible_roles_dir}/%{roleinstprefix}*/tests/.git* + +# NOTE: sshd/examples/example-root-login.yml is +# referenced in the configuring-openssh-servers-using-the-sshd-system-role documentation module +# must be updated if changing the file path + +# Install the collection +pushd .collections/ansible_collections/%{collection_namespace}/%{collection_name}/ +%ansible_collection_install +popd + +mkdir -p %{buildroot}%{_pkgdocdir}/collection +mkdir -p %{buildroot}%{_pkgdocdir}/collection/roles + +ln -sr %{buildroot}%{ansible_collection_files}%{collection_name}/README.md \ + %{buildroot}%{_pkgdocdir}/collection + +for rolename in %{rolenames}; do + for file in CHANGELOG.md README.md; do + if [ -f %{buildroot}%{ansible_collection_files}%{collection_name}/roles/${rolename}/$file ]; then + if [ ! -d %{buildroot}%{_pkgdocdir}/collection/roles/${rolename} ]; then + mkdir -p %{buildroot}%{_pkgdocdir}/collection/roles/${rolename} + fi + ln -sr %{buildroot}%{ansible_collection_files}%{collection_name}/roles/${rolename}/$file \ + %{buildroot}%{_pkgdocdir}/collection/roles/${rolename} + fi + done +done + +%if %{with html} +# converting README.md to README.html for collection in %%{buildroot}%%{_pkgdocdir}/collection +readmes="%{buildroot}%{_pkgdocdir}/collection/README.md" +for role in %{rolenames}; do + readmes="${readmes} %{buildroot}%{_pkgdocdir}/collection/roles/${role}/README.md" +done +sh md2html.sh $readmes +%endif + +%if %{with collection_artifact} +# Copy collection artifact to /usr/share/ansible/collections/ for collection-artifact +pushd .collections/ansible_collections/%{collection_namespace}/%{collection_name}/ + mv %{collection_namespace}-%{collection_name}-%{version}.tar.gz \ + %{buildroot}%{_datadir}/ansible/collections/ +popd +%endif + +# Generate the %%files section in files_section.txt +# Bulk files inclusion is not possible because roles store doc and licence +# files together with other files +format_item_for_files() { + # $1 is directory or file name in buildroot + # $2 - if true, and item is a directory, use %%dir + local item + local files_item + item="$1" # full path including buildroot + files_item=${item##"%{buildroot}"} # path with cut buildroot to be added to %%files + if [ -L "$item" ]; then + echo "$files_item" + elif [ -d "$item" ]; then + if [[ "$item" == */doc* ]]; then + echo "%doc $files_item" + elif [ "${2:-false}" = true ]; then + echo "%dir $files_item" + else + echo "$files_item" + fi + elif [[ "$item" == */README.md ]] || [[ "$item" == */README.html ]] || [[ "$item" == */CHANGELOG.md ]]; then + if [[ "$item" == */private_* ]]; then + # mark as regular file, not %%doc + echo "$files_item" + else + echo "%doc $files_item" + fi + elif [[ "$item" == */COPYING* ]] || [[ "$item" == */LICENSE* ]]; then + echo "%""%""license" "$files_item" + else + echo "$files_item" + fi +} + +files_section=files_section.txt +rm -f $files_section +touch $files_section +# Dynamically generate files section entries for %%{ansible_collection_files} +find %{buildroot}%{ansible_collection_files}%{collection_name} -mindepth 1 -maxdepth 1 | \ + while read item; do + if [[ "$item" == */roles ]]; then + format_item_for_files "$item" true >> $files_section + find "$item" -mindepth 1 -maxdepth 1 | while read roles_dir; do + format_item_for_files "$roles_dir" true >> $files_section + find "$roles_dir" -mindepth 1 -maxdepth 1 | while read roles_item; do + format_item_for_files "$roles_item" >> $files_section + done + done + else + format_item_for_files "$item" >> $files_section + fi + done + +# Dynamically generate files section entries for %%{ansible_roles_dir} +find %{buildroot}%{ansible_roles_dir} -mindepth 1 -maxdepth 1 | \ + while read item; do + if [ -d "$item" ]; then + format_item_for_files "$item" true >> $files_section + find "$item" -mindepth 1 -maxdepth 1 | while read roles_item; do + format_item_for_files "$roles_item" >> $files_section + done + else + format_item_for_files "$item" >> $files_section + fi + done + +%files -f files_section.txt +%dir %{_datadir}/ansible +%dir %{ansible_roles_dir} +%dir %{ansible_collection_files} +%dir %{ansible_collection_files}%{collection_name} +%doc %{_pkgdocdir} +%license %{_pkglicensedir} + +%if 0%{?rhel} && 0%{?rhel} < 8 +# Needs to list excluded files in this hardcoded style since when +# format_item_for_files is executed, brp-python-bytecompile is not +# executed yet. +%exclude %{ansible_roles_dir}/*/*.py? +%exclude %{ansible_roles_dir}/*/*/*.py? +%exclude %{ansible_roles_dir}/*/*/*/*.py? +%exclude %{ansible_roles_dir}/*/*/*/*/*.py? +%exclude %{ansible_collection_files}/%{collection_name}/*/*/*.py? +%exclude %{ansible_collection_files}/%{collection_name}/*/*/*/*.py? +%exclude %{ansible_collection_files}/%{collection_name}/*/*/*/*/*.py? +%endif + +%if %{with collection_artifact} +%files collection-artifact +%{_datadir}/ansible/collections/%{collection_namespace}-%{collection_name}-%{version}.tar.gz +%endif + +%changelog +* Thu Mar 16 2023 Rich Megginson - 1.21.1-1 +- Resolves:rhbz#2144877 : rhc - new role for subscription management/registration/insights +- includes the fix for tests_proxy.yml selinux and some test refactoring + +* Wed Feb 22 2023 Rich Megginson - 1.21.0-2 +- Resolves:rhbz#2144877 : rhc - new role for subscription management/registration/insights +- remove role until https://bugzilla.redhat.com/show_bug.cgi?id=2171829 is fixed + +* Mon Feb 20 2023 Rich Megginson - 1.21.0-1 +- Resolves:rhbz#2168733 : network - RedHat Role rhel-system-roles.network should route traffic via correct bond + +* Thu Feb 16 2023 Rich Megginson - 1.21.0-0.19 +- Resolves:rhbz#2144877 : rhc - new role for subscription management/registration/insights +- vendor in modules required by rhc role +- Resolves:rhbz#2167941 : ha_cluster - Fix stonith watchdog timeout + +* Wed Feb 15 2023 Rich Megginson - 1.21.0-0.18 +- Resolves:rhbz#2144877 : rhc - new role for subscription management/registration/insights +- ad_integration - fix issue with using the network role to configure DNS + +* Thu Feb 09 2023 Rich Megginson - 1.21.0-0.17 +- Resolves:rhbz#2164879 : selinux - managing modules is not idempotent +- Fix nbde_server test issue + +* Fri Feb 03 2023 Rich Megginson - 1.21.0-0.16 +- Resolves:rhbz#2165176 : journald - New role - journald - manage systemd-journald +- Resolves:rhbz#2159972 : nbde_client - nbde_client_clevis fails with a traceback and prints sensitive data +- Resolves:rhbz#2164879 : selinux - managing modules is not idempotent +- fix storage tests_swap and tests_misc - swap size < 128GB on EL7 +- fix podman general-meta issue +- ha_cluster non-x86_64 tests issue +- certificate non-x86_64 tests issue + +* Fri Jan 20 2023 Rich Megginson - 1.21.0-0.15 +- Resolves:rhbz#2162788 : network - role should support running tests with ANSIBLE_GATHERING=explicit +- Resolves:rhbz#2149683 : Synchronize automation-related changes from Fedora spec file +- Fix ansible-test issues in several roles +- Fix nbde_server tang test failure + +* Fri Jan 13 2023 Rich Megginson - 1.21.0-0.14 +- Resolves:rhbz#2143814 : ha_cluster - Allow quorum device configuration +- Resolves:rhbz#2153081 : ha_cluster - Allow enabled SBD on disabled cluster +- Resolves:rhbz#2127497 : ha_cluster - use no_log in tasks looping over pot. secret parameters +- community.general 6.2.0 +- replace community.general with namespace.name for rhc role + +* Thu Dec 15 2022 Rich Megginson - 1.21.0-0.13 +- Resolves:rhbz#2151355 : storage - [RHEL8] disks_needed need to be set for the raid test cases +- Resolves:rhbz#2154143 : storage - [RHEL8] tests_create_thinp_then_remove_scsi_generated.yml failed at "assertion": "(storage_test_expected_size|int - storage_test_actual_size.bytes)|abs / storage_test_expected_size|int < 0.01" +- Resolves:rhbz#2151342 : storage - [RHEL9] ansible.parsing.yaml.objects.AnsibleUnicode object' has no attribute 'bytes' +- Resolves:rhbz#2151351 : storage - [RHEL9 system role] storage role vdo tests failed about "VDO deduplication is off but it should not" + +* Thu Dec 15 2022 Rich Megginson - 1.21.0-0.12 +- Resolves:rhbz#2153080 - tlog - Unconditionally enable the files provider + +* Tue Dec 13 2022 Rich Megginson - 1.21.0-0.11 +- Resolves:rhbz#2130362 : logging - [RFE] convert logging role to use firewall, selinux role, and certificate role + fix basic-smoke-test failures + +* Mon Dec 12 2022 Rich Megginson - 1.21.0-0.10 +- Resolves:rhbz#2130019 : ha_cluster - [RFE] convert ha_cluster role to use firewall, selinux and certificate role +- Resolves:rhbz#2143458 : network - Support cloned MAC address +- Resolves:rhbz#2066864 : podman - [RFE] role for managing podman containers and systemd + +* Tue Dec 06 2022 Rich Megginson - 1.21.0-0.9 +- Resolves:rhbz#2144876 : ad_integration - [RFE] new role to support AD integration, join to AD domain + +* Mon Dec 05 2022 Rich Megginson - 1.21.0-0.8 +- Resolves:rhbz#2130362 : logging - [RFE] convert logging role to use firewall, selinux role, and certificate role + fix tests - tests_relp now uses logging_purge_confs + +* Tue Nov 29 2022 Rich Megginson - 1.21.0-0.7 +- Resolves:rhbz#2126960 : nbde_client - must handle clevis-luks-askpass and clevis-luks-askpass@ systemd unit names + +* Tue Nov 29 2022 Rich Megginson - 1.21.0-0.6 +- Resolves:rhbz#2133931 : nbde_server - [RFE] convert nbde_server role to use firewall and selinux role + previous fix was not complete - needed additional fixes - ansible-lint 6.x fixes + +* Tue Nov 22 2022 Rich Megginson - 1.21.0-0.5 +- Resolves:rhbz#2137667 : cockpit - [RFE] convert cockpit role to use firewall, selinux role, and certificate role +- Resolves:rhbz#2130362 : logging - [RFE] convert logging role to use firewall, selinux role, and certificate role +- Resolves:rhbz#2133532 : metrics - [RFE] convert metrics role to use firewall and selinux role +- Resolves:rhbz#2133931 : nbde_server - [RFE] convert nbde_server role to use firewall and selinux role +- Resolves:rhbz#2130332 : postfix - [RFE] convert postfix role to use firewall and selinux role +- Resolves:rhbz#2119600 : vpn - Add parameters shared_key_content, ike, esp, type, leftid, rightid +- Resolves:rhbz#2130345 : vpn - [RFE] convert vpn role to use firewall and selinux role + +* Tue Nov 22 2022 Rich Megginson - 1.21.0-0.4.podman +- Resolves:rhbz#2066864 : podman - [RFE] role for managing podman containers and systemd + +* Tue Nov 22 2022 Rich Megginson - 1.21.0-0.3.ssh_sshd_selinux_timesync +- Resolves:rhbz#2143385 : selinux - add support for the 'local' parameter +- Resolves:rhbz#2143401 : sshd,ssh,timesync - Unexpected templating type error - expected str instance, int found +- Resolves:rhbz#2130921 : ssh,sshd - Sync on final OpenSSH option name RequiredRSASize in ssh and sshd roles [rhel-8.7] [rhel-8.8.0] + +* Tue Nov 15 2022 Rich Megginson - 1.21.0-0.2.network +- Resolves:rhbz#2134201 : network - [RFE] Support setting the metric of the default route for initscripts provider +- Resolves:rhbz#2133856 : network - [RFE] Support the DNS priority +- Resolves:rhbz#2129620 : network - Support looking up named route table in routing rule +- includes ha_cluster, vpn - README.md had headings that were too long causing problems + for md to adoc to html conversion on el8 +- includes changing network role to support ansible-core 2.14 +- includes community.general 6.0.1 +- adds back network bondtests patch - bond tests still failing in beaker + +* Tue Aug 09 2022 Rich Megginson - 1.20.0-1 +- Resolves:rhbz#2115159 : cockpit - Add customization of port +- Resolves:rhbz#2100939 : firewall - RFE: firewall-system-role: add ability to add interface to zone by PCI device ID +- Resolves:rhbz#2115160 : firewall - support for firewall_config - gather firewall facts +- Resolves:rhbz#2112143 : logging - [RFE] Support startmsg.regex and endmsg.regex in the files inputs +- Resolves:rhbz#2115162 : selinux - Added setting of seuser and selevel for completeness +- Resolves:rhbz#2115161 : nbde_client - Sets proper spacing for parameter rd.neednet=1 +- Resolves:rhbz#2115884 : network - fix IPRouteUtils.get_route_tables_mapping() to accept any whitespace sequence +- Resolves:rhbz#2109997 : ssh sshd - ssh, sshd: RSAMinSize parameter definition is missing +- Resolves:rhbz#2082391 : storage - [RHEL8] [WARNING]: The loop variable 'storage_test_volume' is already in use. You should set the `loop_var` value in the `loop_control` option for the task to something else to avoid variable collisions and unexpected behavior. + +* Fri Jul 01 2022 Rich Megginson - 1.19.3-1 +- min_ansible_version is string instead of float + +- fix storage test failures + +- support for ansible-core 2.13 + +- firewall - forward_port should accept list of string or list of dict + Resolves: rhbz#2101607 + +- firewall - support add/modify/delete services + Resolves: rhbz#2100297 + +- metrics - document minimum supported redis version required by rhel-system-roles + Resolves: rhbz#2100285 + +- metrics - restart pmie, pmlogger if changed, do not wait for handler + Resolves: rhbz#2100298 + +- network - Support managing the network through nmstate schema + Resolves: rhbz#2100979 + +- storage - support for adding/removing disks to/from storage pools + Resolves: rhbz#2066880 + +- storage - support for attaching cache volumes to existing volumes + Resolves: rhbz#2066881 + +* Wed Jun 15 2022 Rich Megginson - 1.19.2-1 +- sshd - fix ansible 2.9 support in meta/main.yml + Resolves: rhbz#2086935 (8.7.0) + +* Mon Jun 13 2022 Rich Megginson - 1.19.1-1 +- storage - fix coverity scan issue in blivet.py + Resolves: rhbz#2066876 (8.7.0) + +- logging - fix gather_facts/set_vars issue + Resolves: rhbz#2079008 (8.7.0) + +- ha_cluster - Move tasks that set up CI environment to roles tasks/ dir + Resolves: rhbz#2093500 (8.7.0) + +- sshd - fix tests issue with rhel9 hosts + +* Mon Jun 06 2022 Rich Megginson - 1.19.0-1 +- storage - support for creating and managing LVM thin pools/LVs + Resolves: rhbz#2066876 (8.7.0) + +- firewall - Update Ansible syntax in Firewall system role README.md file examples + Resolves: rhbz#2081839 (8.7.0) + +- storage role raid_level "striped" is not supported + Resolves: rhbz#2083426 (8.7.0) + +- network: the controller device is not completely cleaned up in the bond tests. + Resolves: rhbz#2089868 (8.7.0) + +- firewall - state no longer required for masquerade and ICMP block inversion + Resolves: rhbz#2093437 (8.7.0) + +- ha_cluster - Move tasks that set up CI environment to roles tasks/ dir + Resolves: rhbz#2093500 (8.7.0) + +* Thu May 26 2022 Rich Megginson - 1.18.0-1 +- firewall - [Improvement] Allow System Role to reset to default Firewalld Settings + Resolves: rhbz#2043009 (8.7.0) + +- metrics - [RFE] add an option to the metrics role to enable postfix metric collection + Resolves: rhbz#2079114 (8.7.0) + +- network - Rework the infiniband support + Resolves: rhbz#2086869 (8.7.0) + +- sshd - recurse into tests and examples sub-directories when replacing string in files + the sshd role latest version added sub-directories under tests that need + role name replacement - so just use find + +- sshd - sshd system role should not assume that RHEL 9 /etc/ssh/sshd_config has "Include > /etc/ssh/sshd_config.d/*.conf" + Resolves: rhbz#2086934 (8.7.0) + +- sshd - sshd system role should be able to optionally manage /etc/ssh/sshd_config on RHEL 9 + Resolves: rhbz#2086935 (8.7.0) + +- storage - storage role cannot set mount_options for volumes + Resolves: rhbz#2083378 (8.7.0) + +* Mon Apr 25 2022 Rich Megginson - 1.17.0-1 +- All roles should support running with gather_facts: false + Resolves: rhbz#2079008 (8.7.0) + +- firewall - Firewall system role Ansible deprecation warning related to "include" + Resolves: rhbz#2078650 (8.7.0) + +- ha_cluster - ha_cluster - support advanced corosync configuration + Resolves: rhbz#2065339 (8.7.0) + +- ha_cluster - ha_cluster - support SBD fencing + Resolves: rhbz#2066868 (8.7.0) + +- ha_cluster - ha_cluster - add support for configuring bundle resources + Resolves: rhbz#2073518 (8.7.0) + +- kernel_settings - kernel_settings error configobj not found on RHEL 8.6 managed hosts + Resolves: rhbz#2060378 (8.7.0) + +- logging - logging tests fail during cleanup if no cloud-init on system + Resolves: rhbz#2058807 (8.7.0) + +- logging - Logging - RFE - support template, severity and facility options + Resolves: rhbz#2075116 (8.7.0) + +- metrics - Metrics role, with "metrics_from_mssql" option does not configure /var/lib/pcp/pmdas/mssql/mssql.conf on first run + Resolves: rhbz#2060377 (8.7.0) + +- metrics - metrics - consistently use ansible_managed in configuration files managed by role + Resolves: rhbz#2065215 (8.7.0) + +- metrics - [RFE] add an option to the metrics role to enable postfix metric collection + Resolves: rhbz#2079114 (8.7.0) + +- nbde_client - NBDE client system role does not support servers with static IP addresses + Resolves: rhbz#2071011 (8.7.0) + +- network - [RFE] Extend rhel-system-roles.network feature set to support routing rules + Resolves: rhbz#1996731 (8.7.0) + +- network - bond: fix typo in supporting the infiniband ports in active-backup mode + Resolves: rhbz#2064067 (8.7.0) + +- network - pytest failed when running with nm providers in the rhel-8.5 beaker machine + Resolves: rhbz#2065217 (8.7.0) + +- network - network - consistently use ansible_managed in configuration files managed by role + Resolves: rhbz#2065670 (8.7.0) + +- postfix - postfix - consistently use ansible_managed in configuration files managed by role + Resolves: rhbz#2065216 (8.7.0) + +- postfix - Postfix RHEL System Role should provide the ability to replace config and reset configuration back to default + Resolves: rhbz#2065218 (8.7.0) + +- sshd - FIPS mode detection in SSHD role is wrong + Resolves: rhbz#2075338 (8.7.0) + +- storage - RFE storage Less verbosity by default + Resolves: rhbz#2056480 (8.7.0) + +- timesync - timesync: basic-smoke test failure in timesync/tests_ntp.yml + Resolves: rhbz#2060379 (8.7.0) + +- tlog - Tlog role - Enabling session recording configuration does not work due to RHEL9 SSSD files provider default + Resolves: rhbz#2072749 (8.7.0) + +* Thu Apr 07 2022 Rich Megginson - 1.16.3-1 +- tlog - Enabling session recording configuration does not work due to RHEL9 SSSD files provider default + Resolves rhbz#2072749 (EL8) + Resolves rhbz#2071804 (EL9) + +* Wed Apr 06 2022 Sergei Petrosian - 1.16.2-2 +- Update community.general + +* Thu Mar 31 2022 Rich Megginson - 1.16.2-1 +- nbde_client - NBDE client system role does not support servers with static IP addresses + previous fix did not handle some other cases + Resolves rhbz#1985022 (EL8) + Resolves rhbz#2031555 (EL9) + +* Tue Mar 29 2022 Rich Megginson - 1.16.1-1 +- nbde_client - NBDE client system role does not support servers with static IP addresses + previous fix did not handle some cases + Resolves rhbz#1985022 (EL8) + Resolves rhbz#2031555 (EL9) + +* Tue Mar 22 2022 Sergei Petrosian - 1.16.0-2 +- Update community.general + +* Tue Mar 15 2022 Rich Megginson - 1.16.0-1 +- network - pytest failed when running with nm providers in the rhel-8.5 beaker machine + Resolves rhbz#2064396 (EL8) + Resolves rhbz#2064401 (EL9) +- network - bond: fix typo in supporting the infiniband ports in active-backup modekernel_settings error configobj not found on RHEL 8.6 managed hosts + Resolves rhbz#2064388 (EL8) + Resolves rhbz#2064391 (EL9) +- network - consistently use ansible_managed in configuration files managed by role + Resolves rhbz#2057656 (EL8) + Resolves rhbz#2057657 (EL9) +- metrics - consistently use ansible_managed in configuration files managed by role + Resolves rhbz#2057645 (EL8) + Resolves rhbz#2057647 (EL9) +- postfix - consistently use ansible_managed in configuration files managed by role + Resolves rhbz#2057661 (EL8) + Resolves rhbz#2057662 (EL9) +- postfix - provide the ability to replace config and reset configuration back to default + Resolves rhbz#2044657 (EL8) + Resolves rhbz#2058780 (EL9) +- new tags required in galaxy.yml for Automation Hub + +* Thu Mar 3 2022 Rich Megginson - 1.15.1-1 +- kernel_settings error configobj not found on RHEL 8.6 managed hosts + Resolves rhbz#2058772 (EL8) + Resolves rhbz#2058756 (EL9) +- timesync: basic-smoke test failure in timesync/tests_ntp.yml + Resolves rhbz#2059293 (EL8) + Resolves rhbz#2058645 (EL9) + +* Tue Mar 1 2022 Noriko Hosoi - 1.15.0-2 +- metrics - follow symlinks for the mssql and elasticsearch configuration paths + Resolves rhbz#2058655 (EL8) + Resolves rhbz#2058777 (EL9) + +* Thu Feb 24 2022 Rich Megginson - 1.15.0-1 +- firewall - ensure target changes take effect immediately + Resolves rhbz#2057172 (EL8) + Resolves rhbz#2057164 (EL9) +- firewall - Firewall RHEL System Role should be able to set default zone + Resolves rhbz#2022458 (EL8) + Resolves rhbz#2022461 (EL9) +- network - tests_802_1x_nm, tests_802_1x_updated_nm fails because of missing hostapd in EPEL + Resolves rhbz#2053862 (EL8) + Resolves rhbz#2053861 (EL9) + +* Mon Feb 14 2022 Rich Megginson - 1.14.0-1 +- ha_cluster - set permissions for haclient group + Resolves rhbz#2049747 (EL8) + Resolves rhbz#2049754 (EL9) +- network - Add more bonding options to rhel-system-roles.network + Resolves rhbz#2008931 (EL8) + Resolves rhbz#2054435 (EL9) +- certificate - should consistently use ansible_managed in hook scripts + Resolves rhbz#2054364 (EL8) + Resolves rhbz#2054368 (EL9) +- tlog - consistently use ansible_managed in configuration files managed by role + Resolves rhbz#2054363 (EL8) + Resolves rhbz#2054367 (EL9) +- vpn - consistently use ansible_managed in configuration files managed by role + Resolves rhbz#2054365 (EL8) + Resolves rhbz#2054369 (EL9) + +* Tue Feb 8 2022 Rich Megginson - 1.13.1-1 +- vpn - template error while templating string: no filter named 'vpn_ipaddr' + Resolves rhbz#2052103 (EL8) + Resolves rhbz#2050341 (EL9) +- kdump - Unable to start service kdump: Job for kdump.service failed because the control process exited with error code. + Resolves rhbz#2052105 (EL8) + Resolves rhbz#2050419 (EL9) +- remove collection dependencies on rhel because we vendor them in + +* Tue Feb 1 2022 Rich Megginson - 1.13.0-1 +- storage - RFE: Add support for RAID volumes (lvm-only) + Resolves rhbz#2016514 (EL8) + Resolves rhbz#2016518 (EL9) +- storage - RFE: Add support for cached volumes (lvm-only) + Resolves rhbz#2016511 (EL8) + Resolves rhbz#2016517 (EL9) +- metrics - metrics role can't be re-run if the Grafana admin password has been changed + Resolves rhbz#1967321 (EL8) + Resolves rhbz#2041632 (EL9) +- nbde_client - NBDE client system role does not support servers with static IP addresses + Resolves rhbz#1985022 (EL8) + Resolves rhbz#2031555 (EL9) +- ha_cluster - [RFE] ha_cluster - Support for creating resource constraints (Location, Ordering, etc.) + Resolves rhbz#2041635 (EL8) + Resolves rhbz#2041634 (EL9) +- firewall - ensure zone exists and can be used in subsequent operations + Resolves rhbz#2042541 (EL8) + Resolves rhbz#2024775 (EL9) +- network - RFE: Support Routing Tables in static routes in Network Role + Resolves rhbz#2031521 (EL8) + Resolves rhbz#2049798 (EL9) +- network - Failure to activate connection: nm-manager-error-quark: No suitable device found for this connection + Resolves rhbz#2034908 (EL8) + Resolves rhbz#2038957 (EL9) +- network - Set DNS search setting only for enabled IP protocols + Resolves rhbz#2041627 (EL8) + Resolves rhbz#2004899 (EL9) + +* Thu Jan 27 2022 Rich Megginson - 1.12.0-1 +- vpn - use custom vpn_ipaddr filter to make role work on RHEL 8.6 with ansible-core + this is covered by "make roles work with ansible-core on all platforms" BZ +- logging - Logging role "logging_purge_confs" option not properly working + Resolves rhbz#2040812 (EL8) + Resolves rhbz#2039106 (EL9) +- kernel_settings role should use ansible_managed in its configuration file + Resolves rhbz#2047504 (EL8) + Resolves rhbz#2047506 (EL9) + +* Thu Jan 20 2022 Fedora Release Engineering - 1.11.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Dec 14 2021 Rich Megginson - 1.11.0-2 +- RHEL8.6, 9 - add "Requires: ansible-core or ansible" + +* Thu Dec 2 2021 Rich Megginson - 1.11.0-1 +- timesync - fix ansible 2.12 issues, service_facts issues + Resolves rhbz#2012316 (EL8) + Resolves rhbz#2012298 (EL9) +- timesync - Failure related to missing ntp/ntpd package/service on RHEL-9 host + Resolves rhbz#2029463 (EL9) +- logging - add test case for immark quoting issue + Resolves rhbz#2021678 (EL8) + Resolves rhbz#2021676 (EL9) +- cockpit - use existing cert - cockpit_cert, cockpit_private_key + Resolves rhbz#2021661 (EL8) + Resolves rhbz#2021028 (EL9) +- storage - fix ansible 2.12 issues, service_facts issues; workaround lvm, udev issues in tests + Resolves rhbz#2012316 (EL8) + Resolves rhbz#2012298 (EL9) +- ssh - tests_all_options.yml: "assertion": "'StdinNull yes' in config.content | b64decode ", failure + Resolves rhbz#2029614 (EL8) + Resolves rhbz#2029427 (EL9) +- kdump - support reboot required and reboot ok + Resolves rhbz#2029605 (EL8) + Resolves rhbz#2029602 (EL9) +- metrics - sync with latest ansible-pcp + Resolves rhbz#2012316 (EL8) + Resolves rhbz#2012298 (EL9) +- sshd - should detect FIPS mode and handle tasks correctly in FIPS mode + Resolves rhbz#1979714 (EL8) + Resolves rhbz#2029634 (EL9) + +* Mon Nov 8 2021 Rich Megginson - 1.10.0-1 +- add cockpit role + Resolves rhbz#2021661 (EL8) + Resolves rhbz#2021028 (EL9) +- add firewall role + Resolves rhbz#1854988 (EL8) + Resolves rhbz#2021665 (EL9) +- firewall - add ability to add-source + Resolves rhbz#1932678 (EL8) + Resolves rhbz#2021667 (EL9) +- firewall - allow user defined zones + Resolves rhbz#1850768 (EL8) + Resolves rhbz#2021669 (EL9) +- firewall - allow specifying the zone + Resolves rhbz#1850753 (EL8) + Resolves rhbz#2021670 (EL9) +- updates for ansible 2.12 support + Resolves rhbz#2012316 (EL8) + Resolves rhbz#2012298 (EL9) +- update community.general to 4.0.1 + Resolves rhbz#2006081 (EL8) + Resolves rhbz#2006076 (EL9) +- network - Allow to specify PCI address to configure profiles + Resolves rhbz#1695634 (EL8) + Resolves rhbz#1999162 (EL9) +- network - support wifi Enhanced Open (OWE) + Resolves rhbz#1993379 (EL8) + Resolves rhbz#1993377 (EL9) +- network - support WPA3 Simultaneous Authentication of Equals(SAE) + Resolves rhbz#1993311 (EL8) + Resolves rhbz#1993304 (EL9) +- network - RFE: Support ignoring default gateway retrieved by DHCP/IPv6-RA + Resolves rhbz#1897565 (EL8) + Resolves rhbz#1978773 (EL9) +- network - Update network system role to reflect that network teaming is deprecated in RHEL 9 + Resolves rhbz#1897565 (EL8) + Resolves rhbz#1999770 (EL9) +- selinux - fails linit rules role-name and unnamed-task + Resolves rhbz#1974000 (EL8) + Resolves rhbz#2021675 (EL9) +- kernel_settings - ansible_managed | comment BZs: + Resolves rhbz#2006230 (EL9) + Resolves rhbz#2006231 (EL8) + Resolves rhbz#2006233 (EL7) +- logging - logging role missing quotes for immark module interval value + Resolves rhbz#2021678 (EL8) + Resolves rhbz#2021676 (EL9) +- logging - Add user and password + Resolves rhbz#2010327 (EL8) + Resolves rhbz#1990490 (EL9) +- logging - Performance improvement + Resolves rhbz#2005727 (EL8) + Resolves rhbz#2004303 (EL9) +- nbde_client - add regenerate-all to the dracut command + Resolves rhbz#2021682 (EL8) + Resolves rhbz#2021681 (EL9) +- certificate - Fix certificate permissions with "group" option + Resolves rhbz#2021683 (EL8) + Resolves rhbz#2021025 (EL9) + +* Thu Aug 26 2021 Rich Megginson - 1.7.3-2 +- selinux - tag tests_selinux_disabled.yml with tests::avc + Resolves rhbz#1996315 (EL9) + Resolves rhbz#1996317 (EL8) + +* Thu Aug 26 2021 Rich Megginson - 1.7.3-1 +- storage - revert the dm-vdo workaround fix for vdo testing + Resolves rhbz#1978488 (EL9) + Resolves rhbz#1991141 (EL8) + +* Tue Aug 24 2021 Rich Megginson - 1.7.2-1 +- logging - Update the certificates copy tasks + Resolves rhbz#1996777 (EL9) + Resolves rhbz#1994580 (EL8) + +* Mon Aug 16 2021 Rich Megginson - 1.7.1-1 +- metrics - the bpftrace role does not properly configure bpftrace agent + Resolves rhbz#1994180 (EL9) + Resolves rhbz#1993240 (EL8) + +* Thu Aug 12 2021 Rich Megginson - 1.7.0-1 +- drop support for Ansible 2.8 - min_ansible_version is now 2.9 + Resolves rhbz#1989197 (EL9) + Resolves rhbz#1989199 (EL8) +- sshd - fix rhel6 support - failed to validate: error:Missing Match criteria for all Bad Match condition + Resolves rhbz#1991598 (EL9) + Resolves rhbz#1990947 (EL8) + +* Fri Aug 06 2021 Rich Megginson - 1.6.7-1 +- storage - tests_create_lvmvdo_then_remove fails - Module dm-vdo not found + Resolves rhbz#1991141 (EL8) + Resolves rhbz#1991062 (EL9) +- storage - Get syntax errors in tests_lvm_errors.yml + Resolves rhbz#1990793 (EL8) + Resolves rhbz#1991142 (EL9) + +* Fri Aug 06 2021 Rich Megginson - 1.6.6-1 +- logging, certificate - Instead of the archive module, use "tar" command for backup. + Resolves rhbz#1984182 (EL9) + Resolves rhbz#1987096 (EL8) +- logging - Add a support for list value to server_host in the elasticsearch output + Resolves rhbz#1986460 (EL9) + Resolves rhbz#1986463 (EL8) +- logging - tests_relp.yml; Can't detect any of the required Python libraries cryptography (>= 1.2.3) or PyOpenSSL (>= 0.6) + Resolves rhbz#1989962 (EL9) + Resolves rhbz#1990142 (EL8) + +* Fri Aug 06 2021 Rich Megginson - 1.6.5-1 +- kernel_settings - Disable bootloader testing on EL9 + Resolves rhbz#1991017 + +* Tue Aug 03 2021 Rich Megginson - 1.6.4-1 +- sshd - support for rhel9 managed hosts + Resolves rhbz#1989221 (EL9) + Resolves rhbz#1989638 (EL8) + +* Tue Aug 03 2021 Rich Megginson - 1.6.3-1 +- storage - tag tests that use NVME and SCSI + Resolves rhbz#1989211 (EL9) + Resolves rhbz#1989638 (EL8) + +* Fri Jul 30 2021 Rich Megginson - 1.6.2-1 +- metrics - Grafana dashboard not working after metrics role run unless services manually restarted + Resolves rhbz#1984150 (EL9) + Resolves rhbz#1978357 (EL8) + +* Thu Jul 29 2021 Rich Megginson - 1.6.1-1 +- network - tests_provider_nm.yml fails with an error: Failure in test 'I can manage a veth interface with NM after I managed it with initscripts. + Resolves rhbz#1935919 +- network - _initscripts tests fail because "No package network-scripts available." + Resolves rhbz#1935916 +- network - Test tests_bond_initscripts.yml failed to create interface + Resolves rhbz#1980870 +- storage - covscan error - DEADCODE - vdopool if create_vdo else parent + Resolves rhbz#1985571 (EL9) + Resolves rhbz#1985572 (EL8) +- network - network: tests_bond_initscripts.yml leaves behind unusable resolv.conf in CI + Resolves rhbz#1915017 + +* Wed Jul 28 2021 Rich Megginson - 1.6.0-1 +- network - Skip tests on RHEL9 that use hostapd + Resolves rhbz#1945348 +- network - Fix the bond test on DHCP + Resolves rhbz#1918252 +- storage - Add support for percentage-based volume sizes + Resolves rhbz#1984583 (EL9) + Resolves rhbz#1894642 (EL8) +- storage -storage_test_actual_size != storage_test_requested_size observed with tests_lvm_auto_size_cap.yml + Resolves rhbz#1986284 (EL8) + +* Fri Jul 23 2021 Fedora Release Engineering - 1.5.1-1 +- Error: device becoming unmanaged and pytest not reproducible in tests_integration_pytest.yl + Resolves rhbz#1985382 (EL9) + Resolves rhbz#1932699 (EL8) +- EPEL yum repository configuration for tests + Rebasing to latest picks up this fix - see rhel7 bz1980439 +- connections: workaround DeprecationWarning for NM.SettingEthtool.set_feature() + Rebasing to latest picks up this fix + +* Thu Jul 15 2021 Rich Megginson - 1.5.0-1 +- ha_cluster - add pacemaker cluster properties configuration + Resolves rhbz#1982913 (EL8) + Resolves rhbz#1982906 (EL9) + +* Thu Jul 15 2021 Rich Megginson - 1.4.3-1 +- crypto_policies - rename 'policy modules' to 'subpolicies' + Resolves rhbz#1982896 (EL9) + Resolves rhbz#1982897 (EL8) + +* Thu Jul 15 2021 Rich Megginson - 1.4.2-1 +- storage - relabel doesn't support - Fixed volume relabeling + Resolves rhbz#1876315 (EL8) + Resolves rhbz#1982841 (EL9) + +* Fri Jul 9 2021 Rich Megginson - 1.4.1-1 +- network - Re-running the network system role results in "changed: true" when nothing has actually changed + Resolves rhbz#1943384 +- network - Test tests_bond_initscripts.yml failed to create interface + Resolves rhbz#1918210 + +* Thu Jul 8 2021 Rich Megginson - 1.4.0-1 +- storage - LVMVDO support + Resolves rhbz#1882475 + Resolves rhbz#1978488 + +* Wed Jun 23 2021 Rich Megginson - 1.3.0-1 +- ha_cluster - add pacemaker resources configuration + Resolves rhbz#1963283 +- ha_cluster - code cleanup + Resolves rhbz#1970666 +- Postfix RHEL system role README.md missing variables under the "Role Variables" section + Resolves rhbz#1961858 +- logging README.html examples are rendered incorrectly + Resolves rhbz#1962374 +- make postfix role idempotent - round 2 + Resolves rhbz#1960375 +- selinux task for semanage says Fedora in name but also runs on RHEL/CentOS 8 + Resolves rhbz#1966681 +- metrics role task to enable logging for targeted hosts not working + Resolves rhbz#1967335 +- network - Add 'auto_gateway' option + Resolves rhbz#1897565 +- network - Only show stderr_lines by default + Resolves rhbz#1970666 +- storage - LVMVDO support + Resolves rhbz#1882475 +- storage - fix several linter issues + Resolves rhbz#1970666 +- ssh - Fix variable precedence when invoked through roles + Resolves rhbz#1966711 +- ssh - Update configuration options list for OpenSSH 8.6 + Resolves rhbz#1970666 +- sshd - Fix variable precedence when invoked through roles + Resolves rhbz#1966711 +- sshd - Update configuration options list for OpenSSH 8.6 + Resolves rhbz#1970666 +- sshd - support for appending a snippet to configuration file + Resolves rhbz#1970642 +- timesync - add NTS support + Resolves rhbz#1970664 +- timesync - rebase to latest + Resolves rhbz#1970666 +- nbde_client - rebase to latest + Resolves rhbz#1970666 + +* Thu Jun 17 2021 Sergei Petrosian - 1.2.3-3 +- Make the ansible_collection_files macro defined in Fedora automatically and + in RHEL manually consistent - having slash at the end to clean double-slashes + +* Wed Jun 16 2021 Sergei Petrosian - 1.2.3-2 +- Remove slash (/) from the end of URLs to improve code readability + +* Wed Jun 16 2021 Noriko Hosoi - 1.2.3-1 +- Add EL 9 support for timesync and network + Resolves rhbz#1952887 + +* Tue Jun 15 2021 Rich Megginson - 1.2.2-3 +- Fix HTML rendering of internal links when using pandoc/asciidoc +- Uses pandoc gfm instead of markdown_github + Resolves rhbz#1962976 + +* Fri Jun 11 2021 Noriko Hosoi - 1.2.2-2 +- Make spec file available for older versions of OSes. +- Drop python3-six dependency which was used by lsr_role2collection.py. +- Drop html files from rpm if the version has no markdown parser. +- Drop unnecessary python scripts which include python3 only code, e.g., + f-strings. +- auto_maintenance - ability to convert "- ROLENAME" to "- FQCN" in the doc files such as README +- auto_maintenance - lsr_role2collection.py - Adding encoding="utf-8" to open. + Resolves rhbz#1957876 + +* Wed Jun 9 2021 Rich Megginson - 1.2.2-1 +- fix kdump tests_ssh for basic smoke test + Resolves rhbz#1957876 +- ha_cluster - cannot read preshared key in binary format + Resolves rhbz#1952620 +- Add hybrid_e2e option to PTP domain + Resolves rhbz#1957849 + +* Fri May 21 2021 Noriko Hosoi - 1.2.1-1 +- fix logging README.html examples' rendering problems + Resolves rhbz#1962374 +- fix broken internal links in README.md files + Resolves rhbz#1962976 + +* Mon May 17 2021 Sergei Petrosian - 1.2.0-2 +- Add BuildRequires: rubygem-kramdown for Fedora and RHEL >= 9 + +* Fri May 14 2021 Rich Megginson - 1.2.0-1 +- rebase roles to latest upstream + Resolves rhbz#1957876 +- use FQRN in postfix README + Resolves rhbz#1958963 +- use relayhost in postfix README + Resolves rhbz#1866544 +- network - Add support for ETHTOOL Ring option + Resolves rhbz#1959649 +- storage: calltrace observed when set type: partition for storage_pools + Resolves rhbz#1854187 + +* Thu May 13 2021 Noriko Hosoi - 1.1.0-2 +- Dependencies in the collection packaging + Resolves rhbz#1954747 + +* Wed Apr 14 2021 Rich Megginson - 1.1.0-1 +- rebase timesync role to latest upstream + Resolves rhbz#1937938 +- timesync - add timesync_chrony_custom_settings variable for free-form + local configs + Resolves rhbz#1938023 +- do not use ignore_errors in timesync role + Resolves rhbz#1938014 +- support for timesync_max_distance to configure maxdistance/maxdist parameter + Resolves rhbz#1938016 +- support for ntp xleave, filter, and hw timestamping + Resolves rhbz#1938020 +- rebase selinux role to latest upstream + Resolves rhbz#1937938 +- should not reload the SELinux policy if its not changed + Resolves rhbz#1757869 +- Ability to install custom SELinux module via Ansible + Resolves rhbz#1848683 +- rebase storage role to latest upstream + Resolves rhbz#1937938 +- rebase network role to latest upstream + Resolves rhbz#1937938 +- support for ipv6_disabled to disable ipv6 for address + Resolves rhbz#1939711 +- rebase postfix role to latest upstream + Resolves rhbz#1937938 +- rebase metrics role to latest upstream + Resolves rhbz#1937938 +- rebase sshd role to latest upstream + Resolves rhbz#1937938 +- rebase remaining roles to latest upstream + Resolves rhbz#1937938 +- Generate %%files dynamically +- add vpn role + Resolves rhbz#1943679 + +* Tue Apr 13 2021 Noriko Hosoi - 1.0.1-2 +- Adding the -collection-artifact subpackage, enabled using + "--with collection_artifact". It is used for importing to + ansible galaxy/automation hub. +- README.html files (main README for the collection and README + for each role) are not located in /usr/share/ansible/collections, + but just put in /usr/share/doc/linux-system-roles/collection in rpm. +- The README.html files are not included in the collection artifact. +- Fixing "sshd role README.md examples use incorrect role name". + +* Wed Mar 17 2021 Noriko Hosoi - 1.0.1-1 +- Fix description field in galaxy.yml +- Remove "Technology Preview" from Collection README +- Merging individual ignore file and add it to the package +- Add a note to each module Doc to indicate it is private +- Add patches for network and storage role ansible-test fixes + Resolves rhbz#1935451 +- Simplify doc tags in %%files, corrects a forgotten doc tag for ha_cluster +- Suppress one ansible-lint warning in ha_cluster + +* Tue Feb 23 2021 Fernando Fernandez Mancera - 1.0.0-32 +- Add patch for the inclusive language leftover on network-role README.md, + Resolves rhbz#1931931 + +* Mon Feb 22 2021 Pavel Cahyna - 1.0.0-31 +- Rebase certificate role to pick up a test fix, Resolves rhbz#1931568 +- Rebase logging role to fix default private key path, + upstream PR #218 + +* Mon Feb 22 2021 Pavel Cahyna - 1.0.0-30 +- Correct merge botch in previous (ssh/README.md is a doc file) +- Update galaxy.yml even on Fedora, auto-maintenance may not have + a consistent version number +- Update collection doc transformation to match a modified text + and include the Tech Preview note again + +* Thu Feb 18 2021 Pavel Cahyna - 1.0.0-29 +- Change internal role prefix to more descriptive private_${role}_subrole_ +- Sync spec improvements from Fedora and introduce helper macros + No functional change except for license files location +- Disable mssql metrics test on non-x86_64 where the packages + are not available. Upstream PR #73 + +* Wed Feb 17 2021 Rich Megginson - 1.0.0-28 +- Add patch for sshd https://github.com/willshersystems/ansible-sshd/pull/155 + for ansible 2.8/jinja 2.7 support for sshd role +- Rebase certificate, kernel_settings, nbde_client for jinja27 +- Rebase the logging role, Resolves rhbz#1927943 +- Rebase storage role, Resolves rhbz#1894651 - interpreatation of + omitted parameters +- Apply storage PR #201 to dispense with the need of listing all disks + in existing pools, Resolves rhbz1894676 +- Apply storage PR #199 to allow reducing the requested volume sizes + if needed to fit, Resolves rhbz1894647 +- Rebase the network role, Resolves rhbz1893959, rhbz1893957 +- Add the ssh client role, Resolves rhbz1893712 +- Minor issue in selinux - no variable named present + Resolves rhbz1926947 +- Prefix internal roles with private_, resolves rhbz#1927417 +- Add the ha_cluster role, Resolves rhbz#1893743 + +* Thu Feb 11 2021 Pavel Cahyna - 1.0.0-27 +- Rebase the logging role, Resolves rhbz#1889484 +- Fixes to collection docs and galaxy metadata from nhosoi +- Apply network PR #350 Resolves rhbz#1927392 + +* Wed Feb 3 2021 Pavel Cahyna - 1.0.0-26 +- Rebase the metrics role, Resolves rhbz#1895188, rhbz#1893908 + +* Tue Jan 26 2021 Pavel Cahyna - 1.0.0-25 +- Apply storage PR #153 to fix a problem with partition name on NVMe devices + Resolves: rhbz1865990 +- Remove symlinks to roles under tests +- Cleanup of role directories - remove files starting with . in roles' root + directories and Git files under tests. Resolves rhbz#1650550 +- Add collection support, make Version semver compatible: 1.0 -> 1.0.0 + Resolves rhbz#1893906 +- Autogenerate Automation-Hub README.md if building for RHEL +- Renumber sources, Source is now auto-maintenance since it is the root + of the source tree, kdump becomes Source4 (4 was originally firewall) +- Introduce bcond_with/without ansible, work on Fedora, RHEL and EPEL +- Rebase certificate role to include collection-related workarounds, + no change in behavior intended +- Rebase network role, includes collection-related workarounds +- Revert an invasive network change to enable EPEL (PR #335) and implement + a minimal version + +* Fri Jan 15 2021 Pavel Cahyna - 1.0-24 +- Apply PR #63 for kdump to fix a problem in test introduced by rebase + +* Fri Jan 8 2021 Pavel Cahyna - 1.0-23 +- Add {crypto_policies,sshd}/README.md to docfiles, thanks jjelen +- Fix role name in selinux patch +- Add sshd role example and README fix +- Fix role name in sshd role tests and docs +- Backport network role PR #298 to fix problems often triggered by the CI + "error: down connection failed while waiting", Resolves rhbz#1817242 +- Disable bond test in downstream CI, it started to break DNS in RHEL 8.4. + Related rhbz#1915017 + +* Thu Jan 7 2021 Pavel Cahyna - 1.0-22 +- Rebase kdump, certificate, storage, selinux, nbde_client/server, + kernel_settings in preparation for collections + Includes upstream PR #168 for storage to prevent toggling encryption + in safe mode, as it is a destructive operation. Resolves rhbz#1881524 +- Introduce & use simpler macros for Sources management, + similar to %%forgemeta + https://docs.fedoraproject.org/en-US/packaging-guidelines/SourceURL/ +- Use a script to perform prefix transformation for all roles to reduce + the number of patches +- Rebase tlog to add exclude_{users,groups} support, Resolves rhbz#1895472 +- Add crypto_policies role, Resolves rhbz#1893699 +- Add sshd role, Resolves rhbz#1893696 + +* Mon Aug 24 2020 Pavel Cahyna - 1.0-19 +- Rebase network role to latest upstream, resolves rhbz#1800627 + Drop a downstream patch with a test workaround that is not needed anymore. +- Fix script for role prefix transformation +- Rebase metrics role to pick up test changes, PR #19 +- Rebase kernel_settings role to latest upstream, resolves rhbz#1851557 + +* Mon Aug 24 2020 Pavel Cahyna - 1.0-18 +- Rebase storage role to latest upstream, resolves rhbz#1848254, rhbz#1851654, + rhbz#1862867 +- Rebase nbde_client role to latest upstream, resolves rhbz#1851654 +- Rebase logging role to latest upstream, resolves rhbz#1851654, rhbz#1861318 +- Rebase metrics role to latest upstream, resolves rhbz#1869390, rhbz#1869389, + rhbz#1868378 + +* Fri Aug 21 2020 Pavel Cahyna - 1.0-17 +- Rebase certificate role to latest upstream, resolves rhbz#1859547 + +* Mon Aug 10 2020 Pavel Cahyna - 1.0-16 +- Rebase logging role to latest upstream, resolves rhbz#1854546, rhbz#1861318, + rhbz#1860896, adds test for rhbz#1850790 +- Rebase metrics role to latest upstream, resolves rhbz#1855544, rhbz#1855539, + rhbz#1848763 +- Fix whitespace in postfix role patch + +* Fri Jul 31 2020 Pavel Cahyna - 1.0-15 +- Rebase storage role to latest upstream, resolves rhbz#1854191, rhbz#1848250, + rhbz#1850790 (including test) +- Rebase nbde_client role to latest upstream, adds test for rhbz#1850790 +- Rebase certificate role to latest upstream, adds test for rhbz#1850790 +- Rebase nbde_server role to latest upstream, resolves rhbz#1850790 + (including test) +- Rebase tlog role to latest upstream, resolves rhbz#1855424 +- Rebase kernel_settings role to rev b8bc86b, resolves rhbz#1850790 +- Add EL 8 to supported versions in postfix and kdump role metadata, + resolves rhbz#1861661 + +* Mon Jul 20 2020 Rich Megginson - 1.0-14 +- Rebase certificate role to latest upstream, resolves rhbz#1858840 + +* Fri Jul 17 2020 Rich Megginson - 1.0-13 +- Rebase certificate role to latest upstream, resolves rhbz#1858316, rhbz#1848745 + +* Mon Jun 29 2020 Pavel Cahyna - 1.0-12 +- Rebase network role to latest upstream, resolves rhbz#1822777, rhbz#1848472 +- Rebase logging role to latest upstream, resolves rhbz#1850790, + rhbz#1851804, rhbz#1848762 +- Rebase certificate role to latest upstream, resolves rhbz#1848742, + rhbz#1850790 +- Rebase nbde_client role to latest upstream, resolves rhbz#1848766, + rhbz#1850790 + +* Mon Jun 15 2020 Pavel Cahyna - 1.0-11 +- Rebase network role to latest upstream +- Remove all the soon-unnecessary tier1 tags in test +- Add a workaround for rhbz#1800627 in test +- Modify patches to remove tier1 tags +- Add metrics, tlog, logging, kernel_settings roles +- Add nbde_client, nbde_server, certificate roles +- Rebase storage role to latest upstream: adds support for mdraid, LUKS, + swap manangement + +* Mon Oct 21 2019 Pavel Cahyna - 1.0-10 +- Add the storage_safe_mode option, true by default, to prevent accidental + data removal: rhbz#1763242, issue #42, PR #43 and #51. + +* Thu Aug 15 2019 Pavel Cahyna - 1.0-9 +- Add the storage role + +* Thu Jun 13 2019 Pavel Cahyna - 1.0-7 +- Update tests for the network role +- Fix typo in a test for the timesync role +- Tag tests suitable for Tier1 testing +- Rebase the network role to add support for device features (PR#115, + rhbz#1696703) and atomic changes (PR#119, rhbz#1695161) +- network: apply upstream PR#121: allow modifying interface attributes + without disrupting services (rhbz#1695157) + +* Wed May 29 2019 Pavel Cahyna - 1.0-6 +- Rebase the selinux role, fixes typo in tests, uncovered by Ansible 2.7, + (rhbz#1677743) and lists all input variables in defaults + to make Satellite aware of them (rhbz#1674004, PR#43) +- Rebase the kdump role to fix check mode problems: rhbz#1685904 +- Rebase the timesync role: fixes check mode problems (rhbz#1685904) + and lists all input variables in defaults (rhbz#1674004) +- Rebase the network role: keeps the interface up for state: up + if persistent_state is absent and solves problems with defining + VLAN and MACVLAN interface types (issue #19) (rhbz#1685902) + +* Sat Jan 12 2019 Pavel Cahyna - 1.0-5 +- spec file improvement: Unify the source macros with deftag() and defcommit() +- Update to upstream released versions and drop unnecessary patches. +- Unify the spec file with Fedora (no functional changes intended). +- Misc spec file comments fixes (by Mike DePaulo) +- Fix rpmlint error by escaping a previous changelog entry with a macro (by Mike DePaulo) +- Comply with Fedora guidelines by always using "cp -p" in %%install (by Mike DePaulo) +- Rebase network role - doc improvements, Fedora 29 and Ansible 2.7 support +- Regenerate network role patch to apply without offset +- Rebase kdump role to fix a forgotten edit, rhbz#1645633 +- Update timesync examples: add var prefix (rhbz#1642152), correct role prefix +- Add Obsoletes for the -techpreview subpackage +- Add warnings to role READMEs and other doc updates, rhbz#1616018 +- network: split the state setting into state and persistent_state, rhbz#1616014 +- depend on python-jmespath as Ansible will not ship it, rhbz#1660559 + +* Tue Aug 14 2018 Pavel Cahyna - 1.0-4 +- Format the READMEs as html, by vdolezal, with changes to use highlight + (source-highlight does not understand YAML) + +* Thu Aug 9 2018 Pavel Cahyna - 1.0-3 +- Rebase the network role to the last revision (d866422). + Many improvements to tests, introduces autodetection of the current provider + and defaults to using profile name as interface name. +- Rebase the selinux, timesync and kdump roles to their 1.0rc1 versions. + Many changes to the role interfaces to make them more consistent + and conforming to Ansible best practices. +- Update the description. + +* Fri May 11 2018 Pavel Cahyna - 0.6-4 +- Fix complaints about /usr/bin/python during RPM build by making the affected scripts non-exec +- Fix merge botch + +* Mon Mar 19 2018 Troy Dawson - 0.6-3.1 +- Use -a (after cd) instead of -b (before cd) in %%setup + +* Wed Mar 14 2018 Pavel Cahyna - 0.6-3 +- Minor corrections of the previous change by Till Maas. + +* Fri Mar 9 2018 Pavel Cahyna - 0.6-2 +- Document network role options: static routes, ethernet, dns + Upstream PR#36, bz1550128, documents bz1487747 and bz1478576 + +* Tue Jan 30 2018 Pavel Cahyna - 0.6-1 +- Drop hard dependency on ansible (#1525655), patch from Yaakov Selkowitz +- Update the network role to version 0.4, solves bz#1487747, bz#1478576 + +* Tue Dec 19 2017 Pavel Cahyna - 0.5-3 +- kdump: fix the wrong conditional for ssh checking and improve test (PR#10) + +* Tue Nov 07 2017 Pavel Cahyna - 0.5-2 +- kdump: add ssh support. upstream PR#9, rhbz1478707 + +* Tue Oct 03 2017 Pavel Cahyna - 0.5-1 +- SELinux: fix policy reload when SELinux is disabled on CentOS/RHEL 6 + (bz#1493574) +- network: update to b856c7481bf5274d419f71fb62029ea0044b3ec1 : + makes the network role idempotent (bz#1476053) and fixes manual + network provider selection (bz#1485074). + +* Mon Aug 28 2017 Pavel Cahyna - 0.4-1 +- network: update to b9b6f0a7969e400d8d6ba0ac97f69593aa1e8fa5: + ensure that state:absent followed by state:up works (bz#1478910), and change + the example IP adresses to the IANA-assigned ones. +- SELinux: fix the case when SELinux is disabled (bz#1479546). + +* Tue Aug 8 2017 Pavel Cahyna - 0.3-2 +- We can't change directories to symlinks (rpm bug #447156) so keep the old + names and create the new names as symlinks. + +* Tue Aug 8 2017 Pavel Cahyna - 0.3-1 +- Change the prefix to linux-system-roles., keeping compatibility + symlinks. +- Update the network role to dace7654feb7b5629ded0734c598e087c2713265: + adds InfiniBand support and other fixes. +- Drop a patch included upstream. + +* Mon Jun 26 2017 Pavel Cahyna - 0.2-2 +- Leave a copy of README and COPYING in every role's directory, as suggested by T. Bowling. +- Move the network example inventory to the documentation directory together. + with the example playbooks and delete the now empty "examples" directory. +- Use proper reserved (by RFC 7042) MAC addresses in the network examples. + +* Tue Jun 6 2017 Pavel Cahyna - 0.2-1 +- Update the networking role to version 0.2 (#1459203) +- Version every role and the package separately. They live in separate repos + and upstream release tags are not coordinated. + +* Mon May 22 2017 Pavel Cahyna - 0.1-2 +- Prefix the roles in examples and documentation with rhel-system-roles. + +* Thu May 18 2017 Pavel Cahyna - 0.1-1 +- Update to 0.1 (first upstream release). +- Remove the tuned role, it is not ready yet. +- Move the example playbooks to /usr/share/doc/rhel-system-roles/$SUBSYSTEM + directly to get rid of an extra directory. +- Depend on ansible. + +* Thu May 4 2017 Pavel Cahyna - 0-0.1.20170504 +- Initial release. +- kdump r. fe8bb81966b60fa8979f3816a12b0c7120d71140 +- postfix r. 43eec5668425d295dce3801216c19b1916df1f9b +- selinux r. 1e4a21f929455e5e76dda0b12867abaa63795ae7 +- timesync r. 33a1a8c349de10d6281ed83d4c791e9177d7a141 +- tuned r. 2e8bb068b9815bc84287e9b6dc6177295ffdf38b +- network r. 03ff040df78a14409a0d89eba1235b8f3e50a750 +