Presently the ovn-controller service (puppet/services/neutron-compute-plugin-ovn.yaml)
is started only on compute nodes. But for the cases where the controller nodes
provide the north/south traffic, we need ovn-controller service runninng in controller
nodes as well.
This patch
 - Renames the neutron-compute-plugin-ovn.yaml to ovn-controller.yaml which makes more
   sense and sets the service name as 'ovn-controller'.
 - Adds the service 'ovn-controller' to Controller and Compute roles.
 - Adds the missing 'upgrade_tasks' section in ovn-dbs.yaml and ovn-controller.yaml
Depends-On: Ie3f09dc70a582f3d14de093043e232820f837bc3
Depends-On: Ide11569d81f5f28bafccc168b624be505174fc53
Change-Id: Ib7747406213d18fd65b86820c1f86ee7c39f7cf5
   OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
   OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
   OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginML2OVN
-  OS::TripleO::Services::ComputeNeutronCorePlugin: ../../puppet/services/neutron-compute-plugin-ovn.yaml
+  OS::TripleO::Services::ComputeNeutronCorePlugin: OS::Heat::None
+  OS::TripleO::Services::OVNController: ../../puppet/services/ovn-controller.yaml
   OS::TripleO::Services::OVNDBs: ../../puppet/services/ovn-dbs.yaml
 
 parameter_defaults:
     - OS::TripleO::Services::NeutronServer
     - OS::TripleO::Services::NeutronCorePlugin
     - OS::TripleO::Services::OVNDBs
-    - OS::TripleO::Services::ComputeNeutronCorePlugin
+    - OS::TripleO::Services::OVNController
     - OS::TripleO::Services::RabbitMQ
     - OS::TripleO::Services::HAproxy
     - OS::TripleO::Services::Keepalived
 
     - OS::TripleO::Services::MySQLClient
     - OS::TripleO::Services::Docker
     - OS::TripleO::Services::Iscsid
+    - OS::TripleO::Services::OVNController
 
 # extensions, configured via puppet
 resource_registry:
   OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginML2OVN
-  OS::TripleO::Services::ComputeNeutronCorePlugin: ../puppet/services/neutron-compute-plugin-ovn.yaml
+  OS::TripleO::Services::OVNController: ../puppet/services/ovn-controller.yaml
   OS::TripleO::Services::OVNDBs: ../puppet/services/pacemaker/ovn-dbs.yaml
 # Disabling Neutron services that overlap with OVN
-  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
   OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
   OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
   OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
-  OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronCorePlugin: OS::Heat::None
 
 parameter_defaults:
   NeutronMechanismDrivers: ovn
 
 # A Heat environment file which can be used to enable OVN
 # extensions, configured via puppet
 resource_registry:
-  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
-  OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
-  OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
   OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginML2OVN
-  OS::TripleO::Services::ComputeNeutronCorePlugin: ../puppet/services/neutron-compute-plugin-ovn.yaml
+  OS::TripleO::Services::OVNController: ../puppet/services/ovn-controller.yaml
+  OS::TripleO::Services::OVNDBs: ../puppet/services/ovn-dbs.yaml
 # Disabling Neutron services that overlap with OVN
-  OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
+  OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
   OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
-  OS::TripleO::Services::OVNDBs: ../puppet/services/ovn-dbs.yaml
+  OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
+  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
+  OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronCorePlugin: OS::Heat::None
 
 parameter_defaults:
   NeutronMechanismDrivers: ovn
 
   OS::TripleO::Services::NeutronCorePluginNuage: puppet/services/neutron-plugin-nuage.yaml
   OS::TripleO::Services::NeutronCorePluginNSX: puppet/services/neutron-plugin-nsx.yaml
   OS::TripleO::Services::OVNDBs: OS::Heat::None
+  OS::TripleO::Services::OVNController: OS::Heat::None
 
   OS::TripleO::Services::NeutronCorePluginMidonet: puppet/services/neutron-midonet.yaml
   OS::TripleO::Services::NeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
 
 heat_template_version: pike
 
 description: >
