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
=== modified file 'environs/dummy/environs.go'
--- environs/dummy/environs.go 2012-10-16 17:27:11 +0000
+++ environs/dummy/environs.go 2012-10-18 11:21:20 +0000
@@ -491,10 +491,11 @@
491 return nil, fmt.Errorf("cannot find image for %s-%s", tools.Series, tools.Arch)491 return nil, fmt.Errorf("cannot find image for %s-%s", tools.Series, tools.Arch)
492 }492 }
493 i := &instance{493 i := &instance{
494 state: e.state,494 state: e.state,
495 id: fmt.Sprintf("%s-%d", e.state.name, e.state.maxId),495 id: fmt.Sprintf("%s-%d", e.state.name, e.state.maxId),
496 ports: make(map[state.Port]bool),496 ports: make(map[state.Port]bool),
497 machineId: machineId,497 machineId: machineId,
498 firewallMode: e.Config().FirewallMode(),
498 }499 }
499 e.state.insts[i.id] = i500 e.state.insts[i.id] = i
500 e.state.maxId++501 e.state.maxId++
@@ -567,6 +568,10 @@
567func (e *environ) OpenPorts(ports []state.Port) error {568func (e *environ) OpenPorts(ports []state.Port) error {
568 e.state.mu.Lock()569 e.state.mu.Lock()
569 defer e.state.mu.Unlock()570 defer e.state.mu.Unlock()
571 if e.Config().FirewallMode() != config.FwGlobal {
572 return fmt.Errorf("invalid firewall mode for opening ports on environment: %q",
573 e.Config().FirewallMode())
574 }
570 for _, p := range ports {575 for _, p := range ports {
571 e.state.ports[p] = true576 e.state.ports[p] = true
572 }577 }
@@ -576,6 +581,10 @@
576func (e *environ) ClosePorts(ports []state.Port) error {581func (e *environ) ClosePorts(ports []state.Port) error {
577 e.state.mu.Lock()582 e.state.mu.Lock()
578 defer e.state.mu.Unlock()583 defer e.state.mu.Unlock()
584 if e.Config().FirewallMode() != config.FwGlobal {
585 return fmt.Errorf("invalid firewall mode for closing ports on environment: %q",
586 e.Config().FirewallMode())
587 }
579 for _, p := range ports {588 for _, p := range ports {
580 delete(e.state.ports, p)589 delete(e.state.ports, p)
581 }590 }
@@ -585,6 +594,10 @@
585func (e *environ) Ports() (ports []state.Port, err error) {594func (e *environ) Ports() (ports []state.Port, err error) {
586 e.state.mu.Lock()595 e.state.mu.Lock()
587 defer e.state.mu.Unlock()596 defer e.state.mu.Unlock()
597 if e.Config().FirewallMode() != config.FwGlobal {
598 return nil, fmt.Errorf("invalid firewall mode for retrieving ports from environment: %q",
599 e.Config().FirewallMode())
600 }
588 for p := range e.state.ports {601 for p := range e.state.ports {
589 ports = append(ports, p)602 ports = append(ports, p)
590 }603 }
@@ -597,10 +610,11 @@
597}610}
598611
599type instance struct {612type instance struct {
600 state *environState613 state *environState
601 ports map[state.Port]bool614 ports map[state.Port]bool
602 id string615 id string
603 machineId int616 machineId int
617 firewallMode config.FirewallMode
604}618}
605619
606func (inst *instance) Id() string {620func (inst *instance) Id() string {
@@ -619,6 +633,10 @@
619func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {633func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {
620 defer delay()634 defer delay()
621 log.Printf("openPorts %d, %#v", machineId, ports)635 log.Printf("openPorts %d, %#v", machineId, ports)
636 if inst.firewallMode != config.FwInstance {
637 return fmt.Errorf("invalid firewall mode for opening ports on instance: %q",
638 inst.firewallMode)
639 }
622 if inst.machineId != machineId {640 if inst.machineId != machineId {
623 panic(fmt.Errorf("OpenPorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))641 panic(fmt.Errorf("OpenPorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))
624 }642 }
@@ -638,6 +656,10 @@
638656
639func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {657func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {
640 defer delay()658 defer delay()
659 if inst.firewallMode != config.FwInstance {
660 return fmt.Errorf("invalid firewall mode for closing ports on instance: %q",
661 inst.firewallMode)
662 }
641 if inst.machineId != machineId {663 if inst.machineId != machineId {
642 panic(fmt.Errorf("ClosePorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))664 panic(fmt.Errorf("ClosePorts with mismatched machine id, expected %d got %d", inst.machineId, machineId))
643 }665 }
@@ -657,6 +679,10 @@
657679
658func (inst *instance) Ports(machineId int) (ports []state.Port, err error) {680func (inst *instance) Ports(machineId int) (ports []state.Port, err error) {
659 defer delay()681 defer delay()
682 if inst.firewallMode != config.FwInstance {
683 return nil, fmt.Errorf("invalid firewall mode for retrieving ports from instance: %q",
684 inst.firewallMode)
685 }
660 if inst.machineId != machineId {686 if inst.machineId != machineId {
661 panic(fmt.Errorf("Ports with mismatched machine id, expected %d got %d", inst.machineId, machineId))687 panic(fmt.Errorf("Ports with mismatched machine id, expected %d got %d", inst.machineId, machineId))
662 }688 }
663689
=== modified file 'environs/ec2/ec2.go'
--- environs/ec2/ec2.go 2012-10-16 17:27:11 +0000
+++ environs/ec2/ec2.go 2012-10-18 11:21:20 +0000
@@ -602,6 +602,10 @@
602}602}
603603
604func (e *environ) OpenPorts(ports []state.Port) error {604func (e *environ) OpenPorts(ports []state.Port) error {
605 if e.Config().FirewallMode() != config.FwGlobal {
606 return fmt.Errorf("invalid firewall mode for opening ports on environment: %q",
607 e.Config().FirewallMode())
608 }
605 if err := e.openPortsInGroup(e.globalGroupName(), ports); err != nil {609 if err := e.openPortsInGroup(e.globalGroupName(), ports); err != nil {
606 return err610 return err
607 }611 }
@@ -610,6 +614,10 @@
610}614}
611615
612func (e *environ) ClosePorts(ports []state.Port) error {616func (e *environ) ClosePorts(ports []state.Port) error {
617 if e.Config().FirewallMode() != config.FwGlobal {
618 return fmt.Errorf("invalid firewall mode for closing ports on environment: %q",
619 e.Config().FirewallMode())
620 }
613 if err := e.closePortsInGroup(e.globalGroupName(), ports); err != nil {621 if err := e.closePortsInGroup(e.globalGroupName(), ports); err != nil {
614 return err622 return err
615 }623 }
@@ -618,6 +626,10 @@
618}626}
619627
620func (e *environ) Ports() ([]state.Port, error) {628func (e *environ) Ports() ([]state.Port, error) {
629 if e.Config().FirewallMode() != config.FwGlobal {
630 return nil, fmt.Errorf("invalid firewall mode for retrieving ports from environment: %q",
631 e.Config().FirewallMode())
632 }
621 return e.portsInGroup(e.globalGroupName())633 return e.portsInGroup(e.globalGroupName())
622}634}
623635
@@ -669,6 +681,10 @@
669}681}
670682
671func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {683func (inst *instance) OpenPorts(machineId int, ports []state.Port) error {
684 if inst.e.Config().FirewallMode() != config.FwInstance {
685 return fmt.Errorf("invalid firewall mode for opening ports on instance: %q",
686 inst.e.Config().FirewallMode())
687 }
672 name := inst.e.machineGroupName(machineId)688 name := inst.e.machineGroupName(machineId)
673 if err := inst.e.openPortsInGroup(name, ports); err != nil {689 if err := inst.e.openPortsInGroup(name, ports); err != nil {
674 return err690 return err
@@ -678,6 +694,10 @@
678}694}
679695
680func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {696func (inst *instance) ClosePorts(machineId int, ports []state.Port) error {
697 if inst.e.Config().FirewallMode() != config.FwInstance {
698 return fmt.Errorf("invalid firewall mode for closing ports on instance: %q",
699 inst.e.Config().FirewallMode())
700 }
681 name := inst.e.machineGroupName(machineId)701 name := inst.e.machineGroupName(machineId)
682 if err := inst.e.closePortsInGroup(name, ports); err != nil {702 if err := inst.e.closePortsInGroup(name, ports); err != nil {
683 return err703 return err
@@ -687,6 +707,10 @@
687}707}
688708
689func (inst *instance) Ports(machineId int) ([]state.Port, error) {709func (inst *instance) Ports(machineId int) ([]state.Port, error) {
710 if inst.e.Config().FirewallMode() != config.FwInstance {
711 return nil, fmt.Errorf("invalid firewall mode for retrieving ports from instance: %q",
712 inst.e.Config().FirewallMode())
713 }
690 name := inst.e.machineGroupName(machineId)714 name := inst.e.machineGroupName(machineId)
691 return inst.e.portsInGroup(name)715 return inst.e.portsInGroup(name)
692}716}
693717
=== modified file 'environs/jujutest/livetests.go'
--- environs/jujutest/livetests.go 2012-10-15 15:30:23 +0000
+++ environs/jujutest/livetests.go 2012-10-18 11:21:20 +0000
@@ -211,6 +211,16 @@
211 c.Assert(err, IsNil)211 c.Assert(err, IsNil)
212 ports, err = inst2.Ports(2)212 ports, err = inst2.Ports(2)
213 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 89}})213 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 89}})
214
215 // Check errors when acting on environment.
216 err = t.Env.OpenPorts([]state.Port{{"tcp", 80}})
217 c.Assert(err, ErrorMatches, `invalid firewall mode for opening ports on environment: "instance"`)
218
219 err = t.Env.ClosePorts([]state.Port{{"tcp", 80}})
220 c.Assert(err, ErrorMatches, `invalid firewall mode for closing ports on environment: "instance"`)
221
222 _, err = t.Env.Ports()
223 c.Assert(err, ErrorMatches, `invalid firewall mode for retrieving ports from environment: "instance"`)
214}224}
215225
216func (t *LiveTests) TestGlobalPorts(c *C) {226func (t *LiveTests) TestGlobalPorts(c *C) {
@@ -265,6 +275,16 @@
265 ports, err = t.Env.Ports()275 ports, err = t.Env.Ports()
266 c.Assert(err, IsNil)276 c.Assert(err, IsNil)
267 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 45}, {"tcp", 89}})277 c.Assert(ports, DeepEquals, []state.Port{{"tcp", 45}, {"tcp", 89}})
278
279 // Check errors when acting on instances.
280 err = inst1.OpenPorts(1, []state.Port{{"tcp", 80}})
281 c.Assert(err, ErrorMatches, `invalid firewall mode for opening ports on instance: "global"`)
282
283 err = inst1.ClosePorts(1, []state.Port{{"tcp", 80}})
284 c.Assert(err, ErrorMatches, `invalid firewall mode for closing ports on instance: "global"`)
285
286 _, err = inst1.Ports(1)
287 c.Assert(err, ErrorMatches, `invalid firewall mode for retrieving ports from instance: "global"`)
268}288}
269289
270func (t *LiveTests) TestBootstrapMultiple(c *C) {290func (t *LiveTests) TestBootstrapMultiple(c *C) {

Subscribers

People subscribed via source and target branches