Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add service name to plugin pam/auth_pam usage #445

Merged

Conversation

hubiongithub
Copy link
Contributor

SUMMARY

for plugin = pam (MariaDB)
or plugin = auth_pam (MySQL)
use an optional plugin_auth_string to set the pam service to use

CREATE USER user IDENTIFIED WITH plugin USING plugin_auth_string

As MySQL and MariaDB store this option in authentication_string column this reuse of plugin_auth_string seems vaild.

ISSUE TYPE
  • Feature Pull Request
COMPONENT NAME

mysql_user

ADDITIONAL INFORMATION

would need help if this should have a unit/integration test

@codecov
Copy link

codecov bot commented Sep 13, 2022

Codecov Report

Merging #445 (eade7ec) into main (eade7ec) will not change coverage.
The diff coverage is n/a.

❗ Current head eade7ec differs from pull request most recent head 8856f4d. Consider uploading reports for the commit 8856f4d to get more accurate results

@@           Coverage Diff           @@
##             main     #445   +/-   ##
=======================================
  Coverage   73.11%   73.11%           
=======================================
  Files          28       28           
  Lines        2332     2332           
  Branches      548      548           
=======================================
  Hits         1705     1705           
  Misses        449      449           
  Partials      178      178           
Flag Coverage Δ
integration 69.91% <0.00%> (ø)
sanity 15.32% <0.00%> (ø)
units 33.55% <0.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@hubiongithub
Copy link
Contributor Author

hubiongithub commented Oct 4, 2022

Hello
I'm stuck here, it tries to check things, it says 4 failing, but on what, and how can I fix those?
I need help. @Andersson007 can you have a look where this fails?

@laurent-indermuehle
Copy link
Collaborator

@hubiongithub in the sanity test, I can see this:

Running sanity test "ansible-doc"
Run command: ansible-doc -t module community.mysql.mysql_role community.mysql.mysql_user
ERROR: Command "ansible-doc -t module community.mysql.mysql_role community.mysql.mysql_user" returned exit status 1.
>>> Standard Error
ERROR! module community.mysql.mysql_user missing documentation (or could not parse documentation): while scanning a simple key
  in "<unicode string>", line 132, column 9
could not find expected ':'
  in "<unicode string>", line 133, column 5

You can click on "Details" next to each test to see the log. It's often very long and hard to work with. Using the search often help.

@hubiongithub
Copy link
Contributor Author

Hello @laurent-indermuehle
I see "Plugins CI / Sanity (Ansible: stable-2.12) (pull_request) Failing after 1m" has failed, in details I see at last 3 errors

Running sanity test "ansible-doc"
Run command: ansible-doc -t module community.mysql.mysql_role community.mysql.mysql_user
ERROR: Command "ansible-doc -t module community.mysql.mysql_role community.mysql.mysql_user" returned exit status 1.
>>> Standard Error
ERROR! module community.mysql.mysql_user missing documentation (or could not parse documentation): while scanning a simple key
  in "<unicode string>", line 132, column 9
could not find expected ':'
  in "<unicode string>", line 133, column 5

Running sanity test "validate-modules"
Run command: /root/.ansible/test/venv/sanity.validate-modules/3.9/5e1e301c/bin/python /root/ansible/test/lib/ansible_test/_util/controller/tools/collection_detail.py /root/ansible_collections/community/mysql
Run command: /root/.ansible/test/venv/sanity.validate-modules/3.9/5e1e301c/bin/python /root/ansible/test/lib/ansible_test/_util/controller/sanity/validate-modules/validate-modules --format json --arg-spec plugins/modules/mysql_role.py plugins/modules/mysql_user.py --collection ansible_collections/community/mysql --collection-version 3.5.1
ERROR: Command "/root/.ansible/test/venv/sanity.validate-modules/3.9/5e1e301c/bin/python /root/ansible/test/lib/ansible_test/_util/controller/sanity/validate-modules/validate-modules --format json --arg-spec plugins/modules/mysql_role.py plugins/modules/mysql_user.py --collection ansible_collections/community/mysql --collection-version 3.5.1" returned exit status 1.
>>> Standard Error
Traceback (most recent call last):
  File "/root/ansible/test/lib/ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py", line 154, in parse_yaml
    data = yaml_load(value, Loader=loader)
  File "/root/.ansible/test/venv/sanity.validate-modules/3.9/5e1e301c/lib/python3.9/site-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/root/.ansible/test/venv/sanity.validate-modules/3.9/5e1e301c/lib/python3.9/site-packages/yaml/constructor.py", line 49, in get_single_data
    node = self.get_single_node()

