Skip to content

Instantly share code, notes, and snippets.

@ishikawa84g
Created January 21, 2014 05:29
Show Gist options
  • Save ishikawa84g/8534874 to your computer and use it in GitHub Desktop.
Save ishikawa84g/8534874 to your computer and use it in GitHub Desktop.
・認証を回避して keystone コマンドを実行するための環境変数 SERVICE_TOKEN ・ SERVICE_ENDPOINT はチェックの前に設定してしまうと、無条件で通ってしまうのでチェックした後から設定する。 ・SERVICE_TOKEN は grep admin_token /etc/keystone/keystone.conf のものと一致させる ・CEILOMETER と SWIFT は除外している
#!/bin/bash
# --------
# Defaults
# --------
SERVICE_TENANT_NAME=service
ADMIN_ROLE_NAME=admin
ADMIN_TENANT_NAME=admin
DEMO_TENANT_NAME=demo
# SERVIVCE PASSWORD
ADMIN_PASS=YOUR_PASSWORD
DEMO_PASS=YOUR_PASSWORD
NOVA_PASS=YOUR_PASSWORD
GLANCE_PASS=YOUR_PASSWORD
CINDER_PASS=YOUR_PASSWORD
NEUTRON_PASS=YOUR_PASSWORD
# SERVICE USER
ADMIN_USERNAME=admin
DEMO_USERNAME=demo
NOVA_USERNAME=nova
GLANCE_USERNAME=glance
CINDER_USERNAME=cinder
NEUTRON_USERNAME=neutron
# E-MAIL ADDRESS
ADMIN_EMAIL=admin@localhost.localdomain
DEMO_EMAIL=demo@localhost.localdomain
NOVA_EMAIL=nova@localhost.localdomain
GLANCE_EMAIL=glance@localhost.localdomain
CINDER_EMAIL=cinder@localhost.localdomain
NEUTRON_EMAIL=neutron@localhost.localdomain
# SERVICE PROTOCOL
NOVA_PUBLIC_SERVICE_PROTOCOL=http
NOVA_ADMIN_SERVICE_PROTOCOL=http
NOVA_INTERNAL_SERVICE_PROTOCOL=http
EC2_PUBLIC_SERVICE_PROTOCOL=http
EC2_ADMIN_SERVICE_PROTOCOL=http
EC2_INTERNAL_SERVICE_PROTOCOL=http
GLANCE_PUBLIC_SERVICE_PROTOCOL=http
GLANCE_ADMIN_SERVICE_PROTOCOL=http
GLANCE_INTERNAL_SERVICE_PROTOCOL=http
KEYSTONE_PUBLIC_SERVICE_PROTOCOL=http
KEYSTONE_ADMIN_SERVICE_PROTOCOL=http
KEYSTONE_INTERNAL_SERVICE_PROTOCOL=http
CINDER_PUBLIC_SERVICE_PROTOCOL=http
CINDER_ADMIN_SERVICE_PROTOCOL=http
CINDER_INTERNAL_SERVICE_PROTOCOL=http
NEUTRON_PUBLIC_SERVICE_PROTOCOL=http
NEUTRON_ADMIN_SERVICE_PROTOCOL=http
NEUTRON_INTERNAL_SERVICE_PROTOCOL=http
# SERVICE PORT
NOVA_COMPUTE_PORT=8774
EC2_PORT=8773
GLANCE_API_PORT=9292
KEYSTONE_PUBLIC_PORT=5000
KEYSTONE_ADMIN_PORT=35357
NEUTRON_PORT=9696
CINDER_PORT=8776
# IDENTITY
IDENTITY_API_VERSION=v2.0
REGION=RegionOne
# SERVICE HOST ADDRESS
NOVA_PUBLIC_SERVICE_HOST=public.2done.org
NOVA_ADMIN_SERVICE_HOST=private.2done.org
NOVA_INTERNAL_SERVICE_HOST=private.2done.org
EC2_PUBLIC_SERVICE_HOST=public.2done.org
EC2_ADMIN_SERVICE_HOST=private.2done.org
EC2_INTERNAL_SERVICE_HOST=private.2done.org
GLANCE_PUBLIC_SERVICE_HOST=public.2done.org
GLANCE_ADMIN_SERVICE_HOST=private.2done.org
GLANCE_INTERNAL_SERVICE_HOST=private.2done.org
KEYSTONE_PUBLIC_SERVICE_HOST=public.2done.org
KEYSTONE_ADMIN_SERVICE_HOST=private.2done.org
KEYSTONE_INTERNAL_SERVICE_HOST=private.2done.org
CINDER_PUBLIC_SERVICE_HOST=public.2done.org
CINDER_ADMIN_SERVICE_HOST=private.2done.org
CINDER_INTERNAL_SERVICE_HOST=private.2done.org
NEUTRON_PUBLIC_SERVICE_HOST=public.2done.org
NEUTRON_ADMIN_SERVICE_HOST=private.2done.org
NEUTRON_INTERNAL_SERVICE_HOST=private.2done.org
#------------
# Check @ 既にユーザがあり認証が通る場合はここで処理を終了する
#------------
/usr/bin/keystone --os-username=${ADMIN_USERNAME} --os-tenant-name=${ADMIN_TENANT_NAME} --os-password=${ADMIN_PASS} --os-auth-url=http://localhost:5000/v2.0 tenant-list
RET=`echo $?`
if [ ${RET} -eq 0 ]
then
exit 0
fi
export SERVICE_TOKEN=ad5f1232-ef23-4e7e-bd01-f1e0e9b00d72
export SERVICE_ENDPOINT=http://localhost:35357/v2.0
# ------------
# Function
# ------------
function get_id () {
echo `"$@" | awk '/ id / { print \$4 }'`
}
# --------------------------------------
# Admin
# --------------------------------------
ADMIN_TENANT=$(get_id keystone tenant-create --name ${ADMIN_TENANT_NAME})
ADMIN_ROLE=$(get_id keystone role-create --name ${ADMIN_ROLE_NAME})
ADMIN_USER=$(get_id keystone user-create --name ${ADMIN_USERNAME} --pass "${ADMIN_PASS}" --email ${ADMIN_EMAIL})
keystone user-role-add --user-id ${ADMIN_USER} --role-id ${ADMIN_ROLE} --tenant-id ${ADMIN_TENANT}
# --------------------------------------
# demo
# --------------------------------------
MEMBER_ROLE=$(keystone role-list | awk "/ _member_ / { print \$2 }")
DEMO_TENANT=$(get_id keystone tenant-create --name ${DEMO_TENANT_NAME})
DEMO_USER=$(get_id keystone user-create --name ${DEMO_USERNAME} --pass "${DEMO_PASS}" --email ${DEMO_EMAIL})
keystone user-role-add --user-id ${DEMO_USER} --role-id ${MEMBER_ROLE} --tenant-id ${DEMO_TENANT}
keystone user-role-add --user-id ${ADMIN_USER} --role-id ${ADMIN_ROLE} --tenant-id ${DEMO_TENANT}
# --------------------------------------
# Service
# --------------------------------------
SERVICE_TENANT=$(get_id keystone tenant-create --name ${SERVICE_TENANT_NAME})
# --------------------------------------
# Services
# --------------------------------------
NOVA_SERVICE=$(get_id keystone service-create --name=nova --type=compute --description="Nova Compute Service")
NOVA_V3_SERVICE=$(get_id keystone service-create --name=nova --type=computev3 --description="Nova Compute Service V3")
EC2_SERVICE=$(get_id keystone service-create --name=ec2 --type=ec2 --description="EC2 Compatibility Layer")
GLANCE_SERVICE=$(get_id keystone service-create --name=glance --type=image --description="Glance Image Service")
KEYSTONE_SERVICE=$(get_id keystone service-create --name keystone --type identity --description "Keystone Identity Service")
CINDER_SERVICE=$(get_id keystone service-create --name=cinder --type=volume --description="Cinder Volume Service")
CINDER_V2_SERVICE=$(get_id keystone service-create --name=cinder --type=volumev2 --description="Cinder Volume Service V2")
NEUTRON_SERVICE=$(get_id keystone service-create --name=neutron --type=network --description="Neutron Service")
# --------------------------------------
# Service Users
# --------------------------------------
NOVA_USER=$(get_id keystone user-create --name ${NOVA_USERNAME} --pass "${NOVA_PASS}" --tenant_id ${SERVICE_TENANT} --email ${NOVA_EMAIL})
GLANCE_USER=$(get_id keystone user-create --name ${GLANCE_USERNAME} --pass "${GLANCE_PASS}" --tenant_id ${SERVICE_TENANT} --email ${GLANCE_EMAIL})
CINDER_USER=$(get_id keystone user-create --name ${CINDER_USERNAME} --pass "${CINDER_PASS}" --tenant_id ${SERVICE_TENANT} --email ${CINDER_EMAIL})
NEUTRON_USER=$(get_id keystone user-create --name ${NEUTRON_USERNAME} --pass "${NEUTRON_PASS}" --tenant_id ${SERVICE_TENANT} --email ${NEUTRON_EMAIL})
# --------------------------------------
# User role add
# --------------------------------------
keystone user-role-add --tenant-id ${SERVICE_TENANT} --role-id ${ADMIN_ROLE} --user-id ${NOVA_USER}
keystone user-role-add --tenant-id ${SERVICE_TENANT} --role-id ${ADMIN_ROLE} --user-id ${GLANCE_USER}
keystone user-role-add --tenant-id ${SERVICE_TENANT} --role-id ${ADMIN_ROLE} --user-id ${CINDER_USER}
keystone user-role-add --tenant-id ${SERVICE_TENANT} --role-id ${ADMIN_ROLE} --user-id ${NEUTRON_USER}
# --------------------------------------
# Endpoints
# --------------------------------------
keystone endpoint-create \
--region ${REGION} \
--service_id ${NOVA_SERVICE} \
--publicurl "${NOVA_PUBLIC_SERVICE_PROTOCOL}://${NOVA_PUBLIC_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v2/\$(tenant_id)s" \
--adminurl "${NOVA_ADMIN_SERVICE_PROTOCOL}://${NOVA_ADMIN_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v2/\$(tenant_id)s" \
--internalurl "${NOVA_INTERNAL_SERVICE_PROTOCOL}://${NOVA_INTERNAL_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v2/\$(tenant_id)s"
keystone endpoint-create \
--region ${REGION} \
--service_id ${NOVA_V3_SERVICE} \
--publicurl "${NOVA_PUBLIC_SERVICE_PROTOCOL}://${NOVA_PUBLIC_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v3" \
--adminurl "${NOVA_ADMIN_SERVICE_PROTOCOL}://${NOVA_ADMIN_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v3" \
--internalurl "${NOVA_INTERNAL_SERVICE_PROTOCOL}://${NOVA_INTERNAL_SERVICE_HOST}:${NOVA_COMPUTE_PORT}/v3"
keystone endpoint-create \
--region ${REGION} \
--service_id ${EC2_SERVICE} \
--publicurl "${EC2_PUBLIC_SERVICE_PROTOCOL}://${EC2_PUBLIC_SERVICE_HOST}:${EC2_PORT}/services/Cloud" \
--adminurl "${EC2_INTERNAL_SERVICE_PROTOCOL}://${EC2_ADMIN_SERVICE_HOST}:${EC2_PORT}/services/Admin" \
--internalurl "${EC2_ADMIN_SERVICE_PROTOCOL}://${EC2_INTERNAL_SERVICE_HOST}:${EC2_PORT}/services/Cloud"
keystone endpoint-create \
--region ${REGION} \
--service_id ${GLANCE_SERVICE} \
--publicurl "${GLANCE_PUBLIC_SERVICE_PROTOCOL}://${GLANCE_PUBLIC_SERVICE_HOST}:${GLANCE_API_PORT}" \
--adminurl "${GLANCE_ADMIN_SERVICE_PROTOCOL}://${GLANCE_INTERNAL_SERVICE_HOST}:${GLANCE_API_PORT}" \
--internalurl "${GLANCE_INTERNAL_SERVICE_PROTOCOL}://${GLANCE_ADMIN_SERVICE_HOST}:${GLANCE_API_PORT}"
keystone endpoint-create \
--region ${REGION} \
--service_id ${KEYSTONE_SERVICE} \
--publicurl "${KEYSTONE_PUBLIC_SERVICE_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_PORT}/${IDENTITY_API_VERSION}" \
--adminurl "${KEYSTONE_ADMIN_SERVICE_PROTOCOL}://${KEYSTONE_INTERNAL_SERVICE_HOST}:${KEYSTONE_ADMIN_PORT}/${IDENTITY_API_VERSION}" \
--internalurl "${KEYSTONE_INTERNAL_SERVICE_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_PUBLIC_PORT}/${IDENTITY_API_VERSION}"
keystone endpoint-create \
--region ${REGION} \
--service_id ${CINDER_SERVICE} \
--publicurl "${CINDER_PUBLIC_SERVICE_PROTOCOL}://${CINDER_PUBLIC_SERVICE_HOST}:${CINDER_PORT}/v1/\$(tenant_id)s" \
--adminurl "${CINDER_ADMIN_SERVICE_PROTOCOL}://${CINDER_ADMIN_SERVICE_HOST}:${CINDER_PORT}/v1/\$(tenant_id)s" \
--internalurl "${CINDER_INTERNAL_SERVICE_PROTOCOL}://${CINDER_INTERNAL_SERVICE_HOST}:${CINDER_PORT}/v1/\$(tenant_id)s"
keystone endpoint-create \
--region ${REGION} \
--service_id ${CINDER_V2_SERVICE} \
--publicurl "${CINDER_PUBLIC_SERVICE_PROTOCOL}://${CINDER_PUBLIC_SERVICE_HOST}:${CINDER_PORT}/v2/\$(tenant_id)s" \
--adminurl "${CINDER_ADMIN_SERVICE_PROTOCOL}://${CINDER_ADMIN_SERVICE_HOST}:${CINDER_PORT}/v2/\$(tenant_id)s" \
--internalurl "${CINDER_INTERNAL_SERVICE_PROTOCOL}://${CINDER_INTERNAL_SERVICE_HOST}:${CINDER_PORT}/v2/\$(tenant_id)s" \
keystone endpoint-create \
--region ${REGION} \
--service_id ${NEUTRON_SERVICE} \
--publicurl "${NEUTRON_PUBLIC_SERVICE_PROTOCOL}://${NEUTRON_PUBLIC_SERVICE_HOST}:${NEUTRON_PORT}" \
--adminurl "${NEUTRON_ADMIN_SERVICE_PROTOCOL}://${NEUTRON_INTERNAL_SERVICE_HOST}:${NEUTRON_PORT}" \
--internalurl "${NEUTRON_INTERNAL_SERVICE_PROTOCOL}://${NEUTRON_ADMIN_SERVICE_HOST}:${NEUTRON_PORT}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment