# 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.

_tempest_helm_values:
  endpoints: "{{ openstack_helm_endpoints | combine(_tempest_endpoint_values, recursive=True) }}"
  images:
    tags: "{{ atmosphere_images | vexxhost.atmosphere.openstack_helm_image_tags('tempest') }}"
  jobs:
    run_tests:
      restartPolicy: Never
      backoffLimit: 0
  conf:
    tempest:
      service_available:
        cinder: true
        glance: true
        horizon: true
        neutron: true
        nova: true
        swift: true
      compute:
        endpoint_type: internal
        fixed_network_name: public
      dashboard:
        dashboard_url: "http://horizon-int.openstack.svc.cluster.local"
      identity:
        v3_endpoint_type: internal
      image:
        endpoint_type: internal
      network:
        endpoint_type: internal
        floating_network_name: public
        shared_physical_network: false
      placement:
        endpoint_type: internal
      validation:
        image_ssh_user: cirros
      volume:
        endpoint_type: internal
      object-storage:
        build_timeout: 60
        endpoint_type: internal
        reseller_admin_role: admin
  pvc:
    enabled: false

_tempest_endpoint_values:
  identity:
    auth:
      tempest:
        region_name: "{{ openstack_helm_endpoints_tempest_region_name }}"
        username: "tempest-{{ openstack_helm_endpoints_tempest_region_name }}"
        password: "{{ openstack_helm_endpoints_tempest_keystone_password }}"
    path:
      # NOTE(mnaser): Heat uses the catalog and blindly adds a /v3 to the end of
      #               the endpoint.  This is a workaround to make it work.
      default: /v3

_tempest_network_backend_settings:
  openvswitch:
    conf:
      tempest:
        network-feature-enabled:
          api_extensions:
            - address-scope
            - agent
            - allowed-address-pairs
            - auto-allocated-topology
            - availability_zone
            - binding
            - default-subnetpools
            - dhcp_agent_scheduler
            - dvr
            - ext-gw-mode
            - external-net
            - extra_dhcp_opt
            - extraroute
            - flavors
            - l3_agent_scheduler
            - l3-flavors
            - l3-ha
            - multi-provider
            - net-mtu
            - network_availability_zone
            - network-ip-availability
            - pagination
            - port-security
            - project-id
            - provider
            - qos
            - qos-bw-limit-direction
            - qos-bw-minimum-ingress
            - qos-default
            - qos-fip
            - qos-gateway-ip
            - qos-port-network-policy
            - qos-pps
            - qos-pps-minimum
            - qos-pps-minimum-rule-alias
            - qos-rule-type-details
            - qos-rule-type-filter
            - qos-rules-alias
            - qos-specs
            - quotas
            - rbac-policies
            - router
            - router_availability_zone
            - security-group
            - service-type
            - sorting
            - standard-attr-description
            - standard-attr-revisions
            - standard-attr-tag
            - standard-attr-timestamp
            - subnet_allocation
            - subnet-service-types
            - tag
            - trunk
            - trunk-details
  ovn:
    conf:
      tempest:
        network-feature-enabled:
          api_extensions:
            - address-scope
            - agent
            - allowed-address-pairs
            - auto-allocated-topology
            - availability_zone
            - binding
            - default-subnetpools
            - ext-gw-mode
            - external-net
            - extra_dhcp_opt
            - extraroute
            - flavors
            - l3-flavors
            - l3-ha
            - multi-provider
            - net-mtu
            - network_availability_zone
            - network-ip-availability
            - pagination
            - port-security
            - project-id
            - provider
            - qos
            - qos-bw-limit-direction
            - qos-bw-minimum-ingress
            - qos-default
            - qos-fip
            - qos-gateway-ip
            - qos-port-network-policy
            - qos-pps
            - qos-pps-minimum
            - qos-pps-minimum-rule-alias
            - qos-rule-type-details
            - qos-rule-type-filter
            - qos-rules-alias
            - qos-specs
            - quotas
            - rbac-policies
            - router
            - router_availability_zone
            - security-group
            - service-type
            - sorting
            - standard-attr-description
            - standard-attr-revisions
            - standard-attr-tag
            - standard-attr-timestamp
            - subnet_allocation
            - subnet-service-types
            - tag
            - trunk
            - trunk-details