AttributeError: attribute 'line' of 'yaml._yaml.Mark' objects is not writable
Removing custom PyPI config: /root/.pydistutils.cfg
Removing custom PyPI config: /root/.pip/pip.conf
Run command: docker exec -i ansible-test-controller-0hJXD45U sh -c 'tar cf - -C /root/ansible_collections/community/mysql/tests --exclude .tmp output | gzip'
Run command: tar oxzf - -C /home/runner/work/community.mysql/community.mysql/ansible_collections/community/mysql/tests
ERROR: Command "docker exec ansible-test-controller-0hJXD45U /usr/bin/env ANSIBLE_TEST_CONTENT_ROOT=/root/ansible_collections/community/mysql LC_ALL=en_US.UTF-8 /usr/bin/python3.9 /root/ansible/bin/ansible-test sanity -v --containers '{"control": {"__pypi_proxy__": {"pypi-test-container-0hJXD45U": {"host_ip": "172.17.0.2", "names": ["pypi-test-container-0hJXD45U"], "ports": [3141]}}}, "managed": {"__pypi_proxy__": {"pypi-test-container-0hJXD45U": {"host_ip": "172.17.0.2", "names": ["pypi-test-container-0hJXD45U"], "ports": [3141]}}}}' --junit --truncate 0 --color yes --host-path tests/output/.tmp/host-_2o9m6n1 --metadata tests/output/.tmp/metadata-dnes7w5e.json --require plugins/module_utils/user.py --require plugins/modules/mysql_role.py --require plugins/modules/mysql_user.py --require tests/unit/plugins/module_utils/test_mysql_user.py --base-branch main" returned exit status 1.
Run command: docker rm -f ansible-test-controller-0hJXD45U
Run command: docker rm -f 2c6a120f2cbe697066082f4a61140cc275709b799876a7e32e80499d69ec5148
Error: Process completed with exit code 1.

But where do I start to look what of my changes may have caused this?

@laurent-indermuehle
Copy link
Collaborator

@hubiongithub I've no idea. I pulled your branch and was able to reproduce the GitHub Action error using this command:

set -x ; ~/.local/bin/ansible-test sanity -v --color --changed --base-branch main --junit --docker; set +x

There is something in this block that cause the issue: https://github.com/hubiongithub/community.mysql/blob/add_pam_service_option/plugins/modules/mysql_user.py#L17-L178
But I can't find where. I searched for missing quotes, unquoted ":" and many other things... I'm not a YAML into Python documentalist expert :/

@laurent-indermuehle
Copy link
Collaborator

@hubiongithub please try to remove the ":" after the "MariaDB" on this line: https://github.com/hubiongithub/community.mysql/blob/add_pam_service_option/plugins/modules/mysql_user.py#L141
I tried to use single-quote, double-quote. The only way I got green was by removing this semi-colon.

@hubiongithub
Copy link
Contributor Author

@laurent-indermuehle oh, ok, removed the ":" lets see what else might geht wrong.
Thanks for looking into it.

@hubiongithub
Copy link
Contributor Author

Hello
@laurent-indermuehle on the github website it now says: All checks have passed
but I still get emails with: Roles CI / Molecule (Python: 3.6, Ansible: stable-2.11, MySQL: 2.0.12) Failed in 3 seconds
the URL to github in that email:

