##############################################################################
# Copyright (c) 2018 Mirantis Inc., Enea AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
{%- import 'net_map.j2' as nm with context %}
---
classes:
  - cluster.all-mcp-arch-common.uca_repo
parameters:
  _param:
    # openstack service addresses
{%- if conf.MCP_VCP %}
    openstack_proxy_control_address: ${_param:opnfv_openstack_proxy_control_address}
    openstack_proxy_node01_control_address: ${_param:opnfv_openstack_proxy_node01_control_address}
    openstack_proxy_node02_control_address: ${_param:opnfv_openstack_proxy_node02_control_address}
{%- else %}
    openstack_proxy_control_address: ${_param:opnfv_openstack_control_address}
    openstack_proxy_node01_control_address: ${_param:opnfv_openstack_control_node01_address}
    openstack_proxy_node02_control_address: ${_param:opnfv_openstack_control_node03_address}
{%- endif %}

    openstack_proxy_address: ${_param:opnfv_openstack_proxy_address}
    openstack_proxy_node01_address: ${_param:opnfv_openstack_proxy_node01_address}
    openstack_proxy_node02_address: ${_param:opnfv_openstack_proxy_node02_address}

    openstack_control_address: ${_param:opnfv_openstack_control_address}
    openstack_control_node01_address: ${_param:opnfv_openstack_control_node01_address}
    openstack_control_node02_address: ${_param:opnfv_openstack_control_node02_address}
    openstack_control_node03_address: ${_param:opnfv_openstack_control_node03_address}

