summaryrefslogtreecommitdiffstats
path: root/ci/ansible/script
diff options
context:
space:
mode:
Diffstat (limited to 'ci/ansible/script')
-rw-r--r--ci/ansible/script/check_ansible_version.sh26
-rw-r--r--ci/ansible/script/keystone.sh178
-rw-r--r--ci/ansible/script/sdsrc40
-rw-r--r--ci/ansible/script/set_nginx_config.sh37
-rw-r--r--ci/ansible/script/util.sh93
5 files changed, 374 insertions, 0 deletions
diff --git a/ci/ansible/script/check_ansible_version.sh b/ci/ansible/script/check_ansible_version.sh
new file mode 100644
index 0000000..e9e1c9b
--- /dev/null
+++ b/ci/ansible/script/check_ansible_version.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ansiblever=$(ansible --version |grep -Eow '^ansible [^ ]+' |gawk '{ print $2 }')
+echo "The actual version of ansible is $ansiblever"
+
+if [[ "$ansiblever" < '2.4.2' ]]; then
+ echo "Ansible version 2.4.2 or higher is required"
+ exit 1
+fi
+
+exit 0
+
diff --git a/ci/ansible/script/keystone.sh b/ci/ansible/script/keystone.sh
new file mode 100644
index 0000000..3de1e8b
--- /dev/null
+++ b/ci/ansible/script/keystone.sh
@@ -0,0 +1,178 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# 'stack' user is just for install keystone through devstack
+
+create_user(){
+ if id "${STACK_USER_NAME}" &> /dev/null; then
+ return
+ fi
+ sudo useradd -s /bin/bash -d "${STACK_HOME}" -m "${STACK_USER_NAME}"
+ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
+}
+
+
+remove_user(){
+ userdel "${STACK_USER_NAME}" -f -r
+ rm /etc/sudoers.d/stack
+}
+
+devstack_local_conf(){
+DEV_STACK_LOCAL_CONF=${DEV_STACK_DIR}/local.conf
+cat > "$DEV_STACK_LOCAL_CONF" << DEV_STACK_LOCAL_CONF_DOCK
+[[local|localrc]]
+# use TryStack git mirror
+GIT_BASE=$STACK_GIT_BASE
+
+# If the "*_PASSWORD" variables are not set here you will be prompted to enter
+# values for them by "stack.sh" and they will be added to "local.conf".
+ADMIN_PASSWORD=$STACK_PASSWORD
+DATABASE_PASSWORD=$STACK_PASSWORD
+RABBIT_PASSWORD=$STACK_PASSWORD
+SERVICE_PASSWORD=$STACK_PASSWORD
+
+# Neither is set by default.
+HOST_IP=$HOST_IP
+
+# path of the destination log file. A timestamp will be appended to the given name.
+LOGFILE=\$DEST/logs/stack.sh.log
+
+# Old log files are automatically removed after 7 days to keep things neat. Change
+# the number of days by setting "LOGDAYS".
+LOGDAYS=2
+
+ENABLED_SERVICES=mysql,key
+# Using stable/queens branches
+# ---------------------------------
+KEYSTONE_BRANCH=$STACK_BRANCH
+KEYSTONECLIENT_BRANCH=$STACK_BRANCH
+DEV_STACK_LOCAL_CONF_DOCK
+chown stack:stack "$DEV_STACK_LOCAL_CONF"
+}
+
+opensds_conf() {
+cat >> "$OPENSDS_CONFIG_DIR/opensds.conf" << OPENSDS_GLOBAL_CONFIG_DOC
+
+
+[keystone_authtoken]
+memcached_servers = $HOST_IP:11211
+signing_dir = /var/cache/opensds
+cafile = /opt/stack/data/ca-bundle.pem
+auth_uri = http://$HOST_IP/identity
+project_domain_name = Default
+project_name = service
+user_domain_name = Default
+password = $STACK_PASSWORD
+username = $OPENSDS_SERVER_NAME
+auth_url = http://$HOST_IP/identity
+auth_type = password
+
+OPENSDS_GLOBAL_CONFIG_DOC
+
+cp "$OPENSDS_DIR/examples/policy.json" "$OPENSDS_CONFIG_DIR"
+}
+
+create_user_and_endpoint(){
+ . "$DEV_STACK_DIR/openrc" admin admin
+ openstack user create --domain default --password "$STACK_PASSWORD" "$OPENSDS_SERVER_NAME"
+ openstack role add --project service --user opensds admin
+ openstack group create service
+ openstack group add user service opensds
+ openstack role add service --project service --group service
+ openstack group add user admins admin
+ openstack service create --name "opensds$OPENSDS_VERSION" --description "OpenSDS Block Storage" "opensds$OPENSDS_VERSION"
+ openstack endpoint create --region RegionOne "opensds$OPENSDS_VERSION" public "http://$HOST_IP:50040/$OPENSDS_VERSION/%\(tenant_id\)s"
+ openstack endpoint create --region RegionOne "opensds$OPENSDS_VERSION" internal "http://$HOST_IP:50040/$OPENSDS_VERSION/%\(tenant_id\)s"
+ openstack endpoint create --region RegionOne "opensds$OPENSDS_VERSION" admin "http://$HOST_IP:50040/$OPENSDS_VERSION/%\(tenant_id\)s"
+}
+
+delete_redundancy_data() {
+ . "$DEV_STACK_DIR/openrc" admin admin
+ openstack project delete demo
+ openstack project delete alt_demo
+ openstack project delete invisible_to_admin
+ openstack user delete demo
+ openstack user delete alt_demo
+}
+
+download_code(){
+ if [ ! -d "${DEV_STACK_DIR}" ];then
+ git clone "${STACK_GIT_BASE}/openstack-dev/devstack.git" -b "${STACK_BRANCH}" "${DEV_STACK_DIR}"
+ chown stack:stack -R "${DEV_STACK_DIR}"
+ fi
+}
+
+install(){
+ create_user
+ download_code
+ opensds_conf
+
+ # If keystone is ready to start, there is no need continue next step.
+ if wait_for_url "http://$HOST_IP/identity" "keystone" 0.25 4; then
+ return
+ fi
+ devstack_local_conf
+ cd "${DEV_STACK_DIR}"
+ su "$STACK_USER_NAME" -c "${DEV_STACK_DIR}/stack.sh" >/dev/null
+ create_user_and_endpoint
+ delete_redundancy_data
+}
+
+cleanup() {
+ su "$STACK_USER_NAME" -c "${DEV_STACK_DIR}/clean.sh" >/dev/null
+}
+
+uninstall(){
+ su "$STACK_USER_NAME" -c "${DEV_STACK_DIR}/unstack.sh" >/dev/null
+}
+
+uninstall_purge(){
+ rm "${STACK_HOME:?'STACK_HOME must be defined and cannot be empty'}/*" -rf
+ remove_user
+}
+
+# ***************************
+TOP_DIR=$(cd $(dirname "$0") && pwd)
+
+# OpenSDS configuration directory
+OPENSDS_CONFIG_DIR=${OPENSDS_CONFIG_DIR:-/etc/opensds}
+
+source "$TOP_DIR/util.sh"
+source "$TOP_DIR/sdsrc"
+
+case "$# $1" in
+ "1 install")
+ echo "Starting install keystone..."
+ install
+ ;;
+ "1 uninstall")
+ echo "Starting uninstall keystone..."
+ uninstall
+ ;;
+ "1 cleanup")
+ echo "Starting cleanup keystone..."
+ cleanup
+ ;;
+ "1 uninstall_purge")
+ echo "Starting uninstall purge keystone..."
+ uninstall_purge
+ ;;
+ *)
+ echo "The value of the parameter can only be one of the following: install/uninstall/cleanup/uninstall_purge"
+ exit 1
+ ;;
+esac
+
diff --git a/ci/ansible/script/sdsrc b/ci/ansible/script/sdsrc
new file mode 100644
index 0000000..d26083d
--- /dev/null
+++ b/ci/ansible/script/sdsrc
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Global
+HOST_IP=${HOST_IP:-}
+HOST_IP=$(get_default_host_ip "$HOST_IP" "inet")
+if [ "$HOST_IP" == "" ]; then
+ die $LINENO "Could not determine host ip address. See local.conf for suggestions on setting HOST_IP."
+fi
+
+# OpenSDS configuration.
+OPENSDS_VERSION=${OPENSDS_VERSION:-v1beta}
+
+# OpenSDS service name in keystone.
+OPENSDS_SERVER_NAME=${OPENSDS_SERVER_NAME:-opensds}
+
+# devstack keystone configuration
+STACK_GIT_BASE=${STACK_GIT_BASE:-https://git.openstack.org}
+STACK_USER_NAME=${STACK_USER_NAME:-stack}
+STACK_PASSWORD=${STACK_PASSWORD:-opensds@123}
+STACK_HOME=${STACK_HOME:-/opt/stack}
+STACK_BRANCH=${STACK_BRANCH:-stable/queens}
+DEV_STACK_DIR=$STACK_HOME/devstack
+
+GOPATH=${GOPATH:-$HOME/gopath}
+OPENSDS_DIR=${GOPATH}/src/github.com/opensds/opensds
+
diff --git a/ci/ansible/script/set_nginx_config.sh b/ci/ansible/script/set_nginx_config.sh
new file mode 100644
index 0000000..3abbfcd
--- /dev/null
+++ b/ci/ansible/script/set_nginx_config.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2018 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TOP_DIR=$(cd $(dirname "$0") && pwd)
+source "$TOP_DIR/util.sh"
+source "$TOP_DIR/sdsrc"
+
+cat > /etc/nginx/sites-available/default <<EOF
+ server {
+ listen 8088 default_server;
+ listen [::]:8088 default_server;
+ root /var/www/html;
+ index index.html index.htm index.nginx-debian.html;
+ server_name _;
+ location /v3/ {
+ proxy_pass http://$HOST_IP/identity/v3/;
+ }
+ location /v1beta/ {
+ proxy_pass http://$HOST_IP:50040/$OPENSDS_VERSION/;
+ }
+ }
+EOF
+
+
diff --git a/ci/ansible/script/util.sh b/ci/ansible/script/util.sh
new file mode 100644
index 0000000..b0e30eb
--- /dev/null
+++ b/ci/ansible/script/util.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# Copyright (c) 2017 Huawei Technologies Co., Ltd. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Echo text to the log file, summary log file and stdout
+# echo_summary "something to say"
+function echo_summary {
+ echo -e "$@"
+}
+
+wait_for_url() {
+ local url=$1
+ local prefix=${2:-}
+ local wait=${3:-1}
+ local times=${4:-30}
+
+ which curl >/dev/null || {
+ echo_summary "curl must be installed"
+ exit 1
+ }
+
+ local i
+ for i in $(seq 1 "$times"); do
+ local out
+ if out=$(curl --max-time 1 -gkfs "$url" 2>/dev/null); then
+ echo_summary "On try ${i}, ${prefix}: ${out}"
+ return 0
+ fi
+ sleep "${wait}"
+ done
+ echo_summary "Timed out waiting for ${prefix} to answer at ${url}; tried ${times} waiting ${wait} between each"
+ return 1
+}
+
+# Prints line number and "message" in error format
+# err $LINENO "message"
+err() {
+ local exitcode=$?
+ local xtrace
+ xtrace=$(set +o | grep xtrace)
+ set +o xtrace
+ local msg="[ERROR] ${BASH_SOURCE[2]}:$1 $2"
+ echo "$msg"
+ $xtrace
+ return $exitcode
+}
+
+# Prints line number and "message" then exits
+# die $LINENO "message"
+die() {
+ local exitcode=$?
+ set +o xtrace
+ local line=$1; shift
+ if [ $exitcode == 0 ]; then
+ exitcode=1
+ fi
+ err "$line" "$*"
+ # Give buffers a second to flush
+ sleep 1
+ exit $exitcode
+}
+
+get_default_host_ip() {
+ local host_ip=$1
+ local af=$2
+ # Search for an IP unless an explicit is set by ``HOST_IP`` environment variable
+ if [ -z "$host_ip" ]; then
+ host_ip=""
+ # Find the interface used for the default route
+ host_ip_iface=${host_ip_iface:-$(ip -f "$af" route | awk '/default/ {print $5}' | head -1)}
+ local host_ips
+ host_ips=$(LC_ALL=C ip -f "$af" addr show "${host_ip_iface}" | sed /temporary/d |awk /$af'/ {split($2,parts,"/"); print parts[1]}')
+ local ip
+ for ip in $host_ips; do
+ host_ip=$ip
+ break;
+ done
+ fi
+ echo "$host_ip"
+}
+