Keep the DevStack plugin in-tree

Change-Id: Iab185314be2efc78753289b06efffefbe8e0d0f6
This commit is contained in:
Kiall Mac Innes 2014-01-31 13:47:38 -08:00
parent 622dddc270
commit 7fc43e3805
4 changed files with 357 additions and 0 deletions

View File

@ -0,0 +1,88 @@
#!/usr/bin/env bash
# **designate.sh**
# Simple Tests to verify designate is running
echo "*********************************************************************"
echo "Begin DevStack Exercise: $0"
echo "*********************************************************************"
# This script exits on an error so that errors don't compound and you see
# only the first error that occurred.
set -o errexit
# Print the commands being run so that we can see the command that triggers
# an error. It is also useful for following allowing as the install occurs.
set -o xtrace
# Settings
# ========
# Keep track of the current directory
EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
# Import common functions
source $TOP_DIR/functions
# Import configuration
source $TOP_DIR/openrc
# Import exercise configuration
source $TOP_DIR/exerciserc
# Skip if designate is not enabled
is_service_enabled designate || exit 55
# Various functions
# -----------------
function get_domain_id {
local DOMAIN_NAME=$1
local DOMAIN_ID=$(designate domain-list | egrep " $DOMAIN_NAME " | get_field 1)
die_if_not_set $LINENO DOMAIN_ID "Failure retrieving DOMAIN_ID"
echo "$DOMAIN_ID"
}
function get_record_id {
local DOMAIN_ID=$1
local RECORD_NAME=$2
local RECORD_ID=$(designate record-list $DOMAIN_ID | egrep " $RECORD_NAME " | get_field 1)
die_if_not_set $LINENO RECORD_ID "Failure retrieving RECORD_ID"
echo "$RECORD_ID"
}
# Testing Domains
# ===============
# List domains
designate domain-list
# Create random domain name
DOMAIN_NAME="exercise-$(openssl rand -hex 4).com."
# Create the domain
designate domain-create --name $DOMAIN_NAME --email devstack@example.org
DOMAIN_ID=$(get_domain_id $DOMAIN_NAME)
# Fetch the domain
designate domain-get $DOMAIN_ID
# Testing Records
# ===============
# Create random record name
RECORD_NAME="$(openssl rand -hex 4).${DOMAIN_NAME}"
# Create the record
designate record-create $DOMAIN_ID --name $RECORD_NAME --type A --data 127.0.0.1
RECORD_ID=$(get_record_id $DOMAIN_ID $RECORD_NAME)
# Fetch the record
designate record-get $DOMAIN_ID $RECORD_ID
set +o xtrace
echo "*********************************************************************"
echo "SUCCESS: End DevStack Exercise: $0"
echo "*********************************************************************"

View File

@ -0,0 +1,49 @@
# check for service enabled
if is_service_enabled designate; then
if [[ "$1" == "source" ]]; then
# Initial source of lib script
source $TOP_DIR/lib/designate
fi
if [[ "$1" == "stack" && "$2" == "install" ]]; then
echo_summary "Installing Designate"
install_designate
echo_summary "Installing Designate Client"
install_designateclient
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Designate"
configure_designate
echo_summary "Configuring Designate Client"
configure_designateclient
if is_service_enabled key; then
echo_summary "Creating Designate Keystone Accounts"
create_designate_accounts
fi
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Initializing Designate"
init_designate
echo_summary "Starting Designate"
start_designate
echo_summary "Creating Initial Designate Resources"
create_designate_initial_resources
fi
if [[ "$1" == "unstack" ]]; then
# Shut down designate services
# no-op
:
fi
if [[ "$1" == "clean" ]]; then
echo_summary "Cleaning Designate"
cleanup_designate
fi
fi

