Skip to content
This repository was archived by the owner on Aug 21, 2025. It is now read-only.

Commit 4af981c

Browse files
authored
Merge pull request #134 from GSA-TTS/zjr/add-net-policy
Go add some network policies…
2 parents 392ae33 + dcd0bac commit 4af981c

8 files changed

Lines changed: 253 additions & 15 deletions

File tree

go.mod

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,25 @@ go 1.23.5
44

55
require (
66
github.com/cloudfoundry/go-cfclient/v3 v3.0.0-alpha.9
7-
github.com/google/go-cmp v0.6.0
7+
github.com/google/go-cmp v0.7.0
88
github.com/spf13/cobra v1.8.1
99
)
1010

1111
require (
12+
code.cloudfoundry.org/cf-networking-helpers v0.47.0 // indirect
13+
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
14+
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a // indirect
1215
github.com/kr/pretty v0.3.1 // indirect
16+
github.com/onsi/ginkgo/v2 v2.23.4 // indirect
17+
github.com/openzipkin/zipkin-go v0.4.3 // indirect
18+
go.uber.org/automaxprocs v1.6.0 // indirect
19+
golang.org/x/tools v0.34.0 // indirect
1320
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
1421
)
1522

1623
require (
24+
code.cloudfoundry.org/lager/v3 v3.39.0
25+
code.cloudfoundry.org/policy_client v0.57.0
1726
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 // indirect
1827
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
1928
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab // indirect

go.sum

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
code.cloudfoundry.org/cf-networking-helpers v0.47.0 h1:kHOw6K/eaMDuq87uQ/kl1art6MV0e8VvhZeayhuz0AY=
2+
code.cloudfoundry.org/cf-networking-helpers v0.47.0/go.mod h1:BRbPfwQACMDPGaxmfPR1bmynjXPfb6nSqda0FhEJd7s=
3+
code.cloudfoundry.org/lager/v3 v3.39.0 h1:axxT3QTIu7ZWNyV7IKtNrSP4xmtMPbgbIJ5lY3ixYU8=
4+
code.cloudfoundry.org/lager/v3 v3.39.0/go.mod h1:xcAxUZal+NkRwwF40JEY/rouQB/IaIfzjf5wi3jSYUs=
5+
code.cloudfoundry.org/policy_client v0.57.0 h1:YW+NpBuEHz9arTxRnyz7DPTX3N5KgcrFrNXjZcycjB0=
6+
code.cloudfoundry.org/policy_client v0.57.0/go.mod h1:jnUDM9jyNwf8/nHhBBadlPbhPkzmi/ihlkGAhEPtmEs=
7+
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
8+
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
19
github.com/cloudfoundry/go-cfclient/v3 v3.0.0-alpha.9 h1:HK3+nJEPgwlhc5H74aw/V4mVowqWaTKGjHONdVQQ2Vw=
210
github.com/cloudfoundry/go-cfclient/v3 v3.0.0-alpha.9/go.mod h1:eUjFfpsU3lRv388wKlXMmkQfsJ9pveUHZEia7AoBCPY=
311
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q=
@@ -7,41 +15,83 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
715
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
816
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
917
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
18+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
19+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1020
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab h1:xveKWz2iaueeTaUgdetzel+U7exyigDYBryyVfV/rZk=
1121
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
12-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
13-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
22+
github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo=
23+
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
24+
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
25+
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
26+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
27+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
28+
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a h1://KbezygeMJZCSHH+HgUZiTeSoiuFspbMg1ge+eFj18=
29+
github.com/google/pprof v0.0.0-20250607225305-033d6d78b36a/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
1430
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
1531
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
32+
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
33+
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
1634
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
1735
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
1836
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
1937
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
2038
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2139
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
40+
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
41+
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
2242
github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw=
2343
github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI=
44+
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
45+
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
46+
github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
47+
github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
48+
github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg=
49+
github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c=
2450
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw=
2551
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0=
2652
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
53+
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
54+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
2755
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
2856
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
2957
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
58+
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
59+
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
3060
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
3161
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
3262
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
3363
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
3464
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
3565
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
3666
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
67+
github.com/square/certstrap v1.3.0 h1:N9P0ZRA+DjT8pq5fGDj0z3FjafRKnBDypP0QHpMlaAk=
68+
github.com/square/certstrap v1.3.0/go.mod h1:wGZo9eE1B7WX2GKBn0htJ+B3OuRl2UsdCFySNooy9hU=
3769
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3870
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
3971
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
4072
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
4173
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
4274
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
75+
github.com/tedsuo/ifrit v0.0.0-20230516164442-7862c310ad26 h1:mWCRvpoEMVlslxEvvptKgIUb35va9yj9Oq5wGw/er5I=
76+
github.com/tedsuo/ifrit v0.0.0-20230516164442-7862c310ad26/go.mod h1:0uD3VMXkZ7Bw0ojGCwDzebBBzPBXtzEZeXai+56BLX4=
77+
go.step.sm/crypto v0.66.0 h1:9TW6BEguOtcS9NIjja9bDQ+j8OjhenU/F6lJfHjbXNU=
78+
go.step.sm/crypto v0.66.0/go.mod h1:anqGyvO/Px05D1mznHq4/a9wwP1I1DmMZvk+TWX5Dzo=
79+
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
80+
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
81+
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
82+
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
83+
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
84+
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
4385
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
4486
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
87+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
88+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
89+
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
90+
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
91+
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
92+
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
93+
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
94+
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
4595
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4696
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
4797
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

runner-manager/cfd/cloudgov/cf_client.go

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ package cloudgov
33
import (
44
"context"
55
"os"
6+
"strconv"
7+
"strings"
8+
9+
"code.cloudfoundry.org/lager/v3"
10+
"code.cloudfoundry.org/policy_client"
611

712
"github.com/cloudfoundry/go-cfclient/v3/client"
813
"github.com/cloudfoundry/go-cfclient/v3/config"
@@ -132,7 +137,46 @@ func (cf *CFClientAPI) mapRoute(
132137
return err
133138
}
134139

135-
// addNetworkPolicy implements ClientAPI.
136-
func (cf *CFClientAPI) addNetworkPolicy(app *App, dest string, space string, port string) error {
137-
panic("unimplemented")
140+
func parsePortRange(prange string) (start int, end int, err error) {
141+
ports := strings.Split(prange, "-")
142+
143+
start, err = strconv.Atoi(ports[0])
144+
if err != nil {
145+
return
146+
}
147+
148+
if len(ports) == 1 || ports[1] == "" {
149+
end = start
150+
return
151+
}
152+
end, err = strconv.Atoi(ports[1])
153+
return
154+
}
155+
156+
func (cf *CFClientAPI) addNetworkPolicy(fromGUID string, toGUID string, portRanges []string) error {
157+
pclient := policy_client.NewExternal(
158+
lager.NewLogger("ExternalPolicyClient"),
159+
cf.conn().HTTPAuthClient(),
160+
cf.conn().ApiURL(""),
161+
)
162+
163+
policies := make([]policy_client.Policy, len(portRanges))
164+
165+
for i, prange := range portRanges {
166+
start, end, err := parsePortRange(prange)
167+
if err != nil {
168+
return err
169+
}
170+
171+
policies[i] = policy_client.Policy{
172+
Source: policy_client.Source{ID: fromGUID},
173+
Destination: policy_client.Destination{
174+
ID: toGUID,
175+
Ports: policy_client.Ports{Start: start, End: end},
176+
Protocol: "tcp",
177+
},
178+
}
179+
}
180+
181+
return pclient.AddPolicies("", policies)
138182
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package cloudgov
2+
3+
import "testing"
4+
5+
func Test_parsePortRange(t *testing.T) {
6+
tests := []struct {
7+
name string // description of this test case
8+
// Named input parameters for target function.
9+
prange string
10+
want int
11+
want2 int
12+
wantErr bool
13+
}{
14+
{name: "parses a range", prange: "80-85", want: 80, want2: 85},
15+
{name: "parses redundant range", prange: "81-81", want: 81, want2: 81},
16+
{name: "parses single port", prange: "80", want: 80, want2: 80},
17+
{name: "parses single number with separator", prange: "8-", want: 8, want2: 8},
18+
{name: "parses zero", prange: "0", want: 0, want2: 0},
19+
{name: "fails to parse range with non-int", prange: "60-cat", wantErr: true},
20+
{name: "fails to parse single with non-int", prange: "cat", wantErr: true},
21+
{name: "fails with empty string", prange: "", wantErr: true},
22+
{name: "fails with only separator", prange: "-", wantErr: true},
23+
}
24+
for _, tt := range tests {
25+
t.Run(tt.name, func(t *testing.T) {
26+
got, got2, gotErr := parsePortRange(tt.prange)
27+
if gotErr != nil {
28+
if !tt.wantErr {
29+
t.Errorf("parsePortRange() failed: %v", gotErr)
30+
}
31+
return
32+
}
33+
if tt.wantErr {
34+
t.Fatal("parsePortRange() succeeded unexpectedly")
35+
}
36+
if got != tt.want {
37+
t.Errorf("parsePortRange() = %v, want %v", got, tt.want)
38+
}
39+
if got2 != tt.want2 {
40+
t.Errorf("parsePortRange() = %v, want %v", got2, tt.want2)
41+
}
42+
})
43+
}
44+
}

runner-manager/cfd/cloudgov/cloudgov.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// Package cloudgov provides methods to interact CloudFoundry on cloud.gov.
12
package cloudgov
23

34
import "context"
@@ -12,7 +13,7 @@ type ClientAPI interface {
1213

1314
sshCode() (string, error)
1415
mapRoute(ctx context.Context, app *App, domain string, space string, host string, path string, port int) error
15-
addNetworkPolicy(app *App, dest string, space string, port string) error
16+
addNetworkPolicy(fromGUID string, toGUID string, portRanges []string) error
1617
}
1718

1819
type CredsGetter interface {
@@ -96,9 +97,9 @@ func (c *Client) AppsList() ([]*App, error) {
9697
return c.appsList()
9798
}
9899

99-
// TODO: this abstraction might belong in /cmd,
100-
// unless it can be further generalized to all pushes
101100
func (c *Client) Push(manifest *AppManifest) (*App, error) {
101+
// TODO: this abstraction might belong in /cmd,
102+
// unless it can be further generalized to all pushes
102103
containerID := manifest.Name
103104

104105
if containerID == "" {
@@ -112,8 +113,8 @@ func (c *Client) Push(manifest *AppManifest) (*App, error) {
112113
return c.appPush(manifest)
113114
}
114115

115-
// TODO: use this in prepare or get rid of it
116116
func (c *Client) ServicesPush(manifests []*AppManifest) ([]*App, error) {
117+
// TODO: use this in prepare or get rid of it
117118
if len(manifests) < 1 {
118119
return nil, nil
119120
}
@@ -136,5 +137,14 @@ func (c *Client) SSHCode() (string, error) {
136137
}
137138

138139
func (c *Client) MapServiceRoute(app *App) error {
139-
return c.mapRoute(context.Background(), app, internalDomainGUID, app.SpaceGUID, app.Name, "", 0)
140+
return c.mapRoute(
141+
context.Background(), app, internalDomainGUID, app.SpaceGUID, app.Name, "", 0,
142+
)
143+
}
144+
145+
// AddNetworkPolicy opens portRanges (e.g. "80", "80-85") on toApp for fromApp.
146+
func (c *Client) AddNetworkPolicy(
147+
fromApp *App, toApp *App, portRanges []string,
148+
) error {
149+
return c.addNetworkPolicy(fromApp.GUID, toApp.GUID, portRanges)
140150
}

0 commit comments

Comments
 (0)