Fix Keystone v3 and Horizon

After our switch to keystone-manage bootstrap Horizon is not happy
due to v3 not being setup correctly. This patch fixes that

This also includes removal of unused variables (transforms them into
endpoint url variables)

TrivialFix
Change-Id: I1e04db8c24049f80e974c063f03068a2ab32a563
This commit is contained in:
SamYaple 2016-03-01 14:38:47 +00:00
parent a2fe37fe89
commit 57124620ab
30 changed files with 151 additions and 180 deletions

View File

@ -162,14 +162,6 @@ openstack_auth:
password: "{{ keystone_admin_password }}" password: "{{ keystone_admin_password }}"
project_name: "admin" project_name: "admin"
# This shouldn't be needed for long. It is only temporary until we get the
# ansible modules sorted out
openstack_auth_v2:
auth_url: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v2.0"
username: "admin"
password: "{{ keystone_admin_password }}"
project_name: "admin"
# These roles are required for Kolla to be operation, however a savvy deployer # These roles are required for Kolla to be operation, however a savvy deployer
# could disable some of these required roles and run their own services. # could disable some of these required roles and run their own services.
enable_glance: "yes" enable_glance: "yes"

View File

@ -50,12 +50,12 @@ cinder_api_image_full: "{{ cinder_api_image }}:{{ cinder_api_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
cinder_public_address: "{{ kolla_external_fqdn }}" cinder_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s"
cinder_admin_address: "{{ kolla_internal_fqdn }}" cinder_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s"
cinder_internal_address: "{{ kolla_internal_fqdn }}" cinder_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s"
cinder_logging_debug: "{{ openstack_logging_debug }}" cinder_logging_debug: "{{ openstack_logging_debug }}"
cinder_keystone_user: "cinder" cinder_keystone_user: "cinder"
openstack_cinder_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_cinder_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -2,33 +2,12 @@
- name: Creating the Cinder service and endpoint - name: Creating the Cinder service and endpoint
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-m kolla_keystone_service -m kolla_keystone_service
-a "service_name=cinder -a "service_name={{ item.service_name }}
service_type=volume service_type={{ item.service_type }}
description='Openstack Block Storage' description='Openstack Block Storage'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s'
region_name={{ openstack_region_name }}
auth={{ '{{ openstack_cinder_auth }}' }}"
-e "{'openstack_cinder_auth':{{ openstack_cinder_auth }}}"
register: cinder_endpoint
changed_when: "{{ cinder_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (cinder_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
until: cinder_endpoint.stdout.split()[2] == 'SUCCESS'
retries: 10
delay: 5
run_once: True
- name: Creating the Cinder v2 service and endpoint
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-m kolla_keystone_service
-a "service_name=cinderv2
service_type=volumev2
description='Openstack Block Storage'
endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_cinder_auth }}' }}" auth={{ '{{ openstack_cinder_auth }}' }}"
-e "{'openstack_cinder_auth':{{ openstack_cinder_auth }}}" -e "{'openstack_cinder_auth':{{ openstack_cinder_auth }}}"
@ -38,6 +17,13 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ cinder_admin_endpoint }}', 'service_name': 'cinder', 'service_type': 'volume'}
- {'interface': 'internal', 'url': '{{ cinder_internal_endpoint }}', 'service_name': 'cinder', 'service_type': 'volume'}
- {'interface': 'public', 'url': '{{ cinder_public_endpoint }}', 'service_name': 'cinder', 'service_type': 'volume'}
- {'interface': 'admin', 'url': '{{ cinder_admin_endpoint }}', 'service_name': 'cinderv2', 'service_type': 'volumev2'}
- {'interface': 'internal', 'url': '{{ cinder_internal_endpoint }}', 'service_name': 'cinderv2', 'service_type': 'volumev2'}
- {'interface': 'public', 'url': '{{ cinder_public_endpoint }}', 'service_name': 'cinderv2', 'service_type': 'volumev2'}
- name: Creating the Cinder project, user, and role - name: Creating the Cinder project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -37,12 +37,12 @@ glance_api_image_full: "{{ glance_api_image }}:{{ glance_api_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
glance_public_address: "{{ kolla_external_fqdn }}" glance_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ glance_api_port }}"
glance_admin_address: "{{ kolla_internal_fqdn }}" glance_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ glance_api_port }}"
glance_internal_address: "{{ kolla_internal_fqdn }}" glance_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ glance_api_port }}"
glance_logging_debug: "{{ openstack_logging_debug }}" glance_logging_debug: "{{ openstack_logging_debug }}"
glance_keystone_user: "glance" glance_keystone_user: "glance"
openstack_glance_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_glance_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}','domain_name':'default'}"

