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

Open issues on collections that use booleans to recommend true/false #60

Closed
samccann opened this issue Sep 20, 2022 · 42 comments
Closed
Assignees

Comments

@samccann
Copy link

As part of the community decision to standardize on true/false for boolean values, We need to open issues on the collections that use these to recommend they follow this practice.

Using this issue to track which collections we open the issues on. NOTE we cannot mandate the collection owner use true/false so we will only track that we opened the issues with that recommendation.

@samccann
Copy link
Author

samccann commented Sep 20, 2022

List of collections (Ansible 7 based). Each one should be checked to see if they use booleans and if so, open an issue in that repository:

  • amazon.aws
  • ansible.netcommon
  • ansible.posix
  • ansible.utils
  • ansible.windows
  • arista.eos
  • awx.awx
  • azure.azcollection
  • check_point.mgmt
  • chocolatey.chocolatey
  • cisco.aci
  • cisco.asa
  • cisco.dnac
  • cisco.intersight
  • cisco.ios
  • cisco.iosxr
  • cisco.ise
  • cisco.meraki
  • cisco.mso
  • cisco.nso
  • cisco.nxos
  • cisco.ucs
  • cloud.common
  • cloudscale_ch.cloud
  • community.aws
  • community.azure
  • community.ciscosmb
  • community.crypto
  • community.digitalocean
  • community.dns
  • community.docker
  • community.fortios
  • community.general
  • community.google
  • community.grafana
  • community.hashi_vault
  • community.hrobot
  • community.libvirt
  • community.mongodb
  • community.mysql
  • community.network
  • community.okd
  • community.postgresql
  • community.proxysql
  • community.rabbitmq
  • community.routeros
  • community.sap
  • community.sap_libs
  • community.skydive
  • community.sops
  • community.vmware
  • community.windows
  • community.zabbix
  • containers.podman
  • cyberark.conjur
  • cyberark.pas
  • dellemc.enterprise_sonic
  • dellemc.openmanage
  • dellemc.os10
  • dellemc.os6
  • dellemc.os9
  • dellemc.powerflex
  • dellemc.unity
  • f5networks.f5_modules
  • fortinet.fortimanager
  • fortinet.fortios
  • frr.frr
  • gluster.gluster
  • google.cloud
  • grafana.grafana
  • hetzner.hcloud
  • hpe.nimble
  • ibm.qradar
  • ibm.spectrum_virtualize
  • infinidat.infinibox
  • infoblox.nios_modules
  • inspur.ispim
  • inspur.sm
  • junipernetworks.junos
  • kubernetes.core
  • lowlydba.sqlserver
  • mellanox.onyx
  • netapp.aws
  • netapp.azure
  • netapp.cloudmanager
  • netapp.elementsw
  • netapp_eseries.santricity
  • netapp.ontap
  • netapp.storagegrid
  • netapp.um_info
  • netbox.netbox
  • ngine_io.cloudstack
  • ngine_io.exoscale
  • ngine_io.vultr
  • openstack.cloud
  • openvswitch.openvswitch
  • ovirt.ovirt
  • purestorage.flasharray
  • purestorage.flashblade
  • purestorage.fusion
  • sensu.sensu_go
  • splunk.es
  • theforeman.foreman
  • t_systems_mms.icinga_director
  • vmware.vmware_rest
  • vultr.cloud
  • vyos.vyos
  • wti.remote

@samccann
Copy link
Author

See ansible-collections/amazon.aws#1041 for an example on how to open a collection issue and what to include.

@samccann
Copy link
Author

What I did:
1 - go to the collection on https://docs.ansible.com/ansible/devel/collections/
2. - look at some of the module pages and search for boolean. If you see it, click on the issue tracker or repository links on the main collection page and open an issue similar to ansible-collections/amazon.aws#1041
3. check off that collection in #60 (comment)

@samccann samccann self-assigned this Sep 20, 2022
@tremble
Copy link

tremble commented Sep 21, 2022

community.aws is done already - ansible-collections/community.aws#1420 (no need to open issue)

