From b5c8824e70710ade99251d2e960334c343abc247 Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Thu, 16 Apr 2015 22:19:32 -0600 Subject: [PATCH] Add changes from etcd-2.0 project Add ERB template for generating etcd override files. Update the Vagrantfile to automatically generate etcd override files. Update the provisioning script for easier changes in the future. --- docker-swarm-etcd/.gitignore | 2 ++ docker-swarm-etcd/Vagrantfile | 17 ++++++++++++++++- docker-swarm-etcd/etcd-01.override | 12 ------------ docker-swarm-etcd/etcd-02.override | 12 ------------ docker-swarm-etcd/etcd-03.override | 12 ------------ docker-swarm-etcd/etcd.defaults.erb | 13 +++++++++++++ docker-swarm-etcd/provision.sh | 12 ++++++++---- 7 files changed, 39 insertions(+), 41 deletions(-) create mode 100644 docker-swarm-etcd/.gitignore delete mode 100644 docker-swarm-etcd/etcd-01.override delete mode 100644 docker-swarm-etcd/etcd-02.override delete mode 100644 docker-swarm-etcd/etcd-03.override create mode 100644 docker-swarm-etcd/etcd.defaults.erb diff --git a/docker-swarm-etcd/.gitignore b/docker-swarm-etcd/.gitignore new file mode 100644 index 0000000..277ea56 --- /dev/null +++ b/docker-swarm-etcd/.gitignore @@ -0,0 +1,2 @@ +.vagrant +*.defaults diff --git a/docker-swarm-etcd/Vagrantfile b/docker-swarm-etcd/Vagrantfile index 4c80f0a..303e04e 100644 --- a/docker-swarm-etcd/Vagrantfile +++ b/docker-swarm-etcd/Vagrantfile @@ -5,9 +5,10 @@ Vagrant.require_version ">= 1.6.0" VAGRANTFILE_API_VERSION = "2" -# Require 'yaml' and 'fileutils' modules +# Require 'yaml', 'fileutils', and 'erb' modules require 'yaml' require 'fileutils' +require 'erb' # Look for user-data file to configure/customize CoreOS boxes # No changes should need to be made to this file @@ -17,6 +18,20 @@ USER_DATA = File.join(File.dirname(__FILE__), "user-data") # Be sure to edit servers.yml to provide correct IP addresses servers = YAML.load_file('servers.yml') +# Use config from YAML file to write out templates for etcd overrides +template = File.join(File.dirname(__FILE__), 'etcd.defaults.erb') +content = ERB.new File.new(template).read + +etcd_initial_cluster = [] +servers.each do |servers| + etcd_initial_cluster << "#{servers['name']}=http://#{servers['priv_ip']}:2380" +end +servers.each do |servers| + ip = servers['priv_ip'] + target = File.join(File.dirname(__FILE__), "#{servers['name']}.defaults") + File.open(target, 'w') { |f| f.write(content.result(binding)) } +end + # Create and configure the VMs Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| diff --git a/docker-swarm-etcd/etcd-01.override b/docker-swarm-etcd/etcd-01.override deleted file mode 100644 index 1b0ff59..0000000 --- a/docker-swarm-etcd/etcd-01.override +++ /dev/null @@ -1,12 +0,0 @@ -# Override file for etcd Upstart script - -# Environment variables -env ETCD_INITIAL_CLUSTER="etcd-01=http://192.168.101.101:2380,etcd-02=http://192.168.101.102:2380,etcd-03=http://192.168.101.103:2380" -env ETCD_INITIAL_CLUSTER_STATE="new" -env ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" -env ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.101.101:2380" -env ETCD_DATA_DIR="/var/etcd" -env ETCD_LISTEN_PEER_URLS="http://192.168.101.101:2380" -env ETCD_LISTEN_CLIENT_URLS="http://192.168.101.101:2379,http://127.0.0.1:2379" -env ETCD_ADVERTISE_CLIENT_URLS="http://192.168.101.101:2379" -env ETCD_NAME="etcd-01" diff --git a/docker-swarm-etcd/etcd-02.override b/docker-swarm-etcd/etcd-02.override deleted file mode 100644 index 45460d4..0000000 --- a/docker-swarm-etcd/etcd-02.override +++ /dev/null @@ -1,12 +0,0 @@ -# Override file for etcd Upstart script - -# Environment variables -env ETCD_INITIAL_CLUSTER="etcd-01=http://192.168.101.101:2380,etcd-02=http://192.168.101.102:2380,etcd-03=http://192.168.101.103:2380" -env ETCD_INITIAL_CLUSTER_STATE="new" -env ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" -env ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.101.102:2380" -env ETCD_DATA_DIR="/var/etcd" -env ETCD_LISTEN_PEER_URLS="http://192.168.101.102:2380" -env ETCD_LISTEN_CLIENT_URLS="http://192.168.101.102:2379,http://127.0.0.1:2379" -env ETCD_ADVERTISE_CLIENT_URLS="http://192.168.101.102:2379" -env ETCD_NAME="etcd-02" diff --git a/docker-swarm-etcd/etcd-03.override b/docker-swarm-etcd/etcd-03.override deleted file mode 100644 index 1ef61e6..0000000 --- a/docker-swarm-etcd/etcd-03.override +++ /dev/null @@ -1,12 +0,0 @@ -# Override file for etcd Upstart script - -# Environment variables -env ETCD_INITIAL_CLUSTER="etcd-01=http://192.168.101.101:2380,etcd-02=http://192.168.101.102:2380,etcd-03=http://192.168.101.103:2380" -env ETCD_INITIAL_CLUSTER_STATE="new" -env ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" -env ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.101.103:2380" -env ETCD_DATA_DIR="/var/etcd" -env ETCD_LISTEN_PEER_URLS="http://192.168.101.103:2380" -env ETCD_LISTEN_CLIENT_URLS="http://192.168.101.103:2379,http://127.0.0.1:2379" -env ETCD_ADVERTISE_CLIENT_URLS="http://192.168.101.103:2379" -env ETCD_NAME="etcd-03" diff --git a/docker-swarm-etcd/etcd.defaults.erb b/docker-swarm-etcd/etcd.defaults.erb new file mode 100644 index 0000000..2fdf981 --- /dev/null +++ b/docker-swarm-etcd/etcd.defaults.erb @@ -0,0 +1,13 @@ +# Override file for etcd Upstart script +# Generated from etcd.override.erb by Vagrant + +# Environment variables +export ETCD_INITIAL_CLUSTER="<%= etcd_initial_cluster.join(',') %>" +export ETCD_INITIAL_CLUSTER_STATE="new" +export ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" +export ETCD_INITIAL_ADVERTISE_PEER_URLS="http://<%= servers['priv_ip'] %>:2380" +export ETCD_DATA_DIR="/var/etcd" +export ETCD_LISTEN_PEER_URLS="http://<%= servers['priv_ip'] %>:2380" +export ETCD_LISTEN_CLIENT_URLS="http://<%= servers['priv_ip'] %>:2379,http://127.0.0.1:2379" +export ETCD_ADVERTISE_CLIENT_URLS="http://<%= servers['priv_ip'] %>:2379" +export ETCD_NAME="<%= servers['name'] %>" diff --git a/docker-swarm-etcd/provision.sh b/docker-swarm-etcd/provision.sh index 3fe30f3..c10e938 100644 --- a/docker-swarm-etcd/provision.sh +++ b/docker-swarm-etcd/provision.sh @@ -2,7 +2,8 @@ # Define a couple variables for easier future modifications VERS="v2.0.9" -FNAME="etcd-$VERS-linux-amd64.tar.gz" +BASENAME="etcd-$VERS-linux-amd64" +FNAME="$BASENAME.tar.gz" URL="https://github.com/coreos/etcd/releases/download/$VERS/$FNAME" # Install curl if needed @@ -21,14 +22,14 @@ if [[ ! -e /usr/local/bin/etcd ]]; then tar xzvf $FNAME # Move etcd and etcdctl to /usr/local/bin - cd etcd-v2.0.9-linux-amd64 + cd $BASENAME sudo mv etcd /usr/local/bin/ sudo mv etcdctl /usr/local/bin/ cd .. # Remove etcd download and directory rm $FNAME - rm -rf etcd-v2.0.9-linux-amd64 + rm -rf $BASENAME fi # Create etcd data directory if not already present @@ -38,4 +39,7 @@ fi # Copy files into the correct locations; requires shared folders sudo cp /vagrant/etcd.conf /etc/init/etcd.conf -sudo cp /vagrant/$HOSTNAME.override /etc/init/etcd.override +sudo cp /vagrant/$HOSTNAME.defaults /etc/default/etcd + +# Restart if already running; otherwise, start etcd. +sudo initctl status etcd && initctl restart etcd || initctl start etcd