Standardize use and construction of endpoint URLs

The goal for this push request is to normalize the construction and use
 of internal, external, and admin URLs. While extending Kolla-ansible
 to enable a more flexible method to manage external URLs, we noticed
 that the same URL was constructed multiple times in different parts
 of the code. This can make it difficult for people that want to work
 with these URLs and create inconsistencies in a large code base with
 time. Therefore, we are proposing here the use of
 "single Kolla-ansible variable" per endpoint URL, which facilitates
 for people that are interested in overriding/extending these URLs.

As an example, we extended Kolla-ansible to facilitate the "override"
of public (external) URLs with the following standard
"<component/serviceName>.<companyBaseUrl>".
Therefore, the "NAT/redirect" in the SSL termination system (HAproxy,
HTTPD or some other) is done via the service name, and not by the port.
This allows operators to easily and automatically create more friendly
 URL names. To develop this feature, we first applied this patch that
 we are sending now to the community. We did that to reduce the surface
  of changes in Kolla-ansible.

Another example is the integration of Kolla-ansible and Consul, which
we also implemented internally, and also requires URLs changes.
Therefore, this PR is essential to reduce code duplicity, and to
facility users/developers to work/customize the services URLs.

Change-Id: I73d483e01476e779a5155b2e18dd5ea25f514e93
Signed-off-by: Rafael Weingärtner <rafael@apache.org>
This commit is contained in:
Rafael Weingärtner 2020-06-16 16:03:31 -03:00 committed by Radosław Piliszek
parent a90aa3e443
commit f425c0678f
49 changed files with 192 additions and 125 deletions

View File

@ -168,6 +168,8 @@ keepalived_virtual_router_id: "51"
es_heap_size: "1G" es_heap_size: "1G"
elasticsearch_datadir_volume: "elasticsearch" elasticsearch_datadir_volume: "elasticsearch"
elasticsearch_internal_endpoint: "{{ internal_protocol }}://{{ elasticsearch_address | put_address_in_context('url') }}:{{ elasticsearch_port }}"
################### ###################
# Messaging options # Messaging options
################### ###################
@ -301,6 +303,7 @@ heat_api_cfn_port: "8000"
heat_api_cfn_listen_port: "{{ heat_api_cfn_port }}" heat_api_cfn_listen_port: "{{ heat_api_cfn_port }}"
horizon_port: "80" horizon_port: "80"
horizon_tls_port: "443"
horizon_listen_port: "{{ horizon_port }}" horizon_listen_port: "{{ horizon_port }}"
influxdb_http_port: "8086" influxdb_http_port: "8086"
@ -690,6 +693,13 @@ enable_destroy_images: "no"
#################### ####################
# Monasca options # Monasca options
#################### ####################
monasca_api_admin_base_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}"
monasca_api_internal_base_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}"
monasca_api_public_base_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}"
monasca_log_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
monasca_log_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
monasca_log_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
# The OpenStack username used by the Monasca Agent and the Fluentd Monasca # The OpenStack username used by the Monasca Agent and the Fluentd Monasca
# plugin to post logs and metrics from the control plane to Monasca. # plugin to post logs and metrics from the control plane to Monasca.
@ -786,6 +796,7 @@ kibana_log_prefix: "flog"
#################### ####################
keystone_internal_fqdn: "{{ kolla_internal_fqdn }}" keystone_internal_fqdn: "{{ kolla_internal_fqdn }}"
keystone_external_fqdn: "{{ kolla_external_fqdn }}" keystone_external_fqdn: "{{ kolla_external_fqdn }}"
keystone_admin_url: "{{ admin_protocol }}://{{ keystone_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }}" keystone_admin_url: "{{ admin_protocol }}://{{ keystone_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }}"
keystone_internal_url: "{{ internal_protocol }}://{{ keystone_internal_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }}" keystone_internal_url: "{{ internal_protocol }}://{{ keystone_internal_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }}"
keystone_public_url: "{{ public_protocol }}://{{ keystone_external_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }}" keystone_public_url: "{{ public_protocol }}://{{ keystone_external_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }}"
@ -837,6 +848,10 @@ glance_enable_property_protection: "no"
glance_enable_interoperable_image_import: "no" glance_enable_interoperable_image_import: "no"
glance_api_hosts: "{{ [groups['glance-api']|first] if glance_backend_file | bool and glance_file_datadir_volume == 'glance' else groups['glance-api'] }}" glance_api_hosts: "{{ [groups['glance-api']|first] if glance_backend_file | bool and glance_file_datadir_volume == 'glance' else groups['glance-api'] }}"
glance_admin_endpoint: "{{ admin_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }}"
glance_internal_endpoint: "{{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }}"
glance_public_endpoint: "{{ public_protocol }}://{{ glance_external_fqdn | put_address_in_context('url') }}:{{ glance_api_port }}"
####################### #######################
# Barbican options # Barbican options
####################### #######################
@ -844,6 +859,10 @@ glance_api_hosts: "{{ [groups['glance-api']|first] if glance_backend_file | bool
barbican_crypto_plugin: "simple_crypto" barbican_crypto_plugin: "simple_crypto"
barbican_library_path: "/usr/lib/libCryptoki2_64.so" barbican_library_path: "/usr/lib/libCryptoki2_64.so"
barbican_admin_endpoint: "{{ admin_protocol }}://{{ barbican_internal_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
barbican_internal_endpoint: "{{ internal_protocol }}://{{ barbican_internal_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
barbican_public_endpoint: "{{ public_protocol }}://{{ barbican_external_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
################# #################
# Gnocchi options # Gnocchi options
################# #################
@ -854,7 +873,6 @@ gnocchi_backend_storage: "{% if enable_swift | bool %}swift{% else %}file{% endi
gnocchi_incoming_storage: "{{ 'redis' if enable_redis | bool else '' }}" gnocchi_incoming_storage: "{{ 'redis' if enable_redis | bool else '' }}"
gnocchi_metric_datadir_volume: "gnocchi" gnocchi_metric_datadir_volume: "gnocchi"
################################# #################################
# Cinder options # Cinder options
################################# #################################
@ -893,6 +911,10 @@ designate_backend_external_bind9_nameservers: ""
# Valid options are [ '', redis ] # Valid options are [ '', redis ]
designate_coordination_backend: "{{ 'redis' if enable_redis|bool else '' }}" designate_coordination_backend: "{{ 'redis' if enable_redis|bool else '' }}"
designate_admin_endpoint: "{{ admin_protocol }}://{{ designate_internal_fqdn | put_address_in_context('url') }}:{{ designate_api_port }}"
designate_internal_endpoint: "{{ internal_protocol }}://{{ designate_internal_fqdn | put_address_in_context('url') }}:{{ designate_api_port }}"
designate_public_endpoint: "{{ public_protocol }}://{{ designate_external_fqdn | put_address_in_context('url') }}:{{ designate_api_port }}"
####################### #######################
# Neutron options # Neutron options
####################### #######################
@ -917,6 +939,11 @@ neutron_legacy_iptables: "no"
# Enable distributed floating ip for OVN deployments # Enable distributed floating ip for OVN deployments
neutron_ovn_distributed_fip: "no" neutron_ovn_distributed_fip: "no"
neutron_admin_endpoint: "{{ admin_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
neutron_internal_endpoint: "{{ internal_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
neutron_public_endpoint: "{{ public_protocol }}://{{ neutron_external_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
####################### #######################
# Nova options # Nova options
####################### #######################
@ -954,6 +981,8 @@ enable_keystone_horizon_policy_file: "{{ enable_keystone }}"
enable_neutron_horizon_policy_file: "{{ enable_neutron }}" enable_neutron_horizon_policy_file: "{{ enable_neutron }}"
enable_nova_horizon_policy_file: "{{ enable_nova }}" enable_nova_horizon_policy_file: "{{ enable_nova }}"
horizon_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ horizon_tls_port if kolla_enable_tls_internal | bool else horizon_port }}"
################# #################
# Octavia options # Octavia options
################# #################
@ -1044,12 +1073,15 @@ prometheus_openstack_exporter_endpoint_type: "internal"
############ ############
enable_vitrage_prometheus_datasource: "{{ enable_prometheus | bool }}" enable_vitrage_prometheus_datasource: "{{ enable_prometheus | bool }}"
#################### ####################
# InfluxDB options # InfluxDB options
#################### ####################
influxdb_address: "{{ kolla_internal_fqdn }}" influxdb_address: "{{ kolla_internal_fqdn }}"
influxdb_datadir_volume: "influxdb" influxdb_datadir_volume: "influxdb"
infuxdb_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ influxdb_http_port }}"
################# #################
# Kafka options # Kafka options
################# #################
@ -1073,3 +1105,36 @@ distro_python_version: "{{ distro_python_version_map[kolla_base_distro] }}"
# Configure telegraf to use the docker daemon itself as an input for # Configure telegraf to use the docker daemon itself as an input for
# telemetry data. # telemetry data.
telegraf_enable_docker_input: "no" telegraf_enable_docker_input: "no"
vitrage_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
vitrage_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
vitrage_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
####################
# Grafana
####################
grafana_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }}"
grafana_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }}"
#############
# Ironic
#############
ironic_admin_endpoint: "{{ admin_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
ironic_internal_endpoint: "{{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
ironic_public_endpoint: "{{ public_protocol }}://{{ ironic_external_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
########
# Swift
########
swift_internal_base_endpoint: "{{ internal_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}"
swift_admin_endpoint: "{{ admin_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1"
swift_internal_endpoint: "{{ swift_internal_base_endpoint }}/v1/AUTH_%(tenant_id)s"
swift_public_endpoint: "{{ public_protocol }}://{{ swift_external_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s"
##########
# Octavia
##########
octavia_admin_endpoint: "{{ admin_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"
octavia_internal_endpoint: "{{ internal_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"
octavia_public_endpoint: "{{ public_protocol }}://{{ octavia_external_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"

