flannel: added flannel support and helper to make dropins
fleet, flannel, and etcd all generate dropins from config. To reduce code duplication, factor out a helper to do that.
This commit is contained in:
@@ -19,6 +19,8 @@ package system
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"github.com/coreos/coreos-cloudinit/config"
|
||||
)
|
||||
|
||||
// dropinContents generates the contents for a drop-in unit given the config.
|
||||
@@ -40,3 +42,16 @@ func dropinContents(e interface{}) string {
|
||||
}
|
||||
return "[Service]\n" + out
|
||||
}
|
||||
|
||||
func dropinFromConfig(cfg interface{}, name string) []Unit {
|
||||
content := dropinContents(cfg)
|
||||
if content == "" {
|
||||
return nil
|
||||
}
|
||||
return []Unit{{config.Unit{
|
||||
Name: name,
|
||||
Runtime: true,
|
||||
DropIn: true,
|
||||
Content: content,
|
||||
}}}
|
||||
}
|
||||
|
@@ -28,14 +28,5 @@ type Etcd struct {
|
||||
|
||||
// Units creates a Unit file drop-in for etcd, using any configured options.
|
||||
func (ee Etcd) Units() []Unit {
|
||||
content := dropinContents(ee.Etcd)
|
||||
if content == "" {
|
||||
return nil
|
||||
}
|
||||
return []Unit{{config.Unit{
|
||||
Name: "etcd.service",
|
||||
Runtime: true,
|
||||
DropIn: true,
|
||||
Content: content,
|
||||
}}}
|
||||
return dropinFromConfig(ee.Etcd, "etcd.service")
|
||||
}
|
||||
|
17
system/flannel.go
Normal file
17
system/flannel.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"github.com/coreos/coreos-cloudinit/config"
|
||||
)
|
||||
|
||||
// flannel is a top-level structure which embeds its underlying configuration,
|
||||
// config.Flannel, and provides the system-specific Unit().
|
||||
type Flannel struct {
|
||||
config.Flannel
|
||||
}
|
||||
|
||||
// Units generates a Unit file drop-in for flannel, if any flannel options were
|
||||
// configured in cloud-config
|
||||
func (fl Flannel) Units() []Unit {
|
||||
return dropinFromConfig(fl.Flannel, "flannel.service")
|
||||
}
|
40
system/flannel_test.go
Normal file
40
system/flannel_test.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/coreos/coreos-cloudinit/config"
|
||||
)
|
||||
|
||||
func TestFlannelUnits(t *testing.T) {
|
||||
for _, tt := range []struct {
|
||||
config config.Flannel
|
||||
units []Unit
|
||||
}{
|
||||
{
|
||||
config.Flannel{},
|
||||
nil,
|
||||
},
|
||||
{
|
||||
config.Flannel{
|
||||
EtcdEndpoint: "http://12.34.56.78:4001",
|
||||
EtcdPrefix: "/coreos.com/network/tenant1",
|
||||
},
|
||||
[]Unit{{config.Unit{
|
||||
Name: "flannel.service",
|
||||
Content: `[Service]
|
||||
Environment="FLANNELD_ETCD_ENDPOINT=http://12.34.56.78:4001"
|
||||
Environment="FLANNELD_ETCD_PREFIX=/coreos.com/network/tenant1"
|
||||
`,
|
||||
Runtime: true,
|
||||
DropIn: true,
|
||||
}}},
|
||||
},
|
||||
} {
|
||||
units := Flannel{tt.config}.Units()
|
||||
if !reflect.DeepEqual(units, tt.units) {
|
||||
t.Errorf("bad units (%q): want %v, got %v", tt.config, tt.units, units)
|
||||
}
|
||||
}
|
||||
}
|
@@ -29,14 +29,5 @@ type Fleet struct {
|
||||
// Units generates a Unit file drop-in for fleet, if any fleet options were
|
||||
// configured in cloud-config
|
||||
func (fe Fleet) Units() []Unit {
|
||||
content := dropinContents(fe.Fleet)
|
||||
if content == "" {
|
||||
return nil
|
||||
}
|
||||
return []Unit{{config.Unit{
|
||||
Name: "fleet.service",
|
||||
Runtime: true,
|
||||
DropIn: true,
|
||||
Content: content,
|
||||
}}}
|
||||
return dropinFromConfig(fe.Fleet, "fleet.service")
|
||||
}
|
||||
|
Reference in New Issue
Block a user