Skip to content

Commit

Permalink
Add ingress suppport to GCE provider
Browse files Browse the repository at this point in the history
  • Loading branch information
wallyworld committed Feb 1, 2017
1 parent 4b846de commit e662469
Show file tree
Hide file tree
Showing 15 changed files with 826 additions and 631 deletions.
27 changes: 27 additions & 0 deletions network/portrange.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,3 +196,30 @@ func parsePortRange(portRange string) (PortRange, error) {
}
return result, nil
}

// CombinePortRanges groups together all port ranges according to
// protocol, and then combines then into contiguous port ranges.
// NOTE: Juju only allows its model to contain non-overlapping port ranges.
// This method operates on that assumption.
func CombinePortRanges(ranges ...PortRange) []PortRange {
SortPortRanges(ranges)
var result []PortRange
var current *PortRange
for _, pr := range ranges {
thispr := pr
if current == nil {
current = &thispr
continue
}
if pr.Protocol == current.Protocol && pr.FromPort == current.ToPort+1 {
current.ToPort = thispr.ToPort
continue
}
result = append(result, *current)
current = &thispr
}
if current != nil {
result = append(result, *current)
}
return result
}
38 changes: 38 additions & 0 deletions network/portrange_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,3 +277,41 @@ func (*PortRangeSuite) TestMustParsePortRangeInvalid(c *gc.C) {

c.Check(f, gc.PanicMatches, `invalid port range "10-55-100".*`)
}

func (*PortRangeSuite) TestCombinePortRanges(c *gc.C) {
testCases := []struct {
in []network.PortRange
expected []network.PortRange
}{{
[]network.PortRange{{80, 80, "tcp"}},
[]network.PortRange{{80, 80, "tcp"}},
}, {
[]network.PortRange{{80, 82, "tcp"}, {83, 85, "tcp"}},
[]network.PortRange{{80, 85, "tcp"}},
}, {
[]network.PortRange{{83, 85, "tcp"}, {80, 82, "tcp"}},
[]network.PortRange{{80, 85, "tcp"}},
}, {
[]network.PortRange{{80, 83, "tcp"}, {85, 87, "tcp"}},
[]network.PortRange{{80, 83, "tcp"}, {85, 87, "tcp"}},
}, {
[]network.PortRange{{85, 87, "tcp"}, {80, 83, "tcp"}},
[]network.PortRange{{80, 83, "tcp"}, {85, 87, "tcp"}},
}, {
[]network.PortRange{{85, 87, "tcp"}, {80, 83, "tcp"}},
[]network.PortRange{{80, 83, "tcp"}, {85, 87, "tcp"}},
}, {
[]network.PortRange{{80, 83, "tcp"}, {84, 87, "udp"}},
[]network.PortRange{{80, 83, "tcp"}, {84, 87, "udp"}},
}, {
[]network.PortRange{{80, 82, "tcp"}, {80, 80, "udp"}, {83, 83, "tcp"}, {81, 84, "udp"}, {84, 85, "tcp"}},
[]network.PortRange{{80, 85, "tcp"}, {80, 84, "udp"}},
}, {
[]network.PortRange{{80, 82, "tcp"}, {81, 84, "udp"}, {84, 84, "tcp"}, {86, 87, "udp"}, {80, 80, "udp"}},
[]network.PortRange{{80, 82, "tcp"}, {84, 84, "tcp"}, {80, 84, "udp"}, {86, 87, "udp"}},
}}
for i, t := range testCases {
c.Logf("test %d", i)
c.Check(network.CombinePortRanges(t.in...), jc.DeepEquals, t.expected)
}
}
273 changes: 0 additions & 273 deletions network/ruleset.go

This file was deleted.

Loading

0 comments on commit e662469

Please sign in to comment.