9
contrib/devstack/install.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
for f in lib/* extras.d/* exercises/*; do
echo "Installing symlink for $f"
rm ../../../devstack/$f || true
ln -s $DIR/$f ../../../devstack/$f
done

View File

@ -0,0 +1,211 @@
# lib/designate
# Install and start **Designate** service
# To enable Designate services, add the following to localrc
# enable_service designate,designate-api,designate-central,designate-agent,designate-sink
# stack.sh
# ---------
# install_designate
# configure_designate
# init_designate
# start_designate
# stop_designate
# cleanup_designate
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
# Set up default repos
DESIGNATE_REPO=${DESIGNATE_REPO:-${GIT_BASE}/stackforge/designate.git}
DESIGNATE_BRANCH=${DESIGNATE_BRANCH:-master}
DESIGNATECLIENT_REPO=${DESIGNATECLIENT_REPO:-${GIT_BASE}/stackforge/python-designateclient.git}
DESIGNATECLIENT_BRANCH=${DESIGNATECLIENT_BRANCH:-master}
# Set up default paths
DESIGNATE_DIR=$DEST/designate
DESIGNATECLIENT_DIR=$DEST/python-designateclient
DESIGNATE_CONF_DIR=/etc/designate
DESIGNATE_STATE_PATH=${DESIGNATE_STATE_PATH:=$DATA_DIR/designate}
DESIGNATE_CONF=$DESIGNATE_CONF_DIR/designate.conf
DESIGNATE_LOG_DIR=/var/log/designate
DESIGNATE_AUTH_CACHE_DIR=${DESIGNATE_AUTH_CACHE_DIR:-/var/cache/designate}
# Set up default options
DESIGNATE_BACKEND_DRIVER=${DESIGNATE_BACKEND_DRIVER:=fake}
# Support potential entry-points console scripts
DESIGNATE_BIN_DIR=$(get_python_exec_prefix)
# Functions
# ---------
# cleanup_designate() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_designate() {
sudo rm -rf $DESIGNATE_STATE_PATH $DESIGNATE_AUTH_CACHE_DIR
}
# configure_designateclient() - Set config files, create data dirs, etc
function configure_designateclient() {
setup_develop $DESIGNATECLIENT_DIR
}
# configure_designate() - Set config files, create data dirs, etc
function configure_designate() {
setup_develop $DESIGNATE_DIR
[ ! -d $DESIGNATE_CONF_DIR ] && sudo mkdir -m 755 -p $DESIGNATE_CONF_DIR
sudo chown $USER $DESIGNATE_CONF_DIR
[ ! -d $DESIGNATE_LOG_DIR ] && sudo mkdir -m 755 -p $DESIGNATE_LOG_DIR
sudo chown $USER $DESIGNATE_LOG_DIR
# (Re)create ``designate.conf``
rm -f $DESIGNATE_CONF
iniset_rpc_backend designate $DESIGNATE_CONF DEFAULT
iniset $DESIGNATE_CONF DEFAULT verbose True
iniset $DESIGNATE_CONF storage:sqlalchemy database_connection `database_connection_url designate`
if [[ "$DESIGNATE_BACKEND_DRIVER" = 'powerdns' ]]; then
iniset $DESIGNATE_CONF backend:powerdns database_connection `database_connection_url designate_pdns`
fi
if is_service_enabled key; then
# Setup the Keystone Integration
iniset $DESIGNATE_CONF service:api auth_strategy keystone
iniset $DESIGNATE_CONF keystone_authtoken auth_protocol http
iniset $DESIGNATE_CONF keystone_authtoken admin_user designate
iniset $DESIGNATE_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
iniset $DESIGNATE_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
iniset $DESIGNATE_CONF keystone_authtoken signing_dir $DESIGNATE_AUTH_CACHE_DIR
fi
if is_service_enabled designate-agent; then
iniset $DESIGNATE_CONF service:central backend_driver rpc
iniset $DESIGNATE_CONF service:agent backend_driver $DESIGNATE_BACKEND_DRIVER
else
iniset $DESIGNATE_CONF service:central backend_driver $DESIGNATE_BACKEND_DRIVER
fi
# Install the policy file for the API server
cp $DESIGNATE_DIR/etc/designate/policy.json $DESIGNATE_CONF_DIR/policy.json
iniset $DESIGNATE_CONF DEFAULT policy_file $DESIGNATE_CONF_DIR/policy.json
cleanup_designate
}
# create_designate_accounts() - Set up common required designate accounts
# Tenant User Roles
# ------------------------------------------------------------------
# service designate admin # if enabled
function create_designate_accounts() {
SERVICE_TENANT=$(keystone tenant-list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
ADMIN_ROLE=$(keystone role-list | awk "/ admin / { print \$2 }")
if [[ "$ENABLED_SERVICES" =~ "designate-api" ]]; then
DESIGNATE_USER=$(keystone user-create \
--name=designate \
--pass="$SERVICE_PASSWORD" \
--tenant_id $SERVICE_TENANT \
--email=designate@example.com \
| grep " id " | get_field 2)
keystone user-role-add \
--tenant_id $SERVICE_TENANT \
--user_id $DESIGNATE_USER \
--role_id $ADMIN_ROLE
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
DESIGNATE_SERVICE=$(keystone service-create \
--name=designate \
--type=dns \
--description="Designate Service" \
| grep " id " | get_field 2)
keystone endpoint-create \
--region RegionOne \
--service_id $DESIGNATE_SERVICE \
--publicurl "http://$SERVICE_HOST:9001/v1" \
--adminurl "http://$SERVICE_HOST:9001/v1" \
--internalurl "http://$SERVICE_HOST:9001/v1"
fi
fi
}
function create_designate_initial_resources() {
#ADMIN_TENANT_ID=$(keystone tenant-list | grep " admin " | get_field 1)
designate server-create --name ns1.devstack.org.
}
# init_designate() - Initialize etc.
function init_designate() {
# Create cache dir
sudo mkdir -p $DESIGNATE_AUTH_CACHE_DIR
sudo chown $STACK_USER $DESIGNATE_AUTH_CACHE_DIR
rm -f $DESIGNATE_AUTH_CACHE_DIR/*
# (Re)create designate database
recreate_database designate utf8
# Init and migrate designate database
designate-manage database-init
designate-manage database-sync
if [[ "$DESIGNATE_BACKEND_DRIVER" = 'powerdns' ]]; then
# (Re)create designate_pdns database
recreate_database designate_pdns utf8
# Init and migrate designate_pdns database
designate-manage powerdns database-init
designate-manage powerdns database-sync
fi
}
# install_designate() - Collect source and prepare
function install_designate() {
git_clone $DESIGNATE_REPO $DESIGNATE_DIR $DESIGNATE_BRANCH
setup_develop $DESIGNATE_DIR
if [[ "$DESIGNATE_BACKEND_DRIVER" = 'powerdns' ]]; then
install_package pdns-server pdns-backend-mysql
fi
}
# install_designateclient() - Collect source and prepare
function install_designateclient() {
git_clone $DESIGNATECLIENT_REPO $DESIGNATECLIENT_DIR $DESIGNATECLIENT_BRANCH
setup_develop $DESIGNATECLIENT_DIR
}
# start_designate() - Start running processes, including screen
function start_designate() {
screen_it designate-api "designate-api --config-file $DESIGNATE_CONF"
screen_it designate-central "designate-central --config-file $DESIGNATE_CONF"
screen_it designate-agent "designate-agent --config-file $DESIGNATE_CONF"
screen_it designate-sink "designate-sink --config-file $DESIGNATE_CONF"
}
# stop_designate() - Stop running processes
function stop_designate() {
# Kill the designate screen windows
for serv in designate-api designate-central designate-agent designate-sink; do
screen -S $SCREEN_NAME -p $serv -X kill
done
}
# Restore xtrace
$XTRACE
# Local variables:
# mode: shell-script
# End: