add scripts to load ssh keys and execute ec2 user data if it is a script

This commit is contained in:
Olivier Sallou 2013-07-30 14:13:30 +02:00
parent ac6870e37d
commit 74398c099a
6 changed files with 58 additions and 8 deletions

View file

@ -15,6 +15,7 @@ from tasks import network
from tasks import initd from tasks import initd
from tasks import cleanup from tasks import cleanup
from tasks import fake from tasks import fake
from tasks import one
def initialize(): def initialize():
@ -57,9 +58,9 @@ def tasks(tasklist, manifest):
network.RemoveDNSInfo(), network.RemoveDNSInfo(),
network.ConfigureNetworkIF(), network.ConfigureNetworkIF(),
network.ConfigureDHCP(), network.ConfigureDHCP(),
fake.Fake(),
initd.ResolveInitScripts(), initd.ResolveInitScripts(),
initd.InstallInitScripts(), initd.InstallInitScripts(),
one.OpenNebulaContext(),
cleanup.ClearMOTD(), cleanup.ClearMOTD(),
cleanup.ShredHostkeys(), cleanup.ShredHostkeys(),
cleanup.CleanTMP(), cleanup.CleanTMP(),

Binary file not shown.

14
providers/one/assets/one-ec2.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/bash
if [ -n "$EC2_USER_DATA" ]; then
# Check if EC2 user data is a script, if yes, execute
if [[ $EC2_USER_DATA =~ ^#! ]]; then
echo "EC2 data is an executable script, so execute it now"
TMPFILE=$(mktemp /tmp/output.XXXXXXXXXX)
chmod 755 $TMPFILE
$TMPFILE
cat $TMPFILE
else
print "Not an executable"
fi
fi

View file

@ -0,0 +1,8 @@
#!/bin/bash
echo "Copy public ssh keys to authorized_keys"
for f in /mnt/*.pub
do
cat $f >> /root/.ssh/authorized_keys
done

View file

@ -0,0 +1,31 @@
from base import Task
from common import phases
import os
class OpenNebulaContext(Task):
description = 'Setup OpenNebula init context'
phase = phases.system_modification
def run(self, info):
import stat
rwxr_xr_x = (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR |
stat.S_IRGRP | stat.S_IXGRP |
stat.S_IROTH | stat.S_IXOTH)
from shutil import copy
script_src = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/one-context_3.8.1.deb'))
script_dst = os.path.join(info.root, 'tmp/one-context_3.8.1.deb')
copy(script_src, script_dst)
os.chmod(script_dst, rwxr_xr_x)
from common.tools import log_check_call
log_check_call(['/usr/sbin/chroot', info.root, 'dpkg', '-i', '/tmp/one-context_3.8.1.deb'])
script_src = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/one-pubkey.sh'))
script_dst = os.path.join(info.root, 'etc/one-context.d/one-pubkey.sh')
copy(script_src, script_dst)
script_src = os.path.normpath(os.path.join(os.path.dirname(__file__), '../assets/one-ec2.sh'))
script_dst = os.path.join(info.root, 'etc/one-context.d/one-ec2.sh')
copy(script_src, script_dst)

View file

@ -7,7 +7,7 @@ class HostPackages(Task):
phase = phases.preparation phase = phases.preparation
def run(self, info): def run(self, info):
packages = set(['debootstrap', 'qemu-utils']) packages = set(['debootstrap', 'qemu-utils', 'parted', 'grub2'])
if info.manifest.volume['filesystem'] == 'xfs': if info.manifest.volume['filesystem'] == 'xfs':
packages.add('xfsprogs') packages.add('xfsprogs')
@ -22,7 +22,6 @@ class ImagePackages(Task):
manifest = info.manifest manifest = info.manifest
# Add some basic packages we are going to need # Add some basic packages we are going to need
include = set(['udev', include = set(['udev',
'mbr',
'parted', 'parted',
'openssh-server', 'openssh-server',
# We could bootstrap without locales, but things just suck without them, error messages etc. # We could bootstrap without locales, but things just suck without them, error messages etc.
@ -34,16 +33,13 @@ class ImagePackages(Task):
'grub2', 'grub2',
]) ])
if manifest.virtualization == 'pvm':
include.add('grub-pc')
exclude = set(['isc-dhcp-client', exclude = set(['isc-dhcp-client',
'isc-dhcp-common', 'isc-dhcp-common',
]) ])
# In squeeze, we need a special kernel flavor for xen # In squeeze, we need a special kernel flavor for xen
kernels = {'squeeze': {'amd64': 'linux-image-xen-amd64', kernels = {'squeeze': {'amd64': 'linux-image-amd64',
'i386': 'linux-image-xen-686', }, 'i386': 'linux-image-686', },
'wheezy': {'amd64': 'linux-image-amd64', 'wheezy': {'amd64': 'linux-image-amd64',
'i386': 'linux-image-686', }, } 'i386': 'linux-image-686', }, }
include.add(kernels.get(manifest.system['release']).get(manifest.system['architecture'])) include.add(kernels.get(manifest.system['release']).get(manifest.system['architecture']))