Commit Graph

414 Commits

Author SHA1 Message Date
Tim Hockin
b69fad211e Revert "Wake up rcs when pods get DeletionFinalStateUnknown tombstones" 2015-05-28 10:23:55 -07:00
Federico Simoncelli
1a41082ca8 cloudprovider: vagrant InstanceID implementation
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:02:11 -04:00
Federico Simoncelli
154eccefe2 cloudprovider: openstack InstanceID implementation
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:02:11 -04:00
Federico Simoncelli
afcda70190 cloudprovider: gce InstanceID implementation
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:02:11 -04:00
Federico Simoncelli
185d0e19d5 cloudprovider: aws InstanceID implementation
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:02:11 -04:00
Federico Simoncelli
466a7daaa8 cloudprovider: ovirt InstanceID implementation
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:02:11 -04:00
Federico Simoncelli
2a89428d44 api: add the ProviderID attribute to NodeSpec
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 13:01:58 -04:00
Federico Simoncelli
faba12951a cloudprovider: add support for InstanceID method
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 12:47:50 -04:00
Federico Simoncelli
194343267d cloudprovider: add the ProviderName method
This patch adds the ProviderName method used to identify the cloud
provider.

Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-28 12:47:47 -04:00
Quinton Hoole
9b67435cf3 Merge pull request #8899 from roberthbailey/ip-from-metadata
For GCE, compute the external IP by using the local metadata server
2015-05-28 08:29:38 -07:00
Justin Santa Barbara
97a312f72c Fix AWS volume detach 2015-05-28 06:48:19 -04:00
Wojciech Tyczynski
6ffe46a9e0 Merge pull request #8822 from bprashanth/fifo_rc
Wake up rcs when pods get DeletionFinalStateUnknown tombstones
2015-05-28 10:50:28 +02:00
Robert Bailey
1dfaa93ccd For GCE, compute the external IP by using the local metadata
server. This is in many ways a revert of #7530 but after auditing
the code I found that this function is now only used to determine
an address of the node where it is currently running.
2015-05-27 17:41:41 -07:00
Prashanth Balasubramanian
8fa66bd962 Delta fifo includes objects in DeleteFinalStateUnknow, rcs stop faster 2015-05-27 16:45:51 -07:00
Tim Hockin
f69eb0af67 Merge pull request #8831 from a-robinson/tp
Adjust the sleep time before tearing down e2e clusters and add a rough formula
2015-05-27 12:42:49 -07:00
derekwaynecarr
2f1dd9228f Fix Vagrant node registration and kube-push 2015-05-27 10:50:57 -04:00
Alex Robinson
9d61a95464 Adjust the sleep time before tearing down e2e clusters and add a rough formula
for determining how long the sleep should be.
2015-05-26 21:09:05 +00:00
Saad Ali
c5525ecfdc Merge pull request #8704 from roberthbailey/dead-flags
Deprecate flags for nodecontroller
2015-05-26 09:54:01 -07:00
Justin Santa Barbara
bb697cee7e Clear LoadBalancerStatus both on LB delete and on update in the API
Although it takes some time to destroy a load balancer, we hide this complexity
from the user.
2015-05-22 19:14:28 -04:00
Justin Santa Barbara
a271771341 Richer errors for validation 2015-05-22 19:14:28 -04:00
Justin Santa Barbara
7346cc8042 Add ServiceType = NodePort; wire everything up 2015-05-22 19:14:28 -04:00
Justin Santa Barbara
e49ad95462 Mark PublicIPs as deprecated & rename to DeprecatedPublicIPs in the latest API
We need to keep them in the API so that we can round-trip between versions.
2015-05-22 19:14:27 -04:00
Justin Santa Barbara
973c2e4819 Add Type to ServiceSpec: ClusterIP or LoadBalancer 2015-05-22 19:14:21 -04:00
Justin Santa Barbara
3884d5fc59 Add LoadBalancer status to ServiceStatus
This will replace publicIPs
2015-05-22 18:27:05 -04:00
Robert Bailey
d0bcf953e9 Deprecate the following flags for node-controller:
--node-milli-cpu
  --node-memory
  --machines
  --minion-regexp
  --sync-nodes

