heat_template_version: rocky

description: >
  OpenStack containerized Ovn DBs service

parameters:
  ContainerOvnNbDbImage:
    description: image
    type: string
  ContainerOvnSbDbImage:
    description: image
    type: string
  ContainerOvnNorthdImage:
    description: image
    type: string
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  ServiceData:
    default: {}
    description: Dictionary packing service data
    type: json
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.  This
                 mapping overrides those in ServiceNetMapDefaults.
    type: json
  DefaultPasswords:
    default: {}
    type: json
  RoleName:
    default: ''
    description: Role name on which the service is applied
    type: string
  RoleParameters:
    default: {}
    description: Parameters specific to the role
    type: json
  OVNNorthboundServerPort:
    description: Port of the OVN Northbound DB server
    type: number
    default: 6641
  OVNSouthboundServerPort:
    description: Port of the OVN Southbound DB server
    type: number
    default: 6642

resources:

  ContainersCommon:
    type: ../containers-common.yaml

outputs:
  role_data:
    description: Role data for the OVN Dbs role.
    value:
      service_name: ovn_dbs
      firewall_rules:
        '121 OVN DB server ports':
          proto: 'tcp'
          dport:
            - {get_param: OVNNorthboundServerPort}
            - {get_param: OVNSouthboundServerPort}
      config_settings:
          ovn::northbound::port: {get_param: OVNNorthboundServerPort}
          ovn::southbound::port: {get_param: OVNSouthboundServerPort}
          ovn::northd::dbs_listen_ip:
            str_replace:
               template:
                 "%{hiera('$NETWORK')}"
               params:
                 $NETWORK: {get_param: [ServiceNetMap, OvnDbsNetwork]}
          tripleo::haproxy::ovn_dbs_manage_lb: true
      # BEGIN DOCKER SETTINGS
      # puppet_config is not required for this service since we configure
      # the NB and SB DB servers to listen on the proper IP address/port
      # in the docker_config section.
      # puppet_config is defined to satisfy the pep8 validations.
      puppet_config:
        config_volume: ''
        config_image: ''
        step_config: |
          include ::tripleo::profile::base::neutron::ovn_northd #unused
      kolla_config:
        /var/lib/kolla/config_files/ovn_north_db_server.json:
          command: /usr/local/bin/start-nb-db-server
          permissions:
            - path: /var/log/openvswitch
              owner: root:root
              recurse: true
            - path: /var/log/ovn
              owner: root:root
              recurse: true
        /var/lib/kolla/config_files/ovn_south_db_server.json:
          command: /usr/local/bin/start-sb-db-server
          permissions:
            - path: /var/log/openvswitch
              owner: root:root
              recurse: true
            - path: /var/log/ovn
              owner: root:root
              recurse: true
        /var/lib/kolla/config_files/ovn_northd.json:
          command:
            list_join:
            - ' '
            - - '/usr/bin/ovn-northd -vconsole:emer -vsyslog:err -vfile:info'
              - '--ovnnb-db=unix:/run/openvswitch/ovnnb_db.sock'
              - '--ovnsb-db=unix:/run/openvswitch/ovnsb_db.sock'
              - '--log-file=/var/log/openvswitch/ovn-northd.log'
              - '--pidfile=/run/openvswitch/ovn-northd.pid'
          permissions:
            - path: /var/log/openvswitch
              owner: root:root
              recurse: true
            - path: /var/log/ovn
              owner: root:root
              recurse: true
      docker_config:
        step_4:
          ovn_north_db_server:
            start_order: 0
            image: {get_param: ContainerOvnNbDbImage}
            net: host
            privileged: false
            restart: always
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/kolla/config_files/ovn_north_db_server.json:/var/lib/kolla/config_files/config.json:ro
                  - /lib/modules:/lib/modules:ro
                  - /var/lib/openvswitch/ovn:/var/lib/openvswitch:shared,z
                  - /var/lib/openvswitch/ovn:/run/openvswitch:shared,z
                  - /var/log/containers/openvswitch:/var/log/openvswitch:z
                  - /var/lib/openvswitch/ovn:/var/lib/ovn:shared,z
                  - /var/lib/openvswitch/ovn:/etc/openvswitch:shared,z
                  - /var/lib/openvswitch/ovn:/etc/ovn:shared,z
                  - /var/lib/openvswitch/ovn:/run/ovn:shared,z
                  - /var/log/containers/openvswitch:/var/log/ovn:z
            environment:
              KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
          ovn_south_db_server:
            start_order: 0
            image: {get_param: ContainerOvnSbDbImage}
            net: host
            privileged: false
            restart: always
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/kolla/config_files/ovn_south_db_server.json:/var/lib/kolla/config_files/config.json:ro
                  - /lib/modules:/lib/modules:ro
                  - /var/lib/openvswitch/ovn:/var/lib/openvswitch:shared,z
                  - /var/lib/openvswitch/ovn:/run/openvswitch:shared,z
                  - /var/log/containers/openvswitch:/var/log/openvswitch:z
                  - /var/lib/openvswitch/ovn:/var/lib/ovn:shared,z
                  - /var/lib/openvswitch/ovn:/etc/openvswitch:shared,z
                  - /var/lib/openvswitch/ovn:/etc/ovn:shared,z
                  - /var/lib/openvswitch/ovn:/run/ovn:shared,z
                  - /var/log/containers/openvswitch:/var/log/ovn:z
            environment:
              KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
          configure_ovn_north_db_server:
            start_order: 1
            action: exec
            user: root
            command: ['ovn_north_db_server', '/bin/bash', '-c', 'DBS_LISTEN_IP=`hiera ovn::northd::dbs_listen_ip -c /etc/puppet/hiera.yaml`; NB_DB_PORT=`hiera ovn::northbound::port -c /etc/puppet/hiera.yaml`; /usr/bin/bootstrap_host_exec ovn_dbs ovn-nbctl set-connection ptcp:$NB_DB_PORT:$DBS_LISTEN_IP']
          configure_ovn_south_db_server:
            start_order: 1
            action: exec
            user: root
            command: ['ovn_south_db_server', '/bin/bash', '-c', 'DBS_LISTEN_IP=`hiera ovn::northd::dbs_listen_ip -c /etc/puppet/hiera.yaml`; SB_DB_PORT=`hiera ovn::southbound::port -c /etc/puppet/hiera.yaml`; /usr/bin/bootstrap_host_exec ovn_dbs ovn-sbctl set-connection ptcp:$SB_DB_PORT:$DBS_LISTEN_IP']
          ovn_northd:
            start_order: 2
            image: {get_param: ContainerOvnNorthdImage}
            net: host
            privileged: false
            restart: always
            healthcheck:
              test: /openstack/healthcheck
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/kolla/config_files/ovn_northd.json:/var/lib/kolla/config_files/config.json:ro
                  - /lib/modules:/lib/modules:ro
                  - /var/lib/openvswitch/ovn:/run/openvswitch:shared,z
                  - /var/log/containers/openvswitch:/var/log/openvswitch:z
                  - /var/lib/openvswitch/ovn:/run/ovn:shared,z
                  - /var/log/containers/openvswitch:/var/log/ovn:z
            environment:
              KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
      host_prep_tasks:
        - name: create persistent directories
          file:
            path: "{{ item.path }}"
            state: directory
            setype: "{{ item.setype }}"
          with_items:
            - { 'path': /var/log/containers/openvswitch, 'setype': svirt_sandbox_file_t, 'mode': '0750' }
            - { 'path': /var/lib/openvswitch/ovn, 'setype': svirt_sandbox_file_t }
      upgrade_tasks: []