View File

@ -6,9 +6,8 @@
service_type=image service_type=image
description='Openstack Image' description='Openstack Image'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ glance_api_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ glance_api_port }}' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ glance_api_port }}'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_glance_auth }}' }}" auth={{ '{{ openstack_glance_auth }}' }}"
-e "{'openstack_glance_auth':{{ openstack_glance_auth }}}" -e "{'openstack_glance_auth':{{ openstack_glance_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ glance_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ glance_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ glance_public_endpoint }}'}
- name: Creating the Glance project, user, and role - name: Creating the Glance project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -27,12 +27,15 @@ heat_engine_image_full: "{{ heat_engine_image }}:{{ heat_engine_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
heat_public_address: "{{ kolla_external_fqdn }}" heat_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_admin_address: "{{ kolla_internal_fqdn }}" heat_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_internal_address: "{{ kolla_internal_fqdn }}" heat_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_cfn_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_cfn_port }}/v1"
heat_cfn_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_cfn_port }}/v1"
heat_cfn_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_cfn_port }}/v1"
heat_logging_debug: "{{ openstack_logging_debug }}" heat_logging_debug: "{{ openstack_logging_debug }}"
heat_keystone_user: "heat" heat_keystone_user: "heat"
openstack_heat_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_heat_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,29 +6,8 @@
service_type=orchestration service_type=orchestration
description='Openstack Orchestration' description='Openstack Orchestration'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s'
region_name={{ openstack_region_name }}
auth={{ '{{ openstack_heat_auth }}' }}"
-e "{'openstack_heat_auth':{{ openstack_heat_auth }}}"
register: heat_endpoint
changed_when: "{{ heat_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (heat_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
until: heat_endpoint.stdout.split()[2] == 'SUCCESS'
retries: 10
delay: 5
run_once: True
- name: Creating the Heat-cfn service and endpoint
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-m kolla_keystone_service
-a "service_name=heat-cfn
service_type=orchestration
description='Openstack Orchestration'
endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_port }}/v1'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ heat_api_cfn_port }}/v1'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_cfn_port }}/v1'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_heat_auth }}' }}" auth={{ '{{ openstack_heat_auth }}' }}"
-e "{'openstack_heat_auth':{{ openstack_heat_auth }}}" -e "{'openstack_heat_auth':{{ openstack_heat_auth }}}"
@ -38,6 +17,13 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ heat_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ heat_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ heat_public_endpoint }}'}
- {'interface': 'admin', 'url': '{{ heat_cfn_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ heat_cfn_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ heat_cfn_public_endpoint }}'}
- name: Creating the Heat project, user, and role - name: Creating the Heat project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -32,10 +32,10 @@ ironic_pxe_image_full: "{{ ironic_pxe_image }}:{{ ironic_pxe_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
ironic_public_address: "{{ kolla_external_fqdn }}" ironic_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ ironic_api_port }}"
ironic_admin_address: "{{ kolla_internal_fqdn }}" ironic_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ ironic_api_port }}"
ironic_internal_address: "{{ kolla_internal_fqdn }}" ironic_admin_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ ironic_api_port }}"
ironic_logging_debug: "{{ openstack_logging_debug }}" ironic_logging_debug: "{{ openstack_logging_debug }}"
openstack_ironic_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_ironic_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=baremetal service_type=baremetal
description='Ironic bare metal provisioning service' description='Ironic bare metal provisioning service'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ ironic_admin_address }}:{{ ironic_api_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ ironic_internal_address }}:{{ ironic_api_port }}' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ ironic_public_address }}:{{ ironic_api_port }}'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_ironic_auth }}' }}" auth={{ '{{ openstack_ironic_auth }}' }}"
-e "{'openstack_ironic_auth':{{ openstack_ironic_auth }}}" -e "{'openstack_ironic_auth':{{ openstack_ironic_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ ironic_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ ironic_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ ironic_public_endpoint }}'}
- name: Creating the Ironic project, user, and role - name: Creating the Ironic project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -20,14 +20,8 @@ keystone_image_full: "{{ keystone_image }}:{{ keystone_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
keystone_public_address: "{{ kolla_external_fqdn }}" keystone_admin_url: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v3"
keystone_admin_address: "{{ kolla_internal_fqdn }}" keystone_internal_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }}/v3"
keystone_internal_address: "{{ kolla_internal_fqdn }}" keystone_public_url: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ keystone_public_port }}/v3"
keystone_admin_url: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}"
keystone_internal_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}"
keystone_public_url: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ keystone_public_port }}"
keystone_logging_debug: "{{ openstack_logging_debug }}" keystone_logging_debug: "{{ openstack_logging_debug }}"
openstack_keystone_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}"

