-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Allow tags strings containing commas in proxmox inventory plug-in #1949
Allow tags strings containing commas in proxmox inventory plug-in #1949
Conversation
…nding unit test with tags key
I did notice issue #1503 was a similar concept to this PR, but as stated in the summary the proxmox tag string is not suited for key/value pairs and using the "notes" field as mentioned in the issue is a dead-end as the proxmox API has no method for returning it. (Probably because it's relatively free-formatted text) |
Proxmox only permits periods when surrounded by alphanumeric characters
CC @Aversiste @Thulium-Drake |
Co-authored-by: Felix Fontein <[email protected]>
recheck |
Maybe a silly question, as I don't use it (or never knew I needed this in life ;-) ), but where would one even configure tags for VMs? 😅 |
Not a silly question at all because PVE does not display tags in the UI and has a single line in the docs for them. You can use the CLI on a proxmox node (I'm testing on 6.3-3) or the equivalent paths from the JSON API to set and get tags: For reference I'm using a terraform provider to set these and honestly despite this PR I wouldn't use tags in prod. Also I tried using the "notes" field again like in issue #1503 and they are in fact returned by the API, but as the "description" field. However just like with "tags" if you wanted arbitrary text containing commas the inventory plugin will fail to parse returning no description fact. So with the current functionality of the inventory plugin you can leverage what is probably a symptom of the side-effect caused by always attempting to parse strings containing commas as dicts to get tagged instances. |
Nice function, I must say it's kinda obscure (which IMHO is a shame, stuff like this can be really useful), maybe the Proxmox devs will actually expose it via the GUI in the future. FYI, you can also tag machines by adding the following key to a config file in
However, I'd like to propose 1 addition. My gut feeling is that tags themselves are separated by commas so they can form a list. Can you convert the string with tags to a list? That's probably more in line of what people expect. |
This comment has been minimized.
This comment has been minimized.
Tested your code, results are very neat:
LGTM |
Co-authored-by: Felix Fontein <[email protected]>
Co-authored-by: Felix Fontein <[email protected]>
Co-authored-by: Felix Fontein <[email protected]>
) * Included explicit parsing for proxmox guest tags and updated corresponding unit test with tags key * Including changelog fragment for PR 1949 * Removed ellipsis from test Proxmox only permits periods when surrounded by alphanumeric characters * Corrected punctuation for changelog entry Co-authored-by: Felix Fontein <[email protected]> * Allowing tags string to contain commas * Incorporated new parsed tags fact with bugfix * Correcting whitespace issues * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> * Update plugins/inventory/proxmox.py Co-authored-by: Felix Fontein <[email protected]> * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> Co-authored-by: Felix Fontein <[email protected]> (cherry picked from commit d0bb74a)
) * Included explicit parsing for proxmox guest tags and updated corresponding unit test with tags key * Including changelog fragment for PR 1949 * Removed ellipsis from test Proxmox only permits periods when surrounded by alphanumeric characters * Corrected punctuation for changelog entry Co-authored-by: Felix Fontein <[email protected]> * Allowing tags string to contain commas * Incorporated new parsed tags fact with bugfix * Correcting whitespace issues * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> * Update plugins/inventory/proxmox.py Co-authored-by: Felix Fontein <[email protected]> * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> Co-authored-by: Felix Fontein <[email protected]> (cherry picked from commit d0bb74a)
@Ajpantuso thanks for implementing this! |
) (#1998) * Included explicit parsing for proxmox guest tags and updated corresponding unit test with tags key * Including changelog fragment for PR 1949 * Removed ellipsis from test Proxmox only permits periods when surrounded by alphanumeric characters * Corrected punctuation for changelog entry Co-authored-by: Felix Fontein <[email protected]> * Allowing tags string to contain commas * Incorporated new parsed tags fact with bugfix * Correcting whitespace issues * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> * Update plugins/inventory/proxmox.py Co-authored-by: Felix Fontein <[email protected]> * Update changelogs/fragments/1949-proxmox-inventory-tags.yml Co-authored-by: Felix Fontein <[email protected]> Co-authored-by: Felix Fontein <[email protected]> (cherry picked from commit d0bb74a) Co-authored-by: Ajpantuso <[email protected]>
v3.2.0 community.crypto - acme module_utils - the ``acme`` module_utils has been split up into several Python modules (ansible-collections/community.crypto#184). - acme_* modules - codebase refactor which should not be visible to end-users (ansible-collections/community.crypto#184). - acme_* modules - support account key passphrases for ``cryptography`` backend (ansible-collections/community.crypto#197, ansible-collections/community.crypto#207). - acme_certificate_revoke - support revoking by private keys that are passphrase protected for ``cryptography`` backend (ansible-collections/community.crypto#207). - acme_challenge_cert_helper - add ``private_key_passphrase`` parameter (ansible-collections/community.crypto#207). community.docker - docker_swarm_service - change ``publish.published_port`` option from mandatory to optional. Docker will assign random high port if not specified (ansible-collections/community.docker#99). community.general - archive - refactored some reused code out into a couple of functions (ansible-collections/community.general#2061). - csv module utils - new module_utils for shared functions between ``from_csv`` filter and ``read_csv`` module (ansible-collections/community.general#2037). - ipa_sudorule - add support for setting sudo runasuser (ansible-collections/community.general#2031). - jenkins_job - add a ``validate_certs`` parameter that allows disabling TLS/SSL certificate validation (ansible-collections/community.general#255). - kibana_plugin - add parameter for passing ``--allow-root`` flag to kibana and kibana-plugin commands (ansible-collections/community.general#2014). - proxmox - added ``purge`` module parameter for use when deleting lxc's with HA options (ansible-collections/community.general#2013). - proxmox inventory plugin - added ``tags_parsed`` fact containing tags parsed as a list (ansible-collections/community.general#1949). - proxmox_kvm - added new module parameter ``tags`` for use with PVE 6+ (ansible-collections/community.general#2000). - rax - elements of list parameters are now validated (ansible-collections/community.general#2006). - rax_cdb_user - elements of list parameters are now validated (ansible-collections/community.general#2006). - rax_scaling_group - elements of list parameters are now validated (ansible-collections/community.general#2006). - read_csv - refactored read_csv module to use shared csv functions from csv module_utils (ansible-collections/community.general#2037). - redfish_* modules, redfish_utils module utils - add support for Redfish session create, delete, and authenticate (ansible-collections/community.general#1975). - snmp_facts - added parameters ``timeout`` and ``retries`` to module (ansible-collections/community.general#980). - vdo - add ``force`` option (ansible-collections/community.general#2101). community.network - edgeos_config - match the space after ``set`` and ``delete`` commands (ansible-collections/community.network#199). - nclu - execute ``net commit description <description>`` only if changed ``net pending``'s diff field (ansible-collections/community.network#219). community.postgresql - postgresql_info - add the ``patch``, ``full``, and ``raw`` values of the ``version`` return value (ansible-collections/community.postgresql#68). - postgresql_ping - add the ``patch``, ``full``, and ``raw`` values of the ``server_version`` return value (ansible-collections/community.postgresql#70). community.zabbix - zabbix_agent - added support for installations on arm64 systems (ansible-collections/community.zabbix#320). - zabbix_proxy - now supports configuring StatsAllowedIP (ansible-collections/community.zabbix#337). - zabbix_server - added support for installtions on arm64 systems (ansible-collections/community.zabbix#320). - zabbix_web - added support for installtions on arm64 systems (ansible-collections/community.zabbix#320). dellemc.openmanage - ome_template - Allows to deploy a template on device groups. hetzner.hcloud - Add firewalls to hcloud_server module ovirt.ovirt - cluster_upgrade - Add correlation-id header (oVirt/ovirt-ansible-collection#222). - engine_setup - Add skip renew pki confirm (oVirt/ovirt-ansible-collection#228). - examples - Add recipe for removing DM device (oVirt/ovirt-ansible-collection#233). - hosted_engine_setup - Filter devices with unsupported bond mode (oVirt/ovirt-ansible-collection#226). - infra - Add reboot host parameters (oVirt/ovirt-ansible-collection#231). - ovirt_disk - Add SATA support (oVirt/ovirt-ansible-collection#225). - ovirt_user - Add ssh_public_key (oVirt/ovirt-ansible-collection#232) purestorage.flasharray - purefa_maintenance - New module to set maintenance windows - purefa_pg - Add support to rename protection groups - purefa_syslog - Add support for naming SYSLOG servers for Purity//FA 6.1 or higher purestorage.flashblade - purefb_certs - Add update functionality for array cert - purefb_fs - Add multiprotocol ACL support - purefb_info - Add information regarding filesystem multiprotocol (where available) - purefb_info - Add new parameter to provide details on admin users - purefb_info - Add replication performace statistics - purefb_s3user - Add ability to remove an S3 users existing access key
@Ajpantuso hi, thanks for your contribution to proxmox and other modules/plugins! We could add your GH login to |
Sure, I am willing to help maintain the modules/plugins I have contributed to. |
@Ajpantuso great! Thanks! I created a PR #2286 |
SUMMARY
Allowing proxmox tags strings containing commas to be passed as facts
ISSUE TYPE
COMPONENT NAME
plugins/inventory/proxmox.py
ADDITIONAL INFORMATION
The current behavior of the proxmox inventory plugin will attempt to parse values containing commas from the PVE API configs endpoint as dictionaries. However tags strings disallow '=' characters which will always cause parsing to fail for tags strings presented as comma separated list. This change will explicitly allow the 'tags' config to bypass dict parsing.