Merge pull request #1511 from Interoute/interoute-789

init commit of interoute oem files
This commit is contained in:
Alex Crawford 2015-09-05 09:43:42 -07:00
commit 966143eb2f
7 changed files with 283 additions and 0 deletions

View File

@ -0,0 +1,61 @@
#cloud-config
coreos:
units:
- name: vmtoolsd.service
command: start
content: |
[Unit]
Description=VMware Tools Agent
Documentation=http://open-vm-tools.sourceforge.net/
ConditionVirtualization=vmware
[Service]
ExecStartPre=/usr/bin/ln -sfT /usr/share/oem/vmware-tools /etc/vmware-tools
ExecStart=/usr/share/oem/bin/vmtoolsd
TimeoutStopSec=5
- name: cloudstack-ssh-key.service
command: restart
runtime: yes
content: |
[Unit]
Description=Sets SSH key from metadata
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
[Service]
Type=oneshot
StandardOutput=journal+console
EnvironmentFile=/etc/environment
ExecStart=/usr/share/oem/bin/cloudstack-ssh-key
- name: cloudstack-cloudinit.service
command: restart
runtime: yes
content: |
[Unit]
Description=Cloudinit from CloudStack-style metadata
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
[Service]
Type=oneshot
EnvironmentFile=/etc/environment
ExecStart=/usr/share/oem/bin/cloudstack-coreos-cloudinit
- name: cloudstack-set-guest-password.service
runtime: yes
content: |
[Unit]
Description=CloudStack Guest Password Reset
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
[Service]
Type=oneshot
ExecStart=/usr/share/oem/bin/cloudstack-set-guest-password
EnvironmentFile=/etc/environment
oem:
id: interoute
name: Interoute
version-id: @@OEM_VERSION_ID@@
home-url: http://interoute.com/
bug-report-url: https://github.com/coreos/bugs/issues

View File

@ -0,0 +1,7 @@
#!/bin/bash
DHCP_SERVER=${NIC_1_GATEWAY}
USERDATA_URL="http://${DHCP_SERVER}/latest/user-data"
block-until-url "${USERDATA_URL}"
coreos-cloudinit --from-url="${USERDATA_URL}"

View File

@ -0,0 +1,101 @@
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
# Installation steps (ArchLinux using base/dhcpcd-6.0.5-1)
#
# Install "wget" and "dhcpcd"
# $ pacman -S wget dhcpcd
# $ systemctl enable dhcpcd@eth0
# Copy script to /usr/lib/systemd/scripts/
# $ cp -v cloudstack-set-guest-password \
# /usr/lib/systemd/scripts/
# Copy the service file to /usr/lib/systemd/system/
# $ cp -v cloudstack-set-guest-password.service \
# /usr/lib/systemd/system/
# Enable the service
# $ systemctl enable cloudstack-set-guest-password.service
# Modified: Dong Xie, 02-09-2015
user=root
password_received=0
if [ ! -x /usr/sbin/chpasswd ]; then
logger -t "cloudstack" "$0 requires /usr/sbin/chpasswd command"
exit 1
fi
PASSWORD_SERVER_IP=${NIC_1_GATEWAY}
if [ -n $PASSWORD_SERVER_IP ]; then
logger -t "cloudstack" "Found password server IP $PASSWORD_SERVER_IP"
logger -t "cloudstack" "Sending request to password server at $PASSWORD_SERVER_IP"
password=$(wget -q -t 3 -T 20 -O - --header "DomU_Request: send_my_password" $PASSWORD_SERVER_IP:8080)
if [ $? -ne 0 ]; then
logger -t "cloudstack" "Failed to run wget correctly. Network not ready?"
exit 1
fi
password=$(echo $password | tr -d '\r')
logger -t "cloudstack" "Got password as - $password - "
if [ $? -eq 0 ]; then
logger -t "cloudstack" "Got response from server at $PASSWORD_SERVER_IP"
case $password in
"")
logger -t "cloudstack" "Password server at $PASSWORD_SERVER_IP did not have any password for the VM"
;;
"bad_request")
logger -t "cloudstack" "VM sent an invalid request to password server at $PASSWORD_SERVER_IP"
;;
"saved_password")
logger -t "cloudstack" "VM has already saved a password from the password server at $PASSWORD_SERVER_IP"
;;
*)
logger -t "cloudstack" "VM got a valid password from server at $PASSWORD_SERVER_IP"
password_received=1
;;
esac
else
logger -t "cloudstack" "Failed to send request to password server at $PASSWORD_SERVER_IP"
fi
else
logger -t "cloudstack" "Could not find password server IP for $interface"
fi
if [ "$password_received" == "1" ]; then
logger -t "cloudstack" "Changing password ..."
echo $user:$password | /usr/sbin/chpasswd
if [ $? -gt 0 ]; then
logger -t "cloudstack" "Failed to change password for user $user"
exit 1
fi
logger -t "cloudstack" "Successfully changed password for user $user"
logger -t "cloudstack" "Sending acknowledgment to password server at $PASSWORD_SERVER_IP"
wget -t 3 -T 20 -O - --header "DomU_Request: saved_password" $PASSWORD_SERVER_IP:8080
fi
exit 0
# vim: set ts=2 sw=2 expandtab