Run actions/setup-python@v2
Version 3.6 was not found in the local cache
Error: Version 3.6 with arch x64 not found
The list of all available versions can be found here: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json

I think I'm not able to fix that on my side.

Copy link
Collaborator

@Andersson007 Andersson007 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hubiongithub hello, thanks for the PR! and sorry for the late response - was on long PTO.

Could you please:

  • elaborate a little bit more on the issue: I'm not a user, so would be good to understand the case better. Do i understand correctly that when pam and there's MariaDB, we need to use USING instead of BY? If yes, can this be fair for other plugins (not pam), i.e. we always need to use USING when working with any plugin and MariaDB? If it can, should we introduce a new argument to the functions determining RDBMS we're using and make the conditions working based on that argument? Would be grateful for any explanation
  • add a changelog fragment
  • add integration tests for the case (see the content of tests/integration/targets/test_mysql_user/tasks; you can also find there examples of using condition determining if it's mysql or mariadb)

If you have any questions, we'd be happy to help

Comment on lines 141 to 142
- MariaDB If I(plugin) is ``pam`` an optional I(plugin_auth_string) ults in (``CREATE USER user IDENTIFIED WITH plugin USING plugin_auth_string``).
This was chosen because MySQL and MariaDB store the ``USING plugin_auth_string`` part in the ``authentication_string`` column in ``mysql.user``.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- MariaDB If I(plugin) is ``pam`` an optional I(plugin_auth_string) ults in (``CREATE USER user IDENTIFIED WITH plugin USING plugin_auth_string``).
This was chosen because MySQL and MariaDB store the ``USING plugin_auth_string`` part in the ``authentication_string`` column in ``mysql.user``.
- MariaDB If I(plugin) is ``pam`` an optional I(plugin_auth_string) ults in (``CREATE USER user IDENTIFIED WITH plugin USING plugin_auth_string``).
This was chosen because MySQL and MariaDB store the ``USING plugin_auth_string`` part in the ``authentication_string`` column in ``mysql.user``.

I would re-formulate these sentences somehow and fix a couple of typos.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the technical parts of this, now its only describing the special use case of "plugin_auth_string" for pam/auth_pam.
You're right, for a user it does not matter what SQL this generates a lang as they know how to use the module.

@hubiongithub
Copy link
Contributor Author

hubiongithub commented Jan 2, 2023

@Andersson007
MariaDB and MySQL have different Syntax when it comes to create users with some plugins
With PAM MariadB uses the plugin name "pam"and MySQL uses "auth_pam" (maybe that changed to "authentication_pam" as the link below requests.)

The "USING " / "AS " are optional, without it PAM will test the user against all pam modules defined, which may lead to a lot of "unknown user" messages in the system log for every configured pam module.

For other plugins (https://mariadb.com/kb/en/authentication-plugins/) MariaDB seems to always use
IDENTIFIED VIA modulename USING string

MySQL seams to uses
IDENTIFIED WITH plugin name AS string (e.g. https://dev.mysql.com/doc/refman/8.0/en/pam-pluggable-authentication.html)
IDENTIFIED WITH plugin name BY string (e.g. https://dev.mysql.com/doc/refman/8.0/en/kerberos-pluggable-authentication.html)

MariaDB and MySQL uses a different Syntax for "normal" password plugins:

I tested my changes (some time ago), but now having reread the documentation links above I'm not sure if this part here is correct:

        query_with_args = "CREATE USER %s@%s IDENTIFIED WITH %s AS %s", (user, host, plugin, plugin_hash_string)
    elif plugin and plugin_auth_string:
        # Mysql and MariaDB differ in naming pam plugin and Syntax to set it
        if plugin == 'pam':
            query_with_args = "CREATE USER %s@%s IDENTIFIED WITH %s USING %s", (user, host, plugin, plugin_auth_string)
        else:
            query_with_args = "CREATE USER %s@%s IDENTIFIED WITH %s BY %s", (user, host, plugin, plugin_auth_string)
    elif plugin:
        query_with_args = "CREATE USER %s@%s IDENTIFIED WITH %s", (user, host, plugin)
    else:
        query_with_args = "CREATE USER %s@%s", (user, host)

esp. the mysql part when "plugin and plugin_auth_string" are set (should use "AS" not "BY")
and the mariadb part (should use VIA instead of WITH)

I probably will test this again perhaps the MariaDB/MySQL documentation and real life differs.
I will fix typos I find and add a changelog fragment. On the integration tests I will need help.

@hubiongithub
Copy link
Contributor Author

Manual tests:
MySQL 8.0.30-22
Both syntax
create user user1@localhost IDENTIFIED WITH 'auth_pam' AS 'service';
create user user1@localhost IDENTIFIED WITH 'auth_pam' BY 'service';

Resulst in mysql.user table entry (select user,host,plugin,authentication_string from mysql.user where plugin = 'auth_pam';)
| user1 | localhost | auth_pam | service |

/var/log/auth.log

mysqld: pam_krb5(oedivmysql:auth): user user1 authenticated as user1@
mysqld: pam_krb5(oedivmysql:auth): user user1 authenticated as user1@

without pam service:
create user user1@localhost IDENTIFIED WITH 'auth_pam';

Resulst in mysql.user table entry
| user1 | localhost | auth_pam | |
login does work, but the user might be authenticated in every possible pam module configured

MariaDB 10.6:
MariaDB [(none)]> create user user1@localhost IDENTIFIED WITH 'pam';
MariaDB [(none)]> create user user1@localhost IDENTIFIED VIA 'pam';
select user,host,plugin,authentication_string from mysql.user where plugin = 'pam';
delivers
| user1 | localhost | auth_pam | |

MariaDB [(none)]> create user user1@localhost IDENTIFIED VIA 'pam' USING 'service';
MariaDB [(none)]> create user user1@localhost IDENTIFIED WITH 'pam' USING 'service';
delivers
| user1 | localhost | auth_pam | service |

all 4 created an user which can login, the first two uses any pam module, the later two only the configured one.

so the code above is functional, as both will accept IDENTIFIED WITH and differ in USING/BY

MariaDB does not accept: create user user1@localhost IDENTIFIED WITH 'pam' BY 'Service';
ERROR 1064 ... near 'BY...'

@hubiongithub
Copy link
Contributor Author

@Andersson007
A short look into "tests/integration/targets/test_mysql_user/tasks" I see

  • create_user.yml
  • test_user_plugin_auth.yml
    both included from main.yml

test_user_plugin_auth.yml is probably the right place to start, but only tests "sha256_password" and "mysql_native_password", but nothing else, probably because anything else would need more requirements outside the MySLQ/MariaDB instance, pam plugin would need a running pam server configured with a certain service so a created user can be tested.
Against what kind of OS and MySQL/MariaDB installations are these tests executed? From the output of the automatic tests my code failed, I assume docker containers, can these use pamd inside?

Copy link
Collaborator

@Andersson007 Andersson007 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one small thing to make the entry looking consistent with the other changelog entries

@Andersson007
Copy link
Collaborator

@hubiongithub thanks for the investigating, testing and explaining!
I think we can skip adding integration tests as it requires additional service installation which i'd like to avoid to keep CI simpler:)
Is the PR ready for merge?

@hubiongithub
Copy link
Contributor Author

@Andersson007 is there anything to do to get a PR "ready to merge"?
the sync fork button shows: "This branch is not behind the upstream ansible-collections:main"

From the point of what did I want to change its ready, from what github might need to be done I'm not sure.

@Andersson007 Andersson007 merged commit 8a579b4 into ansible-collections:main Jan 3, 2023
@Andersson007
Copy link
Collaborator

@hubiongithub thanks for the contribution!
If there are any related issues that can be closed/updated, please let me know/feel free to put updates in them

@Andersson007
Copy link
Collaborator

@hubiongithub fyi we have the #mysql:ansible.com matrix channel https://docs.ansible.com/ansible/devel/community/communication.html#ansible-community-on-matrix, feel free to join

@hubiongithub hubiongithub deleted the add_pam_service_option branch January 3, 2023 09:28
@Andersson007
Copy link
Collaborator

@hubiongithub what do you think about #484 (comment) , you use it so you're feedback would be much appreciated there

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Mar 2, 2023
7.3.0

Major Changes
-------------

kubernetes.core
~~~~~~~~~~~~~~~

- refactor K8sAnsibleMixin into module_utils/k8s/ (ansible-collections/kubernetes.core#481).

Minor Changes
-------------

Ansible-core
~~~~~~~~~~~~

- Make using blocks as handlers a parser error (ansible/ansible#79968)
- ansible-test - Specify the configuration file location required by test plugins when the config file is not found. This resolves issue: ansible/ansible#79411
- ansible-test - Update error handling code to use Python 3.x constructs, avoiding direct use of ``errno``.
- ansible-test acme test container - update version to update used Pebble version, underlying Python and Go base containers, and Python requirements (ansible/ansible#79783).

cisco.aci
~~~~~~~~~

- Add Node Profile BGP Peer and Route Control Profile functionalities to aci_l3out_bgp_peer module
- Add SVI auto state support (auto_state attribute) to aci_l3out_interface
- Add aci_aaa_domain, aci_aaa_role and aci_custom_privilege modules
- Add aci_fabric_pod_policy_group module
- Add aci_interface_policy_leaf_profile_fex_policy_group module and add FEX support to aci_access_port_to_interface_policy_leaf_profile
- Add aci_tenant_span_src_group_src module
- Add action_groups for module_defaults
- Add support for filter direction in aci_contract_subject and aci_contract_subject_to_filter
- Update modules to assign roles and permissions to a user

cisco.nxos
~~~~~~~~~~

- `nxos_acls` - Support ICMPv6 option. Please refer to module doc for all new options (ansible-collections/cisco.nxos#624).
- `nxos_facts` - Update facts gathering logic to ensure that `gather_network_resources: all` does not fail for NX-OS on MDS switches.
- `nxos_l2_interfaces` - Add new mode dot1q-tunnel (ansible-collections/cisco.nxos#600).

community.crypto
~~~~~~~~~~~~~~~~

- get_certificate - adds ``ciphers`` option for custom cipher selection (ansible-collections/community.crypto#571).

community.general
~~~~~~~~~~~~~~~~~

- dnsimple - set custom User-Agent for API requests to DNSimple (ansible-collections/community.general#5927).
- flatpak_remote - add new boolean option ``enabled``. It controls, whether the remote is enabled or not (ansible-collections/community.general#5926).
- gitlab_project - add ``releases_access_level``, ``environments_access_level``, ``feature_flags_access_level``, ``infrastructure_access_level``, ``monitor_access_level``, and ``security_and_compliance_access_level`` options (ansible-collections/community.general#5986).
- jc filter plugin - added the ability to use parser plugins (ansible-collections/community.general#6043).
- keycloak_group - add new optional module parameter ``parents`` to properly handle keycloak subgroups (ansible-collections/community.general#5814).
- keycloak_user_federation - make ``org.keycloak.storage.ldap.mappers.LDAPStorageMapper`` the default value for mappers ``providerType`` (ansible-collections/community.general#5863).
- ldap modules - add ``xorder_discovery`` option (ansible-collections/community.general#6045, ansible-collections/community.general#6109).
- lxd_container - add diff and check mode (ansible-collections/community.general#5866).
- mattermost, rocketchat, slack - replace missing default favicon with docs.ansible.com favicon (ansible-collections/community.general#5928).
- modprobe - add ``persistent`` option (ansible-collections/community.general#4028, ansible-collections/community.general#542).
- osx_defaults - include stderr in error messages (ansible-collections/community.general#6011).
- proxmox - suppress urllib3 ``InsecureRequestWarnings`` when ``validate_certs`` option is ``false`` (ansible-collections/community.general#5931).
- redfish_command - adding ``EnableSecureBoot`` functionality (ansible-collections/community.general#5899).
- redfish_command - adding ``VerifyBiosAttributes`` functionality (ansible-collections/community.general#5900).
- sefcontext - add support for path substitutions (ansible-collections/community.general#1193).

community.grafana
~~~~~~~~~~~~~~~~~

- able to set `uid` for datasources in grafana via module grafana_datasource

community.mongodb
~~~~~~~~~~~~~~~~~

- 491 mongodb_shell - Add feature to detect if mongo or mongosh is available.
- 494 mongodb_auth - Removes module_defaults from role.
- 494 mongodb_shutdown - Fix examples block.
- 511 mongodb_auth - Adds support for deletion of users.
- 514 mongodb_linux - Remove extended FQCN for pam_limits.
- 524 mongodb_auth - Add supports for Amazon Linux 2.
- 528 multiple roles - Use first ip address when multiple bind IPs provided.
- 530 mongodb_role - Adds new module to manage MongoDB roles.
- 536 mongodb_auth - Add user after enabling authentication.
- 544 mongodb_replicaset - Module documentation improvements.
- 547 mongodb_repository - Bump default of MongoDB to 6.0.

community.mysql
~~~~~~~~~~~~~~~

- mysql_info - add ``connector_name`` and ``connector_version`` to returned values (ansible-collections/community.mysql#497).
- mysql_role - enable auto_commit to avoid MySQL metadata table lock (ansible-collections/community.mysql#479).
- mysql_user - add plugin_auth_string as optional parameter to use a specific pam service if pam/auth_pam plugin is used (ansible-collections/community.mysql#445).
- mysql_user - add the ``session_vars`` argument to set session variables at the beginning of module execution (ansible-collections/community.mysql#478).
- mysql_user - display a more informative invalid privilege exception. Changes the exception handling of the granting permission logic to show the query executed , params and the exception message granting privileges fails` (ansible-collections/community.mysql#465).
- mysql_user - enable auto_commit to avoid MySQL metadata table lock (ansible-collections/community.mysql#479).
- setup_mysql - update MySQL tarball URL (ansible-collections/community.mysql#491).

community.vmware
~~~~~~~~~~~~~~~~

- vmware_guest_disk - Add support for IDE disk add, remove or reconfigure, and change to gather same VM disk info as in vmware_guest_disk_info (ansible-collections/community.vmware#1428).
- vmware_guest_disk - Extend return value documentation for vmware_guest_disk (ansible-collections/community.vmware#1641)
- vmware_guest_disk_info - Move gather VM disk info function to vm_device_helper.py (ansible-collections/community.vmware#1617)
- vmware_vmotion - New parameter timeout in order to allow vmotions running longer than 1 hour (https://github.com/ansible-collections/community.vmware/pulls/1629).

grafana.grafana
~~~~~~~~~~~~~~~

- Updated the return message in grafana.grafana.folder module

hetzner.hcloud
~~~~~~~~~~~~~~

- hcloud_server - add private_networks_info containing name and private ip in responses
- hcloud_server_info - add private_networks_info containing name and private ip in responses
- inventory plugin - Add list of all private networks to server variables.
- inventory plugin - Add new connect_with setting public_ipv6 to connect to discovered servers via public IPv6 address.
- inventory plugin - Add public IPv6 address to server variables.
- inventory plugin - Log warning instead of crashing when some servers do not work with global connect_with setting.

inspur.ispim
~~~~~~~~~~~~

- Change the ansible-test.yml application file version.
- Change the description of the edit_bios module file_url field.
- Modify the description information of the backup module item field.
- Modify the description of the media_attach, retry_count, and retry_time_interval fields of the edit_kvm module.
- Modify the description of the secure_channel field of the edit_media_instance module.
- Modify the description of the slot and vname fields of the add_ldisk module.
- Modify the edit_ntp module example.
- Modify the edit_snmp_trap module version field description information.
- Modify the mode field description information of update_fw module.
- Modify the name field description of the user_group module.
- Modify the restore module example.
- Modify the supporting properties and description information of the edit_ncsi module edit_ncsi field.
- The edit_power_budget module adds the except_action field.

kubernetes.core
~~~~~~~~~~~~~~~

- Adjust k8s_user_impersonation tests to be compatible with Kubernetes 1.24 (ansible-collections/kubernetes.core#520).
- add support for dry run with kubernetes client version >=18.20 (ansible-collections/kubernetes.core#245).
- added ignore.txt for Ansible 2.14 devel branch.
- fixed module_defaults by removing routing hacks from runtime.yml (ansible-collections/kubernetes.core#347).
- helm - add support for -set-file, -set-json, -set and -set-string options when running helm install (ansible-collections/kubernetes.core#533).
- helm - add support for helm dependency update (ansible-collections/kubernetes.core#208).
- helm - add support for post-renderer flag (ansible-collections/kubernetes.core#30).
- helm - add support for timeout cli parameter to allow setting Helm timeout independent of wait (ansible-collections/kubernetes.core#67).
- helm - add support for wait parameter for helm uninstall command. (https://github.com/ansible-collections/kubernetes/core/issues/33).
- helm - support repo location for helm diff (ansible-collections/kubernetes.core#174).
- helm - when ansible is executed in check mode, return the diff between what's deployed and what will be deployed.
- helm, helm_plugin, helm_info, helm_plugin_info, kubectl - add support for in-memory kubeconfig. (ansible-collections/kubernetes.core#492).
- helm_info - add hooks, notes and manifest as part of returned information (ansible-collections/kubernetes.core#546).
- helm_info - add release state as a module argument (ansible-collections/kubernetes.core#377).
- helm_info - added possibility to get all values by adding get_all_values parameter (ansible-collections/kubernetes.core#531).
- helm_plugin - Add plugin_version parameter to the helm_plugin module (ansible-collections/kubernetes.core#157).
- helm_plugin - Add support for helm plugin update using state=update.
- helm_repository - Ability to replace (overwrite) the repo if it already exists by forcing (ansible-collections/kubernetes.core#491).
- helm_repository - add support for pass-credentials cli parameter (ansible-collections/kubernetes.core#282).
- helm_repository - added support for ``host``, ``api_key``, ``validate_certs``, and ``ca_cert``.
- helm_repository - mark `pass_credentials` as no_log=True to silence false warning (ansible-collections/kubernetes.core#412).
- helm_template - add name (NAME of release) and disable_hook as optional module arguments (ansible-collections/kubernetes.core#313).
- helm_template - add show_only and release_namespace as module arguments (ansible-collections/kubernetes.core#313).
- helm_template - add support for -set-file, -set-json, -set and -set-string options when running helm template (ansible-collections/kubernetes.core#546).
- k8s - add no_proxy support to k8s* (ansible-collections/kubernetes.core#272).
- k8s - add support for server_side_apply. (ansible-collections/kubernetes.core#87).
- k8s - add support for user impersonation. (https://github.com/ansible-collections/kubernetes/core/issues/40).
- k8s - allow resource definition using metadata.generateName (ansible-collections/kubernetes.core#35).
- k8s lookup plugin - Enable turbo mode via environment variable  (ansible-collections/kubernetes.core#291).
- k8s, k8s_scale, k8s_service - add support for resource definition as manifest via. (ansible-collections/kubernetes.core#451).
- k8s_cp - remove dependency with 'find' executable on remote pod when state=from_pod (ansible-collections/kubernetes.core#486).
- k8s_drain - Adds ``delete_emptydir_data`` option to ``k8s_drain.delete_options`` to evict pods with an ``emptyDir`` volume attached (ansible-collections/kubernetes.core#322).
- k8s_exec - select first container from the pod if none specified (ansible-collections/kubernetes.core#358).
- k8s_exec - update deprecation warning for `return_code` (ansible-collections/kubernetes.core#417).
- k8s_json_patch - minor typo fix in the example section (ansible-collections/kubernetes.core#411).
- k8s_log - add the ``all_containers`` for retrieving all containers' logs in the pod(s).
- k8s_log - added the `previous` parameter for retrieving the previously terminated pod logs (ansible-collections/kubernetes.core#437).
- k8s_log - added the `tail_lines` parameter to limit the number of lines to be retrieved from the end of the logs (ansible-collections/kubernetes.core#488).
- k8s_rollback - add support for check_mode. (https://github.com/ansible-collections/kubernetes/core/issues/243).
- k8s_scale - add support for check_mode. (https://github.com/ansible-collections/kubernetes/core/issues/244).
- kubectl - wait for dd command to complete before proceeding (ansible-collections/kubernetes.core#321).
- kubectl.py - replace distutils.spawn.find_executable with shutil.which in the kubectl connection plugin (ansible-collections/kubernetes.core#456).

netapp.ontap
~~~~~~~~~~~~

- na_ontap_aggregate - new option ``allow_flexgroups`` added.
- na_ontap_cifs - new options ``access_based_enumeration``, ``change_notify``, ``encryption``, ``home_directory``, ``oplocks``, ``show_snapshot``, ``allow_unencrypted_access``, ``namespace_caching`` and ``continuously_available`` added in REST.
- na_ontap_dns - ``skip_validation`` option requires 9.9.1 or later with REST and ignored for cluster DNS operations.
- na_ontap_dns - support cluster scope for modify and delete.
- na_ontap_interface - do not attempt to migrate FC interface if desired ``home_port``, ``home_node`` and ``current_port``, ``current_node`` are same.
- na_ontap_license - support for NLF v2 license files.
- na_ontap_nfs - new options ``root``, ``windows`` and ``security`` added in REST.
- na_ontap_user_role - ``command_directory_name`` is required if ``privileges`` not set in REST.
- na_ontap_user_role - ``path`` is required if ``privileges`` set in REST.
- na_ontap_volume_efficiency - REST support for ``policy`` requires 9.7 or later, ``path`` requires 9.9.1 or later and ``volume_efficiency`` and ``start_ve_scan_old_data`` requires 9.11.1 or later.
- na_ontap_volume_efficiency - ``schedule``, ``start_ve_scan_all``, ``start_ve_build_metadata``, ``start_ve_delete_checkpoint``, ``start_ve_queue_operation``, ``start_ve_qos_policy`` and ``stop_ve_all_operations`` options are not supported with REST.
- na_ontap_volume_efficiency - new option ``volume_name`` added.
- na_ontap_volume_efficiency - updated private cli with REST API.

netbox.netbox
~~~~~~~~~~~~~

- nb_inventory - Add serial and asset tag to extracted attributes

purestorage.flasharray
~~~~~~~~~~~~~~~~~~~~~~

- purefa_network - Added support for NVMe-RoCE and NVMe-TCP service types
- purefa_user - Added Ops Admin role to choices
- purefa_vlan - Added support for NVMe-TCP service type

Breaking Changes / Porting Guide
--------------------------------

hetzner.hcloud
~~~~~~~~~~~~~~

- inventory plugin - Python v3.5+ is now required.

Deprecated Features
-------------------

- Since the google.cloud collection seems to be maintained again, we `cancelled the removal process <https://github.com/ansible-collections/overview/blob/main/removal_from_ansible.rst#cancelling-removal-of-an-unmaintained-collection>`__. So contrary to an earlier announcement, this collection is NOT deprecated and will NOT be removed from Ansible 8 (ansible-community/community-topics#105).

community.general
~~~~~~~~~~~~~~~~~

- gitlab_runner - the option ``access_level`` will lose its default value in community.general 8.0.0. From that version on, you have set this option to ``ref_protected`` explicitly, if you want to have a protected runner (ansible-collections/community.general#5925).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants