Skip to content

Commit

Permalink
Merge pull request #55 from linkernetworks/hwchih/VX-147
Browse files Browse the repository at this point in the history
Support two types of network.

Former-commit-id: 5d65bdb1f51bd2d67260b67bd81bd302d0c6e210 [formerly 5d65bdb1f51bd2d67260b67bd81bd302d0c6e210 [formerly 002ce61]]
Former-commit-id: ba8e482cafcf8757fd9333597af0fc30f6616bad
Former-commit-id: 880ff4b
  • Loading branch information
Hung-Wei Chiu authored Jul 3, 2018
2 parents 8fa9010 + 907b030 commit fb6bd2b
Show file tree
Hide file tree
Showing 7 changed files with 256 additions and 104 deletions.
22 changes: 15 additions & 7 deletions src/entity/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,26 @@ import (
"gopkg.in/mgo.v2/bson"
)

type NetworkType string

const (
OVSNetworkType NetworkType = "ovs"
FakeNetworkType NetworkType = "fake"
)

const (
NetworkCollectionName string = "networks"
)

type Network struct {
ID bson.ObjectId `bson:"_id,omitempty" json:"id"`
Type string `bson:"type" json:"type"`
Name string `bson:"name" json:"name"`
NodeName string `bson:"nodeName" json:"nodeName"`
CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"`
OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"`
Fake FakeNetwork `bson:"fake,omitempty" json:"fake"` //FakeNetwork, for restful testing.
ID bson.ObjectId `bson:"_id,omitempty" json:"id"`
Type NetworkType `bson:"type" json:"type"`
Name string `bson:"name" json:"name"`
Clusterwise bool `bson:"clusterwise" json:"clusterwise"`
NodeName string `bson:"nodeName,omitempty" json:"nodeName,omitempty"`
CreatedAt *time.Time `bson:"createdAt,omitempty" json:"createdAt,omitempty"`
OVS OVSNetwork `bson:"ovs,omitempty" json:"ovs"`
Fake FakeNetwork `json:"fake"` //FakeNetwork, for restful testing.
}

//GetCollection - get model mongo collection name.
Expand Down
12 changes: 6 additions & 6 deletions src/networkprovider/fake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