{%- if conf.MCP_VCP %}
    openstack_database_address: ${_param:opnfv_openstack_database_address}
    openstack_database_node01_address: ${_param:opnfv_openstack_database_node01_address}
    openstack_database_node02_address: ${_param:opnfv_openstack_database_node02_address}
    openstack_database_node03_address: ${_param:opnfv_openstack_database_node03_address}

    openstack_message_queue_address: ${_param:opnfv_openstack_message_queue_address}
    openstack_message_queue_node01_address: ${_param:opnfv_openstack_message_queue_node01_address}
    openstack_message_queue_node02_address: ${_param:opnfv_openstack_message_queue_node02_address}
    openstack_message_queue_node03_address: ${_param:opnfv_openstack_message_queue_node03_address}

    openstack_telemetry_address: ${_param:opnfv_openstack_telemetry_address}
    openstack_telemetry_node01_address: ${_param:opnfv_openstack_telemetry_node01_address}
    openstack_telemetry_node02_address: ${_param:opnfv_openstack_telemetry_node02_address}
    openstack_telemetry_node03_address: ${_param:opnfv_openstack_telemetry_node03_address}
{%- else %}
    openstack_database_address: ${_param:openstack_control_address}
    openstack_database_node01_address: ${_param:openstack_control_node01_address}
    openstack_database_node02_address: ${_param:openstack_control_node02_address}
    openstack_database_node03_address: ${_param:openstack_control_node03_address}

    openstack_message_queue_address: ${_param:openstack_control_address}
    openstack_message_queue_node01_address: ${_param:openstack_control_node01_address}
    openstack_message_queue_node02_address: ${_param:openstack_control_node02_address}
    openstack_message_queue_node03_address: ${_param:openstack_control_node03_address}

    openstack_telemetry_address: ${_param:openstack_control_address}
    openstack_telemetry_node01_address: ${_param:openstack_control_node01_address}
    openstack_telemetry_node02_address: ${_param:openstack_control_node02_address}
    openstack_telemetry_node03_address: ${_param:openstack_control_node03_address}
{%- endif %}

    # openstack service hostnames
{%- if conf.MCP_VCP %}
    openstack_proxy_hostname: prx
    openstack_proxy_node01_hostname: prx01
    openstack_proxy_node02_hostname: prx02
    openstack_control_hostname: ctl
    openstack_control_node01_hostname: ctl01
    openstack_control_node02_hostname: ctl02
    openstack_control_node03_hostname: ctl03
    openstack_database_hostname: dbs
    openstack_database_node01_hostname: dbs01
    openstack_database_node02_hostname: dbs02
    openstack_database_node03_hostname: dbs03
    openstack_message_queue_hostname: msg
    openstack_message_queue_node01_hostname: msg01
    openstack_message_queue_node02_hostname: msg02
    openstack_message_queue_node03_hostname: msg03
    openstack_telemetry_hostname: mdb
    openstack_telemetry_node01_hostname: mdb01
    openstack_telemetry_node02_hostname: mdb02
    openstack_telemetry_node03_hostname: mdb03
{%- else %}
    openstack_proxy_hostname: ${_param:openstack_control_hostname}
    openstack_proxy_node01_hostname: ${_param:openstack_control_node01_hostname}
    openstack_proxy_node02_hostname: ${_param:openstack_control_node03_hostname}
    openstack_control_hostname: kvm
    openstack_control_node01_hostname: kvm01
    openstack_control_node02_hostname: kvm02
    openstack_control_node03_hostname: kvm03
    openstack_database_hostname: ${_param:openstack_control_hostname}
    openstack_database_node01_hostname: ${_param:openstack_control_node01_hostname}
    openstack_database_node02_hostname: ${_param:openstack_control_node02_hostname}
    openstack_database_node03_hostname: ${_param:openstack_control_node03_hostname}
    openstack_message_queue_hostname: ${_param:openstack_control_hostname}
    openstack_message_queue_node01_hostname: ${_param:openstack_control_node01_hostname}
    openstack_message_queue_node02_hostname: ${_param:openstack_control_node02_hostname}
    openstack_message_queue_node03_hostname: ${_param:openstack_control_node03_hostname}
    openstack_telemetry_hostname: ${_param:openstack_control_hostname}
    openstack_telemetry_node01_hostname: ${_param:openstack_control_node01_hostname}
    openstack_telemetry_node02_hostname: ${_param:openstack_control_node02_hostname}
    openstack_telemetry_node03_hostname: ${_param:openstack_control_node03_hostname}
{%- endif %}

    # openstack compute
    openstack_compute_node01_hostname: cmp001
    openstack_compute_node02_hostname: cmp002

    # opendaylight options
{%- if conf.MCP_VCP %}
    opendaylight_server_node01_hostname: odl01
    opendaylight_server_node01_single_address: ${_param:opnfv_opendaylight_server_node01_single_address}
{%- else %}
    opendaylight_control_hostname: ${_param:openstack_control_node02_hostname}
    opendaylight_server_node01_hostname: ${_param:opendaylight_control_hostname}
    opendaylight_server_node01_single_address: ${_param:opnfv_openstack_control_node02_address}
{%- endif %}

    openstack_region: RegionOne
    admin_email: root@localhost
    db_connection_recycle_time: 300
    # Neutron osv/nodvr
    neutron_control_dvr: 'False'
    neutron_global_physnet_mtu: 1500
    neutron_external_mtu: 1500
    neutron_gateway_dvr: 'False'
    neutron_gateway_agent_mode: legacy
    neutron_compute_dvr: 'False'
    neutron_compute_agent_mode: legacy
    neutron_compute_external_access: 'True'
    galera_server_cluster_name: openstack_cluster
    galera_server_maintenance_password: opnfv_secret
    galera_server_admin_password: opnfv_secret
    rabbitmq_secret_key: opnfv_secret
    rabbitmq_admin_password: opnfv_secret
    rabbitmq_openstack_password: opnfv_secret
    glance_version: ${_param:openstack_version}
    glance_service_host: ${_param:openstack_control_address}
    keystone_version: ${_param:openstack_version}
    keystone_service_host: ${_param:openstack_control_address}
    heat_version: ${_param:openstack_version}
    heat_service_host: ${_param:openstack_control_address}
    heat_domain_admin_password: opnfv_secret
    cinder_version: ${_param:openstack_version}
    cinder_service_host: ${_param:openstack_control_address}
    ceilometer_version: ${_param:openstack_version}
    ceilometer_service_host: ${_param:openstack_telemetry_address}
    ceilometer_influxdb_password: opnfv_secret
    nova_version: ${_param:openstack_version}
    nova_service_host: ${_param:openstack_control_address}
    neutron_version: ${_param:openstack_version}
    neutron_service_host: ${_param:openstack_control_address}
{%- if conf.MCP_VCP %}
    glusterfs_service_host: ${_param:infra_kvm_address}
{%- else %}
    glusterfs_service_host: ${_param:openstack_control_address}
{%- endif %}
    mysql_admin_user: root
    mysql_admin_password: opnfv_secret
    mysql_cinder_password: opnfv_secret
    mysql_ceilometer_password: opnfv_secret
    mysql_glance_password: opnfv_secret
    mysql_grafana_password: opnfv_secret
    mysql_heat_password: opnfv_secret
    mysql_keystone_password: opnfv_secret
    mysql_neutron_password: opnfv_secret
    mysql_nova_password: opnfv_secret
    mysql_aodh_password: opnfv_secret
    mysql_designate_password: opnfv_secret
    aodh_version: ${_param:openstack_version}
    keystone_aodh_password: opnfv_secret
    keystone_service_token: opnfv_secret
    keystone_admin_password: opnfv_secret
    keystone_ceilometer_password: opnfv_secret
    keystone_cinder_password: opnfv_secret
    keystone_glance_password: opnfv_secret
    keystone_heat_password: opnfv_secret
    keystone_keystone_password: opnfv_secret
    keystone_neutron_password: opnfv_secret
    keystone_nova_password: opnfv_secret
    keystone_designate_password: opnfv_secret

    barbican_version: ${_param:openstack_version}
    barbican_service_host: ${_param:openstack_control_address}
    mysql_barbican_password: opnfv_secret
    keystone_barbican_password: opnfv_secret
    barbican_simple_crypto_kek: "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY="
    barbican_integration_enabled: true

    ceilometer_secret_key: opnfv_secret
    horizon_version: ${_param:openstack_version}
    horizon_secret_key: opaesee8Que2yahJoh9fo0eefo1Aeyo6ahyei8zeiboh3aeth5loth7ieNa5xi5e
    horizon_identity_host: ${_param:openstack_control_address}
    horizon_identity_encryption: none
    horizon_identity_version: 3
    metadata_password: opnfv_secret
    openstack_telemetry_keepalived_password: opnfv_secret
    aodh_service_host: ${_param:openstack_telemetry_address}
    gnocchi_version: 4.2
    gnocchi_service_host: ${_param:openstack_telemetry_address}
    mysql_gnocchi_password: opnfv_secret
    keystone_gnocchi_password: opnfv_secret
    panko_version: ${_param:openstack_version}
    panko_service_host: ${_param:openstack_telemetry_address}
    mysql_panko_password: opnfv_secret
    keystone_panko_password: opnfv_secret
    ceilometer_agent_default_polling_interval: 180
    ceilometer_agent_default_polling_meters:
      - "*"
    designate_service_host: ${_param:openstack_control_address}
    designate_bind9_rndc_key: 4pc+X4PDqb2q+5o72dISm72LM1Ds9X2EYZjqg+nmsS7FhdTwzFFY8l/iEDmHxnyjkA33EQC8H+z0fLLBunoitw==
    designate_domain_id: 5186883b-91fb-4891-bd49-e6769234a8fc
    designate_pool_ns_records:
      - hostname: 'ns1.example.org.'
        priority: 10
    designate_pool_nameservers:
      - host: ${_param:openstack_control_node01_address}
        port: 53
      - host: ${_param:openstack_control_node02_address}
        port: 53
      - host: ${_param:openstack_control_node03_address}
        port: 53
    designate_pool_target_type: bind9
    designate_pool_target_masters:
      - host: ${_param:openstack_control_node01_address}
        port: 5354
      - host: ${_param:openstack_control_node02_address}
        port: 5354
      - host: ${_param:openstack_control_node03_address}
        port: 5354
    designate_pool_target_options:
      host: ${_param:openstack_control_node01_address}
      port: 53
      rndc_host: ${_param:openstack_control_node01_address}
      rndc_port: 953
      rndc_key_file: /etc/designate/rndc.key
    designate_version: ${_param:openstack_version}
    # Billing
    # keystone_billometer_password: opnfv_secret
    # keystone_billometer_address: ${_param:billometer_service_host}
    # billometer_service_host: ${_param:openstack_billing_address}
    # billometer_version: ${_param:openstack_version}
    # billometer_secret_key: opnfv_secretpasswordpasswordpassword
    # billometer_identity_password: ${_param:keystone_billometer_password}
    # billometer_identity_host: ${_param:openstack_control_address}
    # billometer_identity_token: ${_param:keystone_service_token}
  linux:
    system:
      repo:
        uca:
          pin:
            - pin: 'release o=Canonical'
              priority: 1200
              package: 'libvirt* qemu* openvswitch* python-openvswitch ovn* dpdk* libdpdk*'
{%- if 'aarch64' in nm.cluster.arch %}
        armband_3:  # Should be in sync with the repo config generated via curtin/MaaS
          source: "deb http://linux.enea.com/mcp-repos/${_param:openstack_version}/${_param:linux_system_codename} ${_param:openstack_version}-armband main"
          key: ${_param:armband_key}
          pin:
            - pin: 'release a=${_param:openstack_version}-armband'
              priority: 1201
              package: '*'
{%- endif %}
      kernel:
        sysctl:
          net.ipv4.tcp_congestion_control: yeah
          net.ipv4.tcp_slow_start_after_idle: 0
          net.ipv4.tcp_fin_timeout: 30
      package:
        python-tornado:
          version: latest
    network:
      host:
{%- if conf.MCP_VCP %}
        prx:
          address: ${_param:openstack_proxy_control_address}
          names:
            - ${_param:openstack_proxy_hostname}
            - ${_param:openstack_proxy_hostname}.${_param:cluster_domain}
        prx01:
          address: ${_param:openstack_proxy_node01_control_address}
          names:
            - ${_param:openstack_proxy_node01_hostname}
            - ${_param:openstack_proxy_node01_hostname}.${_param:cluster_domain}
        prx02:
          address: ${_param:openstack_proxy_node02_control_address}
          names:
            - ${_param:openstack_proxy_node02_hostname}
            - ${_param:openstack_proxy_node02_hostname}.${_param:cluster_domain}
        ctl:
          address: ${_param:openstack_control_address}
          names:
            - ${_param:openstack_control_hostname}
            - ${_param:openstack_control_hostname}.${_param:cluster_domain}
        ctl01:
          address: ${_param:openstack_control_node01_address}
          names:
            - ${_param:openstack_control_node01_hostname}
            - ${_param:openstack_control_node01_hostname}.${_param:cluster_domain}
        ctl02:
          address: ${_param:openstack_control_node02_address}
          names:
            - ${_param:openstack_control_node02_hostname}
            - ${_param:openstack_control_node02_hostname}.${_param:cluster_domain}
        ctl03:
          address: ${_param:openstack_control_node03_address}
          names:
            - ${_param:openstack_control_node03_hostname}
            - ${_param:openstack_control_node03_hostname}.${_param:cluster_domain}
        msg:
          address: ${_param:openstack_message_queue_address}
          names:
            - ${_param:openstack_message_queue_hostname}
            - ${_param:openstack_message_queue_hostname}.${_param:cluster_domain}
        msg01:
          address: ${_param:openstack_message_queue_node01_address}
          names:
            - ${_param:openstack_message_queue_node01_hostname}
            - ${_param:openstack_message_queue_node01_hostname}.${_param:cluster_domain}
        msg02:
          address: ${_param:openstack_message_queue_node02_address}
          names:
            - ${_param:openstack_message_queue_node02_hostname}
            - ${_param:openstack_message_queue_node02_hostname}.${_param:cluster_domain}
        msg03:
          address: ${_param:openstack_message_queue_node03_address}
          names:
            - ${_param:openstack_message_queue_node03_hostname}
            - ${_param:openstack_message_queue_node03_hostname}.${_param:cluster_domain}
        dbs:
          address: ${_param:openstack_database_address}
          names:
            - ${_param:openstack_database_hostname}
            - ${_param:openstack_database_hostname}.${_param:cluster_domain}
        dbs01:
          address: ${_param:openstack_database_node01_address}
          names:
            - ${_param:openstack_database_node01_hostname}
            - ${_param:openstack_database_node01_hostname}.${_param:cluster_domain}
        dbs02:
          address: ${_param:openstack_database_node02_address}
          names:
            - ${_param:openstack_database_node02_hostname}
            - ${_param:openstack_database_node02_hostname}.${_param:cluster_domain}
        dbs03:
          address: ${_param:openstack_database_node03_address}
          names:
            - ${_param:openstack_database_node03_hostname}
            - ${_param:openstack_database_node03_hostname}.${_param:cluster_domain}
        mdb:
          address: ${_param:openstack_telemetry_address}
          names:
            - ${_param:openstack_telemetry_hostname}
            - ${_param:openstack_telemetry_hostname}.${_param:cluster_domain}
        mdb01:
          address: ${_param:openstack_telemetry_node01_address}
          names:
            - ${_param:openstack_telemetry_node01_hostname}
            - ${_param:openstack_telemetry_node01_hostname}.${_param:cluster_domain}
        mdb02:
          address: ${_param:openstack_telemetry_node02_address}
          names:
            - ${_param:openstack_telemetry_node02_hostname}
            - ${_param:openstack_telemetry_node02_hostname}.${_param:cluster_domain}
        mdb03:
          address: ${_param:openstack_telemetry_node03_address}
          names:
            - ${_param:openstack_telemetry_node03_hostname}
            - ${_param:openstack_telemetry_node03_hostname}.${_param:cluster_domain}
{%- else %}
        kvm:
          address: ${_param:openstack_control_address}
          names:
            - ${_param:openstack_control_hostname}
            - ${_param:openstack_control_hostname}.${_param:cluster_domain}
        kvm01:
          address: ${_param:openstack_control_node01_address}
          names:
            - ${_param:openstack_control_node01_hostname}
            - ${_param:openstack_control_node01_hostname}.${_param:cluster_domain}
        kvm02:
          address: ${_param:openstack_control_node02_address}
          names:
            - ${_param:openstack_control_node02_hostname}
            - ${_param:openstack_control_node02_hostname}.${_param:cluster_domain}
        kvm03:
          address: ${_param:openstack_control_node03_address}
          names:
            - ${_param:openstack_control_node03_hostname}
            - ${_param:openstack_control_node03_hostname}.${_param:cluster_domain}
{%- endif %}
{#- For compute nodes, expand values in-place, bypassing reclass param expansion #}
{%- for cmp in range(1, nm.cmp_nodes + 1) %}
  {%- set h = 'cmp%03d' | format(cmp) %}
  {%- set mgmt = nm.net_mgmt_hosts | length + nm.start_ip[nm.net_mgmt] + loop.index %}
        {{ h }}:
          address: {{ nm.net_mgmt | ipnet_hostaddr(mgmt) }}
          names:
            - {{ h }}
            - {{ h }}.${_param:cluster_domain}
{%- endfor %}