From cd3dfe7395eb862f8ab6422ae6347a03e08a63eb Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Fri, 28 Nov 2014 17:05:06 -0500 Subject: [PATCH] Add rax-nova-agent element VMs on Rackspace Cloud need nova-agent installed to get networking information set up properly. Add a nova-agent element so that dib can be used to create images to use on Rackspace cloud. Change-Id: I075a50e9a2d7ae7641905b66bbbc627ad708b5ea --- elements/rax-nova-agent/README.md | 6 + elements/rax-nova-agent/element-deps | 1 + .../rax-nova-agent/install.d/05-xen-tools | 40 +++++ .../rax-nova-agent/install.d/10-nova-agent | 137 ++++++++++++++++++ elements/rax-nova-agent/package-installs.yaml | 2 + .../source-repository-nova-agent | 1 + .../source-repository-xen-tools | 1 + 7 files changed, 188 insertions(+) create mode 100644 elements/rax-nova-agent/README.md create mode 100644 elements/rax-nova-agent/element-deps create mode 100755 elements/rax-nova-agent/install.d/05-xen-tools create mode 100755 elements/rax-nova-agent/install.d/10-nova-agent create mode 100644 elements/rax-nova-agent/package-installs.yaml create mode 100644 elements/rax-nova-agent/source-repository-nova-agent create mode 100644 elements/rax-nova-agent/source-repository-xen-tools diff --git a/elements/rax-nova-agent/README.md b/elements/rax-nova-agent/README.md new file mode 100644 index 00000000..52cd19f3 --- /dev/null +++ b/elements/rax-nova-agent/README.md @@ -0,0 +1,6 @@ +Images for Rackspace Cloud currently require nova-agent to get networking +information. + +Many of the things here are adapted from: + +https://developer.rackspace.com/blog/bootstrap-your-qcow-images-for-the-rackspace-public-cloud/ diff --git a/elements/rax-nova-agent/element-deps b/elements/rax-nova-agent/element-deps new file mode 100644 index 00000000..715c11e2 --- /dev/null +++ b/elements/rax-nova-agent/element-deps @@ -0,0 +1 @@ +source-repositories diff --git a/elements/rax-nova-agent/install.d/05-xen-tools b/elements/rax-nova-agent/install.d/05-xen-tools new file mode 100755 index 00000000..19513bbf --- /dev/null +++ b/elements/rax-nova-agent/install.d/05-xen-tools @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. +# +# 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. + +set -eu +set -o pipefail + +DIST=$(lsb_release -is) +[ -n "$DIST" ] + +XS_TOOLS_DIR=$(mktemp -d) +mount -o loop /tmp/xs-tools.iso $XS_TOOLS_DIR +pushd $XS_TOOLS_DIR/Linux +case $DIST in + 'Ubuntu'|'Debian') + # Seriously + source versions.deb + dpkg -i $XE_GUEST_UTILITIES_PKG_FILE_amd64 + ;; + 'Fedora'|'CentOS' | 'openSUSE project') + source versions.rpm + rpm -Uvh $XE_GUEST_UTILITIES_PKG_FILE_x86_64 + ;; +esac + +popd +umount $XS_TOOLS_DIR diff --git a/elements/rax-nova-agent/install.d/10-nova-agent b/elements/rax-nova-agent/install.d/10-nova-agent new file mode 100755 index 00000000..b80391c9 --- /dev/null +++ b/elements/rax-nova-agent/install.d/10-nova-agent @@ -0,0 +1,137 @@ +#!/bin/bash +# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. +# +# 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. + +set -eu +set -o pipefail + +cd /tmp/nova-agent +./installer.sh + +cat > /etc/cloud/cloud.cfg.d/80_restart_network.cfg <<'EOF' +# Restart networking if it's got no IP. This is to catch if we're on RAX +# and the baked in dhcp config didn't work, but is now probably reconfigured +# by nova-agent +runcmd: + - ip addr show eth0 | grep inet || ( ifdown -a ; ifup -a ) +EOF + +DIST=$(lsb_release -is) +[ -n "$DIST" ] +case $DIST in + 'Ubuntu'|'Debian') + + # cloud-init / nova-agent sad panda hacks + cat > /etc/init/nova-agent.conf <<'EOF' +# nova-agent - start before cloud-init and hup network interfaces +start on starting cloud-init-local + +task + +console output + +script + /etc/init.d/nova-agent start + sleep 13 + ifdown -a + ifup -a +end script +EOF + + cat > /etc/init/xe-linux-distribution.conf <<'EOF' +# xe-linux-distribution - start the xentools before nova-agent runs +start on starting nova-agent + +task + +console output + +script + /etc/init.d/xe-linux-distribution start + sleep 2 +end script +EOF + + # stop nova-agent from starting twice since we start it from upstart now + update-rc.d -f nova-agent remove + update-rc.d -f xe-linux-distribution remove + + # console fix for PV Ubuntus + cat > /etc/init/hvc0.conf <<'EOF' + +# hvc0 - getty +# +# This service maintains a getty on hvc0 from the point the system is +# started until it is shut down again. + +start on stopped rc RUNLEVEL=[2345] +stop on runlevel [!2345] + +respawn +exec /sbin/getty -L 115200 hvc0 vt102 +EOF + ;; + 'Fedora'|'CentOS' | 'openSUSE project') + + cat > /usr/local/bin/run-nova-agent.sh <<'EOF' +#!/bin/bash +/etc/init.d/nova-agent start +sleep 13 +ifdown -a +ifup -a +EOF + chmod 0755 /usr/local/bin/run-nova-agent.sh + + cat > /usr/local/bin/run-xe-linux-distribution.sh <<'EOF' +#!/bin/bash +/etc/init.d/xe-linux-distribution start +sleep 2 +EOF + chmod 0755 /usr/local/bin/run-xe-linux-distribution.sh + + cat > /etc/systemd/system/nova-agent.service < /etc/systemd/system/xe-linux-distribution.service <<'EOF' +[Unit] +Description=xentools agent +Before=nova-agent +Wants=nova-agent + +[Service] +ExecStart=/usr/local/bin/run-xe-linux-distribution.sh + +[Install] +WantedBy=multi-user.target +EOF + # stop nova-agent from starting twice since we start it from systemd now + chkconfig nova-agent off + chkconfig xe-linux-distribution off + + systemctl enable nova-agent + systemctl enable xe-linux-distribution + ;; +esac diff --git a/elements/rax-nova-agent/package-installs.yaml b/elements/rax-nova-agent/package-installs.yaml new file mode 100644 index 00000000..2f405cc1 --- /dev/null +++ b/elements/rax-nova-agent/package-installs.yaml @@ -0,0 +1,2 @@ +cloud-init: + phase: pre-install.d diff --git a/elements/rax-nova-agent/source-repository-nova-agent b/elements/rax-nova-agent/source-repository-nova-agent new file mode 100644 index 00000000..63fdbb49 --- /dev/null +++ b/elements/rax-nova-agent/source-repository-nova-agent @@ -0,0 +1 @@ +nova-agent tar /tmp/nova-agent https://f97f271e9fde8f434e2a-fa73b8821af96cee574a861a54d04230.ssl.cf3.rackcdn.com/files/nova-agent/nova-agent-Linux-x86_64-1.39.0.tar.gz . diff --git a/elements/rax-nova-agent/source-repository-xen-tools b/elements/rax-nova-agent/source-repository-xen-tools new file mode 100644 index 00000000..bd532212 --- /dev/null +++ b/elements/rax-nova-agent/source-repository-xen-tools @@ -0,0 +1 @@ +xen-tools file /tmp/xs-tools.iso https://f97f271e9fde8f434e2a-fa73b8821af96cee574a861a54d04230.ssl.cf3.rackcdn.com/files/xentools/xs-tools-6.2.0.iso