-  OpenStack Neutron Compute OVN agent
+  OpenStack OVN Controller agent
 
 parameters:
   EndpointMap:
 
 outputs:
   role_data:
-    description: Role data for the Neutron Compute OVN agent
+    description: Role data for the OVN Controller agent
     value:
-      service_name: neutron_compute_plugin_ovn
+      service_name: ovn_controller
       config_settings:
         ovn::southbound::port: {get_param: OVNSouthboundServerPort}
         ovn::controller::ovn_encap_type: {get_param: OVNTunnelEncapType}
         ovn::controller::ovn_encap_ip: {get_param: [ServiceNetMap, NeutronApiNetwork]}
         ovn::controller::ovn_bridge_mappings: {get_param: NeutronBridgeMappings}
         nova::compute::force_config_drive: true
-        tripleo.neutron_compute_plugin_ovn.firewall_rules:
+        tripleo.ovn_controller.firewall_rules:
           '118 neutron vxlan networks':
                 proto: 'udp'
                 dport: 4789
             dport: 6081
       step_config: |
         include ::tripleo::profile::base::neutron::agents::ovn
+      upgrade_tasks:
+        - name: Check if ovn_controller is deployed
+          command: systemctl is-enabled ovn-controller
+          tags: common
+          ignore_errors: True
+          register: ovn_controller_enabled
+        - name: "PreUpgrade step0,validation: Check service ovn-controller is running"
+          shell: /usr/bin/systemctl show 'ovn-controller' --property ActiveState | grep '\bactive\b'
+          when: ovn_controller_enabled.rc == 0
+          tags: step0,validation
+        - name: Stop ovn-controller service
+          tags: step1
+          when: ovn_controller_enabled.rc == 0
+          service: name=ovn-controller state=stopped
 
                 - {get_param: OVNSouthboundServerPort}
       step_config: |
         include ::tripleo::profile::base::neutron::ovn_northd
+      upgrade_tasks:
+        - name: Check if ovn_northd is deployed
+          command: systemctl is-enabled ovn-northd
+          tags: common
+          ignore_errors: True
+          register: ovn_northd_enabled
+        - name: "PreUpgrade step0,validation: Check service ovn-northd is running"
+          shell: /usr/bin/systemctl show 'ovn-northd' --property ActiveState | grep '\bactive\b'
+          when: ovn_northd_enabled.rc == 0
+          tags: step0,validation
+        - name: Stop ovn-northd service
+          tags: step1
+          when: ovn_northd_enabled.rc == 0
+          service: name=ovn-northd state=stopped
 
     - OS::TripleO::Services::TripleoPackages
     - OS::TripleO::Services::Tuned
     - OS::TripleO::Services::Vpp
+    - OS::TripleO::Services::OVNController
 
     - OS::TripleO::Services::TripleoPackages
     - OS::TripleO::Services::Tuned
     - OS::TripleO::Services::Vpp
+    - OS::TripleO::Services::OVNController
 
     - OS::TripleO::Services::OpenDaylightApi
     - OS::TripleO::Services::OpenDaylightOvs
     - OS::TripleO::Services::OVNDBs
+    - OS::TripleO::Services::OVNController
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::PankoApi
     - OS::TripleO::Services::RabbitMQ
 
     - OS::TripleO::Services::OpenDaylightApi
     - OS::TripleO::Services::OpenDaylightOvs
     - OS::TripleO::Services::OVNDBs
+    - OS::TripleO::Services::OVNController
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::PankoApi
     - OS::TripleO::Services::Redis
 
     - OS::TripleO::Services::OpenDaylightApi
     - OS::TripleO::Services::OpenDaylightOvs
     - OS::TripleO::Services::OVNDBs
+    - OS::TripleO::Services::OVNController
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::PankoApi
     - OS::TripleO::Services::RabbitMQ
     - OS::TripleO::Services::TripleoPackages
     - OS::TripleO::Services::Tuned
     - OS::TripleO::Services::Vpp
+    - OS::TripleO::Services::OVNController
 ###############################################################################
 # Role: BlockStorage                                                          #
 ###############################################################################