Remove the following flags from the standalon kubernetes binary:
  --node-milli-cpu
  --node-memory
2015-05-22 15:18:36 -07:00
Dawn Chen
17ac4b1dfc Merge pull request #8297 from iterion/switch-to-aws-sdk-go
AWS: Switch to aws-sdk-go
2015-05-22 12:31:07 -07:00
Dawn Chen
677a4aa1a7 Merge pull request #8164 from cjcullen/cloudprovider
Route creation reconciler loop.
2015-05-22 12:27:50 -07:00
Quinton Hoole
6d8eaa924e Merge pull request #7852 from a-robinson/tp
Prevent stranding of partial load balancers resources
2015-05-22 10:12:30 -07:00
CJ Cullen
e6da5b9601 Make routecontroller_test less hacky.
Rename reconcilePodCIDRs to reconcileNodeCIDRs.
Add comments and TODOs about using controller framework.
2015-05-21 18:05:11 -07:00
David Oppenheimer
6b428ef1a8 Merge pull request #7170 from simon3z/node-events
Node events recording fixes
2015-05-21 12:54:38 -07:00
Dawn Chen
b5c1098cb6 Merge pull request #8576 from a-robinson/svc
Fix misordered assignment in service controller
2015-05-21 09:38:08 -07:00
Federico Simoncelli
2f503c57a5 nodecontroller: improve node status event recording
This patch substitutes the misleading reason "unknown" for the event
recording. For symmetry with kubelet's message "online" the conditions
Unknown and False are reported as "offline".

Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-20 18:46:01 -04:00
Federico Simoncelli
21c57a5633 nodecontroller: remove unused ready event recording
It's not nodecontroller setting the node to Ready so it's impossible to
reach this condition.

Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-05-20 18:45:58 -04:00
CJ Cullen
0d12a15971 Route creation reconciler loop. 2015-05-20 14:21:30 -07:00
CJ Cullen
bf646abf8d Revert "Revert "Modify nodes to register directly with the master.""
This reverts commit c53786ab31.
2015-05-20 14:21:03 -07:00
Quinton Hoole
c53786ab31 Revert "Modify nodes to register directly with the master." 2015-05-20 13:47:51 -07:00
Alex Robinson
4214b76924 Fix misordered assignment in service controller 2015-05-20 11:51:48 -06:00
Adam Sunderland
ad9f2d7a56 Fix Some AWS Issues 2015-05-20 10:42:27 -05:00
Alex Robinson
dbf224475d Require DeleteTCPLoadBalancer to be idempotent and change the service
controller to rely on that, so that we won't strand partial resources
from them anymore (target pools in GCE, pools in OpenStack, etc.).
2015-05-19 17:06:54 +00:00
Alex Robinson
dc2f10d51b Make openstack's impl of DeleteTCPLoadBalancer idempotent with respect
to load balancers having already been deleted.
2015-05-19 17:06:50 +00:00
Robert Bailey
01467e0bb8 Modify nodes to register directly with the master.
- Delete nodes when they are no longer ready and don't exist in the
cloud provider.
 - Label each node with it's hostname.
 - Add flag to skip node registration.
 - Add a test for registering an existing node.
