Skip to content

Instantly share code, notes, and snippets.

@ishikawa84g
Last active August 29, 2015 14:01
Show Gist options
  • Save ishikawa84g/b769460ba6f38fc24cfd to your computer and use it in GitHub Desktop.
Save ishikawa84g/b769460ba6f38fc24cfd to your computer and use it in GitHub Desktop.
DevStackから抜いたKeystone初期ユーザ等の設定スクリプト。Endpointはあっている・・・はず。
#!/bin/bash
# -----------
# Defaults
# -----------
SERVICE_PROJECT=service
ADMIN_PROJECT=admin
DEMO_PROJECT=demo
ADMIN_ROLE=admin
MEMBER_ROLE=_member_
HEAT_OWNER_ROLE=heat_stack_owner
# SERVIVCE PASSWORD
ADMIN_PASSWORD=YOUR_PASSWORD
DEMO_PASSWORD=YOUR_PASSWORD
NOVA_PASSWORD=YOUR_PASSWORD
GLANCE_PASSWORD=YOUR_PASSWORD
CINDER_PASSWORD=YOUR_PASSWORD
NEUTRON_PASSWORD=YOUR_PASSWORD
CEILOMETER_PASSWORD=YOUR_PASSWORD
HEAT_PASSWORD=YOUR_PASSWORD
# SERVICE USER
ADMIN_USER=admin
DEMO_USER=demo
NOVA_USER=nova
GLANCE_USER=glance
CINDER_USER=cinder
NEUTRON_USER=neutron
CEILOMETER_USER=ceilometer
HEAT_USER=heat
# 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
CEILOMETER_EMAIL=ceilometer@localhost.localdomain
HEAT_EMAIL=heat@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
CEILOMETER_PUBLIC_SERVICE_PROTOCOL=http
CEILOMETER_ADMIN_SERVICE_PROTOCOL=http
CEILOMETER_INTERNAL_SERVICE_PROTOCOL=http
HEAT_API_PUBLIC_SERVICE_PROTOCOL=http
HEAT_API_ADMIN_SERVICE_PROTOCOL=http
HEAT_API_INTERNAL_SERVICE_PROTOCOL=http
HEAT_CFN_PUBLIC_SERVICE_PROTOCOL=http
HEAT_CFN_ADMIN_SERVICE_PROTOCOL=http
HEAT_CFN_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
CINDER_PORT=8776
NEUTRON_PORT=9696
CEILOMETER_PORT=8777
HEAT_API_PORT=8004
HEAT_API_CFN_PORT=8000
# IDENTITY
IDENTITY_API_VERSION=2.0
REGION=RegionOne
# SERVICE HOST ADDRESS
NOVA_PUBLIC_SERVICE_HOST=127.0.0.1
NOVA_ADMIN_SERVICE_HOST=127.0.0.1
NOVA_INTERNAL_SERVICE_HOST=127.0.0.1
EC2_PUBLIC_SERVICE_HOST=127.0.0.1
EC2_ADMIN_SERVICE_HOST=127.0.0.1
EC2_INTERNAL_SERVICE_HOST=127.0.0.1
GLANCE_PUBLIC_SERVICE_HOST=127.0.0.1
GLANCE_ADMIN_SERVICE_HOST=127.0.0.1
GLANCE_INTERNAL_SERVICE_HOST=127.0.0.1
KEYSTONE_PUBLIC_SERVICE_HOST=127.0.0.1
KEYSTONE_ADMIN_SERVICE_HOST=127.0.0.1
KEYSTONE_INTERNAL_SERVICE_HOST=127.0.0.1
CINDER_PUBLIC_SERVICE_HOST=127.0.0.1
CINDER_ADMIN_SERVICE_HOST=127.0.0.1
CINDER_INTERNAL_SERVICE_HOST=127.0.0.1
NEUTRON_PUBLIC_SERVICE_HOST=127.0.0.1
NEUTRON_ADMIN_SERVICE_HOST=127.0.0.1
NEUTRON_INTERNAL_SERVICE_HOST=127.0.0.1
CEILOMETER_PUBLIC_SERVICE_HOST=127.0.0.1
CEILOMETER_ADMIN_SERVICE_HOST=127.0.0.1
CEILOMETER_INTERNAL_SERVICE_HOST=127.0.0.1
HEAT_API_PUBLIC_SERVICE_HOST=127.0.0.1
HEAT_API_ADMIN_SERVICE_HOST=127.0.0.1
HEAT_API_INTERNAL_SERVICE_HOST=127.0.0.1
HEAT_CFN_PUBLIC_SERVICE_HOST=127.0.0.1
HEAT_CFN_ADMIN_SERVICE_HOST=127.0.0.1
HEAT_CFN_INTERNAL_SERVICE_HOST=127.0.0.1
# export OS_TOKEN=999888777666
# export OS_URL=http://127.0.0.1:35357/v2.0
# OR openstack --os-token $OS_TOKEN --os-url $OS_URL
# --------------------------------------
# Functions
# --------------------------------------
function get_field {
while read data; do
if [ "$1" -lt 0 ]; then
field="(\$(NF$1))"
else
field="\$$(($1 + 1))"
fi
echo "$data" | awk -F'[ \t]*\\|[ \t]*' "{print $field}"
done
}
# --------------------------------------
# Roles
# --------------------------------------
openstack role create $ADMIN_ROLE
#openstack role create $MEMBER_ROLE
# --------------------------------------
# Projects
# --------------------------------------
openstack project create $ADMIN_PROJECT
openstack project create $DEMO_PROJECT
openstack project create $SERVICE_PROJECT
# --------------------------------------
# Users
# --------------------------------------
openstack user create --project $ADMIN_PROJECT --email $ADMIN_EMAIL --password $ADMIN_PASSWORD $ADMIN_USER
openstack user create --project $DEMO_PROJECT --email $DEMO_EMAIL --password $DEMO_PASSWORD $DEMO_USER
# --------------------------------------
# Service Users
# --------------------------------------
openstack user create --password $NOVA_PASSWORD --project $SERVICE_PROJECT --email $NOVA_EMAIL $NOVA_USER
openstack user create --password $GLANCE_PASSWORD --project $SERVICE_PROJECT --email $GLANCE_EMAIL $GLANCE_USER
openstack user create --password $CINDER_PASSWORD --project $SERVICE_PROJECT --email $CINDER_EMAIL $CINDER_USER
openstack user create --password $NEUTRON_PASSWORD --project $SERVICE_PROJECT --email $NEUTRON_EMAIL $NEUTRON_USER
openstack user create --password $CEILOMETER_PASSWORD --project $SERVICE_PROJECT --email $CEILOMETER_EMAIL $CEILOMETER_USER
openstack user create --password $HEAT_PASSWORD --project $SERVICE_PROJECT --email $HEAT_EMAIL $HEAT_USER
# --------------------------------------
# Role add
# --------------------------------------
openstack role add --project $ADMIN_PROJECT --user $ADMIN_USER $ADMIN_ROLE
openstack role add --project $DEMO_PROJECT --user $ADMIN_USER $ADMIN_ROLE
#openstack role add --project $DEMO_PROJECT --user $DEMO_USER $MEMBER_ROLE
openstack role add --project $SERVICE_PROJECT --user $NOVA_USER $ADMIN_ROLE
openstack role add --project $SERVICE_PROJECT --user $GLANCE_USER $ADMIN_ROLE
openstack role add --project $SERVICE_PROJECT --user $CINDER_USER $ADMIN_ROLE
openstack role add --project $SERVICE_PROJECT --user $NEUTRON_USER $ADMIN_ROLE
openstack role add --project $SERVICE_PROJECT --user $CEILOMETER_USER $ADMIN_ROLE
openstack role add --project $SERVICE_PROJECT --user $HEAT_USER $ADMIN_ROLE
# --------------------------------------
# Service
# --------------------------------------
openstack service create --type=compute --description="Nova Compute Service" nova
openstack service create --type=computev3 --description="Nova Compute Service V3" novav3
openstack service create --type ec2 --description "EC2 Compatibility Layer" ec2
openstack service create --type image --description "Glance Image Service" glance
openstack service create --type identity --description "Keystone Identity Service" keystone
openstack service create --type=volume --description="Cinder Volume Service" cinder
openstack service create --type=volumev2 --description="Cinder Volume Service V2" cinderv2
openstack service create --type=network --description="Neutron Service" neutron
openstack service create --type=metering --description="OpenStack Telemetry Service" ceilometer
HEAT_SERVICE=$(openstack service create --type=orchestration --description="Heat Orchestration Service" heat | grep " id " | get_field 2)
HEAT_CFN_SERVICE=$(openstack service create --type=cloudformation --description="Heat CloudFormation Service" heat | grep " id " | get_field 2)
# --------------------------------------
# Endpoint
# --------------------------------------
# Nova
openstack endpoint create \
--region $REGION \
--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" \
nova
openstack endpoint create \
--region $REGION \
--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" \
novav3
# EC2
openstack endpoint create \
--region $REGION \
--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" \
ec2
# Glance
openstack endpoint create \
--region $REGION \
--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}" \
glance
# Keystone
openstack endpoint create \
--region $REGION \
--publicurl "${KEYSTONE_PUBLIC_SERVICE_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_PORT}/v${IDENTITY_API_VERSION}" \
--adminurl "${KEYSTONE_ADMIN_SERVICE_PROTOCOL}://${KEYSTONE_INTERNAL_SERVICE_HOST}:${KEYSTONE_ADMIN_PORT}/v${IDENTITY_API_VERSION}" \
--internalurl "${KEYSTONE_INTERNAL_SERVICE_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_PUBLIC_PORT}/v${IDENTITY_API_VERSION}" \
keystone
# Cinder
openstack endpoint create \
--region $REGION \
--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" \
cinder
openstack endpoint create \
--region $REGION \
--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" \
cinderv2
# Neutron
openstack endpoint create \
--region $REGION \
--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}" \
neutron
# Ceilometer
openstack endpoint create \
--region $REGION \
--publicurl "$CEILOMETER_PUBLIC_SERVICE_PROTOCOL://$CEILOMETER_PUBLIC_SERVICE_HOST:$CEILOMETER_PORT" \
--adminurl "$CEILOMETER_ADMIN_SERVICE_PROTOCOL://$CEILOMETER_ADMIN_SERVICE_HOST:$CEILOMETER_PORT" \
--internalurl "$CEILOMETER_INTERNAL_SERVICE_PROTOCOL://$CEILOMETER_INTERNAL_SERVICE_HOST:$CEILOMETER_PORT" \
ceilometer
# Heat
openstack endpoint create \
--region $REGION \
--publicurl "$HEAT_API_PUBLIC_SERVICE_PROTOCOL://$HEAT_API_PUBLIC_SERVICE_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \
--adminurl "$HEAT_API_ADMIN_SERVICE_PROTOCOL://$HEAT_API_ADMIN_SERVICE_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \
--internalurl "$HEAT_API_INTERNAL_SERVICE_PROTOCOL://$HEAT_API_INTERNAL_SERVICE_HOST:$HEAT_API_PORT/v1/\$(tenant_id)s" \
$HEAT_SERVICE
openstack endpoint create \
--region $REGION \
--publicurl "$HEAT_CFN_PUBLIC_SERVICE_PROTOCOL://$HEAT_CFN_PUBLIC_SERVICE_HOST:$HEAT_API_CFN_PORT/v1" \
--adminurl "$HEAT_CFN_ADMIN_SERVICE_PROTOCOL://$HEAT_CFN_ADMIN_SERVICE_HOST:$HEAT_API_CFN_PORT/v1" \
--internalurl "$HEAT_CFN_INTERNAL_SERVICE_PROTOCOL://$HEAT_CFN_INTERNAL_SERVICE_HOST:$HEAT_API_CFN_PORT/v1" \
$HEAT_CFN_SERVICE
# --------------------------------------
# EC2 Credentials ?
# --------------------------------------
#openstack ec2 credentials create --user nova --project $SERVICE_PROJECT -f shell -c access -c secret
# --------------------------------------
# deferred_auth_method = trusts ?
# --------------------------------------
#openstack role create $HEAT_OWNER_ROLE
#openstack role add $HEAT_OWNER_ROLE --project $DEMO_PROJECT --user $DEMO_USER
#openstack role add $HEAT_OWNER_ROLE --project $DEMO_PROJECT --user $ADMIN_USER
#openstack role add $HEAT_OWNER_ROLE --project $ADMIN_PROJECT --user $ADMIN_USER
#KS_ENDPOINT_V3="$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v3"
#D_ID=$(openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-identity-api-version=3 domain create heat --description "Owns users and projects created by heat" | grep ' id ' | get_field 2)
#openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-identity-api-version=3 user create --password $SERVICE_PASSWORD --domain $D_ID heat_domain_admin --description "Manages users and projects created by heat"
#openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-identity-api-version=3 role add --user heat_domain_admin --domain ${D_ID} admin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment