20:00:00 #startmeeting Windows Working Group 20:00:00 Meeting started Tue Nov 21 20:00:00 2017 UTC. The chair is nitzmahone. Information about MeetBot at http://wiki.debian.org/MeetBot. 20:00:00 Useful Commands: #action #agreed #halp #info #idea #link #topic. 20:00:00 The meeting name has been set to 'windows_working_group' 20:00:19 hey all 20:00:54 Noice, I timed it so it started *exactly* at 20:00:00 :D 20:01:19 #chair jborean93 20:01:19 Current chairs: jborean93 nitzmahone 20:01:22 must be fate :) 20:01:22 hey 20:01:31 #chair jhawkesworth_ 20:01:31 Current chairs: jborean93 jhawkesworth_ nitzmahone 20:02:18 #info agenda @ https://github.com/ansible/community/issues/195 20:02:33 o/ 20:02:51 #chair dag 20:02:51 Current chairs: dag jborean93 jhawkesworth_ nitzmahone 20:03:48 #topic https://github.com/ansible/community/issues/195#issuecomment-345934601 20:05:37 * nitzmahone shakes fist at `get_md5` 20:05:41 hopefully self-explanatory, just asking for some feedback around new parameters and how we want to handle files that have multiple hard link relationships 20:06:58 Well, so the options are a polymorphic value (scalar or list), always a list, or "first found", basically, right? 20:07:38 Much as I dislike it for usability purposes, I think "always list" is more usable than "sometimes list" 20:07:43 `hlnk_targets` is a list of paths that is only returned if there are 2 or more 20:08:18 I was more asking whether that was a good name to use/whether we always want to return it even if there is only 1 (normal file) 20:08:38 Yeah, I'd def vote for "always return" 20:08:47 Plus the question around do we consider a file that is a hard link to be considered a link, `stat` doesn't 20:09:12 I think it is useful, as while it is a file, it is technically a link to some data on the drive somewhere 20:09:21 (ie `islnk=true` in that case?) 20:10:38 yep, I think `isreg=True` is also set in that case for `win_stat`, but `stat` only set's `isreg=True` for hard links 20:10:54 I think the names are fine in keeping similarity with `stat` (would vote otherwise if this were a truly greenfield module) 20:12:14 I think the names are fine too. 20:12:19 What about the behaviour for hard links? 20:12:28 * nitzmahone doesn't have a strong opinion 20:12:51 * jhawkesworth_ re-reads PR 20:12:54 I guess which way gives you more useful info? I'd kinda argue maybe stat has it right 20:13:13 But not strongly 20:13:25 does it, it says the file is a regular file when in reality it is a file hard linked to some data 20:13:36 * jborean93 does not know the correct terms 20:13:56 But that's technically any file 20:14:28 (if I'm understanding the distinction you're trying to make) 20:14:49 So it would only be a hard-link if there were more than one reference, right? 20:15:05 Yea, that's why I only returns `hlnk_targets` if it is more than 1 and set `islnk=True` and `lnktype=hard` in those cases 20:15:42 Yeah, that makes sense, but for any use case I can think of, I'd expect `islnk=False` on an ordinary file. 20:16:09 Unless you're doing something I'm not making the connection on 20:16:25 a hard link is a regular file in Unix 20:16:55 a hard link is exactly the same as the original, there's no distinction between both, they are identical 20:16:59 Right 20:16:59 `islnk=False` is set when there is only 1 target 20:17:02 there's only a reference count 20:17:09 But set to True is there are multiple 20:17:39 dag that's fair enough but then `stat` doesn't really have a way of telling you if the file is also referenced (hard linked) to another path 20:17:43 this way it does 20:18:08 Maybe we should just do `islnk=False` always on hard links and just return the other pointers in `hlnk_targets` 20:18:30 Ok, so also remove `lnk_type=hard` as well? 20:18:44 jborean93: I wonder how stat does it, on Unix you cannot easily list all files linking to an inode (unless you scan the whole filesystem) 20:18:44 Preserve islnk just for symlinks and junctions 20:18:45 islnk seems to mean is symlink then. 20:18:58 (or junction) 20:18:59 * dag checks python 20:19:09 python stat() 20:19:22 s_ISLNK is only for symbolic links 20:19:31 in Python yep only for symbolic links 20:19:42 Windows I had for junctions/sym and hard links but I can remove hard links 20:19:58 Is a hardlink the same on Windows ? 20:20:02 actually stat module doc is clear islnk is just about symlinks, now I look 20:21:05 @dag: yes and no- it's still an ordinary file, but the link count is tracked by the filesystem 20:21:08 I don't think junction points are a valid concept in unix? 20:21:21 well, closest thing is a mount point 20:21:58 graft a different filesystem onto a node of an existing one 20:22:41 I can remove `lnktype` and add another return value `isjunction` to keep it more in line with the python `stat` 20:23:08 That might not be a horrible plan, esp if we're not going to treat hardlinks specially (other than just returning hlnk_targets) 20:23:33 Windows documentation refers junctions as soft links 20:23:47 but they only work on directories ? 20:23:52 So then islnk would be false for junctions as well (technically breaking change but I'd be surprised if anyone noticed) 20:24:21 I have never spotted a junction in the wild on a windows box 20:24:23 Yea I don't think backwards compatibility is a big issue on the link stuff 20:24:50 https://en.wikipedia.org/wiki/NTFS_reparse_point 20:25:10 ok cool, so I can make that change, we also wanted to return `hlnk_targets` for everything, even if it is only 1 (not a hard link)? 20:25:23 @jhawkesworth_: I've used them for some things myself; IIRC that's also what things like "Documents and Settings" are now 20:25:54 I'd be fine with hlnk_targets always there even if either empty or includes self... 20:26:01 Maybe empty would be better though 20:26:14 (do we currently include self?) 20:26:27 Yep 20:26:32 I can change that though 20:26:43 So only show other hard linked files 20:26:48 +1 20:26:52 thanks nitzmahone good to know 20:27:35 Yeah, for the use cases I can think of, you'd probably need to remove your own link from the list if you were poking at the others... 20:27:46 (so just don't put it in there) 20:28:15 Ok, sounds good 20:28:41 #action jborean93 to remove `lnk_type`, add `is_junction` and fix of `hlnk_targets` according to what was dicussed 20:28:52 #topic: https://github.com/ansible/community/issues/195#issuecomment-346039030 (win_get_url timeout bug) 20:28:55 sounds great 20:29:26 Haven't tried to repro myself yet, but this just sounds like a bug where we never tried it with a big remote file that took too long. 20:29:53 I use win_get_url a lot so surprised I haven't hit this before. Is this latest devel dag? 20:30:09 * jhawkesworth_ checks I'm not still using a custom version 20:30:26 https://msdn.microsoft.com/en-us/library/system.net.webrequest.timeout(v=vs.110).aspx 20:30:53 Looks like this just changed in August 20:31:16 Yep I believe 2.4 added the feature 20:31:32 Doesn't look like WebRequest offers a granular connect-vs-operation timeout 20:32:03 still running 2.3 in prod at the moment, likely why I haven't hit it 20:32:21 Seems like we might need a backgrounded timer or something to kill it instead of relying on that property 20:32:35 Yes, it was added in v2.4 20:32:50 So something like: 20:33:14 If we keep it as-is, it works differently between Unix/Windows, but the default 10 seconds will be a problem 20:33:26 if timeout is set, set timer before we make the request, and when the timer expires, if we haven't gotten any content yet, nuke the request and bomb the module result 20:33:38 (do an async fetch) 20:34:01 So a poor-man's connection timeout 20:34:06 personally I don't see a good use for timing out the whole operation 20:34:12 Nor do I 20:34:17 (hence the proposed change) 20:34:45 Yea, I think we should revert the timeout stuff for the 2.4.2 release and look at re implementing it at a later time 20:34:55 could you guys test this first, to see if my assessment is correct ? 20:35:10 * nitzmahone tries it 20:35:34 I only noticed this on a slow network, because in the lab everything used to finished within 10 secs (40Gbit links) 20:36:42 I think you are correct, I believe I saw this when creating `win_wait_for` but will see what nitzmahone says 20:37:48 it is weird nobody reported it though 20:37:58 Hmm, on devel, with `timeout=1` downloading a 500M file, it appears to be working fine 20:38:20 So I just specified url, dest, and timeout 20:38:46 lemme try a smaller one 20:40:05 Hrm, I'm not seeing the failure 20:40:22 Specifies how long the request can be pending before it times out. Enter a value in seconds. The default value, 0, specifies an indefinite time-out. 20:40:51 so this seems to imply a "pending" request, so related to DNS lookups etc. 20:41:14 so maybe that's what I am seeing in the lab 20:41:29 I'll open an issue where we can discuss 20:42:12 Yeah- the docs are definitely clear as mud on what exactly that property does 20:42:37 But doesn't look like it's related to the actual download time, so (whew) 20:42:49 hehe 20:43:27 #action dag to open issue for win_get_url timeouts (not related to download length apparently) 20:43:28 so next topic ? 20:43:31 #topic open floor 20:44:10 jhawkesworth_ proposed to clean up the Wiki docs now that everything is in devel branch 20:44:24 that's in progress. 20:44:41 I have been looking at open ideas/tasks and stroke some that we have finished in the meantime 20:44:45 been though the windows guides now. Small pr with tiny typo fixes in it coming 20:46:35 cool. in the middle of moving a lot of servers to s2012r2 at the moment. 20:46:44 where are we with Windows coding style and coverage ? 20:46:49 agenda updated w/ today's resolutions 20:46:58 Was just talking about that with mattclay today 20:47:16 Now that we have the unified container, I'm going to redo the stuff I had to use it instead of requiring the MS container 20:47:37 unified container ? 20:47:41 (just need to add the requisite bits to the unified container Dockerfile and rebuild) 20:47:49 The ansible-test container where the sanity tests run 20:48:29 aha 20:48:34 I haven't come up with a sane way to do it locally yet, because PSScriptAnalyzer can't accept a list of files, only a single dir tree, so we filter the stuff on the host and copy only the relevant bits to the container 20:49:08 Might do a PR to PSScriptAnalyzer to add support for that, I *think* it'd be pretty easy (famous last words) 20:49:33 It's the container we use with `ansible-test` when passing `--docker default` (soon to actually be the default so you can use just `--docker`). 20:50:15 If we could just pass it a list of files/dirs. then running locally would be trivial 20:50:21 once we have it, I guess we prefer to clean up the existing modules in a big bang ? 20:50:46 or do we make a legacy whitelist file 20:50:50 It supports an ignore list like other things 20:50:50 I think it's going to be an exclusion list kind of thing, similar to the pep8 stuff 20:50:51 nitzmahone: Ideally we'd be able to support both local (passing file names) and in our `default` docker container (for CI). 20:50:55 (which is a blacklist in fact) 20:51:06 @mattclay yep, that'd be the idea 20:51:45 I'd go for the simple `skip.txt` approach and then clean up the files incrementally until that list is empty. 20:52:26 ok 20:52:33 So yeah- I don't want to make everything passing gate the inclusion of the sanity check; IIRC the way I had it it would also error if something was on the ignore list that didn't need to be 20:52:53 Yeah, that part is good to have to avoid regressions later. 20:53:11 nice 20:53:22 I'd probably be working on that, since I find it important to have all our modules be perfect examples for future contributors 20:53:24 nitzmahone: So you went the same route as the existing pep8 check then? 20:53:34 Yeah, I based it off pep8 20:53:45 That should work good. 20:53:46 can't remember if I got all that stuff working though 20:53:54 The basics were definitely working fine 20:54:02 Just don't remember where I left the ignore stuff 20:54:16 * mattclay goes back to fixing invalid escape sequences in modules 20:54:44 OK, anything else for today? 20:55:00 previously mentioned doc fixes PR now raised: https://github.com/ansible/ansible/pull/33161 20:55:17 I'd be good to discuss the different proposed style changes here 20:55:24 thanks jhawkesworth_ will have a look today 20:55:41 may contain British English :-) 20:56:48 perfect for me, the Queen's English is the only English in my mind 20:57:14 :-) 20:57:23 :-) 20:57:40 We've got 3 minutes left- do we want to open the bikeshed? 20:57:47 one more quick question 20:58:04 fire away 20:58:06 is there any progress on the new argspec handling (more in line with python) 20:58:07 If I recall the plan was to start with a few style rules and see what got flagged up and then iterate? 20:58:20 that was the other major item on the list iirc 20:58:30 It's like 3-4 down on the stack right now :( 20:59:03 yeah, I think I was using the ruleset that Jordan proposed in the original issue 20:59:41 I still have a few more issues to work out around how to get clean exits from both PS and .NET callers 20:59:55 (WRT the declarative argspec stuff) 21:00:14 how about the threaded implementation ? :-) 21:00:32 is that going to be v2.5 material ? 21:00:48 Heh, I think jimi's actually been doing some work on that- it'll probably be experimental for 2.5, but I think it's planned to be "in" 21:01:10 nice 21:01:18 and jinja2 native types 21:01:20 He's got it so it's feature-flagged with an envvar now, so you can flip back and forth 21:01:25 v2.5 will be great :) 21:01:38 yeah, sounds like great progress 21:01:39 configuraby great 21:01:40 Yeah, I think Tanner hit a snag or two with the native types, but don't remember where it got left 21:02:01 It's in upstream Jinja 2.10, but may have a bug 21:02:46 I've been doing `platform` prototyping the past couple days; hit some snags there too :( 21:03:23 I haven't seen an official roadmap for v2.5 21:03:45 only some bits and pieces from network people 21:03:49 is it just https://github.com/ansible/ansible/projects/9 ? 21:03:56 #info 2.5 roadmap https://github.com/ansible/ansible/projects/9 21:03:57 yep 21:04:13 oh ! 21:04:14 That's the project board for all the RH-generated stuff 21:04:22 There is a roadmap file now as well 21:04:34 But the project board is the best place for up-to-date status 21:04:39 https://github.com/ansible/ansible/blob/devel/docs/docsite/rst/roadmap/ROADMAP_2_5.rst 21:05:07 I didn't know we're using the projects stuff now for development (the network team was doing it before) 21:05:13 jborean93: thanks ! 21:05:27 it didn't exist last time I looked 21:05:40 need to updates some Wiki pages now ;-) 21:05:49 I think thaumos recently merged it but the github board is definitely the source of truth for this release 21:06:01 Yeah, it's kinda tough since non-committers can't participate, so that's basically just what we're using for core team project mgmt 21:06:26 aha, and deadlines have been set 21:06:46 good to know 21:06:58 and already pretty close :-( 21:07:06 Indeed :( 21:07:39 Gonna be a busy 8 weeks (esp with holiday/shutdown eating a big chunk out of that) 21:08:09 Always close, we've gotten a few things out for the Windows side when it comes to the engine, become is a lot more handy than before 21:08:38 woot for that 21:09:05 \o/ 21:12:23 OK, calling it. Thanks all! 21:12:28 #endmeeting