summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Doffman <mark.doffman@codethink.co.uk>2015-04-14 20:23:30 +0000
committerMark Doffman <mark.doffman@codethink.co.uk>2015-04-23 14:56:17 +0000
commitba8e2119c6fc5e4d9023fae558b6ec93a749af3d (patch)
tree6f098793ca5b8406f7fa9cad4b12c5bc751564e4
parent888021ec62166ca95b3e587c744dcbcac42e7dc6 (diff)
downloaddefinitions-baserock/markdoffman/google-compute-engine-rebase.tar.gz
Add strata, systems and cluster morpologies for google compute engine.baserock/markdoffman/google-compute-engine-rebase
Add the ability to create baserock images compatible with google compute engine. Add an example cluster morphology that does this. Change-Id: I3ecaef8c760fe2c539969d2f86fc704b3232e5bb
-rw-r--r--clusters/google-compute-engine.morph14
-rw-r--r--google-compute-engine.configure29
-rwxr-xr-xgoogle-compute-engine.write64
-rw-r--r--google-compute-engine/etc/skel/.bash_logout7
-rw-r--r--google-compute-engine/etc/skel/.bashrc41
-rw-r--r--google-compute-engine/etc/skel/.profile22
-rw-r--r--google-compute-engine/manifest5
-rw-r--r--google-compute-engine/usr/lib/systemd/system/setmtu@.service10
-rw-r--r--strata/google-compute-engine.morph16
-rw-r--r--strata/google-compute-engine/google-daemon.morph5
-rw-r--r--strata/google-compute-engine/google-startup-scripts.morph5
-rw-r--r--systems/devel-system-x86_64-gce.morph63
12 files changed, 281 insertions, 0 deletions
diff --git a/clusters/google-compute-engine.morph b/clusters/google-compute-engine.morph
new file mode 100644
index 00000000..2b702dbf
--- /dev/null
+++ b/clusters/google-compute-engine.morph
@@ -0,0 +1,14 @@
+name: release
+kind: cluster
+description: |
+ Deploy a GCE system
+
+systems:
+- morph: systems/devel-system-x86_64-gce.morph
+ deploy:
+ devel-system-x86_64-gce:
+ type: google-compute-engine
+ location: devel-system-x86_64-gce.tar.gz
+ DISK_SIZE: 4G
+ INSTALL_FILES: google-compute-engine/manifest
+ KERNEL_ARGS: console=tty0 console=ttyS0
diff --git a/google-compute-engine.configure b/google-compute-engine.configure
new file mode 100644
index 00000000..95af1bcf
--- /dev/null
+++ b/google-compute-engine.configure
@@ -0,0 +1,29 @@
+#!/bin/sh
+# Copyright (C) 2013-2014 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -e
+
+ROOT="$1"
+
+ln -s ../../../../usr/lib/systemd/system/google-accounts-manager.service "$ROOT"/etc/systemd/system/multi-user.target.wants/google-accounts-manager.service
+ln -s ../../../../usr/lib/systemd/system/google-address-manager.service "$ROOT"/etc/systemd/system/multi-user.target.wants/google-address-manager.service
+ln -s ../../../../usr/lib/systemd/system/google-startup-scripts.service "$ROOT"/etc/systemd/system/multi-user.target.wants/google-startup-scripts.service
+ln -s ../../../../usr/lib/systemd/system/google.service "$ROOT"/etc/systemd/system/multi-user.target.wants/google.service
+# Needed as Google's network really doesn't like a 1500 MTU, makes ssh impossible.
+ln -s ../../../../usr/lib/systemd/system/setmtu@.service "$ROOT"/etc/systemd/system/multi-user.target.wants/setmtu@eth0.service
+
+# Server on public ip probably shouldn't have passwordless root, user accounts and ssh login handled by google-daemon.
+sed -i "1s/.*/root\:!!\:\:\:\:\:\:\:/" "$ROOT"/etc/shadow
diff --git a/google-compute-engine.write b/google-compute-engine.write
new file mode 100755
index 00000000..a3226416
--- /dev/null
+++ b/google-compute-engine.write
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+# Copyright (C) 2012-2015 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+'''A Morph deployment write extension for compressed raw disk images
+ that are compatible with google compute engine.'''
+
+
+import cliapp
+import os
+import sys
+import time
+import tempfile
+import shutil
+
+import morphlib.writeexts
+
+from subprocess import call
+
+class GoogleComputeEngineWriteExtension(morphlib.writeexts.WriteExtension):
+
+ def process_args(self, args):
+ if len(args) != 2:
+ raise cliapp.AppException('Wrong number of command line args')
+
+ DISK_NAME = 'disk.raw'
+
+ temp_root, location = args
+
+ try:
+ temp_dir = tempfile.mkdtemp()
+ disk_location = os.path.join(temp_dir, DISK_NAME)
+
+ with self.created_disk_image(disk_location):
+ self.format_btrfs(disk_location)
+ self.create_system(temp_root, disk_location)
+
+ self.status(msg='Compressing disk image')
+ call(["tar", '-czf', location, '-C', temp_dir, DISK_NAME])
+
+ self.status(msg='Compressed disk image has been created at %s' % location)
+ except Exception:
+ self.status(msg='Failure to deploy system to %s' % location)
+ raise
+ finally:
+ try:
+ shutil.rmtree(temp_dir)
+ except OSError as exc:
+ if exc.errno != errno.ENOENT:
+ raise
+
+GoogleComputeEngineWriteExtension().run()
diff --git a/google-compute-engine/etc/skel/.bash_logout b/google-compute-engine/etc/skel/.bash_logout
new file mode 100644
index 00000000..de4f5f75
--- /dev/null
+++ b/google-compute-engine/etc/skel/.bash_logout
@@ -0,0 +1,7 @@
+# ~/.bash_logout: executed by bash(1) when login shell exits.
+
+# when leaving the console clear the screen to increase privacy
+
+if [ "$SHLVL" = 1 ]; then
+ [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
+fi
diff --git a/google-compute-engine/etc/skel/.bashrc b/google-compute-engine/etc/skel/.bashrc
new file mode 100644
index 00000000..4ab3831b
--- /dev/null
+++ b/google-compute-engine/etc/skel/.bashrc
@@ -0,0 +1,41 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+ *i*) ;;
+ *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+PS1='\u@\h:\w\$ '
+
+# Alias definitions.
+
+if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+fi
+
+# Completion
+if ! shopt -oq posix; then
+ if [ -f /usr/share/bash-completion/bash_completion ]; then
+ . /usr/share/bash-completion/bash_completion
+ elif [ -f /etc/bash_completion ]; then
+ . /etc/bash_completion
+ fi
+fi
diff --git a/google-compute-engine/etc/skel/.profile b/google-compute-engine/etc/skel/.profile
new file mode 100644
index 00000000..c9db4591
--- /dev/null
+++ b/google-compute-engine/etc/skel/.profile
@@ -0,0 +1,22 @@
+# ~/.profile: executed by the command interpreter for login shells.
+# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
+# exists.
+# see /usr/share/doc/bash/examples/startup-files for examples.
+# the files are located in the bash-doc package.
+
+# the default umask is set in /etc/profile; for setting the umask
+# for ssh logins, install and configure the libpam-umask package.
+#umask 022
+
+# if running bash
+if [ -n "$BASH_VERSION" ]; then
+ # include .bashrc if it exists
+ if [ -f "$HOME/.bashrc" ]; then
+ . "$HOME/.bashrc"
+ fi
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/bin" ] ; then
+ PATH="$HOME/bin:$PATH"
+fi
diff --git a/google-compute-engine/manifest b/google-compute-engine/manifest
new file mode 100644
index 00000000..f806ecb5
--- /dev/null
+++ b/google-compute-engine/manifest
@@ -0,0 +1,5 @@
+0040755 0 0 /etc/skel
+0100644 0 0 /etc/skel/.bashrc
+0100644 0 0 /etc/skel/.bash_logout
+0100644 0 0 /etc/skel/.profile
+0100644 0 0 /usr/lib/systemd/system/setmtu@.service
diff --git a/google-compute-engine/usr/lib/systemd/system/setmtu@.service b/google-compute-engine/usr/lib/systemd/system/setmtu@.service
new file mode 100644
index 00000000..0425025d
--- /dev/null
+++ b/google-compute-engine/usr/lib/systemd/system/setmtu@.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Set mtu on device
+Before=network.target
+
+[Service]
+Type=oneshot
+ExecStart=/sbin/ip link set dev %i mtu 1460
+
+[Install]
+WantedBy=multi-user.target
diff --git a/strata/google-compute-engine.morph b/strata/google-compute-engine.morph
new file mode 100644
index 00000000..f0d11c16
--- /dev/null
+++ b/strata/google-compute-engine.morph
@@ -0,0 +1,16 @@
+name: google-compute-engine
+kind: stratum
+description: Packages to be installed on GCE images.
+build-depends:
+- morph: strata/core.morph
+chunks:
+- name: google-daemon
+ morph: strata/google-compute-engine/google-daemon.morph
+ repo: upstream:google-compute-image-packages
+ ref: 015c1c103b68a599d437a64f1d745e2b99e8c750
+ unpetrify-ref: master
+- name: google-startup-scripts
+ morph: strata/google-compute-engine/google-startup-scripts.morph
+ repo: upstream:google-compute-image-packages
+ ref: 015c1c103b68a599d437a64f1d745e2b99e8c750
+ unpetrify-ref: master
diff --git a/strata/google-compute-engine/google-daemon.morph b/strata/google-compute-engine/google-daemon.morph
new file mode 100644
index 00000000..eee3ea03
--- /dev/null
+++ b/strata/google-compute-engine/google-daemon.morph
@@ -0,0 +1,5 @@
+name: google-daemon
+kind: chunk
+install-commands:
+- cp -r google-daemon/* $DESTDIR
+- rm $DESTDIR/README.md
diff --git a/strata/google-compute-engine/google-startup-scripts.morph b/strata/google-compute-engine/google-startup-scripts.morph
new file mode 100644
index 00000000..29cd8328
--- /dev/null
+++ b/strata/google-compute-engine/google-startup-scripts.morph
@@ -0,0 +1,5 @@
+name: google-startup-scripts
+kind: chunk
+install-commands:
+- cp -r google-startup-scripts/* $DESTDIR
+- rm $DESTDIR/README.md
diff --git a/systems/devel-system-x86_64-gce.morph b/systems/devel-system-x86_64-gce.morph
new file mode 100644
index 00000000..2b5503d5
--- /dev/null
+++ b/systems/devel-system-x86_64-gce.morph
@@ -0,0 +1,63 @@
+name: devel-system-x86_64-gce
+kind: system
+description: |
+ A system with useful tools for doing Baserock development.
+
+ For use on 64-bit Intel x86 computers.
+arch: x86_64
+strata:
+- name: build-essential
+ morph: strata/build-essential.morph
+- name: core
+ morph: strata/core.morph
+- name: foundation
+ morph: strata/foundation.morph
+- name: bsp-x86_64-generic
+ morph: strata/bsp-x86_64-generic.morph
+- name: tools
+ morph: strata/tools.morph
+- name: python-cliapp
+ morph: strata/python-cliapp.morph
+- name: python-wsgi
+ morph: strata/python-wsgi.morph
+- name: morph-utils
+ morph: strata/morph-utils.morph
+- name: openstack-common
+ morph: strata/openstack-common.morph
+- name: openstack-clients
+ morph: strata/openstack-clients.morph
+- name: cloudinit-support
+ morph: strata/cloudinit-support.morph
+- name: nodejs
+ morph: strata/nodejs.morph
+- name: ruby
+ morph: strata/ruby.morph
+- name: lorry
+ morph: strata/lorry.morph
+- name: baserock-import
+ morph: strata/baserock-import.morph
+- name: nfs
+ morph: strata/nfs.morph
+- name: python-core
+ morph: strata/python-core.morph
+- name: python-tools
+ morph: strata/python-tools.morph
+- name: python-common
+ morph: strata/python-common.morph
+- name: devtools
+ morph: strata/devtools.morph
+- name: ansible
+ morph: strata/ansible.morph
+- name: swift
+ morph: strata/swift.morph
+- name: google-compute-engine
+ morph: strata/google-compute-engine.morph
+configuration-extensions:
+- set-hostname
+- add-config-files
+- simple-network
+- nfsboot
+- install-files
+- cloud-init
+- fstab
+- google-compute-engine