Merge lp:~themue/juju-core/go-environs-mode-errors into lp:~juju/juju-core/trunk

Proposed by Frank Mueller
Status: Merged
Approved by: Gustavo Niemeyer
Approved revision: no longer in the source branch.
Merged at revision: 682
Proposed branch: lp:~themue/juju-core/go-environs-mode-errors
Merge into: lp:~juju/juju-core/trunk
Diff against target: 209 lines (+78/-8)
3 files modified
environs/dummy/environs.go (+34/-8)
environs/ec2/ec2.go (+24/-0)
environs/jujutest/livetests.go (+20/-0)
To merge this branch: bzr merge lp:~themue/juju-core/go-environs-mode-errors
Reviewer Review Type Date Requested Status
The Go Language Gophers Pending
Review via email: mp+130061@code.launchpad.net

Description of the change

environs: added error in case of illegal mode

Changed OpenPorts/ClosePorts/Ports in dummy and ec2 to
check if the correct firewall mode is set. That is "global"
for operations on the environ and "instance" for operations
on instances.

https://codereview.appspot.com/6715048/

To post a comment you must log in.
Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :

https://codereview.appspot.com/6715048/diff/1/environs/dummy/environs.go
File environs/dummy/environs.go (right):

https://codereview.appspot.com/6715048/diff/1/environs/dummy/environs.go#newcode494
environs/dummy/environs.go:494: env: e,
Doesn't look right. One environment state may be linked to from many
environment instances, and one instance is associated to one state.

Please have a look at the code you reverted to see how to do that
properly.

https://codereview.appspot.com/6715048/

Revision history for this message
Gustavo Niemeyer (niemeyer) wrote :

LGTM either way. It's not worth spending more time on this.

https://codereview.appspot.com/6715048/diff/5001/environs/dummy/environs.go
File environs/dummy/environs.go (right):

https://codereview.appspot.com/6715048/diff/5001/environs/dummy/environs.go#newcode498
environs/dummy/environs.go:498: firewallMode: e.Config().FirewallMode(),
That's not what was being done. The firewall mode is the same for all
instances, and all environments. Here is the diff for reference:

http://paste.ubuntu.com/1288133/

