14:31:52 #startmeeting Docs Working Group aka DaWGs 14:31:52 Meeting started Tue May 12 14:31:52 2020 UTC. 14:31:52 This meeting is logged and archived in a public location. 14:31:52 The chair is acozine. Information about MeetBot at http://wiki.debian.org/MeetBot. 14:31:52 Useful Commands: #action #agreed #halp #info #idea #link #topic. 14:31:52 The meeting name has been set to 'docs_working_group_aka_dawgs' 14:32:07 hey! 14:32:17 agenda is https://github.com/ansible/community/issues/521#issuecomment-624153545 14:32:25 * samccann waves 14:32:26 hey felixfontein! 14:32:31 #chair felixfontein samccann 14:32:31 Current chairs: acozine felixfontein samccann 14:32:36 who else is around? 14:33:37 gundalow: are you running with the DaWGs today? 14:34:14 cbudz: how about you? 14:34:29 hmm, this seems apropos https://github.com/ansible/ansible/pull/69454 <= was asked yesterday to 'remove metadata from base' 14:34:36 #chair bcoca 14:34:36 Current chairs: acozine bcoca felixfontein samccann 14:34:46 hey, I'm half in here, half in another meeting before an 11am 14:35:00 this meeting is always in conflict 14:35:04 cbudz: sounds good, ping me when you are ready to "become furniture" 14:35:18 will do 14:35:35 bcoca: that PR should be part of the discussion around metadata, thanks for the link 14:36:01 speaking of which . . . 14:36:11 #topic removing ansible_metadata 14:36:23 I just don't have the heart for all caps today 14:36:42 #info collections tracking issue - https://github.com/ansible-collections/overview/issues/57 14:36:56 #info ansible-base issue - https://github.com/ansible/ansible/pull/69454 14:37:11 * acozine takes some time to read the comments on the collections issue 14:37:27 #info ansible metdata has two fields, neither of which seem necessary in the new world order 14:38:01 except maybe status 14:38:24 which i would argue is easy to move into main DOC field 14:38:37 me too 14:38:58 we might be creating new std for that and probably a few more things in near future, i have old proposal that needs to be expanded for such things 14:39:48 looks like there's broad agreement in the comments that making `status` a field in the documentation section of each module is a good approach 14:40:07 the main debate seems to be over what the default value should be 14:40:40 I'm trying to parse resmo's comment: https://github.com/ansible-collections/overview/issues/57#issuecomment-624483813 14:40:44 #agreed move status field to an optional documentation section of each module and remove ANSIBLE_METADATA field entirely 14:40:44 normal use would be something flagged as 'preview' when introduced witha 'interface may change' warning 14:41:23 default would be 'stable' for existing, but the 'meaning' is very diff from stuff 'officially Suported' and stuff 'offcially supported', community and 3rd party 14:41:39 acozine: resmo wants default to be preview; and says that since it is a docs field, you could also specify a default value for a groups of modules in doc_fragments, and overwrite it for an individual module 14:41:40 resmo voted for making the default value `preview` but then said `It would also be easy to change the default to stable in the plugin doc_fragment and overwrite in the modules to preview where appropriate.` 14:41:48 for now, i think adding a note: this is a tech preview is 'good enough' 14:41:57 felixfontein: ah, I see 14:42:23 bcoca so you are saying no specific doc field for status - if it's not stable, add that to the module description? 14:42:31 felixfontein: unsure that will work, depends on fragment merging and that was mostly designed for options 14:42:33 for those who would prefer the default to be `stable`, that's a good workaround 14:42:38 samccann: basically 14:42:46 cause 'stable' means very diff things to diff people 14:42:51 my initial reaction is to agree w/ bcoca 14:42:56 bcoca: right now modules can always overwrite fragments 14:43:01 * samccann waits for everyone to recover from fainting 14:43:07 but a note about 'hey,c areful this is a new shinny but unstable thing' , is easy to digest 14:43:12 samccann: heh 14:43:27 felixfontein: i designed that for options, dont knwo if it works outside of them 14:43:27 I feel like if we put in a default (either one) it won't make people happy. And if it's preview, it will NEVER CHANGE 14:43:46 in the old model, `stable` meant "guaranteed not to have backwards incompatible changes" 14:43:48 samccann: yep, that is my thought train also 14:44:04 samccann: better have 'preview' which never changes, than having 'stable' and suddenly the interface of the module changes 14:44:07 acozine: not really, add 'without a very good reason' 14:44:12 i believe that is the first sign of the Apocalypse... or we just cracked open the First Seal or something 14:44:15 are we really ready to make that guarantee for all existing modules? 14:44:20 its mostly 'try to avoid as much as possible changing the interface' 14:44:39 bcoca: that's also what preview often means ;) 14:44:42 felixfontein - the deafult would be no default. We don't put anything 14:44:56 IF the module creator feels the need for a status, they manually add it to a module themselves 14:45:11 samccann: so the default value is null, most modules have no status 14:45:26 yes. there is no status 'field' so to speak 14:45:30 samccann: that would be OK for me too. I just don't like stable as a default :) 14:45:31 if a maintainer wants to advertise that her modules are guaranteed backwards compatible, she can 14:45:40 if you have something stetchy - add it as a note in the description or something 14:46:03 and if a new developer wants to warn that her modules are still WIP, she can label them `preview` 14:46:21 well, several issues a) do we want a standard field, b) if so, what should the values be, c) what do we want to enforce for ACD/AH 14:46:33 acozine - label how? if we have no specific field for that anymore. it's just a note 14:46:48 my nickel is no standard field 14:46:55 ah, so we won't have a field in `DOCUMENTATION` at all? 14:46:57 bcoca: I guess for ACD there's not much that can be enforced 14:46:59 ^ which i think works for most, at least for 2.10 we can always add later 14:47:12 yes acozine... no field at all 14:47:24 felixfontein: it can be, as a rule you must meet certain requirements to be included in 'next ACD release' 14:47:29 if we MUST have a field, I'd say it defaults to NULL and if null, never shows up on output 14:47:40 but that would mean coordinating with AH/galaxy on that 14:47:48 the main downside of that is that people will phrase their notes in many different ways, so there would be no way to look at that data in aggregate 14:48:04 bcoca: but then someone has to detect it first :) 14:48:23 felixfontein: yep, that is why iask the questions, cause they will require validation 14:48:37 does semver help us in any way here? 14:48:39 setting up a standard and not validating == creating 10239128409124 standards per day 14:48:48 samccann: theoretically, yes 14:48:49 is there a semver version for 'hey this might be unstable' :-) 14:48:51 bcoca: maybe AH has the resources for this; ACD will probably not have them 14:48:55 samccann: it could 14:49:04 but right now 'version' is per collection, not per plugin 14:49:29 felixfontein: why i make it a point, i dont think either has the resources to enforce such standard 14:49:32 bcoca: ah true, forgot about that 14:49:45 <1.0 in semver is unstable, any change in the first number (for example 2.x vs. 1.x) means backwards-incompatible changes 14:49:49 we coudl add 'plugin_version' ? 14:50:12 acozine: you also have beta/alpha/etc designations for post 1.0 14:50:13 he had that and people wanted it to be just the collection version, not per plugin 14:50:19 that would make versioning even more messy 14:50:24 let's stick to collection versions 14:50:26 bcoca: that seems like overkill 14:50:42 not advocating, just stating the options 14:51:01 ok how about - we have a documentation field for status, it defaults to NULL and we coordinate w/ Galaxy/AH to ignore if null 14:51:23 then developers can use the doc_fragment trick to either set all their plugins to stable or preview if they want? 14:51:49 so those who want a default of null ...set that in their fragment.. .those who want default preview... set that in their fragment? 14:52:10 I like that - it communicates "we make no promises" for anything that's not actively maintained, while giving active developers options for labelling an entire collection at once or module by module 14:52:16 hmm... but if we go that far, we might as well just set the default to 'something' 14:52:36 acozine: - true - best practices would be set the dang field in a doc fragment 14:53:03 I like it 14:53:19 and I think not having a default is good, resp. the default is "don't mention this in the docs" 14:53:52 yeah, don't make promises you can't keep, but also don't scare people for no good reason 14:54:12 #agreed create a documentation field for status, default is NULL and will not show up in output (docs or Galaxy/AH). Developer set their preferred default in a doc_fragment (preview or stable). 14:54:37 so this means we can remove ansible_metadata altogether 14:54:38 oh docfragment question - if the doc fragment is stable, can I then set an individual module as preview? 14:55:00 samccann: that would be desirable. if it doesn't work yet, I'm sure we can get that to work 14:55:04 all you have to do is leave out that doc fragment on that module 14:55:11 module > fragment, but again, designed for options, not top level keys 14:55:49 #action - need to test if a module status setting overrides the doc_fragment setting so an individual module could be preview if the doc_frag default is stable for example 14:56:06 well since it's a brand new field, it all has to be coded up right? 14:56:15 even in collections, doc fragments are "opt in", right? you still have to add `expands doc_fragment foo` to your module 14:56:33 yes 14:56:42 fragmetns only work if plugin references them 14:56:54 acozine: yeah but if you did use that for say 10 common options, then it would be really annoying to have to copy those options into a preview module, and then rip them back out again when it becomes stable 14:57:20 (when you removed and then added back in the doc_fragment) 14:58:05 looking at code, does seem fragmetns also apply to TLK 14:58:14 it jsut does specific job on notes/seealso/options 14:58:16 TLK? 14:58:27 but also, 'options' is required 14:58:42 top level keys, sorry 2 meeeints, i tend to over acronymize 14:58:43 well, you can have a separate doc fragment for status if you want it to be easily overridden, right? 14:59:18 acozine: true. 14:59:26 the most common use case is probably when a new module is added to an existing collection 14:59:37 default for the collection is `status: stable` 15:00:02 new module overrides that to `status: preview` when first created 15:00:08 next question for those who actually create collections/modules -how much of a pain is it if we require you to create a docfragment per collection at least to cover this status that we can't decide on a default for? 15:00:38 acozine: that feels like if a tree falls in a forest kind of question - can a collection be stable if it contains a preview module? 15:01:07 i'd say yes, but you know.. feels deeply philosophical now :-) 15:01:09 as long as we don't require a value, as long as the default is null, folks can choose to leave it out altogether, right? 15:01:18 yes 15:01:34 oh, I thought this value only applied to the individual modules 15:01:34 but what behavior do we want? no status (aka null) or stable/preview? 15:01:44 just note, galaxy, AH, docsite and ansible-doc will all have to change 15:02:19 #info whatever we decide, galaxy, AH, docsite, and ansible-doc will have to change... and likely docs pipeline and doc generation changes too 15:02:31 good question 15:02:46 Are we still talking about status in documentation? 15:02:53 abadger1999: welcome 15:02:57 * abadger1999 started reading log, then skipped a bit. 15:02:57 personally, I think I favor no status and the collection-level is what matters. 15:02:59 #chair abadger1999 15:02:59 Current chairs: abadger1999 acozine bcoca felixfontein samccann 15:03:00 yes 15:03:24 I'm unsure if stable/preview/etc makes sense in the collection world (except, ironically, for ansible-base) 15:03:33 as in a community collection is you takes what you gets... and if the collection owner feels strongly, they can set a default status for all their modules and override as necesary 15:03:47 It may be something that applies more to the whole collection. 15:03:47 samccann: so when a dev adds a new module to a collection, it needs to be stable on day 1? 15:03:48 abadger1999: it could make sense to declare some modules as preview, and some others as having a stable interface 15:04:06 (I mean... it could still apply at the individual module level but I'm not sure if it will apply that way in practic) 15:04:16 acozine: it's up to the dev to decide. 15:04:50 i'd like to say the stability of a module is based on the collection itself. Certified collections for example should have to have stable modules. Use the community versions to work out the kinks 15:04:52 * abadger1999 stills a second here and there to read the rest of the backlog.... two devices is good ;-) 15:04:55 if we set that at the collection level, then the dev has to say either "all modules are stable" or "all modules are preview"? 15:05:14 WE don't set at all. default is null. 15:05:23 I don't think this should be said at collection level 15:05:38 or do you mean doc fragment level with that? 15:05:40 but yes, the dev who disagrees with that is able to set it across their collection via a doc_fragment included in all modules 15:05:51 yeah I just mean the doc_fragment. Sorry to not be clear on that 15:06:17 So the certified collection owner for sure doesn't need this status (thus the NULL default) 15:06:26 what does the community collection owner need? 15:06:38 samccann: why? also a certified collection could contain preview modules 15:06:39 my nickel? they need the field 15:06:56 they shouldn't iMO 15:07:14 as I understand it, all certified collections have to exist as a community collection as well 15:07:17 then how could you have a module for a new technology which is constantly changing? 15:07:23 samccann: ah, so this would follow the RH standard of "bleeding edge is community/upstream only; certified content must be an older version" 15:07:33 so if you need preview modules, you include them in your communit ycollection and don't graduate them to the certified collection until they are stable 15:07:50 felixfontein: I think the idea is the new modules and latest changes are in the community version only 15:08:00 acozine: for sure but we'd have to verify all that w the certification folks 15:08:16 so with community, you don't mean collections in the community namespace? 15:08:33 and those modules only get added to the certified collection when they are stable 15:08:40 felixfontein: ah, good point 15:08:47 I mean collections that aren't certified are community.. whatever the namespace (I'm not sure of namespace rules here) 15:09:02 in this context "community" means "any collection hosted anywhere BUT in Automation Hub" 15:09:08 so a collection company.whatever could be "community" since it is not certified? 15:09:26 I think so... gundalow ^^ if you are around 15:09:27 let's better call it "non-AH collection" :) 15:09:37 company.whatever will have both a "community" version and a "certified" version 15:09:37 heh 15:09:39 community for me is something which doesn't belong to a company 15:09:46 felixfontein: ah, good idea 15:10:13 AH is the only place certified/*S*upported collections exist 15:10:33 though the same (literally bit wise identicle) code may exist on Galaxy 15:11:28 gundalow: if a certified collection wants to add a 'preview' module, would that only happen in the community version on Galaxy, or would a certified collection still be certified if it had a preview module in it? 15:11:50 * samccann realizes the irony of asking the community manager a deep certification/downstream question but anyway 15:12:14 I'm not sure if AH will be all stableinterface (what the status value actually is called, btw ;-)... I'm thinking of things like azure here, which has a lot of work behind it to get it certified but at the same time, as felixfontein points out, could be fast moving in the srvice itself, leading to backwards incompatible module releases. 15:12:18 Well, if there is a single repo, the same meta may exist in both places 15:13:05 I believe someone looked and saw that only a couple of modules had ever changed their `status`, so personally I'd be tempted to ignore it till there is a real demand 15:13:21 gundalow: we've agreed to phase out the ansible_metadata field 15:13:34 maybe we should simply skip that field now, and consider it later, for example with bcoca's proposal 15:13:43 gundalow: That's tempting for me too. (ie: don't add an explicit status to DOCUMENTATION until people as k for it) 15:13:45 https://github.com/ansible/proposals/issues/68 15:14:00 so now the question is, do we just leave it out altogether? or do we let people add it to DOCUMENTATION? 15:14:17 that would also allow to document in which version the module was marked as stable 15:14:39 acozine: right now `ansible-test sanity` will complain about unknown fields 15:15:22 also, the way we're designing this, this might be something that a generic keywords field might solve better. 15:15:29 which is more common - a module that 'should' be considered stable, or 'should' be considered preview? 15:15:43 and then let collection owners standardize on a keyword that means stableinterface. 15:16:38 abadger1999: do we care if they never standardize? I mean, if we end up with some modules marked "stable" and some marked "mature" and some marked . . . I don't know, something else? 15:17:06 I would prefer if we standardize it 15:17:14 to avoid chaos :) 15:17:18 do we ever want to look across all collections and say "X percent of modules are `preview`"? 15:17:24 yeah that kind of leads back to the earlier discussion of just let them add a note somewhere if that's necessary to distinguish 15:17:27 felixfontein: that's my instinct too 15:17:31 acozine: I'm on the fence... One part of my brain screams, that would be horrible. But another part of my brain screams, people will do the same thing with a standard name (just different ;-) 15:17:38 either standardize, or leave it out altogether 15:17:55 ie: some people will use stable to mean backwards compatible guarantees, others to mean, relatively bug free. 15:18:04 etc etc etc. 15:18:06 very true 15:18:08 "mostly harmless" 15:18:22 and as we've mentioned - once it gets set, it frequently never gets changed again 15:18:23 acozine: ++ for "mostly harmless" 15:18:40 indede :) 15:18:49 the more we talk about it, the more I'm leaning toward just letting it go 15:18:59 Let it gooooo let it gooooo 15:19:01 that's why I like bcoca's proposal - it comes with a common explanation text for keywords 15:19:12 * acozine looks at bcoca's proposal 15:19:12 acozine: me too. at least for now :) 15:19:28 so we let it go and people who want it go look at bcoca's proposal and discuss there for a future solution? 15:19:54 felixfontein: That's true... that is a good idea. I specify a small "keyword" into my docs but it gets expanded into something that is large enough so the meaning is unmistakable. 15:20:05 It's a good idea on how to resolve that. 15:20:54 so I can put a comment in the issue that was getting feedback on status to say we'll drop it entirely and go debate on bcoca's proposal instead? ( and see who screams?) 15:20:57 one question is whether the values should be standardized per collection, or by ansible for everyone 15:21:10 samccann: sounds good to me 15:21:17 samccann: +1 15:22:13 #action - samccann to comment on https://github.com/ansible-collections/overview/issues/57 to drop status entirely and ask for feedback on bcoca proposal 15:22:42 #link https://github.com/ansible/proposals/issues/68 15:22:45 I vote that it shouldn't exist (and ansible-test should shout if it does exist) 15:23:01 I like having specific descriptors of how a module behaves (supports check mode, executes locally/no connection) 15:23:38 felixfontein: I'd say those values should be standardized, and if possible verified by tests 15:23:56 so we are all agreed that ANSIBLE_METADATA gets dropped entirely, and no immediate replacement for STATUS 15:24:03 samccann: yes 15:24:06 samccann: +1 15:24:07 ^^ was a question :-) 15:24:08 acozine: most of these values are probably impossible to test automatically 15:24:23 #agreed ANSIBLE_METADATA gets dropped entirely, and no immediate replacement for STATUS 15:24:25 felixfontein: yeah, you're right . . . sigh 15:24:53 but they shouldn't be judgment calls - either your module returns facts or it doesn't 15:24:58 we are 5 min to the end... should we try for a quick summary of things like changelog status and docs pipeline? 15:25:03 that's not a "rating", it's a description 15:25:07 Someone could use the python rope library to script removing ANSIBLE_METADATA from modules... /me loves doing cleanup work but it tends to interefere with his job performance ;-) 15:25:10 version_added please! 15:25:15 samccann: good lord, how did that happen? 15:25:16 I've been waiting for that since last week 15:25:27 (well in fact for several weeks already) 15:25:34 #topic version_added 15:25:42 ack I need to drop sorry! 15:25:48 samccann: no worries 15:25:59 thanks for keeping us on the straight and narrow with metadata 15:26:02 I'd really like version_added to be used (with the collection version) for collections 15:26:16 so that it is clear from the docs from which collection version on a module/plugin/feature was added 15:26:44 bye samccann! 15:27:12 felixfontein: so for a parameter in a module in a collection, allow the developer to add `version_added: 1.2` where `1.2` is the collection version? 15:27:36 acozine: right now it can be used in collections, but there are no sanity tests for it 15:28:05 (it should be `1.2.0` though, 1.2 is not a valid semver) 15:28:10 how does the dev know which version of the collection it will be? especially for a collection maintained by multiple devs? 15:28:32 I guess the same way as for ansible/ansible - it has to be announced somewhere (potentially by galaxy.yml) 15:28:40 I believe the current version process is: each commit == a new version 15:29:02 currently there is no version process 15:29:13 (unfortunately) 15:29:18 in ansible/ansible before, we set the `ansible_version` to "the next release on the roadmap" and then test against that 15:29:24 s/test/tested 15:29:27 exactly 15:29:42 felixfontein: yeah, this proposal requires changes to Galaxy 15:29:53 I mean collections have to decide for themselves how exactly they determine which value to use 15:29:56 acozine: why? 15:30:15 because right now, every time I upload the collection to Galaxy, the version ticks up 15:30:25 at least, I believe that is the case 15:30:39 well, you have to tick up the version manually by updating galaxy.yml 15:30:58 galaxy only ensures that you don't upload a version you already had another time 15:31:11 (and maybe that you don't release 2.3.4 after 2.3.5 and things like that) 15:31:29 so if you and I are both adding features to community.general, and I add something to a mysql module and re-upload the collection and get 2.3.5 15:31:46 the collection is only uploaded when it is released 15:31:58 ah, is there a process for release? 15:31:59 only the RM (or a group of RMs) can do that 15:32:03 no, not yet 15:32:03 ah, okay 15:32:13 but it would be horrible if anyone could trigger a new release 15:32:24 then we would have version 37843771 in a year ;) 15:32:26 yep, that was the madness I was staring in the face 15:32:42 also the unpredictability 15:32:58 every collection should have a release process determined by the collection maintainers 15:33:05 will it be 3.4.7, or 3.4.8, or 3.5.0? 15:33:20 if you increase the patch level, no new features are allowed 15:33:37 if we are working toward a process, then it's much more predictable 15:33:37 so version_added will always be x.y.0 15:33:46 (if people don't ignore the semver requirement) 15:33:49 heh 15:34:27 so the main change on the docs side is to use the collection version instead of the ansible/ansible version, right? 15:34:58 Lacking a process to release, there are no releases. 15:35:02 heh 15:35:58 acozine: I would say so; putting ansible-base or ACD versions there doesn't really make sense 15:36:01 * abadger1999 had a horrid thought...... git commit hook 15:36:10 we'd need to remove pre-existing version_added entries, then enforce them for new features against the collection version 15:36:32 abadger1999: if you're horrified, I don't even want to know 15:36:35 acozine: they were already removed (except for return values) during migration 15:36:45 felixfontein: fantastic! 15:36:58 and I've created a PR which adds (optional) version_added validation to ansible-test, same as it is done for ansible/ansible (https://github.com/ansible/ansible/pull/69291) 15:37:10 even better! 15:37:29 acozine: the hard part is re-adding them with the new values for stuff added after 2.9 - I've already preparing that for community.network, community.general and community.crypto 15:37:50 I'm mainly waiting for a release process to know which version should be put there etc :) 15:38:09 sounds great, thank you for all that work! 15:38:14 and it would be good if the docs meeting could decide that version_added should actually be used for collection version ;) 15:38:32 it's the only thing that makes sense 15:38:34 right now it is "nobody knows, everyone does what they think is best" 15:38:40 I think so too 15:38:56 but so far there doesn't seem to be an "official" opinion on this 15:39:05 oh, interesting 15:39:35 (as for a lot of things) 15:39:37 I definitely vote for using the collection version as the basis for version_added from here on out 15:40:04 any other opinions? 15:40:15 felixfontein: +1 15:40:54 When to increment is one of the things I'm not sure about 15:41:22 we'll need to add documentation on "how to tell which versions of which collections you have installed" so those version_added notations are useful 15:41:37 acozine: `ansible-galaxy list` 15:41:43 perfect 15:41:45 acozine: `ansible-galaxy collection list` 15:41:47 I think 15:42:04 I meant, we'll need to add a paragraph or page about "how to manage your collections versions" 15:42:15 you get the version for every installed collection, and `*` if you installed a collection from source (i.e. git checkout) 15:42:25 acozine: that would be useful indeed! 15:42:45 gundalow: what do you mean? increment which value exactly? 15:42:54 gundalow: are you on board with "version_added should refer to the collection version"? 15:42:56 felixfontein: the version 15:43:03 in galaxy.yml? 15:43:06 acozine: yes 15:43:10 felixfontein: yup 15:43:10 excellent! 15:43:31 I would do it similarly as for ansible/ansible: bump the version as soon as you release, so it mentions the next version to be released 15:43:48 #agreed for new features in the module docs, `version_added` should refer to the collection version moving forward 15:43:54 at least the next major or minor version - patch versions should probably be released from branches 15:44:00 felixfontein: ah, yes, that sounds sensible 15:44:05 I have to step away for a short while 15:44:34 gundalow: thats one reason why I'm asking about releasing/versioning processes for community.general/community.network, because it's tightly coupled with this ;) 15:45:56 I'm going to skip the open floor this week 15:46:21 I guess nobody will complain 15:46:29 (or hope) 15:46:35 but I will be back at my desk shortly and anyone who has a question, concern, comment, or suggestion should post it here, even though the official meeting is over 15:46:38 #endmeeting