func TestNetworkValidateBeforeCreating(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{
FakeParameter: "yes",
},
Expand All @@ -22,7 +22,7 @@ func TestNetworkValidateBeforeCreating(t *testing.T) {

func TestFakeNetworkCreating(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{
FakeParameter: "yes",
IWantFail: false,
Expand All @@ -35,7 +35,7 @@ func TestFakeNetworkCreating(t *testing.T) {

func TestFakeNetworkValidateBeforeCreatingFail(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{
FakeParameter: "",
},
Expand All @@ -47,7 +47,7 @@ func TestFakeNetworkValidateBeforeCreatingFail(t *testing.T) {

func TestFakeNetworkCreatingFail(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{
IWantFail: true,
},
Expand All @@ -59,7 +59,7 @@ func TestFakeNetworkCreatingFail(t *testing.T) {

func TestFakeNetworkDelete(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{},
})
assert.NoError(t, err)
Expand All @@ -69,7 +69,7 @@ func TestFakeNetworkDelete(t *testing.T) {

func TestFakeNetworkDeleteFail(t *testing.T) {
fake, err := GetNetworkProvider(&entity.Network{
Type: "fake",
Type: entity.FakeNetworkType,
Fake: entity.FakeNetwork{
IWantFail: true,
},
Expand Down
4 changes: 2 additions & 2 deletions src/networkprovider/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ type NetworkProvider interface {

func GetNetworkProvider(network *entity.Network) (NetworkProvider, error) {
switch network.Type {
case "ovs":
case entity.OVSNetworkType:
return OVSNetworkProvider{network.OVS}, nil
case "fake":
case entity.FakeNetworkType:
return FakeNetworkProvider{network.Fake}, nil
default:
return nil, fmt.Errorf("Unsupported Network Type %s", network.Type)
Expand Down
6 changes: 3 additions & 3 deletions src/networkprovider/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import (
func TestGetNetworkProvider(t *testing.T) {
testCases := []struct {
cases string
netType string
netType entity.NetworkType
netProviderType interface{}
}{
{"ovs", "ovs", reflect.TypeOf(OVSNetworkProvider{})},
{"fake", "fake", reflect.TypeOf(FakeNetworkProvider{})},
{"ovs", entity.OVSNetworkType, reflect.TypeOf(OVSNetworkProvider{})},
{"fake", entity.FakeNetworkType, reflect.TypeOf(FakeNetworkProvider{})},
}

for _, tc := range testCases {
Expand Down
65 changes: 52 additions & 13 deletions src/networkprovider/ovs.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,43 +27,82 @@ func (ovs OVSNetworkProvider) ValidateBeforeCreating(sp *serviceprovider.Contain
}
}

q := bson.M{"nodeName": network.NodeName, "ovs.bridgeName": ovs.BridgeName}
//Check the bridge name, we can't have the same bridge name in the same node
q := bson.M{}
if network.Clusterwise {
//Only check the bridge name
q = bson.M{"ovs.bridgeName": ovs.BridgeName}
} else {
q = bson.M{"nodeName": network.NodeName, "ovs.bridgeName": ovs.BridgeName}
}

n, err := session.Count(entity.NetworkCollectionName, q)
if n >= 1 {
return fmt.Errorf("The bridge name %s is exist on the node %s\n, please use another bridge name", ovs.BridgeName, network.NodeName)
return fmt.Errorf("The bridge name %s is exist, please check your cluster type and reassign another bridge name", ovs.BridgeName)
} else if err != nil {
return err
}
return nil
}

func (ovs OVSNetworkProvider) CreateNetwork(sp *serviceprovider.Container, network entity.Network) error {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName)
func createOVSNetwork(nodeIP string, bridgeName string, ports []entity.PhysicalPort) error {
nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(nodeAddr)
if err != nil {
return err
}

target := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(target)
return nc.CreateOVSNetwork(bridgeName, ports)
}

func deleteOVSNetwork(nodeIP string, bridgeName string) error {
nodeAddr := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(nodeAddr)
if err != nil {
return err
}

return nc.CreateOVSNetwork(ovs.BridgeName, ovs.PhysicalPorts)
return nc.DeleteOVSNetwork(bridgeName)
}

func (ovs OVSNetworkProvider) DeleteNetwork(sp *serviceprovider.Container, network entity.Network) error {
func (ovs OVSNetworkProvider) CreateNetwork(sp *serviceprovider.Container, network entity.Network) error {
if network.Clusterwise {
nodes, _ := sp.KubeCtl.GetNodes()
for _, v := range nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName())
if err != nil {
return err
}
if err := createOVSNetwork(nodeIP, network.OVS.BridgeName, network.OVS.PhysicalPorts); err != nil {
return err
}
}
return nil
}
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName)
if err != nil {
return err
}
return createOVSNetwork(nodeIP, network.OVS.BridgeName, network.OVS.PhysicalPorts)
}

func (ovs OVSNetworkProvider) DeleteNetwork(sp *serviceprovider.Container, network entity.Network) error {
if network.Clusterwise {
nodes, _ := sp.KubeCtl.GetNodes()
for _, v := range nodes {
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(v.GetName())
if err != nil {
return err
}
if err := deleteOVSNetwork(nodeIP, ovs.BridgeName); err != nil {
return err
}
}
return nil
}

target := net.JoinHostPort(nodeIP, networkcontroller.DEFAULT_CONTROLLER_PORT)
nc, err := networkcontroller.New(target)
nodeIP, err := sp.KubeCtl.GetNodeExternalIP(network.NodeName)
if err != nil {
return err
}

return nc.DeleteOVSNetwork(ovs.BridgeName)
return deleteOVSNetwork(nodeIP, ovs.BridgeName)
}
Loading

0 comments on commit fb6bd2b

Please sign in to comment.