#!/usr/bin/env bash # This script will create the needed services and endpoints that need to be entered into MySQL instead of just # the default catalog template we're currently using. By setting the OS_SERVICE_xxxx environment variables we # simply call 'keystone service-create' and 'keystone endpoint-create' which will add the respective values to # the 'service' and 'endpoint' tables in the keystone database. # # By having these values in the database, we can then call the 'keystone service-* and keystone endpoint-*' # functions which Rally and Tempest need. It causes no issues with continuing to use the template catalog. # Place and run on specific head node since that is where each keystone is located. # sudo chmod +x keystone_populate.sh # Pass in the following parameters: (these are positional parameters so make sure they are all there and in order) # $1 - Token used for installing Keystone. This can be found in the default.template.catalog under admin_token # $2 - The head node IP (not the VIP IP) that the script is running on # $3 - Region (i.e. CNJ1, etc) # $4 - Keystone VIP IP (usually xxx.xxx.xxx.5 in our configuration) # $5 - Ceph S3 Host IP (usually xxx.xxx.144.5 in our configuration) # Example: ./keystone_populate.sh if test "$Argc" -ne 5 { echo "Must pass in 5 parameters in order: " exit 1 } global TOKEN := $1 global IP := $2 global KEYSTONE_REGION := $3 global KEYSTONE_HOST := $4 global CEPH_S3_HOST := $5 export OS_SERVICE_TOKEN=$(TOKEN) if test $(IP) = $(KEYSTONE_HOST) { export OS_SERVICE_ENDPOINT="https://$(IP):35357/v2.0" } else { export OS_SERVICE_ENDPOINT="http://$(IP):35357/v2.0" } # Grab a numbered field from python prettytable output # Fields are numbered starting with 1 # get_field field-number # Get the individual value from a delimited line (not a complete output) proc get_field { # The following line was used for testing and is not valid for actual use. #IFS='|' read -ra COL <<< "$1" env IFS='|' read -ra COL echo $[trim $(COL[$1])] } # Utility function for trimming the value passed proc trim { echo $(1//[[:blank:]]/) } # There are two steps below. The first, keystone service-create, creates the base database record for the given # service and returns the uuid needed for the endpoint association. The second, keystone endpoint-create, uses then # uuid returned from step one and creates the endpoints to match those that are found in # default.template.catalog in /etc/keystone. If need be, you can delete the service from the database by calling # keystone service-delete uuid (note: uuid actually the real id from from running keystone service-list - just # look for the specific service you're wanting to delete to get the right uuid (id) value. To run any of those commands # you need the service token and service endpoint (see the export lines above on what it needs and how it works). # Don't forget to unset the OS_SERVICE... environment variables after use. # Check first before attempting to create service global check := $[keystone service-list | grep 'compute] if [[ -z ${check} ]] { global COMPUTE_SERVICE := $[keystone service-create --name 'Computer Service' --type compute --description 'OpenStack Compute Service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'volume] if [[ -z ${check} ]] { global VOLUME_SERVICE := $[keystone service-create --name 'Volume Service' --type volume --description 'OpenStack Volume Service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'object-store] if [[ -z ${check} ]] { global OBJECT_SERVICE := $[keystone service-create --name 'Object Store Service' --type object-store --description 'OpenStack Object Storage Service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'image] if [[ -z ${check} ]] { global IMAGE_SERVICE := $[keystone service-create --name 'Image Service' --type image --description 'OpenStack Image Service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'identity] if [[ -z ${check} ]] { # Had to change --name to 'keystone' so rally would work! Hardcoded values in Rally! global IDENTITY_SERVICE := $[keystone service-create --name 'keystone' --type identity --description 'OpenStack Identity' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'ec2] if [[ -z ${check} ]] { global EC2_SERVICE := $[keystone service-create --name 'EC2 Service' --type ec2 --description 'OpenStack EC2 service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'orchestration] if [[ -z ${check} ]] { global ORCHESTRATION_SERVICE := $[keystone service-create --name 'Orchestration Service' --type orchestration --description 'OpenStack Orchestration service' | grep " id " | get_field 2] } global check := $[keystone service-list | grep 'cloudformation] if [[ -z ${check} ]] { global CLOUD_FORMATION_SERVICE := $[keystone service-create --name 'Cloudformation Service' --type cloudformation --description 'OpenStack Cloudformation service' | grep " id " | get_field 2] } # Create endpoints - Output in pretty table format will show unless you want to re-direct output. if [[ -z ${COMPUTE_SERVICE} ]] { echo 'Compute Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(COMPUTE_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':8774/v1.1/$(tenant_id)s' --adminurl 'https://'$(KEYSTONE_HOST)':8774/v1.1/$(tenant_id)s' --internalurl 'https://'$(KEYSTONE_HOST)':8774/v1.1/$(tenant_id)s' } if [[ -z ${VOLUME_SERVICE} ]] { echo 'Volume Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(VOLUME_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':8776/v1/$(tenant_id)s' --adminurl 'https://'$(KEYSTONE_HOST)':8776/v1/$(tenant_id)s' --internalurl 'https://'$(KEYSTONE_HOST)':8776/v1/$(tenant_id)s' } if [[ -z ${OBJECT_SERVICE} ]] { echo 'Object Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(OBJECT_SERVICE) --publicurl 'http://'$(CEPH_S3_HOST)'/swift/v1' --adminurl 'http://'$(CEPH_S3_HOST)'/swift/v1' --internalurl 'http://'$(CEPH_S3_HOST)'/swift/v1' } if [[ -z ${IMAGE_SERVICE} ]] { echo 'Image Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(IMAGE_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':9292/v1' --adminurl 'https://'$(KEYSTONE_HOST)':9292/v1' --internalurl 'https://'$(KEYSTONE_HOST)':9292/v1' } if [[ -z ${IDENTITY_SERVICE} ]] { echo 'Identity Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(IDENTITY_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':5000/v2.0' --adminurl 'https://'$(KEYSTONE_HOST)':35357/v2.0' --internalurl 'https://'$(KEYSTONE_HOST)':5000/v2.0' } if [[ -z ${EC2_SERVICE} ]] { echo 'EC2 Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(EC2_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':8773/services/Cloud' --adminurl 'https://'$(KEYSTONE_HOST)':8773/services/Admin' --internalurl 'https://'$(KEYSTONE_HOST)':8773/services/Cloud' } if [[ -z ${ORCHESTRATION_SERVICE} ]] { echo 'Orchestration Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(ORCHESTRATION_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':8004/v1/$(tenant_id)s' --adminurl 'https://'$(KEYSTONE_HOST)':8004/v1/$(tenant_id)s' --internalurl 'https://'$(KEYSTONE_HOST)':8004/v1/$(tenant_id)s' } if [[ -z ${CLOUD_FORMATION_SERVICE} ]] { echo 'Cloudformation Service exists or not created.' } else { keystone endpoint-create --region $(KEYSTONE_REGION) --service-id $(CLOUD_FORMATION_SERVICE) --publicurl 'https://'$(KEYSTONE_HOST)':8000/v1' --adminurl 'https://'$(KEYSTONE_HOST)':8000/v1' --internalurl 'https://'$(KEYSTONE_HOST)':8000/v1' } unset OS_SERVICE_TOKEN unset OS_SERVICE_ENDPOINT (CommandList children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(DQ ($ VSub_Pound "$#"))} {(-ne)} {(5)} {(Lit_Other "]")}) terminator: ) ] action: [ (C {(echo)} { (DQ ( "Must pass in 5 parameters in order: " ) ) } ) (C {(exit)} {(1)}) ] spids: [-1 69] ) ] spids: [-1 83] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:TOKEN) op:Equal rhs:{($ VSub_Number "$1")} spids:[86])] spids: [86] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:IP) op:Equal rhs:{($ VSub_Number "$2")} spids:[89])] spids: [89] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:KEYSTONE_REGION) op: Equal rhs: {($ VSub_Number "$3")} spids: [92] ) ] spids: [92] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:KEYSTONE_HOST) op: Equal rhs: {($ VSub_Number "$4")} spids: [95] ) ] spids: [95] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CEPH_S3_HOST) op: Equal rhs: {($ VSub_Number "$5")} spids: [98] ) ] spids: [98] ) (C {(export)} {(Lit_VarLike "OS_SERVICE_TOKEN=") (${ VSub_Name TOKEN)}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {(${ VSub_Name IP)} {(Lit_Other "=")} {(${ VSub_Name KEYSTONE_HOST)} {(Lit_Other "]")} ) terminator: ) ] action: [ (C {(export)} {(Lit_VarLike "OS_SERVICE_ENDPOINT=") (DQ ("https://") (${ VSub_Name IP) (":35357/v2.0")) } ) ] spids: [-1 127] ) ] else_action: [ (C {(export)} {(Lit_VarLike "OS_SERVICE_ENDPOINT=") (DQ ("http://") (${ VSub_Name IP) (":35357/v2.0"))} ) ] spids: [141 155] ) (FuncDef name: get_field body: (BraceGroup children: [ (SimpleCommand words: [{(read)} {(-ra)} {(COL)}] more_env: [(env_pair name:IFS val:{(SQ <"|">)} spids:[185])] ) (C {(echo)} { (CommandSubPart command_list: (CommandList children: [ (C {(trim)} { (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Number "$1")})) spids: [202 207] ) } ) ] ) left_token: spids: [199 208] ) } ) ] spids: [174] ) spids: [170 173] ) (FuncDef name: trim body: (BraceGroup children: [ (C {(echo)} { (BracedVarSub token: suffix_op: (PatSub pat: {("[[:blank:]]")} replace: {} do_all: True do_prefix: False do_suffix: False ) spids: [226 232] ) } ) ] spids: [221] ) spids: [217 220] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [266 278] ) } spids: [265] ) ] spids: [265] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:COMPUTE_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Computer Service">)} {(--type)} {(compute)} {(--description)} {(SQ <"OpenStack Compute Service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [297 331] ) } spids: [296] ) ] spids: [296] ) ] spids: [-1 293] ) ] spids: [-1 333] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [337 349] ) } spids: [336] ) ] spids: [336] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:VOLUME_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Volume Service">)} {(--type)} {(volume)} {(--description)} {(SQ <"OpenStack Volume Service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [368 402] ) } spids: [367] ) ] spids: [367] ) ] spids: [-1 364] ) ] spids: [-1 404] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [408 420] ) } spids: [407] ) ] spids: [407] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:OBJECT_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Object Store Service">)} {(--type)} {(object-store)} {(--description)} {(SQ <"OpenStack Object Storage Service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [439 473] ) } spids: [438] ) ] spids: [438] ) ] spids: [-1 435] ) ] spids: [-1 475] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [479 491] ) } spids: [478] ) ] spids: [478] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IMAGE_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Image Service">)} {(--type)} {(image)} {(--description)} {(SQ <"OpenStack Image Service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [510 544] ) } spids: [509] ) ] spids: [509] ) ] spids: [-1 506] ) ] spids: [-1 546] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [550 562] ) } spids: [549] ) ] spids: [549] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:IDENTITY_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ )} {(--type)} {(identity)} {(--description)} {(SQ <"OpenStack Identity">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [585 619] ) } spids: [584] ) ] spids: [584] ) ] spids: [-1 577] ) ] spids: [-1 621] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [625 637] ) } spids: [624] ) ] spids: [624] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:EC2_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"EC2 Service">)} {(--type)} {(ec2)} {(--description)} {(SQ <"OpenStack EC2 service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [656 690] ) } spids: [655] ) ] spids: [655] ) ] spids: [-1 652] ) ] spids: [-1 692] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [696 708] ) } spids: [695] ) ] spids: [695] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ORCHESTRATION_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Orchestration Service">)} {(--type)} {(orchestration)} {(--description)} {(SQ <"OpenStack Orchestration service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [727 761] ) } spids: [726] ) ] spids: [726] ) ] spids: [-1 723] ) ] spids: [-1 763] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:check) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [(C {(keystone)} {(service-list)}) (C {(grep)} {(SQ )})] negated: False ) ] ) left_token: spids: [767 779] ) } spids: [766] ) ] spids: [766] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name check)})) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CLOUD_FORMATION_SERVICE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(keystone)} {(service-create)} {(--name)} {(SQ <"Cloudformation Service">)} {(--type)} {(cloudformation)} {(--description)} {(SQ <"OpenStack Cloudformation service">)} ) (C {(grep)} {(DQ (" id "))}) (C {(get_field)} {(2)}) ] negated: False ) ] ) left_token: spids: [798 832] ) } spids: [797] ) ] spids: [797] ) ] spids: [-1 794] ) ] spids: [-1 834] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name COMPUTE_SERVICE)}) ) terminator: ) ] action: [(C {(echo)} {(SQ <"Compute Service exists or not created.">)})] spids: [-1 853] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name COMPUTE_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8774/v1.1/$(tenant_id)s">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8774/v1.1/$(tenant_id)s">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8774/v1.1/$(tenant_id)s">)} ) ] spids: [862 917] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name VOLUME_SERVICE)})) terminator: ) ] action: [(C {(echo)} {(SQ <"Volume Service exists or not created.">)})] spids: [-1 933] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name VOLUME_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8776/v1/$(tenant_id)s">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8776/v1/$(tenant_id)s">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8776/v1/$(tenant_id)s">)} ) ] spids: [942 997] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name OBJECT_SERVICE)})) terminator: ) ] action: [(C {(echo)} {(SQ <"Object Service exists or not created.">)})] spids: [-1 1013] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name OBJECT_SERVICE)} {(--publicurl)} {(SQ <"http://">) (${ VSub_Name CEPH_S3_HOST) (SQ )} {(--adminurl)} {(SQ <"http://">) (${ VSub_Name CEPH_S3_HOST) (SQ )} {(--internalurl)} {(SQ <"http://">) (${ VSub_Name CEPH_S3_HOST) (SQ )} ) ] spids: [1022 1077] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name IMAGE_SERVICE)})) terminator: ) ] action: [(C {(echo)} {(SQ <"Image Service exists or not created.">)})] spids: [-1 1093] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name IMAGE_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":9292/v1">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":9292/v1">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":9292/v1">)} ) ] spids: [1102 1157] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name IDENTITY_SERVICE)}) ) terminator: ) ] action: [(C {(echo)} {(SQ <"Identity Service exists or not created.">)})] spids: [-1 1173] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name IDENTITY_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":5000/v2.0">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":35357/v2.0">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":5000/v2.0">)} ) ] spids: [1182 1237] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr:(BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name EC2_SERVICE)})) terminator: ) ] action: [(C {(echo)} {(SQ <"EC2 Service exists or not created.">)})] spids: [-1 1253] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name EC2_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8773/services/Cloud">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8773/services/Admin">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8773/services/Cloud">)} ) ] spids: [1262 1317] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name ORCHESTRATION_SERVICE)}) ) terminator: ) ] action: [(C {(echo)} {(SQ <"Orchestration Service exists or not created.">)})] spids: [-1 1333] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name ORCHESTRATION_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8004/v1/$(tenant_id)s">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8004/v1/$(tenant_id)s">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8004/v1/$(tenant_id)s">)} ) ] spids: [1342 1397] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name CLOUD_FORMATION_SERVICE)}) ) terminator: ) ] action: [(C {(echo)} {(SQ <"Cloudformation Service exists or not created.">)})] spids: [-1 1413] ) ] else_action: [ (C {(keystone)} {(endpoint-create)} {(--region)} {(${ VSub_Name KEYSTONE_REGION)} {(--service-id)} {(${ VSub_Name CLOUD_FORMATION_SERVICE)} {(--publicurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8000/v1">)} {(--adminurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8000/v1">)} {(--internalurl)} {(SQ <"https://">) (${ VSub_Name KEYSTONE_HOST) (SQ <":8000/v1">)} ) ] spids: [1422 1477] ) (C {(unset)} {(OS_SERVICE_TOKEN)}) (C {(unset)} {(OS_SERVICE_ENDPOINT)}) ] )