View File

@ -98,10 +98,6 @@ barbican_worker_extra_volumes: "{{ barbican_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
barbican_admin_endpoint: "{{ admin_protocol }}://{{ barbican_internal_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
barbican_internal_endpoint: "{{ internal_protocol }}://{{ barbican_internal_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
barbican_public_endpoint: "{{ public_protocol }}://{{ barbican_external_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }}"
barbican_logging_debug: "{{ openstack_logging_debug }}" barbican_logging_debug: "{{ openstack_logging_debug }}"
barbican_keystone_user: "barbican" barbican_keystone_user: "barbican"

View File

@ -4,7 +4,8 @@ log_dir = /var/log/kolla/barbican
bind_port = {{ barbican_api_listen_port }} bind_port = {{ barbican_api_listen_port }}
bind_host = {{ api_interface_address }} bind_host = {{ api_interface_address }}
host_href = {{ public_protocol }}://{{ barbican_external_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }} host_href = {{ barbican_public_endpoint }}
backlog = 4096 backlog = 4096
max_allowed_secret_in_bytes = 10000 max_allowed_secret_in_bytes = 10000
max_allowed_request_size_in_bytes = 1000000 max_allowed_request_size_in_bytes = 1000000

View File

@ -128,12 +128,17 @@ cinder_volume_extra_volumes: "{{ cinder_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
cinder_v2_admin_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" cinder_admin_base_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}"
cinder_v2_internal_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" cinder_internal_base_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}"
cinder_v2_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" cinder_public_base_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}"
cinder_v3_admin_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v3/%(tenant_id)s"
cinder_v3_internal_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v3/%(tenant_id)s" cinder_v2_admin_endpoint: "{{ cinder_admin_base_endpoint }}/v2/%(tenant_id)s"
cinder_v3_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v3/%(tenant_id)s" cinder_v2_internal_endpoint: "{{ cinder_internal_base_endpoint }}/v2/%(tenant_id)s"
cinder_v2_public_endpoint: "{{ cinder_public_base_endpoint }}/v2/%(tenant_id)s"
cinder_v3_admin_endpoint: "{{ cinder_admin_base_endpoint }}/v3/%(tenant_id)s"
cinder_v3_internal_endpoint: "{{ cinder_internal_base_endpoint }}/v3/%(tenant_id)s"
cinder_v3_public_endpoint: "{{ cinder_public_base_endpoint }}/v3/%(tenant_id)s"
cinder_logging_debug: "{{ openstack_logging_debug }}" cinder_logging_debug: "{{ openstack_logging_debug }}"

View File

@ -13,7 +13,7 @@ my_ip = {{ api_interface_address }}
osapi_volume_workers = {{ openstack_service_workers }} osapi_volume_workers = {{ openstack_service_workers }}
volume_name_template = volume-%s volume_name_template = volume-%s
glance_api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }} glance_api_servers = {{ glance_internal_endpoint }}
glance_num_retries = {{ groups['glance-api'] | length }} glance_num_retries = {{ groups['glance-api'] | length }}
glance_api_version = 2 glance_api_version = 2
@ -43,7 +43,7 @@ backup_share = {{ cinder_backup_share }}
backup_file_size = 327680000 backup_file_size = 327680000
{% elif enable_swift | bool and cinder_backup_driver == "swift" %} {% elif enable_swift | bool and cinder_backup_driver == "swift" %}
backup_driver = cinder.backup.drivers.swift.SwiftBackupDriver backup_driver = cinder.backup.drivers.swift.SwiftBackupDriver
backup_swift_url = {{ internal_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1/AUTH_ backup_swift_url = {{ swift_internal_base_endpoint }}/v1/AUTH_
backup_swift_auth = per_user backup_swift_auth = per_user
backup_swift_auth_version = 1 backup_swift_auth_version = 1
backup_swift_user = backup_swift_user =

View File

@ -40,7 +40,7 @@
<store> <store>
@type monasca @type monasca
keystone_url {{ keystone_internal_url }} keystone_url {{ keystone_internal_url }}
monasca_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_api {{ monasca_log_api_internal_endpoint }}
monasca_api_version v2.0 monasca_api_version v2.0
username {{ monasca_agent_user }} username {{ monasca_agent_user }}
password {{ monasca_agent_password }} password {{ monasca_agent_password }}
@ -102,7 +102,7 @@
<store> <store>
@type monasca @type monasca
keystone_url {{ keystone_internal_url }} keystone_url {{ keystone_internal_url }}
monasca_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_api {{ monasca_log_api_internal_endpoint }}
monasca_api_version v2.0 monasca_api_version v2.0
username {{ monasca_agent_user }} username {{ monasca_agent_user }}
password {{ monasca_agent_password }} password {{ monasca_agent_password }}
@ -161,7 +161,7 @@
<store> <store>
@type monasca @type monasca
keystone_url {{ keystone_internal_url }} keystone_url {{ keystone_internal_url }}
monasca_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_api {{ monasca_log_api_internal_endpoint }}
monasca_api_version v2.0 monasca_api_version v2.0
username {{ monasca_agent_user }} username {{ monasca_agent_user }}
password {{ monasca_agent_password }} password {{ monasca_agent_password }}

View File

@ -3,7 +3,7 @@
<store> <store>
@type monasca @type monasca
keystone_url {{ keystone_internal_url }} keystone_url {{ keystone_internal_url }}
monasca_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_api {{ monasca_log_api_internal_endpoint }}
monasca_api_version v2.0 monasca_api_version v2.0
username {{ monasca_agent_user }} username {{ monasca_agent_user }}
password {{ monasca_agent_password }} password {{ monasca_agent_password }}

View File

@ -17,13 +17,13 @@ connection = mysql+pymysql://{{ cyborg_database_user }}:{{ cyborg_database_passw
memcache_security_strategy = ENCRYPT memcache_security_strategy = ENCRYPT
memcache_secret_key = {{ memcache_secret_key }} memcache_secret_key = {{ memcache_secret_key }}
memcache_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} memcache_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}
auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }} auth_uri = {{ keystone_internal_url }}
project_domain_name = {{ default_project_domain_name }} project_domain_name = {{ default_project_domain_name }}
project_name = service project_name = service
user_domain_name = {{ default_user_domain_name }} user_domain_name = {{ default_user_domain_name }}
username = {{ cyborg_keystone_user }} username = {{ cyborg_keystone_user }}
password = {{ cyborg_keystone_password }} password = {{ cyborg_keystone_password }}
auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }} auth_url = {{ keystone_admin_url }}
auth_type = password auth_type = password
cafile = {{ openstack_cacert }} cafile = {{ openstack_cacert }}

View File

@ -12,7 +12,7 @@ workers = {{ openstack_service_workers }}
[service:api] [service:api]
listen = {{ api_interface_address | put_address_in_context('url') }}:{{ designate_api_listen_port }} listen = {{ api_interface_address | put_address_in_context('url') }}:{{ designate_api_listen_port }}
api_base_uri = {{ internal_protocol }}://{{ designate_internal_fqdn | put_address_in_context('url') }}:{{ designate_api_port }} api_base_uri = {{ designate_internal_endpoint }}
workers = {{ openstack_service_workers }} workers = {{ openstack_service_workers }}
enable_api_admin = True enable_api_admin = True
enable_host_header = True enable_host_header = True

View File

@ -1,8 +1,4 @@
--- ---
- name: Set fact for Elasticsearch URL
set_fact:
elasticsearch_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ elasticsearch_port }}"
# The official procedure for upgrade elasticsearch: # The official procedure for upgrade elasticsearch:
# https://www.elastic.co/guide/en/elasticsearch/reference/6.x/restart-upgrade.html # https://www.elastic.co/guide/en/elasticsearch/reference/6.x/restart-upgrade.html
- name: Disable shard allocation - name: Disable shard allocation
@ -12,7 +8,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ elasticsearch_url }}/_cluster/settings" url: "{{ elasticsearch_internal_endpoint }}/_cluster/settings"
method: PUT method: PUT
status_code: 200 status_code: 200
return_content: yes return_content: yes
@ -26,7 +22,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ elasticsearch_url }}/_flush/synced" url: "{{ elasticsearch_internal_endpoint }}/_flush/synced"
method: POST method: POST
status_code: 200 status_code: 200
return_content: yes return_content: yes

View File

@ -9,10 +9,10 @@ etcd_services:
environment: environment:
ETCD_DATA_DIR: "/var/lib/etcd" ETCD_DATA_DIR: "/var/lib/etcd"
ETCD_NAME: "{{ ansible_hostname }}" ETCD_NAME: "{{ ansible_hostname }}"
ETCD_ADVERTISE_CLIENT_URLS: "{{ etcd_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}" ETCD_ADVERTISE_CLIENT_URLS: "{{ etcd_client_internal_endpoint }}"
ETCD_LISTEN_CLIENT_URLS: "{{ etcd_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}" ETCD_LISTEN_CLIENT_URLS: "{{ etcd_client_internal_endpoint }}"
ETCD_INITIAL_ADVERTISE_PEER_URLS: "{{ etcd_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_peer_port }}" ETCD_INITIAL_ADVERTISE_PEER_URLS: "{{ etcd_peer_internal_endpoint }}"
ETCD_LISTEN_PEER_URLS: "{{ etcd_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_peer_port }}" ETCD_LISTEN_PEER_URLS: "{{ etcd_peer_internal_endpoint }}"
ETCD_INITIAL_CLUSTER_TOKEN: "{{ etcd_cluster_token }}" ETCD_INITIAL_CLUSTER_TOKEN: "{{ etcd_cluster_token }}"
ETCD_INITIAL_CLUSTER: "{% for host in groups['etcd'] %}{{ hostvars[host]['ansible_hostname'] }}={{ etcd_protocol }}://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_peer_port }}{% if not loop.last %},{% endif %}{% endfor %}" ETCD_INITIAL_CLUSTER: "{% for host in groups['etcd'] %}{{ hostvars[host]['ansible_hostname'] }}={{ etcd_protocol }}://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_peer_port }}{% if not loop.last %},{% endif %}{% endfor %}"
ETCD_INITIAL_CLUSTER_STATE: "new" ETCD_INITIAL_CLUSTER_STATE: "new"
@ -43,3 +43,9 @@ etcd_default_volumes:
- "kolla_etcd:/var/lib/etcd/" - "kolla_etcd:/var/lib/etcd/"
- "kolla_logs:/var/log/kolla/" - "kolla_logs:/var/log/kolla/"
etcd_extra_volumes: "{{ default_extra_volumes }}" etcd_extra_volumes: "{{ default_extra_volumes }}"
############
# Endpoints
############
etcd_client_internal_endpoint: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}"
etcd_peer_internal_endpoint: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_peer_port }}"

