~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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
set -eu
JUJU_HOME="$HOME/.juju"
AMI_IMAGE=""
SERIES=""
while [[ "${1-}" != "" && $1 =~ ^-.*  ]]; do
    case $1 in
        --juju-home)
            shift
            JUJU_HOME=$(cd $1; pwd)
            ;;
        --ami-image)
            shift
            AMI_IMAGE=$1
            ;;
        --series)
            shift
            SERIES=$1
            ;;
    esac
    shift
done

if [[ -z $AMI_IMAGE || -z $SERIES ]]; then
    echo "--ami-image and --series are required"
    exit 2
fi

export JUJU_HOME
export AMI_IMAGE
export SERIES

SCRIPTS=$(readlink -f $(dirname $0))
: ${JENKINS_URL="http://juju-ci.vapour.ws:8080/"}
: ${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
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 SERIES=$SERIES 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
if [[ $SERIES == "precise" ]]; then
    sudo add-apt-repository cloud-archive:tools
    CONNTRACK=""
else
    CONNTRACK="conntrack"
fi
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bzr $CONNTRACK

# 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/$SERIES
bzr branch lp:charms/ubuntu $JUJU_REPOSITORY/$SERIES/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 || sudo conntrack -L | \
  sed -nr 's/.*src=([^ ]*) .*dport=22 .*/\1/p' | uniq)
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:$SERIES/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