diff options
| author | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-08-30 13:09:56 -0600 |
|---|---|---|
| committer | Carlos Konstanski <ckonstanski@pippiandcarlos.com> | 2017-08-30 13:09:56 -0600 |
| commit | 649f0dd9c5ca586d8b637400dd19c0c4059447d6 (patch) | |
| tree | 5ccc992a3aa5de1bcb510911dfdb21e6a54bd197 /salt/openbook/ci | |
initial commit
Diffstat (limited to 'salt/openbook/ci')
| -rw-r--r-- | salt/openbook/ci/files/build.sh | 26 | ||||
| -rw-r--r-- | salt/openbook/ci/files/cloudcfg.sh | 25 | ||||
| -rw-r--r-- | salt/openbook/ci/files/openbook.gentoo | 25 | ||||
| -rw-r--r-- | salt/openbook/ci/files/openbook.redhat | 29 | ||||
| -rw-r--r-- | salt/openbook/ci/files/openbook.ubuntu | 25 | ||||
| -rw-r--r-- | salt/openbook/ci/files/openbookctl | 85 | ||||
| -rw-r--r-- | salt/openbook/ci/init.sls | 55 |
7 files changed, 270 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 diff --git a/salt/openbook/ci/init.sls b/salt/openbook/ci/init.sls new file mode 100644 index 0000000..d121326 --- /dev/null +++ b/salt/openbook/ci/init.sls @@ -0,0 +1,55 @@ +{% for dir in pillar["ci"]["dirs"].items() %} +database_dirs_{{ dir[0] }}: + file.directory: +{% if dir[1]["relative_to_buildroot"] %} + - name: {{ pillar["ci"]["build_dir"] }}/{{ dir[1]["name"] }} +{% else %} + - name: {{ dir[1]["name"] }} +{% endif %} + - user: root + - group: root + - mode: {{ dir[1]["mode"] }} + - makedirs: True +{% endfor %} + +{% for file in pillar["ci"]["files"].items() %} +ci_files_{{ file[0] }}: + file.managed: +{% if file[1]["relative_to_buildroot"] %} + - name: {{ pillar["ci"]["build_dir"] }}/{{ file[1]["path"] }}/{{ file[1]["name"] }} +{% else %} + - name: {{ file[1]["path"] }}/{{ file[1]["name"] }} +{% endif %} + - source: salt://openbook/ci/files/{{ file[1]["source"] }} +{% if file[1]["is_template"] %} + - template: jinja +{% endif %} + - user: root + - group: root + - mode: {{ file[1]["mode"] }} +{% if file[1]["ansible"] %} +ansible_ci_dirs_{{ file[0] }}: + file.directory: +{% if file[1]["is_template"] %} + - name: {{ pillar["ansible"]["build_dir"] }}/templates/ci/{{ file[1]["path"] }} +{% else %} + - name: {{ pillar["ansible"]["build_dir"] }}/files/ci/{{ file[1]["path"] }} +{% endif %} + - user: root + - group: root + - mode: "0755" + - makedirs: True +ansible_ci_files_{{ file[0] }}: + file.managed: +{% if file[1]["is_template"] %} + - name: {{ pillar["ansible"]["build_dir"] }}/templates/ci/{{ file[1]["path"] }}/{{ file[1]["name"] }} + - template: jinja +{% else %} + - name: {{ pillar["ansible"]["build_dir"] }}/files/ci/{{ file[1]["path"] }}/{{ file[1]["name"] }} +{% endif %} + - source: salt://openbook/ci/files/{{ file[1]["source"] }} + - user: root + - group: root + - mode: {{ file[1]["mode"] }} +{% endif %} +{% endfor %} |