View File

@ -10,4 +10,4 @@
- "kolla_logs:/var/log/kolla/" - "kolla_logs:/var/log/kolla/"
- name: Wait for keystone startup - name: Wait for keystone startup
wait_for: host={{ keystone_admin_address }} port={{ keystone_admin_port }} wait_for: host={{ kolla_internal_fqdn }} port={{ keystone_admin_port }}

View File

@ -23,12 +23,12 @@ magnum_conductor_image_full: "{{ magnum_conductor_image }}:{{ magnum_conductor_t
#################### ####################
# OpenStack # OpenStack
#################### ####################
magnum_public_address: "{{ kolla_external_fqdn }}" magnum_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1"
magnum_admin_address: "{{ kolla_internal_fqdn }}" magnum_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1"
magnum_internal_address: "{{ kolla_internal_fqdn }}" magnum_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ magnum_api_port }}/v1"
magnum_logging_debug: "{{ openstack_logging_debug }}" magnum_logging_debug: "{{ openstack_logging_debug }}"
magnum_keystone_user: "magnum" magnum_keystone_user: "magnum"
openstack_magnum_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_magnum_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=container service_type=container
description='Openstack Container Service' description='Openstack Container Service'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ magnum_api_port }}/v1'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_magnum_auth }}' }}" auth={{ '{{ openstack_magnum_auth }}' }}"
-e "{'openstack_magnum_auth':{{ openstack_magnum_auth }}}" -e "{'openstack_magnum_auth':{{ openstack_magnum_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ magnum_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ magnum_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ magnum_public_endpoint }}'}
- name: Creating the Magnum project, user, and role - name: Creating the Magnum project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -28,9 +28,12 @@ manila_api_image_full: "{{ manila_api_image }}:{{ manila_api_tag }}"
##################### #####################
## OpenStack ## OpenStack
##################### #####################
manila_public_address: "{{ kolla_external_fqdn }}" manila_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s"
manila_admin_address: "{{ kolla_internal_fqdn }}" manila_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s"
manila_internal_address: "{{ kolla_internal_fqdn }}" manila_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s"
manila_v2_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s"
manila_v2_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s"
manila_v2_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s"
manila_logging_debug: "{{ openstack_logging_debug }}" manila_logging_debug: "{{ openstack_logging_debug }}"
@ -38,5 +41,4 @@ manila_keystone_user: "manila"
manila_tenant_name: "manila_tenant" manila_tenant_name: "manila_tenant"
openstack_manila_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_manila_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,29 +6,8 @@
service_type=share service_type=share
description='Openstack Shared Filesystems' description='Openstack Shared Filesystems'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s'
region_name={{ openstack_region_name }}
auth={{ '{{ openstack_manila_auth }}' }}"
-e "{'openstack_manila_auth':{{ openstack_manila_auth }}}"
register: manila_endpoint
changed_when: "{{ manila_endpoint.stdout.find('localhost | SUCCESS => ') != -1 and (manila_endpoint.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed }}"
until: manila_endpoint.stdout.split()[2] == 'SUCCESS'
retries: 10
delay: 5
run_once: True
- name: Creating the Manila v2 service and endpoint
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost
-m kolla_keystone_service
-a "service_name=manilav2
service_type=sharev2
description='Openstack Shared Filesystems'
endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ manila_api_port }}/v2/%(tenant_id)s'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_manila_auth }}' }}" auth={{ '{{ openstack_manila_auth }}' }}"
-e "{'openstack_manila_auth':{{ openstack_manila_auth }}}" -e "{'openstack_manila_auth':{{ openstack_manila_auth }}}"
@ -38,6 +17,13 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ mistral_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ mistral_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ mistral_public_endpoint }}'}
- {'interface': 'admin', 'url': '{{ mistral_v2_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ mistral_v2_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ mistral_v2_public_endpoint }}'}
- name: Creating the Manila project, user and role - name: Creating the Manila project, user and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -28,12 +28,12 @@ mistral_api_image_full: "{{ mistral_api_image }}:{{ mistral_api_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
mistral_public_address: "{{ kolla_external_fqdn }}" mistral_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}"
mistral_admin_address: "{{ kolla_internal_fqdn }}" mistral_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}"
mistral_internal_address: "{{ kolla_internal_fqdn }}" mistral_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ mistral_api_port }}"
mistral_logging_debug: "{{ openstack_logging_debug }}" mistral_logging_debug: "{{ openstack_logging_debug }}"
mistral_keystone_user: "mistral" mistral_keystone_user: "mistral"
openstack_mistral_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_mistral_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=application_catalog service_type=application_catalog
description='Openstack Application Catalog' description='Openstack Application Catalog'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ mistral_api_port }}'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_mistral_auth }}' }}" auth={{ '{{ openstack_mistral_auth }}' }}"
-e "{'openstack_mistral_auth':{{ openstack_mistral_auth }}}" -e "{'openstack_mistral_auth':{{ openstack_mistral_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ mistral_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ mistral_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ mistral_public_endpoint }}'}
- name: Creating the Mistral project, user, and role - name: Creating the Mistral project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -24,12 +24,12 @@ murano_api_image_full: "{{ murano_api_image }}:{{ murano_api_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
murano_public_address: "{{ kolla_external_fqdn }}" murano_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}"
murano_admin_address: "{{ kolla_internal_fqdn }}" murano_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}"
murano_internal_address: "{{ kolla_internal_fqdn }}" murano_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ murano_api_port }}"
murano_logging_debug: "{{ openstack_logging_debug }}" murano_logging_debug: "{{ openstack_logging_debug }}"
murano_keystone_user: "murano" murano_keystone_user: "murano"
openstack_murano_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_murano_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=application_catalog service_type=application_catalog
description='Openstack Application Catalogue' description='Openstack Application Catalogue'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ murano_api_port }}'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_murano_auth }}' }}" auth={{ '{{ openstack_murano_auth }}' }}"
-e "{'openstack_murano_auth':{{ openstack_murano_auth }}}" -e "{'openstack_murano_auth':{{ openstack_murano_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ murano_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ murano_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ murano_public_endpoint }}'}
- name: Creating the Murano project, user, and role - name: Creating the Murano project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -48,12 +48,12 @@ openvswitch_vswitchd_image_full: "{{ openvswitch_vswitchd_image }}:{{ openvswitc
#################### ####################
# OpenStack # OpenStack
#################### ####################
neutron_public_address: "{{ kolla_external_fqdn }}" neutron_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ neutron_server_port }}"
neutron_admin_address: "{{ kolla_internal_fqdn }}" neutron_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ neutron_server_port }}"
neutron_internal_address: "{{ kolla_internal_fqdn }}" neutron_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ neutron_server_port }}"
neutron_logging_debug: "{{ openstack_logging_debug }}" neutron_logging_debug: "{{ openstack_logging_debug }}"
neutron_bridge_name: "br-ex" neutron_bridge_name: "br-ex"
openstack_neutron_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_neutron_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=network service_type=network
description='Openstack Networking' description='Openstack Networking'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ neutron_server_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ neutron_server_port }}' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ neutron_server_port }}'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_neutron_auth }}' }}" auth={{ '{{ openstack_neutron_auth }}' }}"
-e "{'openstack_neutron_auth':{{ openstack_neutron_auth }}}" -e "{'openstack_neutron_auth':{{ openstack_neutron_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ neutron_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ neutron_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ neutron_public_endpoint }}'}
- name: Creating the Neutron project, user, and role - name: Creating the Neutron project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -67,10 +67,10 @@ nova_compute_ironic_image_full: "{{ nova_compute_ironic_image }}:{{ nova_compute
#################### ####################
# OpenStack # OpenStack
#################### ####################
nova_public_address: "{{ kolla_external_fqdn }}" nova_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s"
nova_admin_address: "{{ kolla_internal_fqdn }}" nova_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s"
nova_internal_address: "{{ kolla_internal_fqdn }}" nova_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s"
nova_logging_debug: "{{ openstack_logging_debug }}" nova_logging_debug: "{{ openstack_logging_debug }}"
openstack_nova_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_nova_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=compute service_type=compute
description='Openstack Compute' description='Openstack Compute'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_nova_auth }}' }}" auth={{ '{{ openstack_nova_auth }}' }}"
-e "{'openstack_nova_auth':{{ openstack_nova_auth }}}" -e "{'openstack_nova_auth':{{ openstack_nova_auth }}}"
@ -18,7 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ nova_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ nova_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ nova_public_endpoint }}'}
- name: Creating the Nova project, user, and role - name: Creating the Nova project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -80,7 +80,7 @@ html5proxy_port = {{ nova_spicehtml5proxy_port }}
[ironic] [ironic]
admin_username = {{ ironic_keystone_user }} admin_username = {{ ironic_keystone_user }}
admin_password = {{ ironic_keystone_password }} admin_password = {{ ironic_keystone_password }}
admin_url = {{ openstack_auth_v2.auth_url }} admin_url = {{ openstack_auth.auth_url }}
admin_tenant_name = service admin_tenant_name = service
api_endpoint = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ ironic_api_port }}/v1 api_endpoint = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ ironic_api_port }}/v1
{% endif %} {% endif %}