View File

@ -36,9 +36,9 @@ freezer_database_name: "freezer"
freezer_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}freezer{% endif %}" freezer_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}freezer{% endif %}"
freezer_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" freezer_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}"
freezer_elasticsearch_replicas: "1" freezer_elasticsearch_replicas: "1"
freezer_es_protocol: freezer_es_protocol: "{{ internal_protocol }}"
freezer_es_address: freezer_es_address: "{{ elasticsearch_address }}"
freezer_es_port: freezer_es_port: "{{ elasticsearch_port }}"
#################### ####################
# Docker # Docker

View File

@ -89,5 +89,5 @@ swift_project_name = {{ swift_admin_tenant_name }}
{% if enable_grafana | bool %} {% if enable_grafana | bool %}
[cors] [cors]
allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }} allowed_origin = {{ grafana_public_endpoint }}
{% endif %} {% endif %}

View File

@ -39,7 +39,7 @@ grafana_data_sources:
database: "telegraf" database: "telegraf"
name: "telegraf" name: "telegraf"
type: "influxdb" type: "influxdb"
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ influxdb_http_port }}" url: "{{ infuxdb_internal_endpoint }}"
access: "proxy" access: "proxy"
basicAuth: false basicAuth: false
elasticsearch: elasticsearch:
@ -48,7 +48,7 @@ grafana_data_sources:
name: "elasticsearch" name: "elasticsearch"
type: "elasticsearch" type: "elasticsearch"
access: "proxy" access: "proxy"
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ elasticsearch_port }}" url: "{{ elasticsearch_internal_endpoint }}"
database: "flog-*" database: "flog-*"
jsonData: jsonData:
esVersion: 5 esVersion: 5
@ -64,7 +64,6 @@ grafana_image_full: "{{ grafana_image }}:{{ grafana_tag }}"
grafana_admin_username: "admin" grafana_admin_username: "admin"
grafana_dimensions: "{{ default_container_dimensions }}" grafana_dimensions: "{{ default_container_dimensions }}"
grafana_default_volumes: grafana_default_volumes:
- "{{ node_config_directory }}/grafana/:{{ container_config_directory }}/:ro" - "{{ node_config_directory }}/grafana/:{{ container_config_directory }}/:ro"
- "/etc/localtime:/etc/localtime:ro" - "/etc/localtime:/etc/localtime:ro"
@ -72,3 +71,8 @@ grafana_default_volumes:
- "grafana:/var/lib/grafana/" - "grafana:/var/lib/grafana/"
- "kolla_logs:/var/log/kolla/" - "kolla_logs:/var/log/kolla/"
grafana_extra_volumes: "{{ default_extra_volumes }}" grafana_extra_volumes: "{{ default_extra_volumes }}"
############
# Prometheus
############
grafana_prometheus_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ prometheus_port }}"

View File

@ -4,7 +4,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }}/login" url: "{{ grafana_internal_endpoint }}/login"
status_code: 200 status_code: 200
register: result register: result
until: result.get('status') == 200 until: result.get('status') == 200
@ -17,7 +17,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }}/api/datasources" url: "{{ grafana_internal_endpoint }}/api/datasources"
method: POST method: POST
user: "{{ grafana_admin_username }}" user: "{{ grafana_admin_username }}"
password: "{{ grafana_admin_password }}" password: "{{ grafana_admin_password }}"
@ -38,7 +38,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }}/api/user/helpflags/1" url: "{{ grafana_internal_endpoint }}/api/user/helpflags/1"
method: PUT method: PUT
user: "{{ grafana_admin_username }}" user: "{{ grafana_admin_username }}"
password: "{{ grafana_admin_password }}" password: "{{ grafana_admin_password }}"

View File

@ -5,5 +5,5 @@ datasources:
type: prometheus type: prometheus
access: proxy access: proxy
orgId: 1 orgId: 1
url: {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ prometheus_port }} url: {{ grafana_prometheus_url }}
version: 1 version: 1

View File

@ -114,9 +114,12 @@ heat_engine_extra_volumes: "{{ heat_extra_volumes }}"
heat_admin_endpoint: "{{ admin_protocol }}://{{ heat_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s" heat_admin_endpoint: "{{ admin_protocol }}://{{ heat_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_internal_endpoint: "{{ internal_protocol }}://{{ heat_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s" heat_internal_endpoint: "{{ internal_protocol }}://{{ heat_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_public_endpoint: "{{ public_protocol }}://{{ heat_external_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s" heat_public_endpoint: "{{ public_protocol }}://{{ heat_external_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s"
heat_cfn_public_base_endpoint: "{{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}"
heat_cfn_admin_endpoint: "{{ admin_protocol }}://{{ heat_cfn_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1" heat_cfn_admin_endpoint: "{{ admin_protocol }}://{{ heat_cfn_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1"
heat_cfn_internal_endpoint: "{{ internal_protocol }}://{{ heat_cfn_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1" heat_cfn_internal_endpoint: "{{ internal_protocol }}://{{ heat_cfn_internal_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1"
heat_cfn_public_endpoint: "{{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1" heat_cfn_public_endpoint: "{{ heat_cfn_public_base_endpoint }}/v1"
heat_logging_debug: "{{ openstack_logging_debug }}" heat_logging_debug: "{{ openstack_logging_debug }}"

View File