https://codereview.appspot.com/6715048/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'environs/dummy/environs.go'
2--- environs/dummy/environs.go 2012-10-16 17:27:11 +0000
3+++ environs/dummy/environs.go 2012-10-18 11:21:20 +0000
4@@ -491,10 +491,11 @@
5 return nil, fmt.Errorf("cannot find image for %s-%s", tools.Series, tools.Arch)
6 }
7 i := &instance{
8- state: e.state,
9- id: fmt.Sprintf("%s-%d", e.state.name, e.state.maxId),
10- ports: make(map[state.Port]bool),
11- machineId: machineId,
12+ state: e.state,
13+ id: fmt.Sprintf("%s-%d", e.state.name, e.state.maxId),
14+ ports: make(map[state.Port]bool),
15+ machineId: machineId,
16+ firewallMode: e.Config().FirewallMode(),
17 }
18 e.state.insts[i.id] = i
19 e.state.maxId++
20@@ -567,6 +568,10 @@
21 func (e *environ) OpenPorts(ports []state.Port) error {
22 e.state.mu.Lock()
23 defer e.state.mu.Unlock()
24+ if e.Config().FirewallMode() != config.FwGlobal {
25+ return fmt.Errorf("invalid firewall mode for opening ports on environment: %q",
26+ e.Config().FirewallMode())
27+ }
28 for _, p := range ports {
29 e.state.ports[p] = true
30 }
31@@ -576,6 +581,10 @@
32 func (e *environ) ClosePorts(ports []state.Port) error {
33 e.state.mu.Lock()
34 defer e.state.mu.Unlock()
35+ if e.Config().FirewallMode() != config.FwGlobal {
36+ return fmt.Errorf("invalid firewall mode for closing ports on environment: %q",
37+ e.Config().FirewallMode())
38+ }
39 for _, p := range ports {
40 delete(e.state.ports, p)
41 }
42@@ -585,6 +594,10 @@
43 func (e *environ) Ports() (ports []state.Port, err error) {
44 e.state.mu.Lock()
45 defer e.state.mu.Unlock()
46+ if e.Config().FirewallMode() != config.FwGlobal {
47+ return nil, fmt.Errorf("invalid firewall mode for retrieving ports from environment: %q",
48+ e.Config().FirewallMode())
49+ }
50 for p := range e.state.ports {
51 ports = append(ports, p)
52 }
53@@ -597,10 +610,11 @@
54 }
55
56 type instance struct {
57- state *environState
58- ports map[state.Port]bool
59- id string
60- machineId int
61+ state *environState
62+ ports map[state.Port]bool
63+ id string
64+ machineId int
65+ firewallMode config.FirewallMode
66 }
67
68 func (inst *instance) Id() string {
69@@ -619,6 +633,10 @@
70 func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {
71 defer delay()
72 log.Printf("openPorts %d, %#v", machineId, ports)
73+ if inst.firewallMode != config.FwInstance {
74+ return fmt.Errorf("invalid firewall mode for opening ports on instance: %q",
75+ inst.firewallMode)
76+ }
77 if inst.machineId != machineId {
78 panic(fmt.Errorf("OpenPorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))
79 }
80@@ -638,6 +656,10 @@
81
82 func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {
83 defer delay()
84+ if inst.firewallMode != config.FwInstance {
85+ return fmt.Errorf("invalid firewall mode for closing ports on instance: %q",
86+ inst.firewallMode)
87+ }
88 if inst.machineId != machineId {
89 panic(fmt.Errorf("ClosePorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))
90 }
91@@ -657,6 +679,10 @@
92
93 func (inst *instance) Ports(machineId int) (ports []state.Port, err error) {
94 defer delay()
95+ if inst.firewallMode != config.FwInstance {
96+ return nil, fmt.Errorf("invalid firewall mode for retrieving ports from instance: %q",
97+ inst.firewallMode)
98+ }
99 if inst.machineId != machineId {
100 panic(fmt.Errorf("Ports with mismatched machine id, expected %d got %d", inst.machineId, machineId))
101 }
102
103=== modified file 'environs/ec2/ec2.go'
104--- environs/ec2/ec2.go 2012-10-16 17:27:11 +0000
105+++ environs/ec2/ec2.go 2012-10-18 11:21:20 +0000
106@@ -602,6 +602,10 @@
107 }
108
109 func (e *environ) OpenPorts(ports []state.Port) error {
110+ if e.Config().FirewallMode() != config.FwGlobal {
111+ return fmt.Errorf("invalid firewall mode for opening ports on environment: %q",
112+ e.Config().FirewallMode())
113+ }
114 if err := e.openPortsInGroup(e.globalGroupName(), ports); err != nil {
115 return err
116 }
117@@ -610,6 +614,10 @@
118 }
119
120 func (e *environ) ClosePorts(ports []state.Port) error {
121+ if e.Config().FirewallMode() != config.FwGlobal {
122+ return fmt.Errorf("invalid firewall mode for closing ports on environment: %q",
123+ e.Config().FirewallMode())
124+ }
125 if err := e.closePortsInGroup(e.globalGroupName(), ports); err != nil {
126 return err
127 }
128@@ -618,6 +626,10 @@
129 }
130
131 func (e *environ) Ports() ([]state.Port, error) {
132+ if e.Config().FirewallMode() != config.FwGlobal {
133+ return nil, fmt.Errorf("invalid firewall mode for retrieving ports from environment: %q",
134+ e.Config().FirewallMode())
135+ }
136 return e.portsInGroup(e.globalGroupName())
137 }
138
139@@ -669,6 +681,10 @@
140 }
141
142 func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {
143+ if inst.e.Config().FirewallMode() != config.FwInstance {
144+ return fmt.Errorf("invalid firewall mode for opening ports on instance: %q",
145+ inst.e.Config().FirewallMode())
146+ }
147 name := inst.e.machineGroupName(machineId)
148 if err := inst.e.openPortsInGroup(name, ports); err != nil {
149 return err
150@@ -678,6 +694,10 @@
151 }
152
153 func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {
154+ if inst.e.Config().FirewallMode() != config.FwInstance {
155+ return fmt.Errorf("invalid firewall mode for closing ports on instance: %q",
156+ inst.e.Config().FirewallMode())
157+ }
158 name := inst.e.machineGroupName(machineId)
159 if err := inst.e.closePortsInGroup(name, ports); err != nil {
160 return err
161@@ -687,6 +707,10 @@
162 }
163
164 func (inst *instance) Ports(machineId int) ([]state.Port, error) {
165+ if inst.e.Config().FirewallMode() != config.FwInstance {
166+ return nil, fmt.Errorf("invalid firewall mode for retrieving ports from instance: %q",
167+ inst.e.Config().FirewallMode())
168+ }
169 name := inst.e.machineGroupName(machineId)
170 return inst.e.portsInGroup(name)
171 }
172
173=== modified file 'environs/jujutest/livetests.go'
174--- environs/jujutest/livetests.go 2012-10-15 15:30:23 +0000
175+++ environs/jujutest/livetests.go 2012-10-18 11:21:20 +0000
176@@ -211,6 +211,16 @@
177 c.Assert(err, IsNil)
178 ports, err = inst2.Ports(2)
179 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 89}})
180+
181+ // Check errors when acting on environment.
182+ err = t.Env.OpenPorts([]state.Port{{"tcp", 80}})
183+ c.Assert(err, ErrorMatches, `invalid firewall mode for opening ports on environment: "instance"`)
184+
185+ err = t.Env.ClosePorts([]state.Port{{"tcp", 80}})
186+ c.Assert(err, ErrorMatches, `invalid firewall mode for closing ports on environment: "instance"`)
187+
188+ _, err = t.Env.Ports()
189+ c.Assert(err, ErrorMatches, `invalid firewall mode for retrieving ports from environment: "instance"`)
190 }
191
192 func (t *LiveTests) TestGlobalPorts(c *C) {
193@@ -265,6 +275,16 @@
194 ports, err = t.Env.Ports()
195 c.Assert(err, IsNil)
196 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 45}, {"tcp", 89}})
197+
198+ // Check errors when acting on instances.
199+ err = inst1.OpenPorts(1, []state.Port{{"tcp", 80}})
200+ c.Assert(err, ErrorMatches, `invalid firewall mode for opening ports on instance: "global"`)
201+
202+ err = inst1.ClosePorts(1, []state.Port{{"tcp", 80}})
203+ c.Assert(err, ErrorMatches, `invalid firewall mode for closing ports on instance: "global"`)
204+
205+ _, err = inst1.Ports(1)
206+ c.Assert(err, ErrorMatches, `invalid firewall mode for retrieving ports from instance: "global"`)
207 }
208
209 func (t *LiveTests) TestBootstrapMultiple(c *C) {

Subscribers

People subscribed via source and target branches