View File

@ -27,9 +27,9 @@ swift_rsyncd_image_full: "{{ swift_rsyncd_image }}:{{ swift_rsyncd_tag }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
swift_public_address: "{{ kolla_external_fqdn }}" swift_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ swift_proxy_server_port }}"
swift_admin_address: "{{ kolla_internal_fqdn }}" swift_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ swift_proxy_server_port }}"
swift_internal_address: "{{ kolla_internal_fqdn }}" swift_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ swift_proxy_server_port }}"
swift_logging_debug: "{{ openstack_logging_debug }}" swift_logging_debug: "{{ openstack_logging_debug }}"
@ -40,4 +40,4 @@ swift_devices_mount_point: "/srv/node"
swift_devices_match_mode: "strict" swift_devices_match_mode: "strict"
swift_devices_name: "KOLLA_SWIFT_DATA" swift_devices_name: "KOLLA_SWIFT_DATA"
openstack_swift_auth: "{'auth_url':'{{ openstack_auth_v2.auth_url }}','username':'{{ openstack_auth_v2.username }}','password':'{{ openstack_auth_v2.password }}','project_name':'{{ openstack_auth_v2.project_name }}'}" openstack_swift_auth: "{'auth_url':'{{ openstack_auth.auth_url }}','username':'{{ openstack_auth.username }}','password':'{{ openstack_auth.password }}','project_name':'{{ openstack_auth.project_name }}'}"