@felixfontein
Copy link

community.crypto, community.dns, community.docker, community.hrobot, community.interal_test_tools (not listed here), community.routeros, and community.sops are also done. community.general is partially done; I'm sure I missed some cases, but the bulk should be done (I hope).

@Andersson007
Copy link
Contributor

Andersson007 commented Nov 30, 2022

fyi: I've created an issue in community.mysql and I'm keeping it open advertising as an easyfix for newcomers

@kristianheljas
Copy link

checking against ansible-build-data/7/collection-meta.yaml i noticed 4 missing collections: dellemc.unity, dellemc.powerflex, lowlydba.sqlserver and grafana.grafana.

Should they be notified as well?

@samccann
Copy link
Author

yeah for sure. Thanks for checking! I updated the checklist with those four.
@Andersson007 - is there a way we can add some items that new collections should do so we don't have a growing list of collections to... bug about things like this?

@kristianheljas
Copy link

kristianheljas commented Feb 15, 2023

So .. double and triple checked, I'm ready to launch the issue strike against 96 collections, based on unchecked collections under #60 (comment) (except community.sops which should be checked) using this script

Only exception is openstack.cloud which is not hosted at github, which I'll create manually.

When I get a second yay for this count (96) and this exclusion list, I'll go nuclear!

@kristianheljas
Copy link

Issue for openstack.cloud done: https://storyboard.openstack.org/#!/story/2010586

@samccann
Copy link
Author

@kristianheljas that's great! Can I beg you for a couple of enhancements?
1 - can you mention in the BODY that this issue is being autogenerated and please close if you have already implemented this?
2 - in some future iteration - could we extend this script 'somehow' so we can add in different issue titles, body text, and exclusion list? We have at least two other issues we'd like collection owners to consider and it would be helpful to have a script to run similar to this one.

No biggie if that's not possible. I 'think' I understand the script well enuf to at least edit it and ask for feedback/help in going nuclear on those other collection wish-list items. This is great stuff!

@kristianheljas
Copy link

kristianheljas commented Feb 15, 2023

@samccann, no need to beg - happy to contribute! :)

  1. Added auto-generation disclosure and call to freely close this issue, see this HackMD
    Enhance it if you wish :)

  2. For sure, I didn't put much thought into this as i figured this as a one-off script, but i think it can be easily expanded to cover the wish-list as well. If this is a recurring thing, I can even put more thought/work on it. Ping me on GH/Matrix whenever you feel like!

P.S. This "exlusion list" actually records all the issue links it creates, and populating it before running will make it ignore these collections.

@Andersson007
Copy link
Contributor

Andersson007 commented Feb 16, 2023

@kristianheljas @samccann are we talking about notifying maintainers about the doc standard change?

If yes, I would also suggest putting a link to the doc standards to the issues, what do you think?

@Andersson007 - is there a way we can add some items that new collections should do so we don't have a growing list of collections to... bug about things like this?

Do you mean a) how to notify maintainers or b) adding this in the collection requirement?

  • a) we have the news-for-maintainers repo to notify collection maintainers. @kristianheljas please create the issue there (if it's not already there) as well with links to related decision and doc standard on docs.ansible.com
  • b) there's a statement in the collection requirements that new collection must satisfy doc standards (w/o details as it'd be too noisy - reviewers should know the standards)
  • c) i would also recommend announcing it via Bullhorn

@kristianheljas
Copy link

@Andersson007 I don't think I can link to docs.ansible.com, since the core team is not on board with this decision, see ansible/ansible#77581 (comment), so the docsite shows yes/no values.
Then again, ansible-lint is, and will continue to be, to conform to YAML 1.2 spec, see ansible/ansible-lint#1954 (review).

@samccann Do you happen to know if this standard is documented somewhere besides the voting topic? At a glance, I didn't find this in collection requirements.

@Andersson007
Copy link
Contributor

@kristianheljas @samccann i believe news-for-maintainers is to announce stuff relevant for collection maintainers, not for core maintainers.