@ -3,9 +3,8 @@ debug = {{ heat_logging_debug }}
log_dir = /var/log/kolla/heat log_dir = /var/log/kolla/heat
log_file = $log_dir/{{ service_name }}.log log_file = $log_dir/{{ service_name }}.log
heat_metadata_server_url = {{ heat_cfn_public_base_endpoint }}
heat_metadata_server_url = {{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }} heat_waitcondition_server_url = {{ heat_cfn_public_base_endpoint }}/v1/waitcondition
heat_waitcondition_server_url = {{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1/waitcondition
heat_stack_user_role = {{ heat_stack_user_role }} heat_stack_user_role = {{ heat_stack_user_role }}

View File

@ -41,7 +41,7 @@ horizon_services:
enabled: "{{ enable_horizon }}" enabled: "{{ enable_horizon }}"
mode: "http" mode: "http"
external: false external: false
port: "{% if kolla_enable_tls_internal|bool %}443{% else %}{{ horizon_port }}{% endif %}" port: "{% if kolla_enable_tls_internal|bool %}{{ horizon_tls_port }}{% else %}{{ horizon_port }}{% endif %}"
listen_port: "{{ horizon_listen_port }}" listen_port: "{{ horizon_listen_port }}"
backend_http_extra: backend_http_extra:
- "balance source" - "balance source"
@ -56,7 +56,7 @@ horizon_services:
enabled: "{{ enable_horizon }}" enabled: "{{ enable_horizon }}"
mode: "http" mode: "http"
external: true external: true
port: "{% if kolla_enable_tls_external|bool %}443{% else %}{{ horizon_port }}{% endif %}" port: "{% if kolla_enable_tls_external|bool %}{{ horizon_tls_port }}{% else %}{{ horizon_port }}{% endif %}"
listen_port: "{{ horizon_listen_port }}" listen_port: "{{ horizon_listen_port }}"
backend_http_extra: backend_http_extra:
- "balance source" - "balance source"

View File

@ -180,10 +180,6 @@ ironic_dnsmasq_extra_volumes: "{{ ironic_extra_volumes }}"
#################### ####################
ironic_inspector_keystone_user: "ironic-inspector" ironic_inspector_keystone_user: "ironic-inspector"
ironic_admin_endpoint: "{{ admin_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
ironic_internal_endpoint: "{{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
ironic_public_endpoint: "{{ public_protocol }}://{{ ironic_external_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}"
ironic_inspector_admin_endpoint: "{{ admin_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}" ironic_inspector_admin_endpoint: "{{ admin_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}"
ironic_inspector_internal_endpoint: "{{ internal_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}" ironic_inspector_internal_endpoint: "{{ internal_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}"
ironic_inspector_public_endpoint: "{{ public_protocol }}://{{ ironic_inspector_external_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}" ironic_inspector_public_endpoint: "{{ public_protocol }}://{{ ironic_inspector_external_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}"
@ -204,7 +200,7 @@ ironic_dnsmasq_default_gateway:
ironic_dnsmasq_boot_file: "{% if enable_ironic_ipxe | bool %}undionly.kpxe{% else %}pxelinux.0{% endif %}" ironic_dnsmasq_boot_file: "{% if enable_ironic_ipxe | bool %}undionly.kpxe{% else %}pxelinux.0{% endif %}"
ironic_cleaning_network: ironic_cleaning_network:
ironic_console_serial_speed: "115200n8" ironic_console_serial_speed: "115200n8"
ironic_ipxe_url: http://{{ api_interface_address | put_address_in_context('url') }}:{{ ironic_ipxe_port }} ironic_ipxe_url: "http://{{ api_interface_address | put_address_in_context('url') }}:{{ ironic_ipxe_port }}"
ironic_enable_rolling_upgrade: "yes" ironic_enable_rolling_upgrade: "yes"
ironic_inspector_kernel_cmdline_extras: [] ironic_inspector_kernel_cmdline_extras: []
ironic_inspector_pxe_filter: "{% if enable_neutron | bool %}dnsmasq{% else %}none{% endif %}" ironic_inspector_pxe_filter: "{% if enable_neutron | bool %}dnsmasq{% else %}none{% endif %}"

View File

@ -13,6 +13,6 @@ chain pxelinux.cfg/${mac:hexhyp} || goto inspector_ipa
:inspector_ipa :inspector_ipa
:retry_boot :retry_boot
imgfree imgfree
kernel --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.kernel ipa-inspection-callback-url={{ internal_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}/v1/continue systemd.journald.forward_to_console=yes BOOTIF=${mac} initrd=ironic-agent.initramfs {{ ironic_inspector_kernel_cmdline_extras | join(' ') }} || goto retry_boot kernel --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.kernel ipa-inspection-callback-url={{ ironic_inspector_internal_endpoint }}/v1/continue systemd.journald.forward_to_console=yes BOOTIF=${mac} initrd=ironic-agent.initramfs {{ ironic_inspector_kernel_cmdline_extras | join(' ') }} || goto retry_boot
initrd --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.initramfs || goto retry_boot initrd --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.initramfs || goto retry_boot
boot boot

View File

@ -172,7 +172,7 @@ valid_interfaces = internal
cafile = {{ openstack_cacert }} cafile = {{ openstack_cacert }}
{% else %} {% else %}
auth_type = none auth_type = none
endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }} endpoint_override = {{ ironic_internal_endpoint }}
{% endif %} {% endif %}
[agent] [agent]

View File

@ -2,6 +2,7 @@ default introspect
label introspect label introspect
kernel ironic-agent.kernel kernel ironic-agent.kernel
append initrd=ironic-agent.initramfs ipa-inspection-callback-url={{ internal_protocol }}://{{ ironic_inspector_internal_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}/v1/continue systemd.journald.forward_to_console=yes {{ ironic_inspector_kernel_cmdline_extras | join(' ') }}
append initrd=ironic-agent.initramfs ipa-inspection-callback-url={{ ironic_inspector_internal_endpoint }}/v1/continue systemd.journald.forward_to_console=yes {{ ironic_inspector_kernel_cmdline_extras | join(' ') }}
ipappend 3 ipappend 3

View File

@ -68,5 +68,5 @@ connection_string = {{ osprofiler_backend_connection_string }}
{% if enable_grafana | bool %} {% if enable_grafana | bool %}
[cors] [cors]
allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }} allowed_origin = {{ grafana_public_endpoint }}
{% endif %} {% endif %}

View File