View File

@ -6,9 +6,8 @@
service_type=object-store service_type=object-store
description='Openstack Object Storage' description='Openstack Object Storage'
endpoint_region={{ openstack_region_name }} endpoint_region={{ openstack_region_name }}
admin_url='{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ swift_proxy_server_port }}' url='{{ item.url }}'
internal_url='{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s' interface='{{ item.interface }}'
public_url='{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s'
region_name={{ openstack_region_name }} region_name={{ openstack_region_name }}
auth={{ '{{ openstack_swift_auth }}' }}" auth={{ '{{ openstack_swift_auth }}' }}"
-e "{'openstack_swift_auth':{{ openstack_swift_auth }}}" -e "{'openstack_swift_auth':{{ openstack_swift_auth }}}"
@ -18,6 +17,10 @@
retries: 10 retries: 10
delay: 5 delay: 5
run_once: True run_once: True
with_items:
- {'interface': 'admin', 'url': '{{ swift_admin_endpoint }}'}
- {'interface': 'internal', 'url': '{{ swift_internal_endpoint }}'}
- {'interface': 'public', 'url': '{{ swift_public_endpoint }}'}
- name: Creating the Swift project, user, and role - name: Creating the Swift project, user, and role
command: docker exec -t kolla_toolbox /usr/bin/ansible localhost command: docker exec -t kolla_toolbox /usr/bin/ansible localhost

View File

