diff options
Diffstat (limited to 'global')
-rwxr-xr-x | global/overlay/etc/cosmos/apt/bootstrap-cosmos.sh | 42 | ||||
-rw-r--r-- | global/overlay/etc/cosmos/apt/cosmos_1.2-2_all.deb | bin | 0 -> 11724 bytes | |||
-rw-r--r-- | global/overlay/etc/cron.d/cosmos | 2 | ||||
-rw-r--r-- | global/overlay/etc/logrotate.d/docker-containers | 7 | ||||
-rw-r--r-- | global/overlay/etc/puppet/cosmos-modules.conf | 7 | ||||
-rw-r--r-- | global/overlay/etc/puppet/hiera.yaml | 1 | ||||
-rw-r--r-- | global/overlay/etc/puppet/puppet.conf | 6 | ||||
-rwxr-xr-x | global/overlay/usr/local/bin/run-cosmos | 2 | ||||
-rwxr-xr-x | global/overlay/usr/local/sbin/cosmos_vm | 124 | ||||
-rwxr-xr-x | global/post-tasks.d/018packages | 3 |
10 files changed, 181 insertions, 13 deletions
diff --git a/global/overlay/etc/cosmos/apt/bootstrap-cosmos.sh b/global/overlay/etc/cosmos/apt/bootstrap-cosmos.sh new file mode 100755 index 0000000..28cbde0 --- /dev/null +++ b/global/overlay/etc/cosmos/apt/bootstrap-cosmos.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +set -e + +cmd_hostname="$1" +if test -z "$cmd_hostname"; then + echo "Usage: $0 HOSTNAME REPO TAGPATTERN" + exit 1 +fi + +cmd_repo="$2" +if test -z "$cmd_repo"; then + echo "Usage $0 HOSTNAME REPO TAGPATTERN" + exit 2 +fi + +cmd_tags="$3" +if test -z "$cmd_tags"; then + echo "Usage $0 HOSTNAME REPO TAGPATTERN" + exit 3 +fi + +set -x + +apt-get -y install rsync git-core wget +dpkg -i cosmos_1.2-2_all.deb + +if ! test -d /var/cache/cosmos/repo; then + cosmos clone "$cmd_repo" +fi + +hostname $cmd_hostname + +perl -pi -e "s,#COSMOS_REPO_MODELS=.*,COSMOS_REPO_MODELS=\"\\\$COSMOS_REPO/global/:\\\$COSMOS_REPO/$cmd_hostname/\"," /etc/cosmos/cosmos.conf +perl -pi -e "s,#COSMOS_UPDATE_VERIFY_GIT_TAG_PATTERN=.*,COSMOS_UPDATE_VERIFY_GIT_TAG_PATTERN=\"${cmd_tags}*\"," /etc/cosmos/cosmos.conf + +env COSMOS_BASE=/var/cache/cosmos COSMOS_KEYS=/var/cache/cosmos/repo/global/overlay/etc/cosmos/keys /var/cache/cosmos/repo/global/post-tasks.d/015cosmos-trust + +(date; nohup cosmos -v update && nohup cosmos -v apply; date) 2>&1 | tee /var/log/cosmos.log + + +exit 0 diff --git a/global/overlay/etc/cosmos/apt/cosmos_1.2-2_all.deb b/global/overlay/etc/cosmos/apt/cosmos_1.2-2_all.deb Binary files differnew file mode 100644 index 0000000..9fe4434 --- /dev/null +++ b/global/overlay/etc/cosmos/apt/cosmos_1.2-2_all.deb diff --git a/global/overlay/etc/cron.d/cosmos b/global/overlay/etc/cron.d/cosmos index 58b45af..2aadd2e 100644 --- a/global/overlay/etc/cron.d/cosmos +++ b/global/overlay/etc/cron.d/cosmos @@ -1,4 +1,4 @@ SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin -*/15 * * * * root test -f /etc/no-automatic-cosmos || scriptherder --mode wrap --syslog --name cosmos -- /usr/local/bin/run-cosmos -v +*/15 * * * * root test -f /etc/no-automatic-cosmos || scriptherder --mode wrap --syslog --name cosmos -- /usr/local/bin/run-cosmos diff --git a/global/overlay/etc/logrotate.d/docker-containers b/global/overlay/etc/logrotate.d/docker-containers new file mode 100644 index 0000000..e9c90b8 --- /dev/null +++ b/global/overlay/etc/logrotate.d/docker-containers @@ -0,0 +1,7 @@ +/var/lib/docker/containers/*/*.log { + rotate 7 + daily + compress + delaycompress + copytruncate +} diff --git a/global/overlay/etc/puppet/cosmos-modules.conf b/global/overlay/etc/puppet/cosmos-modules.conf index d3d00d5..80c0216 100644 --- a/global/overlay/etc/puppet/cosmos-modules.conf +++ b/global/overlay/etc/puppet/cosmos-modules.conf @@ -1,4 +1,3 @@ -# # name source (puppetlabs fq name or git url) upgrade (yes/no) # concat git://github.com/SUNET/puppetlabs-concat.git yes sunet-* @@ -8,17 +7,11 @@ ufw git://github.com/SUNET/puppet-module-ufw.git yes sunet-* apt git://github.com/SUNET/puppetlabs-apt.git no sunet-* vcsrepo git://github.com/SUNET/puppetlabs-vcsrepo.git no sunet-* xinetd git://github.com/SUNET/puppetlabs-xinetd.git no sunet-* -#golang elithrar/golang yes python git://github.com/SUNET/puppet-python.git yes sunet-* hiera-gpg git://github.com/SUNET/hiera-gpg.git no sunet-* -#epel git://github.com/SUNET/puppet-module-epel.git yes sunet-* -#erlang git://github.com/SUNET/garethr-erlang.git yes sunet-* -#rabbitmq git://github.com/SUNET/puppetlabs-rabbitmq.git yes sunet-* pound git://github.com/SUNET/puppet-pound.git yes sunet-* augeas git://github.com/SUNET/puppet-augeas.git yes sunet-* bastion git://github.com/SUNET/puppet-bastion.git yes sunet-* -#wordpress hunner/wordpress no -#mysql puppetlabs/mysql no apache puppetlabs/apache no pyff git://github.com/samlbits/puppet-pyff.git yes puppet-pyff-* postgresql git://github.com/SUNET/puppetlabs-postgresql.git yes sunet-* diff --git a/global/overlay/etc/puppet/hiera.yaml b/global/overlay/etc/puppet/hiera.yaml index 782fa7f..3663305 100644 --- a/global/overlay/etc/puppet/hiera.yaml +++ b/global/overlay/etc/puppet/hiera.yaml @@ -8,6 +8,7 @@ :hierarchy: - "%{env}/%{location}/%{calling_module}" - "%{env}/%{calling_module}" + - local - secrets.yaml - common diff --git a/global/overlay/etc/puppet/puppet.conf b/global/overlay/etc/puppet/puppet.conf index 64452eb..ec11255 100644 --- a/global/overlay/etc/puppet/puppet.conf +++ b/global/overlay/etc/puppet/puppet.conf @@ -8,11 +8,7 @@ rundir=/var/run/puppet factpath=/etc/puppet/facter node_terminus = exec external_nodes = /etc/puppet/cosmos_enc.py -# We must add /etc/puppet/cosmos-modules to basemodulepath in order for Puppet to find -# the hiera-gpg backend. If the backend isn't found - *everything* breaks. Puppet 3.7.1. -basemodulepath = /etc/puppet/cosmos-modules:/etc/puppet/modules:/usr/share/puppet/modules -#modulepath = /etc/puppet/cosmos-modules:/etc/puppet/modules:/usr/share/puppet/modules -#config_version = /etc/puppet/cosmos_config_version +basemodulepath = /etc/puppet/modules:/etc/puppet/cosmos-modules:/usr/share/puppet/modules [master] # These are needed when the puppetmaster is run by passenger diff --git a/global/overlay/usr/local/bin/run-cosmos b/global/overlay/usr/local/bin/run-cosmos index df104b8..a37d49f 100755 --- a/global/overlay/usr/local/bin/run-cosmos +++ b/global/overlay/usr/local/bin/run-cosmos @@ -18,3 +18,5 @@ else fi touch /var/run/last-cosmos-ok.stamp + +find /var/lib/puppet/reports/ -type f -mtime +10 | xargs rm -f diff --git a/global/overlay/usr/local/sbin/cosmos_vm b/global/overlay/usr/local/sbin/cosmos_vm new file mode 100755 index 0000000..bf27576 --- /dev/null +++ b/global/overlay/usr/local/sbin/cosmos_vm @@ -0,0 +1,124 @@ +#!/bin/bash + +set -- $(getopt h?H:D?s:B:M:C:R:i:g:n:I:G:N: "$@") + +src_image="" +size="1G" +dhcp="no" +hostname="default" +bridge="br0" +cpus="1" +mem="1024" +repo="git://code.mnt.se/mnt-cosmos.git" +tag="eduid-cosmos" +ip="" +gateway="" +netmask="" +resolver="" +ip6="" +gateway6="" +netmask6="64" + +while [ $# -gt 0 ]; do + case "$1" in + (-h) echo "Usage: $0 [-h] [-H hostname] [-M <memory>] [-C <#cpus>] [-B <bridge>] [-D (dhcp)] [-i/-I <ip4/6>] [-n/-N <mask4/6>] [-g/-G <gw4/6>] [-R <resolver(s)>] [-s <src image>]"; exit 0;; + (-H) hostname="$2"; shift;; + (-s) src_image="$2"; shift;; + (-D) dhcp="yes" ;; + (-S) size="$2"; shift;; + (-B) bridge="$2"; shift;; + (-M) mem="$2"; shift;; + (-C) cpus="$2"; shift;; + (-R) resolver="$2"; shift;; + (-i) ip="$2"; shift;; + (-g) gateway="$2"; shift;; + (-n) netmask="$2"; shift;; + (-I) ip6="$2"; shift;; + (-G) gateway6="$2"; shift;; + (-N) netmask6="$2"; shift;; + (--) shift; break;; + (-*) echo "Unknown option $1\nUsage: $0 [-h] [-H hostname] [-M <memory>] [-C <#cpus>] [-B <bridge>] [-D (dhcp)] [-i/-I <ip4/6>] [-n/-N <mask4/6>] [-g/-G <gw4/6>] [-R <resolver(s)>] [-s <src image>]"; exit 1;; + (*) break;; + esac + shift +done + +id=$(uuidgen) + +seed=${id}_seed.img +disk=${id}.img + +rm -f ${seed} +truncate --size 2M ${seed} +mkfs.vfat -n cidata ${seed} 2>/dev/null + +user_data=$(mktemp) +cat > ${user_data} <<EOF +#cloud-config +password: ubuntu +chpasswd: { expire: False } +ssh_pwauth: True +ssh_authorized_keys: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVvB4gdJ6EWRmx8xUSxrhoUNnWxEf8ZwAqhzC1+7XBY/hSd/cbEotLB9gxgqt0CLW56VU4FPLTw8snD8tgsyZN6KH1Da7UXno8oMk8tJdwLQM0Ggx3aWuztItkDfBc3Lfvq5T07YfphqJO7rcSGbS4QQdflXuOM9JLi6NStVao0ia4aE6Tj68pVVb3++XYvqvbU6NtEICvkTxEY93YpnRSfeAi64hsbaqSTN4kpeltzoSD1Rikz2aQFtFXE03ZC48HtGGhdMFA/Ade6KWBDaXxHGARVQ9/UccfhaR2XSjVxSZ8FBNOzNsH4k9cQIb2ndkEOXZXnjF5ZjdI4ZU0F+t7 leifj+00060AD478D6@sunet.se +runcmd: + - ["mkdir","/tmp/seed"] + - ["mount","/dev/vdb","/tmp/seed"] + - ["cp","/tmp/seed/bootstrap-cosmos.sh","/tmp/seed/cosmos_1.2-2_all.deb","/root"] + - ["cd","/root"] + - "cd /root && /root/bootstrap-cosmos.sh ${hostname} ${repo} ${tag}" + +EOF + +meta_data=$(mktemp) +cat > ${meta_data} <<EOF +#cloud-config +instance-id: iid-${id} +local-hostname: ${hostname} +EOF + +if [ "x${dhcp}" = "xyes" ]; then +cat >> ${meta_data} <<EOF +network-interfaces: | + auto eth0 + iface eth0 inet dhcp +EOF +else + if [ "x${ip}" != "x" ]; then + cat >> ${meta_data} <<EOF +network-interfaces: | + auto eth0 + iface eth0 inet static + address ${ip} + netmask ${netmask} + gateway ${gateway} + dns-nameservers ${resolver} + +EOF + fi + + if [ "x${ip6}" != "x" ]; then + cat >> ${meta_data} <<EOF +network-interfaces: | + auto eth0 + iface eth0 inet6 static + address ${ip6} + netmask ${netmask6} + gateway ${gateway6} + dns-nameservers ${resolver} + +EOF + fi +fi + +mcopy -i ${seed} ${user_data} ::user-data 2>/dev/null +mcopy -i ${seed} ${meta_data} ::meta-data 2>/dev/null +mcopy -i ${seed} /etc/cosmos/apt/bootstrap-cosmos.sh /etc/cosmos/apt/cosmos_1.2-2_all.deb :: +mv ${seed} /var/lib/libvirt/images/ +virsh pool-refresh default + +virsh vol-clone --pool default ${src_image} ${disk} + +virt-install -r ${mem} -n ${hostname} --vcpus=${cpus} --autostart --memballoon virtio --network bridge=${bridge} --boot hd --disk vol=default/${disk},format=qcow2,bus=virtio --disk vol=default/${seed},bus=virtio + +rm -f ${user_data} +rm -f ${meta_data} diff --git a/global/post-tasks.d/018packages b/global/post-tasks.d/018packages index 5ca5c63..3e2e26e 100755 --- a/global/post-tasks.d/018packages +++ b/global/post-tasks.d/018packages @@ -31,6 +31,9 @@ if [ -f $CONFIG ]; then elif [ -d $CACHE_DIR/scm/$module/.git ]; then if [ "$update" = "yes" ]; then cd $CACHE_DIR/scm/$module + if [ "$src" != "$(git config remote.origin.url)" ]; then + git config remote.origin.url $src + fi git pull -q else continue |