18:30:11 <sc68cal> #startmeeting networking_fwaas 18:30:11 <openstack> Meeting started Wed Dec 16 18:30:11 2015 UTC and is due to finish in 60 minutes. The chair is sc68cal. Information about MeetBot at http://wiki.debian.org/MeetBot. 18:30:12 <openstack> Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 18:30:14 <openstack> The meeting name has been set to 'networking_fwaas' 18:30:17 <sc68cal> #chair xgerman 18:30:18 <openstack> Current chairs: sc68cal xgerman 18:30:56 <ajmiller> Hi 18:31:00 <sc68cal> So. I think the biggest piece of business is getting the API spec from the 5 yard line, into the endzone 18:31:01 <bharathm> xgerman is on vacation. Not sure if he would join 18:31:02 <jwarendt> Hi 18:31:16 <madhu_ak> hi 18:31:16 <sc68cal> #chair SridarK 18:31:17 <openstack> Current chairs: SridarK sc68cal xgerman 18:31:23 <SridarK> Hi All 18:31:44 <sc68cal> #topic API spec discussion 18:31:58 <Aish> sc68cal: yes, we would like to get it merged. 18:32:04 <SridarK> sorry will be slow as i am debugging on another internal issue 18:32:13 <sc68cal> So - we're very close. I think there are some small details around the rule behavior 18:32:36 <sc68cal> #info openstack gerrit is being upgraded today 18:32:37 <SridarK> Aish: sc68cal: agree - i will have a last go later in the day today 18:32:59 <sc68cal> gotcha 18:33:03 <mickeys> I can do another round of comments tomorrow 18:33:26 <jwarendt> +1 18:33:32 <sc68cal> The main thing that kept me from +2'ing it was the addition of that note where if there is no source or destination included in a rule - that means that it matches any packet 18:34:26 <sc68cal> since gerrit is down I'll try and replicate my comment. Basically if you want it to match any packet, set the source or dest to 0.0.0.0/0 or ::/0 18:34:28 <mickeys> I checked security groups yesterday. The API allows no remote security group or remote address prefix. By the time it gets down to iptables, either way 0.0.0.0/0 is programmed in the rule. Horizon forces specification of 0.0.0.0/0 18:34:32 <xgerman> Hi, I am on mobile... 18:35:00 <xgerman> sc68cal: +1 18:35:04 <SridarK> sc68cal: to be more explicit 18:35:17 <SridarK> yes 18:35:43 <sc68cal> So, you must have a source and destination, that's my thinking for the rule 18:36:05 <sc68cal> now , the question is do we want to let rules that mix the kinds of source and destination 18:36:16 <sc68cal> like source_ip_prefix and destination_firewall_group 18:36:27 <mickeys> I thought it would be easier for users if they don't have to specify both, but if everyone else thinks they should both be specified, fine 18:36:41 <mickeys> I think we should allow source_ip_prefix and destination_firewall_group 18:36:48 <sc68cal> ^ this works for me 18:36:57 <xgerman> +1 18:37:04 <mickeys> Remember that if you are going to something external, firewall_group does not work 18:37:22 <jwarendt> Allow mixing from my perspective. 18:37:40 <sc68cal> mickeys: a firewall group could be external 18:37:52 <sc68cal> like if you have a 2nd subnet, router, and network, or something 18:37:57 <mickeys> A firewall group is a group of ports. How does that represent external addresses? 18:38:24 <sc68cal> mickeys: could be addresses on another tenant network - same tenant 18:38:33 <xgerman> External to the tenant but still in the same cloud 18:38:34 <mickeys> Maybe I should have said outside of OpenStack rather than external 18:38:43 <xgerman> Yep 18:39:04 <sc68cal> mickeys: gotcha - well if it's outside of openstack then it couldn't be a firewall group 18:39:12 <sc68cal> they'd most likely use ip prefix 18:39:14 <mickeys> If I want to allow traffic from some firewall group to a set of outside address prefixes, for exapmle 18:39:41 <mickeys> So we have to allow source and destination to use different constructs 18:39:51 <sc68cal> right - and I think we're all on board with that 18:40:02 <jwarendt> +1 18:40:08 <Aish> +1 18:40:18 <xgerman> +1 18:40:56 <sc68cal> so I mean that's the only two little things - if we just update the spec to reflect that, I'm ready to +2 it 18:41:38 * sc68cal moves the football to the 1 yard line 18:41:44 <SridarK> sc68cal: i just need some time till end of day to run thru 18:41:56 <SridarK> but over all i am fine 18:42:02 <xgerman> sc68cal: any opinion on position - priority 18:42:05 <xgerman> ? 18:42:30 <sc68cal> I haven't really followed it - so if we have consensus on one or the other I'm willing to follow 18:42:39 <sc68cal> is it just semantics, and they do the same thing? 18:42:49 <SridarK> xgerman: i am still on position for now - but we can look at if based on bandwidth 18:43:36 <xgerman> Ok. 18:43:38 <mickeys> They achieve the same thing, but the behavior is different 18:44:06 <mickeys> With position, things shift when you insert a rule. There is a specific API to insert a rule before or after another rule. 18:44:20 <mickeys> With priority, you just specify a value. Does not have to be monotonic, there can be gaps. 18:44:28 <mickeys> No insert before or insert after. 18:44:37 <mickeys> No shifting 18:44:55 <SridarK> mickeys: yes agree - more in lines of how much code we need to rewrite for M 18:44:55 <mickeys> Specific priority value is specified in the API 18:45:15 <sc68cal> ok - so based on that, I think I like position. 18:46:04 <sc68cal> I guess my only criticism is that with priority it's an opaque value 18:46:47 <sc68cal> with position, the ordering is a bit more explicit, plus it's one less thing a client has to put in his CLI or API request 18:47:20 <xgerman> Well, position is two things before and after 18:47:26 <sc68cal> since position is set and returned to the user, right SridarK ? 18:47:48 <xgerman> Nope. Position changes when you insert a new rule 18:48:09 <SridarK> position is just set relatively as specified 18:48:15 <sc68cal> xgerman: oh? it gets added at the head of the list, not tail? 18:48:21 <jwarendt> Position doesn't scale or cache or work RESTfully, since based on state of other rules and not self-contained. 18:48:32 <sc68cal> jwarendt: fair point. 18:48:42 <SridarK> jwarendt: agreed on that 18:48:53 <xgerman> +1 18:49:19 <sc68cal> if we go with priority - will it be a required value? 18:49:34 <xgerman> Yep 18:49:38 <sc68cal> or optional/assigned for you if you don't send it in your req 18:50:12 <xgerman> I think we want to be deterministic 18:50:17 <SridarK> sc68cal: that would be tricky 18:50:22 <sc68cal> SridarK: agreed 18:50:42 <xgerman> Required would be best 18:50:48 <mickeys> Some vendors automatically assign, doing +10 with every new rule. It is not easy to explain, or can be a little complex. 18:50:54 <mickeys> In ACLs on routers and switches 18:51:42 <sc68cal> OK - so my thinking is this. If we can, let's try out position - but let's definetly whip up a spec for priority 18:52:29 <sc68cal> since migrating between the two isn't really that big a deal unless I'm mistaken. 18:53:28 <SridarK> sc68cal: i agree on this, it may be a significant change on the rule front 18:53:52 <SridarK> if we can do this great else we get it in N 18:53:52 <sc68cal> priority being a required attribute is sort of a stretch to me, to force a user to pick some arbitrary value 18:54:57 <sc68cal> I 18:55:15 <sc68cal> am not hard core on this, we can always revisit later 18:55:33 <mickeys> +1 18:55:34 <sc68cal> and the migration between would be pretty straight forward from position to priority 18:56:00 <sc68cal> could just take position and multiply by 10 or something to give people space to stick stuff in between 18:56:03 <SridarK> sc68cal: i think we can figure that out with a mapping of position to priority 18:56:11 <SridarK> sc68cal: yes 18:57:13 <xgerman> Well, I think we can do that from the get go but didn't sign up for it so will defer to sc68cal 18:58:43 <mickeys> I think we have another big issue that could use more discussion. The current proposal is that things like IP address, protocol, port are in the API but not in the data model. This means they would get translated to address group and service group in the data model, and when you do a get, you would see the groups. I think if we are going to have individual IP address, protocol, and port, we should put them in the data 18:58:43 <mickeys> model as well. We should remember which one was provisioned and return that in the API when you do a GET. 18:58:53 <mickeys> IMO, it is both easier on the users, seeing the same thing in GET that they put in POST, and I think it is easier to populate the same fields from multiple sources in the plugin than to translate the API into different database objects. 18:59:49 <xgerman> I think having two representations for the same thing is confusing 19:00:13 <xgerman> Also that just complicates the data model 19:00:48 <SridarK> i think we discussed this earlier and thought we would refrain from doing this under the covers 19:02:32 <sc68cal> mickeys: good point 19:02:33 <xgerman> We only agreed that we give them those convenience functions 19:03:25 <mickeys> That was one proposal. I don't think we discussed it enough to reach full consensus. 19:03:56 <xgerman> Well, storing things two ways leads to a mess for little gain 19:04:43 <sc68cal> I think i'm a +1 on mickeys thinking 19:04:43 <mickeys> The place to reduce complexity is the API more than the data model, but we had good reasons for leaving individual IP address as well as address group in the API. 19:05:15 <xgerman> Well, I would kick them out 19:05:52 <jwarendt> I am +1 on mikey's position from a user perspective 19:06:16 <xgerman> So if you specify both it gets confusing 19:06:32 <mickeys> Both in one rule, or different rules? 19:06:45 <mickeys> We said we won't allow both in one rule for source, or both in one rule for destination 19:06:56 <xgerman> Even different rules you need to look in two places 19:06:57 <sc68cal> in one rule, I agree with xgerman. No doing both source_ip_prefix and source_firewall_group in the same rule 19:07:01 <SridarK> one rule is definitely out - we agreed on that 19:07:14 <sc68cal> pick one from the kinds of sources, one from the kinds of desintations 19:07:28 <mickeys> +1 19:07:41 <mickeys> I don't see the problem if some rules use individual IP address while other rules use address group 19:07:47 <sc68cal> but I think to mickeys point - don't munge it in the database. Make sure when we return a rule it's the same fields that they stuck in 19:08:19 <sc68cal> and with the neutron-classifier effort, that's actually pretty easy 19:08:44 <sc68cal> for now we just make the rule database table contain all six fields - but we can slim it down by using classifiers later 19:09:02 <mickeys> We can map to the same thing in the driver before we send RPCs down to the agent 19:09:33 <sc68cal> my thinking is, 6 columns for the src and dst types, but a single row would have just 2 filled in with data, the rest null 19:09:54 <sc68cal> until we swap over to classifiers, so we have less null columns floating around 19:10:04 <sc68cal> in a row 19:10:11 <xgerman> Well, I hate special cases... 19:10:23 <SridarK> i think that would work - so it is either the addr colum or the reference to the address group column 19:11:40 <sc68cal> or the firewall group column 19:11:56 <mickeys> +1 19:12:03 <xgerman> And if I like to add another address to my rule I either have to create a new rule with that up or delete that rule and make a new one with address group 19:12:17 <mickeys> Yes 19:12:22 <sc68cal> xgerman: sounds right 19:12:37 <sc68cal> or update the address group, if your rule pointed to it 19:13:07 <xgerman> Which it won't since we stopped automatic conversion 19:13:26 <xgerman> So like people would add another rule with ip 19:13:29 <mickeys> There are consequences to which representation the user chooses. They are not that bad. 19:13:42 <sc68cal> xgerman: yeah most likely 19:13:57 <sc68cal> mickeys: +1 19:14:11 <sc68cal> I think we've given them plenty of rope to hang themselves with 19:14:13 <sc68cal> :) 19:14:17 <SridarK> :-) 19:14:22 <sc68cal> plenty of yak shaving instruments 19:14:39 <xgerman> That is my concern - so I like to limit choices 19:15:40 <xgerman> But I trust sc68cal that classifieds will solve that :-) 19:15:45 <sc68cal> :) 19:16:42 <mickeys> On that note, the initial implementation will not use sc68cal's classifier proposal for the data model? 19:17:24 <sc68cal> mickeys: it might. but for the time being we just make the database table for a firewall rule map directly to how it looks in the API 19:18:01 <mickeys> sc68cal: OK. I will leave it up to you when you want to introduce the classifier. 19:18:30 <mickeys> Given all the things we have added, the classifier will need to be updated whenever we get to it. 19:18:53 <sc68cal> mickeys: right. I plan on pairing up with Aish on the database work and we'll go from there about using classifier 19:19:03 <xgerman> Cool 19:19:12 <Aish> yup.. 19:19:18 <sc68cal> but for the purpose of the spec we can just plan worst case to just make a firewall rule in the DB be exactly like it is in the REST API 19:19:32 <sc68cal> then optimize it when we get to the code 19:19:42 <mickeys> Except for associations instead of lists ... 19:19:50 <sc68cal> mickeys: yep, exactly 19:19:51 <SridarK> sc68cal: +1 for M 19:19:54 <SridarK> mickeys: +1 19:20:25 <SridarK> sc68cal: can we save 5 mins for other discusions 19:20:38 <sc68cal> SridarK: sure. open discussion? 19:20:42 <SridarK> y 19:20:50 <SridarK> mid cycle etc 19:20:59 <sc68cal> any last things about api spec from anyone? 19:21:07 * sc68cal thinks he's shaved his yak down to stubble 19:22:04 <sc68cal> #topic open discussion 19:22:29 <SridarK> xgerman: ur suggestion was to pick a hotel near the airport ? 19:22:35 <SridarK> for the midcycle 19:22:40 <xgerman> Yes 19:23:00 <xgerman> That saves on driving in the morning 19:23:28 <SridarK> ok but is there a shuttle or we need to rent a car in terms of getting to the location 19:23:56 <SridarK> i guess i can look that up too - but if any of u have done this location b4 19:24:07 <xgerman> Most Rent a car but we can carpool 19:24:19 <SridarK> ok sounds good thx xgerman: 19:24:57 <xgerman> I also Once used cabs and Nummer rĂ¼des to The dinner location 19:25:30 <SridarK> ok 19:26:34 <SridarK> Also are folks around next week for the mtg ? 19:27:03 <xgerman> Let's skip the next two 19:27:14 <xgerman> And resume next year 19:27:17 <SridarK> xgerman: +1 19:27:48 * xgerman already on vacation 19:27:51 <SridarK> there is probab quite a few folks off 19:29:08 <sc68cal> sounds good to me 19:30:37 <xgerman> Bye 19:30:53 <xgerman> #endmeeting