@tremble
Copy link

tremble commented Feb 16, 2023

Given that there is now a Community decision ansible-community/community-topics#116 and antsibull-docs now converts over to true/false ansible-community/antsibull-docs#19 if it's not documented, we should update the documentation (somewhere)

Additionally, if possible add a linting rule that prefers the strings "true"/"false". My understanding is that we can update the collections linting ruleset without updating the core ruleset (@felixfontein would such a linting rule be possible? - are they still strings by the time the linter sees them?)

@felixfontein
Copy link

@tremble ansible-test uses PyYAML to load the YAML, which converts both yes/no and true/false to the corresponding Python booleans. So in validate-modules it's not possible to check for this.

What would be possible to adjust the yamllint config that is used to validate YAMLs in collections. But I'm pretty sure core won't want to allow this, since the yamllint config used is very, very lenient, and I don't think they want to use it to force any convention on users. But I guess we could ask them...

@samccann
Copy link
Author

The closest we have for documentation is at https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#boolean-variables

@Andersson007 I 'think' most of the requirements for a valid collection are still in https://github.com/ansible-collections/overview/blob/main/collection_requirements.rst not in docs.ansible.com yet.

As for core not being onboard, they would not support something that forces it (Felix's prior comment I think) but are no longer against updating docs (or docs within collections) to use true/false since that community topic vote occurred.

@kristianheljas
Copy link

kristianheljas commented Feb 17, 2023

The best I found collection requirements is a link to Development conventions, which suggests yes/no/true/false (in that order). Not even gonna mention the boolean variables @samccann linked that goes even further, including y/1/1.0...

But .. that's really great that the core team is ready to accept this change in the docs!
I'm gonna review the docsite built with updated deps anyway, I think I can get this wheel going during that.
I'll likely have an update on this on Monday.

@samccann @Andersson007 Should we postpone this mass-notification until we have some docs/requirements to support this or send these based on the voting topic alone to get things going in parallel?

And are the mass-issues necessary if we announce it on news-for-maintainers?
(I only need to push the big red button to send them away, so no complaints from me either way)

@samccann
Copy link
Author

@kristianheljas I see value in opening issues as a reminder. We have a number of enhancements like this that collection owners aren't acting on, so this seems like a way to remind them directly. But I'm open to other views on this one.

As for changing the docs, the module development guidelines should be updated. Currently it says:
If the option is a boolean value, you can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Choose the one that reads better in the context of the option.

It should say something like:
If the option is a boolean value, end users can use any of the boolean values recognized by Ansible: (such as true/false or yes/no). Document booleans as true/falsefor consistency and compatibility withansible-lint.

@samccann
Copy link
Author

@Andersson007 @tremble @Andersson007 - we were going to do the batch issue creation as soon as the docs are updated to say folks should document booleans as true/false.

Scream now if you're against this batch issue creation against all the collections that haven't done this already... :-)

@kristianheljas
Copy link

Created a PR for the guidelines here and updated the issue template. Feel free to make any applicable modifications to the template.

Once the PR has made it's way to docs.ansible.com and no-one has complained, I will:

  1. Create the news-for-maintainers issue with the same content as the issue (except the last two sentences)
  2. Fire the 96 issues away

@kristianheljas
Copy link

@samccann, issues have been launched!

Out of 96 collections to notify, there were 2 exceptions:

  1. community.azure - It's archived now and content has been yanked, so thats fine
  2. f5_modules.f5networks - They don't have issues enabled, although they have GH issues link in thery galaxy manifest. I'll ping them in the next comment.

Links for 94 issues created can be found in this gist (and above this comment, hehe)
I included the previously manually created openstack.cloud for completeness as well

@kristianheljas
Copy link

@wojtek0806, we wanted to open an issue to f5_modules.f5networks about collection standards change but it appears you do not have an active issue tracker (manifest points to GH and GH issues are disabled this repo).

Can you please have a look and update the manifest or open the GH issue tracker?

Also, here is the notification we wanted to send:

