# Copyright (c) 2022 VEXXHOST, Inc.
#
# 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.

__neutron_helm_values:
  endpoints: "{{ openstack_helm_endpoints }}"
  images:
    tags: "{{ atmosphere_images | vexxhost.atmosphere.openstack_helm_image_tags('neutron') }}"
  pod:
    replicas:
      server: 3
  conf:
    neutron:
      DEFAULT:
        api_workers: 8
        dhcp_agents_per_network: 3
        log_config_append: null
        rpc_workers: 8
        service_plugins: qos,router,segments,trunk,vpnaas
        external_dns_driver: designate
      cors:
        allowed_origin: "*"
      nova:
        live_migration_events: true
      oslo_messaging_notifications:
        driver: noop
      keystone_authtoken:
        # NOTE(okozachenko1203): We can remove it once the following is merged:
        #                        https://review.opendev.org/883066
        service_type: network
      service_providers:
        service_provider: VPN:strongswan:neutron_vpnaas.services.vpn.service_drivers.ipsec.IPsecVPNDriver:default
    dhcp_agent:
      DEFAULT:
        dnsmasq_dns_servers: "{{ neutron_coredns_cluster_ip | default('10.96.0.20') }}"
        enable_isolated_metadata: true
    l3_agent:
      AGENT:
        extensions: vpnaas
      vpnagent:
        vpn_device_driver: neutron_vpnaas.services.vpn.device_drivers.strongswan_ipsec.StrongSwanDriver
    metadata_agent:
      DEFAULT:
        nova_metadata_port: 8775
        metadata_proxy_shared_secret: "{{ openstack_helm_endpoints['compute_metadata']['secret'] }}"
    plugins:
      ml2_conf:
        ml2:
          extension_drivers: dns_domain_ports,port_security,qos
          type_drivers: flat,gre,vlan,vxlan
        ml2_type_gre:
          tunnel_id_ranges: 1:1000
        ml2_type_vlan:
          network_vlan_ranges: external:1:4094
  manifests:
    ingress_server: false
    service_ingress_server: false

__neutron_ovn_helm_values:
  network:
    backend:
      # - openvswitch
      - ovn
  conf:
    neutron:
      DEFAULT:
        service_plugins: qos,ovn-router,segments,trunk
      ovn:
        dns_servers: "{{ neutron_coredns_cluster_ip | default('10.96.0.20') }}"
        enable_distributed_floating_ip: true
        ovn_metadata_enabled: true
        ovn_nb_connection: "{% for n in range(ovn_helm_values.get('pod', {}).get('replicas', {}).get('ovn_ovsdb_nb', 3)) %}tcp:ovn-ovsdb-nb-{{ n }}.{{ neutron_helm_release_namespace }}.svc.cluster.local:6643{% if not loop.last %},{% endif %}{% endfor %}"
        ovn_sb_connection: "{% for n in range(ovn_helm_values.get('pod', {}).get('replicas', {}).get('ovn_ovsdb_sb', 3)) %}tcp:ovn-ovsdb-sb-{{ n }}.{{ neutron_helm_release_namespace }}.svc.cluster.local:6642{% if not loop.last %},{% endif %}{% endfor %}"
    plugins:
      ml2_conf:
        ml2:
          type_drivers: flat,vlan,vxlan,geneve
          tenant_network_types: geneve
        ml2_type_geneve:
          vni_ranges: 1:65536
          max_header_size: 38
  manifests:
    daemonset_dhcp_agent: false
    daemonset_l3_agent: false
    daemonset_metadata_agent: false
    daemonset_ovn_metadata_agent: true
    daemonset_ovs_agent: false

  # conf:
  #   plugins:
  #     ml2_conf:
  #       ml2:
  #         extension_drivers: port_security
  #         mechanism_drivers: ovn
  #   ovn_metadata_agent:
  #     DEFAULT:
  #       nova_metadata_port: 8775
  #       metadata_proxy_shared_secret: "{{ openstack_helm_endpoints['compute_metadata']['secret'] }}"
  #       metadata_workers: 8
  #       nova_metadata_host: __NOVA_METADATA_SERVICE_HOST__
  #     cache:
  #       enabled: true
  #       backend: dogpile.cache.memcached
  #     ovs:
  #       ovsdb_connection: tcp:127.0.0.1:6640
  #       ovsdb_timeout: 180
  #     ovn:
  #       ovn_metadata_enabled: true
  #       ovn_nb_connection: tcp:__OVN_NB_DB_SERVICE_HOST__:__OVN_NB_DB_SERVICE_PORT__
  #       ovn_sb_connection: tcp:__OVN_SB_DB_SERVICE_HOST__:__OVN_SB_DB_SERVICE_PORT__