2015-05-19 09:55:07 -07:00
Brian Grant
2c81050e6f Merge pull request #8457 from davidopp/master
Fix stylistic isues with #5547. Closes #4910.
2015-05-19 07:43:21 -07:00
David Oppenheimer
44b1e1ca0c Fix stylistic isues with #5547. Closes #4910. 2015-05-18 23:32:06 -07:00
Tim Hockin
a548d542db Rename AffinityType to ServiceAffinity 2015-05-18 17:21:30 -07:00
Victor Marmol
45874d5f76 Merge pull request #5547 from gmarek/client3
Add a resource specifying number of Pods that are allowed to run on Kubelet.
2015-05-18 11:11:43 -07:00
Victor Marmol
4ba22e713a Merge pull request #8296 from jlowdermilk/gen-analytics
Add ga-beacon analytics to gendocs scripts
2015-05-18 08:40:02 -07:00
Alex Robinson
3cf80e76c8 Properly handle nil cached services in the service controller's node reconciler.
Add a test that catches the former bug.
2015-05-17 22:36:48 -07:00
Jeff Lowdermilk
553f9f822b Add ga-beacon analytics to gendocs scripts
hack/run-gendocs.sh puts ga-beacon analytics link into all md files,
hack/verify-gendocs.sh verifies presence of link.
2015-05-15 18:56:38 -07:00
Alex Robinson
edf5a78604 Don't try deleting a target pool if we failed to delete its forwarding rule. 2015-05-15 22:05:23 +00:00
gmarek
27d660d0ac Add a resource specifying number of Pods that are allowed to run on Kubelet. 2015-05-15 10:57:46 +02:00
Adam Sunderland
6f6ca0433f Fixing Tests 2015-05-14 19:24:27 -05:00
Adam Sunderland
9849db7fdf Fixing Many Issues 2015-05-14 18:53:47 -05:00
David Oppenheimer
7a21d7ab1f Merge pull request #8053 from jdef/upstream_mesos_cloud
integrate mesos cloud provider with k8s proper
2015-05-14 13:57:39 -07:00
Adam Sunderland
ff9996c100 Use aws-sdk-go 2015-05-14 14:18:25 -05:00
gmarek
8a4717d3f5 Remove unused ClusterName from NodeController 2015-05-14 18:01:23 +02:00
CJ Cullen
5e3d2b9138 Kubelet configure cbr0 instead of configure-vm.sh 2015-05-12 23:00:12 -07:00
James DeFelice
7387a2d0cd address review comments of @davidopp 2015-05-12 17:05:34 +00:00
James DeFelice
eca9fd58c7 mesos cloud provider implementation 2015-05-12 16:02:26 +00:00
Prashanth Balasubramanian
4fdd5bc3f3 Ratelimit replica creation 2015-05-08 14:24:25 -07:00
CJ Cullen
fbd125e4e2 Remove restriction that cluster-cidr be a class-b 2015-05-06 15:01:13 -07:00
CJ Cullen
292d33e33c Add synchronization around nodeMap 2015-05-05 17:11:38 -07:00
Jerzy Szczepkowski
e967ffd522 Added flag to set cluster class B network address for pods, add flag to disable allocation CIDRs for Pods. Fixed synchornization bug in NodeController registerNodes(). 2015-05-05 16:10:43 -07:00
Tomek Kulczynski
290c7b94ef Make nodecontroller configure nodes' pod IP ranges 2015-05-05 16:10:42 -07:00
Alex Robinson
5be3a5a9dc Merge pull request #7783 from GoogleCloudPlatform/revert-7609-lb
Revert "Truncate GCE load balancer names to 63 chars"
2015-05-05 15:23:35 -07:00
Quinton Hoole
8bc481d65c Merge pull request #7669 from a-robinson/lb
Change the cloud provider TCPLoadBalancerExists function to GetTCPLoadBalancer...
2015-05-05 11:42:06 -07:00
Quinton Hoole
1c7f6b82c7 Revert "Truncate GCE load balancer names to 63 chars" 2015-05-05 11:02:18 -07:00
Quinton Hoole
83b70c4411 Revert "Revert #7145 now that #7609 is in, and fix the tests that were relying on it" 2015-05-02 23:32:21 -07:00
Jeff Lowdermilk
b447dc0c54 Merge pull request #7635 from a-robinson/length
Revert #7145 now that #7609 is in, and fix the tests that were relying on it
2015-05-01 17:48:41 -07:00
Alex Robinson
a047250b53 Change the cloud provider TCPLoadBalancerExists function to GetTCPLoadBalancer,
which returns the IP/DNS address of the load balancer, enabling more
intelligent reconciliation in the service controller.
2015-05-01 17:42:23 -07:00
Eric Paris
6b3a6e6b98 Make copyright ownership statement generic
Instead of saying "Google Inc." (which is not always correct) say "The
Kubernetes Authors", which is generic.
2015-05-01 17:49:56 -04:00
Alex Robinson
890ff7b4aa Revert #7145 now that #7609 is in, and fix the tests that were relying on it. 2015-05-01 10:49:23 -07:00
Brendan Burns
40549dc083 Truncate GCE load balancer names to 63 chars 2015-04-30 17:54:11 -07:00
Brian Grant
2d37650c65 Merge pull request #7530 from mbforbes/nodeExternal
Make nodes report their external IP rather than the master's.
2015-04-30 12:29:45 -07:00
Piotr Szczesniak
11a2dc496f Added TerminationGracePeriod field to PodSpec and grace-period flag to kubectl stop
Those are changes which touch users required by Termination Notice

