diff --git a/Documentation/cloud-config.md b/Documentation/cloud-config.md index 6672564..0895358 100644 --- a/Documentation/cloud-config.md +++ b/Documentation/cloud-config.md @@ -100,7 +100,9 @@ For more information on fleet configuration, see the [fleet documentation][fleet #### flannel -The `coreos.flannel.*` parameters also work very similarly to `coreos.etcd.*` and `coreos.fleet.*`. They can be used to set enviornment variables for flanneld. Given the following cloud-config... +The `coreos.flannel.*` parameters also work very similarly to `coreos.etcd.*` +and `coreos.fleet.*`. They can be used to set environment variables for +flanneld. For example, the following cloud-config... ```yaml #cloud-config @@ -110,17 +112,41 @@ coreos: etcd-prefix: /coreos.com/network2 ``` -...will generate systemd unit drop-in like so: +...will generate a systemd unit drop-in like so: ``` [Service] Environment="FLANNELD_ETCD_PREFIX=/coreos.com/network2" ``` -For complete list of flannel configuraion parameters, see the [flannel documentation][flannel-readme]. +For the complete list of flannel configuraion parameters, see the [flannel documentation][flannel-readme]. [flannel-readme]: https://github.com/coreos/flannel/blob/master/README.md +#### locksmith + +The `coreos.locksmith.*` parameters can be used to set environment variables +for locksmith. For example, the following cloud-config... + +```yaml +#cloud-config + +coreos: + locksmith: + endpoint: example.com:4001 +``` + +...will generate a systemd unit drop-in like so: + +``` +[Service] +Environment="LOCKSMITHD_ENDPOINT=example.com:4001" +``` + +For the complete list of locksmith configuraion parameters, see the [locksmith documentation][locksmith-readme]. + +[locksmith-readme]: https://github.com/coreos/locksmith/blob/master/README.md + #### update The `coreos.update.*` parameters manipulate settings related to how CoreOS instances are updated. diff --git a/config/config.go b/config/config.go index 76a8823..5a3e751 100644 --- a/config/config.go +++ b/config/config.go @@ -30,12 +30,13 @@ import ( type CloudConfig struct { SSHAuthorizedKeys []string `yaml:"ssh_authorized_keys"` Coreos struct { - Etcd Etcd `yaml:"etcd"` - Flannel Flannel `yaml:"flannel"` - Fleet Fleet `yaml:"fleet"` - OEM OEM `yaml:"oem"` - Update Update `yaml:"update"` - Units []Unit `yaml:"units"` + Etcd Etcd `yaml:"etcd"` + Flannel Flannel `yaml:"flannel"` + Fleet Fleet `yaml:"fleet"` + Locksmith Locksmith `yaml:"locksmith"` + OEM OEM `yaml:"oem"` + Update Update `yaml:"update"` + Units []Unit `yaml:"units"` } `yaml:"coreos"` WriteFiles []File `yaml:"write_files"` Hostname string `yaml:"hostname"` diff --git a/config/locksmith.go b/config/locksmith.go new file mode 100644 index 0000000..86280b8 --- /dev/null +++ b/config/locksmith.go @@ -0,0 +1,8 @@ +package config + +type Locksmith struct { + Endpoint string `yaml:"endpoint" env:"LOCKSMITHD_ENDPOINT"` + EtcdCAFile string `yaml:"etcd_cafile" env:"LOCKSMITHD_ETCD_CAFILE"` + EtcdCertFile string `yaml:"etcd_certfile" env:"LOCKSMITHD_ETCD_CERTFILE"` + EtcdKeyFile string `yaml:"etcd_keyfile" env:"LOCKSMITHD_ETCD_KEYFILE"` +} diff --git a/initialize/config.go b/initialize/config.go index efad99f..3ef6da9 100644 --- a/initialize/config.go +++ b/initialize/config.go @@ -131,6 +131,7 @@ func Apply(cfg config.CloudConfig, env *Environment) error { for _, ccu := range []CloudConfigUnit{ system.Etcd{Etcd: cfg.Coreos.Etcd}, system.Fleet{Fleet: cfg.Coreos.Fleet}, + system.Locksmith{Locksmith: cfg.Coreos.Locksmith}, system.Flannel{Flannel: cfg.Coreos.Flannel}, system.Update{Update: cfg.Coreos.Update, ReadConfig: system.DefaultReadConfig}, } { diff --git a/system/locksmith.go b/system/locksmith.go new file mode 100644 index 0000000..24a3946 --- /dev/null +++ b/system/locksmith.go @@ -0,0 +1,39 @@ +/* + Copyright 2014 CoreOS, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package system + +import ( + "github.com/coreos/coreos-cloudinit/config" +) + +// Locksmith is a top-level structure which embeds its underlying configuration, +// config.Locksmith, and provides the system-specific Unit(). +type Locksmith struct { + config.Locksmith +} + +// Units creates a Unit file drop-in for etcd, using any configured options. +func (ee Locksmith) Units() []Unit { + return []Unit{{config.Unit{ + Name: "locksmithd.service", + Runtime: true, + DropIns: []config.UnitDropIn{{ + Name: "20-cloudinit.conf", + Content: serviceContents(ee.Locksmith), + }}, + }}} +} diff --git a/system/locksmith_test.go b/system/locksmith_test.go new file mode 100644 index 0000000..1403eb4 --- /dev/null +++ b/system/locksmith_test.go @@ -0,0 +1,60 @@ +/* + Copyright 2014 CoreOS, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package system + +import ( + "reflect" + "testing" + + "github.com/coreos/coreos-cloudinit/config" +) + +func TestLocksmithUnits(t *testing.T) { + for _, tt := range []struct { + config config.Locksmith + units []Unit + }{ + { + config.Locksmith{}, + []Unit{{config.Unit{ + Name: "locksmithd.service", + Runtime: true, + DropIns: []config.UnitDropIn{{Name: "20-cloudinit.conf"}}, + }}}, + }, + { + config.Locksmith{ + Endpoint: "12.34.56.78:4001", + }, + []Unit{{config.Unit{ + Name: "locksmithd.service", + Runtime: true, + DropIns: []config.UnitDropIn{{ + Name: "20-cloudinit.conf", + Content: `[Service] +Environment="LOCKSMITHD_ENDPOINT=12.34.56.78:4001" +`, + }}, + }}}, + }, + } { + units := Locksmith{tt.config}.Units() + if !reflect.DeepEqual(units, tt.units) { + t.Errorf("bad units (%+v): want %#v, got %#v", tt.config, tt.units, units) + } + } +}