From 729fe0e6ae3ea4b9b3be7c512148314f37621b8a Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Fri, 21 Mar 2014 12:21:56 -0700 Subject: [PATCH 1/3] feat(coreos-base/oem-gce): support cloudconfig With this pull request we can support a cloudconfig sent to the user-data metadata key. Tested etcd and fleet bootstrapping and ssh key insertion. --- .../oem-gce/files/cloud-config.yml | 22 ++++++++++++- .../oem-gce/files/gce-coreos-cloudinit | 10 ++++++ .../oem-gce/files/gce-setup-environment | 31 +++++++++++++++++++ .../coreos-base/oem-gce/files/gce-ssh-key | 2 +- .../coreos-base/oem-gce/oem-gce-0.0.1.ebuild | 6 ++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-coreos-cloudinit create mode 100755 sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/cloud-config.yml b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/cloud-config.yml index 691e93a139..f2eca19ca5 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/cloud-config.yml +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/cloud-config.yml @@ -2,7 +2,27 @@ coreos: units: - - name: ec2-ssh-key.service + - name: gce-coreos-cloudinit.service + runtime: yes + content: | + [Unit] + Requires=gce-setup-environment.service + After=gce-setup-environment.service + + [Service] + EnvironmentFile=/etc/environment + ExecStart=/usr/share/oem/bin/gce-coreos-cloudinit + - name: gce-setup-environment.service + runtime: yes + content: | + [Unit] + Description=Setup environment variables from metadata + + [Service] + Type=oneshot + StandardOutput=journal+console + ExecStart=/usr/share/oem/bin/gce-setup-environment /etc/environment + - name: gce-ssh-key.service runtime: yes content: | [Unit] diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-coreos-cloudinit b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-coreos-cloudinit new file mode 100644 index 0000000000..5df57a5d5e --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-coreos-cloudinit @@ -0,0 +1,10 @@ +#!/bin/bash -e + +TMPFILE=$(mktemp /tmp/XXXXXX-cloud-init) +trap 'echo "removing ${TMPFILE}"; rm -f ${TMPFILE}' INT TERM EXIT + +curl --retry 5 --retry-delay 2 --silent --fail \ + "http://169.254.169.254/computeMetadata/v1/instance/attributes/user-data" \ + -H "X-Google-Metadata-Request: True" > ${TMPFILE} + +/usr/bin/coreos-cloudinit --from-file=${TMPFILE} diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment new file mode 100755 index 0000000000..4b93cb80ec --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment @@ -0,0 +1,31 @@ +#!/bin/bash +x + +ENV=$1 + +if [ -z "$ENV" ]; then + echo usage: $0 /etc/environment + exit 1 +fi + +# test for rw +touch $ENV +if [ $? -ne 0 ]; then + echo exiting, unable to modify: $ENV + exit 1 +fi + +sed -i -e '/^COREOS_PUBLIC_IPV4=/d' \ + -e '/^COREOS_PRIVATE_IPV4=/d' \ + "${ENV}" + +external_ip=$(curl --retry 5 --retry-delay 2 --silent --fail \ + "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip" \ + -H "X-Google-Metadata-Request: True") + + +public_ip=$(curl --retry 5 --retry-delay 2 --silent --fail \ + "http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip" \ + -H "X-Google-Metadata-Request: True") + +echo COREOS_PUBLIC_IPV4=${external_ip} >> $ENV +echo COREOS_PRIVATE_IPV4=${public_ip} >> $ENV diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key index 9a0e750051..f354b9260b 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key @@ -2,7 +2,7 @@ set -e -URL_PREFIX="http://metadata/computeMetadata/v1beta1/" +URL_PREFIX="http://169.254.169.254/computeMetadata/v1beta1/" update_keys() { local id="$1" diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild index 7d4861cc9e..29143f1b96 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild @@ -19,6 +19,12 @@ src_install() { into "/" dobin ${FILESDIR}/gce-ssh-key + into "/" + dobin ${FILESDIR}/gce-coreos-cloudinit + + into "/" + dobin ${FILESDIR}/gce-setup-environment + insinto "/" doins ${FILESDIR}/cloud-config.yml } From f8f054c1d7641ff53b6248c8a429490647e9e40d Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 22 Mar 2014 09:12:20 -0700 Subject: [PATCH 2/3] fix(coreos-base/oem-*): be consistent about sh -e Use sh -e everywhere to be safe. --- .../coreos-overlay/coreos-base/oem-ami/files/ec2-ssh-key | 4 +--- .../coreos-base/oem-gce/files/gce-setup-environment | 2 +- .../coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key | 2 +- .../coreos-base/oem-rackspace/files/coreos-setup-environment | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-ami/files/ec2-ssh-key b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-ami/files/ec2-ssh-key index bdd50d4b23..65dfeaae55 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-ami/files/ec2-ssh-key +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-ami/files/ec2-ssh-key @@ -1,6 +1,4 @@ -#!/bin/sh - -set -e +#!/bin/sh -e KEY_URL="http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key" diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment index 4b93cb80ec..0ffd55d92f 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-setup-environment @@ -1,4 +1,4 @@ -#!/bin/bash +x +#!/bin/bash -e ENV=$1 diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key index f354b9260b..2820a99494 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/files/gce-ssh-key @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -e set -e diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/coreos-setup-environment b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/coreos-setup-environment index 58119841da..2e5f9c1bd0 100755 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/coreos-setup-environment +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-rackspace/files/coreos-setup-environment @@ -1,4 +1,4 @@ -#!/bin/bash +x +#!/bin/bash -e ENV=$1 From 9dc97bccb54d0ed02a625e930eaa1c9cefdbf0f0 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Sat, 22 Mar 2014 09:13:44 -0700 Subject: [PATCH 3/3] fix(coreos-base/oem-gce): use only one into Suggestion by @marineam. --- .../coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild index 29143f1b96..fcc12bd5ec 100644 --- a/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/coreos-base/oem-gce/oem-gce-0.0.1.ebuild @@ -18,11 +18,7 @@ S="${WORKDIR}" src_install() { into "/" dobin ${FILESDIR}/gce-ssh-key - - into "/" dobin ${FILESDIR}/gce-coreos-cloudinit - - into "/" dobin ${FILESDIR}/gce-setup-environment insinto "/"