@ -2,7 +2,7 @@ kibana.defaultAppId: "{{ kibana_default_app_id }}"
logging.dest: /var/log/kolla/kibana/kibana.log logging.dest: /var/log/kolla/kibana/kibana.log
server.port: {{ kibana_server_port }} server.port: {{ kibana_server_port }}
server.host: "{{ api_interface_address }}" server.host: "{{ api_interface_address }}"
elasticsearch.url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ elasticsearch_port }}" elasticsearch.url: "{{ elasticsearch_internal_endpoint }}"
elasticsearch.requestTimeout: {{ kibana_elasticsearch_request_timeout }} elasticsearch.requestTimeout: {{ kibana_elasticsearch_request_timeout }}
elasticsearch.shardTimeout: {{ kibana_elasticsearch_shard_timeout }} elasticsearch.shardTimeout: {{ kibana_elasticsearch_shard_timeout }}
elasticsearch.ssl.verificationMode: "{{ 'full' if kibana_elasticsearch_ssl_verify | bool else 'none' }}" elasticsearch.ssl.verificationMode: "{{ 'full' if kibana_elasticsearch_ssl_verify | bool else 'none' }}"

View File

@ -70,3 +70,8 @@ kuryr_ks_users:
user: "{{ kuryr_keystone_user }}" user: "{{ kuryr_keystone_user }}"
password: "{{ kuryr_keystone_password }}" password: "{{ kuryr_keystone_password }}"
role: "admin" role: "admin"
###########
# Endpoints
##########
kuryr_internal_endpoint: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ kuryr_port }}"

View File

@ -1,5 +1,5 @@
[DEFAULT] [DEFAULT]
kuryr_uri = {{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ kuryr_port }} kuryr_uri = {{ kuryr_internal_endpoint }}
debug = {{ kuryr_logging_debug }} debug = {{ kuryr_logging_debug }}
log_dir = /var/log/kolla/kuryr log_dir = /var/log/kolla/kuryr

View File

@ -1 +1 @@
http://{{ api_interface_address | put_address_in_context('url') }}:{{ kuryr_port }} {{ kuryr_internal_endpoint }}

View File

@ -118,12 +118,18 @@ manila_data_extra_volumes: "{{ manila_extra_volumes }}"
##################### #####################
## OpenStack ## OpenStack
##################### #####################
manila_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" manila_admin_base_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}"
manila_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" manila_internal_base_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}"
manila_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" manila_public_base_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}"
manila_v2_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v2/%(tenant_id)s"
manila_v2_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v2/%(tenant_id)s"
manila_v2_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v2/%(tenant_id)s" manila_admin_endpoint: "{{ manila_admin_base_endpoint }}/v1/%(tenant_id)s"
manila_internal_endpoint: "{{ manila_internal_base_endpoint }}/v1/%(tenant_id)s"
manila_public_endpoint: "{{ manila_public_base_endpoint }}/v1/%(tenant_id)s"
manila_v2_admin_endpoint: "{{ manila_admin_base_endpoint }}/v2/%(tenant_id)s"
manila_v2_internal_endpoint: "{{ manila_internal_base_endpoint }}/v2/%(tenant_id)s"
manila_v2_public_endpoint: "{{ manila_public_base_endpoint }}/v2/%(tenant_id)s"
manila_logging_debug: "{{ openstack_logging_debug }}" manila_logging_debug: "{{ openstack_logging_debug }}"

View File

@ -40,8 +40,8 @@ memcache_secret_key = {{ memcache_secret_key }}
memcached_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} memcached_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}
[neutron] [neutron]
url = {{ internal_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}
auth_uri = {{ keystone_internal_url }} auth_uri = {{ keystone_internal_url }}
url = {{ neutron_internal_endpoint }}
auth_url = {{ keystone_admin_url }} auth_url = {{ keystone_admin_url }}
auth_type = password auth_type = password
project_domain_id = {{ default_project_domain_id }} project_domain_id = {{ default_project_domain_id }}

View File

@ -112,8 +112,10 @@ mistral_api_extra_volumes: "{{ mistral_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
mistral_internal_base_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}"
mistral_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2" mistral_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2"
mistral_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2" mistral_internal_endpoint: "{{ mistral_internal_base_endpoint }}/v2"
mistral_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2" mistral_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2"
mistral_logging_debug: "{{ openstack_logging_debug }}" mistral_logging_debug: "{{ openstack_logging_debug }}"

View File

@ -53,7 +53,7 @@ memcached_servers = {% for host in groups['memcached'] %}{{ 'api' | kolla_addres
[mistral] [mistral]
url = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }} url = {{ mistral_internal_base_endpoint }}
[openstack_actions] [openstack_actions]
os_actions_endpoint_type = internal os_actions_endpoint_type = internal

View File

@ -171,7 +171,7 @@ monasca_grafana_data_sources:
name: "Monasca API" name: "Monasca API"
type: "monasca-datasource" type: "monasca-datasource"
access: "proxy" access: "proxy"
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}" url: "{{ monasca_api_internal_base_endpoint }}"
isDefault: True isDefault: True
basicAuth: false basicAuth: false
jsonData: jsonData:
@ -316,16 +316,14 @@ monasca_agent_authorized_roles:
monasca_delegate_authorized_roles: monasca_delegate_authorized_roles:
- admin - admin
monasca_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" monasca_api_admin_endpoint: "{{ monasca_api_admin_base_endpoint }}/v2.0"
monasca_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" monasca_api_internal_endpoint: "{{ monasca_api_internal_base_endpoint }}/v2.0"
monasca_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" monasca_api_public_endpoint: "{{ monasca_api_public_base_endpoint }}/v2.0"
monasca_log_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
monasca_log_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
monasca_log_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }}"
monasca_logging_debug: "{{ openstack_logging_debug }}" monasca_logging_debug: "{{ openstack_logging_debug }}"
monasca_grafana_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}"
#################### ####################
# Keystone # Keystone
#################### ####################

View File

@ -4,7 +4,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/login" url: "{{ monasca_grafana_internal_endpoint }}/login"
status_code: 200 status_code: 200
register: result register: result
until: result.get('status') == 200 until: result.get('status') == 200
@ -22,7 +22,7 @@
module_name: uri module_name: uri
module_args: module_args:
method: GET method: GET
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs" url: "{{ monasca_grafana_internal_endpoint }}/api/orgs"
user: '{{ monasca_grafana_admin_username }}' user: '{{ monasca_grafana_admin_username }}'
password: '{{ monasca_grafana_admin_password }}' password: '{{ monasca_grafana_admin_password }}'
return_content: true return_content: true
@ -39,7 +39,7 @@
module_name: uri module_name: uri
module_args: module_args:
method: POST method: POST
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs" url: "{{ monasca_grafana_internal_endpoint }}/api/orgs"
user: '{{ monasca_grafana_admin_username }}' user: '{{ monasca_grafana_admin_username }}'
password: '{{ monasca_grafana_admin_password }}' password: '{{ monasca_grafana_admin_password }}'
body_format: json body_format: json
@ -54,7 +54,7 @@
module_name: uri module_name: uri
module_args: module_args:
method: GET method: GET
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs/name/{{ monasca_grafana_control_plane_org }}" # noqa 204 url: "{{ monasca_grafana_internal_endpoint }}/api/orgs/name/{{ monasca_grafana_control_plane_org }}" # noqa 204
user: '{{ monasca_grafana_admin_username }}' user: '{{ monasca_grafana_admin_username }}'
password: '{{ monasca_grafana_admin_password }}' password: '{{ monasca_grafana_admin_password }}'
return_content: true return_content: true
@ -72,7 +72,7 @@
module_name: uri module_name: uri
module_args: module_args:
method: POST method: POST
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs/{{ monasca_grafana_conf_org.json.id }}/users" # noqa 204 url: "{{ monasca_grafana_internal_endpoint }}/api/orgs/{{ monasca_grafana_conf_org.json.id }}/users" # noqa 204
user: '{{ monasca_grafana_admin_username }}' user: '{{ monasca_grafana_admin_username }}'
password: '{{ monasca_grafana_admin_password }}' password: '{{ monasca_grafana_admin_password }}'
body: "{{ monasca_user_body | to_json }}" body: "{{ monasca_user_body | to_json }}"
@ -91,7 +91,7 @@
module_name: uri module_name: uri
module_args: module_args:
method: POST method: POST
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/user/using/{{ monasca_grafana_conf_org.json.id }}" # noqa 204 url: "{{ monasca_grafana_internal_endpoint }}/api/user/using/{{ monasca_grafana_conf_org.json.id }}" # noqa 204
user: '{{ monasca_grafana_admin_username }}' user: '{{ monasca_grafana_admin_username }}'
password: '{{ monasca_grafana_admin_password }}' password: '{{ monasca_grafana_admin_password }}'
force_basic_auth: true force_basic_auth: true
@ -102,7 +102,7 @@
kolla_toolbox: kolla_toolbox:
module_name: uri module_name: uri
module_args: module_args:
url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/datasources" url: "{{ monasca_grafana_internal_endpoint }}/api/datasources"
method: POST method: POST
user: "{{ monasca_grafana_admin_username }}" user: "{{ monasca_grafana_admin_username }}"
password: "{{ monasca_grafana_admin_password }}" password: "{{ monasca_grafana_admin_password }}"

View File

@ -21,7 +21,7 @@
--os-project-name {{ openstack_auth.project_name }} --os-project-name {{ openstack_auth.project_name }}
{% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %} {% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %}
--os-auth-url {{ keystone_admin_url }} --os-auth-url {{ keystone_admin_url }}
--murano-url {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }} --murano-url {{ murano_admin_endpoint }}
package-list package-list
register: status register: status
changed_when: False changed_when: False
@ -37,7 +37,7 @@
--os-project-name {{ openstack_auth.project_name }} --os-project-name {{ openstack_auth.project_name }}
{% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %} {% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %}
--os-auth-url {{ keystone_admin_url }} --os-auth-url {{ keystone_admin_url }}
--murano-url {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }} --murano-url {{ murano_admin_endpoint }}
package-import --exists-action u --is-public /io.murano.zip package-import --exists-action u --is-public /io.murano.zip
run_once: True run_once: True
delegate_to: "{{ groups['murano-api'][0] }}" delegate_to: "{{ groups['murano-api'][0] }}"
@ -53,7 +53,7 @@
--os-project-name {{ openstack_auth.project_name }} --os-project-name {{ openstack_auth.project_name }}
{% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %} {% if openstack_cacert != '' %}--os-cacert {{ openstack_cacert }}{% endif %}
--os-auth-url {{ keystone_admin_url }} --os-auth-url {{ keystone_admin_url }}
--murano-url {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }} --murano-url {{ murano_admin_endpoint }}
package-import --exists-action u --is-public /io.murano.applications.zip package-import --exists-action u --is-public /io.murano.applications.zip
run_once: True run_once: True
delegate_to: "{{ groups['murano-api'][0] }}" delegate_to: "{{ groups['murano-api'][0] }}"

View File

@ -45,7 +45,7 @@ password = {{ murano_keystone_password }}
cafile = {{ openstack_cacert }} cafile = {{ openstack_cacert }}
[murano] [murano]
url = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }} url = {{ murano_internal_endpoint }}
api_workers = {{ openstack_service_workers }} api_workers = {{ openstack_service_workers }}
[oslo_messaging_notifications] [oslo_messaging_notifications]

View File

@ -373,10 +373,6 @@ ironic_neutron_agent_extra_volumes: "{{ neutron_extra_volumes }}"
dhcp_agents_per_network: 2 dhcp_agents_per_network: 2
max_l3_agents_per_router: 3 max_l3_agents_per_router: 3
neutron_admin_endpoint: "{{ admin_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
neutron_internal_endpoint: "{{ internal_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
neutron_public_endpoint: "{{ public_protocol }}://{{ neutron_external_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }}"
neutron_logging_debug: "{{ openstack_logging_debug }}" neutron_logging_debug: "{{ openstack_logging_debug }}"
openstack_neutron_auth: "{{ openstack_auth }}" openstack_neutron_auth: "{{ openstack_auth }}"

View File

@ -139,12 +139,12 @@ drivers = ovs
{% if enable_octavia | bool %} {% if enable_octavia | bool %}
[octavia] [octavia]
base_url = {{ internal_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }} base_url = {{ octavia_internal_endpoint }}
{% endif %} {% endif %}
{% if enable_designate | bool %} {% if enable_designate | bool %}
[designate] [designate]
url = {{ internal_protocol }}://{{ designate_internal_fqdn | put_address_in_context('url') }}:{{ designate_api_port }}/v2 url = {{ designate_internal_endpoint }}/v2
auth_uri = {{ keystone_internal_url }} auth_uri = {{ keystone_internal_url }}
auth_url = {{ keystone_admin_url }} auth_url = {{ keystone_admin_url }}
auth_type = password auth_type = password

View File

@ -90,7 +90,7 @@ auth_type = password
project_name = service project_name = service
user_domain_name = {{ default_user_domain_name }} user_domain_name = {{ default_user_domain_name }}
project_domain_name = {{ default_project_domain_name }} project_domain_name = {{ default_project_domain_name }}
endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}/v1 endpoint_override = {{ ironic_internal_endpoint }}/v1
{% endif %} {% endif %}
@ -98,7 +98,7 @@ endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn | put_addr
lock_path = /var/lib/nova/tmp lock_path = /var/lib/nova/tmp
[glance] [glance]
api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }} api_servers = {{ glance_internal_endpoint }}
cafile = {{ openstack_cacert }} cafile = {{ openstack_cacert }}
num_retries = 3 num_retries = 3