Addresses #6804
2015-04-30 18:00:33 +02:00
Max Forbes
e1c2e6b4b1 Make nodes report their external IP rather than the master's. 2015-04-29 15:44:25 -07:00
Wojciech Tyczynski
534a2fd27c Merge pull request #7171 from ravigadde/master
Node controller change to use field selector
2015-04-28 13:14:11 +02:00
Marek Grabowski
7a122a42d4 Merge pull request #7040 from justinsb/aws_nodeaddresses
AWS: Return public & private addresses in GetNodeAddresses
2015-04-28 10:56:50 +02:00
Ravi Gadde
4b5f851520 Node controller change to use field selector 2015-04-27 12:12:13 -07:00
Robert Bailey
0f22b6fc4d Merge pull request #7251 from a-robinson/tp
Move load balancer host / target pool reconciliation to the service controller
2015-04-24 13:17:54 -07:00
Alex Robinson
5d9564b1cc Improve GCE's implementation of UpdateTCPLoadBalancer to only make the
update calls if anything has changed.
2015-04-24 18:44:19 +00:00
Alex Robinson
6ae8e40d3d Move the logic for reconciling the host targets of external load balancers
from the node controller to the service controller before impending changes
to the node controller make it not fit there anymore.
2015-04-24 18:44:04 +00:00
Angus Lees
8818966d1f OpenStack: lb_method required when creating LbaaS pool
This change takes lb-method from [LoadBalancer] section of cloud
provider config file, defaulting to ROUND_ROBIN.

Fixes #7199
2015-04-23 15:19:14 +10:00
Brian Grant
15c2986a07 Merge pull request #7067 from ravigadde/master
Added field selector for listing pods
2015-04-22 07:12:21 -07:00
Brian Grant
1a9c179271 Merge pull request #7145 from caesarxuchao/6812
Resolve #6812, limit length of load balancer names
2015-04-22 07:09:23 -07:00
caesarxuchao
e9c5e44767 Use service UID as the ELB name 2015-04-21 12:20:42 -07:00
Justin Santa Barbara
5efd1e717f Add FakeEC2 Instances support for matching by instance id 2015-04-21 06:51:43 -07:00
Ravi Gadde
bf8f258471 Added field selector for listing pods. 2015-04-21 06:33:28 -07:00
Dawn Chen
28e0c68d65 Register node with nodename only. 2015-04-20 14:16:21 -07:00
Kenjiro Nakayama
2e702b0c61 Replace hostname -f with uname -n 2015-04-20 14:16:21 -07:00
Justin Santa Barbara
335f42b38c AWS: Return public & private addresses in GetNodeAddresses 2015-04-19 21:10:44 -07:00
Masahiro Sano
b2d68c79b7 use auto reauth when access token is expired 2015-04-18 18:41:54 +09:00
Robert Bailey
f633ac0ab5 Restrict functions and structs that aren't used outside of the
nodecontroller to have package private scope. This makes reasoning
about the code in this package much simpler.
2015-04-15 20:56:07 -07:00
Alex Robinson
fc08a0a71b Do service creation/update/deletion work in a pool of goroutines, protecting
each service with a lock to ensure that no two goroutines will process a
service at the same time. This is needed to avoid weird race conditions.
2015-04-15 00:30:18 +00:00
Alex Robinson
9a351e3670 Move validation of load balancers only supporting TCP ports to validation.go. 2015-04-14 18:56:51 +00:00
Alex Robinson
ccc300289f Implement a ServiceController that watches services and handles keeping
external load balancers up-to-date based on the service's specs, using
the new DeltaFIFO watch queue class. Remove the old registry REST
handler code for creating/updating/deleting load balancers.