Based on the community decision to use > true/false for boolean values in documentation and examples, we ask that you evaluate booleans in this collection > and consider changing any that do not use true/false (lowercase).

See documentation block format for > more info (specifically, option defaults).

@mariolenz
Copy link

I fear that the answer will be "no", but anyway: Are there any scripts or tools to help maintainers with this, at least to find out what needs to be changed?

And another thing: We use ansible-network/collection_prep in community.vmware to create the docs. I might be wrong, but it looks to me that it uses yes / no when documenting booleans. At least, it didn't update the documentation to true / false when I ran it to create ansible-collections/community.vmware#1661. Am I correct, or do I overlook something?

@samccann
Copy link
Author

samccann commented Mar 6, 2023

@mariolenz can you open an issue on that collection_prep? I'm not familiar with it but sounds like it's not following along on the true/false change.

@mariolenz
Copy link

@mariolenz can you open an issue on that collection_prep? I'm not familiar with it but sounds like it's not following along on the true/false change.

@samccann ansible-network/collection_prep#81

If anyone can point me to a better way to create the docs, feel free to do it. I'm not above replacing collection_prep if there are better alternatives ;-)

OK, we've dealt with my second question. The answer to my first one is... "no"?

@kristianheljas
Copy link

@mariolenz I don't think there is, the best i can think of right now is something like :\s(yes|no|True|False|y|n)\b in regex, targeting just docstrings.
If your IDE supports to search only inside strings (i know Intellij ones do) then you might be able make your life even easier.

Regardless, if you are able to only reflect this in the source docstrings, thats a big win as well as it bring consistency to the ansible docsite, which i think was the main driving force behind all this.

Thanks for opening the issue in collection_prep!

@mariolenz
Copy link

I don't think there is, the best i can think of right now is something like :\s(yes|no|True|False|y|n)\b in regex, targeting just docstrings

This is my approach, too. I'll do my best, but if you don't have a tool to check this it's only "best effort" from my side. I hope to fix this, but as I've said: Only best effort ;-)

@felixfontein
Copy link

If you use ansible-test devel from a checkout, you can apply the following diff to check at least some things:

diff --git a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/default.yml b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/default.yml
index 45d8b7adcf..5ca29b7bbe 100644
--- a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/default.yml
+++ b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/default.yml
@@ -16,4 +16,8 @@ rules:
   new-line-at-end-of-file: disable
   new-lines: {type: unix}
   trailing-spaces: disable
-  truthy: disable
+  truthy:
+    level: error
+    allowed-values:
+      - 'true'
+      - 'false'
diff --git a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/modules.yml b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/modules.yml
index da7e604999..d1add23b51 100644
--- a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/modules.yml
+++ b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/modules.yml
@@ -16,4 +16,8 @@ rules:
   new-line-at-end-of-file: disable
   new-lines: {type: unix}
   trailing-spaces: disable
-  truthy: disable
+  truthy:
+    level: error
+    allowed-values:
+      - 'true'
+      - 'false'
diff --git a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/plugins.yml b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/plugins.yml
index 6d41813787..d1add23b51 100644
--- a/test/lib/ansible_test/_util/controller/sanity/yamllint/config/plugins.yml
+++ b/test/lib/ansible_test/_util/controller/sanity/yamllint/config/plugins.yml
@@ -11,9 +11,13 @@ rules:
   empty-lines: disable
   hyphens: disable
   indentation: disable
-  key-duplicates: disable
+  key-duplicates: enable
   line-length: disable
   new-line-at-end-of-file: disable
   new-lines: {type: unix}
   trailing-spaces: disable
-  truthy: disable
+  truthy:
+    level: error
+    allowed-values:
+      - 'true'
+      - 'false'

@felixfontein
Copy link

(Please note that this will flag most GitHub workflows that contain on:. Simply ignore these matches :) )

@tremble
Copy link

tremble commented Mar 7, 2023

Looking at community.aws I've noticed that a couple of regressions have crept it. While we can whack-a-mole these, unless there's something we can add to CI, they will keep creeping back in.

