diff --git a/ciscripts/README.md b/ciscripts/README.md new file mode 100644 index 0000000..5bb8769 --- /dev/null +++ b/ciscripts/README.md @@ -0,0 +1,24 @@ +## JenkinsCI + +シェルジョブに下記内容を定義して下さい。 +なお、`APP_IMAGE_ID`と`DB_IMAGE_ID`には、それぞれ新規作成したマシンイメージIDで置き換えて下さい。 + +``` +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +cd ciscripts +ls -l + +ipaddr="$(< /metadata/meta-data/local-ipv4)" + +APP_IMAGE_ID="wmi-********" \ + DB_IMAGE_ID="wmi-********" \ + YUM_HOST="${ipaddr}" \ + ./web3layers-ci.sh +``` diff --git a/ciscripts/integration-test.sh b/ciscripts/integration-test.sh index a1144a8..036bffb 100755 --- a/ciscripts/integration-test.sh +++ b/ciscripts/integration-test.sh @@ -9,4 +9,9 @@ cd spec_integration bundle install cp config/webapi.conf.example config/webapi.conf + +if [[ -n "${APP_HOST:-""}" ]]; then + sed -i s,localhost,${APP_HOST}, config/webapi.conf +fi + bundle exec rspec ./spec/webapi_integration_spec.rb diff --git a/ciscripts/wakame-vdc/.gitignore b/ciscripts/wakame-vdc/.gitignore new file mode 100644 index 0000000..74afec2 --- /dev/null +++ b/ciscripts/wakame-vdc/.gitignore @@ -0,0 +1 @@ +vifs.json diff --git a/ciscripts/wakame-vdc/README.md b/ciscripts/wakame-vdc/README.md new file mode 100644 index 0000000..31a28f5 --- /dev/null +++ b/ciscripts/wakame-vdc/README.md @@ -0,0 +1,13 @@ +## Script Chain + +1. run `setup-db.sh` + 1. run `run-db.sh` + 1. run `create-db.sh` + 2. run `provision-db.sh` +2. run `setup-app.sh` + 1. run `run-app.sh` + 1. run `create-app.sh` + 2. run `provision-app.sh` +3. run `setup-lbweb.sh` + 1. run `run-lbweb.sh` + 1. run `create-lbweb.sh` diff --git a/ciscripts/wakame-vdc/config/.gitkeep b/ciscripts/wakame-vdc/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ciscripts/wakame-vdc/create-app.sh b/ciscripts/wakame-vdc/create-app.sh new file mode 100755 index 0000000..35ea137 --- /dev/null +++ b/ciscripts/wakame-vdc/create-app.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +: "${IMAGE_ID:?"should not be empty"}" + +# vifs + +network_id="nw-demo1" +security_group_id="sg-cicddemo" +vifs="vifs.json" + +# instance-specific parameter + +cpu_cores="1" +hypervisor="kvm" +memory_size="1024" +image_id="${IMAGE_ID}" +display_name="app" +ssh_key_id="ssh-cicddemo" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create an instance + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh +vifs="${vifs}" network_id="${network_id}" security_group_id="${security_group_id}" \ + ${BASH_SOURCE[0]%/*}/gen-vifs.sh + +instance_id="$( + mussel instance create \ + --cpu-cores "${cpu_cores}" \ + --hypervisor "${hypervisor}" \ + --image-id "${image_id}" \ + --memory-size "${memory_size}" \ + --ssh-key-id "${ssh_key_id}" \ + --vifs "${vifs}" \ + --display-name "${display_name}" \ + | egrep ^:id: | awk '{print $2}' +)" +: "${instance_id:?"should not be empty"}" +echo "${instance_id} is initializing..." >&2 + +trap 'mussel instance destroy "${instance_id}"' ERR + +## wait for the instance to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/create-centos.sh b/ciscripts/wakame-vdc/create-centos.sh new file mode 100755 index 0000000..543fa61 --- /dev/null +++ b/ciscripts/wakame-vdc/create-centos.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +# setup vifs.json + +network_id="nw-demo1" +security_group_id="sg-cicddemo" +vifs="vifs.json" + +# instance-specific parameter + +cpu_cores="1" +hypervisor="kvm" +memory_size="1024" +image_id="wmi-centos1d64" +display_name="centos" +ssh_key_id="ssh-cicddemo" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create an instance + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh +vifs="${vifs}" network_id="${network_id}" security_group_id="${security_group_id}" \ + ${BASH_SOURCE[0]%/*}/gen-vifs.sh + +instance_id="$( + mussel instance create \ + --cpu-cores "${cpu_cores}" \ + --hypervisor "${hypervisor}" \ + --image-id "${image_id}" \ + --memory-size "${memory_size}" \ + --ssh-key-id "${ssh_key_id}" \ + --vifs "${vifs}" \ + --display-name "${display_name}" \ + | egrep ^:id: | awk '{print $2}' +)" +: "${instance_id:?"should not be empty"}" +echo "${instance_id} is initializing..." >&2 + +trap 'mussel instance destroy "${instance_id}"' ERR + +## wait for the instance to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/create-db.sh b/ciscripts/wakame-vdc/create-db.sh new file mode 100755 index 0000000..bedd2d2 --- /dev/null +++ b/ciscripts/wakame-vdc/create-db.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +: "${IMAGE_ID:?"should not be empty"}" + +# vifs + +network_id="nw-demo1" +security_group_id="sg-cicddemo" +vifs="vifs.json" + +# instance-specific parameter + +cpu_cores="1" +hypervisor="kvm" +memory_size="512" +image_id="${IMAGE_ID}" +display_name="db" +ssh_key_id="ssh-cicddemo" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create an instance + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh +vifs="${vifs}" network_id="${network_id}" security_group_id="${security_group_id}" \ + ${BASH_SOURCE[0]%/*}/gen-vifs.sh + +instance_id="$( + mussel instance create \ + --cpu-cores "${cpu_cores}" \ + --hypervisor "${hypervisor}" \ + --image-id "${image_id}" \ + --memory-size "${memory_size}" \ + --ssh-key-id "${ssh_key_id}" \ + --vifs "${vifs}" \ + --display-name "${display_name}" \ + | egrep ^:id: | awk '{print $2}' +)" +: "${instance_id:?"should not be empty"}" +echo "${instance_id} is initializing..." >&2 + +trap 'mussel instance destroy "${instance_id}"' ERR + +## wait for the instance to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/create-imgdb.sh b/ciscripts/wakame-vdc/create-imgdb.sh new file mode 100755 index 0000000..4e893f2 --- /dev/null +++ b/ciscripts/wakame-vdc/create-imgdb.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +# vifs + +network_id="nw-demo1" +security_group_id="sg-cicddemo" +vifs="vifs.json" + +# instance-specific parameter + +cpu_cores="1" +hypervisor="kvm" +memory_size="512" +image_id="wmi-centos1d64" +display_name="imgdb" +ssh_key_id="ssh-cicddemo" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create an instance + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh +vifs="${vifs}" network_id="${network_id}" security_group_id="${security_group_id}" \ + ${BASH_SOURCE[0]%/*}/gen-vifs.sh + +instance_id="$( + mussel instance create \ + --cpu-cores "${cpu_cores}" \ + --hypervisor "${hypervisor}" \ + --image-id "${image_id}" \ + --memory-size "${memory_size}" \ + --ssh-key-id "${ssh_key_id}" \ + --vifs "${vifs}" \ + --display-name "${display_name}" \ + | egrep ^:id: | awk '{print $2}' +)" +: "${instance_id:?"should not be empty"}" +echo "${instance_id} is initializing..." >&2 + +trap 'mussel instance destroy "${instance_id}"' ERR + +## wait for the instance to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/create-imgrbenv.sh b/ciscripts/wakame-vdc/create-imgrbenv.sh new file mode 100755 index 0000000..415fbd8 --- /dev/null +++ b/ciscripts/wakame-vdc/create-imgrbenv.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +# vifs + +network_id="nw-demo1" +security_group_id="sg-cicddemo" +vifs="vifs.json" + +# instance-specific parameter + +cpu_cores="1" +hypervisor="kvm" +memory_size="1024" +image_id="wmi-centos1d64" +display_name="imgrbenv" +ssh_key_id="ssh-cicddemo" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create an instance + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh +vifs="${vifs}" network_id="${network_id}" security_group_id="${security_group_id}" \ + ${BASH_SOURCE[0]%/*}/gen-vifs.sh + +instance_id="$( + mussel instance create \ + --cpu-cores "${cpu_cores}" \ + --hypervisor "${hypervisor}" \ + --image-id "${image_id}" \ + --memory-size "${memory_size}" \ + --ssh-key-id "${ssh_key_id}" \ + --vifs "${vifs}" \ + --display-name "${display_name}" \ + | egrep ^:id: | awk '{print $2}' +)" +: "${instance_id:?"should not be empty"}" +echo "${instance_id} is initializing..." >&2 + +trap 'mussel instance destroy "${instance_id}"' ERR + +## wait for the instance to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/create-lbapp.sh b/ciscripts/wakame-vdc/create-lbapp.sh new file mode 100755 index 0000000..792b419 --- /dev/null +++ b/ciscripts/wakame-vdc/create-lbapp.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# Usage: +# $0 +# +set -e +set -o pipefail +set -u + +## shell params + +balance_algorithm="leastconn" +engine="haproxy" +max_connection="1000" +instance_port="8080" +instance_protocol="http" +port_maps="8080:http" +display_name="lbapp" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create a load_balancer + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh + +load_balancer_id="$( + mussel load_balancer create \ + --balance-algorithm "${balance_algorithm}" \ + --engine "${engine}" \ + --instance-port "${instance_port}" \ + --instance-protocol "${instance_protocol}" \ + --max-connection "${max_connection}" \ + --display-name "${display_name}" \ + $( + IFS=, + for i in ${port_maps}; do + echo --port ${i%%:*} + echo --protocol ${i##*:} + done + ) \ + | egrep ^:id: | awk '{print $2}' +)" + +: "${load_balancer_id:?"load_balancer is empty"}" +echo "${load_balancer_id} is initializing..." >&2 + +trap "mussel load_balancer destroy \"${load_balancer_id}\"" ERR + +## wait for the load_balancer to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel load_balancer show "${load_balancer_id}" | egrep -w "^:state: running")"' ]] +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/create-lbweb.sh b/ciscripts/wakame-vdc/create-lbweb.sh new file mode 100755 index 0000000..780783a --- /dev/null +++ b/ciscripts/wakame-vdc/create-lbweb.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# Usage: +# $0 +# +set -e +set -o pipefail +set -u + +## shell params + +balance_algorithm="leastconn" +engine="haproxy" +max_connection="1000" +instance_port="80" +instance_protocol="http" +port_maps="80:http" +display_name="lbweb" + +# + +if [[ -f ${BASH_SOURCE[0]%/*}/config/${display_name} ]]; then + . ${BASH_SOURCE[0]%/*}/config/${display_name} +fi + +## create a load_balancer + +${BASH_SOURCE[0]%/*}/gen-musselrc.sh + +load_balancer_id="$( + mussel load_balancer create \ + --balance-algorithm "${balance_algorithm}" \ + --engine "${engine}" \ + --instance-port "${instance_port}" \ + --instance-protocol "${instance_protocol}" \ + --max-connection "${max_connection}" \ + --display-name "${display_name}" \ + $( + IFS=, + for i in ${port_maps}; do + echo --port ${i%%:*} + echo --protocol ${i##*:} + done + ) \ + | egrep ^:id: | awk '{print $2}' +)" + +: "${load_balancer_id:?"load_balancer is empty"}" +echo "${load_balancer_id} is initializing..." >&2 + +trap "mussel load_balancer destroy \"${load_balancer_id}\"" ERR + +## wait for the load_balancer to be running + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel load_balancer show "${load_balancer_id}" | egrep -w "^:state: running")"' ]] +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/demokeypair b/ciscripts/wakame-vdc/demokeypair new file mode 100644 index 0000000..b6a26a9 --- /dev/null +++ b/ciscripts/wakame-vdc/demokeypair @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA6KmXs11l/2WUIBDYmTB0T+BXwwCXT+RP/CTVtxq1Tnq8biwa +pDxHuYgvQWSOOH7DIZq/+GU+P69BBWAbnd1LNkWDOoMmnaIthXQBptZupYFfYiKA +Uh4UH0L0wwenifE2yV+SdWLT6FEiiQ2RTatqK1xiWSwvduWkeMA+dW1NbSk0XmEh +Z76QLsRxrs9JF4jqPXJVulzgjnD9Z5tkNY7MyfD1PNJcM2+MS8XmAApxLQLrfxEl +LZMsgvzvFVec45siOiG+VTWbGADc3lBSHIj2pt6aZDLkOhSnZegmsciVFQk1ulLF +jGjD2LoqYT5/UirpwQsElsjWTEEbBZzV10AVlwIDAQABAoIBAQCdnQ4cv1/ypXC0 +TFU/abjRx8wMWWEoCSY6TQXOtjQvByyRgiVGL2PzhxNkPGewVAeCw1/bOVLzN5lX +t+Tdi+WAzZR51hEZ5pzp9E2OJWPtkPf59h9yAdhl2SkQ2iWgaB1STAFermWZ0yUP +LXbK5B3XZA1oFWvOIwHJn4pwaGx0TpOtEjPHiEkJxj1SRAzN377Uu3SNz9UsRrfQ +3v7iLxrPvwqhXIBo1VzQIliWzH5/IQ6xAqAsMLTo0uJ+d1wkoZ6nGkjt+LYD5hyD +Ov76lOjlevkPu3BENwwt3Este2d00gOC2Qt649P/chd9B8vc4ZZ8F3bPVfmfdiJt +fYRPaF5ZAoGBAP5vEA/lWH5xN6dB7j+wFPLAP7+8H2jz4aBcDWCiDjoMA4JRvc8V +gJxaW33b8gbP39byZAfBLNWHPE+4q/95CW7TkXnzdCR9HxeKC77jnBXg6wX5zist +E/cDMPykATtMqUFf/K46lPjaUbn4gmLEkc9lS7V+ySoPMdMUG6zqQf2DAoGBAOoY +OPSHu2Y7R4V3BnzNeGz6PCrohz7IjqjSD74KhAhuFCM7w+ymDmk2xSIR4S4F7qlD +mBodXpncqxQMtkF2pRRGDefbTXW5m+lWOy/DrsYV0bqy5OqA2r7Ukj5M0o97S8D1 +vhTxwXCehx8GX8RlbybuMkfpB2NefMxakG+BAX9dAoGASPS/vk8dGOSN+L/G+Swc +VZ8aqHfg6c9Emx7KFzNgsPRQ7UVTD9YykqK2KViwBZQFszS9yhtyJ6gnexSQ/ShP +tB+mTzmny+60w6Mpywqo7v0XZxdCLs82MlYP7eF5GO/aeIx1f9/8Z37ygEjp2jhT +NwzssJYySIUi3Eufw+1IDtECgYEAr3NOJMAiTWH6neZyn1Fkg9EdDU/QJdctTQx7 +rgS1ppfSUgH2O0TOIj9hisJ50gOyN3yo4FHI2GrScimA5BmnakWDIJZ2PNjLKRxv +KcJxGJe75EE2XygKSuKJZVYwrkdLpKjKOWpkgCLgxPkDB/C6WSRH3SujVO+5e3QZ +MukulSUCgYBMtuQ6VMrlMTedLW6ryd8VYsVNZaAGuphejFCCuur13M/1wHrRUzqM +hECAngl6fus+weYMiQYx1V8oxz3tBdYO8KKG8pnQySTt5Dln19+vqH2+18RWDKtH +0rwxRJ4Rc3wKFVwK+gz6NsBvftnQAK52qWip71tPY7zt9LeWWJv08g== +-----END RSA PRIVATE KEY----- diff --git a/ciscripts/wakame-vdc/gen-musselrc.sh b/ciscripts/wakame-vdc/gen-musselrc.sh new file mode 100755 index 0000000..4432100 --- /dev/null +++ b/ciscripts/wakame-vdc/gen-musselrc.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +# setup musselrc + +cat < ~/.musselrc +DCMGR_HOST=10.0.2.2 +account_id=a-shpoolxx +EOS diff --git a/ciscripts/wakame-vdc/gen-vifs.sh b/ciscripts/wakame-vdc/gen-vifs.sh new file mode 100755 index 0000000..66672b4 --- /dev/null +++ b/ciscripts/wakame-vdc/gen-vifs.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# +set -e +set -o pipefail +set -u + +: "${vifs:?"should not be empty"}" +: "${network_id:?"should not be empty"}" +: "${security_group_id:?"should not be empty"}" + +cat < "${vifs}" +{ + "eth0":{"network":"${network_id}","security_groups":"${security_group_id}"} +} +EOS diff --git a/ciscripts/wakame-vdc/image-destroy.sh b/ciscripts/wakame-vdc/image-destroy.sh new file mode 100755 index 0000000..16ecfaf --- /dev/null +++ b/ciscripts/wakame-vdc/image-destroy.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# +# Usage: +# $0 image_id +# +set -e +set -o pipefail +set -u + +## shell params + +image_id="${1}" +: "${image_id:?"should not be empty"}" + +## main + +mussel image destroy "${image_id}" >/dev/null +echo image_id="${image_id}" diff --git a/ciscripts/wakame-vdc/instance-backup.sh b/ciscripts/wakame-vdc/instance-backup.sh new file mode 100755 index 0000000..ead5ec8 --- /dev/null +++ b/ciscripts/wakame-vdc/instance-backup.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## backup an instance + +image_id="$( + mussel instance backup "${instance_id}" \ + | egrep ^:image_id: | awk '{print $2}' +)" +: "${image_id:?"should not be empty"}" +echo "${image_id} is creating..." >&2 + +## wait for the image to be available + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel image show "${image_id}" | egrep -w "^:state: available")"' ]] +echo image_id="${image_id}" diff --git a/ciscripts/wakame-vdc/instance-commit.sh b/ciscripts/wakame-vdc/instance-commit.sh new file mode 100755 index 0000000..180b60e --- /dev/null +++ b/ciscripts/wakame-vdc/instance-commit.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## backup an instance + +eval "$( + ${BASH_SOURCE[0]%/*}/instance-stop.sh "${instance_id}" >&2 + ${BASH_SOURCE[0]%/*}/instance-backup.sh "${instance_id}" + ${BASH_SOURCE[0]%/*}/instance-start.sh "${instance_id}" >&2 +)" + +echo image_id="${image_id}" diff --git a/ciscripts/wakame-vdc/instance-exec.sh b/ciscripts/wakame-vdc/instance-exec.sh new file mode 100755 index 0000000..266317b --- /dev/null +++ b/ciscripts/wakame-vdc/instance-exec.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## include + +function ssh() { + $(type -P ssh) -o 'StrictHostKeyChecking no' -o 'UserKnownHostsFile /dev/null' ${@} +} + +## shell params + +ssh_user="root" +ssh_key="demokeypair" + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## get the instance's ipaddress + +ipaddr="$( + mussel instance show "${instance_id}" \ + | egrep -w :address: | awk '{print $2}' +)" +: "${ipaddr:?"should not be empty"}" + +## ssh to the instance + +chmod 600 "${ssh_key}" + +shift +ssh "${ssh_user}@${ipaddr}" -i "${ssh_key}" "${@}" diff --git a/ciscripts/wakame-vdc/instance-get-ipaddr.sh b/ciscripts/wakame-vdc/instance-get-ipaddr.sh new file mode 100755 index 0000000..ed647ba --- /dev/null +++ b/ciscripts/wakame-vdc/instance-get-ipaddr.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## include + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## get the instance's ipaddress + +ipaddr="$( + mussel instance show "${instance_id}" \ + | egrep :address: \ + | awk '{print $2}' \ + | tr '\n' ',' +)" +: "${ipaddr:?"should not be empty"}" + +## show the instance + +echo ipaddr="${ipaddr%%,}" diff --git a/ciscripts/wakame-vdc/instance-get-vif.sh b/ciscripts/wakame-vdc/instance-get-vif.sh new file mode 100755 index 0000000..7bddf1d --- /dev/null +++ b/ciscripts/wakame-vdc/instance-get-vif.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +#set -u + +## include + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## get the instance's vifs + +vif="$( + mussel instance show "${instance_id}" | egrep :vif_id: \ + | awk '{print $3}' \ + | tr '\n' ',' +)" +: "${vif:?"should not be empty"}" + +## show the instance + +echo vif="${vif%%,}" diff --git a/ciscripts/wakame-vdc/instance-kill.sh b/ciscripts/wakame-vdc/instance-kill.sh new file mode 100755 index 0000000..72a4257 --- /dev/null +++ b/ciscripts/wakame-vdc/instance-kill.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## main + +mussel instance destroy "${instance_id}" >/dev/null +echo "${instance_id} is shuttingdown..." >&2 + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: terminated")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/instance-start.sh b/ciscripts/wakame-vdc/instance-start.sh new file mode 100755 index 0000000..6497287 --- /dev/null +++ b/ciscripts/wakame-vdc/instance-start.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## create an instance + +mussel instance poweron "${instance_id}" >/dev/null +echo "${instance_id} is starting..." >&2 + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/instance-stop.sh b/ciscripts/wakame-vdc/instance-stop.sh new file mode 100755 index 0000000..2a2690a --- /dev/null +++ b/ciscripts/wakame-vdc/instance-stop.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## create an instance + +mussel instance poweroff "${instance_id}" --force false >/dev/null +echo "${instance_id} is halting..." >&2 + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: halted")"' ]] +echo instance_id="${instance_id}" diff --git a/ciscripts/wakame-vdc/instance-wait4ssh.sh b/ciscripts/wakame-vdc/instance-wait4ssh.sh new file mode 100755 index 0000000..c6712e3 --- /dev/null +++ b/ciscripts/wakame-vdc/instance-wait4ssh.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# +# Usage: +# $0 instance_id +# +set -e +set -o pipefail +set -u + +## shell params + +instance_id="${1}" +: "${instance_id:?"should not be empty"}" + +## wait... + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel instance show "${instance_id}" | egrep -w "^:state: running")"' ]] + +## get the instance's ipaddress + +ipaddr="$( + mussel instance show "${instance_id}" \ + | egrep :address: \ + | awk '{print $2}' \ + | tr '\n' ',' +)" +: "${ipaddr:?"should not be empty"}" +ipaddr="${ipaddr%%,}" + +## wait... + +{ + wait_for_network_to_be_ready "${ipaddr}" + wait_for_sshd_to_be_ready "${ipaddr}" +} >&2 +echo ipaddr="${ipaddr}" diff --git a/ciscripts/wakame-vdc/load_balancer-get-ipaddr.sh b/ciscripts/wakame-vdc/load_balancer-get-ipaddr.sh new file mode 100755 index 0000000..77535a3 --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-get-ipaddr.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +set -u + +## include + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" + +## get the load_balancer's ipaddress + +ipaddr="$( + mussel load_balancer show "${load_balancer_id}" | egrep :address: \ + | awk '{print $2}' \ + | tr '\n' ',' +)" +: "${ipaddr:?"should not be empty"}" + +## show the load_balancer + +ipaddr="${ipaddr%%,}" + +echo ipaddr="${ipaddr}" +echo ipaddr_public="${ipaddr%,*}" +echo ipaddr_managed="${ipaddr#*,}" diff --git a/ciscripts/wakame-vdc/load_balancer-kill.sh b/ciscripts/wakame-vdc/load_balancer-kill.sh new file mode 100755 index 0000000..d24219a --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-kill.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +set -u + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" + +## main + +while read network_vif_id; do + ${BASH_SOURCE[0]%/*}/load_balancer-unregister-vif.sh "${load_balancer_id}" "${network_vif_id}" >/dev/null +done < <(mussel load_balancer show "${load_balancer_id}" | egrep network_vif_id | awk '{print $3}') + +mussel load_balancer destroy "${load_balancer_id}" >/dev/null +echo "${load_balancer_id} is shuttingdown..." >&2 + +## + +. ${BASH_SOURCE[0]%/*}/retry.sh + +retry_until [[ '"$(mussel load_balancer show "${load_balancer_id}" | egrep -w "^:state: terminated")"' ]] +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/load_balancer-register-instance.sh b/ciscripts/wakame-vdc/load_balancer-register-instance.sh new file mode 100755 index 0000000..d5a1167 --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-register-instance.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +#set -u + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" +shift +instance_ids="${@:-""}" +: "${instance_ids:?"should not be empty"}" + +## register instances to the load_balancer + +instance_id= +while [[ "${1:-""}" ]]; do + instance_id="${1}" + echo "registering ${instance_id} to ${load_balancer_id}..." >&2 + eval "$(${BASH_SOURCE[0]%/*}/instance-get-vif.sh "${instance_id}")" + ${BASH_SOURCE[0]%/*}/load_balancer-register-vif.sh "${load_balancer_id}" ${vif} >/dev/null + shift +done + +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/load_balancer-register-vif.sh b/ciscripts/wakame-vdc/load_balancer-register-vif.sh new file mode 100755 index 0000000..5263530 --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-register-vif.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +#set -u + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" +shift +vifs="${@:-""}" +: "${vifs:?"should not be empty"}" + +## register vifs to the load_balancer + +network_vif_id= +while [[ "${1:-""}" ]]; do + network_vif_id="${1}" + echo "registering ${network_vif_id} to ${load_balancer_id}..." >&2 + mussel load_balancer register "${load_balancer_id}" \ + --vifs "${network_vif_id}" >/dev/null + shift +done + +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/load_balancer-unregister-instance.sh b/ciscripts/wakame-vdc/load_balancer-unregister-instance.sh new file mode 100755 index 0000000..656831c --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-unregister-instance.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +#set -u + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" +shift +instance_ids="${@:-""}" +: "${instance_ids:?"should not be empty"}" + +## unregister instances from the load_balancer + +instance_id= +while [[ "${1:-""}" ]]; do + instance_id="${1}" + echo "unregister ${instance_id} from ${load_balancer_id}..." >&2 + eval "$(${BASH_SOURCE[0]%/*}/instance-get-vif.sh "${instance_id}")" + ${BASH_SOURCE[0]%/*}/load_balancer-unregister-vif.sh "${load_balancer_id}" ${vif} >/dev/null + shift +done + +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/load_balancer-unregister-vif.sh b/ciscripts/wakame-vdc/load_balancer-unregister-vif.sh new file mode 100755 index 0000000..430ed9f --- /dev/null +++ b/ciscripts/wakame-vdc/load_balancer-unregister-vif.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Usage: +# $0 load_balancer_id +# +set -e +set -o pipefail +#set -u + +## shell params + +load_balancer_id="${1}" +: "${load_balancer_id:?"should not be empty"}" +shift +vifs="${@:-""}" +: "${vifs:?"should not be empty"}" + +## unregister vifs to the load_balancer + +network_vif_id= +while [[ "${1:-""}" ]]; do + network_vif_id="${1}" + echo "ununregistering ${network_vif_id} from ${load_balancer_id}..." >&2 + mussel load_balancer unregister "${load_balancer_id}" \ + --vifs "${network_vif_id}" >/dev/null + shift +done + +echo load_balancer_id="${load_balancer_id}" diff --git a/ciscripts/wakame-vdc/provision-app.sh b/ciscripts/wakame-vdc/provision-app.sh new file mode 100755 index 0000000..a54da3a --- /dev/null +++ b/ciscripts/wakame-vdc/provision-app.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# +# requires: +# bash +# +set -e +set -o pipefail +set -u +set -x + +# required shell params + +: "${YUM_HOST:?"should not be empty"}" +: "${DB_HOST:?"should not be empty"}" + +# install tiny-web-example.repo +cat <<-EOS > /etc/yum.repos.d/tiny-web-example.repo + [tin-web-example] + name=tiny-web-example + baseurl=http://${YUM_HOST}/pub/ + enabled=1 + gpgcheck=0 + EOS + +# show available repo list +yum repolist + +# install tiny-web-example.rpm +yum install -y tiny-web-example + +## /etc/default/tiny-web-example-webapi +cat <<-'EOS' > /etc/default/tiny-web-example-webapi + # tiny-web-example + EXAMPLE_ROOT=/opt/axsh/tiny-web-example + PATH=/root/.rbenv/shims:$PATH + + # Commnet out to run the vdc init script. + #RUN=yes + + ## rack params + RACK_ENV=development + BIND_ADDR=0.0.0.0 + PORT=8080 + UNICORN_CONF=/etc/tiny-web-example/unicorn-common.conf + EOS + +## /etc/default/tiny-web-example-webapp +cat <<-'EOS' > /etc/default/tiny-web-example-webapp + # tiny-web-example + EXAMPLE_ROOT=/opt/axsh/tiny-web-example + PATH=/root/.rbenv/shims:$PATH + + # Commnet out to run the vdc init script. + #RUN=yes + + ## rack params + RACK_ENV=development + BIND_ADDR=0.0.0.0 + PORT=80 + UNICORN_CONF=/etc/tiny-web-example/unicorn-common.conf + EOS + +# configure db host +for config in /etc/tiny-web-example/webapi.conf /etc/tiny-web-example/webapp.yml; do + sed -i "s,localhost,${DB_HOST}," "${config}" + egrep "${DB_HOST}" "${config}" +done + +# setup db +cd /opt/axsh/tiny-web-example/webapi/ +bundle exec rake db:up + +# start system jobs +initctl start tiny-web-example-webapi RUN=yes +initctl start tiny-web-example-webapp RUN=yes diff --git a/ciscripts/wakame-vdc/provision-db.sh b/ciscripts/wakame-vdc/provision-db.sh new file mode 100755 index 0000000..82a1359 --- /dev/null +++ b/ciscripts/wakame-vdc/provision-db.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# +# requires: +# bash +# +set -e +set -o pipefail +set -u +set -x + +# wait for mysqld to be ready +until mysqladmin -uroot ping; do + sleep 1 +done diff --git a/ciscripts/wakame-vdc/provision-imgdb.sh b/ciscripts/wakame-vdc/provision-imgdb.sh new file mode 100755 index 0000000..4e4c966 --- /dev/null +++ b/ciscripts/wakame-vdc/provision-imgdb.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# +# requires: +# bash +# mysqladmin, mysql +# +set -e +set -o pipefail +set -u +set -x + +# install mysqld +yum install -y --disablerepo=updates mysql-server + +# configure service +svc="mysqld" +chkconfig --list "${svc}" +chkconfig "${svc}" on +chkconfig --list "${svc}" + +# start mysqld service +if ! service "${svc}" status; then + service "${svc}" start +fi + +# wait for mysqld to be ready +until mysqladmin -uroot ping; do + sleep 1 +done + +# db params +dbname="tiny_web_example" +dbuser="root" +dbacl="10.0.22.%" + +# grant db +mysql -u${dbuser} mysql <> ~/.bash_profile +echo 'eval "$(rbenv init -)"' >> ~/.bash_profile +exec $SHELL -l + +# install build require for ruby-build +yum install -y gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel + +# install ruby-build +git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build + +# install ruby +ruby_version="2.0.0-p598" + +rbenv install -v "${ruby_version}" +rbenv rehash +rbenv versions +rbenv global "${ruby_version}" +ruby -v + +# install bundler +gem install bundler --no-ri --no-rdoc diff --git a/ciscripts/wakame-vdc/retry.sh b/ciscripts/wakame-vdc/retry.sh new file mode 100644 index 0000000..e2de868 --- /dev/null +++ b/ciscripts/wakame-vdc/retry.sh @@ -0,0 +1,101 @@ +# -*-Shell-script-*- +# +# requires: +# bash +# + +## retry + +function retry_until() { + local blk="$@" + + local wait_sec=${RETRY_WAIT_SEC:-120} + local sleep_sec=${RETRY_SLEEP_SEC:-3} + local tries=0 + local start_at=$(date +%s) + local chk_cmd= + + while :; do + eval "${blk}" && { + break + } || { + sleep ${sleep_sec} + } + + tries=$((${tries} + 1)) + if [[ "$(($(date +%s) - ${start_at}))" -gt "${wait_sec}" ]]; then + echo "Retry Failure: Exceed ${wait_sec} sec: Retried ${tries} times" >&2 + return 1 + fi + echo [$(date +%FT%X) "#$$"] time:${tries} "eval:${chk_cmd}" >&2 + done +} + +function retry_while() { + local blk="$@" + retry_until ! ${blk} +} + +## check + +function open_port?() { + local ipaddr=$1 protocol=$2 port=$3 + + local nc_opts="-w 3" + case ${protocol} in + tcp) ;; + udp) nc_opts="${nc_opts} -u";; + *) ;; + esac + + nc ${nc_opts} ${ipaddr} ${port} <<< "" >/dev/null +} + +function network_connection?() { + local ipaddr=$1 + ping -c 1 -W 3 ${ipaddr} +} + +## wait for *to be* + +function wait_for_network_to_be_ready() { + local ipaddr=$1 + retry_until "network_connection? ${ipaddr}" +} + +function wait_for_port_to_be_ready() { + local ipaddr=$1 protocol=$2 port=$3 + retry_until "open_port? ${ipaddr} ${protocol} ${port}" +} + +function wait_for_sshd_to_be_ready() { + local ipaddr=$1 + wait_for_port_to_be_ready ${ipaddr} tcp 22 +} + +function wait_for_httpd_to_be_ready() { + local ipaddr=$1 + wait_for_port_to_be_ready ${ipaddr} tcp 80 +} + +## wait for *not to be* + +function wait_for_network_not_to_be_ready() { + local ipaddr=$1 + retry_until "! network_connection? ${ipaddr}" +} + +function wait_for_port_not_to_be_ready() { + local ipaddr=$1 protocol=$2 port=$3 + retry_until "! open_port? ${ipaddr} ${protocol} ${port}" +} + +function wait_for_sshd_not_to_be_ready() { + local ipaddr=$1 + wait_for_port_not_to_be_ready ${ipaddr} tcp 22 +} + +function wait_for_httpd_not_to_be_ready() { + local ipaddr=$1 + wait_for_port_not_to_be_ready ${ipaddr} tcp 80 +} diff --git a/ciscripts/wakame-vdc/run-app.sh b/ciscripts/wakame-vdc/run-app.sh new file mode 100755 index 0000000..b6ff870 --- /dev/null +++ b/ciscripts/wakame-vdc/run-app.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +# required shell params + +: "${YUM_HOST:?"should not be empty"}" +: "${DB_HOST:?"should not be empty"}" + +# + +eval "$( + ${BASH_SOURCE[0]%/*}/create-app.sh + )" +trap 'mussel instance destroy "${instance_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/instance-get-ipaddr.sh "${instance_id}")" + +{ + ${BASH_SOURCE[0]%/*}/instance-wait4ssh.sh "${instance_id}" + ${BASH_SOURCE[0]%/*}/instance-exec.sh "${instance_id}" \ + YUM_HOST="${YUM_HOST}" \ + DB_HOST="${DB_HOST}" \ + bash -l < ${BASH_SOURCE[0]%/*}/provision-app.sh +} >&2 + +{ + . ${BASH_SOURCE[0]%/*}/retry.sh + + wait_for_port_to_be_ready "${ipaddr}" tcp 8080 + wait_for_port_to_be_ready "${ipaddr}" tcp 80 +} >&2 + +echo instance_id="${instance_id}" +echo ipaddr="${ipaddr}" diff --git a/ciscripts/wakame-vdc/run-db.sh b/ciscripts/wakame-vdc/run-db.sh new file mode 100755 index 0000000..a20eb3b --- /dev/null +++ b/ciscripts/wakame-vdc/run-db.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +eval "$( + ${BASH_SOURCE[0]%/*}/create-db.sh + )" +trap 'mussel instance destroy "${instance_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/instance-get-ipaddr.sh "${instance_id}")" + +{ + ${BASH_SOURCE[0]%/*}/instance-wait4ssh.sh "${instance_id}" + ${BASH_SOURCE[0]%/*}/instance-exec.sh "${instance_id}" < ${BASH_SOURCE[0]%/*}/provision-db.sh +} >&2 + +echo instance_id="${instance_id}" +echo ipaddr="${ipaddr}" diff --git a/ciscripts/wakame-vdc/run-imgdb.sh b/ciscripts/wakame-vdc/run-imgdb.sh new file mode 100755 index 0000000..78a33a3 --- /dev/null +++ b/ciscripts/wakame-vdc/run-imgdb.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +eval "$( + ${BASH_SOURCE[0]%/*}/create-imgdb.sh +)" + +trap 'mussel instance destroy "${instance_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/instance-get-ipaddr.sh "${instance_id}")" + +{ + ${BASH_SOURCE[0]%/*}/instance-wait4ssh.sh "${instance_id}" + ${BASH_SOURCE[0]%/*}/instance-exec.sh "${instance_id}" < ${BASH_SOURCE[0]%/*}/provision-imgdb.sh +} >&2 + +echo instance_id="${instance_id}" +echo ipaddr="${ipaddr}" diff --git a/ciscripts/wakame-vdc/run-imgrbenv.sh b/ciscripts/wakame-vdc/run-imgrbenv.sh new file mode 100755 index 0000000..875582d --- /dev/null +++ b/ciscripts/wakame-vdc/run-imgrbenv.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +eval "$( + ${BASH_SOURCE[0]%/*}/create-imgrbenv.sh + )" +trap 'mussel instance destroy "${instance_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/instance-get-ipaddr.sh "${instance_id}")" + +{ + ${BASH_SOURCE[0]%/*}/instance-wait4ssh.sh "${instance_id}" + ${BASH_SOURCE[0]%/*}/instance-exec.sh "${instance_id}" < ${BASH_SOURCE[0]%/*}/provision-imgrbenv.sh +} >&2 + +echo instance_id="${instance_id}" +echo ipaddr="${ipaddr}" diff --git a/ciscripts/wakame-vdc/run-lbapp.sh b/ciscripts/wakame-vdc/run-lbapp.sh new file mode 100755 index 0000000..fe3a581 --- /dev/null +++ b/ciscripts/wakame-vdc/run-lbapp.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +# + +eval "$( + ${BASH_SOURCE[0]%/*}/create-lbapp.sh + )" +trap 'mussel load_balancer destroy "${load_balancer_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/load_balancer-get-ipaddr.sh "${load_balancer_id}")" + +{ + . ${BASH_SOURCE[0]%/*}/retry.sh + + wait_for_port_to_be_ready "${ipaddr_public}" tcp 8080 +} >&2 + +echo load_balancer_id="${load_balancer_id}" +echo ipaddr="${ipaddr}" +echo ipaddr_public="${ipaddr_public}" +echo ipaddr_managed="${ipaddr_managed}" diff --git a/ciscripts/wakame-vdc/run-lbweb.sh b/ciscripts/wakame-vdc/run-lbweb.sh new file mode 100755 index 0000000..9c72818 --- /dev/null +++ b/ciscripts/wakame-vdc/run-lbweb.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u +set -x + +# + +eval "$( + ${BASH_SOURCE[0]%/*}/create-lbweb.sh + )" +trap 'mussel load_balancer destroy "${load_balancer_id}"' ERR + +eval "$(${BASH_SOURCE[0]%/*}/load_balancer-get-ipaddr.sh "${load_balancer_id}")" + +{ + . ${BASH_SOURCE[0]%/*}/retry.sh + + wait_for_port_to_be_ready "${ipaddr_public}" tcp 80 +} >&2 + +echo load_balancer_id="${load_balancer_id}" +echo ipaddr="${ipaddr}" +echo ipaddr_public="${ipaddr_public}" +echo ipaddr_managed="${ipaddr_managed}" diff --git a/ciscripts/wakame-vdc/setup-app.sh b/ciscripts/wakame-vdc/setup-app.sh new file mode 100755 index 0000000..d763d56 --- /dev/null +++ b/ciscripts/wakame-vdc/setup-app.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u + +: "${IMAGE_ID:?"should not be empty"}" +: "${YUM_HOST:?"should not be empty"}" +: "${DB_HOST:?"should not be empty"}" + +eval "$( + IMAGE_ID="${IMAGE_ID}" \ + YUM_HOST="${YUM_HOST}" \ + DB_HOST="${DB_HOST}" \ + ${BASH_SOURCE[0]%/*}/run-app.sh +)" + +echo APP_ID="${instance_id}" +echo APP_HOST="${ipaddr}" diff --git a/ciscripts/wakame-vdc/setup-db.sh b/ciscripts/wakame-vdc/setup-db.sh new file mode 100755 index 0000000..de711e4 --- /dev/null +++ b/ciscripts/wakame-vdc/setup-db.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u + +: "${IMAGE_ID:?"should not be empty"}" + +eval "$( + IMAGE_ID="${IMAGE_ID}" \ + ${BASH_SOURCE[0]%/*}/run-db.sh +)" + +echo DB_ID="${instance_id}" +echo DB_HOST="${ipaddr}" diff --git a/ciscripts/wakame-vdc/setup-lbweb.sh b/ciscripts/wakame-vdc/setup-lbweb.sh new file mode 100755 index 0000000..650a456 --- /dev/null +++ b/ciscripts/wakame-vdc/setup-lbweb.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u + +: "${APP_ID:?"should not be empty"}" + +eval "$( + ${BASH_SOURCE[0]%/*}/run-lbweb.sh +)" + +${BASH_SOURCE[0]%/*}/load_balancer-register-instance.sh "${load_balancer_id}" "${APP_ID}" >&2 + +echo LDWEB_ID="${load_balancer_id}" +echo LBWEB_HOST="${ipaddr_public}" diff --git a/ciscripts/wakame-vdc/smoketest-app.sh b/ciscripts/wakame-vdc/smoketest-app.sh new file mode 100755 index 0000000..b0a7ffd --- /dev/null +++ b/ciscripts/wakame-vdc/smoketest-app.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# +# requires: +# bash +# +set -e +set -o pipefail +set -u +set -x + +# required shell params + +: "${APP_HOST:?"should not be empty"}" + +# + +api_url="http://${APP_HOST}:8080/api/0.0.1/comments" + +curl -fs -X POST --data-urlencode display_name='webapi test' --data-urlencode comment='sample message.' ${api_url} +curl -fs -X GET ${api_url} +curl -fs -X GET ${api_url}/1 diff --git a/ciscripts/wakame-vdc/smoketest-web.sh b/ciscripts/wakame-vdc/smoketest-web.sh new file mode 100755 index 0000000..6919fc9 --- /dev/null +++ b/ciscripts/wakame-vdc/smoketest-web.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# requires: +# bash +# +set -e +set -o pipefail +set -u +set -x + +# required shell params + +: "${WEB_HOST:?"should not be empty"}" + +# + +curl -fs -X GET http://${WEB_HOST}/ diff --git a/ciscripts/web3layers-ci.sh b/ciscripts/web3layers-ci.sh new file mode 100755 index 0000000..839ccbb --- /dev/null +++ b/ciscripts/web3layers-ci.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u + +# required shell params + +: "${YUM_HOST:?"should not be empty"}" +: "${DB_IMAGE_ID:?"should not be empty"}" +: "${APP_IMAGE_ID:?"should not be empty"}" + +# + +cd ${BASH_SOURCE[0]%/*}/wakame-vdc + +# setup instances + +eval "$( + IMAGE_ID="${DB_IMAGE_ID}" \ + ${BASH_SOURCE[0]%/*}/setup-db.sh +)" + +eval "$( + IMAGE_ID="${APP_IMAGE_ID}" \ + YUM_HOST="${YUM_HOST}" DB_HOST="${DB_HOST}" \ + ${BASH_SOURCE[0]%/*}/setup-app.sh +)" + +eval "$( + APP_ID="${APP_ID}" \ + ${BASH_SOURCE[0]%/*}/setup-lbweb.sh +)" + +# cleanup + +trap ' + mussel instance destroy "${DB_ID}" + mussel instance destroy "${APP_ID}" + ${BASH_SOURCE[0]%/*}/load_balancer-kill.sh "${LDWEB_ID}" +' ERR EXIT + +# smoketest + +## app + +if [[ -n "${JENKINS_HOME:-""}" ]]; then + # called by jenkins + ( + cd ${BASH_SOURCE[0]%/*}/../../ + APP_HOST="${APP_HOST}" ./ciscripts/integration-test.sh + ) +else + APP_HOST="${APP_HOST}" ${BASH_SOURCE[0]%/*}/smoketest-app.sh +fi + +## web + +WEB_HOST="${APP_HOST}" ${BASH_SOURCE[0]%/*}/smoketest-web.sh +WEB_HOST="${LBWEB_HOST}" ${BASH_SOURCE[0]%/*}/smoketest-web.sh diff --git a/ciscripts/web3layers-lite.sh b/ciscripts/web3layers-lite.sh new file mode 100755 index 0000000..91c0aa9 --- /dev/null +++ b/ciscripts/web3layers-lite.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# +# +set -e +set -o pipefail +set -u + +# required shell params + +: "${YUM_HOST:?"should not be empty"}" +: "${DB_IMAGE_ID:?"should not be empty"}" +: "${APP_IMAGE_ID:?"should not be empty"}" + +# + +cd ${BASH_SOURCE[0]%/*}/wakame-vdc + +# setup instances + +eval "$( + IMAGE_ID="${DB_IMAGE_ID}" \ + ${BASH_SOURCE[0]%/*}/setup-db.sh +)" + +eval "$( + IMAGE_ID="${APP_IMAGE_ID}" \ + YUM_HOST="${YUM_HOST}" DB_HOST="${DB_HOST}" \ + ${BASH_SOURCE[0]%/*}/setup-app.sh +)" + +# cleanup + +trap ' + mussel instance destroy "${DB_ID}" + mussel instance destroy "${APP_ID}" +' ERR EXIT + +# smoketest + +## app + +if [[ -n "${JENKINS_HOME:-""}" ]]; then + # called by jenkins + ( + cd ${BASH_SOURCE[0]%/*}/../../ + APP_HOST="${APP_HOST}" ./ciscripts/integration-test.sh + ) +else + APP_HOST="${APP_HOST}" ${BASH_SOURCE[0]%/*}/smoketest-app.sh +fi + +## web + +WEB_HOST="${APP_HOST}" ${BASH_SOURCE[0]%/*}/smoketest-web.sh