Also clean up a bunch of the GCE cloudprovider code related to load balancers.
2015-04-14 18:56:24 +00:00
Alex Robinson
a11106edd3 Put the node controller in its own package rather than in the generic
cloudprovider/controller package.
2015-04-14 18:34:59 +00:00
Deyuan Deng
236db3c252 Remove kubelet dependency on nodecontroller 2015-04-13 16:59:45 -04:00
Wojciech Tyczynski
59ab41c8f7 Merge pull request #6292 from jszczepkowski/scale-pool
Updating target pools on cloud nodes change.
2015-04-13 10:58:49 +02:00
Dawn Chen
c19437395b Merge pull request #6702 from ddysher/remove-nodeinfo
Remove nodeinfo endpoint from kubelet
2015-04-10 14:54:16 -07:00
Justin Santa Barbara
9462471bcd Fix some mistaken volumeId -> volumeID changes 2015-04-10 13:25:44 -07:00
Justin Santa Barbara
933cf60af7 Style: volumeId -> volumeID 2015-04-10 13:25:44 -07:00
Justin Santa Barbara
98c9ebbc50 Style: Aws -> AWS 2015-04-10 13:25:44 -07:00
Justin Santa Barbara
2afc1840b6 Style: awsId -> awsID 2015-04-10 13:25:44 -07:00
Justin Santa Barbara
46f9c2cc3c Style: Ebs -> EBS 2015-04-10 13:25:44 -07:00
Justin Santa Barbara
5a887e83e7 Remove now-unused instanceId parameter from newAwsCloud 2015-04-10 13:25:43 -07:00
Justin Santa Barbara
4e176771b6 Make fetching the aws instance id optional, so we can use it on e2e 2015-04-10 13:25:43 -07:00
Justin Santa Barbara
aa6051026e Add comment about EBS status being a bit slow through API 2015-04-10 13:25:43 -07:00
Justin Santa Barbara
0101bf2081 Fix detached-check logic, warn on multiple attachments 2015-04-10 13:25:43 -07:00
Justin Santa Barbara
21beabd0a7 Default attachment status to detached
So no-attachments = status detached
2015-04-10 13:25:43 -07:00
Justin Santa Barbara
6c823dbdab Small clean-ups 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
f2184e0860 Fix comment 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
ee72fa4d61 Tolerate volume being already-attached 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
86ddc0f96a Fix mountpoint values 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
e56e2ee46a Strip leading slash from url path when parsing aws volume 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
743f2edb56 Fix tests 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
89089900d7 Fix merge problems 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
2812936d34 Simplify logic of pd.go 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
6a4153fc0a Always create volumes in the active k8s zone 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
ffadd5533a Fix AWS region vs zone
We were specifying a region, but naming it as a zone in util.sh

The zone matters just as much as the region, e.g. for EBS volumes.