@mariolenz
Copy link

If you use ansible-test devel from a checkout, you can apply the following diff to check at least some things

Thanks @felixfontein, this really helps!

@tremble
Copy link

tremble commented Mar 8, 2023

If you use ansible-test devel from a checkout, you can apply the following diff to check at least some things:

I really wish there was a way for collections to override some of these default settings. Some of the disabled rules would actually be nice to enable

(Please note that this will flag most GitHub workflows that contain on:. Simply ignore these matches :) )

You can also tweak the workflow YAML files to tell yaml-lint to ignore the lines (and still grumble at other truthy-ness issues) https://yamllint.readthedocs.io/en/stable/disable_with_comments.html

    on:  # yamllint disable-line rule:truthy

@mariolenz
Copy link

(Please note that this will flag most GitHub workflows that contain on:. Simply ignore these matches :) )

This also flags something like service_policy: on for a parameter that isn't a boolean:

https://github.com/ansible-collections/community.vmware/blob/6c133cb92f7669d7decc3ab866fb700e866159be/plugins/modules/vmware_host_service_manager.py#L203

I'll ignore this, just FYI.

@samccann
Copy link
Author

samccann commented Mar 8, 2023

@mariolenz - what do you use the docs for when you use collection_prep? Is it just to test that the docs generate? OR are you putting them up on some website somewhere?

Galaxy beta (aka GalaxyNG) displays module/plugin docs now so there's less need for collection owners to generate module rst files and keep them in their repo.

@felixfontein
Copy link

(Please note that this will flag most GitHub workflows that contain on:. Simply ignore these matches :) )

This also flags something like service_policy: on for a parameter that isn't a boolean:

https://github.com/ansible-collections/community.vmware/blob/6c133cb92f7669d7decc3ab866fb700e866159be/plugins/modules/vmware_host_service_manager.py#L203

Well, but on and off aren't strings in YAML 1.1, but booleans. For example if you run yaml.safe_load('service_policy: on') with PyYAML, you'll end up with {'service_policy': True}.

So the warning is correct and you should always put on and off in quotes, because otherwise they get converted to booleans.

@mariolenz
Copy link

mariolenz commented Mar 8, 2023

Well, but on and off aren't strings in YAML 1.1, but booleans. For example if you run yaml.safe_load('service_policy: on') with PyYAML, you'll end up with {'service_policy': True}.

So the warning is correct and you should always put on and off in quotes, because otherwise they get converted to booleans.

Thanks! I didn't know this, I'll fix it.

edit: vmware_host_service_manager: Fix example

@mariolenz
Copy link

@mariolenz - what do you use the docs for when you use collection_prep? Is it just to test that the docs generate? OR are you putting them up on some website somewhere?

Galaxy beta (aka GalaxyNG) displays module/plugin docs now so there's less need for collection owners to generate module rst files and keep them in their repo.

We generate the docs and put them into the docs directory since the VMware modules have been moved out of ansible and into a dedicated collection. We don't push them to any other website.

How do tother collections handle module documentation? If it's the default to not have this in the repo, I can change it.

@samccann
Copy link
Author

@mariolenz - all those module docs are visible today at https://beta-galaxy.ansible.com/ui/repo/published/community/vmware/content/module/vcenter_domain_user_group_info/ for example. So once Galaxy NG is ..beyond beta, you can probably stop using the collection_prep and just point to your collection on GalaxyNG for the module docs.

@mariolenz
Copy link

mariolenz commented Mar 18, 2023

@samccann I could also link to docs.ansible.com, I just never did. And since we're discussing moving to a new domain(ansible-community/community-topics#201) and Galaxy NG is still beta, I'd like to wait a bit before I decide what to do.

Anyway, I think I've fixed this in most places in the DOCUMENTATION and EXAMPLES blocks.

@samccann
Copy link
Author

The purpose of this issue was to create the reminder issues in each collection, so going to close this out as done. Thanks @kristianheljas for the script help and everyone else for the help!

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

No branches or pull requests

6 participants