@ -17,7 +17,7 @@ REGION=$8
function get_token { function get_token {
unset OS_TOKEN OS_URL unset OS_TOKEN OS_URL
OS_TOKEN=$(openstack --os-identity-api-version 3 --os-username "${USERNAME}" --os-password "${PASSWORD}" --os-project-name "${PROJECT}" --os-auth-url "${ADMIN_URL}" token issue 2>&1 | awk '/ id / {print $4}') OS_TOKEN=$(openstack --os-identity-api-version 3 --os-username "${USERNAME}" --os-password "${PASSWORD}" --os-project-name "${PROJECT}" --os-auth-url "${ADMIN_URL}" token issue 2>&1 | awk '/ id / {print $4}')
OS_URL="${ADMIN_URL}/v3" OS_URL="${ADMIN_URL}"
} }
function fail_json { function fail_json {

View File

@ -48,7 +48,8 @@ RUN git clone https://github.com/ansible/ansible.git \
RUN mkdir -p /etc/ansible /usr/share/ansible /home/ansible \ RUN mkdir -p /etc/ansible /usr/share/ansible /home/ansible \
&& echo 'localhost ansible_connection=local' > /etc/ansible/hosts \ && echo 'localhost ansible_connection=local' > /etc/ansible/hosts \
&& useradd --user-group ansible --groups kolla && useradd --user-group ansible --groups kolla \
&& sed -i 's| "identity_api_version": "2.0",| "identity_api_version": "3",|' /usr/lib/python2.7/site-packages/os_client_config/defaults.json
COPY find_disks.py kolla_keystone_service.py kolla_keystone_user.py kolla_sanity.py kolla_zookeeper.py /usr/share/ansible/ COPY find_disks.py kolla_keystone_service.py kolla_keystone_user.py kolla_sanity.py kolla_zookeeper.py /usr/share/ansible/
COPY ansible.cfg /home/ansible/.ansible.cfg COPY ansible.cfg /home/ansible/.ansible.cfg

View File

@ -30,9 +30,8 @@ def main():
description=dict(required=True, type='str'), description=dict(required=True, type='str'),
service_name=dict(required=True, type='str'), service_name=dict(required=True, type='str'),
service_type=dict(required=True, type='str'), service_type=dict(required=True, type='str'),
admin_url=dict(required=True, type='str'), url=dict(required=True, type='str'),
internal_url=dict(required=True, type='str'), interface=dict(required=True, type='str'),
public_url=dict(required=True, type='str'),
endpoint_region=dict(required=True, type='str') endpoint_region=dict(required=True, type='str')
) )
module = AnsibleModule(argument_spec) module = AnsibleModule(argument_spec)
@ -41,9 +40,8 @@ def main():
description = module.params.pop('description') description = module.params.pop('description')
service_name = module.params.pop('service_name') service_name = module.params.pop('service_name')
service_type = module.params.pop('service_type') service_type = module.params.pop('service_type')
admin_url = module.params.pop('admin_url') url = module.params.pop('url')
internal_url = module.params.pop('internal_url') interface = module.params.pop('interface')
public_url = module.params.pop('public_url')
endpoint_region = module.params.pop('endpoint_region') endpoint_region = module.params.pop('endpoint_region')
changed = False changed = False
@ -61,7 +59,8 @@ def main():
if service is not None: if service is not None:
for _endpoint in cloud.keystone_client.endpoints.list(): for _endpoint in cloud.keystone_client.endpoints.list():
if _endpoint.service_id == service.id: if _endpoint.service_id == service.id and \
_endpoint.interface == interface:
endpoint = _endpoint endpoint = _endpoint
else: else:
service = cloud.keystone_client.services.create( service = cloud.keystone_client.services.create(
@ -72,10 +71,9 @@ def main():
if endpoint is None: if endpoint is None:
changed = True changed = True
cloud.keystone_client.endpoints.create( cloud.keystone_client.endpoints.create(
service_id=service.id, service=service.id,
adminurl=admin_url, url=url,
internalurl=internal_url, interface=interface,
publicurl=public_url,
region=endpoint_region) region=endpoint_region)
module.exit_json(changed=changed) module.exit_json(changed=changed)

View File

@ -50,7 +50,7 @@ def main():
module.params['auth'].replace("'", '"')) module.params['auth'].replace("'", '"'))
cloud = shade.operator_cloud(**module.params) cloud = shade.operator_cloud(**module.params)
for _project in cloud.keystone_client.tenants.list(): for _project in cloud.keystone_client.projects.list():
if _project.name == project_name: if _project.name == project_name:
project = _project project = _project
@ -64,8 +64,8 @@ def main():
if not project: if not project:
changed = True changed = True
project = cloud.keystone_client.tenants.create( project = cloud.keystone_client.projects.create(
tenant_name=project_name) name=project_name, domain='default')
if not role: if not role:
changed = True changed = True
@ -75,10 +75,10 @@ def main():
changed = True changed = True
user = cloud.keystone_client.users.create(name=user_name, user = cloud.keystone_client.users.create(name=user_name,
password=password, password=password,
tenant_id=project.id) project=project)
cloud.keystone_client.roles.add_user_role(role=role.id, cloud.keystone_client.roles.grant(role=role,
user=user.id, user=user,
tenant=project.id) project=project)
module.exit_json(changed=changed) module.exit_json(changed=changed)
except Exception as e: except Exception as e: