diff --git a/ansible/filter_plugins/address.py b/ansible/filter_plugins/address.py new file mode 100644 index 0000000000..3757ee8f0e --- /dev/null +++ b/ansible/filter_plugins/address.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2019 Radosław Piliszek (yoctozepto) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from kolla_ansible.kolla_address import kolla_address +from kolla_ansible.put_address_in_context import put_address_in_context + + +class FilterModule(object): + """IP address filters""" + + def filters(self): + return { + 'kolla_address': kolla_address, + 'put_address_in_context': put_address_in_context, + } diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index d1e9f6aa80..0b351d94c5 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -64,10 +64,10 @@ container_proxy: # By default, Kolla API services bind to the network address assigned # to the api_interface. Allow the bind address to be an override. -api_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" +api_interface_address: "{{ 'api' | kolla_address }}" # This is used to get the ip corresponding to the storage_interface. -storage_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }}" +storage_interface_address: "{{ 'storage' | kolla_address }}" ################ # Chrony options @@ -109,9 +109,9 @@ docker_restart_policy_retry: "10" # Extra docker options for Zun docker_configure_for_zun: "no" -docker_zun_options: -H tcp://{{ api_interface_address }}:2375 +docker_zun_options: -H tcp://{{ api_interface_address | put_address_in_context('url') }}:2375 docker_zun_config: - cluster-store: etcd://{% for host in groups.get('etcd', []) %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['etcd_client_port'] }}{% if not loop.last %},{% endif %}{% endfor %} + cluster-store: etcd://{% for host in groups.get('etcd', []) %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['etcd_client_port'] }}{% if not loop.last %},{% endif %}{% endfor %} # Timeout after Docker sends SIGTERM before sending SIGKILL. docker_graceful_timeout: 60 @@ -165,7 +165,7 @@ om_rpc_port: "{{ rabbitmq_port }}" om_rpc_group: "rabbitmq" om_rpc_vhost: "/" -rpc_transport_url: "{{ om_rpc_transport }}://{% for host in groups[om_rpc_group] %}{{ om_rpc_user }}:{{ om_rpc_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ om_rpc_port }}{% if not loop.last %},{% endif %}{% endfor %}/{{ om_rpc_vhost }}" +rpc_transport_url: "{{ om_rpc_transport }}://{% for host in groups[om_rpc_group] %}{{ om_rpc_user }}:{{ om_rpc_password }}@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ om_rpc_port }}{% if not loop.last %},{% endif %}{% endfor %}/{{ om_rpc_vhost }}" # oslo.messaging notify transport valid options are [ rabbit ] om_notify_transport: "rabbit" @@ -175,7 +175,7 @@ om_notify_port: "{{ rabbitmq_port }}" om_notify_group: "rabbitmq" om_notify_vhost: "/" -notify_transport_url: "{{ om_notify_transport }}://{% for host in groups[om_notify_group] %}{{ om_notify_user }}:{{ om_notify_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ om_notify_port }}{% if not loop.last %},{% endif %}{% endfor %}/{{ om_notify_vhost }}" +notify_transport_url: "{{ om_notify_transport }}://{% for host in groups[om_notify_group] %}{{ om_notify_user }}:{{ om_notify_password }}@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ om_notify_port }}{% if not loop.last %},{% endif %}{% endfor %}/{{ om_notify_vhost }}" #################### # Networking options @@ -193,9 +193,24 @@ tunnel_interface: "{{ network_interface }}" octavia_network_interface: "{{ api_interface }}" bifrost_network_interface: "{{ network_interface }}" dns_interface: "{{ network_interface }}" -migration_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + migration_interface]['ipv4']['address'] }}" -tunnel_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + tunnel_interface]['ipv4']['address'] }}" -octavia_network_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + octavia_network_interface]['ipv4']['address'] }}" + +# Configure the address family (AF) per network. +# Valid options are [ ipv4, ipv6 ] +network_address_family: "ipv4" +api_address_family: "{{ network_address_family }}" +storage_address_family: "{{ network_address_family }}" +cluster_address_family: "{{ network_address_family }}" +swift_storage_address_family: "{{ storage_address_family }}" +swift_replication_address_family: "{{ swift_storage_address_family }}" +migration_address_family: "{{ network_address_family }}" +tunnel_address_family: "{{ network_address_family }}" +octavia_network_address_family: "{{ api_address_family }}" +bifrost_network_address_family: "{{ network_address_family }}" +dns_address_family: "{{ network_address_family }}" + +migration_interface_address: "{{ 'migration' | kolla_address }}" +tunnel_interface_address: "{{ 'tunnel' | kolla_address }}" +octavia_network_interface_address: "{{ 'octavia_network' | kolla_address }}" # Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs, opendaylight ] neutron_plugin_agent: "openvswitch" @@ -715,14 +730,14 @@ enable_kibana: "{{ 'yes' if enable_central_logging | bool or enable_monasca | bo #################### # Redis options #################### -redis_connection_string: "redis://{% for host in groups['redis'] %}{% if host == groups['redis'][0] %}admin:{{ redis_master_password }}@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ redis_sentinel_port }}?sentinel=kolla{% else %}&sentinel_fallback={{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ redis_sentinel_port }}{% endif %}{% endfor %}&db=0&socket_timeout=60&retry_on_timeout=yes" +redis_connection_string: "redis://{% for host in groups['redis'] %}{% if host == groups['redis'][0] %}admin:{{ redis_master_password }}@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ redis_sentinel_port }}?sentinel=kolla{% else %}&sentinel_fallback={{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ redis_sentinel_port }}{% endif %}{% endfor %}&db=0&socket_timeout=60&retry_on_timeout=yes" #################### # Osprofiler options #################### # valid values: ["elasticsearch", "redis"] osprofiler_backend: "elasticsearch" -elasticsearch_connection_string: "elasticsearch://{{ elasticsearch_address }}:{{ elasticsearch_port }}" +elasticsearch_connection_string: "elasticsearch://{{ elasticsearch_address | put_address_in_context('url') }}:{{ elasticsearch_port }}" osprofiler_backend_connection_string: "{{ redis_connection_string if osprofiler_backend == 'redis' else elasticsearch_connection_string }}" #################### @@ -762,9 +777,9 @@ kibana_log_prefix: "flog" #################### keystone_internal_fqdn: "{{ kolla_internal_fqdn }}" keystone_external_fqdn: "{{ kolla_external_fqdn }}" -keystone_admin_url: "{{ admin_protocol }}://{{ keystone_internal_fqdn }}:{{ keystone_admin_port }}" -keystone_internal_url: "{{ internal_protocol }}://{{ keystone_internal_fqdn }}:{{ keystone_public_port }}" -keystone_public_url: "{{ public_protocol }}://{{ keystone_external_fqdn }}:{{ keystone_public_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_public_url: "{{ public_protocol }}://{{ keystone_external_fqdn | put_address_in_context('url') }}:{{ keystone_public_port }}" keystone_admin_user: "admin" keystone_admin_project: "admin" diff --git a/ansible/roles/aodh/defaults/main.yml b/ansible/roles/aodh/defaults/main.yml index fd58d635fc..1d30a1ae5d 100644 --- a/ansible/roles/aodh/defaults/main.yml +++ b/ansible/roles/aodh/defaults/main.yml @@ -58,7 +58,7 @@ aodh_evaluation_interval: 300 #################### aodh_database_name: "aodh" aodh_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}aodh{% endif %}" -aodh_database_address: "{{ database_address }}:{{ database_port }}" +aodh_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Notification @@ -129,9 +129,9 @@ aodh_notifier_extra_volumes: "{{ aodh_extra_volumes }}" #################### # OpenStack #################### -aodh_admin_endpoint: "{{ admin_protocol }}://{{ aodh_internal_fqdn }}:{{ aodh_api_port }}" -aodh_internal_endpoint: "{{ internal_protocol }}://{{ aodh_internal_fqdn }}:{{ aodh_api_port }}" -aodh_public_endpoint: "{{ public_protocol }}://{{ aodh_external_fqdn }}:{{ aodh_api_port }}" +aodh_admin_endpoint: "{{ admin_protocol }}://{{ aodh_internal_fqdn | put_address_in_context('url') }}:{{ aodh_api_port }}" +aodh_internal_endpoint: "{{ internal_protocol }}://{{ aodh_internal_fqdn | put_address_in_context('url') }}:{{ aodh_api_port }}" +aodh_public_endpoint: "{{ public_protocol }}://{{ aodh_external_fqdn | put_address_in_context('url') }}:{{ aodh_api_port }}" aodh_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/aodh/templates/aodh.conf.j2 b/ansible/roles/aodh/templates/aodh.conf.j2 index 8fc3c3c16d..b424936048 100644 --- a/ansible/roles/aodh/templates/aodh.conf.j2 +++ b/ansible/roles/aodh/templates/aodh.conf.j2 @@ -16,7 +16,7 @@ connection = mysql+pymysql://{{ aodh_database_user }}:{{ aodh_database_password [keystone_authtoken] memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} www_authenticate_uri = {{ keystone_internal_url }} project_domain_name = {{ default_project_domain_name }} project_name = service diff --git a/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 b/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 index ec111eedcb..932eb6ec0f 100644 --- a/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 +++ b/ansible/roles/aodh/templates/wsgi-aodh.conf.j2 @@ -4,7 +4,7 @@ {% set python_path = '/var/lib/kolla/venv/lib/python' + distro_python_version + '/site-packages' %} {% endif %} {% set binary_path = '/usr/bin' if aodh_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ aodh_api_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ aodh_api_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/barbican/defaults/main.yml b/ansible/roles/barbican/defaults/main.yml index 37686cbc37..9ea7f5ae62 100644 --- a/ansible/roles/barbican/defaults/main.yml +++ b/ansible/roles/barbican/defaults/main.yml @@ -43,7 +43,7 @@ barbican_services: #################### barbican_database_name: "barbican" barbican_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}barbican{% endif %}" -barbican_database_address: "{{ database_address }}:{{ database_port }}" +barbican_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -93,9 +93,9 @@ barbican_worker_extra_volumes: "{{ barbican_extra_volumes }}" #################### # OpenStack #################### -barbican_admin_endpoint: "{{ admin_protocol }}://{{ barbican_internal_fqdn }}:{{ barbican_api_port }}" -barbican_internal_endpoint: "{{ internal_protocol }}://{{ barbican_internal_fqdn }}:{{ barbican_api_port }}" -barbican_public_endpoint: "{{ public_protocol }}://{{ barbican_external_fqdn }}:{{ barbican_api_port }}" +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 }}" diff --git a/ansible/roles/barbican/templates/barbican-api.ini.j2 b/ansible/roles/barbican/templates/barbican-api.ini.j2 index ce353292da..302cf98d58 100644 --- a/ansible/roles/barbican/templates/barbican-api.ini.j2 +++ b/ansible/roles/barbican/templates/barbican-api.ini.j2 @@ -1,5 +1,5 @@ [uwsgi] -socket = {{ api_interface_address }}:{{ barbican_api_listen_port }} +socket = {{ api_interface_address | put_address_in_context('url') }}:{{ barbican_api_listen_port }} protocol = http processes = {{ openstack_service_workers }} lazy = true diff --git a/ansible/roles/barbican/templates/barbican.conf.j2 b/ansible/roles/barbican/templates/barbican.conf.j2 index 06eaff3fa7..c2d14a2bca 100644 --- a/ansible/roles/barbican/templates/barbican.conf.j2 +++ b/ansible/roles/barbican/templates/barbican.conf.j2 @@ -4,7 +4,7 @@ log_dir = /var/log/kolla/barbican bind_port = {{ barbican_api_listen_port }} bind_host = {{ api_interface_address }} -host_href = {{ public_protocol }}://{{ barbican_external_fqdn }}:{{ barbican_api_port }} +host_href = {{ public_protocol }}://{{ barbican_external_fqdn | put_address_in_context('url') }}:{{ barbican_api_port }} backlog = 4096 max_allowed_secret_in_bytes = 10000 max_allowed_request_size_in_bytes = 1000000 @@ -62,7 +62,7 @@ auth_type = password memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/baremetal/tasks/pre-install.yml b/ansible/roles/baremetal/tasks/pre-install.yml index 61387beb71..e53d5452e6 100644 --- a/ansible/roles/baremetal/tasks/pre-install.yml +++ b/ansible/roles/baremetal/tasks/pre-install.yml @@ -37,7 +37,7 @@ {% set api_interface = hostvars[host]['api_interface'] %} {% if host not in groups['bifrost'] or 'ansible_' + api_interface in hostvars[host] %} {% set hostnames = [hostvars[host]['ansible_nodename'], hostvars[host]['ansible_hostname']] %} - {{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }} {{ hostnames | unique | join(' ') }} + {{ 'api' | kolla_address(host) }} {{ hostnames | unique | join(' ') }} {% endif %} {% endfor %} become: True diff --git a/ansible/roles/blazar/defaults/main.yml b/ansible/roles/blazar/defaults/main.yml index 103b5ca05d..4343348641 100644 --- a/ansible/roles/blazar/defaults/main.yml +++ b/ansible/roles/blazar/defaults/main.yml @@ -39,7 +39,7 @@ blazar_aggregate_pool_name: "freepool" #################### blazar_database_name: "blazar" blazar_database_user: "blazar" -blazar_database_address: "{{ database_address }}:{{ database_port }}" +blazar_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -77,9 +77,9 @@ blazar_manager_extra_volumes: "{{ blazar_extra_volumes }}" #################### # OpenStack #################### -blazar_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ blazar_api_port }}/v1" -blazar_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ blazar_api_port }}/v1" -blazar_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ blazar_api_port }}/v1" +blazar_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ blazar_api_port }}/v1" +blazar_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ blazar_api_port }}/v1" +blazar_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ blazar_api_port }}/v1" blazar_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/blazar/templates/blazar.conf.j2 b/ansible/roles/blazar/templates/blazar.conf.j2 index fb778e9f6b..91d1e46c01 100644 --- a/ansible/roles/blazar/templates/blazar.conf.j2 +++ b/ansible/roles/blazar/templates/blazar.conf.j2 @@ -35,7 +35,7 @@ service_token_roles_required = True memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [database] connection = mysql+pymysql://{{ blazar_database_user }}:{{ blazar_database_password }}@{{ blazar_database_address }}/{{ blazar_database_name }} diff --git a/ansible/roles/ceilometer/templates/ceilometer.conf.j2 b/ansible/roles/ceilometer/templates/ceilometer.conf.j2 index 59dfa93d0b..412e01b0bf 100644 --- a/ansible/roles/ceilometer/templates/ceilometer.conf.j2 +++ b/ansible/roles/ceilometer/templates/ceilometer.conf.j2 @@ -51,4 +51,4 @@ connection_password = {{ xenserver_password }} [cache] backend = oslo_cache.memcache_pool enabled = True -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} diff --git a/ansible/roles/ceph/defaults/main.yml b/ansible/roles/ceph/defaults/main.yml index 04d6b9d77b..e54fc224cf 100644 --- a/ansible/roles/ceph/defaults/main.yml +++ b/ansible/roles/ceph/defaults/main.yml @@ -101,9 +101,9 @@ ceph_mds_hostname: "{%- if ceph_mds_host_type == 'HOSTNAME' -%}{{ ansible_hostna #################### ## Ceph_rgw_keystone #################### -swift_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" -swift_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" -swift_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" +swift_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" +swift_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" +swift_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ rgw_port }}{{ '/' if ceph_rgw_compatibility|bool else '/swift/' }}v1" ceph_rgw_keystone_user: "ceph_rgw" diff --git a/ansible/roles/ceph/tasks/upgrade.yml b/ansible/roles/ceph/tasks/upgrade.yml index 659c78820c..2239ceac04 100644 --- a/ansible/roles/ceph/tasks/upgrade.yml +++ b/ansible/roles/ceph/tasks/upgrade.yml @@ -3,7 +3,7 @@ - name: Check final release (as running on MONs) become: true - command: "docker exec ceph_mon ceph -m {{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }} versions" + command: "docker exec ceph_mon ceph -m {{ 'storage' | kolla_address }} versions" changed_when: false register: ceph_release_command delegate_to: "{{ groups['ceph-mon'][0] }}" @@ -11,7 +11,7 @@ - name: Finalize the upgrade by disallowing older OSDs become: true - command: "docker exec ceph_mon ceph -m {{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }} osd require-osd-release {{ ((ceph_release_command.stdout|from_json).mon | string).split(' ')[4] }}" + command: "docker exec ceph_mon ceph -m {{ 'storage' | kolla_address }} osd require-osd-release {{ ((ceph_release_command.stdout|from_json).mon | string).split(' ')[4] }}" changed_when: false delegate_to: "{{ groups['ceph-mon'][0] }}" run_once: true diff --git a/ansible/roles/ceph/templates/ceph-mon.json.j2 b/ansible/roles/ceph/templates/ceph-mon.json.j2 index b92e00395b..60b88c0e80 100644 --- a/ansible/roles/ceph/templates/ceph-mon.json.j2 +++ b/ansible/roles/ceph/templates/ceph-mon.json.j2 @@ -1,5 +1,5 @@ { - "command": "/usr/bin/ceph-mon -f {% if ceph_debug %}-d{% endif %} -i {{ ceph_mon_hostname }} --public-addr {{ storage_interface_address }}:6789", + "command": "/usr/bin/ceph-mon -f {% if ceph_debug %}-d{% endif %} -i {{ ceph_mon_hostname }} --public-addr {{ storage_interface_address | put_address_in_context('url') }}:6789", "config_files": [ { "source": "{{ container_config_directory }}/ceph.conf", diff --git a/ansible/roles/ceph/templates/ceph-osd.json.j2 b/ansible/roles/ceph/templates/ceph-osd.json.j2 index fe6f754696..a73488e72e 100644 --- a/ansible/roles/ceph/templates/ceph-osd.json.j2 +++ b/ansible/roles/ceph/templates/ceph-osd.json.j2 @@ -1,5 +1,5 @@ { - "command": "/usr/bin/ceph-osd -f {% if ceph_debug %}-d{% endif %} --public-addr {{ storage_interface_address }} --cluster-addr {{ hostvars[inventory_hostname]['ansible_' + cluster_interface]['ipv4']['address'] }}", + "command": "/usr/bin/ceph-osd -f {% if ceph_debug %}-d{% endif %} --public-addr {{ storage_interface_address }} --cluster-addr {{ 'cluster' | kolla_address }}", "config_files": [ { "source": "{{ container_config_directory }}/ceph.conf", diff --git a/ansible/roles/ceph/templates/ceph.conf.j2 b/ansible/roles/ceph/templates/ceph.conf.j2 index 0f3423b929..10209e1f05 100644 --- a/ansible/roles/ceph/templates/ceph.conf.j2 +++ b/ansible/roles/ceph/templates/ceph.conf.j2 @@ -13,12 +13,16 @@ mon initial members = {% for host in groups['ceph-mon'] %}{{ hostvars[host]['ans {% elif ceph_mon_host_type == 'INVENTORY' %} mon initial members = {% for host in groups['ceph-mon'] %}{{ host }}{% if not loop.last %}, {% endif %}{% endfor %} {%- else %} -mon initial members = {% for host in groups['ceph-mon'] %}{{ hostvars[host]['ansible_' + hostvars[host]['storage_interface']]['ipv4']['address'] }}{% if not loop.last %}, {% endif %}{% endfor %} +mon initial members = {% for host in groups['ceph-mon'] %}{{ 'storage' | kolla_address(host) }}{% if not loop.last %}, {% endif %}{% endfor %} {% endif %} -mon host = {% for host in groups['ceph-mon'] %}{{ hostvars[host]['ansible_' + hostvars[host]['storage_interface']]['ipv4']['address'] }}{% if not loop.last %}, {% endif %}{% endfor %} +mon host = {% for host in groups['ceph-mon'] %}{{ 'storage' | kolla_address(host) }}{% if not loop.last %}, {% endif %}{% endfor %} -mon addr = {% for host in groups['ceph-mon'] %}{{ hostvars[host]['ansible_' + hostvars[host]['storage_interface']]['ipv4']['address'] }}:6789{% if not loop.last %}, {% endif %}{% endfor %} +mon addr = {% for host in groups['ceph-mon'] %}{{ 'storage' | kolla_address(host) | put_address_in_context('url') }}:6789{% if not loop.last %}, {% endif %}{% endfor %} + +{% if storage_address_family == 'ipv6' %} +ms bind ipv6 = true +{% endif %} auth cluster required = cephx auth service required = cephx @@ -43,8 +47,8 @@ mon cluster log file = /var/log/kolla/ceph/$cluster.log {% if service_name is defined and service_name == 'ceph-rgw' %} [client.radosgw.gateway] -host = {{ hostvars[inventory_hostname]['ansible_' + storage_interface]['ipv4']['address'] }} -rgw frontends = civetweb port={{ api_interface_address }}:{{ rgw_port }} +host = {{ 'storage' | kolla_address }} +rgw frontends = civetweb port={{ api_interface_address | put_address_in_context('url') }}:{{ rgw_port }} {% if enable_ceph_rgw_keystone | bool %} rgw_keystone_url = {{ keystone_admin_url }} rgw_keystone_admin_user = {{ ceph_rgw_keystone_user }} diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml index 44f01eedac..c049593ff1 100644 --- a/ansible/roles/cinder/defaults/main.yml +++ b/ansible/roles/cinder/defaults/main.yml @@ -91,7 +91,7 @@ ceph_client_cinder_backup_keyring_caps: #################### cinder_database_name: "cinder" cinder_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}cinder{% endif %}" -cinder_database_address: "{{ database_address }}:{{ database_port }}" +cinder_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" # Max number of object to consider # when run online data migration @@ -164,12 +164,12 @@ cinder_volume_extra_volumes: "{{ cinder_extra_volumes }}" #################### # OpenStack #################### -cinder_v2_admin_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s" -cinder_v2_internal_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s" -cinder_v2_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn }}:{{ cinder_api_port }}/v2/%(tenant_id)s" -cinder_v3_admin_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn }}:{{ cinder_api_port }}/v3/%(tenant_id)s" -cinder_v3_internal_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn }}:{{ cinder_api_port }}/v3/%(tenant_id)s" -cinder_v3_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn }}:{{ cinder_api_port }}/v3/%(tenant_id)s" +cinder_v2_admin_endpoint: "{{ admin_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" +cinder_v2_internal_endpoint: "{{ internal_protocol }}://{{ cinder_internal_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" +cinder_v2_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v2/%(tenant_id)s" +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_v3_public_endpoint: "{{ public_protocol }}://{{ cinder_external_fqdn | put_address_in_context('url') }}:{{ cinder_api_port }}/v3/%(tenant_id)s" cinder_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/cinder/templates/cinder-wsgi.conf.j2 b/ansible/roles/cinder/templates/cinder-wsgi.conf.j2 index 9230ee7187..e926fd52da 100644 --- a/ansible/roles/cinder/templates/cinder-wsgi.conf.j2 +++ b/ansible/roles/cinder/templates/cinder-wsgi.conf.j2 @@ -3,7 +3,7 @@ {% else %} {% set python_path = '/var/lib/kolla/venv/lib/python' + distro_python_version + '/site-packages' %} {% endif %} -Listen {{ api_interface_address }}:{{ cinder_api_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ cinder_api_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2 index 64796fc1dc..4dbed097ce 100644 --- a/ansible/roles/cinder/templates/cinder.conf.j2 +++ b/ansible/roles/cinder/templates/cinder.conf.j2 @@ -13,7 +13,7 @@ my_ip = {{ api_interface_address }} osapi_volume_workers = {{ openstack_service_workers }} volume_name_template = volume-%s -glance_api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn }}:{{ glance_api_port }} +glance_api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }} glance_num_retries = {{ groups['glance-api'] | length }} glance_api_version = 2 @@ -42,7 +42,7 @@ backup_share = {{ cinder_backup_share }} backup_file_size = 327680000 {% elif enable_swift | bool and cinder_backup_driver == "swift" %} backup_driver = cinder.backup.drivers.swift.SwiftBackupDriver -backup_swift_url = {{ internal_protocol }}://{{ swift_internal_fqdn }}:{{ swift_proxy_server_port }}/v1/AUTH_ +backup_swift_url = {{ internal_protocol }}://{{ swift_internal_fqdn | put_address_in_context('url') }}:{{ swift_proxy_server_port }}/v1/AUTH_ backup_swift_auth = per_user backup_swift_auth_version = 1 backup_swift_user = @@ -103,7 +103,7 @@ password = {{ cinder_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_concurrency] @@ -210,5 +210,5 @@ auth_endpoint = {{ keystone_internal_url }} backend_url = {{ redis_connection_string }} {% elif cinder_coordination_backend == 'etcd' %} # NOTE(jeffrey4l): python-etcd3 module do not support multi endpoint here. -backend_url = etcd3://{{ hostvars[groups['etcd'][0]]['ansible_' + hostvars[groups['etcd'][0]]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} +backend_url = etcd3://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endif %} diff --git a/ansible/roles/cloudkitty/defaults/main.yml b/ansible/roles/cloudkitty/defaults/main.yml index 2621a807fe..d23ec2a121 100644 --- a/ansible/roles/cloudkitty/defaults/main.yml +++ b/ansible/roles/cloudkitty/defaults/main.yml @@ -34,7 +34,7 @@ cloudkitty_services: #################### cloudkitty_database_name: "cloudkitty" cloudkitty_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}cloudkitty{% endif %}" -cloudkitty_database_address: "{{ database_address }}:{{ database_port }}" +cloudkitty_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -72,9 +72,9 @@ cloudkitty_api_extra_volumes: "{{ cloudkitty_extra_volumes }}" #################### # OpenStack #################### -cloudkitty_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ cloudkitty_api_port }}" -cloudkitty_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ cloudkitty_api_port }}" -cloudkitty_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ cloudkitty_api_port }}" +cloudkitty_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ cloudkitty_api_port }}" +cloudkitty_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ cloudkitty_api_port }}" +cloudkitty_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ cloudkitty_api_port }}" cloudkitty_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 index c3dcf0aa6a..5679aec15b 100644 --- a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 +++ b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 @@ -27,7 +27,7 @@ region_name = {{ openstack_region_name }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_concurrency] lock_path = /var/lib/cloudkitty/tmp diff --git a/ansible/roles/cloudkitty/templates/wsgi-cloudkitty.conf.j2 b/ansible/roles/cloudkitty/templates/wsgi-cloudkitty.conf.j2 index 03c9b114f8..24b170a966 100644 --- a/ansible/roles/cloudkitty/templates/wsgi-cloudkitty.conf.j2 +++ b/ansible/roles/cloudkitty/templates/wsgi-cloudkitty.conf.j2 @@ -1,6 +1,6 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if cloudkitty_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} {% set binary_path = '/usr/bin' if cloudkitty_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ cloudkitty_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ cloudkitty_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/collectd/templates/collectd.conf.j2 b/ansible/roles/collectd/templates/collectd.conf.j2 index fad5e438fb..3c8ef90f88 100644 --- a/ansible/roles/collectd/templates/collectd.conf.j2 +++ b/ansible/roles/collectd/templates/collectd.conf.j2 @@ -7,5 +7,5 @@ LoadPlugin memory LoadPlugin network - Server "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" "{{ collectd_udp_port }}" + Server "{{ 'api' | kolla_address }}" "{{ collectd_udp_port }}" diff --git a/ansible/roles/common/templates/conf/output/00-local.conf.j2 b/ansible/roles/common/templates/conf/output/00-local.conf.j2 index 00fd6d5ffe..f9753eb9d6 100644 --- a/ansible/roles/common/templates/conf/output/00-local.conf.j2 +++ b/ansible/roles/common/templates/conf/output/00-local.conf.j2 @@ -33,7 +33,7 @@ @type monasca keystone_url {{ keystone_internal_url }} - monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_log_api_port }} + monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_log_api_version v3.0 username {{ monasca_agent_user }} password {{ monasca_agent_password }} @@ -81,7 +81,7 @@ @type monasca keystone_url {{ keystone_internal_url }} - monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_log_api_port }} + monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_log_api_version v3.0 username {{ monasca_agent_user }} password {{ monasca_agent_password }} diff --git a/ansible/roles/common/templates/conf/output/02-monasca.conf.j2 b/ansible/roles/common/templates/conf/output/02-monasca.conf.j2 index 420e6cdad7..dad304e6c1 100644 --- a/ansible/roles/common/templates/conf/output/02-monasca.conf.j2 +++ b/ansible/roles/common/templates/conf/output/02-monasca.conf.j2 @@ -3,7 +3,7 @@ @type monasca keystone_url {{ keystone_internal_url }} - monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_log_api_port }} + monasca_log_api {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_log_api_port }} monasca_log_api_version v3.0 username {{ monasca_agent_user }} password {{ monasca_agent_password }} diff --git a/ansible/roles/congress/defaults/main.yml b/ansible/roles/congress/defaults/main.yml index fd1c0e92e5..0837ad7d94 100644 --- a/ansible/roles/congress/defaults/main.yml +++ b/ansible/roles/congress/defaults/main.yml @@ -41,7 +41,7 @@ congress_services: #################### congress_database_name: "congress" congress_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}congress{% endif %}" -congress_database_address: "{{ database_address }}:{{ database_port }}" +congress_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -90,9 +90,9 @@ congress_datasource_extra_volumes: "{{ congress_extra_volumes }}" #################### # OpenStack #################### -congress_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ congress_api_port }}" -congress_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ congress_api_port }}" -congress_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ congress_api_port }}" +congress_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ congress_api_port }}" +congress_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ congress_api_port }}" +congress_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ congress_api_port }}" congress_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/congress/templates/congress.conf.j2 b/ansible/roles/congress/templates/congress.conf.j2 index 5eb3260aa3..8bf690796e 100644 --- a/ansible/roles/congress/templates/congress.conf.j2 +++ b/ansible/roles/congress/templates/congress.conf.j2 @@ -40,7 +40,7 @@ password = {{ congress_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} @@ -54,4 +54,4 @@ policy_file = {{ congress_policy_file }} enable_proxy_headers_parsing = True [congress] -url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ congress_api_port }} +url = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ congress_api_port }} diff --git a/ansible/roles/cyborg/defaults/main.yml b/ansible/roles/cyborg/defaults/main.yml index e6af6ae413..c2c79b3145 100644 --- a/ansible/roles/cyborg/defaults/main.yml +++ b/ansible/roles/cyborg/defaults/main.yml @@ -29,7 +29,7 @@ cyborg_services: #################### cyborg_database_name: "cyborg" cyborg_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}cyborg{% endif %}" -cyborg_database_address: "{{ database_address }}:{{ database_port }}" +cyborg_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -77,9 +77,9 @@ cyborg_conductor_extra_volumes: "{{ cyborg_extra_volumes }}" #################### # OpenStack #################### -cyborg_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ cyborg_api_port }}" -cyborg_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ cyborg_api_port }}" -cyborg_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ cyborg_api_port }}" +cyborg_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ cyborg_api_port }}" +cyborg_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ cyborg_api_port }}" +cyborg_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ cyborg_api_port }}" cyborg_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/cyborg/templates/cyborg.conf.j2 b/ansible/roles/cyborg/templates/cyborg.conf.j2 index 6fd8dae9ec..7bf0a1b3cd 100644 --- a/ansible/roles/cyborg/templates/cyborg.conf.j2 +++ b/ansible/roles/cyborg/templates/cyborg.conf.j2 @@ -16,14 +16,14 @@ connection = mysql+pymysql://{{ cyborg_database_user }}:{{ cyborg_database_passw [keystone_authtoken] memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %} -auth_uri = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_public_port }} +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 }} project_domain_name = {{ default_project_domain_name }} project_name = service user_domain_name = {{ default_user_domain_name }} username = {{ cyborg_keystone_user }} password = {{ cyborg_keystone_password }} -auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }} +auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }} auth_type = password {% if cyborg_policy_file is defined %} diff --git a/ansible/roles/designate/defaults/main.yml b/ansible/roles/designate/defaults/main.yml index b91a13e46a..162746f620 100644 --- a/ansible/roles/designate/defaults/main.yml +++ b/ansible/roles/designate/defaults/main.yml @@ -71,7 +71,7 @@ designate_services: #################### designate_database_name: "designate" designate_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}designate{% endif %}" -designate_database_address: "{{ database_address }}:{{ database_port }}" +designate_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -164,9 +164,9 @@ designate_sink_extra_volumes: "{{ designate_extra_volumes }}" #################### # OpenStack #################### -designate_admin_endpoint: "{{ admin_protocol }}://{{ designate_internal_fqdn }}:{{ designate_api_port }}" -designate_internal_endpoint: "{{ internal_protocol }}://{{ designate_internal_fqdn }}:{{ designate_api_port }}" -designate_public_endpoint: "{{ public_protocol }}://{{ designate_external_fqdn }}:{{ designate_api_port }}" +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 }}" designate_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/designate/tasks/precheck.yml b/ansible/roles/designate/tasks/precheck.yml index 10d67e6b85..c470b39743 100644 --- a/ansible/roles/designate/tasks/precheck.yml +++ b/ansible/roles/designate/tasks/precheck.yml @@ -21,7 +21,7 @@ - name: Checking free port for designate mdns wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + dns_interface]['ipv4']['address'] }}" + host: "{{ 'dns' | kolla_address }}" port: "{{ designate_mdns_port }}" connect_timeout: 1 timeout: 1 diff --git a/ansible/roles/designate/templates/designate.conf.j2 b/ansible/roles/designate/templates/designate.conf.j2 index 580ccccfdf..686cb3c669 100644 --- a/ansible/roles/designate/templates/designate.conf.j2 +++ b/ansible/roles/designate/templates/designate.conf.j2 @@ -11,8 +11,8 @@ default_pool_id = {{ designate_pool_id }} workers = {{ openstack_service_workers }} [service:api] -listen = {{ api_interface_address }}:{{ designate_api_listen_port }} -api_base_uri = {{ internal_protocol }}://{{ designate_internal_fqdn }}:{{ designate_api_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 }} workers = {{ openstack_service_workers }} enable_api_admin = True enable_host_header = True @@ -32,7 +32,7 @@ service_token_roles_required = True memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [service:sink] enabled_notification_handlers = nova_fixed, neutron_floatingip @@ -40,7 +40,7 @@ workers = {{ openstack_service_workers }} {% if service_name == 'designate-mdns' %} [service:mdns] -listen = {{ hostvars[inventory_hostname]['ansible_' + dns_interface]['ipv4']['address'] }}:{{ designate_mdns_port }} +listen = {{ 'dns' | kolla_address | put_address_in_context('url') }}:{{ designate_mdns_port }} workers = {{ openstack_service_workers }} {% endif %} @@ -104,5 +104,5 @@ policy_file = {{ designate_policy_file }} backend_url = {{ redis_connection_string }} {% elif designate_coordination_backend == 'etcd' %} # NOTE(noxoid): python-etcd3 does not support multiple endpoints -backend_url = etcd3://{{ hostvars[groups['etcd'][0]]['ansible_' + hostvars[groups['etcd'][0]]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} +backend_url = etcd3://{{ 'api' | kolla_address(groups['etcd'][0]) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endif %} diff --git a/ansible/roles/designate/templates/named.conf.j2 b/ansible/roles/designate/templates/named.conf.j2 index 94512c4d15..c3b164e4f6 100644 --- a/ansible/roles/designate/templates/named.conf.j2 +++ b/ansible/roles/designate/templates/named.conf.j2 @@ -1,9 +1,9 @@ #jinja2: trim_blocks: False include "/etc/rndc.key"; options { - listen-on port {{ designate_bind_port }} { {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }}; }; + listen-on port {{ designate_bind_port }} { {{ 'api' | kolla_address }}; }; {% if api_interface != dns_interface %} - listen-on port {{ designate_bind_port }} { {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['dns_interface']]['ipv4']['address'] }}; }; + listen-on port {{ designate_bind_port }} { {{ 'dns' | kolla_address }}; }; {% endif %} directory "/var/lib/named"; allow-new-zones yes; @@ -15,9 +15,9 @@ options { forwarders { {{ designate_forwarders_addresses }}; }; {% endif %} minimal-responses yes; - allow-notify { {% for host in groups['designate-worker'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }};{% endfor %} }; + allow-notify { {% for host in groups['designate-worker'] %}{{ 'api' | kolla_address(host) }};{% endfor %} }; }; controls { - inet {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }} port {{ designate_rndc_port }} allow { {% for host in groups['designate-worker'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}; {% endfor %} } keys { "rndc-key"; }; + inet {{ 'api' | kolla_address }} port {{ designate_rndc_port }} allow { {% for host in groups['designate-worker'] %}{{ 'api' | kolla_address(host) }}; {% endfor %} } keys { "rndc-key"; }; }; diff --git a/ansible/roles/designate/templates/pools.yaml.j2 b/ansible/roles/designate/templates/pools.yaml.j2 index eddbba77c7..b88c9ad4c2 100644 --- a/ansible/roles/designate/templates/pools.yaml.j2 +++ b/ansible/roles/designate/templates/pools.yaml.j2 @@ -9,7 +9,7 @@ nameservers: {% if designate_backend == 'bind9' %} {% for host in groups['designate-backend-bind9'] %} - - host: {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }} + - host: {{ 'api' | kolla_address(host) }} port: {{ designate_bind_port }} {% endfor %} {% elif designate_backend_external == 'bind9' %} @@ -22,16 +22,16 @@ {% if designate_backend == 'bind9' %} {% for bind_host in groups['designate-backend-bind9'] %} - type: bind9 - description: BIND9 Server {{ hostvars[bind_host]['ansible_' + hostvars[bind_host]['api_interface']]['ipv4']['address'] }} + description: BIND9 Server {{ 'api' | kolla_address(bind_host) }} masters: {% for mdns_host in groups['designate-mdns'] %} - - host: {{ hostvars[mdns_host]['ansible_' + hostvars[mdns_host]['dns_interface']]['ipv4']['address'] }} + - host: {{ 'dns' | kolla_address(mdns_host) }} port: {{ designate_mdns_port }} {% endfor %} options: - host: {{ hostvars[bind_host]['ansible_' + hostvars[bind_host]['api_interface']]['ipv4']['address'] }} + host: {{ 'api' | kolla_address(bind_host) }} port: {{ designate_bind_port }} - rndc_host: {{ hostvars[bind_host]['ansible_' + hostvars[bind_host]['api_interface']]['ipv4']['address'] }} + rndc_host: {{ 'api' | kolla_address(bind_host) }} rndc_port: {{ designate_rndc_port }} rndc_key_file: /etc/designate/rndc.key {% endfor %} @@ -41,7 +41,7 @@ description: BIND9 Server {{ bind_host }} masters: {% for mdns_host in groups['designate-mdns'] %} - - host: {{ hostvars[mdns_host]['ansible_' + hostvars[mdns_host]['dns_interface']]['ipv4']['address'] }} + - host: {{ 'dns' | kolla_address(mdns_host) }} port: {{ designate_mdns_port }} {% endfor %} options: @@ -71,7 +71,7 @@ description: Default Infoblox Pool masters: {% for mdns_host in groups['designate-mdns'] %} - - host: {{ hostvars[mdns_host]['ansible_' + hostvars[mdns_host]['dns_interface']]['ipv4']['address'] }} + - host: {{ 'dns' | kolla_address(mdns_host) }} port: {{ designate_mdns_port }} {% endfor %} options: diff --git a/ansible/roles/designate/templates/rndc.conf.j2 b/ansible/roles/designate/templates/rndc.conf.j2 index 69ec742987..82e139ff07 100644 --- a/ansible/roles/designate/templates/rndc.conf.j2 +++ b/ansible/roles/designate/templates/rndc.conf.j2 @@ -1,6 +1,6 @@ #include "/etc/rndc.key"; options { default-key "rndc-key"; - default-server {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }}; + default-server {{ 'api' | kolla_address }}; default-port {{ designate_rndc_port }}; }; diff --git a/ansible/roles/elasticsearch/tasks/upgrade.yml b/ansible/roles/elasticsearch/tasks/upgrade.yml index cacf7f2ee5..3633a61a91 100644 --- a/ansible/roles/elasticsearch/tasks/upgrade.yml +++ b/ansible/roles/elasticsearch/tasks/upgrade.yml @@ -3,7 +3,7 @@ # https://www.elastic.co/guide/en/elasticsearch/reference/5.6/restart-upgrade.html - name: Disable shard allocation uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/_cluster/settings" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/_cluster/settings" method: PUT status_code: 200 return_content: yes @@ -14,7 +14,7 @@ - name: Perform a synced flush uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/_flush/synced" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/_flush/synced" method: POST status_code: 200 return_content: yes diff --git a/ansible/roles/elasticsearch/templates/elasticsearch.yml.j2 b/ansible/roles/elasticsearch/templates/elasticsearch.yml.j2 index b853914244..618fd03089 100644 --- a/ansible/roles/elasticsearch/templates/elasticsearch.yml.j2 +++ b/ansible/roles/elasticsearch/templates/elasticsearch.yml.j2 @@ -2,12 +2,12 @@ {% set minimum_master_nodes = (num_nodes / 2 + 1) | round(0, 'floor') | int if num_nodes > 2 else 1 %} {% set recover_after_nodes = (num_nodes * 2 / 3) | round(0, 'floor') | int if num_nodes > 1 else 1 %} node.name: "{{ api_interface_address }}" -network.host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" +network.host: "{{ 'api' | kolla_address }}" cluster.name: "{{ elasticsearch_cluster_name }}" node.master: true node.data: true -discovery.zen.ping.unicast.hosts: [{% for host in groups['elasticsearch'] %}"{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}"{% if not loop.last %},{% endif %}{% endfor %}] +discovery.zen.ping.unicast.hosts: [{% for host in groups['elasticsearch'] %}"{{ 'api' | kolla_address(host) }}"{% if not loop.last %},{% endif %}{% endfor %}] discovery.zen.minimum_master_nodes: {{ minimum_master_nodes }} http.port: {{ elasticsearch_port }} diff --git a/ansible/roles/etcd/defaults/main.yml b/ansible/roles/etcd/defaults/main.yml index 4d6688aa93..3b9d8f05ab 100644 --- a/ansible/roles/etcd/defaults/main.yml +++ b/ansible/roles/etcd/defaults/main.yml @@ -9,12 +9,12 @@ etcd_services: environment: ETCD_DATA_DIR: "/var/lib/etcd" ETCD_NAME: "{{ ansible_hostname }}" - ETCD_ADVERTISE_CLIENT_URLS: "{{ internal_protocol }}://{{ api_interface_address }}:{{ etcd_client_port }}" - ETCD_LISTEN_CLIENT_URLS: "{{ internal_protocol }}://{{ api_interface_address }}:{{ etcd_client_port }}" - ETCD_INITIAL_ADVERTISE_PEER_URLS: "{{ internal_protocol }}://{{ api_interface_address }}:{{ etcd_peer_port }}" - ETCD_LISTEN_PEER_URLS: "{{ internal_protocol }}://{{ api_interface_address }}:{{ etcd_peer_port }}" + ETCD_ADVERTISE_CLIENT_URLS: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}" + ETCD_LISTEN_CLIENT_URLS: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}" + ETCD_INITIAL_ADVERTISE_PEER_URLS: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_peer_port }}" + ETCD_LISTEN_PEER_URLS: "{{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_peer_port }}" ETCD_INITIAL_CLUSTER_TOKEN: "{{ etcd_cluster_token }}" - ETCD_INITIAL_CLUSTER: "{% for host in groups['etcd'] %}{{ hostvars[host]['ansible_hostname'] }}={{ internal_protocol }}://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ etcd_peer_port }}{% if not loop.last %},{% endif %}{% endfor %}" + ETCD_INITIAL_CLUSTER: "{% for host in groups['etcd'] %}{{ hostvars[host]['ansible_hostname'] }}={{ internal_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_OUT_FILE: "/var/log/kolla/etcd/etcd.log" KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}" diff --git a/ansible/roles/freezer/defaults/main.yml b/ansible/roles/freezer/defaults/main.yml index 9b4cb0d927..a701ff82ab 100644 --- a/ansible/roles/freezer/defaults/main.yml +++ b/ansible/roles/freezer/defaults/main.yml @@ -34,7 +34,7 @@ freezer_services: freezer_database_backend: "mariadb" 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_address: "{{ database_address }}:{{ database_port }}" +freezer_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" freezer_elasticsearch_replicas: "1" freezer_es_protocol: freezer_es_address: @@ -77,9 +77,9 @@ freezer_scheduler_extra_volumes: "{{ freezer_extra_volumes }}" #################### # OpenStack #################### -freezer_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ freezer_api_port }}" -freezer_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ freezer_api_port }}" -freezer_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ freezer_api_port }}" +freezer_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ freezer_api_port }}" +freezer_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ freezer_api_port }}" +freezer_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ freezer_api_port }}" freezer_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/freezer/templates/freezer.conf.j2 b/ansible/roles/freezer/templates/freezer.conf.j2 index 35b5741c62..e31e48c737 100644 --- a/ansible/roles/freezer/templates/freezer.conf.j2 +++ b/ansible/roles/freezer/templates/freezer.conf.j2 @@ -33,7 +33,7 @@ password = {{ freezer_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if freezer_policy_file is defined %} [oslo_policy] @@ -63,7 +63,7 @@ backend = elasticsearch driver = elasticsearch [elasticsearch] -hosts = {{ freezer_es_protocol }}://{{ freezer_es_address }}:{{ freezer_es_port }} +hosts = {{ freezer_es_protocol }}://{{ freezer_es_address | put_address_in_context('url') }}:{{ freezer_es_port }} number_of_replicas = {{ freezer_elasticsearch_replicas }} index = freezer {% endif %} diff --git a/ansible/roles/freezer/templates/wsgi-freezer-api.conf.j2 b/ansible/roles/freezer/templates/wsgi-freezer-api.conf.j2 index 47b696315b..601bfacf5a 100644 --- a/ansible/roles/freezer/templates/wsgi-freezer-api.conf.j2 +++ b/ansible/roles/freezer/templates/wsgi-freezer-api.conf.j2 @@ -1,6 +1,6 @@ {% set freezer_log_dir = '/var/log/kolla/freezer' %} {% set python_path = '/usr/lib/python2.7/site-packages' if freezer_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} -Listen {{ api_interface_address }}:{{ freezer_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ freezer_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/glance/defaults/main.yml b/ansible/roles/glance/defaults/main.yml index c71f793874..2c661535c3 100644 --- a/ansible/roles/glance/defaults/main.yml +++ b/ansible/roles/glance/defaults/main.yml @@ -37,7 +37,7 @@ glance_services: #################### # HAProxy #################### -haproxy_members: "{% for host in glance_api_hosts %}server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ glance_api_listen_port }} check inter 2000 rise 2 fall 5;{% endfor %}" +haproxy_members: "{% for host in glance_api_hosts %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ glance_api_listen_port }} check inter 2000 rise 2 fall 5;{% endfor %}" #################### # Keystone @@ -92,7 +92,7 @@ ceph_client_glance_keyring_caps: #################### glance_database_name: "glance" glance_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}glance{% endif %}" -glance_database_address: "{{ database_address }}:{{ database_port }}" +glance_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -147,9 +147,9 @@ glance_store_backends: "{{ glance_backends|selectattr('enabled', 'equalto', true # OpenStack #################### -glance_admin_endpoint: "{{ admin_protocol }}://{{ glance_internal_fqdn }}:{{ glance_api_port }}" -glance_internal_endpoint: "{{ internal_protocol }}://{{ glance_internal_fqdn }}:{{ glance_api_port }}" -glance_public_endpoint: "{{ public_protocol }}://{{ glance_external_fqdn }}:{{ glance_api_port }}" +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 }}" glance_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/glance/templates/glance-api.conf.j2 b/ansible/roles/glance/templates/glance-api.conf.j2 index f26cab7900..a7f68d0198 100644 --- a/ansible/roles/glance/templates/glance-api.conf.j2 +++ b/ansible/roles/glance/templates/glance-api.conf.j2 @@ -38,7 +38,7 @@ password = {{ glance_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [paste_deploy] flavor = {% if enable_glance_image_cache | bool %}keystone+cachemanagement{% else %}keystone{% endif %} diff --git a/ansible/roles/gnocchi/defaults/main.yml b/ansible/roles/gnocchi/defaults/main.yml index 0a1cb29ed6..b16c6f0a87 100644 --- a/ansible/roles/gnocchi/defaults/main.yml +++ b/ansible/roles/gnocchi/defaults/main.yml @@ -69,7 +69,7 @@ swift_admin_tenant_name: "admin" #################### gnocchi_database_name: "gnocchi" gnocchi_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}gnocchi{% endif %}" -gnocchi_database_address: "{{ database_address }}:{{ database_port }}" +gnocchi_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -120,9 +120,9 @@ gnocchi_statsd_extra_volumes: "{{ gnocchi_extra_volumes }}" #################### # OpenStack #################### -gnocchi_admin_endpoint: "{{ admin_protocol }}://{{ gnocchi_internal_fqdn }}:{{ gnocchi_api_port }}" -gnocchi_internal_endpoint: "{{ internal_protocol }}://{{ gnocchi_internal_fqdn }}:{{ gnocchi_api_port }}" -gnocchi_public_endpoint: "{{ public_protocol }}://{{ gnocchi_external_fqdn }}:{{ gnocchi_api_port }}" +gnocchi_admin_endpoint: "{{ admin_protocol }}://{{ gnocchi_internal_fqdn | put_address_in_context('url') }}:{{ gnocchi_api_port }}" +gnocchi_internal_endpoint: "{{ internal_protocol }}://{{ gnocchi_internal_fqdn | put_address_in_context('url') }}:{{ gnocchi_api_port }}" +gnocchi_public_endpoint: "{{ public_protocol }}://{{ gnocchi_external_fqdn | put_address_in_context('url') }}:{{ gnocchi_api_port }}" gnocchi_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/gnocchi/templates/gnocchi.conf.j2 b/ansible/roles/gnocchi/templates/gnocchi.conf.j2 index 98a607fa4f..7a952fe334 100644 --- a/ansible/roles/gnocchi/templates/gnocchi.conf.j2 +++ b/ansible/roles/gnocchi/templates/gnocchi.conf.j2 @@ -53,7 +53,7 @@ auth_type = password memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if gnocchi_policy_file is defined %} [oslo_policy] @@ -87,5 +87,5 @@ swift_project_name = {{ swift_admin_tenant_name }} {% if enable_grafana | bool %} [cors] -allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ grafana_server_port }} +allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }} {% endif %} diff --git a/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 b/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 index 1392aa1515..a78219555d 100644 --- a/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 +++ b/ansible/roles/gnocchi/templates/wsgi-gnocchi.conf.j2 @@ -4,7 +4,7 @@ {% set python_path = '/var/lib/kolla/venv/lib/python' + distro_python_version + '/site-packages' %} {% endif %} {% set wsgi_path = '/usr/bin' if gnocchi_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ gnocchi_api_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ gnocchi_api_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/grafana/defaults/main.yml b/ansible/roles/grafana/defaults/main.yml index 57130572d5..7589142a53 100644 --- a/ansible/roles/grafana/defaults/main.yml +++ b/ansible/roles/grafana/defaults/main.yml @@ -26,7 +26,7 @@ grafana_services: #################### grafana_database_name: "grafana" grafana_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}grafana{% endif %}" -grafana_database_address: "{{ database_address }}:{{ database_port }}" +grafana_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Datasource @@ -39,7 +39,7 @@ grafana_data_sources: database: "telegraf" name: "telegraf" type: "influxdb" - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ influxdb_http_port }}" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ influxdb_http_port }}" access: "proxy" basicAuth: false elasticsearch: @@ -48,7 +48,7 @@ grafana_data_sources: name: "elasticsearch" type: "elasticsearch" access: "proxy" - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}" database: "flog-*" jsonData: esVersion: 5 diff --git a/ansible/roles/grafana/tasks/post_config.yml b/ansible/roles/grafana/tasks/post_config.yml index 438f38f57a..07385f5234 100644 --- a/ansible/roles/grafana/tasks/post_config.yml +++ b/ansible/roles/grafana/tasks/post_config.yml @@ -1,7 +1,7 @@ --- - name: Wait for grafana application ready uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ grafana_server_port }}/login" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ grafana_server_port }}/login" status_code: 200 register: result until: result.get('status') == 200 @@ -11,7 +11,7 @@ - name: Enable grafana datasources uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ grafana_server_port }}/api/datasources" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ grafana_server_port }}/api/datasources" method: POST user: "{{ grafana_admin_username }}" password: "{{ grafana_admin_password }}" @@ -29,7 +29,7 @@ - name: Disable Getting Started panel uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ grafana_server_port }}/api/user/helpflags/1" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ grafana_server_port }}/api/user/helpflags/1" method: PUT user: "{{ grafana_admin_username }}" password: "{{ grafana_admin_password }}" diff --git a/ansible/roles/grafana/templates/prometheus.yaml.j2 b/ansible/roles/grafana/templates/prometheus.yaml.j2 index ce9b96748a..f1be95873c 100644 --- a/ansible/roles/grafana/templates/prometheus.yaml.j2 +++ b/ansible/roles/grafana/templates/prometheus.yaml.j2 @@ -5,5 +5,5 @@ datasources: type: prometheus access: proxy orgId: 1 - url: http://{{ kolla_internal_vip_address }}:{{ prometheus_port }} + url: http://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ prometheus_port }} version: 1 diff --git a/ansible/roles/haproxy-config/templates/haproxy_single_service_listen.cfg.j2 b/ansible/roles/haproxy-config/templates/haproxy_single_service_listen.cfg.j2 index c23071a373..d8a3dccfcc 100644 --- a/ansible/roles/haproxy-config/templates/haproxy_single_service_listen.cfg.j2 +++ b/ansible/roles/haproxy-config/templates/haproxy_single_service_listen.cfg.j2 @@ -60,9 +60,8 @@ listen {{ service_name }} {% endfor %} {% else %} {% for host in groups[host_group] %} - {% set api_interface = "ansible_%s"|format(hostvars[host]['api_interface']) %} {% set host_name = hostvars[host]['ansible_hostname'] %} - {% set host_ip = hostvars[host][api_interface]['ipv4']['address'] %} + {% set host_ip = 'api' | kolla_address(host) %} server {{ host_name }} {{ host_ip }}:{{ listen_port }} {{ haproxy_health_check }} {% endfor %} {% endif %} diff --git a/ansible/roles/haproxy-config/templates/haproxy_single_service_split.cfg.j2 b/ansible/roles/haproxy-config/templates/haproxy_single_service_split.cfg.j2 index 2e3eee74a7..27b63e4da6 100644 --- a/ansible/roles/haproxy-config/templates/haproxy_single_service_split.cfg.j2 +++ b/ansible/roles/haproxy-config/templates/haproxy_single_service_split.cfg.j2 @@ -80,9 +80,8 @@ backend {{ service_name }}_back {% endfor %} {% else %} {% for host in groups[host_group] %} - {% set api_interface = "ansible_%s"|format(hostvars[host]['api_interface']) %} {% set host_name = hostvars[host]['ansible_hostname'] %} - {% set host_ip = hostvars[host][api_interface]['ipv4']['address'] %} + {% set host_ip = 'api' | kolla_address(host) %} server {{ host_name }} {{ host_ip }}:{{ listen_port }} {{ haproxy_health_check }} {% endfor %} {% endif %} diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml index 6a99c2b78f..7dd8db2651 100644 --- a/ansible/roles/haproxy/tasks/precheck.yml +++ b/ansible/roles/haproxy/tasks/precheck.yml @@ -169,13 +169,13 @@ - inventory_hostname in groups['haproxy'] - api_interface_address != kolla_internal_vip_address +# FIXME(yoctozepto): this req seems arbitrary, they need not be, just routable is fine - name: Checking if kolla_internal_vip_address is in the same network as api_interface on all nodes become: true command: ip -o addr show dev {{ api_interface }} register: ip_addr_output changed_when: false failed_when: >- - '169.254.' not in kolla_internal_vip_address and ( ip_addr_output is failed or kolla_internal_vip_address | ipaddr(ip_addr_output.stdout.split()[3]) is none) when: diff --git a/ansible/roles/haproxy/tasks/upgrade.yml b/ansible/roles/haproxy/tasks/upgrade.yml index 20711fcc2c..f77113291a 100644 --- a/ansible/roles/haproxy/tasks/upgrade.yml +++ b/ansible/roles/haproxy/tasks/upgrade.yml @@ -1,15 +1,16 @@ --- - include_tasks: config.yml -- set_fact: secondary_addresses={{ hostvars[inventory_hostname]['ansible_' + api_interface].get('ipv4_secondaries', []) | map(attribute='address') | list }} - - name: Stopping all slave keepalived containers + vars: + key: "{{ 'ipv6' if api_address_family == 'ipv6' else 'ipv4_secondaries' }}" + addresses: "{{ hostvars[inventory_hostname]['ansible_' + api_interface].get(key, []) | map(attribute='address') | list }}" become: true kolla_docker: action: "stop_container" common_options: "{{ docker_common_options }}" name: "keepalived" - when: kolla_internal_vip_address not in secondary_addresses + when: kolla_internal_vip_address not in addresses notify: - Restart keepalived container diff --git a/ansible/roles/haproxy/templates/keepalived.conf.j2 b/ansible/roles/haproxy/templates/keepalived.conf.j2 index 0fd81bf8e1..43ac5d7aa3 100644 --- a/ansible/roles/haproxy/templates/keepalived.conf.j2 +++ b/ansible/roles/haproxy/templates/keepalived.conf.j2 @@ -17,7 +17,7 @@ vrrp_instance kolla_internal_vip_{{ keepalived_virtual_router_id }} { {% if groups['haproxy'] | length > 1 %} unicast_peer { {% for host in groups['haproxy'] %} -{% set ip_addr = hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] %} +{% set ip_addr = 'api' | kolla_address(host) %} {% if ip_addr != api_interface_address %} {{ ip_addr }} {% endif %} diff --git a/ansible/roles/heat/defaults/main.yml b/ansible/roles/heat/defaults/main.yml index aaee97bce6..02b7a77a4d 100644 --- a/ansible/roles/heat/defaults/main.yml +++ b/ansible/roles/heat/defaults/main.yml @@ -55,7 +55,7 @@ heat_services: #################### heat_database_name: "heat" heat_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}heat{% endif %}" -heat_database_address: "{{ database_address }}:{{ database_port }}" +heat_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -104,12 +104,12 @@ heat_engine_extra_volumes: "{{ heat_extra_volumes }}" #################### # OpenStack #################### -heat_admin_endpoint: "{{ admin_protocol }}://{{ heat_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s" -heat_internal_endpoint: "{{ internal_protocol }}://{{ heat_internal_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s" -heat_public_endpoint: "{{ public_protocol }}://{{ heat_external_fqdn }}:{{ heat_api_port }}/v1/%(tenant_id)s" -heat_cfn_admin_endpoint: "{{ admin_protocol }}://{{ heat_cfn_internal_fqdn }}:{{ heat_api_cfn_port }}/v1" -heat_cfn_internal_endpoint: "{{ internal_protocol }}://{{ heat_cfn_internal_fqdn }}:{{ heat_api_cfn_port }}/v1" -heat_cfn_public_endpoint: "{{ public_protocol }}://{{ heat_cfn_external_fqdn }}:{{ heat_api_cfn_port }}/v1" +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_public_endpoint: "{{ public_protocol }}://{{ heat_external_fqdn | put_address_in_context('url') }}:{{ heat_api_port }}/v1/%(tenant_id)s" +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_public_endpoint: "{{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }}/v1" heat_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/heat/templates/heat.conf.j2 b/ansible/roles/heat/templates/heat.conf.j2 index 45b081ab85..5df52f6c84 100644 --- a/ansible/roles/heat/templates/heat.conf.j2 +++ b/ansible/roles/heat/templates/heat.conf.j2 @@ -3,8 +3,8 @@ debug = {{ heat_logging_debug }} log_dir = /var/log/kolla/heat -heat_metadata_server_url = {{ public_protocol }}://{{ heat_cfn_external_fqdn }}:{{ heat_api_cfn_port }} -heat_waitcondition_server_url = {{ public_protocol }}://{{ heat_cfn_external_fqdn }}:{{ heat_api_cfn_port }}/v1/waitcondition +heat_metadata_server_url = {{ public_protocol }}://{{ heat_cfn_external_fqdn | put_address_in_context('url') }}:{{ heat_api_cfn_port }} +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 }} @@ -52,13 +52,13 @@ password = {{ heat_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [cache] backend = oslo_cache.memcache_pool enabled = True -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [trustee] diff --git a/ansible/roles/horizon/defaults/main.yml b/ansible/roles/horizon/defaults/main.yml index ced3f46934..811ee93f64 100644 --- a/ansible/roles/horizon/defaults/main.yml +++ b/ansible/roles/horizon/defaults/main.yml @@ -74,7 +74,7 @@ horizon_keystone_domain_choices: #################### horizon_database_name: "horizon" horizon_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}horizon{% endif %}" -horizon_database_address: "{{ database_address }}:{{ database_port }}" +horizon_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker diff --git a/ansible/roles/horizon/templates/horizon.conf.j2 b/ansible/roles/horizon/templates/horizon.conf.j2 index cef86f374d..7c509676ab 100644 --- a/ansible/roles/horizon/templates/horizon.conf.j2 +++ b/ansible/roles/horizon/templates/horizon.conf.j2 @@ -1,6 +1,6 @@ {% set python_path = '/usr/share/openstack-dashboard' if horizon_install_type == 'binary' else '/var/lib/kolla/venv/lib/python' + distro_python_version + '/site-packages' %} -Listen {{ api_interface_address }}:{{ horizon_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ horizon_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/horizon/templates/local_settings.j2 b/ansible/roles/horizon/templates/local_settings.j2 index 8e9b676be7..16b2bf7d32 100644 --- a/ansible/roles/horizon/templates/local_settings.j2 +++ b/ansible/roles/horizon/templates/local_settings.j2 @@ -179,7 +179,7 @@ SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', - 'LOCATION': [{% for host in groups['memcached'] %}'{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}'{% if not loop.last %},{% endif %}{% endfor %}] + 'LOCATION': [{% for host in groups['memcached'] %}'{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}'{% if not loop.last %},{% endif %}{% endfor %}] } } {% endif %} diff --git a/ansible/roles/influxdb/templates/influxdb.conf.j2 b/ansible/roles/influxdb/templates/influxdb.conf.j2 index e849afdc7b..799ce1b31f 100644 --- a/ansible/roles/influxdb/templates/influxdb.conf.j2 +++ b/ansible/roles/influxdb/templates/influxdb.conf.j2 @@ -36,7 +36,7 @@ reporting-disabled = true store-interval = "10s" [http] enabled = true - bind-address = "{{ api_interface_address }}:{{ influxdb_http_port }}" + bind-address = "{{ api_interface_address | put_address_in_context('url') }}:{{ influxdb_http_port }}" auth-enabled = false log-enabled = true write-tracing = false diff --git a/ansible/roles/ironic/defaults/main.yml b/ansible/roles/ironic/defaults/main.yml index 370157c791..5d29aba90f 100644 --- a/ansible/roles/ironic/defaults/main.yml +++ b/ansible/roles/ironic/defaults/main.yml @@ -81,11 +81,11 @@ ironic_services: #################### ironic_database_name: "ironic" ironic_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}ironic{% endif %}" -ironic_database_address: "{{ database_address }}:{{ database_port }}" +ironic_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" ironic_inspector_database_name: "ironic_inspector" ironic_inspector_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}ironic_inspector{% endif %}" -ironic_inspector_database_address: "{{ database_address }}:{{ database_port }}" +ironic_inspector_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -173,13 +173,13 @@ ironic_dnsmasq_extra_volumes: "{{ ironic_extra_volumes }}" #################### ironic_inspector_keystone_user: "ironic-inspector" -ironic_admin_endpoint: "{{ admin_protocol }}://{{ ironic_internal_fqdn }}:{{ ironic_api_port }}" -ironic_internal_endpoint: "{{ internal_protocol }}://{{ ironic_internal_fqdn }}:{{ ironic_api_port }}" -ironic_public_endpoint: "{{ public_protocol }}://{{ ironic_external_fqdn }}:{{ ironic_api_port }}" +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 }}:{{ ironic_inspector_port }}" -ironic_inspector_internal_endpoint: "{{ internal_protocol }}://{{ ironic_inspector_internal_fqdn }}:{{ ironic_inspector_port }}" -ironic_inspector_public_endpoint: "{{ public_protocol }}://{{ ironic_inspector_external_fqdn }}:{{ 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_public_endpoint: "{{ public_protocol }}://{{ ironic_inspector_external_fqdn | put_address_in_context('url') }}:{{ ironic_inspector_port }}" ironic_logging_debug: "{{ openstack_logging_debug }}" @@ -197,7 +197,7 @@ ironic_dnsmasq_default_gateway: ironic_dnsmasq_boot_file: "{% if enable_ironic_ipxe | bool %}undionly.kpxe{% else %}pxelinux.0{% endif %}" ironic_cleaning_network: ironic_console_serial_speed: "115200n8" -ironic_ipxe_url: http://{{ api_interface_address }}:{{ ironic_ipxe_port }} +ironic_ipxe_url: http://{{ api_interface_address | put_address_in_context('url') }}:{{ ironic_ipxe_port }} ironic_enable_rolling_upgrade: "yes" ironic_inspector_kernel_cmdline_extras: [] ironic_inspector_pxe_filter: "{% if enable_neutron | bool %}dnsmasq{% else %}none{% endif %}" diff --git a/ansible/roles/ironic/templates/inspector.ipxe.j2 b/ansible/roles/ironic/templates/inspector.ipxe.j2 index b82afa83ff..cd25a1ae88 100644 --- a/ansible/roles/ironic/templates/inspector.ipxe.j2 +++ b/ansible/roles/ironic/templates/inspector.ipxe.j2 @@ -13,6 +13,6 @@ chain pxelinux.cfg/${mac:hexhyp} || goto inspector_ipa :inspector_ipa :retry_boot imgfree -kernel --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.kernel ipa-inspection-callback-url=http://{{ ironic_inspector_internal_fqdn }}:{{ 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=http://{{ 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 initrd --timeout 30000 {{ ironic_ipxe_url }}/ironic-agent.initramfs || goto retry_boot boot diff --git a/ansible/roles/ironic/templates/ironic-dnsmasq.conf.j2 b/ansible/roles/ironic/templates/ironic-dnsmasq.conf.j2 index 89a54f9ba1..44e53e4da3 100644 --- a/ansible/roles/ironic/templates/ironic-dnsmasq.conf.j2 +++ b/ansible/roles/ironic/templates/ironic-dnsmasq.conf.j2 @@ -1,13 +1,22 @@ +# NOTE(yoctozepto): ironic-dnsmasq is used to deliver DHCP(v6) service +# DNS service is disabled: port=0 + interface={{ ironic_dnsmasq_interface }} +bind-interfaces + dhcp-range={{ ironic_dnsmasq_dhcp_range }} +dhcp-sequential-ip + +{% if api_address_family == 'ipv6' %} +{# TODO(yoctozepto): IPv6-only support - DHCPv6 PXE support #} +{# different options must be used here #} +{% else %}{# ipv4 #} {% if ironic_dnsmasq_default_gateway is not none %} dhcp-option=3,{{ ironic_dnsmasq_default_gateway }} {% endif %} dhcp-option=option:tftp-server,{{ api_interface_address }} dhcp-option=option:server-ip-address,{{ api_interface_address }} -bind-interfaces -dhcp-sequential-ip dhcp-option=210,/tftpboot/ {% if enable_ironic_ipxe | bool %} dhcp-match=ipxe,175 @@ -20,6 +29,8 @@ dhcp-option=tag:ipxe,option:bootfile-name,{{ ironic_ipxe_url }}/inspector.ipxe dhcp-option=tag:efi,tag:!ipxe,option:bootfile-name,ipxe.efi {% endif %} dhcp-option=option:bootfile-name,{{ ironic_dnsmasq_boot_file }} +{% endif %}{# ipv6/ipv4 #} + {% if ironic_inspector_pxe_filter == 'dnsmasq' %} dhcp-hostsdir=/etc/dnsmasq/dhcp-hostsdir {% endif %} diff --git a/ansible/roles/ironic/templates/ironic-inspector.conf.j2 b/ansible/roles/ironic/templates/ironic-inspector.conf.j2 index 1cbd379633..54b68eab5d 100644 --- a/ansible/roles/ironic/templates/ironic-inspector.conf.j2 +++ b/ansible/roles/ironic/templates/ironic-inspector.conf.j2 @@ -40,7 +40,7 @@ password = {{ ironic_inspector_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% endif %} {% if ironic_policy_file is defined %} diff --git a/ansible/roles/ironic/templates/ironic-ipxe-httpd.conf.j2 b/ansible/roles/ironic/templates/ironic-ipxe-httpd.conf.j2 index 8109e21e3e..41a554d518 100644 --- a/ansible/roles/ironic/templates/ironic-ipxe-httpd.conf.j2 +++ b/ansible/roles/ironic/templates/ironic-ipxe-httpd.conf.j2 @@ -1,4 +1,4 @@ -Listen {{ api_interface_address }}:{{ ironic_ipxe_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ ironic_ipxe_port }} TraceEnable off diff --git a/ansible/roles/ironic/templates/ironic.conf.j2 b/ansible/roles/ironic/templates/ironic.conf.j2 index 5290bad3b5..d22e1d0f7b 100644 --- a/ansible/roles/ironic/templates/ironic.conf.j2 +++ b/ansible/roles/ironic/templates/ironic.conf.j2 @@ -66,7 +66,7 @@ valid_interfaces = internal memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% endif %} {% if enable_cinder | bool %} @@ -151,7 +151,7 @@ region_name = {{ openstack_region_name }} valid_interfaces = internal {% else %} auth_type = none -endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn }}:{{ ironic_api_port }} +endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }} {% endif %} [agent] diff --git a/ansible/roles/ironic/templates/pxelinux.default.j2 b/ansible/roles/ironic/templates/pxelinux.default.j2 index 7f0880970d..518d8aa64d 100644 --- a/ansible/roles/ironic/templates/pxelinux.default.j2 +++ b/ansible/roles/ironic/templates/pxelinux.default.j2 @@ -2,6 +2,6 @@ default introspect label introspect kernel ironic-agent.kernel -append initrd=ironic-agent.initramfs ipa-inspection-callback-url=http://{{ ironic_inspector_internal_fqdn }}:{{ 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=http://{{ 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(' ') }} ipappend 3 diff --git a/ansible/roles/iscsi/templates/tgtd.json.j2 b/ansible/roles/iscsi/templates/tgtd.json.j2 index 3f38ef996f..0501c52fbd 100644 --- a/ansible/roles/iscsi/templates/tgtd.json.j2 +++ b/ansible/roles/iscsi/templates/tgtd.json.j2 @@ -1,4 +1,4 @@ { - "command": "tgtd -d 1 -f --iscsi portal={{ api_interface_address }}:{{ iscsi_port }}", + "command": "tgtd -d 1 -f --iscsi portal={{ api_interface_address | put_address_in_context('url') }}:{{ iscsi_port }}", "config_files": [] } diff --git a/ansible/roles/kafka/defaults/main.yml b/ansible/roles/kafka/defaults/main.yml index eeb055ae65..720da8bb2b 100644 --- a/ansible/roles/kafka/defaults/main.yml +++ b/ansible/roles/kafka/defaults/main.yml @@ -19,7 +19,7 @@ kafka_services: kafka_cluster_name: "kolla_kafka" kafka_log_dir: "/var/log/kolla/kafka" kafka_heap_opts: "-Xmx1G -Xms1G" -kafka_zookeeper: "{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ zookeeper_client_port }}{% if not loop.last %},{% endif %}{% endfor %}" +kafka_zookeeper: "{% for host in groups['zookeeper'] %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ zookeeper_client_port }}{% if not loop.last %},{% endif %}{% endfor %}" kafka_broker_count: "{{ groups['kafka'] | length }}" #################### diff --git a/ansible/roles/kafka/templates/kafka.server.properties.j2 b/ansible/roles/kafka/templates/kafka.server.properties.j2 index db3ada59c0..d7acf2dbd6 100644 --- a/ansible/roles/kafka/templates/kafka.server.properties.j2 +++ b/ansible/roles/kafka/templates/kafka.server.properties.j2 @@ -1,4 +1,4 @@ -listeners=PLAINTEXT://{{ api_interface_address }}:{{ kafka_port }} +listeners=PLAINTEXT://{{ api_interface_address | put_address_in_context('url') }}:{{ kafka_port }} controlled.shutdown.enable=true auto.leader.rebalance.enable=true num.network.threads=3 diff --git a/ansible/roles/karbor/defaults/main.yml b/ansible/roles/karbor/defaults/main.yml index 83b0870dae..6c6c3282b6 100644 --- a/ansible/roles/karbor/defaults/main.yml +++ b/ansible/roles/karbor/defaults/main.yml @@ -41,7 +41,7 @@ karbor_services: #################### karbor_database_name: "karbor" karbor_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}karbor{% endif %}" -karbor_database_address: "{{ database_address }}:{{ database_port }}" +karbor_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -87,9 +87,9 @@ karbor_api_extra_volumes: "{{ karbor_extra_volumes }}" #################### # OpenStack #################### -karbor_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ karbor_api_port }}/v1/%(project_id)s" -karbor_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ karbor_api_port }}/v1/%(project_id)s" -karbor_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ karbor_api_port }}/v1/%(project_id)s" +karbor_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s" +karbor_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s" +karbor_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ karbor_api_port }}/v1/%(project_id)s" karbor_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/karbor/templates/karbor.conf.j2 b/ansible/roles/karbor/templates/karbor.conf.j2 index 94d2d65a83..4190e04bf8 100644 --- a/ansible/roles/karbor/templates/karbor.conf.j2 +++ b/ansible/roles/karbor/templates/karbor.conf.j2 @@ -42,7 +42,7 @@ password = {{ karbor_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/keystone/defaults/main.yml b/ansible/roles/keystone/defaults/main.yml index c6ac1ad0b3..a9f992912a 100644 --- a/ansible/roles/keystone/defaults/main.yml +++ b/ansible/roles/keystone/defaults/main.yml @@ -57,7 +57,7 @@ keystone_services: #################### keystone_database_name: "keystone" keystone_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}keystone{% endif %}" -keystone_database_address: "{{ database_address }}:{{ database_port }}" +keystone_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### diff --git a/ansible/roles/keystone/templates/fernet-node-sync.sh.j2 b/ansible/roles/keystone/templates/fernet-node-sync.sh.j2 index 971b332760..afc7d87052 100644 --- a/ansible/roles/keystone/templates/fernet-node-sync.sh.j2 +++ b/ansible/roles/keystone/templates/fernet-node-sync.sh.j2 @@ -11,6 +11,6 @@ fi # For each host node sync tokens {% for host in groups['keystone'] %} {% if inventory_hostname != host %} -/usr/bin/rsync -azu --delete -e 'ssh -i /var/lib/keystone/.ssh/id_rsa -p {{ hostvars[host]['keystone_ssh_port'] }} -F /var/lib/keystone/.ssh/config' keystone@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:/etc/keystone/fernet-keys/ /etc/keystone/fernet-keys +/usr/bin/rsync -azu --delete -e 'ssh -i /var/lib/keystone/.ssh/id_rsa -p {{ hostvars[host]['keystone_ssh_port'] }} -F /var/lib/keystone/.ssh/config' keystone@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:/etc/keystone/fernet-keys/ /etc/keystone/fernet-keys {% endif %} {% endfor %} diff --git a/ansible/roles/keystone/templates/fernet-push.sh.j2 b/ansible/roles/keystone/templates/fernet-push.sh.j2 index cd77375812..6179cb2a81 100644 --- a/ansible/roles/keystone/templates/fernet-push.sh.j2 +++ b/ansible/roles/keystone/templates/fernet-push.sh.j2 @@ -2,6 +2,6 @@ {% for host in groups['keystone'] %} {% if inventory_hostname != host %} -/usr/bin/rsync -az -e 'ssh -i /var/lib/keystone/.ssh/id_rsa -p {{ hostvars[host]['keystone_ssh_port'] }} -F /var/lib/keystone/.ssh/config' --delete /etc/keystone/fernet-keys/ keystone@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:/etc/keystone/fernet-keys +/usr/bin/rsync -az -e 'ssh -i /var/lib/keystone/.ssh/id_rsa -p {{ hostvars[host]['keystone_ssh_port'] }} -F /var/lib/keystone/.ssh/config' --delete /etc/keystone/fernet-keys/ keystone@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:/etc/keystone/fernet-keys {% endif %} {% endfor %} diff --git a/ansible/roles/keystone/templates/keystone.conf.j2 b/ansible/roles/keystone/templates/keystone.conf.j2 index 8340dd5d5d..d8664e96ae 100644 --- a/ansible/roles/keystone/templates/keystone.conf.j2 +++ b/ansible/roles/keystone/templates/keystone.conf.j2 @@ -46,7 +46,7 @@ max_active_keys = {{ ((fernet_token_expiry | int + [cache] backend = oslo_cache.memcache_pool enabled = True -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} @@ -68,5 +68,5 @@ connection_string = {{ osprofiler_backend_connection_string }} {% if enable_grafana | bool %} [cors] -allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ grafana_server_port }} +allowed_origin = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ grafana_server_port }} {% endif %} diff --git a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 index 1dc914a5d2..99899e4f2e 100644 --- a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 +++ b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 @@ -5,8 +5,8 @@ {% set python_path = '/var/lib/kolla/venv/lib/python' + distro_python_version + '/site-packages' %} {% endif %} {% set binary_path = '/usr/bin' if keystone_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ keystone_public_listen_port }} -Listen {{ api_interface_address }}:{{ keystone_admin_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ keystone_public_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ keystone_admin_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/kibana/tasks/post_config.yml b/ansible/roles/kibana/tasks/post_config.yml index bba785ee45..bc3b512550 100644 --- a/ansible/roles/kibana/tasks/post_config.yml +++ b/ansible/roles/kibana/tasks/post_config.yml @@ -7,7 +7,7 @@ - name: Register the kibana index in elasticsearch uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/.kibana" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/.kibana" method: PUT body: "{{ kibana_default_index_options | to_json }}" body_format: json @@ -22,7 +22,7 @@ - name: Wait for kibana to register in elasticsearch uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/.kibana" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/.kibana" status_code: 200 register: result until: result.status == 200 @@ -32,7 +32,7 @@ - name: Change kibana config to set index as defaultIndex uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/.kibana/config/*" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/.kibana/config/*" method: PUT body: defaultIndex: "{{ kibana_default_index_pattern }}" @@ -44,7 +44,7 @@ uri: headers: Content-Type: application/json - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/.kibana" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/.kibana" method: GET register: kibana_default_indexes run_once: true @@ -60,7 +60,7 @@ - name: Add index pattern to kibana uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}/.kibana/index-pattern/{{ kibana_default_index_pattern }}" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}/.kibana/index-pattern/{{ kibana_default_index_pattern }}" method: PUT body: "{{ kibana_default_index | to_json }}" body_format: json diff --git a/ansible/roles/kibana/templates/kibana.yml.j2 b/ansible/roles/kibana/templates/kibana.yml.j2 index ecd33f2d4a..581dcafce0 100644 --- a/ansible/roles/kibana/templates/kibana.yml.j2 +++ b/ansible/roles/kibana/templates/kibana.yml.j2 @@ -2,7 +2,7 @@ kibana.defaultAppId: "{{ kibana_default_app_id }}" logging.dest: /var/log/kolla/kibana/kibana.log server.port: {{ kibana_server_port }} server.host: "{{ api_interface_address }}" -elasticsearch.url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ elasticsearch_port }}" +elasticsearch.url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ elasticsearch_port }}" elasticsearch.requestTimeout: {{ kibana_elasticsearch_request_timeout }} elasticsearch.shardTimeout: {{ kibana_elasticsearch_shard_timeout }} elasticsearch.ssl.verificationMode: "{{ 'full' if kibana_elasticsearch_ssl_verify | bool else 'none' }}" diff --git a/ansible/roles/kuryr/templates/kuryr.conf.j2 b/ansible/roles/kuryr/templates/kuryr.conf.j2 index 9aad659266..b41e5f41e9 100644 --- a/ansible/roles/kuryr/templates/kuryr.conf.j2 +++ b/ansible/roles/kuryr/templates/kuryr.conf.j2 @@ -1,5 +1,5 @@ [DEFAULT] -kuryr_uri = {{ internal_protocol }}://{{ api_interface_address }}:{{ kuryr_port }} +kuryr_uri = {{ internal_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ kuryr_port }} debug = {{ kuryr_logging_debug }} log_dir = /var/log/kolla/kuryr diff --git a/ansible/roles/kuryr/templates/kuryr.spec.j2 b/ansible/roles/kuryr/templates/kuryr.spec.j2 index e9a7ada93a..15ccc34da6 100644 --- a/ansible/roles/kuryr/templates/kuryr.spec.j2 +++ b/ansible/roles/kuryr/templates/kuryr.spec.j2 @@ -1 +1 @@ -http://{{ api_interface_address }}:{{ kuryr_port }} +http://{{ api_interface_address | put_address_in_context('url') }}:{{ kuryr_port }} diff --git a/ansible/roles/magnum/defaults/main.yml b/ansible/roles/magnum/defaults/main.yml index 818c74cc66..89e4983a3a 100644 --- a/ansible/roles/magnum/defaults/main.yml +++ b/ansible/roles/magnum/defaults/main.yml @@ -37,7 +37,7 @@ magnum_services: #################### magnum_database_name: "magnum" magnum_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}magnum{% endif %}" -magnum_database_address: "{{ database_address }}:{{ database_port }}" +magnum_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -85,9 +85,9 @@ magnum_conductor_extra_volumes: "{{ magnum_extra_volumes }}" #################### # OpenStack #################### -magnum_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1" -magnum_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ magnum_api_port }}/v1" -magnum_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ magnum_api_port }}/v1" +magnum_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ magnum_api_port }}/v1" +magnum_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ magnum_api_port }}/v1" +magnum_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ magnum_api_port }}/v1" magnum_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/magnum/templates/magnum.conf.j2 b/ansible/roles/magnum/templates/magnum.conf.j2 index 67517f68ee..c7c5fcdad8 100644 --- a/ansible/roles/magnum/templates/magnum.conf.j2 +++ b/ansible/roles/magnum/templates/magnum.conf.j2 @@ -68,7 +68,7 @@ password = {{ magnum_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [trust] trustee_domain_admin_password = {{ magnum_keystone_password }} diff --git a/ansible/roles/manila/defaults/main.yml b/ansible/roles/manila/defaults/main.yml index a668c1f4e2..e6ca925350 100644 --- a/ansible/roles/manila/defaults/main.yml +++ b/ansible/roles/manila/defaults/main.yml @@ -65,7 +65,7 @@ ceph_client_manila_keyring_caps: ##################### manila_database_name: "manila" manila_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}manila{% endif %}" -manila_database_address: "{{ database_address }}:{{ database_port }}" +manila_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" ##################### @@ -129,12 +129,12 @@ manila_data_extra_volumes: "{{ manila_extra_volumes }}" ##################### ## OpenStack ##################### -manila_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s" -manila_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ manila_api_port }}/v1/%(tenant_id)s" -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_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" +manila_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" +manila_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ manila_api_port }}/v1/%(tenant_id)s" +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_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/manila/templates/manila-share.conf.j2 b/ansible/roles/manila/templates/manila-share.conf.j2 index 26989d33b3..0e66d9bdc7 100644 --- a/ansible/roles/manila/templates/manila-share.conf.j2 +++ b/ansible/roles/manila/templates/manila-share.conf.j2 @@ -19,7 +19,7 @@ password = {{ cinder_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [nova] auth_uri = {{ keystone_internal_url }} @@ -35,10 +35,10 @@ password = {{ nova_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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] -url = {{ internal_protocol }}://{{ neutron_internal_fqdn }}:{{ neutron_server_port }} +url = {{ internal_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }} auth_uri = {{ keystone_internal_url }} auth_url = {{ keystone_admin_url }} auth_type = password @@ -52,7 +52,7 @@ password = {{ neutron_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if enable_manila_backend_generic | bool %} [generic] diff --git a/ansible/roles/manila/templates/manila.conf.j2 b/ansible/roles/manila/templates/manila.conf.j2 index 2b01dc1399..7ee7f9a917 100644 --- a/ansible/roles/manila/templates/manila.conf.j2 +++ b/ansible/roles/manila/templates/manila.conf.j2 @@ -40,7 +40,7 @@ password = {{ manila_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/mariadb/defaults/main.yml b/ansible/roles/mariadb/defaults/main.yml index 50d661f57b..054eb9bd59 100644 --- a/ansible/roles/mariadb/defaults/main.yml +++ b/ansible/roles/mariadb/defaults/main.yml @@ -45,7 +45,7 @@ database_max_timeout: 120 #################### # HAProxy #################### -internal_haproxy_members: "{% for host in groups['mariadb'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mariadb_port }} check inter 2000 rise 2 fall 5{% if not loop.first %} backup{% endif %};{% endfor %}" +internal_haproxy_members: "{% for host in groups['mariadb'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ mariadb_port }} check inter 2000 rise 2 fall 5{% if not loop.first %} backup{% endif %};{% endfor %}" external_haproxy_members: "{% for host in groups['mariadb'] %}server {{ host }} {{ host }}:{{ mariadb_port }} check inter 2000 rise 2 fall 5{% if not loop.first %} backup{% endif %};{% endfor %}" #################### diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2 index 5ee209cd37..a66b8c87d8 100644 --- a/ansible/roles/mariadb/templates/galera.cnf.j2 +++ b/ansible/roles/mariadb/templates/galera.cnf.j2 @@ -26,12 +26,12 @@ character-set-server = utf8 datadir=/var/lib/mysql/ -wsrep_cluster_address=gcomm://{% if (groups['mariadb'] | length) > 1 %}{% for host in groups['mariadb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mariadb_wsrep_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %} +wsrep_cluster_address=gcomm://{% if (groups['mariadb'] | length) > 1 %}{% for host in groups['mariadb'] %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ mariadb_wsrep_port }}{% if not loop.last %},{% endif %}{% endfor %}{% endif %} -wsrep_provider_options=gmcast.listen_addr=tcp://{{ api_interface_address }}:{{ mariadb_wsrep_port }};ist.recv_addr={{ api_interface_address }}:{{ mariadb_ist_port }} +wsrep_provider_options=gmcast.listen_addr=tcp://{{ api_interface_address | put_address_in_context('url') }}:{{ mariadb_wsrep_port }};ist.recv_addr={{ api_interface_address | put_address_in_context('url') }}:{{ mariadb_ist_port }} -wsrep_node_address={{ api_interface_address }}:{{ mariadb_wsrep_port }} -wsrep_sst_receive_address={{ api_interface_address }}:{{ mariadb_sst_port }} +wsrep_node_address={{ api_interface_address | put_address_in_context('url') }}:{{ mariadb_wsrep_port }} +wsrep_sst_receive_address={{ api_interface_address | put_address_in_context('url') }}:{{ mariadb_sst_port }} wsrep_provider={{ wsrep_driver }} wsrep_cluster_name="{{ database_cluster_name }}" @@ -61,3 +61,12 @@ innodb_lock_schedule_algorithm = FCFS [server] pid-file=/var/lib/mysql/mariadb.pid + +[sst] +{% if sst_method == 'mariabackup' and api_address_family == 'ipv6' %} +# NOTE(yoctozepto): for IPv6 we need to tweak sockopt for socat (mariabackup sst backend) +# see: https://mariadb.com/kb/en/library/xtrabackup-v2-sst-method/#performing-ssts-with-ipv6-addresses +# and: https://jira.mariadb.org/browse/MDEV-18797 +# this can be removed when MDEV-18797 is resolved +sockopt=",pf=ip6" +{% endif %} diff --git a/ansible/roles/masakari/defaults/main.yml b/ansible/roles/masakari/defaults/main.yml index 7423749e7e..00d1723bb1 100644 --- a/ansible/roles/masakari/defaults/main.yml +++ b/ansible/roles/masakari/defaults/main.yml @@ -42,7 +42,7 @@ masakari_services: #################### masakari_database_name: "masakari" masakari_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}masakari{% endif %}" -masakari_database_address: "{{ database_address }}:{{ database_port }}" +masakari_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -92,9 +92,9 @@ masakari_instancemonitor_default_volumes: #################### # OpenStack #################### -masakari_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ masakari_api_port }}" -masakari_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ masakari_api_port }}" -masakari_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ masakari_api_port }}" +masakari_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ masakari_api_port }}" +masakari_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ masakari_api_port }}" +masakari_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ masakari_api_port }}" masakari_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/masakari/templates/masakari-monitors.conf.j2 b/ansible/roles/masakari/templates/masakari-monitors.conf.j2 index c3a3241b6e..142075894a 100644 --- a/ansible/roles/masakari/templates/masakari-monitors.conf.j2 +++ b/ansible/roles/masakari/templates/masakari-monitors.conf.j2 @@ -12,4 +12,4 @@ username = {{ masakari_keystone_user }} password = {{ masakari_keystone_password }} [libvirt] -connection_uri = "qemu+tcp://{{ migration_interface_address }}/system" +connection_uri = "qemu+tcp://{{ migration_interface_address | put_address_in_context('url') }}/system" diff --git a/ansible/roles/masakari/templates/masakari.conf.j2 b/ansible/roles/masakari/templates/masakari.conf.j2 index b8d97c6f58..4111eac980 100644 --- a/ansible/roles/masakari/templates/masakari.conf.j2 +++ b/ansible/roles/masakari/templates/masakari.conf.j2 @@ -32,7 +32,7 @@ region_name = {{ openstack_region_name }} {% if enable_memcached | bool %} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% endif %} [oslo_messaging_notifications] diff --git a/ansible/roles/masakari/templates/wsgi-masakari.conf.j2 b/ansible/roles/masakari/templates/wsgi-masakari.conf.j2 index a551aa0e75..9849b5bb49 100644 --- a/ansible/roles/masakari/templates/wsgi-masakari.conf.j2 +++ b/ansible/roles/masakari/templates/wsgi-masakari.conf.j2 @@ -5,7 +5,7 @@ {% endif %} {% set binary_path = '/usr/bin' if masakari_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ masakari_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ masakari_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/memcached/defaults/main.yml b/ansible/roles/memcached/defaults/main.yml index d721fe511e..0fc550288f 100644 --- a/ansible/roles/memcached/defaults/main.yml +++ b/ansible/roles/memcached/defaults/main.yml @@ -25,7 +25,7 @@ memcached_services: #################### # HAProxy #################### -haproxy_members: "{% for host in groups['memcached'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }} check inter 2000 rise 2 fall 5{% if not loop.first %} backup{% endif %};{% endfor %}" +haproxy_members: "{% for host in groups['memcached'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ memcached_port }} check inter 2000 rise 2 fall 5{% if not loop.first %} backup{% endif %};{% endfor %}" #################### # Docker diff --git a/ansible/roles/mistral/defaults/main.yml b/ansible/roles/mistral/defaults/main.yml index b8f0dac904..321daab5e9 100644 --- a/ansible/roles/mistral/defaults/main.yml +++ b/ansible/roles/mistral/defaults/main.yml @@ -48,7 +48,7 @@ mistral_services: #################### mistral_database_name: "mistral" mistral_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}mistral{% endif %}" -mistral_database_address: "{{ database_address }}:{{ database_port }}" +mistral_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -108,9 +108,9 @@ mistral_api_extra_volumes: "{{ mistral_extra_volumes }}" #################### # OpenStack #################### -mistral_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}/v2" -mistral_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }}/v2" -mistral_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ 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_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }}/v2" mistral_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/mistral/templates/mistral.conf.j2 b/ansible/roles/mistral/templates/mistral.conf.j2 index 60e7cb3094..b612cc57ff 100644 --- a/ansible/roles/mistral/templates/mistral.conf.j2 +++ b/ansible/roles/mistral/templates/mistral.conf.j2 @@ -48,11 +48,11 @@ password = {{ mistral_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [mistral] -url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ mistral_api_port }} +url = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ mistral_api_port }} [openstack_actions] os_actions_endpoint_type = internal diff --git a/ansible/roles/monasca/defaults/main.yml b/ansible/roles/monasca/defaults/main.yml index ccd2294018..c0eb7bc139 100644 --- a/ansible/roles/monasca/defaults/main.yml +++ b/ansible/roles/monasca/defaults/main.yml @@ -141,11 +141,11 @@ monasca_influxdb_retention_policy: #################### # Monasca #################### -monasca_kafka_servers: "{% for host in groups['kafka'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ kafka_port }}{% if not loop.last %},{% endif %}{% endfor %}" -monasca_zookeeper_servers: "{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ zookeeper_client_port }}{% if not loop.last %},{% endif %}{% endfor %}" -monasca_memcached_servers: "{% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}" -monasca_elasticsearch_servers: "{% for host in groups['elasticsearch'] %}'{{ internal_protocol }}://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ elasticsearch_port }}'{% if not loop.last %},{% endif %}{% endfor %}" -monasca_storm_nimbus_servers: "{% for host in groups['storm-nimbus'] %}'{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}'{% if not loop.last %},{% endif %}{% endfor %}" +monasca_kafka_servers: "{% for host in groups['kafka'] %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ kafka_port }}{% if not loop.last %},{% endif %}{% endfor %}" +monasca_zookeeper_servers: "{% for host in groups['zookeeper'] %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ zookeeper_client_port }}{% if not loop.last %},{% endif %}{% endfor %}" +monasca_memcached_servers: "{% for host in groups['memcached'] %}{{ 'api' | kolla_address(host) | put_address_in_context('memcache') }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}" +monasca_elasticsearch_servers: "{% for host in groups['elasticsearch'] %}'{{ internal_protocol }}://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ elasticsearch_port }}'{% if not loop.last %},{% endif %}{% endfor %}" +monasca_storm_nimbus_servers: "{% for host in groups['storm-nimbus'] %}'{{ 'api' | kolla_address(host) }}'{% if not loop.last %},{% endif %}{% endfor %}" # NOTE(dszumski): Only one NTP server is currently supported by the Monasca Agent plugin monasca_ntp_server: "{{ external_ntp_servers | first }}" @@ -189,7 +189,7 @@ monasca_grafana_data_sources: name: "Monasca API" type: "monasca-datasource" access: "proxy" - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_api_port }}" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_api_port }}" isDefault: True basicAuth: false jsonData: @@ -329,13 +329,13 @@ monasca_agent_authorized_roles: monasca_delegate_authorized_roles: - admin -monasca_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_api_port }}/v2.0" -monasca_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_api_port }}/v2.0" -monasca_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ monasca_api_port }}/v2.0" +monasca_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" +monasca_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" +monasca_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ monasca_api_port }}/v2.0" -monasca_log_api_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_log_api_port }}" -monasca_log_api_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ monasca_log_api_port }}" -monasca_log_api_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ monasca_log_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 }}" monasca_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/monasca/tasks/post_config.yml b/ansible/roles/monasca/tasks/post_config.yml index b41f937282..4edc8b243d 100644 --- a/ansible/roles/monasca/tasks/post_config.yml +++ b/ansible/roles/monasca/tasks/post_config.yml @@ -1,7 +1,7 @@ --- - name: Wait for Monasca Grafana to load uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/login" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/login" status_code: 200 register: result until: result.get('status') == 200 @@ -16,7 +16,7 @@ - name: List Monasca Grafana organisations uri: method: GET - url: '{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/orgs' + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs" user: '{{ monasca_grafana_admin_username }}' password: '{{ monasca_grafana_admin_password }}' return_content: true @@ -27,7 +27,7 @@ - name: Create default control plane organisation if it doesn't exist uri: method: POST - url: '{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/orgs' + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs" user: '{{ monasca_grafana_admin_username }}' password: '{{ monasca_grafana_admin_password }}' body_format: json @@ -40,7 +40,7 @@ - name: Lookup Monasca Grafana control plane organisation ID uri: method: GET - url: '{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/orgs/name/{{ monasca_grafana_control_plane_org }}' + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs/name/{{ monasca_grafana_control_plane_org }}" user: '{{ monasca_grafana_admin_username }}' password: '{{ monasca_grafana_admin_password }}' return_content: true @@ -51,7 +51,7 @@ - name: Add {{ monasca_grafana_admin_username }} user to control plane organisation uri: method: POST - url: '{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/orgs/{{ monasca_grafana_conf_org.json.id }}/users' + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/orgs/{{ monasca_grafana_conf_org.json.id }}/users" user: '{{ monasca_grafana_admin_username }}' password: '{{ monasca_grafana_admin_password }}' body: @@ -69,7 +69,7 @@ - name: Switch Monasca Grafana to the control plane organisation uri: method: POST - url: '{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/user/using/{{ monasca_grafana_conf_org.json.id }}' + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/user/using/{{ monasca_grafana_conf_org.json.id }}" user: '{{ monasca_grafana_admin_username }}' password: '{{ monasca_grafana_admin_password }}' force_basic_auth: true @@ -77,7 +77,7 @@ - name: Enable Monasca Grafana datasource for control plane organisation uri: - url: "{{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ monasca_grafana_server_port }}/api/datasources" + url: "{{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ monasca_grafana_server_port }}/api/datasources" method: POST user: "{{ monasca_grafana_admin_username }}" password: "{{ monasca_grafana_admin_password }}" diff --git a/ansible/roles/monasca/templates/monasca-api/api.conf.j2 b/ansible/roles/monasca/templates/monasca-api/api.conf.j2 index 436828bbd5..dc1aa4ec71 100644 --- a/ansible/roles/monasca/templates/monasca-api/api.conf.j2 +++ b/ansible/roles/monasca/templates/monasca-api/api.conf.j2 @@ -6,7 +6,7 @@ region = {{ openstack_region_name }} [database] database = {{ monasca_database_name }} -connection = mysql+pymysql://{{ monasca_database_user }}:{{ monasca_database_password }}@{{ monasca_database_address }}:{{ monasca_database_port }}/{{ monasca_database_name }} +connection = mysql+pymysql://{{ monasca_database_user }}:{{ monasca_database_password }}@{{ monasca_database_address | put_address_in_context('url') }}:{{ monasca_database_port }}/{{ monasca_database_name }} [influxdb] database_name = {{ monasca_influxdb_name }} diff --git a/ansible/roles/monasca/templates/monasca-api/wsgi-api.conf.j2 b/ansible/roles/monasca/templates/monasca-api/wsgi-api.conf.j2 index 13da267d61..e5cf902967 100644 --- a/ansible/roles/monasca/templates/monasca-api/wsgi-api.conf.j2 +++ b/ansible/roles/monasca/templates/monasca-api/wsgi-api.conf.j2 @@ -1,7 +1,7 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if monasca_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} {% set wsgi_path = '/usr/bin' if monasca_install_type == 'binary' else '/monasca-api/monasca_api/api' %} -Listen {{ api_interface_address }}:{{ monasca_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ monasca_api_port }} TraceEnable off diff --git a/ansible/roles/monasca/templates/monasca-grafana/grafana.ini.j2 b/ansible/roles/monasca/templates/monasca-grafana/grafana.ini.j2 index 5c7f4afbdf..89067ef7bf 100644 --- a/ansible/roles/monasca/templates/monasca-grafana/grafana.ini.j2 +++ b/ansible/roles/monasca/templates/monasca-grafana/grafana.ini.j2 @@ -19,7 +19,7 @@ enable_gzip = false [database] type = mysql -host = {{ monasca_database_address }}:{{ monasca_database_port }} +host = {{ monasca_database_address | put_address_in_context('url') }}:{{ monasca_database_port }} name = {{ monasca_grafana_database_name }} user = {{ monasca_database_user }} password = {{ monasca_database_password }} @@ -31,7 +31,7 @@ execute_alerts = false [session] provider = mysql -provider_config = {{ monasca_database_user }}:{{ monasca_database_password }}@tcp({{ monasca_database_address }}:{{ monasca_database_port }})/{{ monasca_grafana_database_name }} +provider_config = {{ monasca_database_user }}:{{ monasca_database_password }}@tcp({{ monasca_database_address | put_address_in_context('url') }}:{{ monasca_database_port }})/{{ monasca_grafana_database_name }} cookie_name = monasca_grafana_sess cookie_secure = false diff --git a/ansible/roles/monasca/templates/monasca-log-api/wsgi-log-api.conf.j2 b/ansible/roles/monasca/templates/monasca-log-api/wsgi-log-api.conf.j2 index b72850acae..eac430f1af 100644 --- a/ansible/roles/monasca/templates/monasca-log-api/wsgi-log-api.conf.j2 +++ b/ansible/roles/monasca/templates/monasca-log-api/wsgi-log-api.conf.j2 @@ -1,7 +1,7 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if monasca_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} {% set wsgi_path = '/usr/bin' if monasca_install_type == 'binary' else '/monasca-log/monasca_log_api/app' %} -Listen {{ api_interface_address }}:{{ monasca_log_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ monasca_log_api_port }} TraceEnable off diff --git a/ansible/roles/monasca/templates/monasca-thresh/storm.yml.j2 b/ansible/roles/monasca/templates/monasca-thresh/storm.yml.j2 index ee48f60e72..d8fe3ddaa0 100644 --- a/ansible/roles/monasca/templates/monasca-thresh/storm.yml.j2 +++ b/ansible/roles/monasca/templates/monasca-thresh/storm.yml.j2 @@ -5,5 +5,5 @@ nimbus.seeds: [{{ monasca_storm_nimbus_servers }}] storm.zookeeper.port: {{ zookeeper_client_port }} storm.zookeeper.servers: {% for host in groups['zookeeper'] %} - - "{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}" + - "{{ 'api' | kolla_address(host) }}" {% endfor %} diff --git a/ansible/roles/monasca/templates/monasca-thresh/thresh-config.yml.j2 b/ansible/roles/monasca/templates/monasca-thresh/thresh-config.yml.j2 index 2d70023fc5..cacad8f828 100644 --- a/ansible/roles/monasca/templates/monasca-thresh/thresh-config.yml.j2 +++ b/ansible/roles/monasca/templates/monasca-thresh/thresh-config.yml.j2 @@ -147,7 +147,7 @@ sporadicMetricNamespaces: database: driverClass: org.drizzle.jdbc.DrizzleDriver - url: "jdbc:drizzle://{{ monasca_database_address }}:{{ monasca_database_port }}/{{ monasca_database_name }}" + url: "jdbc:drizzle://{{ monasca_database_address | put_address_in_context('url') }}:{{ monasca_database_port }}/{{ monasca_database_name }}" user: "{{ monasca_database_user }}" password: "{{ monasca_database_password }}" properties: diff --git a/ansible/roles/mongodb/handlers/main.yml b/ansible/roles/mongodb/handlers/main.yml index d25a4ca483..4a8d1421c5 100644 --- a/ansible/roles/mongodb/handlers/main.yml +++ b/ansible/roles/mongodb/handlers/main.yml @@ -20,11 +20,11 @@ - Bootstrap cluster - name: Waiting for the mongodb startup - wait_for: host={{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} port={{ mongodb_port }} + wait_for: host={{ 'api' | kolla_address }} port={{ mongodb_port }} - name: Checking current replication status become: true - command: "docker exec -t mongodb mongo --host {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }} --port {{ mongodb_port }} --quiet --eval rs.status().ok" + command: "docker exec -t mongodb mongo --host {{ 'api' | kolla_address }} --port {{ mongodb_port }} --quiet --eval rs.status().ok" register: mongodb_replication_status changed_when: false delegate_to: "{{ groups['mongodb'][0] }}" diff --git a/ansible/roles/mongodb/templates/bootstrap_cluster.js.j2 b/ansible/roles/mongodb/templates/bootstrap_cluster.js.j2 index fcf6c51afb..d2bef661d3 100644 --- a/ansible/roles/mongodb/templates/bootstrap_cluster.js.j2 +++ b/ansible/roles/mongodb/templates/bootstrap_cluster.js.j2 @@ -6,7 +6,7 @@ printjson(rs.initiate( {% for host in groups["mongodb"] %} { "_id" : {{ loop.index }}, - "host" : "{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ mongodb_port }}" + "host" : "{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ mongodb_port }}" }{% if not loop.last %},{% endif %} {% endfor %} ] diff --git a/ansible/roles/murano/defaults/main.yml b/ansible/roles/murano/defaults/main.yml index 11ad0d1ac4..81df8a3fcb 100644 --- a/ansible/roles/murano/defaults/main.yml +++ b/ansible/roles/murano/defaults/main.yml @@ -34,7 +34,7 @@ murano_services: #################### murano_database_name: "murano" murano_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}murano{% endif %}" -murano_database_address: "{{ database_address }}:{{ database_port }}" +murano_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -72,9 +72,9 @@ murano_engine_extra_volumes: "{{ murano_extra_volumes }}" #################### # OpenStack #################### -murano_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}" -murano_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }}" -murano_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ murano_api_port }}" +murano_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }}" +murano_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }}" +murano_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ murano_api_port }}" murano_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/murano/tasks/import_library_packages.yml b/ansible/roles/murano/tasks/import_library_packages.yml index 13b5310043..9f653ded8f 100644 --- a/ansible/roles/murano/tasks/import_library_packages.yml +++ b/ansible/roles/murano/tasks/import_library_packages.yml @@ -20,7 +20,7 @@ --os-password {{ keystone_admin_password }} --os-project-name {{ openstack_auth.project_name }} --os-auth-url {{ keystone_admin_url }} - --murano-url {{ admin_protocol }}://{{ api_interface_address }}:{{ murano_api_port }} + --murano-url {{ admin_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ murano_api_port }} package-list register: status changed_when: False @@ -35,7 +35,7 @@ --os-password {{ keystone_admin_password }} --os-project-name {{ openstack_auth.project_name }} --os-auth-url {{ keystone_admin_url }} - --murano-url {{ admin_protocol }}://{{ api_interface_address }}:{{ murano_api_port }} + --murano-url {{ admin_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ murano_api_port }} package-import --exists-action u --is-public /io.murano.zip run_once: True delegate_to: "{{ groups['murano-api'][0] }}" @@ -50,7 +50,7 @@ --os-password {{ keystone_admin_password }} --os-project-name {{ openstack_auth.project_name }} --os-auth-url {{ keystone_admin_url }} - --murano-url {{ admin_protocol }}://{{ api_interface_address }}:{{ murano_api_port }} + --murano-url {{ admin_protocol }}://{{ api_interface_address | put_address_in_context('url') }}:{{ murano_api_port }} package-import --exists-action u --is-public /io.murano.applications.zip run_once: True delegate_to: "{{ groups['murano-api'][0] }}" diff --git a/ansible/roles/murano/templates/murano.conf.j2 b/ansible/roles/murano/templates/murano.conf.j2 index 356f4daefc..5f4e3654ff 100644 --- a/ansible/roles/murano/templates/murano.conf.j2 +++ b/ansible/roles/murano/templates/murano.conf.j2 @@ -30,7 +30,7 @@ password = {{ murano_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [murano_auth] auth_uri = {{ keystone_internal_url }}/v3 @@ -43,7 +43,7 @@ username = {{ murano_keystone_user }} password = {{ murano_keystone_password }} [murano] -url = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ murano_api_port }} +url = {{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ murano_api_port }} api_workers = {{ openstack_service_workers }} [oslo_messaging_notifications] diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml index 512da44a41..c0b5557b34 100644 --- a/ansible/roles/neutron/defaults/main.yml +++ b/ansible/roles/neutron/defaults/main.yml @@ -160,7 +160,7 @@ neutron_services: #################### neutron_database_name: "neutron" neutron_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}neutron{% endif %}" -neutron_database_address: "{{ database_address }}:{{ database_port }}" +neutron_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -322,9 +322,9 @@ ironic_neutron_agent_extra_volumes: "{{ neutron_extra_volumes }}" dhcp_agents_per_network: 2 max_l3_agents_per_router: 3 -neutron_admin_endpoint: "{{ admin_protocol }}://{{ neutron_internal_fqdn }}:{{ neutron_server_port }}" -neutron_internal_endpoint: "{{ internal_protocol }}://{{ neutron_internal_fqdn }}:{{ neutron_server_port }}" -neutron_public_endpoint: "{{ public_protocol }}://{{ neutron_external_fqdn }}:{{ neutron_server_port }}" +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 }}" diff --git a/ansible/roles/neutron/templates/ml2_conf.ini.j2 b/ansible/roles/neutron/templates/ml2_conf.ini.j2 index e81a2e34ad..d9a3436ef5 100644 --- a/ansible/roles/neutron/templates/ml2_conf.ini.j2 +++ b/ansible/roles/neutron/templates/ml2_conf.ini.j2 @@ -4,6 +4,10 @@ type_drivers = {{ neutron_type_drivers }} tenant_network_types = {{ neutron_tenant_network_types }} +{% if tunnel_address_family == 'ipv6' %} +overlay_ip_version = 6 +{% endif %} + {% if neutron_plugin_agent == "openvswitch" %} {% if enable_hyperv | bool %} mechanism_drivers = openvswitch,hyperv @@ -27,9 +31,9 @@ extension_drivers = port_security {% if enable_opendaylight | bool %} [ml2_odl] {% if enable_haproxy | bool %} -url = {{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ opendaylight_haproxy_restconf_port }}/controller/nb/v2/neutron +url = {{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ opendaylight_haproxy_restconf_port }}/controller/nb/v2/neutron {% else %} -url = {{ internal_protocol }}://{{ kolla_internal_vip_address }}:{{ opendaylight_restconf_port }}/controller/nb/v2/neutron +url = {{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ opendaylight_restconf_port }}/controller/nb/v2/neutron {% endif %} username = admin password = {{ opendaylight_password }} @@ -59,7 +63,6 @@ flat_networks = {% for bridge in neutron_bridge_name.split(',') %}physnet{{ loop [ml2_type_vxlan] vni_ranges = 1:1000 -vxlan_group = 239.1.1.1 [securitygroup] {% if neutron_plugin_agent == "openvswitch" or neutron_plugin_agent == "opendaylight" %} diff --git a/ansible/roles/neutron/templates/neutron.conf.j2 b/ansible/roles/neutron/templates/neutron.conf.j2 index 79f0a911d7..c13054c217 100644 --- a/ansible/roles/neutron/templates/neutron.conf.j2 +++ b/ansible/roles/neutron/templates/neutron.conf.j2 @@ -112,7 +112,7 @@ password = {{ neutron_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} @@ -133,12 +133,12 @@ drivers = ovs {% if enable_octavia | bool %} [octavia] -base_url = {{ internal_protocol }}://{{ octavia_internal_fqdn }}:{{ octavia_api_port }} +base_url = {{ internal_protocol }}://{{ octavia_internal_fqdn | put_address_in_context('url') }}:{{ octavia_api_port }} {% endif %} {% if enable_designate | bool %} [designate] -url = {{ internal_protocol }}://{{ designate_internal_fqdn }}:{{ designate_api_port }}/v2 +url = {{ internal_protocol }}://{{ designate_internal_fqdn | put_address_in_context('url') }}:{{ designate_api_port }}/v2 auth_uri = {{ keystone_internal_url }} auth_url = {{ keystone_admin_url }} auth_type = password diff --git a/ansible/roles/nova-hyperv/templates/nova_hyperv.conf.j2 b/ansible/roles/nova-hyperv/templates/nova_hyperv.conf.j2 index 52cc6774c6..7ff452799e 100644 --- a/ansible/roles/nova-hyperv/templates/nova_hyperv.conf.j2 +++ b/ansible/roles/nova-hyperv/templates/nova_hyperv.conf.j2 @@ -31,7 +31,7 @@ user_domain_name = {{ default_user_domain_name }} os_region_name = {{ openstack_region_name }} [glance] -api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn }}:{{ glance_api_port }} +api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }} [hyperv] @@ -45,10 +45,10 @@ enable_instance_metrics_collection = false [rdp] enabled = true -html5_proxy_base_url = {{ public_protocol }}://{{ kolla_internal_vip_address }}:{{ rdp_port }} +html5_proxy_base_url = {{ public_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ rdp_port }} [neutron] -url = {{ internal_protocol }}://{{ neutron_internal_fqdn }}:{{ neutron_server_port }} +url = {{ internal_protocol }}://{{ neutron_internal_fqdn | put_address_in_context('url') }}:{{ neutron_server_port }} auth_strategy = keystone project_domain_name = default project_name = service diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml index 71cf51614c..b39eef1014 100644 --- a/ansible/roles/nova/defaults/main.yml +++ b/ansible/roles/nova/defaults/main.yml @@ -190,11 +190,11 @@ ceph_client_nova_keyring_caps: #################### nova_database_name: "nova" nova_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}nova{% endif %}" -nova_database_address: "{{ database_address }}:{{ database_port }}" +nova_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" nova_api_database_name: "nova_api" nova_api_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}nova_api{% endif %}" -nova_api_database_address: "{{ database_address }}:{{ database_port }}" +nova_api_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -345,13 +345,13 @@ haproxy_nova_serialconsole_proxy_tunnel_timeout: "10m" # OpenStack #################### -nova_legacy_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s" -nova_legacy_internal_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s" -nova_legacy_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn }}:{{ nova_api_port }}/v2/%(tenant_id)s" +nova_legacy_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/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_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2/%(tenant_id)s" -nova_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn }}:{{ nova_api_port }}/v2.1" -nova_internal_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn }}:{{ nova_api_port }}/v2.1" -nova_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn }}:{{ nova_api_port }}/v2.1" +nova_admin_endpoint: "{{ admin_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" +nova_internal_endpoint: "{{ internal_protocol }}://{{ nova_internal_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" +nova_public_endpoint: "{{ public_protocol }}://{{ nova_external_fqdn | put_address_in_context('url') }}:{{ nova_api_port }}/v2.1" nova_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2 b/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2 index 04749e44bf..1f75a00ba0 100644 --- a/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2 +++ b/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2 @@ -3,7 +3,7 @@ connection_uri = "qemu+tls://{{ migration_hostname }}/system" live_migration_uri = "qemu+tls://%s/system" {% else %} -connection_uri = "qemu+tcp://{{ migration_interface_address }}/system" +connection_uri = "qemu+tcp://{{ migration_interface_address | put_address_in_context('url') }}/system" {% endif %} {% if enable_ceph | bool and nova_backend == "rbd" %} images_type = rbd diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2 index 2613710c30..895e0dd27e 100644 --- a/ansible/roles/nova/templates/nova.conf.j2 +++ b/ansible/roles/nova/templates/nova.conf.j2 @@ -72,7 +72,7 @@ novncproxy_port = {{ nova_novncproxy_listen_port }} server_listen = {{ api_interface_address }} server_proxyclient_address = {{ api_interface_address }} {% if inventory_hostname in groups['compute'] %} -novncproxy_base_url = {{ public_protocol }}://{{ nova_novncproxy_fqdn }}:{{ nova_novncproxy_port }}/vnc_auto.html +novncproxy_base_url = {{ public_protocol }}://{{ nova_novncproxy_fqdn | put_address_in_context('url') }}:{{ nova_novncproxy_port }}/vnc_auto.html {% endif %} {% endif %} {% elif nova_console == 'spice' %} @@ -84,7 +84,7 @@ enabled = true server_listen = {{ api_interface_address }} server_proxyclient_address = {{ api_interface_address }} {% if inventory_hostname in groups['compute'] %} -html5proxy_base_url = {{ public_protocol }}://{{ nova_spicehtml5proxy_fqdn }}:{{ nova_spicehtml5proxy_port }}/spice_auto.html +html5proxy_base_url = {{ public_protocol }}://{{ nova_spicehtml5proxy_fqdn | put_address_in_context('url') }}:{{ nova_spicehtml5proxy_port }}/spice_auto.html {% endif %} html5proxy_host = {{ api_interface_address }} html5proxy_port = {{ nova_spicehtml5proxy_listen_port }} @@ -97,7 +97,7 @@ enabled = false {% if enable_nova_serialconsole_proxy | bool %} [serial_console] enabled = true -base_url = {{ nova_serialproxy_protocol }}://{{ nova_serialproxy_fqdn }}:{{ nova_serialproxy_port }}/ +base_url = {{ nova_serialproxy_protocol }}://{{ nova_serialproxy_fqdn | put_address_in_context('url') }}:{{ nova_serialproxy_port }}/ serialproxy_host = {{ api_interface_address }} serialproxy_port = {{ nova_serialproxy_listen_port }} proxyclient_address = {{ api_interface_address }} @@ -112,7 +112,7 @@ auth_type = password project_name = service user_domain_name = {{ default_user_domain_name }} project_domain_name = {{ default_project_domain_name }} -endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn }}:{{ ironic_api_port }}/v1 +endpoint_override = {{ internal_protocol }}://{{ ironic_internal_fqdn | put_address_in_context('url') }}:{{ ironic_api_port }}/v1 {% endif %} [oslo_middleware] @@ -122,7 +122,7 @@ enable_proxy_headers_parsing = True lock_path = /var/lib/nova/tmp [glance] -api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn }}:{{ glance_api_port }} +api_servers = {{ internal_protocol }}://{{ glance_internal_fqdn | put_address_in_context('url') }}:{{ glance_api_port }} num_retries = {{ groups['glance-api'] | length }} @@ -163,7 +163,7 @@ max_retries = -1 [cache] backend = oslo_cache.memcache_pool enabled = True -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [keystone_authtoken] @@ -178,7 +178,7 @@ password = {{ nova_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if service_name == 'nova-compute' %} {% if nova_compute_virt_type in ['kvm', 'qemu'] %} diff --git a/ansible/roles/octavia/defaults/main.yml b/ansible/roles/octavia/defaults/main.yml index deae689dbd..1a424c03d4 100644 --- a/ansible/roles/octavia/defaults/main.yml +++ b/ansible/roles/octavia/defaults/main.yml @@ -55,7 +55,7 @@ octavia_required_roles: #################### octavia_database_name: "octavia" octavia_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}octavia{% endif %}" -octavia_database_address: "{{ database_address }}:{{ database_port }}" +octavia_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -111,9 +111,9 @@ octavia_worker_extra_volumes: "{{ octavia_extra_volumes }}" #################### # OpenStack #################### -octavia_admin_endpoint: "{{ admin_protocol }}://{{ octavia_internal_fqdn }}:{{ octavia_api_port }}" -octavia_internal_endpoint: "{{ internal_protocol }}://{{ octavia_internal_fqdn }}:{{ octavia_api_port }}" -octavia_public_endpoint: "{{ public_protocol }}://{{ octavia_external_fqdn }}:{{ octavia_api_port }}" +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 }}" diff --git a/ansible/roles/octavia/templates/octavia.conf.j2 b/ansible/roles/octavia/templates/octavia.conf.j2 index b32a5fa159..0072e0527a 100644 --- a/ansible/roles/octavia/templates/octavia.conf.j2 +++ b/ansible/roles/octavia/templates/octavia.conf.j2 @@ -33,7 +33,7 @@ project_domain_name = {{ default_project_domain_name }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [keystone_authtoken] www_authenticate_uri = {{ keystone_internal_url }} @@ -47,13 +47,13 @@ password = {{ octavia_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [health_manager] bind_port = {{ octavia_health_manager_port }} bind_ip = {{ octavia_network_interface_address }} heartbeat_key = insecure -controller_ip_port_list = {% for host in groups['octavia-health-manager'] %}{{ hostvars[host]['ansible_' + hostvars[host]['octavia_network_interface']]['ipv4']['address'] }}:{{ octavia_health_manager_port }}{% if not loop.last %},{% endif %}{% endfor %} +controller_ip_port_list = {% for host in groups['octavia-health-manager'] %}{{ 'octavia_network' | kolla_address(host) | put_address_in_context('url') }}:{{ octavia_health_manager_port }}{% if not loop.last %},{% endif %}{% endfor %} [controller_worker] amp_boot_network_list = {{ octavia_amp_boot_network_list }} diff --git a/ansible/roles/opendaylight/defaults/main.yml b/ansible/roles/opendaylight/defaults/main.yml index eb2fce8a49..4e9f0dab8a 100644 --- a/ansible/roles/opendaylight/defaults/main.yml +++ b/ansible/roles/opendaylight/defaults/main.yml @@ -37,8 +37,8 @@ opendaylight_services: #################### # HAProxy #################### -api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ opendaylight_restconf_port }} check inter 2000 rise 2 fall 5;{% endfor %}" -backup_api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ opendaylight_restconf_port_backup }} check inter 2000 rise 2 fall 5;{% endfor %}" +api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ opendaylight_restconf_port }} check inter 2000 rise 2 fall 5;{% endfor %}" +backup_api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ opendaylight_restconf_port_backup }} check inter 2000 rise 2 fall 5;{% endfor %}" #################### # Docker diff --git a/ansible/roles/opendaylight/tasks/precheck.yml b/ansible/roles/opendaylight/tasks/precheck.yml index b7e7018a96..ed1e3863ed 100644 --- a/ansible/roles/opendaylight/tasks/precheck.yml +++ b/ansible/roles/opendaylight/tasks/precheck.yml @@ -8,7 +8,7 @@ - name: Checking free port for opendaylight_clustering wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_clustering_port }}" connect_timeout: 1 state: stopped @@ -18,7 +18,7 @@ - name: Checking free port for opendaylight_restconf wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_restconf_port }}" connect_timeout: 1 state: stopped @@ -28,7 +28,7 @@ - name: Checking free port for opendaylight_restconf_backup wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_restconf_port_backup }}" connect_timeout: 1 state: stopped @@ -38,7 +38,7 @@ - name: Checking free port for opendaylight_karaf_ssh wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_karaf_ssh_port }}" connect_timeout: 1 state: stopped @@ -48,7 +48,7 @@ - name: Checking free port for opendaylight_openflow wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_openflow_port }}" connect_timeout: 1 state: stopped @@ -58,7 +58,7 @@ - name: Checking free port for opendaylight_ovsdb wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_ovsdb_port }}" connect_timeout: 1 state: stopped @@ -68,7 +68,7 @@ - name: Checking free port for opendaylight_jetty_conf_port wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_jetty_conf_port }}" connect_timeout: 1 state: stopped @@ -78,7 +78,7 @@ - name: Checking free port for opendaylight_jetty_conf2_port wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_jetty_conf2_port }}" connect_timeout: 1 state: stopped @@ -88,7 +88,7 @@ - name: Checking free port for opendaylight_tomcat_port wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_tomcat_port }}" connect_timeout: 1 state: stopped @@ -98,7 +98,7 @@ - name: Checking free port for opendaylight_tomcat_redirect_port wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ opendaylight_tomcat_redirect_port }}" connect_timeout: 1 state: stopped diff --git a/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2 b/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2 index 427125f7d2..51cf7bb0c4 100644 --- a/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2 +++ b/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2 @@ -14,7 +14,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html rest:rest-connector-impl rest-connector-default-impl - {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }} + {{ 'api' | kolla_address }} {{ opendaylight_websocket_port }} dom:dom-broker-osgi-registry diff --git a/ansible/roles/opendaylight/templates/akka.conf.j2 b/ansible/roles/opendaylight/templates/akka.conf.j2 index 22d63e566f..61e1953368 100644 --- a/ansible/roles/opendaylight/templates/akka.conf.j2 +++ b/ansible/roles/opendaylight/templates/akka.conf.j2 @@ -4,17 +4,17 @@ odl-cluster-data { remote { artery { enabled = off - canonical.hostname = "{{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }}" + canonical.hostname = "{{ 'api' | kolla_address }}" canonical.port = {{ opendaylight_clustering_port }} } netty.tcp { - hostname = "{{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }}" + hostname = "{{ 'api' | kolla_address }}" port = {{ opendaylight_clustering_port }} } } cluster { - seed-nodes = [{% for host in groups['opendaylight'] %}"akka.tcp://opendaylight-cluster-data@{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ opendaylight_clustering_port }}"{% if not loop.last %},{% endif %}{% endfor %}] + seed-nodes = [{% for host in groups['opendaylight'] %}"akka.tcp://opendaylight-cluster-data@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ opendaylight_clustering_port }}"{% if not loop.last %},{% endif %}{% endfor %}] roles = [ "{{ hostvars[inventory_hostname]['ansible_hostname'] }}" diff --git a/ansible/roles/openvswitch/templates/start-ovs.j2 b/ansible/roles/openvswitch/templates/start-ovs.j2 index fe5f34f28d..d1b5faa022 100644 --- a/ansible/roles/openvswitch/templates/start-ovs.j2 +++ b/ansible/roles/openvswitch/templates/start-ovs.j2 @@ -1,8 +1,8 @@ #!/usr/bin/env bash {% if enable_opendaylight | bool %} -/usr/bin/ovs-vsctl --no-wait -- set-manager {% for host in groups['opendaylight'] %}tcp:{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ opendaylight_ovsdb_port }} {% endfor %} +/usr/bin/ovs-vsctl --no-wait -- set-manager {% for host in groups['opendaylight'] %}tcp:{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ opendaylight_ovsdb_port }} {% endfor %} -/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . other_config:local_ip={{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['tunnel_interface']]['ipv4']['address'] }} +/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . other_config:local_ip={{ 'tunnel' | kolla_address }} /usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . other_config:provider_mappings=physnet1:{{ neutron_bridge_name }} /usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . external_ids:system-id=`cat /proc/sys/kernel/random/uuid` /usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . external_ids:odl_os_hostconfig_config_odl_l2='{"supported_vnic_types": [{"vnic_type": "normal", "vif_type": "ovs", "vif_details": {} }], "allowed_network_types": [{{ opendaylight_allowed_network_types }}], "datapath_types": ["netdev", "system"], "bridge_mappings": {"physnet1":"{{ neutron_bridge_name }}"} }' diff --git a/ansible/roles/ovs-dpdk/defaults/main.yml b/ansible/roles/ovs-dpdk/defaults/main.yml index f71ed81a27..66be60bce0 100644 --- a/ansible/roles/ovs-dpdk/defaults/main.yml +++ b/ansible/roles/ovs-dpdk/defaults/main.yml @@ -40,7 +40,7 @@ ovsdpdk_services: ovs_bridge_mappings: "{% for bridge in neutron_bridge_name.split(',') %}physnet{{ loop.index0 + 1 }}:{{ bridge }}{% if not loop.last %},{% endif %}{% endfor %}" ovs_port_mappings: "{% for bridge in neutron_bridge_name.split(',') %} {{ neutron_external_interface.split(',')[loop.index0] }}:{{ bridge }}{% if not loop.last %},{% endif %}{% endfor %}" dpdk_tunnel_interface: "{{neutron_external_interface}}" -dpdk_tunnel_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['address'] }}" +dpdk_tunnel_interface_address: "{{ 'dpdk_tunnel' | kolla_address }}" tunnel_interface_network: "{{ hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['network']}}/{{hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['netmask']}}" tunnel_interface_cidr: "{{dpdk_tunnel_interface_address}}/{{ tunnel_interface_network | ipaddr('prefix') }}" ovs_cidr_mappings: "{% if neutron_bridge_name.split(',')|length != 1 %} {neutron_bridge_name.split(',')[0]}:{{ tunnel_interface_cidr }} {% else %} {{ neutron_bridge_name }}:{{ tunnel_interface_cidr }} {% endif %}" diff --git a/ansible/roles/panko/defaults/main.yml b/ansible/roles/panko/defaults/main.yml index 2716ce0b4e..7eb75dda3c 100644 --- a/ansible/roles/panko/defaults/main.yml +++ b/ansible/roles/panko/defaults/main.yml @@ -28,8 +28,8 @@ panko_services: panko_database_name: "panko" panko_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}panko{% endif %}" panko_database_port: "{{ mongodb_port if panko_database_type == 'mongodb' else database_port }}" -panko_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ panko_database_port }}{% if not loop.last %},{% endif %}{% endfor %}" -panko_database_mysql_address: "{{ database_address }}:{{ database_port }}" +panko_database_mongodb_address: "{% for host in groups['mongodb'] %}{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ panko_database_port }}{% if not loop.last %},{% endif %}{% endfor %}" +panko_database_mysql_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -49,9 +49,9 @@ panko_api_extra_volumes: "{{ default_extra_volumes }}" #################### # OpenStack #################### -panko_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ panko_api_port }}" -panko_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ panko_api_port }}" -panko_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ panko_api_port }}" +panko_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ panko_api_port }}" +panko_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ panko_api_port }}" +panko_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ panko_api_port }}" panko_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/panko/templates/panko.conf.j2 b/ansible/roles/panko/templates/panko.conf.j2 index 9717ad0dec..eb1a83ae23 100644 --- a/ansible/roles/panko/templates/panko.conf.j2 +++ b/ansible/roles/panko/templates/panko.conf.j2 @@ -28,7 +28,7 @@ auth_type = password memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if panko_policy_file is defined %} [oslo_policy] diff --git a/ansible/roles/panko/templates/wsgi-panko.conf.j2 b/ansible/roles/panko/templates/wsgi-panko.conf.j2 index 29214475ff..969073bbea 100644 --- a/ansible/roles/panko/templates/wsgi-panko.conf.j2 +++ b/ansible/roles/panko/templates/wsgi-panko.conf.j2 @@ -1,6 +1,6 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if panko_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} {% set binary_path = '/usr/bin' if panko_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ panko_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ panko_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/placement/defaults/main.yml b/ansible/roles/placement/defaults/main.yml index 194661956c..e719db7a7c 100644 --- a/ansible/roles/placement/defaults/main.yml +++ b/ansible/roles/placement/defaults/main.yml @@ -28,7 +28,7 @@ placement_services: #################### placement_database_name: "placement" placement_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}placement{% endif %}" -placement_database_address: "{{ database_address }}:{{ database_port }}" +placement_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -53,9 +53,9 @@ placement_api_extra_volumes: "{{ default_extra_volumes }}" #################### # OpenStack #################### -placement_admin_endpoint: "{{ admin_protocol }}://{{ placement_internal_fqdn }}:{{ placement_api_port }}" -placement_internal_endpoint: "{{ internal_protocol }}://{{ placement_internal_fqdn }}:{{ placement_api_port }}" -placement_public_endpoint: "{{ public_protocol }}://{{ placement_external_fqdn }}:{{ placement_api_port }}" +placement_admin_endpoint: "{{ admin_protocol }}://{{ placement_internal_fqdn | put_address_in_context('url') }}:{{ placement_api_port }}" +placement_internal_endpoint: "{{ internal_protocol }}://{{ placement_internal_fqdn | put_address_in_context('url') }}:{{ placement_api_port }}" +placement_public_endpoint: "{{ public_protocol }}://{{ placement_external_fqdn | put_address_in_context('url') }}:{{ placement_api_port }}" placement_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/placement/templates/placement-api-wsgi.conf.j2 b/ansible/roles/placement/templates/placement-api-wsgi.conf.j2 index 5199eb2999..882b7b8937 100644 --- a/ansible/roles/placement/templates/placement-api-wsgi.conf.j2 +++ b/ansible/roles/placement/templates/placement-api-wsgi.conf.j2 @@ -6,7 +6,7 @@ {% endif %} {% set wsgi_directory = '/usr/bin' if placement_install_type == 'binary' else '/var/lib/kolla/venv/bin' %} -Listen {{ api_interface_address }}:{{ placement_api_listen_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ placement_api_listen_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/placement/templates/placement.conf.j2 b/ansible/roles/placement/templates/placement.conf.j2 index 82f2575193..a3fa5fad5f 100644 --- a/ansible/roles/placement/templates/placement.conf.j2 +++ b/ansible/roles/placement/templates/placement.conf.j2 @@ -30,7 +30,7 @@ max_retries = -1 [cache] backend = oslo_cache.memcache_pool enabled = True -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [keystone_authtoken] @@ -45,7 +45,7 @@ password = {{ placement_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% if placement_policy_file is defined %} [oslo_policy] diff --git a/ansible/roles/prechecks/tasks/port_checks.yml b/ansible/roles/prechecks/tasks/port_checks.yml index a2a684d69f..8b6fc81926 100644 --- a/ansible/roles/prechecks/tasks/port_checks.yml +++ b/ansible/roles/prechecks/tasks/port_checks.yml @@ -7,10 +7,7 @@ fail: "msg='Please check the api_interface settings - interface {{ api_interface }} is not active'" when: hostvars[inventory_hostname]['ansible_' + api_interface]['active'] != True -- name: Checking the api_interface configuration - fail: "msg='Please check the api_interface settings - interface {{ api_interface }} configuration missing'" - when: hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4'] is not defined - +# kolla_address handles relevant address check - name: Checking the api_interface ip address configuration fail: "msg='Please check the api_interface settings - interface {{ api_interface }} ip address problem'" when: api_interface_address is not defined diff --git a/ansible/roles/prometheus/defaults/main.yml b/ansible/roles/prometheus/defaults/main.yml index ce11ce0cbe..c835ff05bb 100644 --- a/ansible/roles/prometheus/defaults/main.yml +++ b/ansible/roles/prometheus/defaults/main.yml @@ -108,7 +108,7 @@ prometheus_mysql_exporter_database_user: "{% if use_preconfigured_databases | bo # 'service_name:blackbox_exporter_module:endpoint' for example: # # prometheus_blackbox_exporter_targets: -# - 'glance:os_endpoint:http://{{ kolla_external_vip_address }}:{{ glance_api_port}}' +# - 'glance:os_endpoint:http://{{ kolla_external_vip_address | put_address_in_context('url') }}:{{ glance_api_port}}' # # For a list of modules see the alertmanager config. prometheus_blackbox_exporter_endpoints: [] diff --git a/ansible/roles/prometheus/tasks/precheck.yml b/ansible/roles/prometheus/tasks/precheck.yml index 1406f013cd..2b6c6c2d77 100644 --- a/ansible/roles/prometheus/tasks/precheck.yml +++ b/ansible/roles/prometheus/tasks/precheck.yml @@ -17,7 +17,7 @@ - name: Checking free port for Prometheus server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_port }}" connect_timeout: 1 timeout: 1 @@ -28,7 +28,7 @@ - name: Checking free port for Prometheus node_exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_node_exporter_port }}" connect_timeout: 1 timeout: 1 @@ -40,7 +40,7 @@ - name: Checking free port for Prometheus mysqld_exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_mysqld_exporter_port }}" connect_timeout: 1 timeout: 1 @@ -52,7 +52,7 @@ - name: Checking free port for Prometheus haproxy_exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_haproxy_exporter_port }}" connect_timeout: 1 timeout: 1 @@ -64,7 +64,7 @@ - name: Checking free port for Prometheus memcached_exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_memcached_exporter_port }}" connect_timeout: 1 timeout: 1 @@ -76,7 +76,7 @@ - name: Checking free port for Prometheus cAdvisor wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ prometheus_cadvisor_port }}" connect_timeout: 1 timeout: 1 @@ -88,7 +88,7 @@ - name: Checking free ports for Prometheus Alertmanager wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ item }}" connect_timeout: 1 timeout: 1 @@ -103,7 +103,7 @@ - name: Checking free ports for Prometheus openstack-exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ item }}" connect_timeout: 1 timeout: 1 @@ -117,7 +117,7 @@ - name: Checking free ports for Prometheus elasticsearch-exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ item }}" connect_timeout: 1 timeout: 1 @@ -131,7 +131,7 @@ - name: Checking free ports for Prometheus blackbox-exporter wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ item }}" connect_timeout: 1 timeout: 1 diff --git a/ansible/roles/prometheus/templates/clouds.yml.j2 b/ansible/roles/prometheus/templates/clouds.yml.j2 index b7ba2849c9..105178ba58 100644 --- a/ansible/roles/prometheus/templates/clouds.yml.j2 +++ b/ansible/roles/prometheus/templates/clouds.yml.j2 @@ -9,4 +9,4 @@ clouds: project_name: {{ keystone_admin_project }} project_domain_name: 'Default' user_domain_name: 'Default' - auth_url: {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}/v3 + auth_url: {{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ keystone_admin_port }}/v3 diff --git a/ansible/roles/prometheus/templates/prometheus-alertmanager.json.j2 b/ansible/roles/prometheus/templates/prometheus-alertmanager.json.j2 index 7a02da25ea..d10aa8f0cb 100644 --- a/ansible/roles/prometheus/templates/prometheus-alertmanager.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-alertmanager.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/prometheus_alertmanager/alertmanager --config.file=/etc/prometheus/alertmanager.yml --web.listen-address={{ api_interface_address }}:{{ prometheus_alertmanager_port }} --web.external-url={{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ prometheus_alertmanager_port }} {% if groups["prometheus-alertmanager"] | length > 1 %} --cluster.listen-address={{ api_interface_address }}:{{ prometheus_alertmanager_cluster_port }} {% for host in groups["prometheus-alertmanager"] %} --cluster.peer={{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_alertmanager_cluster_port'] }}{% endfor %}{% endif %} --storage.path /var/lib/prometheus", + "command": "/opt/prometheus_alertmanager/alertmanager --config.file=/etc/prometheus/alertmanager.yml --web.listen-address={{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_alertmanager_port }} --web.external-url={{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ prometheus_alertmanager_port }} {% if groups["prometheus-alertmanager"] | length > 1 %} --cluster.listen-address={{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_alertmanager_cluster_port }} {% for host in groups["prometheus-alertmanager"] %} --cluster.peer={{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_alertmanager_cluster_port'] }}{% endfor %}{% endif %} --storage.path /var/lib/prometheus", "config_files": [ { "source": "{{ container_config_directory }}/prometheus-alertmanager.yml", diff --git a/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2 b/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2 index ce4f6a6593..e479ec327c 100644 --- a/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2 +++ b/ansible/roles/prometheus/templates/prometheus-alertmanager.yml.j2 @@ -11,7 +11,7 @@ receivers: {% if enable_vitrage | bool and enable_vitrage_prometheus_datasource | bool %} webhook_configs: - send_resolved: true - url: '{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ vitrage_api_port }}/v1/event' + url: '{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ vitrage_api_port }}/v1/event' http_config: basic_auth: username: '{{ keystone_admin_user }}' diff --git a/ansible/roles/prometheus/templates/prometheus-blackbox-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-blackbox-exporter.json.j2 index 0ea688fac7..252d3bf104 100644 --- a/ansible/roles/prometheus/templates/prometheus-blackbox-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-blackbox-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/blackbox_exporter/blackbox_exporter --config.file=/etc/prometheus/blackbox.yml --web.listen-address={{ api_interface_address }}:{{ prometheus_blackbox_exporter_port }} --log.level=info", + "command": "/opt/blackbox_exporter/blackbox_exporter --config.file=/etc/prometheus/blackbox.yml --web.listen-address={{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_blackbox_exporter_port }} --log.level=info", "config_files": [ { "source": "{{ container_config_directory }}/prometheus-blackbox-exporter.yml", diff --git a/ansible/roles/prometheus/templates/prometheus-elasticsearch-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-elasticsearch-exporter.json.j2 index 4aea2129ea..06573a2034 100644 --- a/ansible/roles/prometheus/templates/prometheus-elasticsearch-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-elasticsearch-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/elasticsearch_exporter/elasticsearch_exporter -es.uri http://{{ api_interface_address }}:{{ elasticsearch_port }} -web.listen-address {{ api_interface_address }}:{{ prometheus_elasticsearch_exporter_port }}", + "command": "/opt/elasticsearch_exporter/elasticsearch_exporter -es.uri http://{{ api_interface_address | put_address_in_context('url') }}:{{ elasticsearch_port }} -web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_elasticsearch_exporter_port }}", "config_files": [], "permissions": [ { diff --git a/ansible/roles/prometheus/templates/prometheus-haproxy-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-haproxy-exporter.json.j2 index c4b03497bb..564dd6fc51 100644 --- a/ansible/roles/prometheus/templates/prometheus-haproxy-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-haproxy-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/haproxy_exporter/haproxy_exporter --haproxy.scrape-uri unix:/var/lib/kolla/haproxy/haproxy.sock --web.listen-address {{ api_interface_address }}:{{ prometheus_haproxy_exporter_port }}", + "command": "/opt/haproxy_exporter/haproxy_exporter --haproxy.scrape-uri unix:/var/lib/kolla/haproxy/haproxy.sock --web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_haproxy_exporter_port }}", "config_files": [], "permissions": [ { diff --git a/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 index 3a1c2bbaf9..5de9435308 100644 --- a/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-memcached-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/memcached_exporter/memcached_exporter --web.listen-address {{ api_interface_address }}:{{ prometheus_memcached_exporter_port }} --memcached.address {{ api_interface_address }}:{{ memcached_port }}", + "command": "/opt/memcached_exporter/memcached_exporter --web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_memcached_exporter_port }} --memcached.address {{ api_interface_address | put_address_in_context('url') }}:{{ memcached_port }}", "config_files": [], "permissions": [ { diff --git a/ansible/roles/prometheus/templates/prometheus-mysqld-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-mysqld-exporter.json.j2 index 0d4863bcf9..91cc2addeb 100644 --- a/ansible/roles/prometheus/templates/prometheus-mysqld-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-mysqld-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/mysqld_exporter/mysqld_exporter --config.my-cnf /etc/prometheus/my.cnf --web.listen-address {{ api_interface_address }}:{{ prometheus_mysqld_exporter_port }}", + "command": "/opt/mysqld_exporter/mysqld_exporter --config.my-cnf /etc/prometheus/my.cnf --web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_mysqld_exporter_port }}", "config_files": [ { "source": "{{ container_config_directory }}/my.cnf", diff --git a/ansible/roles/prometheus/templates/prometheus-node-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-node-exporter.json.j2 index 22758ad986..74f8964ac8 100644 --- a/ansible/roles/prometheus/templates/prometheus-node-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-node-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/node_exporter/node_exporter --path.procfs /host/proc --path.sysfs /host/sys --web.listen-address {{ api_interface_address }}:{{ prometheus_node_exporter_port }}", + "command": "/opt/node_exporter/node_exporter --path.procfs /host/proc --path.sysfs /host/sys --web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_node_exporter_port }}", "config_files": [], "permissions": [ { diff --git a/ansible/roles/prometheus/templates/prometheus-openstack-exporter.json.j2 b/ansible/roles/prometheus/templates/prometheus-openstack-exporter.json.j2 index 5b620f779d..7f1c2a4972 100644 --- a/ansible/roles/prometheus/templates/prometheus-openstack-exporter.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-openstack-exporter.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/openstack-exporter/openstack-exporter --os-client-config=/etc/openstack/clouds.yml --web.listen-address={{ api_interface_address }}:{{ prometheus_openstack_exporter_port }} default", + "command": "/opt/openstack-exporter/openstack-exporter --os-client-config=/etc/openstack/clouds.yml --web.listen-address={{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_openstack_exporter_port }} default", "config_files": [ { "source": "{{ container_config_directory }}/clouds.yml", diff --git a/ansible/roles/prometheus/templates/prometheus-server.json.j2 b/ansible/roles/prometheus/templates/prometheus-server.json.j2 index 3849cf9611..1db33fe438 100644 --- a/ansible/roles/prometheus/templates/prometheus-server.json.j2 +++ b/ansible/roles/prometheus/templates/prometheus-server.json.j2 @@ -1,5 +1,5 @@ { - "command": "/opt/prometheus/prometheus -config.file /etc/prometheus/prometheus.yml -web.listen-address {{ api_interface_address }}:{{ prometheus_port }} -web.external-url={{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ prometheus_port }} -log.format logger:stdout -storage.local.path /var/lib/prometheus{% if prometheus_cmdline_extras %} {{ prometheus_cmdline_extras }}{% endif %}", + "command": "/opt/prometheus/prometheus -config.file /etc/prometheus/prometheus.yml -web.listen-address {{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_port }} -web.external-url={{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ prometheus_port }} -log.format logger:stdout -storage.local.path /var/lib/prometheus{% if prometheus_cmdline_extras %} {{ prometheus_cmdline_extras }}{% endif %}", "config_files": [ { "source": "{{ container_config_directory }}/prometheus.yml", diff --git a/ansible/roles/prometheus/templates/prometheus.yml.j2 b/ansible/roles/prometheus/templates/prometheus.yml.j2 index e72ab31a13..f74eadb2bc 100644 --- a/ansible/roles/prometheus/templates/prometheus.yml.j2 +++ b/ansible/roles/prometheus/templates/prometheus.yml.j2 @@ -17,7 +17,7 @@ scrape_configs: static_configs: - targets: {% for host in groups['prometheus'] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ prometheus_port }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ prometheus_port }}' {% endfor %} {% if enable_prometheus_node_exporter | bool %} @@ -25,7 +25,7 @@ scrape_configs: static_configs: - targets: {% for host in groups['prometheus-node-exporter'] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_node_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_node_exporter_port'] }}' {% endfor %} {% endif %} @@ -34,7 +34,7 @@ scrape_configs: static_configs: - targets: {% for host in groups['prometheus-mysqld-exporter'] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_mysqld_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_mysqld_exporter_port'] }}' {% endfor %} {% endif %} @@ -43,7 +43,7 @@ scrape_configs: static_configs: - targets: {% for host in groups['prometheus-haproxy-exporter'] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_haproxy_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_haproxy_exporter_port'] }}' {% endfor %} {% endif %} @@ -52,7 +52,7 @@ scrape_configs: static_configs: - targets: {% for host in groups['prometheus-memcached-exporter'] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_memcached_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_memcached_exporter_port'] }}' {% endfor %} {% endif %} @@ -61,7 +61,7 @@ scrape_configs: static_configs: - targets: {% for host in groups["prometheus-cadvisor"] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_cadvisor_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_cadvisor_port'] }}' {% endfor %} {% endif %} @@ -71,7 +71,7 @@ scrape_configs: static_configs: - targets: {% for host in groups["ceph-mgr"] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_ceph_mgr_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_ceph_mgr_exporter_port'] }}' {% endfor %} {% endif %} @@ -82,7 +82,7 @@ scrape_configs: static_configs: - targets: {% for host in groups["prometheus-openstack-exporter"] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_openstack_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_openstack_exporter_port'] }}' {% endfor %} {% endif %} @@ -92,7 +92,7 @@ scrape_configs: static_configs: - targets: {% for host in groups["prometheus-elasticsearch-exporter"] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_elasticsearch_exporter_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_elasticsearch_exporter_port'] }}' {% endfor %} {% endif %} @@ -123,7 +123,7 @@ scrape_configs: - source_labels: [__param_target] target_label: instance - target_label: __address__ - replacement: '{{ api_interface_address }}:{{ prometheus_blackbox_exporter_port }}' + replacement: '{{ api_interface_address | put_address_in_context('url') }}:{{ prometheus_blackbox_exporter_port }}' {% endif %} {% if enable_prometheus_alertmanager | bool %} @@ -132,6 +132,6 @@ alerting: - static_configs: - targets: {% for host in groups["prometheus-alertmanager"] %} - - '{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ hostvars[host]['prometheus_alertmanager_port'] }}' + - '{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ hostvars[host]['prometheus_alertmanager_port'] }}' {% endfor %} {% endif %} diff --git a/ansible/roles/qdrouterd/tasks/precheck.yml b/ansible/roles/qdrouterd/tasks/precheck.yml index 18fdb1935c..2faf15c16a 100644 --- a/ansible/roles/qdrouterd/tasks/precheck.yml +++ b/ansible/roles/qdrouterd/tasks/precheck.yml @@ -17,8 +17,20 @@ - container_facts['qdrouterd'] is not defined - inventory_hostname in groups['qdrouterd'] +- name: Set NSS database for IPv4 + set_fact: + nss_database: 'ahostsv4' + when: + - api_address_family == 'ipv4' + +- name: Set NSS database for IPv6 + set_fact: + nss_database: 'ahostsv6' + when: + - api_address_family == 'ipv6' + - name: Check if all qdrouterd hostnames are resolvable - command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}" + command: "getent {{ nss_database }} {{ hostvars[item]['ansible_hostname'] }}" changed_when: false register: qdrouterd_hostnames with_items: "{{ groups['qdrouterd'] }}" @@ -26,4 +38,4 @@ - fail: msg="Hostname has to resolve to IP address of api_interface" with_items: "{{ qdrouterd_hostnames.results }}" when: - - "item.stdout.find(hostvars[item['item']]['ansible_' ~ hostvars[item['item']]['api_interface']]['ipv4']['address']) == -1" + - "item.stdout.find('api' | kolla_address(item['item'])) == -1" diff --git a/ansible/roles/qinling/defaults/main.yml b/ansible/roles/qinling/defaults/main.yml index bf626b6d0d..e1a0313536 100644 --- a/ansible/roles/qinling/defaults/main.yml +++ b/ansible/roles/qinling/defaults/main.yml @@ -34,7 +34,7 @@ qinling_services: #################### qinling_database_name: "qinling" qinling_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}qinling{% endif %}" -qinling_database_address: "{{ database_address }}:{{ database_port }}" +qinling_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -73,9 +73,9 @@ qinling_engine_extra_volumes: "{{ qinling_extra_volumes }}" #################### # OpenStack #################### -qinling_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ qinling_api_port }}" -qinling_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ qinling_api_port }}" -qinling_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ qinling_api_port }}" +qinling_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ qinling_api_port }}" +qinling_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ qinling_api_port }}" +qinling_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ qinling_api_port }}" qinling_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/qinling/templates/qinling.conf.j2 b/ansible/roles/qinling/templates/qinling.conf.j2 index 230030812b..03a1ee5f5e 100644 --- a/ansible/roles/qinling/templates/qinling.conf.j2 +++ b/ansible/roles/qinling/templates/qinling.conf.j2 @@ -31,7 +31,7 @@ region_name = {{ openstack_region_name }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [storage] file_system_dir = /var/lib/qinling/package diff --git a/ansible/roles/qinling/templates/wsgi-qinling.conf.j2 b/ansible/roles/qinling/templates/wsgi-qinling.conf.j2 index b642d0e033..955e27f712 100644 --- a/ansible/roles/qinling/templates/wsgi-qinling.conf.j2 +++ b/ansible/roles/qinling/templates/wsgi-qinling.conf.j2 @@ -4,7 +4,7 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if qinling_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} {% endif %} -Listen {{ api_interface_address }}:{{ qinling_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ qinling_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/rabbitmq/tasks/config.yml b/ansible/roles/rabbitmq/tasks/config.yml index 05e315eec0..b4193c1189 100644 --- a/ansible/roles/rabbitmq/tasks/config.yml +++ b/ansible/roles/rabbitmq/tasks/config.yml @@ -65,6 +65,25 @@ - Restart rabbitmq container (first node) - Restart rabbitmq container (rest of nodes) +- name: Copying over erl_inetrc + become: true + vars: + service: "{{ rabbitmq_services['rabbitmq'] }}" + template: + src: "{{ item }}" + dest: "{{ node_config_directory }}/{{ project_name }}/erl_inetrc" + mode: "0660" + with_first_found: + - "{{ node_custom_config }}/rabbitmq/{{ inventory_hostname }}/erl_inetrc" + - "{{ node_custom_config }}/rabbitmq/erl_inetrc" + - "erl_inetrc.j2" + when: + - inventory_hostname in groups[service.group] + - service.enabled | bool + notify: + - Restart rabbitmq container (first node) + - Restart rabbitmq container (rest of nodes) + - name: Copying over definitions.json become: true vars: diff --git a/ansible/roles/rabbitmq/tasks/precheck.yml b/ansible/roles/rabbitmq/tasks/precheck.yml index 1f9e4853c7..7afa8f687b 100644 --- a/ansible/roles/rabbitmq/tasks/precheck.yml +++ b/ansible/roles/rabbitmq/tasks/precheck.yml @@ -51,8 +51,20 @@ - container_facts['rabbitmq'] is not defined - inventory_hostname in groups['rabbitmq'] +- name: Set NSS database for IPv4 + set_fact: + nss_database: 'ahostsv4' + when: + - api_address_family == 'ipv4' + +- name: Set NSS database for IPv6 + set_fact: + nss_database: 'ahostsv6' + when: + - api_address_family == 'ipv6' + - name: Check if all rabbit hostnames are resolvable - command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}" + command: "getent {{ nss_database }} {{ hostvars[item]['ansible_hostname'] }}" changed_when: false register: rabbitmq_hostnames with_items: "{{ groups['rabbitmq'] }}" @@ -60,7 +72,7 @@ - fail: msg="Hostname has to resolve to IP address of api_interface" with_items: "{{ rabbitmq_hostnames.results }}" when: - - "item.stdout.find(hostvars[item['item']]['ansible_' ~ hostvars[item['item']]['api_interface']]['ipv4']['address']) == -1" + - "item.stdout.find('api' | kolla_address(item['item'])) == -1" - name: Checking free port for outward RabbitMQ wait_for: @@ -107,7 +119,7 @@ - container_facts['outward_rabbitmq'] is not defined - name: Check if all outward rabbit hostnames are resolvable - command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}" + command: "getent {{ nss_database }} {{ hostvars[item]['ansible_hostname'] }}" changed_when: false register: outward_rabbitmq_hostnames with_items: "{{ groups['outward-rabbitmq'] }}" @@ -118,4 +130,4 @@ with_items: "{{ outward_rabbitmq_hostnames.results }}" when: - enable_outward_rabbitmq | bool - - "item.stdout.find(hostvars[item['item']]['ansible_' ~ hostvars[item['item']]['api_interface']]['ipv4']['address']) == -1" + - "item.stdout.find('api' | kolla_address(item['item'])) == -1" diff --git a/ansible/roles/rabbitmq/templates/erl_inetrc.j2 b/ansible/roles/rabbitmq/templates/erl_inetrc.j2 new file mode 100644 index 0000000000..81755d8a3f --- /dev/null +++ b/ansible/roles/rabbitmq/templates/erl_inetrc.j2 @@ -0,0 +1,3 @@ +{% if api_address_family == 'ipv6' %} +{inet6,true}. +{% endif %} diff --git a/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 index 3d750fdd99..8d6069b507 100644 --- a/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 +++ b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 @@ -2,6 +2,8 @@ RABBITMQ_NODENAME=rabbit@{{ ansible_hostname }} RABBITMQ_LOG_BASE=/var/log/kolla/{{ project_name }} RABBITMQ_DIST_PORT={{ role_rabbitmq_cluster_port }} RABBITMQ_PID_FILE={{ rabbitmq_pid_file }} +RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-kernel inetrc '/etc/rabbitmq/erl_inetrc' {% if api_address_family == 'ipv6' %}-proto_dist inet6_tcp {% endif %}" +RABBITMQ_CTL_ERL_ARGS="{% if api_address_family == 'ipv6' %}-proto_dist inet6_tcp {% endif %}" export ERL_EPMD_ADDRESS={{ api_interface_address }} export ERL_EPMD_PORT={{ role_rabbitmq_epmd_port }} diff --git a/ansible/roles/rabbitmq/templates/rabbitmq.conf.j2 b/ansible/roles/rabbitmq/templates/rabbitmq.conf.j2 index e95b7cccab..e54ec346c5 100644 --- a/ansible/roles/rabbitmq/templates/rabbitmq.conf.j2 +++ b/ansible/roles/rabbitmq/templates/rabbitmq.conf.j2 @@ -1,3 +1,5 @@ +# NOTE(yoctozepto): rabbitmq uses the raw format (e.g. fd::) of IPv6 address; +# despite specifying port via colon, the url format (e.g. [fd::]) is not accepted listeners.tcp.1 = {{ api_interface_address }}:{{ role_rabbitmq_port }} {% if rabbitmq_hipe_compile|bool %} hipe_compile = true diff --git a/ansible/roles/rabbitmq/templates/rabbitmq.json.j2 b/ansible/roles/rabbitmq/templates/rabbitmq.json.j2 index 46f59f1088..91e67e15b4 100644 --- a/ansible/roles/rabbitmq/templates/rabbitmq.json.j2 +++ b/ansible/roles/rabbitmq/templates/rabbitmq.json.j2 @@ -13,6 +13,12 @@ "owner": "rabbitmq", "perm": "0600" }, + { + "source": "{{ container_config_directory }}/erl_inetrc", + "dest": "/etc/rabbitmq/erl_inetrc", + "owner": "rabbitmq", + "perm": "0600" + }, { "source": "{{ container_config_directory }}/definitions.json", "dest": "/etc/rabbitmq/definitions.json", diff --git a/ansible/roles/rally/defaults/main.yml b/ansible/roles/rally/defaults/main.yml index ae510548a9..da93f0699b 100644 --- a/ansible/roles/rally/defaults/main.yml +++ b/ansible/roles/rally/defaults/main.yml @@ -32,4 +32,4 @@ rally_extra_volumes: "{{ default_extra_volumes }}" #################### rally_database_name: "rally" rally_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}rally{% endif %}" -rally_database_address: "{{ database_address }}:{{ database_port }}" +rally_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" diff --git a/ansible/roles/redis/templates/redis-sentinel.conf.j2 b/ansible/roles/redis/templates/redis-sentinel.conf.j2 index efe719b107..34ef13a3dd 100644 --- a/ansible/roles/redis/templates/redis-sentinel.conf.j2 +++ b/ansible/roles/redis/templates/redis-sentinel.conf.j2 @@ -1,4 +1,4 @@ -{% set redis_master_address = hostvars[groups['redis'][0]]['ansible_' + hostvars[groups['redis'][0]]['api_interface']]['ipv4']['address'] %} +{% set redis_master_address = 'api' | kolla_address(groups['redis'][0]) %} daemonize no pidfile "/var/run/redis/redis-sentinel.pid" logfile "/var/log/kolla/redis/redis-sentinel.log" diff --git a/ansible/roles/redis/templates/redis.conf.j2 b/ansible/roles/redis/templates/redis.conf.j2 index e96f359d59..fb0fb2b5d1 100644 --- a/ansible/roles/redis/templates/redis.conf.j2 +++ b/ansible/roles/redis/templates/redis.conf.j2 @@ -50,6 +50,6 @@ requirepass {{ redis_master_password }} masterauth {{ redis_master_password }} {% if inventory_hostname != groups['redis'][0] %} -{% set redis_master_address = hostvars[groups['redis'][0]]['ansible_' + hostvars[groups['redis'][0]]['api_interface']]['ipv4']['address'] %} +{% set redis_master_address = 'api' | kolla_address(groups['redis'][0]) %} slaveof {{ redis_master_address }} 6379 {% endif %} diff --git a/ansible/roles/sahara/defaults/main.yml b/ansible/roles/sahara/defaults/main.yml index 89c094cc69..758e89a8e3 100644 --- a/ansible/roles/sahara/defaults/main.yml +++ b/ansible/roles/sahara/defaults/main.yml @@ -35,7 +35,7 @@ sahara_services: #################### sahara_database_name: "sahara" sahara_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}sahara{% endif %}" -sahara_database_address: "{{ database_address }}:{{ database_port }}" +sahara_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -76,9 +76,9 @@ sahara_engine_extra_volumes: "{{ sahara_extra_volumes }}" #################### # OpenStack #################### -sahara_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ sahara_api_port }}" -sahara_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ sahara_api_port }}" -sahara_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ sahara_api_port }}" +sahara_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ sahara_api_port }}" +sahara_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ sahara_api_port }}" +sahara_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ sahara_api_port }}" sahara_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/sahara/templates/sahara.conf.j2 b/ansible/roles/sahara/templates/sahara.conf.j2 index b49b5c0c3e..c2b6036d53 100644 --- a/ansible/roles/sahara/templates/sahara.conf.j2 +++ b/ansible/roles/sahara/templates/sahara.conf.j2 @@ -24,7 +24,7 @@ password = {{ sahara_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/searchlight/defaults/main.yml b/ansible/roles/searchlight/defaults/main.yml index cf5f62f994..0874a955e2 100644 --- a/ansible/roles/searchlight/defaults/main.yml +++ b/ansible/roles/searchlight/defaults/main.yml @@ -31,7 +31,7 @@ searchlight_services: #################### # Elasticsearch #################### -searchlight_elasticsearch_url: "{{ kolla_internal_fqdn }}:{{ elasticsearch_port }}" +searchlight_elasticsearch_url: "{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ elasticsearch_port }}" #################### # Docker @@ -66,9 +66,9 @@ searchlight_listener_extra_volumes: "{{ searchlight_extra_volumes }}" #################### # OpenStack #################### -searchlight_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ searchlight_api_port }}" -searchlight_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ searchlight_api_port }}" -searchlight_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ searchlight_api_port }}" +searchlight_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ searchlight_api_port }}" +searchlight_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ searchlight_api_port }}" +searchlight_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ searchlight_api_port }}" searchlight_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/searchlight/templates/searchlight.conf.j2 b/ansible/roles/searchlight/templates/searchlight.conf.j2 index fe3025952c..a8f11b766c 100644 --- a/ansible/roles/searchlight/templates/searchlight.conf.j2 +++ b/ansible/roles/searchlight/templates/searchlight.conf.j2 @@ -7,7 +7,7 @@ transport_url = {{ rpc_transport_url }} [api] port = {{ searchlight_api_port }} bind_host = {{ api_interface_address }} -public_endpoint = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ searchlight_api_port }} +public_endpoint = {{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ searchlight_api_port }} workers = {{ openstack_service_workers }} [elasticsearch] @@ -32,7 +32,7 @@ auth_type = password memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} @@ -63,7 +63,7 @@ auth_plugin = password memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [resource_plugin:os_cinder_volume] enabled = {{ enable_cinder | bool }} diff --git a/ansible/roles/senlin/defaults/main.yml b/ansible/roles/senlin/defaults/main.yml index 2b6d972e2f..91bce201ae 100644 --- a/ansible/roles/senlin/defaults/main.yml +++ b/ansible/roles/senlin/defaults/main.yml @@ -35,7 +35,7 @@ senlin_services: #################### senlin_database_name: "senlin" senlin_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}senlin{% endif %}" -senlin_database_address: "{{ database_address }}:{{ database_port }}" +senlin_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -73,9 +73,9 @@ senlin_engine_extra_volumes: "{{ senlin_extra_volumes }}" #################### # OpenStack #################### -senlin_admin_endpoint: "{{ admin_protocol }}://{{ senlin_internal_fqdn }}:{{ senlin_api_port }}" -senlin_internal_endpoint: "{{ internal_protocol }}://{{ senlin_internal_fqdn }}:{{ senlin_api_port }}" -senlin_public_endpoint: "{{ public_protocol }}://{{ senlin_external_fqdn }}:{{ senlin_api_port }}" +senlin_admin_endpoint: "{{ admin_protocol }}://{{ senlin_internal_fqdn | put_address_in_context('url') }}:{{ senlin_api_port }}" +senlin_internal_endpoint: "{{ internal_protocol }}://{{ senlin_internal_fqdn | put_address_in_context('url') }}:{{ senlin_api_port }}" +senlin_public_endpoint: "{{ public_protocol }}://{{ senlin_external_fqdn | put_address_in_context('url') }}:{{ senlin_api_port }}" senlin_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/senlin/templates/senlin.conf.j2 b/ansible/roles/senlin/templates/senlin.conf.j2 index fe33dcaa77..baa0a52eb9 100644 --- a/ansible/roles/senlin/templates/senlin.conf.j2 +++ b/ansible/roles/senlin/templates/senlin.conf.j2 @@ -41,7 +41,7 @@ service_token_roles_required = False memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/skydive/templates/skydive-agent.conf.j2 b/ansible/roles/skydive/templates/skydive-agent.conf.j2 index 8daa53549b..0867951108 100644 --- a/ansible/roles/skydive/templates/skydive-agent.conf.j2 +++ b/ansible/roles/skydive/templates/skydive-agent.conf.j2 @@ -15,21 +15,21 @@ etcd: servers: {% if enable_etcd | bool %} {% for host in groups['etcd'] %} - - http://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} + - http://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endfor %} {% else %} {% for host in groups['skydive-analyzer'] %} - - http://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} + - http://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endfor %} {% endif %} analyzers: {% for host in groups['skydive-analyzer'] %} - - {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ skydive_analyzer_port }} + - {{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ skydive_analyzer_port }} {% endfor %} agent: - listen: {{ hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname]['api_interface']]['ipv4']['address'] }}:{{ skydive_agents_port }} + listen: {{ 'api' | kolla_address | put_address_in_context('url') }}:{{ skydive_agents_port }} flow: probes: - gopacket diff --git a/ansible/roles/skydive/templates/skydive-agent.json.j2 b/ansible/roles/skydive/templates/skydive-agent.json.j2 index 1d4a0f4fea..2ba3bbd5ad 100644 --- a/ansible/roles/skydive/templates/skydive-agent.json.j2 +++ b/ansible/roles/skydive/templates/skydive-agent.json.j2 @@ -1,5 +1,5 @@ { - "command": "skydive agent --conf /etc/skydive/skydive.conf --listen={{ api_interface_address }}:{{ skydive_agents_port }}", + "command": "skydive agent --conf /etc/skydive/skydive.conf --listen={{ api_interface_address | put_address_in_context('url') }}:{{ skydive_agents_port }}", "config_files": [ { "source": "{{ container_config_directory }}/skydive.conf", diff --git a/ansible/roles/skydive/templates/skydive-analyzer.conf.j2 b/ansible/roles/skydive/templates/skydive-analyzer.conf.j2 index c19ab0ec2e..e128deb80a 100644 --- a/ansible/roles/skydive/templates/skydive-analyzer.conf.j2 +++ b/ansible/roles/skydive/templates/skydive-analyzer.conf.j2 @@ -19,7 +19,7 @@ logging: analyzers: {% for host in groups['skydive-analyzer'] %} - - {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ skydive_analyzer_port }} + - {{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ skydive_analyzer_port }} {% endfor %} etcd: @@ -28,19 +28,19 @@ etcd: embedded: false servers: {% for host in groups['etcd'] %} - - http://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} + - http://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endfor %} {% else %} embedded: true servers: {% for host in groups['skydive-analyzer'] %} - - http://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ etcd_client_port }} + - http://{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ etcd_client_port }} {% endfor %} - listen: {{ api_interface_address }}:{{ etcd_client_port }} + listen: {{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }} {% endif %} analyzer: - listen: {{ api_interface_address }}:{{ skydive_analyzer_port }} + listen: {{ api_interface_address | put_address_in_context('url') }}:{{ skydive_analyzer_port }} storage: backend: elasticsearch {% if groups['skydive-agent'] | length > 1 %} @@ -57,7 +57,7 @@ analyzer: storage: elasticsearch: - host: {{ elasticsearch_address }}:{{ elasticsearch_port }} + host: {{ elasticsearch_address | put_address_in_context('url') }}:{{ elasticsearch_port }} maxconns: 10 retry: 60 diff --git a/ansible/roles/skydive/templates/skydive-analyzer.json.j2 b/ansible/roles/skydive/templates/skydive-analyzer.json.j2 index b773a272c9..ce8b525ec4 100644 --- a/ansible/roles/skydive/templates/skydive-analyzer.json.j2 +++ b/ansible/roles/skydive/templates/skydive-analyzer.json.j2 @@ -1,5 +1,5 @@ { - "command": "skydive analyzer --conf /etc/skydive/skydive.conf --listen={{ api_interface_address }}:{{ skydive_analyzer_port }}", + "command": "skydive analyzer --conf /etc/skydive/skydive.conf --listen={{ api_interface_address | put_address_in_context('url') }}:{{ skydive_analyzer_port }}", "config_files": [ { "source": "{{ container_config_directory }}/skydive.conf", diff --git a/ansible/roles/solum/defaults/main.yml b/ansible/roles/solum/defaults/main.yml index a74a82e135..57e9763bde 100644 --- a/ansible/roles/solum/defaults/main.yml +++ b/ansible/roles/solum/defaults/main.yml @@ -61,7 +61,7 @@ solum_services: #################### solum_database_name: "solum" solum_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}solum{% endif %}" -solum_database_address: "{{ database_address }}:{{ database_port }}" +solum_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -121,13 +121,13 @@ solum_conductor_extra_volumes: "{{ solum_extra_volumes }}" #################### # OpenStack #################### -solum_image_builder_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ solum_image_builder_port }}" -solum_image_builder_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ solum_image_builder_port }}" -solum_image_builder_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ solum_image_builder_port }}" +solum_image_builder_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ solum_image_builder_port }}" +solum_image_builder_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ solum_image_builder_port }}" +solum_image_builder_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ solum_image_builder_port }}" -solum_application_deployment_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ solum_application_deployment_port }}" -solum_application_deployment_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ solum_application_deployment_port }}" -solum_application_deployment_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ solum_application_deployment_port }}" +solum_application_deployment_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ solum_application_deployment_port }}" +solum_application_deployment_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ solum_application_deployment_port }}" +solum_application_deployment_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ solum_application_deployment_port }}" solum_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/solum/templates/solum.conf.j2 b/ansible/roles/solum/templates/solum.conf.j2 index 33afdec09f..12083a76a8 100644 --- a/ansible/roles/solum/templates/solum.conf.j2 +++ b/ansible/roles/solum/templates/solum.conf.j2 @@ -54,7 +54,7 @@ password = {{ solum_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/storm/defaults/main.yml b/ansible/roles/storm/defaults/main.yml index 80a2e65256..901e939b7c 100644 --- a/ansible/roles/storm/defaults/main.yml +++ b/ansible/roles/storm/defaults/main.yml @@ -27,7 +27,7 @@ storm_services: # Storm #################### storm_log_settings: 'INFO,ROLLINGFILE' -storm_nimbus_servers: "{% for host in groups['storm-nimbus'] %}'{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}'{% if not loop.last %},{% endif %}{% endfor %}" +storm_nimbus_servers: "{% for host in groups['storm-nimbus'] %}'{{ 'api' | kolla_address(host) }}'{% if not loop.last %},{% endif %}{% endfor %}" #################### # Docker diff --git a/ansible/roles/storm/templates/storm.yml.j2 b/ansible/roles/storm/templates/storm.yml.j2 index 965dd11796..44158341bc 100644 --- a/ansible/roles/storm/templates/storm.yml.j2 +++ b/ansible/roles/storm/templates/storm.yml.j2 @@ -4,7 +4,7 @@ nimbus.seeds: [{{ storm_nimbus_servers }}] storm.zookeeper.port: {{ zookeeper_client_port }} storm.zookeeper.servers: {% for host in groups['zookeeper'] %} - - "{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}" + - "{{ 'api' | kolla_address(host) }}" {% endfor %} supervisor.slots.ports: {% for port in range(storm_worker_port_range.start|int, storm_worker_port_range.end|int + 1) %} diff --git a/ansible/roles/swift/defaults/main.yml b/ansible/roles/swift/defaults/main.yml index 1533670648..115f0da884 100644 --- a/ansible/roles/swift/defaults/main.yml +++ b/ansible/roles/swift/defaults/main.yml @@ -52,9 +52,9 @@ swift_log_level: "{{ 'DEBUG' if openstack_logging_debug | bool else 'INFO'}}" #################### # OpenStack #################### -swift_admin_endpoint: "{{ admin_protocol }}://{{ swift_internal_fqdn }}:{{ swift_proxy_server_port }}/v1" -swift_internal_endpoint: "{{ internal_protocol }}://{{ swift_internal_fqdn }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s" -swift_public_endpoint: "{{ public_protocol }}://{{ swift_external_fqdn }}:{{ swift_proxy_server_port }}/v1/AUTH_%(tenant_id)s" +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 }}" diff --git a/ansible/roles/swift/tasks/precheck.yml b/ansible/roles/swift/tasks/precheck.yml index 6b6767972e..aba043fffd 100644 --- a/ansible/roles/swift/tasks/precheck.yml +++ b/ansible/roles/swift/tasks/precheck.yml @@ -11,7 +11,7 @@ - name: Checking free port for Swift Account Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_storage_interface]['ipv4']['address'] }}" + host: "{{ 'swift_storage' | kolla_address }}" port: "{{ swift_account_server_port }}" connect_timeout: 1 timeout: 1 @@ -22,7 +22,7 @@ - name: Checking free port for Swift Container Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_storage_interface]['ipv4']['address'] }}" + host: "{{ 'swift_storage' | kolla_address }}" port: "{{ swift_container_server_port }}" connect_timeout: 1 timeout: 1 @@ -33,7 +33,7 @@ - name: Checking free port for Swift Object Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_storage_interface]['ipv4']['address'] }}" + host: "{{ 'swift_storage' | kolla_address }}" port: "{{ swift_object_server_port }}" connect_timeout: 1 timeout: 1 @@ -44,7 +44,7 @@ - name: Checking free port for Swift Account Replication Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_replication_interface]['ipv4']['address'] }}" + host: "{{ 'swift_replication' | kolla_address }}" port: "{{ swift_account_server_port }}" connect_timeout: 1 timeout: 1 @@ -55,7 +55,7 @@ - name: Checking free port for Swift Container Replication Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_replication_interface]['ipv4']['address'] }}" + host: "{{ 'swift_replication' | kolla_address }}" port: "{{ swift_container_server_port }}" connect_timeout: 1 timeout: 1 @@ -66,7 +66,7 @@ - name: Checking free port for Swift Object Replication Server wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_replication_interface]['ipv4']['address'] }}" + host: "{{ 'swift_replication' | kolla_address }}" port: "{{ swift_object_server_port }}" connect_timeout: 1 timeout: 1 @@ -77,7 +77,7 @@ - name: Checking free port for Rsync wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + swift_replication_interface]['ipv4']['address'] }}" + host: "{{ 'swift_replication' | kolla_address }}" port: "873" connect_timeout: 1 timeout: 1 diff --git a/ansible/roles/swift/templates/account.conf.j2 b/ansible/roles/swift/templates/account.conf.j2 index 78f73bdbec..e546df988a 100644 --- a/ansible/roles/swift/templates/account.conf.j2 +++ b/ansible/roles/swift/templates/account.conf.j2 @@ -1,6 +1,6 @@ -{% set interface = swift_replication_interface if 'replicat' in service_name else swift_storage_interface %} +{% set network = 'swift_replication' if 'replicat' in service_name else 'swift_storage' %} [DEFAULT] -bind_ip = {{ hostvars[inventory_hostname]['ansible_' + interface]['ipv4']['address'] }} +bind_ip = {{ network | kolla_address }} bind_port = {{ swift_account_server_port }} devices = {{ swift_devices_mount_point }} mount_check = false diff --git a/ansible/roles/swift/templates/container.conf.j2 b/ansible/roles/swift/templates/container.conf.j2 index 62cf38aa1e..97ff93ed1a 100644 --- a/ansible/roles/swift/templates/container.conf.j2 +++ b/ansible/roles/swift/templates/container.conf.j2 @@ -1,6 +1,6 @@ -{% set interface = swift_replication_interface if 'replicat' in service_name else swift_storage_interface %} +{% set network = 'swift_replication' if 'replicat' in service_name else 'swift_storage' %} [DEFAULT] -bind_ip = {{ hostvars[inventory_hostname]['ansible_' + interface]['ipv4']['address'] }} +bind_ip = {{ network | kolla_address }} bind_port = {{ swift_container_server_port }} devices = {{ swift_devices_mount_point }} mount_check = false diff --git a/ansible/roles/swift/templates/object.conf.j2 b/ansible/roles/swift/templates/object.conf.j2 index 537c952db8..bc62f9a51e 100644 --- a/ansible/roles/swift/templates/object.conf.j2 +++ b/ansible/roles/swift/templates/object.conf.j2 @@ -1,6 +1,6 @@ -{% set interface = swift_replication_interface if 'replicat' in service_name else swift_storage_interface %} +{% set network = 'swift_replication' if 'replicat' in service_name else 'swift_storage' %} [DEFAULT] -bind_ip = {{ hostvars[inventory_hostname]['ansible_' + interface]['ipv4']['address'] }} +bind_ip = {{ network | kolla_address }} bind_port = {{ swift_object_server_port }} devices = {{ swift_devices_mount_point }} mount_check = false diff --git a/ansible/roles/swift/templates/proxy-server.conf.j2 b/ansible/roles/swift/templates/proxy-server.conf.j2 index 685a6935b8..958b4bf535 100644 --- a/ansible/roles/swift/templates/proxy-server.conf.j2 +++ b/ansible/roles/swift/templates/proxy-server.conf.j2 @@ -22,7 +22,7 @@ use = egg:swift#tempurl [filter:cache] use = egg:swift#memcache -memcache_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [filter:catch_errors] use = egg:swift#catch_errors @@ -47,7 +47,7 @@ delay_auth_decision = {{ swift_delay_auth_decision }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [filter:keystoneauth] diff --git a/ansible/roles/swift/templates/rsyncd.conf.j2 b/ansible/roles/swift/templates/rsyncd.conf.j2 index 3831415f57..d23291330d 100644 --- a/ansible/roles/swift/templates/rsyncd.conf.j2 +++ b/ansible/roles/swift/templates/rsyncd.conf.j2 @@ -1,4 +1,4 @@ -address = {{ hostvars[inventory_hostname]['ansible_' + swift_replication_interface]['ipv4']['address'] }} +address = {{ 'swift_replication' | kolla_address }} {% if inventory_hostname in groups['swift-account-server'] %} [account] diff --git a/ansible/roles/tacker/defaults/main.yml b/ansible/roles/tacker/defaults/main.yml index 4341145f1e..0b0a2c5330 100644 --- a/ansible/roles/tacker/defaults/main.yml +++ b/ansible/roles/tacker/defaults/main.yml @@ -33,7 +33,7 @@ tacker_services: #################### tacker_database_name: "tacker" tacker_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}tacker{% endif %}" -tacker_database_address: "{{ database_address }}:{{ database_port }}" +tacker_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" ######## # Docker @@ -70,9 +70,9 @@ tacker_conductor_extra_volumes: "{{ tacker_extra_volumes }}" #################### # OpenStack #################### -tacker_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ tacker_server_port }}" -tacker_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ tacker_server_port }}" -tacker_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ tacker_server_port }}" +tacker_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ tacker_server_port }}" +tacker_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ tacker_server_port }}" +tacker_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ tacker_server_port }}" tacker_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/tacker/templates/tacker.conf.j2 b/ansible/roles/tacker/templates/tacker.conf.j2 index 733745d14c..46eb1cc4d6 100644 --- a/ansible/roles/tacker/templates/tacker.conf.j2 +++ b/ansible/roles/tacker/templates/tacker.conf.j2 @@ -41,7 +41,7 @@ password = {{ tacker_keystone_password }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [alarm_auth] username = {{ tacker_keystone_user }} diff --git a/ansible/roles/telegraf/templates/telegraf.conf.j2 b/ansible/roles/telegraf/templates/telegraf.conf.j2 index 76030cfb94..2dceae53e7 100644 --- a/ansible/roles/telegraf/templates/telegraf.conf.j2 +++ b/ansible/roles/telegraf/templates/telegraf.conf.j2 @@ -14,7 +14,7 @@ {% if enable_influxdb | bool %} {% for host in groups['influxdb'] %} [[outputs.influxdb]] - urls = ["{{ influxdb_proto }}://{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address']}}:{{ influxdb_http_port }}"] + urls = ["{{ influxdb_proto }}://{{ 'api' | kolla_address(host) }}:{{ influxdb_http_port }}"] database = "telegraf" # required retention_policy = "autogen" write_consistency = "any" @@ -27,7 +27,7 @@ fielddrop = ["time_*"] {% if enable_collectd | bool and inventory_hostname in groups['collectd'] %} [[inputs.socket_listener]] - service_address = "udp://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ collectd_udp_port }}" + service_address = "udp://{{ 'api' | kolla_address | put_address_in_context('url') }}:{{ collectd_udp_port }}" name_prefix = "collectd_" data_format = "collectd" collectd_typesdb = ["/usr/share/collectd/types.db"] @@ -37,7 +37,7 @@ [[inputs.diskio]] {% if inventory_hostname in groups['influxdb'] and enable_influxdb | bool %} [[inputs.influxdb]] - urls = ["{{ influxdb_proto }}://{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ influxdb_http_port }}/debug/vars"] + urls = ["{{ influxdb_proto }}://{{ 'api' | kolla_address | put_address_in_context('url') }}:{{ influxdb_http_port }}/debug/vars"] {% endif %} [[inputs.kernel]] [[inputs.mem]] @@ -52,45 +52,45 @@ {% endif %} {% if inventory_hostname in groups['haproxy'] and enable_haproxy | bool %} [[inputs.haproxy]] - servers = ["{{ haproxy_proto }}://{{ haproxy_user }}:{{ haproxy_password }}@{{ api_interface_address }}:{{ haproxy_stats_port }}"] + servers = ["{{ haproxy_proto }}://{{ haproxy_user }}:{{ haproxy_password }}@{{ api_interface_address | put_address_in_context('url') }}:{{ haproxy_stats_port }}"] {% endif %} {% if inventory_hostname in groups['memcached'] and enable_memcached | bool %} [[inputs.memcached]] - servers = ["{{ api_interface_address }}:{{ memcached_port }}"] + servers = ["{{ api_interface_address | put_address_in_context('url') }}:{{ memcached_port }}"] {% endif %} {% if inventory_hostname in groups['elasticsearch'] and enable_elasticsearch | bool %} [[inputs.elasticsearch]] - servers = ["{{ elasticsearch_proto }}://{{ api_interface_address }}:{{ elasticsearch_port }}"] + servers = ["{{ elasticsearch_proto }}://{{ api_interface_address | put_address_in_context('url') }}:{{ elasticsearch_port }}"] local = true cluster_health = true {% endif %} {% if inventory_hostname in groups['rabbitmq'] and enable_rabbitmq | bool %} [[inputs.rabbitmq]] - url = "{{ rabbitmq_proto }}://{{ api_interface_address }}:{{ rabbitmq_management_port }}" + url = "{{ rabbitmq_proto }}://{{ api_interface_address | put_address_in_context('url') }}:{{ rabbitmq_management_port }}" username = "{{ rabbitmq_user }}" password = "{{ rabbitmq_password }}" {% endif %} {% if inventory_hostname in groups['outward-rabbitmq'] and enable_outward_rabbitmq | bool %} [[inputs.rabbitmq]] - url = "{{ outward_rabbitmq_proto }}://{{ api_interface_address }}:{{ outward_rabbitmq_management_port }}" + url = "{{ outward_rabbitmq_proto }}://{{ api_interface_address | put_address_in_context('url') }}:{{ outward_rabbitmq_management_port }}" username = "{{ outward_rabbitmq_user }}" password = "{{ outward_rabbitmq_password }}" {% endif %} {% if inventory_hostname in groups['redis'] and enable_redis | bool %} [[inputs.redis]] - servers = ["tcp://:{{ redis_master_password }}@{{ api_interface_address }}:{{ redis_port }}"] + servers = ["tcp://:{{ redis_master_password }}@{{ api_interface_address | put_address_in_context('url') }}:{{ redis_port }}"] {% endif %} {% if inventory_hostname in groups['zookeeper'] and enable_zookeeper | bool %} [[inputs.zookeeper]] - servers = ["{{ api_interface_address }}:{{ zookeeper_port }}"] + servers = ["{{ api_interface_address | put_address_in_context('url') }}:{{ zookeeper_port }}"] {% endif %} {% if inventory_hostname in groups['kafka'] and enable_kafka | bool %} [[inputs.kafka_consumer]] - brokers = ["{{ api_interface_address }}:{{ kafka_port }}"] + brokers = ["{{ api_interface_address | put_address_in_context('url') }}:{{ kafka_port }}"] {% endif %} {% if inventory_hostname in groups['mariadb'] and (enable_mariadb or enable_external_mariadb_load_balancer) | bool %} [[inputs.mysql]] - servers = ["{{ database_user }}:{{ database_password }}@{{ mariadb_proto }}({{ api_interface_address }}:{{ database_port }})/"] + servers = ["{{ database_user }}:{{ database_password }}@{{ mariadb_proto }}({{ api_interface_address | put_address_in_context('url') }}:{{ database_port }})/"] perf_events_statements_digest_text_limit = 120 perf_events_statements_limit = 250 perf_events_statements_time_limit = 86400 diff --git a/ansible/roles/trove/defaults/main.yml b/ansible/roles/trove/defaults/main.yml index 4e001d9e4e..01e2b51ab5 100644 --- a/ansible/roles/trove/defaults/main.yml +++ b/ansible/roles/trove/defaults/main.yml @@ -41,7 +41,7 @@ trove_services: #################### trove_database_name: "trove" trove_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}trove{% endif %}" -trove_database_address: "{{ database_address }}:{{ database_port }}" +trove_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -93,9 +93,9 @@ trove_taskmanager_extra_volumes: "{{ trove_extra_volumes }}" #################### # OpenStack #################### -trove_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" -trove_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" -trove_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" +trove_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" +trove_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" +trove_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ trove_api_port }}/v1.0/%(tenant_id)s" trove_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/vitrage/defaults/main.yml b/ansible/roles/vitrage/defaults/main.yml index 423ef1226b..48815f8fd4 100644 --- a/ansible/roles/vitrage/defaults/main.yml +++ b/ansible/roles/vitrage/defaults/main.yml @@ -47,7 +47,7 @@ vitrage_services: ##################### vitrage_database_name: "vitrage" vitrage_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}vitrage{% endif %}" -vitrage_database_address: "{{ database_address }}:{{ database_port }}" +vitrage_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### # Docker @@ -107,9 +107,9 @@ vitrage_ml_extra_volumes: "{{ vitrage_extra_volumes }}" #################### # OpenStack #################### -vitrage_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ vitrage_api_port }}" -vitrage_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ vitrage_api_port }}" -vitrage_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ vitrage_api_port }}" +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 }}" diff --git a/ansible/roles/vitrage/tasks/precheck.yml b/ansible/roles/vitrage/tasks/precheck.yml index 95e4566447..f1d508768c 100644 --- a/ansible/roles/vitrage/tasks/precheck.yml +++ b/ansible/roles/vitrage/tasks/precheck.yml @@ -8,7 +8,7 @@ - name: Checking free port for vitrage API wait_for: - host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}" + host: "{{ 'api' | kolla_address }}" port: "{{ vitrage_api_port }}" connect_timeout: 1 state: stopped diff --git a/ansible/roles/vitrage/templates/vitrage.conf.j2 b/ansible/roles/vitrage/templates/vitrage.conf.j2 index d876f33950..260a986c54 100644 --- a/ansible/roles/vitrage/templates/vitrage.conf.j2 +++ b/ansible/roles/vitrage/templates/vitrage.conf.j2 @@ -42,7 +42,7 @@ service_token_roles_required = True memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [service_credentials] auth_url = {{ keystone_internal_url }}/v3 @@ -57,7 +57,7 @@ interface = internal memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [oslo_messaging_notifications] transport_url = {{ notify_transport_url }} diff --git a/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2 b/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2 index 99eed8c311..238525f327 100644 --- a/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2 +++ b/ansible/roles/vitrage/templates/wsgi-vitrage.conf.j2 @@ -1,5 +1,5 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if vitrage_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} -Listen {{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}:{{ vitrage_api_port }} +Listen {{ 'api' | kolla_address | put_address_in_context('url') }}:{{ vitrage_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/watcher/defaults/main.yml b/ansible/roles/watcher/defaults/main.yml index 9e4db9844e..368b4fd947 100644 --- a/ansible/roles/watcher/defaults/main.yml +++ b/ansible/roles/watcher/defaults/main.yml @@ -41,7 +41,7 @@ watcher_services: #################### watcher_database_name: "watcher" watcher_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}watcher{% endif %}" -watcher_database_address: "{{ database_address }}:{{ database_port }}" +watcher_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -90,9 +90,9 @@ watcher_engine_extra_volumes: "{{ watcher_extra_volumes }}" #################### # OpenStack #################### -watcher_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ watcher_api_port }}" -watcher_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ watcher_api_port }}" -watcher_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ watcher_api_port }}" +watcher_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ watcher_api_port }}" +watcher_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ watcher_api_port }}" +watcher_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ watcher_api_port }}" watcher_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/watcher/templates/watcher.conf.j2 b/ansible/roles/watcher/templates/watcher.conf.j2 index ec837cb0ab..a73cae7e87 100644 --- a/ansible/roles/watcher/templates/watcher.conf.j2 +++ b/ansible/roles/watcher/templates/watcher.conf.j2 @@ -29,7 +29,7 @@ service_token_roles_required = True memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} [watcher_clients_auth] auth_uri = {{ keystone_internal_url }} diff --git a/ansible/roles/zookeeper/templates/zookeeper.cfg.j2 b/ansible/roles/zookeeper/templates/zookeeper.cfg.j2 index f7ab93d647..c0a8a52e50 100644 --- a/ansible/roles/zookeeper/templates/zookeeper.cfg.j2 +++ b/ansible/roles/zookeeper/templates/zookeeper.cfg.j2 @@ -4,5 +4,5 @@ syncLimit=5 dataDir=/var/lib/zookeeper/data clientPort={{ zookeeper_client_port }} {% for host in groups['zookeeper'] %} -server.{{ loop.index }}={{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ zookeeper_peer_port }}:{{ zookeeper_quorum_port }} +server.{{ loop.index }}={{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ zookeeper_peer_port }}:{{ zookeeper_quorum_port }} {% endfor %} diff --git a/ansible/roles/zun/defaults/main.yml b/ansible/roles/zun/defaults/main.yml index 3a4a62b6e5..cc2eba603f 100644 --- a/ansible/roles/zun/defaults/main.yml +++ b/ansible/roles/zun/defaults/main.yml @@ -52,7 +52,7 @@ zun_services: #################### zun_database_name: "zun" zun_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}zun{% endif %}" -zun_database_address: "{{ database_address }}:{{ database_port }}" +zun_database_address: "{{ database_address | put_address_in_context('url') }}:{{ database_port }}" #################### @@ -104,9 +104,9 @@ zun_compute_extra_volumes: "{{ zun_extra_volumes }}" #################### ## OpenStack #################### -zun_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ zun_api_port }}/v1/" -zun_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ zun_api_port }}/v1/" -zun_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn }}:{{ zun_api_port }}/v1/" +zun_admin_endpoint: "{{ admin_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ zun_api_port }}/v1/" +zun_internal_endpoint: "{{ internal_protocol }}://{{ kolla_internal_fqdn | put_address_in_context('url') }}:{{ zun_api_port }}/v1/" +zun_public_endpoint: "{{ public_protocol }}://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ zun_api_port }}/v1/" zun_logging_debug: "{{ openstack_logging_debug }}" diff --git a/ansible/roles/zun/templates/wsgi-zun.conf.j2 b/ansible/roles/zun/templates/wsgi-zun.conf.j2 index 4b4010b8c9..7639a5dbf5 100644 --- a/ansible/roles/zun/templates/wsgi-zun.conf.j2 +++ b/ansible/roles/zun/templates/wsgi-zun.conf.j2 @@ -1,5 +1,5 @@ {% set python_path = '/usr/lib/python2.7/site-packages' if zun_install_type == 'binary' else '/var/lib/kolla/venv/lib/python2.7/site-packages' %} -Listen {{ api_interface_address }}:{{ zun_api_port }} +Listen {{ api_interface_address | put_address_in_context('url') }}:{{ zun_api_port }} ServerSignature Off ServerTokens Prod diff --git a/ansible/roles/zun/templates/zun.conf.j2 b/ansible/roles/zun/templates/zun.conf.j2 index d38b3c90af..e2de4277a4 100644 --- a/ansible/roles/zun/templates/zun.conf.j2 +++ b/ansible/roles/zun/templates/zun.conf.j2 @@ -42,7 +42,7 @@ region_name = {{ openstack_region_name }} {% if enable_memcached | bool %} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% endif %} # NOTE(yoctozepto): despite what the docs say, both keystone_auth and @@ -63,7 +63,7 @@ region_name = {{ openstack_region_name }} {% if enable_memcached | bool %} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcache_secret_key }} -memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ 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 %} {% endif %} [zun_client] @@ -104,10 +104,10 @@ host_shared_with_nova = {{ inventory_hostname in groups['compute'] and enable_no [websocket_proxy] wsproxy_host = {{ api_interface_address }} wsproxy_port = {{ zun_wsproxy_port }} -base_url = ws://{{ kolla_external_fqdn }}:{{ zun_wsproxy_port }} +base_url = ws://{{ kolla_external_fqdn | put_address_in_context('url') }}:{{ zun_wsproxy_port }} [docker] docker_remote_api_version = 1.24 -api_url = tcp://{{ api_interface_address }}:2375 +api_url = tcp://{{ api_interface_address | put_address_in_context('url') }}:2375 docker_remote_api_host = {{ api_interface_address }} docker_remote_api_port = 2375 diff --git a/doc/source/reference/compute/masakari-guide.rst b/doc/source/reference/compute/masakari-guide.rst index 49e3a75e6a..bd85b6500b 100644 --- a/doc/source/reference/compute/masakari-guide.rst +++ b/doc/source/reference/compute/masakari-guide.rst @@ -31,4 +31,4 @@ The setting is overridable using custom config, put the content in .. code-block:: ini [libvirt] - connection_uri = "xen://{{ migration_interface_address }}/system" + connection_uri = "xen://{{ migration_interface_address | put_address_in_context('url') }}/system" diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml index d8fa8feb0c..eadf3606d9 100644 --- a/etc/kolla/globals.yml +++ b/etc/kolla/globals.yml @@ -78,7 +78,7 @@ ############################## # This interface is what all your api services will be bound to by default. # Additionally, all vxlan/tunnel and storage network traffic will go over this -# interface by default. This interface must contain an IPv4 address. +# interface by default. This interface must contain an IP address. # It is possible for hosts to have non-matching names of interfaces - these can # be set in an inventory file per host or per group or stored separately, see # http://docs.ansible.com/ansible/intro_inventory.html @@ -88,7 +88,7 @@ #network_interface: "eth0" # These can be adjusted for even more customization. The default is the same as -# the 'network_interface'. These interfaces must contain an IPv4 address. +# the 'network_interface'. These interfaces must contain an IP address. #kolla_external_vip_interface: "{{ network_interface }}" #api_interface: "{{ network_interface }}" #storage_interface: "{{ network_interface }}" @@ -99,6 +99,20 @@ #dns_interface: "{{ network_interface }}" #octavia_network_interface: "{{ api_interface }}" +# Configure the address family (AF) per network. +# Valid options are [ ipv4, ipv6 ] +#network_address_family: "ipv4" +#api_address_family: "{{ network_address_family }}" +#storage_address_family: "{{ network_address_family }}" +#cluster_address_family: "{{ network_address_family }}" +#swift_storage_address_family: "{{ storage_address_family }}" +#swift_replication_address_family: "{{ swift_storage_address_family }}" +#migration_address_family: "{{ network_address_family }}" +#tunnel_address_family: "{{ network_address_family }}" +#octavia_network_address_family: "{{ api_address_family }}" +#bifrost_network_address_family: "{{ network_address_family }}" +#dns_address_family: "{{ network_address_family }}" + # This is the raw interface given to neutron as its external network port. Even # though an IP address can exist on this interface, it will be unusable in most # configurations. It is recommended this interface not be configured with any IP diff --git a/kolla_ansible/kolla_address.py b/kolla_ansible/kolla_address.py new file mode 100644 index 0000000000..c1082973e3 --- /dev/null +++ b/kolla_ansible/kolla_address.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2019 Radosław Piliszek (yoctozepto) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from jinja2.filters import contextfilter +from jinja2.runtime import Undefined + +from kolla_ansible.exception import FilterError + + +@contextfilter +def kolla_address(context, network_name, hostname=None): + """returns IP address on the requested network + + The output is affected by '_*' variables: + '_interface' sets the interface to obtain address for. + '_address_family' controls the address family (ipv4/ipv6). + + :param context: Jinja2 Context + :param network_name: string denoting the name of the network to get IP + address for, e.g. 'api' + :param hostname: to override host which address is retrieved for + :returns: string with IP address + """ + + # NOTE(yoctozepto): watch out as Jinja2 'context' behaves not exactly like + # the python 'dict' (but mimics it most of the time) + # for example it returns a special object of type 'Undefined' instead of + # 'None' or value specified as default for 'get' method + # 'HostVars' shares this behavior + + if hostname is None: + hostname = context.get('inventory_hostname') + if isinstance(hostname, Undefined): + raise FilterError("'inventory_hostname' variable is unavailable") + + hostvars = context.get('hostvars') + if isinstance(hostvars, Undefined): + raise FilterError("'hostvars' variable is unavailable") + + del context # remove for sanity + + host = hostvars.get(hostname) + if isinstance(host, Undefined): + raise FilterError("'{hostname}' not in 'hostvars'" + .format(hostname=hostname)) + + del hostvars # remove for sanity (no 'Undefined' beyond this point) + + interface_name = host.get(network_name + '_interface') + if interface_name is None: + raise FilterError("Interface name undefined " + "for network '{network_name}' " + "(set '{network_name}_interface')" + .format(network_name=network_name)) + + address_family = host.get(network_name + '_address_family') + if address_family is None: + raise FilterError("Address family undefined " + "for network '{network_name}' " + "(set '{network_name}_address_family')" + .format(network_name=network_name)) + address_family = address_family.lower() + if address_family not in ['ipv4', 'ipv6']: + raise FilterError("Unknown address family '{address_family}' " + "for network '{network_name}'" + .format(address_family=address_family, + network_name=network_name)) + + ansible_interface_name = interface_name.replace('-', '_') + interface = host.get('ansible_' + ansible_interface_name) + if interface is None: + raise FilterError("Interface '{interface_name}' " + "not present " + "on host '{hostname}'" + .format(interface_name=interface_name, + hostname=hostname)) + + af_interface = interface.get(address_family) + if af_interface is None: + raise FilterError("Address family '{address_family}' undefined " + "on interface '{interface_name}' " + "for host: '{hostname}'" + .format(address_family=address_family, + interface_name=interface_name, + hostname=hostname)) + + if address_family == 'ipv4': + address = af_interface.get('address') + elif address_family == 'ipv6': + # ipv6 has no concept of a secondary address + # prefix 128 is the default from keepalived + # it needs to be excluded here + global_ipv6_addresses = [x for x in af_interface if + x['scope'] == 'global' and + x['prefix'] != '128'] + if global_ipv6_addresses: + address = global_ipv6_addresses[0]['address'] + else: + address = None + + if address is None: + raise FilterError("{address_family} address missing " + "on interface '{interface_name}' " + "for host '{hostname}'" + .format(address_family=address_family, + interface_name=interface_name, + hostname=hostname)) + + return address diff --git a/kolla_ansible/put_address_in_context.py b/kolla_ansible/put_address_in_context.py new file mode 100644 index 0000000000..d176a5611b --- /dev/null +++ b/kolla_ansible/put_address_in_context.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2019 Radosław Piliszek (yoctozepto) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from kolla_ansible.exception import FilterError + + +def put_address_in_context(address, context): + """puts address in context + + :param address: the address to contextify + :param context: describes context in which the address appears, + either 'url' or 'memcache', + affects only IPv6 addresses format + :returns: string with address in proper context + """ + + if context not in ['url', 'memcache']: + raise FilterError("Unknown context '{context}'" + .format(context=context)) + + if ':' not in address: + return address + + # must be IPv6 raw address + + if context == 'url': + return '[{address}]'.format(address=address) + elif context == 'memcache': + return 'inet6:[{address}]'.format(address=address) + + return address diff --git a/kolla_ansible/tests/unit/test_address_filters.py b/kolla_ansible/tests/unit/test_address_filters.py new file mode 100644 index 0000000000..5f157ab9bc --- /dev/null +++ b/kolla_ansible/tests/unit/test_address_filters.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2019 Radosław Piliszek (yoctozepto) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import jinja2 + +from kolla_ansible.exception import FilterError +from kolla_ansible.kolla_address import kolla_address +from kolla_ansible.put_address_in_context import put_address_in_context + + +class TestAddressContextFilter(unittest.TestCase): + + def test_url_context(self): + context = 'url' + addr = '192.168.1.1' + self.assertEqual(put_address_in_context(addr, context), + addr) + addr = 'www.example.com' + self.assertEqual(put_address_in_context(addr, context), + addr) + addr = 'fd::' + self.assertEqual(put_address_in_context(addr, context), + '[{}]'.format(addr)) + + def test_memcache_context(self): + context = 'memcache' + addr = '192.168.1.1' + self.assertEqual(put_address_in_context(addr, context), + addr) + addr = 'www.example.com' + self.assertEqual(put_address_in_context(addr, context), + addr) + addr = 'fd::' + self.assertEqual(put_address_in_context(addr, context), + 'inet6:[{}]'.format(addr)) + + def test_unknown_context(self): + self.assertRaises(FilterError, put_address_in_context, '', 'lol') + + +class TestKollaAddressFilter(unittest.TestCase): + + def setUp(self): + # Bandit complains about Jinja2 autoescaping without nosec. + self.env = jinja2.Environment() # nosec + + def _make_context(self, parent): + return self.env.context_class( + self.env, parent=parent, name='dummy', blocks={}) + + def test_missing_config(self): + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + } + } + }) + self.assertRaises(FilterError, kolla_address, context, 'api') + + def test_valid_ipv4_config(self): + addr = '192.0.2.1' + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + 'api_address_family': 'ipv4', + 'api_interface': 'fake-interface', + 'ansible_fake_interface': { + 'ipv4': { + 'address': addr, + }, + }, + }, + }, + }) + self.assertEqual(addr, kolla_address(context, 'api')) + + def test_valid_ipv6_config(self): + addr = 'fd::' + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + 'api_address_family': 'ipv6', + 'api_interface': 'fake-interface', + 'ansible_fake_interface': { + 'ipv6': [ + { + 'address': addr, + 'scope': 'global', + 'prefix': 64, + }, + ], + }, + }, + }, + }) + self.assertEqual(addr, kolla_address(context, 'api')) + + def test_missing_ipv6_config(self): + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + 'api_address_family': 'ipv6', + 'api_interface': 'fake-interface', + 'ansible_fake_interface': { + }, + }, + }, + }) + self.assertRaises(FilterError, kolla_address, context, 'api') + + def test_valid_ipv6_config_many_addr(self): + addr = 'fd::' + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + 'api_address_family': 'ipv6', + 'api_interface': 'fake-interface', + 'ansible_fake_interface': { + 'ipv6': [ + { + 'address': addr, + 'scope': 'global', + 'prefix': 64, + }, + { + 'address': addr+'1', + 'scope': 'link', + 'prefix': 64, + }, + { + 'address': addr+'2', + 'scope': 'global', + 'prefix': 64, + }, + ], + }, + }, + }, + }) + self.assertEqual(addr, kolla_address(context, 'api')) + + def test_invalid_ipv6_config_no_global(self): + addr = 'fd::' + context = self._make_context({ + 'inventory_hostname': 'primary', + 'hostvars': { + 'primary': { + 'api_address_family': 'ipv6', + 'api_interface': 'fake-interface', + 'ansible_fake_interface': { + 'ipv6': [ + { + 'address': addr, + 'scope': 'link', + 'prefix': 64, + }, + { + 'address': addr+'1', + 'scope': 'link', + 'prefix': 64, + }, + ], + }, + }, + }, + }) + self.assertRaises(FilterError, kolla_address, context, 'api') diff --git a/tests/get_logs.sh b/tests/get_logs.sh index e07d2a06f5..b6e450db4c 100644 --- a/tests/get_logs.sh +++ b/tests/get_logs.sh @@ -10,7 +10,7 @@ copy_logs() { # Don't save the IPA images. rm ${LOG_DIR}/kolla_configs/config/ironic/ironic-agent.{kernel,initramfs} mkdir ${LOG_DIR}/system_configs/ - cp -rL /etc/{hostname,hosts,resolv.conf,nsswitch.conf,docker,systemd} ${LOG_DIR}/system_configs/ + cp -rL /etc/{hostname,hosts,host.conf,resolv.conf,nsswitch.conf,docker,systemd} ${LOG_DIR}/system_configs/ cp -rvnL /var/log/* ${LOG_DIR}/system_logs/ @@ -32,9 +32,15 @@ copy_logs() { (set -x ip a + ip m ip l ip r - ping -c 4 ${KOLLA_INTERNAL_VIP_ADDRESS}) &> ${LOG_DIR}/system_logs/ip.txt + ip -6 r + ip neigh + ping -c 4 $(hostname) + ping6 -c 4 $(hostname) + ping -c 4 ${KOLLA_INTERNAL_VIP_ADDRESS} + ping6 -c 4 ${KOLLA_INTERNAL_VIP_ADDRESS}) &> ${LOG_DIR}/system_logs/ip.txt (set -x iptables -t raw -v -n -L @@ -48,7 +54,15 @@ copy_logs() { ip6tables -t nat -v -n -L ip6tables -t filter -v -n -L) &> ${LOG_DIR}/system_logs/ip6tables.txt - ss -putona > ${LOG_DIR}/system_logs/ss.txt + ss -nep > ${LOG_DIR}/system_logs/ss.txt + + ss -nep -l > ${LOG_DIR}/system_logs/ss_l.txt + + (set -x + getent ahostsv4 $(hostname) + getent ahostsv6 $(hostname)) &> ${LOG_DIR}/system_logs/getent_ahostsvX.txt + + sysctl -a &> ${LOG_DIR}/system_logs/sysctl.txt if [ `command -v dpkg` ]; then dpkg -l > ${LOG_DIR}/system_logs/dpkg-l.txt diff --git a/tests/pre.yml b/tests/pre.yml index 772f4f0714..f42fb8ebec 100644 --- a/tests/pre.yml +++ b/tests/pre.yml @@ -51,9 +51,12 @@ api_interface_tunnel_vni: 10001 tunnel_local_address: "{{ nodepool.private_ipv4 }}" + # NOTE(yoctozepto): CI VXLAN must use a different port than neutron-openvswitch-agent + # which defaults to 4789 (the default is used in CI) + # hence using port 4790 - name: Create VXLAN interface become: true - command: ip link add {{ api_interface_name }} type vxlan id {{ api_interface_tunnel_vni }} local {{ tunnel_local_address }} dstport 4789 + command: ip link add {{ api_interface_name }} type vxlan id {{ api_interface_tunnel_vni }} local {{ tunnel_local_address }} dstport 4790 - name: Set VXLAN interface MTU become: true @@ -78,7 +81,7 @@ with_inventory_hostnames: all when: item != inventory_hostname - - name: Add IP address for VXLAN network + - name: Add IPv4 address for VXLAN network become: true vars: api_network_cidr: "{{ api_interface_address }}/{{ api_network_prefix_length }}" @@ -88,21 +91,65 @@ # broadcast address which fails checks logic api_network_broadcast_address: "{{ api_network_cidr | ipaddr('broadcast') }}" command: ip address add {{ api_network_cidr }} broadcast {{ api_network_broadcast_address }} dev {{ api_interface_name }} + when: address_family == 'ipv4' - - name: Accept traffic on the VXLAN network + # NOTE(yoctozepto): IPv6 has no broadcast address, let's not create confusion by setting it + - name: Add IPv6 address for VXLAN network + become: true + command: ip address add {{ api_interface_address }}/{{ api_network_prefix_length }} dev {{ api_interface_name }} + when: address_family == 'ipv6' + + - name: Accept traffic on the VXLAN network (IN) become: true iptables: state: present action: insert chain: INPUT - ip_version: ipv4 + ip_version: "{{ address_family }}" in_interface: "{{ api_interface_name }}" jump: ACCEPT + # NOTE(yoctozepto): the default policy is ACCEPT but it is nicer to get statistics + - name: Accept traffic on the VXLAN network (OUT) + become: true + iptables: + state: present + action: insert + chain: OUTPUT + ip_version: "{{ address_family }}" + out_interface: "{{ api_interface_name }}" + jump: ACCEPT + - name: Bring VXLAN interface up become: true command: ip link set {{ api_interface_name }} up + # NOTE(yoctozepto): IPv6 DAD may delay proper address assignment + # this task will wait until DAD is done and addresses are no longer tentative + # we assign addresses uniquely so DAD can only move it to preferred + # hence we only check whether it's no longer tentative + - name: Ensure IPv6 addresses on VXLAN are no longer tentative + become: true + command: ip -o address show tentative dev {{ api_interface_name }} + register: tentative_addresses + until: tentative_addresses.stdout == '' + retries: 30 + delay: 2 + when: + - address_family == 'ipv6' + - name: Ping across VXLAN - command: ping -c1 {{ hostvars[item].api_interface_address }} + vars: + ping_command: "{{ 'ping' if address_family == 'ipv4' else 'ping6' }}" + command: "{{ ping_command }} -c1 {{ hostvars[item].api_interface_address }}" with_inventory_hostnames: all + + # NOTE(yoctozepto): CentOS 7 image uses myhostname plugin for NSS + # which creates issues with IPv6-only deployment by providing + # an IPv4 address for the current hostname (affects rabbitmq) + - name: Disable myhostname NSS plugin + become: true + replace: + path: /etc/nsswitch.conf + regexp: ' myhostname' + replace: '' diff --git a/tests/run.yml b/tests/run.yml index 8af8157636..769b5a9ec0 100644 --- a/tests/run.yml +++ b/tests/run.yml @@ -18,7 +18,6 @@ build_image_tag: "change_{{ zuul.change | default('none') }}" is_upgrade: "{{ 'upgrade' in scenario }}" is_ceph: "{{ 'ceph' in scenario }}" - primary_address: "{{ hostvars.primary['ansible_' + api_interface_name].ipv4.address }}" - name: Prepare disks for Ceph or LVM script: "setup_disks.sh {{ disk_type }}" diff --git a/tests/templates/globals-default.j2 b/tests/templates/globals-default.j2 index 1eb62f6922..890afb509a 100644 --- a/tests/templates/globals-default.j2 +++ b/tests/templates/globals-default.j2 @@ -2,6 +2,7 @@ kolla_base_distro: "{{ base_distro }}" kolla_install_type: "{{ install_type }}" network_interface: "{{ api_interface_name }}" +network_address_family: "{{ address_family }}" docker_restart_policy: "no" # TODO(mgoddard): Always do this in Ussuri cycle. {% if not is_previous_release or previous_release != 'stein' %} @@ -25,7 +26,10 @@ openstack_service_workers: "1" {% if need_build_image and not is_previous_release %} # NOTE(Jeffrey4l): use different a docker namespace name in case it pull image from hub.docker.io when deplying docker_namespace: "lokolla" -docker_registry: "{{ primary_address }}:4000" +# NOTE(yoctozepto): use hostname or FQDN to be compatible between IPv4 and IPv6 +# docker does not support referencing registry via an IPv6 address +# see: https://github.com/moby/moby/issues/39033 +docker_registry: "primary:4000" openstack_release: "{{ build_image_tag }}" {% else %} # use docker hub images @@ -35,7 +39,7 @@ docker_namespace: "kolla" # will be the source of images during the upgrade. # NOTE(yoctozepto): this is required here for CI because we run templating # of docker systemd command only once -docker_custom_option: "--insecure-registry {{ primary_address }}:4000" +docker_custom_option: "--insecure-registry primary:4000" {% endif %} {% if not is_previous_release %} openstack_release: "{{ zuul.branch | basename }}" @@ -53,6 +57,13 @@ enable_ceph_nfs: "yes" enable_cinder: "yes" ceph_pool_pg_num: 8 ceph_pool_pgp_num: 8 +{% if address_family == 'ipv6' %} +# NOTE(yoctozepto): ceph won't accept IPv6 address as hostname (due to ':', '.' were fine) +# hence use inventory name as the others do +# this is Train feature so would fail upgrades from Stein +ceph_mon_host_type: "INVENTORY" +ceph_osd_host_type: "INVENTORY" +{% endif %} # This is experimental feature, disable if gate fail. # In multinode jobs without ceph rolling upgrade fails. glance_enable_rolling_upgrade: "yes" diff --git a/tools/validate-all-file.py b/tools/validate-all-file.py index 33177b54d5..2d87b16449 100755 --- a/tools/validate-all-file.py +++ b/tools/validate-all-file.py @@ -24,6 +24,9 @@ import jinja2 import yaml +from kolla_ansible.put_address_in_context import put_address_in_context + + PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) NEWLINE_EOF_INCLUDE_PATTERNS = ['*.j2', '*.yml', '*.py', '*.sh'] @@ -37,6 +40,19 @@ YAML_INCLUDE_PATTERNS = ['*.yml'] YAML_EXCLUDE_PATTERNS = ['.tox', '.testrepository', '.git', 'defaults', 'templates', 'vars'] +KOLLA_NETWORKS = [ + 'api', + 'storage', + 'cluster', + 'swift_storage', + 'swift_replication', + 'migration', + 'tunnel', + 'octavia_network', + 'bifrost_network', + 'dns', # designate +] + logging.basicConfig() LOG = logging.getLogger(__name__) @@ -78,6 +94,15 @@ def check_json_j2(): def basename_filter(text): return text.split('\\')[-1] + def kolla_address_filter_mock(network_name, hostname=None): + # no validation is possible for the hostname + + if network_name not in KOLLA_NETWORKS: + raise ValueError("{network_name} not in KOLLA_NETWORKS" + .format(network_name=network_name)) + + return "127.0.0.1" + # Mock ansible hostvars variable, which is a nested dict def hostvars(): return collections.defaultdict(hostvars) @@ -91,6 +116,9 @@ def check_json_j2(): loader=jinja2.FileSystemLoader(root)) env.filters['bool'] = bool_filter env.filters['basename'] = basename_filter + env.filters['kolla_address'] = kolla_address_filter_mock + env.filters['put_address_in_context'] = \ + put_address_in_context template = env.get_template(filename) # Mock ansible variables. context = { diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml index 8f42824e79..932876233e 100644 --- a/zuul.d/base.yaml +++ b/zuul.d/base.yaml @@ -23,6 +23,7 @@ api_network_prefix_length: "24" api_interface_name: vxlan0 kolla_internal_vip_address: "192.0.2.10" + address_family: 'ipv4' roles: - zuul: zuul/zuul-jobs @@ -33,6 +34,16 @@ previous_release: stein scenario: upgrade +- job: + name: kolla-ansible-ipv6-base + parent: kolla-ansible-base + voting: false + vars: + api_network_prefix: "fd::" + api_network_prefix_length: "64" + kolla_internal_vip_address: "fd::ff:0" + address_family: 'ipv6' + - job: name: kolla-ansible-bifrost-base parent: kolla-ansible-base diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 72a88dcf9e..657109a3fa 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -26,6 +26,14 @@ base_distro: ubuntu install_type: source +- job: + name: kolla-ansible-ubuntu-source-multinode-ipv6 + parent: kolla-ansible-ipv6-base + nodeset: kolla-ansible-bionic-multi + vars: + base_distro: ubuntu + install_type: source + - job: name: kolla-ansible-centos-binary parent: kolla-ansible-base diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml index a19ba56088..8c97b7c65d 100644 --- a/zuul.d/project.yaml +++ b/zuul.d/project.yaml @@ -15,6 +15,7 @@ - kolla-ansible-centos-source - kolla-ansible-debian-source - kolla-ansible-ubuntu-source + - kolla-ansible-ubuntu-source-multinode-ipv6 - kolla-ansible-ubuntu-source-ceph - kolla-ansible-centos-source-ceph - kolla-ansible-ubuntu-source-cinder-lvm: