14:03:12 #startmeeting meeting 14:03:12 Meeting started Mon Mar 13 14:03:12 2017 UTC. The chair is mvollmer. Information about MeetBot at http://wiki.debian.org/MeetBot. 14:03:12 Useful Commands: #action #agreed #halp #info #idea #link #topic. 14:03:12 The meeting name has been set to 'meeting' 14:03:19 ah, thanks! 14:03:22 andreasn, please go ahead 14:03:28 [cockpit] stefwalter opened pull request #6091: test: Fix timeout in check-openshift rolebinding check (master...rolebinding-test-wait) https://git.io/vy6Q2 14:03:30 .hello mvo 14:03:31 mvollmer: mvo 'Marius Vollmer' 14:03:32 then I'll sit back and relax? :) 14:03:34 .hello garrett 14:03:35 garrett: garrett 'Garrett LeSage' 14:03:35 .hello andreasn 14:03:35 .hello larsu 14:03:37 * stefw won't make it ... unfortunately 14:03:37 .hello sgallagh 14:03:37 andreasn: andreasn 'Andreas Nilsson' 14:03:37 .hello martinpitt 14:03:40 larsu: larsu 'Lars Karlitski' 14:03:43 sgallagh: sgallagh 'Stephen Gallagher' 14:03:46 pitti: martinpitt 'Martin Pitt' 14:03:50 andreasn, ok, I'll lead 14:03:52 .hello dperpeet 14:03:53 dperpeet: dperpeet 'None' 14:03:59 thanks! I'll do two in a row 14:04:04 next time 14:04:07 jds2001: Around? 14:05:11 * jds2001 is here 14:05:23 sorry im late :/ 14:05:39 .hello jstanley 14:05:40 jds2001: jstanley 'Jon Stanley' 14:05:40 heh, not really! :) 14:05:48 #topic Agenda 14:07:02 * system mgmt roles, ansible, nfs? 14:08:52 dperpeet, is that about ight? 14:08:55 yes 14:09:01 okay, anything else? 14:09:02 * new switcher design 14:09:25 * translations 14:10:12 alright, let's get started 14:10:22 #topic system mgmt roles, ansible, nfs 14:11:13 How do we want to start? 14:11:28 Should we have mvollmer summarize the decision process he's followed thus far? 14:11:56 /me attempted to do this second-hand during the Server SIG meetings, but probably best to hear it straight from him 14:12:04 ohh, well. 14:12:13 trello card: https://trello.com/c/N9X1xDT4/433-epic-nfs-server-configuration 14:12:19 I am just listening and try to write the code that people expect to see 14:12:26 feature page: https://github.com/cockpit-project/cockpit/wiki/Feature:-NFS-Server 14:13:02 i can summarize what I think I have heard from people 14:13:32 i am hoping to gain a lot of new understanding in this meeting, actually 14:13:51 ok 14:14:09 mvollmer, I think a good way of describing this is how you came to make the choices in https://github.com/cockpit-project/cockpit/pull/5745 14:14:24 and why you think we shouldn't implement it that way anymore 14:14:37 alright 14:15:37 give me a few seconds 14:16:19 And if anyone else has time to spare, I could use some more of it too ;-) 14:16:28 so we have two options, in the big picture 14:17:32 Cockpit uses the sysmgmt APIs that are defined using Ansible as a framework 14:18:01 Or Cockpit uses the sysmgmt APIs that are used by the sysmgmt roles 14:18:22 for example, Cockpit can either call a Ansible playbook to configure the network 14:18:29 Or it can talk to NetworkManager 14:19:06 there are definite advantages to each. 14:19:11 This is similar to how in the old days, we had to decide between talking to OpenLMI APIs 14:19:16 and disadvantages :) 14:19:18 or to talk to the system APIs directly 14:20:07 are you concerned that Ansible meets the same fate of OpenLMI? 14:20:14 with OpenLMI, we didn't see the advantage, and we went directly with the system APIs 14:21:15 OpenLMI would just be one more level of indirection, and it wasn't totally mature at the point 14:21:16 Ansible is independently successful, so that part of it is irrelevant 14:21:51 but ansible doesn't define an API 14:21:57 now with ansible, I would expect a typical sysmgmt role to be non-trivial and have some real value 14:22:08 Ansible *is* an API of sorts. 14:22:15 for example, there isn't a nice sys api for configuring NFS, I think 14:22:26 and a ansible role would give us that API 14:22:32 ack 14:23:00 larsu: Ansible "roles" are an API. Ansible "playbooks" are a client of that API 14:23:23 however, if a sys api on the level of NetworkManager od UDisks would exist, it would be better than the sysmgmt role. 14:23:40 Well, "better" is a loaded term 14:23:47 it would have a natural way to expose the current state and provide notifications 14:24:00 It would certainly be more convenient for the way Cockpit likes to interact with things 14:24:01 sgallagh: right. my point was that ansible doesn't strive to define an api in the way that openlmi did 14:24:14 Ansible is all about implemeting a desired end state. 14:24:28 what the current state is is somewhat irrelevant. 14:24:39 right, and cockpit is kind of the other way around 14:24:51 indeed 14:24:57 e. g. udisks represents current state but has no policy 14:25:04 NM has policy through configuration, but still reacts to current state 14:25:14 and cockpit should reflect that 14:25:39 network bonds are a good example, maybe 14:25:50 it almost seems to me that it would be a better fit to use cockpit's bridge API to implement ansible than using ansible to implement cockpit 14:25:52 for bonds, NM is pretty one-way 14:26:06 (not that ansible would actually want to do that, but illustrating the layering) 14:26:08 and we should really fix that and have it report the state of bonds etc 14:26:22 right, but IMHO that's a bug, not by design 14:26:31 exactly 14:26:45 with ansible, it would be by design, I guess 14:26:56 with sysfs/udev and the CLI tools it's perfectly possible to get notified to bond changes and get current state 14:27:05 Well, Ansible *can* poll for state. 14:27:08 you can gather state with ansible. 14:27:12 yeah, ansible has a different goal 14:27:15 sgallagh: sniped me :) 14:27:15 But it has no persistent daemon running to notify you 14:27:46 we can combine ansible with something else 14:28:03 cockpit is for interactive/reactive administration, ansible (similar to cloud-init or puppet etc.) for noninteractive creation of "cattle" type machines, or did I misunderstand this? 14:28:10 for NFS, we could use the nfs role to configure things 14:28:18 and then use something else to monitor the state 14:28:23 pitti: it can be used for the latter. 14:28:29 pitti: you understood perfectly. Ansible is a very bad match for a UI like cockpit 14:28:42 just as im sure you can somehow use cockpit in ways it wasn't designed for to do that. 14:28:47 but it can really do either. 14:28:49 jds2001: you mean cockpit can be used for "cattle" targets? 14:29:05 oh, I suppose you meant "former" 14:29:09 pitti: im sure somehow, someone could find a way :) 14:29:32 but ansible can do t he latter, it can also do the former. 14:29:36 jds2001: yeah, as I said you can use the cockpit API to implement a policy (but that's the opposite of the proposal here, I think) 14:30:15 pitti, it is definitely a goal for cockpit to be used on cattle targets, mostly for trouble shooting 14:30:36 if you look at the (proprietary) Ansible Tower, it has the concept of "surveys" 14:30:54 so, the carrot that would pull me is that with the ansible sysmgmt roles, we get more experts to contribute. 14:31:06 this is used for reactive administration, pulling ansible firmly into that realm. 14:31:07 Well, with my Red Hat firmly perched on my noggin: There's definitely a goal to unify offerings at Red Hat (this is general knowledge). Ansible has effectively already established itself as the closest thing we have to an administration UI in Fedora/RHEL. 14:31:20 they would design the best practices and robust implementation, and we would just use that 14:31:23 That won't soon change, and it would be best if we were not working at cross purposes 14:31:42 sprinkling some monitoring stuff on top is easier 14:31:46 mvollmer: i think that's the point. 14:31:55 mvollmer: (getting more experts to contribute) 14:32:11 And that *is happening* right now (re: best practices and robust implementation) 14:32:32 pardon the bluntness, but there is nothing per-se in ansible that would help Cockpit directly 14:32:36 I think at this point we should think about whether having reliable feedback from a process (e.g. applying a playbook via ansible) is something Cockpit really *needs* to have, or if it would just be nice 14:32:38 mvollmer: for instance, I can write an Ansible role/ 14:32:41 petervo: yes, I think jds2001 meant "former", I was just trying to parse it the wrong way :) 14:32:42 mvollmer: Well, that's not entirely true 14:32:48 you're not going to find me writing C code :) 14:32:52 But I'll grant you it's not a strong argument 14:32:59 (or rather, you wouldnt want that which i wrote :D) 14:33:09 For example, Ansible is really the closest thing we have to a reasonable API for managing Samba 14:33:36 because someone has written the code for Samba 14:33:38 Because it relies on editing of a largely-incomprehensible text file to manage. 14:34:52 mvollmer: I think the biggest advantage to using Ansible is the wealth of external contributors it already has, which provides some assurance about its maintenance. 14:35:03 andreasn, what do you think about this from a user's perspective? 14:35:18 Add to that the fact that numerous things we want to do have no presently-existing traditional API. 14:35:35 dperpeet: Well, ideally this is a transport layer that the user wouldn't see. 14:35:38 you mean the ansible python code? I am not worried about it going away. 14:35:38 ^ that is certainly a big bonus point 14:35:41 But obviously the feedback question is important 14:35:51 so I feel focusing on the roles, such as NFS, Samba, IPA or whatever is the most critical stuff 14:36:13 sgallagh, I think in this case it could be important 14:36:19 using Ansible to run that and ALSO networking are two different things 14:36:23 TBH I see very little reason to replace our NM backend with an ansible role backend, but for managing complex config files for things which are not hw dependent and thus also don't have hotplugging/enumeration capabilities, such as samba, it makes much more sense 14:36:33 i think that using Ansible as that backend is a force multiplier in the development of those roles. 14:36:42 if we use something under the hood that doesn't provide the same level of feedback users experience in other parts of Cockpit, we have to make sure that still works in the UI 14:37:04 yeah, this is the main problem: we'd still need to connect to the dbus APIs 14:37:05 pitti: To be clear: I am not personally making *any* suggestion that we replace existing work with an Ansible backend 14:37:18 because we want change notifications and stuff 14:37:20 pitti, I think we're talking about taking specific playbooks 14:37:25 sgallagh: completely understood; I was just thinking aloud really, to make sure we're all on the same page 14:37:27 but now we talk to the same thing in two different ways?! 14:37:31 to put the system into a desired state -> a specific role 14:37:33 pitti: Never a bad idea 14:37:54 sgallagh: (I don't pretend to have a deep understanding of ansible) 14:38:00 Neither do I :) 14:38:26 larsu: not advocating for that. That's what I'd like to *avoid* is that maintenance nightmare. 14:38:54 jds2001: right, but how? 14:39:10 it generally appears to me that ansible is much like cloud-init or puppet (set a policy, and roll it out), while cockpit is much more like gnome-control-center or nm-applet (show/reflect hw/state changes and interactively administrate) 14:39:41 so using one to implement the other seems a bit tricky as they aren't really meant for doing that; but reusing some of its knowledge certainly sounds interesting 14:39:45 let's look at an example, maybe 14:40:08 exporting folders (nfs config), and the seeing how many people have them mounted 14:40:14 (is that even possible)? 14:40:33 andreasn, I think you hd that in your mockup, right? 14:40:33 The first half is, the second half is not (really) 14:40:35 mvollmer: there are commands that can do that 14:40:35 technically the nfs kernel server should know (not sure how to display it though) 14:40:47 mvollmer: not toally accurate though 14:40:51 IIRC, you can only see how many separate clients are connected to NFS *at all*, not to any specific share 14:40:56 let's pretend it's possible 14:41:10 And you can't differentiate without effort if they are coming from different sources or multiple connections from the same machine 14:41:12 how would ansible help with getting that number into the UI? 14:41:14 if seeing who has something mounted is not possible we can cut that 14:41:25 mvollmer: easily 14:41:41 it can return such a number to you, if someone expert enough knows how to generate it. 14:41:53 it's something that OSX server has, and it helps with deciding to turn off the thing right now or not. But it can be scaled back to not do that 14:41:54 yeah, it's fuzzy -- NFS is (mostly) stateless over UDP, so you don't necessarily have persistent open connections 14:42:19 jds2001, and we have to poll, right? 14:42:20 oh, and I think I cut that out of the mockups actually 14:42:26 andreasn: FWIW, I *think* Ganesha can also do this, but we don't use Ganesha as our NFS server. We use the kernel-provided one 14:42:28 mvollmer: yes 14:42:39 jds2001, yeah, we would need to poll in any case, I guess 14:42:49 so ignore the whole "what users are connected?" part 14:43:00 unless the kernel nfs server gets a varlink API that exposes this. :-) 14:43:36 so lets focus on the other stuff. Can we do that with Ansible? 14:43:37 jds2001, what about just polling without trying to make any changes? possible? 14:43:47 andreasn: Which other stuff? 14:43:53 https://raw.githubusercontent.com/cockpit-project/cockpit-design/master/roles/nfs-server.png 14:43:56 mvollmer: Yes, possible 14:44:05 okay 14:44:28 jds2001, did you see the current PoC in Cockpit? 14:44:37 sgallagh: how would cockpit be notified about mounts changing? 14:44:42 mvollmer: no :( 14:44:55 jds2001, here: https://github.com/cockpit-project/cockpit/pull/5745 14:45:31 larsu: That's actually a more complicated question than you might realize, since there's no state in kNFS. 14:45:37 larsu: But short answer is "polling" 14:45:42 one wart is that once a playbook fails, the system is in a "something went wrong, ahhhh" state 14:45:42 is ansible just writing /etc/exports, or adding the exports dynamicaly (exportfs)? but in either way we can watch /etc/exports and /var/lib/nfs/etab 14:46:01 sgallagh: no, I mean the exports from this machine. Right now we have an inotify on /etc/exports 14:46:43 larsu: OOI: "we have" == where? 14:46:50 larsu: That actually only tells you when the file changes, which isn't the same as the actual export changing 14:47:05 I can edit it, save it, etc. for hours before I tell the kNFS server to read it 14:47:14 pitti: sorry, I think this is only stef's demo thing that he uses at conferences, not a production module 14:47:24 sgallagh, jds2001, are there any requirements on a sysmgmt role, like "either succeeds, or doesn't change anything"? 14:47:25 maybe it makes sense to separate the user stories: 1) just apply one role, only care about success 2) interactively change multiple settings depending on feedback 3) monitoring a system 14:47:58 cockpit does 2 and 3 currently 14:48:00 mvollmer: Good question. 14:48:29 with cockpit using ansible 1 is good (except for the mentioned case where something breaks) 14:48:32 I don't think we actually stated any requirements at that level up to now. 14:48:51 It's generally been "if you provide valid input, the deployment must succeed". 14:48:59 But we kind of handwaved how to deal with bad input 14:49:31 sgallagh, in any case, Cockpit will consume the roles one by one, and we can look at each one very closely to see how well it works for us, and try to improve it if necessary 14:49:35 what happens with good input and it still fails? (hw fault, file system errors, timeouts, etc)? 14:49:36 sgallagh: so? My point that ansible won't help here still stands. And it's not designed to do something like this at all 14:50:10 larsu: I think you mean "won't help specifically with change notification", yes? 14:50:16 yes 14:50:21 I agree 14:50:27 just trying to apply this to the example at hand 14:50:31 "must succeed" works in a cloud or container environment when you can just throw away the instance and retry, but "must succeeds" is an inachievably strong guarantee :) 14:51:10 pitti: Well, in rolekit I had it written so that it saved the state and restored it, but that was mostly me being picky and not a written requirement. 14:51:16 Probably it should be, of course 14:51:44 I also think we may be overthinking the change notification situation when dealing with NFS 14:51:55 Changes to NFS configuration are generally very rare 14:52:18 On the order of weeks, months or even years between modifications. 14:52:22 yeah, and we can probably deal with that through inotify (etab/exports) and nfs-kernel-server systemd unit watching 14:52:28 jds2001: (Is that a fair statement?) 14:52:53 sgallagh: yeah i think so 14:53:01 (although that kind of moots the point of this -- the change notification is the hard part, adding a new export is rather simple) 14:53:17 pitti: The point of what? 14:53:24 let me try to clarify: The PoC will detect changes to the configuration (via inotify on the playbook) 14:53:29 of using an ansible role as an implementation backend 14:54:04 pitti: You still have to manipulate the exports file properly, which Ansible already has a role for. 14:54:33 here is another point: the sysmgmt roles will be lowest common denominator across many OSes, right? 14:54:58 while Cockpit wants to offer the best of a specific OS 14:55:10 mvollmer: sorry, I'm not sure what you refer to when you say "symgmt roles" in that context. 14:55:28 let's say RHEL 8 gets a super new feature re NFS 14:55:29 Ansible cna work on many OSes yes 14:55:38 well, writing a file is easy, regardless of whether it's exports.d/ or yaml; reading/interpreting it is the hard part 14:55:40 mvollmer: what if it does? 14:55:46 will the ansible role expose that feature although it's not available on rhel 7? 14:55:56 mvollmer: then we write a new thing for $super_new_feature :) 14:56:03 mvollmer: yes. 14:56:08 mvollmer: Does "sysmgmt roles" == "ansible roles" to you? 14:56:13 I just want to speak with a common language 14:56:14 i guess 14:56:18 five minutes left of this meeting 14:56:22 yep 14:56:22 mvollmer: ansible roles can check the version of a target, etc. 14:56:23 the advantage of ansible is that it uses yaml across multiple different use cases (say, NFS or samba), thus it's easier to interface with several different scenarios 14:56:44 mvollmer: and do different things based on that. 14:57:18 so if $super_new_feature becomes available in RHEL 8, we just write that feature in, and only use it there. 14:57:21 yeah, impossible is nothing 14:57:46 jds2001, but will it really be done? 14:58:01 mvollmer: it's pretty routinely done, I think. 14:58:05 aren't the ansible roles all about "reaching back in time"? 14:58:30 mvollmer: It may depend on the feature, but I do have answers :) 14:58:39 but yeah, i guess it would be stupid not to expose new features... 14:58:56 If the feature is possible to be implemented without requiring new information from the user, it will just be done under the hood 14:59:31 If the feature requires new information, a new option will be available in the ansible script. If used against an older version, the new field will be ignored and the lowest-common-denominator implementation will be used. 14:59:49 gotta dive out of the meeting. Standup time 15:00:07 same here, different standup :) 15:00:32 alright, that saves me from bringing this to a stop. :) 15:01:17 dperpeet, do you want to quickly say something about your topics? 15:01:27 sure 15:01:42 #topic new switcher design 15:02:10 this is just a heads up 15:02:15 https://github.com/cockpit-project/cockpit/pull/6082 15:02:25 implements the first part of https://github.com/cockpit-project/cockpit/wiki/Feature:-Task-Switcher 15:02:32 and also finally makes the sidebar menu scrollable 15:03:12 neat! 15:03:20 I think it looks great 15:03:27 thanks stefw and garrett 15:04:12 nice 15:04:14 next? 15:04:22 yup 15:04:26 #topic translations 15:04:58 With release 134 translations are now available on the login page as well 15:05:02 http://cockpit-project.org/blog/cockpit-134.html 15:05:26 and I want to add a shameless call for more translations on zanata - https://fedora.zanata.org/project/view/cockpit?dswid=-8859 15:05:49 and thanks a lot to all the contributors who already added a lot of translations 15:06:10 for example I could make the login page look very Chinese already with what we have :) 15:06:16 end of topic 15:06:35 thanks! 15:06:40 that's it, right? 15:07:04 thanks everyone! 15:07:07 #endmeeting