We also change the config to require a Zone, not a Region.
But we fallback to get the information from the metadata service.
2015-04-10 13:25:42 -07:00
Justin Santa Barbara
8fde691aa7 Fix tests 2015-04-10 13:25:42 -07:00
Justin Santa Barbara
edf0292d4a Add initial support for Volumes to AWS 2015-04-10 13:25:42 -07:00
Deyuan Deng
868e05ce96 Remove nodeinfo endpoint from kubelet 2015-04-10 15:47:32 -04:00
Jerzy Szczepkowski
1c042208c7 Added retrying update of balancers in case some of updates failed. 2015-04-10 16:06:56 +02:00
Jerzy Szczepkowski
eb253a694e Updating target pools on cloud nodes change.
Implemented updating target pools for external services on chage of cloud nodes. Related to #5241.
2015-04-10 16:06:56 +02:00
Wojciech Tyczynski
88eb0b0295 FieldSelector for node List() 2015-04-10 12:53:16 +02:00
Daniel Smith
629d94657e Merge pull request #6624 from gmarek/status_to_subresource
Update NodeStatus use subresources.
2015-04-09 16:00:15 -07:00
gmarek
ccc56d3c3c Update NodeStatus use subresources. 2015-04-09 14:07:40 +02:00
Piotr Szczesniak
c1dd881f48 Added events back to Node Controller
It reverts @davidopp temp fix #6443.
Fixes #6199.
2015-04-09 10:37:07 +02:00
Masahiro Sano
d04cc5ced4 List in NodesInterface takes label selector 2015-04-08 23:41:27 +09:00
gmarek
72182735b9 Remove Node Controllers ability to pull status from Kubelet 2015-04-08 09:44:42 +02:00
David Oppenheimer
8599564c96 Merge pull request #6535 from davidopp/master
Change default Kubelet NodeStatusUpdateFrequency from 2s to 10s.
2015-04-07 13:37:03 -07:00
David Oppenheimer
d8aa57872a Change default Kubelet NodeStatusUpdateFrequency from 2s to 10s. 2015-04-07 12:36:09 -07:00
Clayton Coleman
51db3bd654 Create a new testclient package that can be backed by disk files
Standardize how our fakes are used so that a test case can use a
simpler mechanism for providing large, complex data sets, as well
as represent queries over time.
2015-04-07 14:56:15 -04:00
David Oppenheimer
402bf60366 Merge pull request #6214 from gmarek/move_consts_to_flags
Move NodeController constants to flags
2015-04-07 11:31:11 -07:00
gmarek
ef56dca6b6 Remove ConditionSchedulable 2015-04-07 17:01:07 +02:00
gmarek
321a81047c Move NodeController constants to flags 2015-04-07 12:33:03 +02:00
gmarek
751d1d25ff Add timestamp cache to NodeController 2015-04-07 09:15:35 +02:00
Rohit Jnagal
f2f3da15e1 Merge pull request #6370 from justinsb/aws_config_optional
Make AWS configuration file optional (fall-back to metadata service)
2015-04-06 14:29:28 -07:00
David Oppenheimer
c4a595aa7f Remove use of events from NodeController, to temporarily fix #6199 2015-04-04 11:56:43 -07:00
Justin Santa Barbara
b61fc222bb Make AWS configuration file optional (fall-back to metadata service) 2015-04-03 13:42:31 -07:00
James DeFelice
4d3a9e2203 fixes #6416 2015-04-03 19:13:25 +00:00
Piotr Szczesniak
8bc9f5fef7 Added rate limiting to pod deletion
Fixes #6228
2015-04-03 06:58:59 +02:00
Federico Simoncelli
f78301c5ab kubelet: log offline event message recording
Signed-off-by: Federico Simoncelli <fsimonce@redhat.com>
2015-04-02 09:07:32 -04:00
Piotr Szczesniak
5c6439d449 Removed PodStatus.Host
Fixes #6165
2015-04-02 16:38:45 +02:00
CJ Cullen
5e6e67ba59 Add an alternative TokenSource to the GCE CloudProvider. 2015-04-01 17:52:30 -07:00
Piotr Szczesniak
81683441b9 Merge pull request #6156 from gmarek/retry_loop
Add a retry loop to UpdateStatus in NodeController
2015-04-01 09:16:11 +02:00
Victor Marmol
44fda1fcd1 Merge pull request #6161 from justinsb/populate_addresses_new_nodes
Make sure we have addresses for newly discovered nodes
2015-03-31 14:46:06 -07:00
Victor Marmol
c93cd4a0d1 Merge pull request #6225 from cjcullen/cloudprovider
Fix typed-nil passing in cloudprovider/plugins
2015-03-31 13:04:11 -07:00
Justin Santa Barbara
72ee90494e Add unit test 2015-03-31 12:58:29 -07:00
Brian Grant
3354cffbf0 Merge pull request #6182 from thockin/plural_services_20
Implement multi-port Services
2015-03-31 12:55:21 -07:00