~andrewjbeach/juju-ci-tools/make-local-patcher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/bin/bash
set -eu
SCRIPTS=$(readlink -f $(dirname $0))
: ${JOB_NAME="testy"}
export JOB_NAME
export PATH="$SCRIPTS:$PATH"
source $JUJU_HOME/ec2rc
ec2-terminate-job-instances
set -x
export INSTANCE_TYPE=m1.large
export AMI_IMAGE=ami-36aa4d5e
instance_id=$(ec2-run-instance-get-id)
ec2-tag-job-instances $instance_id
instance_name=$(ec2-get-name $instance_id)
wait-for-port $instance_name 22
set +e
ssh -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" \
    ubuntu@$instance_name  "JENKINS_URL=$JENKINS_URL bash"<<"EOT"
set -eux
for attempt in $(seq 10); do
  if grep ec2.archive.ubuntu.com /etc/apt/sources.list > /dev/null; then
    break
  elif [ "$attempt" == "10" ]; then
    exit 1
  fi
  sleep 10
done
sudo add-apt-repository cloud-archive:tools
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bzr

# prevent spurious failure on success
rm .bash_logout
afact=lastSuccessfulBuild/artifact
wget -q ${JENKINS_URL}job/build-revision/$afact/buildvars.bash
source buildvars.bash
RELEASE=$(lsb_release -sr)
ARCH=$(dpkg --print-architecture)
juju_local_deb="juju-local_$VERSION-0ubuntu1~$RELEASE.1~juju1_all.deb"
juju_core_deb="juju-core_$VERSION-0ubuntu1~$RELEASE.1~juju1_$ARCH.deb"
wget -q ${JENKINS_URL}job/publish-revision/$afact/$juju_local_deb
wget -q ${JENKINS_URL}job/publish-revision/$afact/$juju_core_deb
set +e
sudo dpkg -i $juju_core_deb $juju_local_deb
set -e
sudo apt-get install -y -f
export JUJU_REPOSITORY="$HOME/repo"
mkdir -p $JUJU_REPOSITORY/precise
bzr branch lp:charms/ubuntu $JUJU_REPOSITORY/precise/ubuntu
mkdir ~/.juju
cat > ~/.juju/environments.yaml <<EOT2
default: local
environments:
  local:
    type: local
    tools-metadata-url: http://juju-dist.s3.amazonaws.com/testing/tools
EOT2
ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
#juju sync-tools --show-log
login_ip=$(sudo cat /proc/net/ip_conntrack|\
  sed -nr 's/.*src=([^ ]*) .*dport=22 .*/\1/p')
gateway=$(route -n | sed -rn 's/^0.0.0.0 *([0-7.]*) .*/\1/p')
nameservers="$(sed /etc/resolv.conf -nr -e 's/nameserver (.*)/\1/p')"
for ns in $nameservers; do
  sudo route add $ns gw $gateway
done
sudo route add $login_ip gw $gateway
for ip in $(dig archive.ubuntu.com ubuntu-cloud.archive.canonical.com\
    security.ubuntu.com cloud-images.ubuntu.com +short |sort|uniq); do
  sudo route add $ip gw $gateway
done
sudo route add -net 172.16.0.0 netmask 255.240.0.0 gw $gateway
sudo route del default gw $gateway
juju bootstrap --show-log
for x in $(seq 6); do
  if juju deploy --show-log local:precise/ubuntu; then
    break
  elif [ "$x" == "6" ]; then
    exit 0;
  fi
done
for x in $(seq 30); do
  # relying on the indentation of ubuntu/0's agent-state here...
  if juju status | grep -E ' {8}agent-state: started'; then
    exit 0;
  fi
  sleep 10
done
juju status
exit 1
EOT
result=$?
set -e
ec2-terminate-job-instances
exit $result