summaryrefslogtreecommitdiff
path: root/salt/openbook/ci/files
diff options
context:
space:
mode:
authorCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-08-30 13:09:56 -0600
committerCarlos Konstanski <ckonstanski@pippiandcarlos.com>2017-08-30 13:09:56 -0600
commit649f0dd9c5ca586d8b637400dd19c0c4059447d6 (patch)
tree5ccc992a3aa5de1bcb510911dfdb21e6a54bd197 /salt/openbook/ci/files
initial commit
Diffstat (limited to 'salt/openbook/ci/files')
-rw-r--r--salt/openbook/ci/files/build.sh26
-rw-r--r--salt/openbook/ci/files/cloudcfg.sh25
-rw-r--r--salt/openbook/ci/files/openbook.gentoo25
-rw-r--r--salt/openbook/ci/files/openbook.redhat29
-rw-r--r--salt/openbook/ci/files/openbook.ubuntu25
-rw-r--r--salt/openbook/ci/files/openbookctl85
6 files changed, 215 insertions, 0 deletions
diff --git a/salt/openbook/ci/files/build.sh b/salt/openbook/ci/files/build.sh
new file mode 100644
index 0000000..b225c85
--- /dev/null
+++ b/salt/openbook/ci/files/build.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+for i in $(docker images | grep -v CREATED | awk '{print $3}'); do
+ docker rmi --force $i
+done
+docker container prune -f
+
+pushd {{ pillar["ci"]["build_dir"] }} 2>/dev/null
+
+echo "Login to docker registry"
+docker login --username {{ pillar["registry"]["username"] }} --password {{ pillar["registry"]["password"] }} {{ pillar["registry"]["url"] }}
+
+# for i in $(curl -u '{{ pillar["registry"]["username"] }}:{{ pillar["registry"]["password"] }}' https://{{ pillar["registry"]["url"] }}/v2/_catalog | jq '.repositories' | fgrep 'openbook' | awk -F\" '{print $2}'); do
+# # get reference digest
+# digest=$(curl -u '{{ pillar["registry"]["username"] }}:{{ pillar["registry"]["password"] }}' -H "Accept: application/vnd.docker.distribution.manifest.v2+json" https://{{ pillar["registry"]["url"] }}/v2/${i}/manifests/latest | jq '.config | .digest' | awk -F\" '{print $2}')
+# curl -u '{{ pillar["registry"]["username"] }}:{{ pillar["registry"]["password"] }}' -X DELETE https://{{ pillar["registry"]["url"] }}/v2/${i}/manifests/${digest}
+# done
+
+{{ pillar["baseimage"]["build_dir"] }}/build.sh
+{{ pillar["database"]["build_dir"] }}/build.sh
+{{ pillar["api_server"]["build_dir"] }}/build.sh
+{{ pillar["admin_web_ui"]["build_dir"] }}/build.sh
+{{ pillar["customer_web_ui"]["build_dir"] }}/build.sh
+
+popd 2>/dev/null
+exit 0
diff --git a/salt/openbook/ci/files/cloudcfg.sh b/salt/openbook/ci/files/cloudcfg.sh
new file mode 100644
index 0000000..f7dffd6
--- /dev/null
+++ b/salt/openbook/ci/files/cloudcfg.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# Prepare the instance for ansible. This amounts to installing python2.
+
+python=$(which python || which python3 || which python2 || false)
+
+case "$(${python} -m platform)" in
+ *Ubuntu*)
+ export DEBIAN_FRONTEND=noninteractive
+ apt-get update
+ apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
+ apt-get -y install python python2.7
+ ;;
+ *centos*|*redhat*)
+ # RHEL systems still use python2 by default; nothing to do
+ ;;
+ *gentoo*)
+ if [ ! -d /usr/portage/sys-devel/gcc ]; then
+ emerge-webrsync
+ fi
+ emerge --oneshot --update dev-lang/python:2.7 app-portage/gentoolkit
+ ;;
+esac
+
+exit 0
diff --git a/salt/openbook/ci/files/openbook.gentoo b/salt/openbook/ci/files/openbook.gentoo
new file mode 100644
index 0000000..4a639d4
--- /dev/null
+++ b/salt/openbook/ci/files/openbook.gentoo
@@ -0,0 +1,25 @@
+#!/sbin/openrc-run
+
+extra_commands=test_database
+
+depend() {
+ need docker
+}
+
+start() {
+ ebegin "Starting Openbook"
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} start
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping Openbook"
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} stop
+ eend $?
+}
+
+test_database() {
+ ebegin "Testing database"
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} test_database
+ eend $?
+}
diff --git a/salt/openbook/ci/files/openbook.redhat b/salt/openbook/ci/files/openbook.redhat
new file mode 100644
index 0000000..571894a
--- /dev/null
+++ b/salt/openbook/ci/files/openbook.redhat
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# openbook
+#
+# chkconfig: 2345 10 90
+# description: Manage the Openbook application
+#
+### BEGIN INIT INFO
+# Provides: openbook
+# Required-Start: docker
+# Required-Stop: docker
+# Short-Description: Bring up/down networking
+# Description: Manage the Openbook application
+### END INIT INFO
+
+case $1 in
+ start*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} start
+ ;;
+ stop*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} stop
+ ;;
+ test_database*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} test_database
+ ;;
+ *)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} help
+ ;;
+esac
diff --git a/salt/openbook/ci/files/openbook.ubuntu b/salt/openbook/ci/files/openbook.ubuntu
new file mode 100644
index 0000000..cda042d
--- /dev/null
+++ b/salt/openbook/ci/files/openbook.ubuntu
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: openbook
+# Required-Start: docker
+# Required-Stop: docker
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Manage the Openbook application
+### END INIT INFO
+
+case $1 in
+ start*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} start
+ ;;
+ stop*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} stop
+ ;;
+ test_database*)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} test_database
+ ;;
+ *)
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/{{ pillar["ci"]["files"]["openbookctl"]["name"] }} help
+ ;;
+esac
diff --git a/salt/openbook/ci/files/openbookctl b/salt/openbook/ci/files/openbookctl
new file mode 100644
index 0000000..894368d
--- /dev/null
+++ b/salt/openbook/ci/files/openbookctl
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+echo 'mysql root password: {% raw %}{{ openbook_database_password }}{% endraw %}'
+echo 'wsrep_node_address: {% raw %}{{ ansible_default_ipv4.address }}{% endraw %}'
+echo 'wsrep_cluster_address: gcomm://{% raw %}{{ openbook_gcomm_addresses }}{% endraw %}'
+
+wait_for_database() {
+ echo "Waiting for database to start..."
+ started=1
+ for i in {120..0}; do
+ if echo 'SELECT 1' | mysql -h 127.0.0.1 -u root --password='{% raw %}{{ openbook_database_password }}{% endraw %}' &>/dev/null; then
+ started=0
+ break
+ fi
+ sleep 1
+ done
+ if [ $started -eq 1 ]; then
+ echo "Error: database did not start."
+ exit 1
+ fi
+}
+
+ensure_openbook_databases_created() {
+ if ! echo "SHOW DATABASES;" | mysql -h 127.0.0.1 -u root --password='{% raw %}{{ openbook_database_password }}{% endraw %}' 2>/dev/null | fgrep 'openbook'; then
+ echo "Creating Openbook schema..."
+ mysql -h 127.0.0.1 -u root --password='{% raw %}{{ openbook_database_password }}{% endraw %}' &>/dev/null < {{ pillar["database"]["files"]["create_openbook_schemas"]["path"] }}/{{ pillar["database"]["files"]["create_openbook_schemas"]["name"] }}
+ fi
+}
+
+do_start() {
+ chmod 777 {{ pillar["database"]["dirs"]["var_lib_mysql"]["name"] }}
+ chmod 777 {{ pillar["database"]["dirs"]["var_log_mysql"]["name"] }}
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/database/run.sh
+ wait_for_database
+ ensure_openbook_databases_created
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/api_server/run.sh
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/admin_web_ui/run.sh
+ {{ pillar["ansible"]["dirs"]["output"]["name"] }}/customer_web_ui/run.sh
+ echo
+ echo "Openbook started. All components may not be fully initialized and available."
+ echo "It is highly recommended to wait until initialization is complete before"
+ echo "starting the next node in the cluster. To monitor the state, run:"
+ echo
+ echo "watch -n 5 \"lsof -i -n -P 2>/dev/null | fgrep '*:808'\""
+ echo
+ echo "When the output looks like the following, the node is fully initialized:"
+ echo "(Your PIDs will vary)"
+ echo
+ echo "java 27424 root 73u IPv6 65463 0t0 TCP *:8080 (LISTEN)"
+ echo "java 27264 root 73u IPv6 65430 0t0 TCP *:8081 (LISTEN)"
+ echo "java 27349 root 73u IPv6 65430 0t0 TCP *:8082 (LISTEN)"
+}
+
+do_stop() {
+ docker stop {{ pillar["customer_web_ui"]["container_name"] }}
+ docker stop {{ pillar["admin_web_ui"]["container_name"] }}
+ docker stop {{ pillar["api_server"]["container_name"] }}
+ docker stop {{ pillar["database"]["container_name"] }}
+ docker container prune -f
+}
+
+do_help() {
+ echo "Usage:"
+ echo " $0 start"
+ echo " $0 stop"
+ echo " $0 test_database"
+}
+
+case $1 in
+ start*)
+ do_start
+ ;;
+ stop*)
+ do_stop
+ ;;
+ test_database*)
+ wait_for_database
+ echo "Database is up."
+ ;;
+ *)
+ do_help
+ ;;
+esac
+
+exit 0