Neutron using ovs

# NOTE: This file serves as an example only!
# It demonstrates a subset of the API features which are available and
# is NOT FIT FOR PRODUCTIVE USE. You need to adapt them to your
# specific environment, needs and scale.
# DO NOT DEPLOY THIS FILE WITH THE EXPECTATION THAT YOU WILL GET A
# YAOOK DEPLOYMENT FIT FOR ANY USE EXCEPT LOOKING AT IT.
apiVersion: yaook.cloud/v1
kind: NeutronDeployment
metadata:
  name: neutron-ovs
spec:
  api:
    ingress:
      fqdn: "neutron.yaook.cloud"
      port: 32443
    replicas: 1
  database:
    backup:
      schedule: "0 * * * *"
    proxy: {}
    replicas: 1
  issuerRef:
    name: ca-issuer
  keystoneRef:
    name: keystone
  messageQueue:
    replicas: 1
  memcached: {}
  neutronConfig:
    DEFAULT:
      debug: true
  neutronML2Config:
    ml2_type_flat:
      flat_networks:
        - physnet1
  novaRef:
    name: nova
  policy:
    "context_is_admin": "role:admin"
  region:
    name: MyRegion
  setup:
    ovs:
      l2:
        configTemplates:
          - nodeSelectors:
              - matchLabels: {} # matches all!
            # this key will be removed, use neutronOpenvSwitchAgentConfig instead
            neutronConfig:
              DEFAULT:
                debug: true
            neutronOpenvSwitchAgentConfig:
              DEFAULT:
                debug: true
          - nodeSelectors:
              - matchLabels:
                  "network.yaook.cloud/neutron-l3-agent": "true"
            # this key will be removed, use neutronOpenvSwitchAgentConfig instead
            neutronConfig:
              DEFAULT:
                debug: True
            neutronOpenvSwitchAgentConfig:
              ovs:
                bridge_mappings: []
            bridgeConfig: []
      dhcp:
        configTemplates:
          - nodeSelectors:
              - matchLabels: {}
            # this key will be removed, use neutronDHCPAgentConfig instead
            neutronConfig:
              DEFAULT:
                debug: true
            neutronDHCPAgentConfig:
              DEFAULT:
                debug: true
      l3:
        configTemplates:
          - nodeSelectors:
              - matchLabels: {}
            # this key will be removed, use neutronL3AgentConfig instead
            neutronConfig:
              DEFAULT:
                debug: true
            neutronL3AgentConfig:
              DEFAULT:
                debug: true
              agent:
                debug_iptables_rules: true
      bgp:
        bgpdr-agent: # duplicate this section with a different key to have two or more bgp dragents
          # the key needs to be lowercase or else the operator doesn't create the resources
          configTemplates:
            - nodeSelectors:
                - matchLabels: {}
              # this key will be removed, use neutronBGPDRAgentConfig instead
              neutronConfig:
                DEFAULT:
                  debug: True
              neutronBGPDRAgentConfig:
                DEFAULT:
                  debug: True
            - nodeSelectors:
                - matchLabels:
                    "network.yaook.cloud/neutron-l3-agent": "true"
              bgpInterfaceMapping:
                bridgeName: some-bridge-from-ovs-bridge_mappings
  targetRelease: train

Neutron using ovn

# NOTE: This file serves as an example only!
# It demonstrates a subset of the API features which are available and
# is NOT FIT FOR PRODUCTIVE USE. You need to adapt them to your
# specific environment, needs and scale.
# DO NOT DEPLOY THIS FILE WITH THE EXPECTATION THAT YOU WILL GET A
# YAOOK DEPLOYMENT FIT FOR ANY USE EXCEPT LOOKING AT IT.
apiVersion: yaook.cloud/v1
kind: NeutronDeployment
metadata:
  name: neutron-ovn
spec:
  api:
    ingress:
      fqdn: "neutron.yaook.cloud"
      port: 32443
    replicas: 1
  database:
    backup:
      schedule: "0 * * * *"
    proxy: {}
    replicas: 1
    timeoutClient: 300
  issuerRef:
    name: ca-issuer
  keystoneRef:
    name: keystone
  messageQueue:
    replicas: 1
  memcached: {}
  neutronConfig:
    DEFAULT:
      debug: true
    database:
      # (optional) connection_recycle_time hould always be ~10%
      # smaller than the haproxy timeoutClient
      connection_recycle_time: 280
  neutronML2Config:
    ml2_type_flat:
      flat_networks:
      - physnet1
  novaRef:
    name: nova
  policy:
    "context_is_admin": "role:admin"
  region:
    name: MyRegion
  setup:
    ovn:
      northboundOVSDB:
        replicas: 3
        backup:
          schedule: 0 12 * * *
      northd: {}
      southboundOVSDB:
        # recommended to increase inactivityProbe at scale (default 5s)
        inactivityProbeMs: 60000
        ovnRelay:  # add this section to deploy ovn-relays
          replicas: 5
        replicas: 3
        backup:
          schedule: 0 12 * * *
      controller:
        configTemplates:
        - nodeSelectors:
          - matchLabels: {}  # all nodes
        - nodeSelectors:
          - matchLabels:
              "network.yaook.cloud/neutron-ovn-agent": "true"
          bridgeConfig:
            - bridgeName: br-ex
              uplinkDevice: eth1
              openstackPhysicalNetwork: "physnet1"
  targetRelease: yoga

Further parameters

spec:setup:ovs:l2:configTemplates:nodeSelectors[]:overlayNetworkConfig:ovs_local_ip_subnet

The IP address configured via [ovs]/local_ip is used for the local overlay (tunnel) network endpoint by the Neutron Open vSwitch agent. If not specified in the NeutronDeployment resource the Kubernetes node IP address is used. By specifying a subnet via spec:setup:ovs:l2:configTemplates:nodeSelectors[]:overlayNetworkConfig:ovs_local_ip_subnet the IP address of the corresponding interface of the node which has an IP address for that subnet is used for [ovs]/local_ip instead.