View File

@ -0,0 +1,7 @@
#!/bin/bash
DHCP_SERVER=${NIC_1_GATEWAY}
KEY_URL="http://${DHCP_SERVER}/latest/meta-data/public-keys"
block-until-url "${KEY_URL}"
curl --fail -s "${KEY_URL}" | update-ssh-keys -a cloudstack

View File

@ -0,0 +1,64 @@
#!/bin/bash
ENV=$1
leases_dir="/run/systemd/netif/leases"
if [[ -z "$ENV" ]]; then
echo "usage: $0 /etc/environment" >&2
exit 1
fi
# Make sure that the file is writable
touch $ENV
if [[ $? -ne 0 ]]; then
echo "$0: unable to modify ${ENV}" >&2
exit 1
fi
# Clean up values
sed -i -e '/^COREOS_PUBLIC_IPV4=/d' \
-e '/^COREOS_PRIVATE_IPV4=/d' \
"${ENV}"
sed -i -e '/^NIC_[0-9]*_IPV4=/d' \
-e '/^NIC_[0-9]*_GATEWAY=/d' \
"${ENV}"
# Fetch number of NIC
nic_count=$(ip link show | grep ens | wc -l)
# Loop until all lease files ready
while true; do
if [[ $(find "${leases_dir}" -maxdepth 1 -type f -size +1c | wc -l) -ge $nic_count ]]; then
break
fi
sleep .5
done
# Get leases in var
leases=$(find "${leases_dir}" -type f | sort)
# Take first lease which should be the default NIC
default_lease=$(echo "${leases}" | head -n1)
DHCP_SERVER=$(cat $default_lease | awk -F= '/SERVER_ADDRESS/ { print $2 }')
METADATA_URL="http://${DHCP_SERVER}/latest/meta-data/"
block-until-url "${METADATA_URL}"
PUBLIC_IP=$(curl --fail -s "${METADATA_URL}public-ipv4")
echo COREOS_PUBLIC_IPV4=${PUBLIC_IP} >> $ENV
PRIVATE_IP=$(curl --fail -s "${METADATA_URL}local-ipv4")
echo COREOS_PRIVATE_IPV4=${PRIVATE_IP} >> $ENV
# Loop to export interoute style info into ENV
count=1
for lease in $leases;
do
ip=$(cat $lease | awk -F= '/^ADDRESS/ { print $2 }')
gateway=$(cat $lease | awk -F= '/SERVER_ADDRESS/ { print $2 }')
echo "NIC_${count}_IPV4"=${ip} >> $ENV
echo "NIC_${count}_GATEWAY"=${gateway} >> $ENV
count=$(expr $count + 1)
done

View File

@ -0,0 +1 @@
OEM_ID=interoute

View File

@ -0,0 +1,42 @@
#
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Copyright (c) 2014 CoreOS, Inc.. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
# $Header:$
#
EAPI=5
DESCRIPTION="OEM suite for Interoute images"
HOMEPAGE=""
SRC_URI=""
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64"
IUSE=""
DEPEND="
app-emulation/open-vm-tools
"
RDEPEND="${DEPEND}"
# no source directory
S="${WORKDIR}"
src_prepare() {
sed -e "s\\@@OEM_VERSION_ID@@\\${PVR}\\g" \
"${FILESDIR}/cloud-config.yml" > "${T}/cloud-config.yml" || die
}
src_install() {
into "/usr/share/oem"
dobin "${FILESDIR}/cloudstack-set-guest-password"
dobin "${FILESDIR}/cloudstack-ssh-key"
dobin "${FILESDIR}/cloudstack-coreos-cloudinit"
dobin "${FILESDIR}/coreos-setup-environment"
insinto "/usr/share/oem"
doins "${T}/cloud-config.yml"
doins "${FILESDIR}/oem-release"
}