View File

@ -131,14 +131,17 @@ nova_api_bootstrap_extra_volumes: "{{ nova_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
nova_admin_base_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}"
nova_internal_base_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}"
nova_public_base_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}"
nova_legacy_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2/%(tenant_id)s" nova_legacy_admin_endpoint: "{{ nova_admin_base_endpoint }}/v2/%(tenant_id)s"
nova_legacy_internal_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2/%(tenant_id)s" nova_legacy_internal_endpoint: "{{ nova_internal_base_endpoint }}/v2/%(tenant_id)s"
nova_legacy_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2/%(tenant_id)s" nova_legacy_public_endpoint: "{{ nova_public_base_endpoint }}/v2/%(tenant_id)s"
nova_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" nova_admin_endpoint: "{{ nova_admin_base_endpoint }}/v2.1"
nova_internal_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" nova_internal_endpoint: "{{ nova_internal_base_endpoint }}/v2.1"
nova_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" nova_public_endpoint: "{{ nova_public_base_endpoint }}/v2.1"
nova_logging_debug: "{{ openstack_logging_debug }}" nova_logging_debug: "{{ openstack_logging_debug }}"

View File

@ -49,8 +49,9 @@ enable_proxy_headers_parsing = True
lock_path = /var/lib/nova/tmp lock_path = /var/lib/nova/tmp
[glance] [glance]
api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }}
cafile = {{ openstack_cacert }} cafile = {{ openstack_cacert }}
api_servers = {{ glance_internal_endpoint }}
num_retries = {{ groups['glance-api'] | length }} num_retries = {{ groups['glance-api'] | length }}
debug = {{ nova_logging_debug }} debug = {{ nova_logging_debug }}

View File

@ -119,10 +119,6 @@ octavia_worker_extra_volumes: "{{ octavia_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
octavia_admin_endpoint: "{{ admin_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"
octavia_internal_endpoint: "{{ internal_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"
octavia_public_endpoint: "{{ public_protocol }}://{{ octavia_external_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }}"
octavia_logging_debug: "{{ openstack_logging_debug }}" octavia_logging_debug: "{{ openstack_logging_debug }}"
octavia_keystone_user: "octavia" octavia_keystone_user: "octavia"

View File

@ -9,5 +9,5 @@ clouds:
project_name: {{ keystone_admin_project }} project_name: {{ keystone_admin_project }}
project_domain_name: 'Default' project_domain_name: 'Default'
user_domain_name: 'Default' user_domain_name: 'Default'
auth_url: {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }}/v3
cacert: {{ openstack_cacert }} cacert: {{ openstack_cacert }}
auth_url: {{ keystone_admin_url }}/v3

View File

@ -11,7 +11,7 @@ receivers:
{% if enable_vitrage | bool and enable_vitrage_prometheus_datasource | bool %} {% if enable_vitrage | bool and enable_vitrage_prometheus_datasource | bool %}
webhook_configs: webhook_configs:
- send_resolved: true - send_resolved: true
url: '{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}/v1/event' url: '{{ vitrage_public_endpoint }}/v1/event'
http_config: http_config:
basic_auth: basic_auth:
username: '{{ keystone_admin_user }}' username: '{{ keystone_admin_user }}'

View File

@ -31,7 +31,7 @@ searchlight_services:
#################### ####################
# Elasticsearch # Elasticsearch
#################### ####################
searchlight_elasticsearch_url: "{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ elasticsearch_port }}" searchlight_elasticsearch_url: "{{ elasticsearch_address | put_address_in_context('url') }}:{{ elasticsearch_port }}"
#################### ####################
# Docker # Docker

View File

@ -7,7 +7,7 @@ transport_url = {{ rpc_transport_url }}
[api] [api]
port = {{ searchlight_api_port }} port = {{ searchlight_api_port }}
bind_host = {{ api_interface_address }} bind_host = {{ api_interface_address }}
public_endpoint = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ searchlight_api_port }} public_endpoint = {{ searchlight_public_endpoint }}
workers = {{ openstack_service_workers }} workers = {{ openstack_service_workers }}
[elasticsearch] [elasticsearch]

View File

@ -52,10 +52,6 @@ swift_log_level: "{{ 'DEBUG' if openstack_logging_debug | bool else 'INFO'}}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
swift_admin_endpoint: "{{ admin_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1"
swift_internal_endpoint: "{{ internal_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s"
swift_public_endpoint: "{{ public_protocol }}://{{ swift_external_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s"
swift_logging_debug: "{{ openstack_logging_debug }}" swift_logging_debug: "{{ openstack_logging_debug }}"
swift_keystone_user: "swift" swift_keystone_user: "swift"

View File

@ -11,8 +11,8 @@ admin_project_name = {{ openstack_auth.project_name }}
admin_domain_name = {{ openstack_auth.domain_name }} admin_domain_name = {{ openstack_auth.domain_name }}
[dashboard] [dashboard]
dashboard_url = {{ internal_protocol }}://{{ kolla_internal_fqdn }} dashboard_url = {{ horizon_internal_endpoint }}
login_url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}/auth/login/ login_url = {{ horizon_internal_endpoint }}/auth/login/
[service_available] [service_available]
cinder = {{ enable_cinder }} cinder = {{ enable_cinder }}
@ -32,10 +32,6 @@ flavor_ref = {{ tempest_flavor_ref_id }}
flavor_ref_alt = {{ tempest_flavor_ref_alt_id }} flavor_ref_alt = {{ tempest_flavor_ref_alt_id }}
region = {{ openstack_region_name }} region = {{ openstack_region_name }}
[dashboard]
dashboard_url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}/
login_url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}/auth/login
[identity] [identity]
region = {{ openstack_region_name }} region = {{ openstack_region_name }}
auth_version = v3 auth_version = v3

View File

@ -130,10 +130,6 @@ vitrage_persistor_extra_volumes: "{{ vitrage_extra_volumes }}"
#################### ####################
# OpenStack # OpenStack
#################### ####################
vitrage_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
vitrage_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
vitrage_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}"
vitrage_logging_debug: "{{ openstack_logging_debug }}" vitrage_logging_debug: "{{ openstack_logging_debug }}"
vitrage_keystone_user: "vitrage" vitrage_keystone_user: "vitrage"