diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 69c9429ba8df415e3e05acf96dda020deb21a282..3df13d6b67ebee0f527247c7733afaf5fde63103 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -212,7 +212,7 @@ migration_interface_address: "{{ 'migration' | kolla_address }}"
 tunnel_interface_address: "{{ 'tunnel' | kolla_address }}"
 octavia_network_interface_address: "{{ 'octavia_network' | kolla_address }}"
 
-# Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs, opendaylight ]
+# Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs ]
 neutron_plugin_agent: "openvswitch"
 
 # Valid options are [ internal, infoblox ]
@@ -470,20 +470,6 @@ zookeeper_quorum_port: "3888"
 zun_api_port: "9517"
 zun_wsproxy_port: "6784"
 
-opendaylight_clustering_port: "2550"
-opendaylight_restconf_port: "8087"
-opendaylight_restconf_port_backup: "8182"
-opendaylight_haproxy_restconf_port: "8088"
-opendaylight_haproxy_restconf_port_backup: "8183"
-opendaylight_jetty_conf_port: "8543"
-opendaylight_jetty_conf2_port: "8443"
-opendaylight_tomcat_port: "8282"
-opendaylight_tomcat_redirect_port: "8663"
-opendaylight_karaf_ssh_port: "8101"
-opendaylight_openflow_port: "6653"
-opendaylight_ovsdb_port: "6641"
-opendaylight_websocket_port: "8185"
-
 vitrage_api_port: "8999"
 
 public_protocol: "{{ 'https' if kolla_enable_tls_external | bool else 'http' }}"
@@ -649,7 +635,6 @@ enable_nova_serialconsole_proxy: "no"
 enable_nova_ssh: "yes"
 enable_octavia: "no"
 enable_onos: "no"
-enable_opendaylight: "no"
 enable_openvswitch: "{{ enable_neutron | bool and neutron_plugin_agent != 'linuxbridge' }}"
 enable_ovs_dpdk: "no"
 enable_osprofiler: "no"
@@ -906,7 +891,7 @@ neutron_tenant_network_types: "vxlan"
 
 # valid values: ["dvr", "dvr_no_external"]
 neutron_compute_dvr_mode: "dvr"
-computes_need_external_bridge: "{{ enable_neutron_dvr | bool and neutron_compute_dvr_mode == 'dvr' or enable_neutron_provider_networks | bool or enable_opendaylight | bool and neutron_plugin_agent != 'vmware_dvs' and not enable_onos | bool }}"
+computes_need_external_bridge: "{{ (enable_neutron_dvr | bool and neutron_compute_dvr_mode == 'dvr') or enable_neutron_provider_networks | bool }}"
 
 # Default DNS resolvers for virtual networks
 neutron_dnsmasq_dns_servers: "1.1.1.1,8.8.8.8,8.8.4.4"
@@ -1044,19 +1029,6 @@ vmware_vcenter_host_username: "username"
 vmware_vcenter_cluster_name: "cluster-1"
 vmware_vcenter_insecure: "True"
 
-######################
-# OpenDaylight
-######################
-opendaylight_mechanism_driver: "opendaylight_v2"
-opendaylight_l3_service_plugin: "odl-router_v2"
-opendaylight_acl_impl: "learn"
-enable_opendaylight_qos: "no"
-enable_opendaylight_l3: "{{ enable_opendaylight }}"
-enable_opendaylight_legacy_netvirt_conntrack: "no"
-opendaylight_port_binding_type: "pseudo-agentdb-binding"
-opendaylight_features: "odl-mdsal-apidocs,odl-netvirt-openstack"
-opendaylight_allowed_network_types: '"flat", "vlan", "vxlan"'
-
 #######################################
 # XenAPI - Support XenAPI for XenServer
 #######################################
diff --git a/ansible/inventory/all-in-one b/ansible/inventory/all-in-one
index 50ffb89d9e985abe6ca758c2c2e51bde7514ef36..2445019e925f715c9b6df0aa0823bf2ab95b9382 100644
--- a/ansible/inventory/all-in-one
+++ b/ansible/inventory/all-in-one
@@ -118,9 +118,6 @@ network
 compute
 manila-share
 
-[opendaylight:children]
-network
-
 [cinder:children]
 control
 
diff --git a/ansible/inventory/multinode b/ansible/inventory/multinode
index 94f3af02fbcc9013fb0ccd3ac1290c4b0b55deb7..a3bf77aec7d9929bc09a24748275267f8d7b76ee 100644
--- a/ansible/inventory/multinode
+++ b/ansible/inventory/multinode
@@ -143,9 +143,6 @@ network
 compute
 manila-share
 
-[opendaylight:children]
-network
-
 [cinder:children]
 control
 
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 2da793ba3396c2b010cbb2a8ea59b49c03e6ed84..12e9115576faf8db5aafe9f9e4c14a3797894b71 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -93,7 +93,6 @@
     - "05-libvirt"
     - "06-zookeeper"
     - "07-kafka"
-    - "08-opendaylight"
     - "09-monasca"
   notify:
     - Restart fluentd container
@@ -317,7 +316,6 @@
     - { name: "neutron", enabled: "{{ enable_neutron }}" }
     - { name: "nova", enabled: "{{ enable_nova }}" }
     - { name: "octavia", enabled: "{{ enable_octavia }}" }
-    - { name: "opendaylight", enabled: "{{ enable_opendaylight }}" }
     - { name: "outward-rabbitmq", enabled: "{{ enable_outward_rabbitmq }}" }
     - { name: "panko", enabled: "{{ enable_panko }}" }
     - { name: "qinling", enabled: "{{ enable_qinling }}" }
diff --git a/ansible/roles/common/templates/conf/input/08-opendaylight.conf.j2 b/ansible/roles/common/templates/conf/input/08-opendaylight.conf.j2
deleted file mode 100644
index 43879c918fd646218b5c8eec2e80c8cd64ac4cfc..0000000000000000000000000000000000000000
--- a/ansible/roles/common/templates/conf/input/08-opendaylight.conf.j2
+++ /dev/null
@@ -1,10 +0,0 @@
-<source>
-  @type tail
-  path /var/log/kolla/opendaylight/karaf.log
-  pos_file /var/run/{{ fluentd_binary }}/opendaylight.pos
-  tag infra.opendaylight
-  format multiline
-  format_firstline /\d{4}-\d{2}-\d{2}/
-  format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\,\d{3})\s+\|\s+(?<level>[^|\s]+)\s+\|\s+(?<thread>[^|]+)\s+\|\s+(?<class>[\d -}]+)\s+\|\s+(?<bundle>[^|]+)\s+\|\s+(?<msg>.*)/
-  time_format %Y-%m-%d %H:%M:%S,%L
-</source>
diff --git a/ansible/roles/common/templates/cron-logrotate-opendaylight.conf.j2 b/ansible/roles/common/templates/cron-logrotate-opendaylight.conf.j2
deleted file mode 100644
index acee13bd3b37f38f4f7ea1345c309abeb23c6983..0000000000000000000000000000000000000000
--- a/ansible/roles/common/templates/cron-logrotate-opendaylight.conf.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-"/var/log/kolla/opendaylight/*.log"
-{
-}
diff --git a/ansible/roles/common/templates/cron.json.j2 b/ansible/roles/common/templates/cron.json.j2
index 69260144bed5f79fb9aef5c963849d9206baa853..63a29c812467b8fe921c3fb12d98a052be14ab0d 100644
--- a/ansible/roles/common/templates/cron.json.j2
+++ b/ansible/roles/common/templates/cron.json.j2
@@ -43,7 +43,6 @@
     ( 'neutron', enable_neutron ),
     ( 'nova', enable_nova ),
     ( 'octavia', enable_octavia ),
-    ( 'opendaylight', enable_opendaylight ),
     ( 'outward-rabbitmq', enable_outward_rabbitmq ),
     ( 'panko', enable_panko ),
     ( 'qinling', enable_qinling ),
diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml
index 3f5833b40984e1512a174ac5b39fa8b7857f0463..4edbb5a98b2f9a7f87b30e9a0139e938eac1749e 100644
--- a/ansible/roles/neutron/defaults/main.yml
+++ b/ansible/roles/neutron/defaults/main.yml
@@ -93,7 +93,7 @@ neutron_services:
     container_name: "neutron_l3_agent"
     image: "{{ neutron_l3_agent_image_full }}"
     privileged: True
-    enabled: "{{ neutron_plugin_agent not in ['vmware_nsxv', 'vmware_nsxv3', 'vmware_dvs'] and not enable_opendaylight_l3 | bool and not enable_onos | bool }}"
+    enabled: "{{ neutron_plugin_agent not in ['vmware_nsxv', 'vmware_nsxv3', 'vmware_dvs'] and not enable_onos | bool }}"
     environment:
       KOLLA_LEGACY_IPTABLES: "{{ neutron_legacy_iptables | bool | lower }}"
     host_in_groups: >-
@@ -198,7 +198,7 @@ neutron_openvswitch_agent_image: "{{ docker_registry ~ '/' if docker_registry el
 neutron_openvswitch_agent_tag: "{{ neutron_tag }}"
 neutron_openvswitch_agent_image_full: "{{ neutron_openvswitch_agent_image }}:{{ neutron_openvswitch_agent_tag }}"
 
-neutron_server_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ neutron_install_type }}-neutron-server{{ '-opendaylight' if enable_opendaylight | bool else '' }}"
+neutron_server_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ neutron_install_type }}-neutron-server"
 neutron_server_tag: "{{ neutron_tag }}"
 neutron_server_image_full: "{{ neutron_server_image }}:{{ neutron_server_tag }}"
 
@@ -354,7 +354,7 @@ neutron_l3_agent_host_rp_filter_mode: 0
 ####################
 extension_drivers:
   - name: "qos"
-    enabled: "{{ enable_neutron_qos | bool or enable_opendaylight_qos | bool }}"
+    enabled: "{{ enable_neutron_qos | bool }}"
   - name: "port_security"
     enabled: true
   - name: "dns"
@@ -383,17 +383,15 @@ service_plugins:
   - name: "neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin"
     enabled: "{{ enable_neutron_bgp_dragent | bool }}"
   - name: "qos"
-    enabled: "{{ enable_neutron_qos | bool or enable_opendaylight_qos | bool}}"
+    enabled: "{{ enable_neutron_qos | bool }}"
   - name: "router"
-    enabled: "{{ not enable_opendaylight_l3 | bool }}"
+    enabled: true
   - name: "segments"
     enabled: "{{ enable_neutron_segments | bool }}"
   - name: "sfc"
     enabled: "{{ enable_neutron_sfc | bool }}"
   - name: "vpnaas"
     enabled: "{{ enable_neutron_vpnaas | bool }}"
-  - name: "{{ opendaylight_l3_service_plugin }}"
-    enabled: "{{ enable_opendaylight_l3 | bool and enable_opendaylight | bool }}"
   - name: "port_forwarding"
     enabled: "{{ enable_neutron_port_forwarding | bool }}"
 
@@ -486,9 +484,7 @@ infoblox_wapi_max_results: "-50000"
 ######################
 # Notification Drivers
 ######################
-notification_drivers:
-  - name: "odl-qos-v2"
-    enabled: "{{ enable_opendaylight_qos | bool }}"
+notification_drivers: []
 
 neutron_notification_drivers: "{{ notification_drivers|selectattr('enabled', 'equalto', true)|list }}"
 
diff --git a/ansible/roles/neutron/templates/dhcp_agent.ini.j2 b/ansible/roles/neutron/templates/dhcp_agent.ini.j2
index ef4dcca6c52bad305767e4f6ed1bf3b518b1cc1e..7d470ac791028d71fea3086da30573f661c2b285 100644
--- a/ansible/roles/neutron/templates/dhcp_agent.ini.j2
+++ b/ansible/roles/neutron/templates/dhcp_agent.ini.j2
@@ -17,9 +17,5 @@ dhcp_override_mac = {{ vmware_dvs_dhcp_override_mac }}
 {% endif %}
 {% endif %}
 
-{% if enable_opendaylight | bool %}
-interface_driver = openvswitch
-{% endif %}
-
 [ovs]
 ovsdb_connection = tcp:127.0.0.1:{{ ovsdb_port }}
diff --git a/ansible/roles/neutron/templates/ml2_conf.ini.j2 b/ansible/roles/neutron/templates/ml2_conf.ini.j2
index d9a3436ef5ff16b89a2c1e89c58aba70c007825e..fac4b253ddc3a05a14dff1eab7644d7ab8d33346 100644
--- a/ansible/roles/neutron/templates/ml2_conf.ini.j2
+++ b/ansible/roles/neutron/templates/ml2_conf.ini.j2
@@ -18,8 +18,6 @@ mechanism_drivers = openvswitch,{% if enable_ironic_neutron_agent | bool %}barem
 {% endif %}
 {% elif neutron_plugin_agent == "linuxbridge" %}
 mechanism_drivers = linuxbridge,l2population
-{% elif neutron_plugin_agent == "opendaylight" %}
-mechanism_drivers = {{ opendaylight_mechanism_driver }}
 {% endif %}
 
 {% if neutron_extension_drivers %}
@@ -28,18 +26,6 @@ extension_drivers = {{ neutron_extension_drivers|map(attribute='name')|join(',')
 extension_drivers = port_security
 {% endif %}
 
-{% if enable_opendaylight | bool %}
-[ml2_odl]
-{% if enable_haproxy | bool %}
-url = {{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ opendaylight_haproxy_restconf_port }}/controller/nb/v2/neutron
-{% else %}
-url = {{ internal_protocol }}://{{ kolla_internal_vip_address | put_address_in_context('url') }}:{{ opendaylight_restconf_port }}/controller/nb/v2/neutron
-{% endif %}
-username = admin
-password = {{ opendaylight_password }}
-port_binding_controller = {{ opendaylight_port_binding_type }}
-{% endif %}
-
 {% if enable_onos | bool %}
 [onos]
 url_path = {{ onos_url }}
@@ -65,13 +51,13 @@ flat_networks = {% for bridge in neutron_bridge_name.split(',') %}physnet{{ loop
 vni_ranges = 1:1000
 
 [securitygroup]
-{% if neutron_plugin_agent == "openvswitch" or neutron_plugin_agent == "opendaylight" %}
+{% if neutron_plugin_agent == "openvswitch" %}
 firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
 {% elif neutron_plugin_agent == "linuxbridge" %}
 firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
 {% endif %}
 
-{% if neutron_plugin_agent == "openvswitch" or neutron_plugin_agent == "opendaylight" %}
+{% if neutron_plugin_agent == "openvswitch" %}
 [agent]
 tunnel_types = vxlan
 {% if nova_compute_virt_type != 'xenapi' %}
diff --git a/ansible/roles/neutron/templates/neutron-server.json.j2 b/ansible/roles/neutron/templates/neutron-server.json.j2
index f4c2bfef90ae39d11dd4d231d86a4fb64b1e4ac1..77ea2f2ddaab0b9b28b5b974e66174e41d11cae2 100644
--- a/ansible/roles/neutron/templates/neutron-server.json.j2
+++ b/ansible/roles/neutron/templates/neutron-server.json.j2
@@ -1,5 +1,5 @@
 {
-    "command": "neutron-server --config-file /etc/neutron/neutron.conf {% if neutron_plugin_agent in ['openvswitch', 'linuxbridge', 'opendaylight'] %} --config-file /etc/neutron/plugins/ml2/ml2_conf.ini --config-file /etc/neutron/neutron_vpnaas.conf {% elif neutron_plugin_agent in ['vmware_nsxv', 'vmware_nsxv3', 'vmware_dvs'] %} --config-file /etc/neutron/plugins/vmware/nsx.ini {% endif %} --config-file /etc/neutron/fwaas_driver.ini",
+    "command": "neutron-server --config-file /etc/neutron/neutron.conf {% if neutron_plugin_agent in ['openvswitch', 'linuxbridge'] %} --config-file /etc/neutron/plugins/ml2/ml2_conf.ini --config-file /etc/neutron/neutron_vpnaas.conf {% elif neutron_plugin_agent in ['vmware_nsxv', 'vmware_nsxv3', 'vmware_dvs'] %} --config-file /etc/neutron/plugins/vmware/nsx.ini {% endif %} --config-file /etc/neutron/fwaas_driver.ini",
     "config_files": [
         {
             "source": "{{ container_config_directory }}/neutron.conf",
diff --git a/ansible/roles/neutron/templates/neutron.conf.j2 b/ansible/roles/neutron/templates/neutron.conf.j2
index c13054c2176e03cc37033339f21f24faf5e274bb..69c36d38828675a6e92fdaa2ad774f83aec7a035 100644
--- a/ansible/roles/neutron/templates/neutron.conf.j2
+++ b/ansible/roles/neutron/templates/neutron.conf.j2
@@ -24,7 +24,7 @@ rpc_state_report_workers = {{ openstack_service_rpc_workers }}
 # in it is because we are sharing this socket in a volume which is it's own dir
 metadata_proxy_socket = /var/lib/neutron/kolla/metadata_proxy
 
-{% if neutron_plugin_agent == "openvswitch" or neutron_plugin_agent == "opendaylight" %}
+{% if neutron_plugin_agent == "openvswitch" %}
 interface_driver = openvswitch
 {% elif neutron_plugin_agent == "linuxbridge" %}
 interface_driver = linuxbridge
@@ -160,11 +160,6 @@ hmac_keys = {{ osprofiler_secret }}
 connection_string = {{ osprofiler_backend_connection_string }}
 {% endif %}
 
-{% if enable_opendaylight_qos | bool %}
-[qos]
-notification_drivers = {{ neutron_notification_drivers|map(attribute='name')|join(',') }}
-{% endif %}
-
 [placement]
 auth_type = password
 auth_url = {{ keystone_admin_url }}
diff --git a/ansible/roles/opendaylight/defaults/main.yml b/ansible/roles/opendaylight/defaults/main.yml
deleted file mode 100644
index 4e9f0dab8a5b4055392a046f1b098ddc7cff9c01..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/defaults/main.yml
+++ /dev/null
@@ -1,68 +0,0 @@
----
-project_name: "opendaylight"
-
-opendaylight_services:
-  opendaylight:
-    container_name: "opendaylight"
-    image: "{{ opendaylight_image_full }}"
-    enabled: True
-    privileged: True
-    group: "opendaylight"
-    host_in_groups: "{{ inventory_hostname in groups['opendaylight'] }}"
-    volumes: "{{ opendaylight_default_volumes + opendaylight_extra_volumes }}"
-    dimensions: "{{ opendaylight_dimensions }}"
-    tty: True
-    haproxy:
-      opendaylight_api:
-        enabled: "{{ enable_opendaylight }}"
-        mode: "http"
-        port: "{{ opendaylight_haproxy_restconf_port }}"
-        backend_http_extra:
-          - "balance source"
-        custom_member_list: "{{ api_haproxy_members.split(';') }}"
-      opendaylight_api_backup:
-        enabled: "{{ enable_opendaylight }}"
-        mode: "http"
-        port: "{{ opendaylight_haproxy_restconf_port_backup }}"
-        backend_http_extra:
-          - "balance source"
-        custom_member_list: "{{ backup_api_haproxy_members.split(';') }}"
-      opendaylight_websocket:
-        enabled: "{{ enable_opendaylight }}"
-        mode: "http"
-        port: "{{ opendaylight_websocket_port }}"
-        backend_http_extra:
-          - "balance source"
-
-####################
-# HAProxy
-####################
-api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ opendaylight_restconf_port }} check inter 2000 rise 2 fall 5;{% endfor %}"
-backup_api_haproxy_members: "{% for host in groups['opendaylight'] %}server {{ hostvars[host]['ansible_hostname'] }} {{ 'api' | kolla_address(host) }}:{{ opendaylight_restconf_port_backup }} check inter 2000 rise 2 fall 5;{% endfor %}"
-
-####################
-# Docker
-####################
-
-opendaylight_install_type: "{{ kolla_install_type }}"
-opendaylight_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ opendaylight_install_type }}-opendaylight"
-opendaylight_tag: "{{ openstack_release }}"
-opendaylight_image_full: "{{ opendaylight_image }}:{{ opendaylight_tag }}"
-opendaylight_dimensions: "{{ default_container_dimensions }}"
-
-opendaylight_default_volumes:
-  - "{{ node_config_directory }}/opendaylight/:{{ container_config_directory }}/:ro"
-  - "/etc/localtime:/etc/localtime:ro"
-  - "kolla_logs:/var/log/kolla/"
-
-opendaylight_extra_volumes: "{{ default_extra_volumes }}"
-
-
-###################
-# Java Opts
-###################
-
-# JAVA_MAX_MEM param
-opendaylight_java_max_mem: "8g"
-# JAVA_MAX_PERM_MEM param
-opendaylight_java_max_perm_mem: "512m"
diff --git a/ansible/roles/opendaylight/handlers/main.yml b/ansible/roles/opendaylight/handlers/main.yml
deleted file mode 100644
index 0f3afd253c3b0777f453245dbb42017ccc605ee6..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/handlers/main.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- name: Restart opendaylight container
-  vars:
-    service_name: "opendaylight"
-    service: "{{ opendaylight_services[service_name] }}"
-  become: true
-  kolla_docker:
-    action: "recreate_or_restart_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ service.container_name }}"
-    image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
-    privileged: "{{ service.privileged | default(False) }}"
-    dimensions: "{{ service.dimensions }}"
-    tty: "{{ service.tty }}"
-  when:
-    - kolla_action != "config"
diff --git a/ansible/roles/opendaylight/meta/main.yml b/ansible/roles/opendaylight/meta/main.yml
deleted file mode 100644
index 6b4fff8fef6f81d35b73a30c90de45639db41cc9..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/meta/main.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-dependencies:
-  - { role: common }
diff --git a/ansible/roles/opendaylight/tasks/check-containers.yml b/ansible/roles/opendaylight/tasks/check-containers.yml
deleted file mode 100644
index 8e264b3aad10cee9b9f35b4033d4c1abb08ca557..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/check-containers.yml
+++ /dev/null
@@ -1,18 +0,0 @@
----
-- name: Check opendaylight containers
-  become: true
-  kolla_docker:
-    action: "compare_container"
-    common_options: "{{ docker_common_options }}"
-    name: "{{ item.value.container_name }}"
-    image: "{{ item.value.image }}"
-    privileged: "{{ item.value.privileged | default(False) }}"
-    volumes: "{{ item.value.volumes }}"
-    dimensions: "{{ item.value.dimensions }}"
-    tty: "{{ item.value.tty }}"
-  when:
-    - item.value.enabled | bool
-    - item.value.host_in_groups | bool
-  with_dict: "{{ opendaylight_services }}"
-  notify:
-    - "Restart {{ item.key }} container"
diff --git a/ansible/roles/opendaylight/tasks/check.yml b/ansible/roles/opendaylight/tasks/check.yml
deleted file mode 100644
index ed97d539c095cf1413af30cc23dea272095b97dd..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/check.yml
+++ /dev/null
@@ -1 +0,0 @@
----
diff --git a/ansible/roles/opendaylight/tasks/config.yml b/ansible/roles/opendaylight/tasks/config.yml
deleted file mode 100644
index d7258a58f3db3478a540ebbbbb134edc00c526cc..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/config.yml
+++ /dev/null
@@ -1,197 +0,0 @@
----
-- name: Setting sysctl values
-  become: true
-  sysctl: name={{ item.name }} value={{ item.value }} sysctl_set=yes
-  with_items:
-    - { name: "net.bridge.bridge-nf-call-iptables", value: 1}
-    - { name: "net.bridge.bridge-nf-call-ip6tables", value: 1}
-    - { name: "net.ipv4.conf.all.rp_filter", value: 0}
-    - { name: "net.ipv4.conf.default.rp_filter", value: 0}
-  when:
-    - set_sysctl | bool
-    - inventory_hostname in groups['opendaylight']
-
-- name: Ensuring config directories exist
-  file:
-    path: "{{ node_config_directory }}/{{ item }}"
-    state: "directory"
-    owner: "{{ config_owner_user }}"
-    group: "{{ config_owner_group }}"
-    mode: "0770"
-  become: true
-  with_items:
-    - "opendaylight"
-
-- name: Copying over config.json files for services
-  template:
-    src: "{{ item }}.json.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/config.json"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over custom.properties
-  template:
-    src: "{{ role_path }}/templates/custom.properties.j2"
-    dest: "{{ node_config_directory }}/opendaylight/custom.properties"
-    mode: "0660"
-  become: true
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over start-odl
-  template:
-    src: "{{ role_path }}/templates/start-odl.j2"
-    dest: "{{ node_config_directory }}/opendaylight/start-odl"
-    mode: "0660"
-  become: true
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over jetty.xml
-  template:
-    src: "{{ role_path }}/templates/jetty.xml.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/jetty.xml"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over org.apache.karaf.features.cfg
-  template:
-    src: "{{ role_path }}/templates/org.apache.karaf.features.cfg.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/org.apache.karaf.features.cfg"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over org.opendaylight.ovsdb.library.cfg
-  template:
-    src: "{{ role_path }}/templates/org.opendaylight.ovsdb.library.cfg.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/org.opendaylight.ovsdb.library.cfg"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over tomcat-server.xml
-  template:
-    src: "{{ role_path }}/templates/tomcat-server.xml.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/tomcat-server.xml"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over org.ops4j.pax.logging.cfg.j2
-  template:
-    src: "{{ role_path }}/templates/org.ops4j.pax.logging.cfg.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/org.ops4j.pax.logging.cfg"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over netvirt-impl-config_netvirt-impl-config.xml
-  template:
-    src: "{{ role_path }}/templates/netvirt-impl-config_netvirt-impl-config.xml.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/netvirt-impl-config_netvirt-impl-config.xml"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over netvirt-aclservice-config.xml
-  template:
-    src: "{{ role_path }}/templates/netvirt-aclservice-config.xml.j2"
-    dest: "{{ node_config_directory }}/{{ item }}/netvirt-aclservice-config.xml"
-    mode: "0660"
-  become: true
-  with_items:
-    - "opendaylight"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over setenv
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/opendaylight/setenv"
-    mode: "0660"
-  become: true
-  with_first_found:
-    - "{{ node_custom_config }}/opendaylight/{{ inventory_hostname }}/setenv"
-    - "{{ node_custom_config }}/opendaylight/setenv"
-    - "{{ role_path }}/templates/setenv.j2"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over akka.conf
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/opendaylight/akka.conf"
-    mode: "0660"
-  become: true
-  with_first_found:
-    - "{{ node_custom_config }}/opendaylight/{{ inventory_hostname }}/akka.conf"
-    - "{{ node_custom_config }}/opendaylight/akka.conf"
-    - "akka.conf.j2"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over modules.conf
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/opendaylight/modules.conf"
-    mode: "0660"
-  become: true
-  with_first_found:
-    - "{{ node_custom_config }}/opendaylight/{{ inventory_hostname }}/modules.conf"
-    - "{{ node_custom_config }}/opendaylight/modules.conf"
-    - "modules.conf.j2"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over module-shards.conf
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/opendaylight/module-shards.conf"
-    mode: "0660"
-  become: true
-  with_first_found:
-    - "{{ node_custom_config }}/opendaylight/{{ inventory_hostname }}/module-shards.conf"
-    - "{{ node_custom_config }}/opendaylight/module-shards.conf"
-    - "module-shards.conf.j2"
-  notify:
-    - Restart opendaylight container
-
-- name: Copying over 10-rest-connector.xml
-  template:
-    src: "{{ item }}"
-    dest: "{{ node_config_directory }}/opendaylight/10-rest-connector.xml"
-    mode: "0660"
-  become: true
-  with_first_found:
-    - "{{ node_custom_config }}/opendaylight/{{ inventory_hostname }}/10-rest-connector.xml"
-    - "{{ node_custom_config }}/opendaylight/10-rest-connector.xml"
-    - "10-rest-connector.xml.j2"
-  notify:
-    - Restart opendaylight container
-
-- include_tasks: check-containers.yml
-  when: kolla_action != "config"
diff --git a/ansible/roles/opendaylight/tasks/deploy-containers.yml b/ansible/roles/opendaylight/tasks/deploy-containers.yml
deleted file mode 100644
index eb24ab5c7a7bfaf98f711ffe96f0b76120874b14..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/deploy-containers.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- import_tasks: check-containers.yml
diff --git a/ansible/roles/opendaylight/tasks/deploy.yml b/ansible/roles/opendaylight/tasks/deploy.yml
deleted file mode 100644
index ad915af159d25ab01664a5819dedd863c7b9fc12..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/deploy.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- include_tasks: config.yml
-
-- name: Flush Handlers
-  meta: flush_handlers
diff --git a/ansible/roles/opendaylight/tasks/loadbalancer.yml b/ansible/roles/opendaylight/tasks/loadbalancer.yml
deleted file mode 100644
index db3edf1b81229660dc1978be88cdf6fb691e6940..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/loadbalancer.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: "Configure haproxy for {{ project_name }}"
-  import_role:
-    role: haproxy-config
-  vars:
-    project_services: "{{ opendaylight_services }}"
-  tags: always
diff --git a/ansible/roles/opendaylight/tasks/main.yml b/ansible/roles/opendaylight/tasks/main.yml
deleted file mode 100644
index bc5d1e62576375cb42a2a0d62540aa54d212db7c..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/main.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- include_tasks: "{{ kolla_action }}.yml"
diff --git a/ansible/roles/opendaylight/tasks/precheck.yml b/ansible/roles/opendaylight/tasks/precheck.yml
deleted file mode 100644
index ed1e3863ed341ce3d5d6755684d5d80b8bb99f6f..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/precheck.yml
+++ /dev/null
@@ -1,112 +0,0 @@
----
-- name: Get container facts
-  become: true
-  kolla_container_facts:
-    name:
-      - opendaylight
-  register: container_facts
-
-- name: Checking free port for opendaylight_clustering
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_clustering_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_restconf
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_restconf_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_restconf_backup
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_restconf_port_backup }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_karaf_ssh
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_karaf_ssh_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_openflow
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_openflow_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_ovsdb
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_ovsdb_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_jetty_conf_port
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_jetty_conf_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_jetty_conf2_port
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_jetty_conf2_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_tomcat_port
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_tomcat_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking free port for opendaylight_tomcat_redirect_port
-  wait_for:
-    host: "{{ 'api' | kolla_address }}"
-    port: "{{ opendaylight_tomcat_redirect_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - inventory_hostname in groups['opendaylight']
-    - container_facts['opendaylight'] is not defined
-
-- name: Checking available opendaylight nodes in inventory
-  fail:
-    msg: "Either 1 or 3 nodes required in inventory for OpenDaylight clustering"
-  when: groups['opendaylight'] | length == 2
diff --git a/ansible/roles/opendaylight/tasks/pull.yml b/ansible/roles/opendaylight/tasks/pull.yml
deleted file mode 100644
index 7ed2139da78034cb19b8c6d59b3a8ae2881fb5bf..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/pull.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Pulling opendaylight image
-  become: true
-  kolla_docker:
-    action: "pull_image"
-    common_options: "{{ docker_common_options }}"
-    image: "{{ item.value.image }}"
-  when:
-    - item.value.enabled | bool
-    - item.value.host_in_groups | bool
-  with_dict: "{{ opendaylight_services }}"
diff --git a/ansible/roles/opendaylight/tasks/reconfigure.yml b/ansible/roles/opendaylight/tasks/reconfigure.yml
deleted file mode 100644
index f670a5b78d24e3691d0e8b69900209a85cdce06b..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/reconfigure.yml
+++ /dev/null
@@ -1,2 +0,0 @@
----
-- include_tasks: deploy.yml
diff --git a/ansible/roles/opendaylight/tasks/stop.yml b/ansible/roles/opendaylight/tasks/stop.yml
deleted file mode 100644
index 7cfd5b44adb882420fbaf2fb6b419d478c7a0a1a..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/stop.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- import_role:
-    role: service-stop
-  vars:
-    project_services: "{{ opendaylight_services }}"
-    service_name: "{{ project_name }}"
diff --git a/ansible/roles/opendaylight/tasks/upgrade.yml b/ansible/roles/opendaylight/tasks/upgrade.yml
deleted file mode 100644
index ad915af159d25ab01664a5819dedd863c7b9fc12..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/tasks/upgrade.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- include_tasks: config.yml
-
-- name: Flush Handlers
-  meta: flush_handlers
diff --git a/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2 b/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2
deleted file mode 100644
index 51cf7bb0c4fcc99f913e42ee6c497eda01bb695f..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/10-rest-connector.xml.j2
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html
--->
-<snapshot>
-  <configuration>
-    <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-      <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-        <!-- default OF-switch-connection-provider (port 6633) -->
-        <module>
-          <type xmlns:rest="urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector">rest:rest-connector-impl</type>
-          <name>rest-connector-default-impl</name>
-          <websocket-address>{{ 'api' | kolla_address }}</websocket-address>
-          <websocket-port>{{ opendaylight_websocket_port }}</websocket-port>
-          <dom-broker>
-            <type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">dom:dom-broker-osgi-registry</type>
-            <name>dom-broker</name>
-          </dom-broker>
-        </module>
-      </modules>
-
-      <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
-        <service>
-          <type xmlns:rest="urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector">rest:rest-connector</type>
-          <instance>
-            <name>rest-connector-default</name>
-            <provider>
-              /modules/module[type='rest-connector-impl'][name='rest-connector-default-impl']
-            </provider>
-          </instance>
-        </service>
-      </services>
-    </data>
-  </configuration>
-  <required-capabilities>
-      <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:rest:connector?module=opendaylight-rest-connector&amp;revision=2014-07-24</capability>
-  </required-capabilities>
-</snapshot>
diff --git a/ansible/roles/opendaylight/templates/akka.conf.j2 b/ansible/roles/opendaylight/templates/akka.conf.j2
deleted file mode 100644
index 61e19533689b577d2a3d96fef4c5d50708ed4e14..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/akka.conf.j2
+++ /dev/null
@@ -1,33 +0,0 @@
-
-odl-cluster-data {
-  akka {
-    remote {
-      artery {
-          enabled = off
-          canonical.hostname = "{{ 'api' | kolla_address }}"
-          canonical.port = {{ opendaylight_clustering_port }}
-        }
-      netty.tcp {
-        hostname = "{{ 'api' | kolla_address }}"
-        port = {{ opendaylight_clustering_port }}
-      }
-    }
-
-    cluster {
-      seed-nodes = [{% for host in groups['opendaylight'] %}"akka.tcp://opendaylight-cluster-data@{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ opendaylight_clustering_port }}"{% if not loop.last %},{% endif %}{% endfor %}]
-
-      roles = [
-        "{{ hostvars[inventory_hostname]['ansible_hostname'] }}"
-      ]
-
-    }
-
-    persistence {
-
-      journal {
-        leveldb {
-        }
-      }
-    }
-  }
-}
diff --git a/ansible/roles/opendaylight/templates/custom.properties.j2 b/ansible/roles/opendaylight/templates/custom.properties.j2
deleted file mode 100644
index 5f8c90cfeaff619c128559f5d0f40f0e1339cdee..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/custom.properties.j2
+++ /dev/null
@@ -1,47 +0,0 @@
-org.osgi.framework.system.packages.extra=org.apache.karaf.branding,sun.reflect,sun.reflect.misc,sun.misc,sun.nio.ch,com.sun.media.sound
-
-osgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator
-
-
-org.eclipse.gemini.web.tomcat.config.path=configuration/tomcat-server.xml
-org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-
-karaf.framework=equinox
-
-karaf.delay.console=true
-
-org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
-
-org.apache.aries.blueprint.preemptiveShutdown=false
-
-netconf.config.persister.active=1
-
-netconf.config.persister.1.storageAdapterClass=org.opendaylight.controller.config.persist.storage.file.xml.XmlFileStorageAdapter
-netconf.config.persister.1.properties.fileStorage=etc/opendaylight/current/controller.currentconfig.xml
-netconf.config.persister.1.properties.numberOfBackups=1
-
-logback.configurationFile=configuration/logback.xml
-
-container.profile = Container
-
-connection.scheme = ANY_CONTROLLER_ONE_MASTER
-
-ovsdb.l3.arp.responder.disabled=no
-
-secureChannelEnabled=false
-controllerKeyStore=
-controllerKeyStorePassword=
-controllerTrustStore=
-controllerTrustStorePassword=
-
-enableStrongPasswordCheck = false
-
-java.util.logging.config.file=configuration/tomcat-logging.properties
-
-hosttracker.keyscheme=IP
-
-lisp.mappingMerge = false
-
-lisp.smr = true
-
-lisp.elpPolicy = default
diff --git a/ansible/roles/opendaylight/templates/jetty.xml.j2 b/ansible/roles/opendaylight/templates/jetty.xml.j2
deleted file mode 100644
index 4e4cf897ca3e54cc9f4163d2b136d244d0d3677e..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/jetty.xml.j2
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you 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.
--->
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//
-DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-
-<Configure class="org.eclipse.jetty.server.Server">
-    <Call name="addConnector">
-        <Arg>
-            <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
-                <Set name="host">
-                    <Property name="jetty.host" />
-                </Set>
-                <Set name="port">
-                    <Property name="jetty.port" default="{{ opendaylight_restconf_port }}" />
-                </Set>
-                <Set name="maxIdleTime">300000</Set>
-                <Set name="Acceptors">2</Set>
-                <Set name="statsOn">false</Set>
-                <Set name="confidentialPort">{{ opendaylight_jetty_conf_port }}</Set>
-                <Set name="lowResourcesConnections">20000</Set>
-                <Set name="lowResourcesMaxIdleTime">5000</Set>
-            </New>
-        </Arg>
-    </Call>
-    <Call name="addConnector">
-      <Arg>
-        <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
-          <Set name="host">
-            <Property name="jetty.host" />
-          </Set>
-          <Set name="port">
-            <Property name="jetty.port" default="{{ opendaylight_restconf_port_backup }}" />
-          </Set>
-          <Set name="maxIdleTime">300000</Set>
-          <Set name="Acceptors">2</Set>
-          <Set name="statsOn">false</Set>
-          <Set name="confidentialPort">{{ opendaylight_jetty_conf2_port }}</Set>
-          <Set name="lowResourcesConnections">20000</Set>
-          <Set name="lowResourcesMaxIdleTime">5000</Set>
-        </New>
-      </Arg>
-    </Call>
-
-    <Call name="addBean">
-        <Arg>
-            <New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
-                <Set name="name">karaf</Set>
-                <Set name="loginModuleName">karaf</Set>
-                <Set name="roleClassNames">
-                    <Array type="java.lang.String">
-                        <Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
-                        </Item>
-                    </Array>
-                </Set>
-            </New>
-        </Arg>
-    </Call>
-    <Call name="addBean">
-        <Arg>
-            <New class="org.eclipse.jetty.plus.jaas.JAASLoginService">
-                <Set name="name">default</Set>
-                <Set name="loginModuleName">karaf</Set>
-                <Set name="roleClassNames">
-                    <Array type="java.lang.String">
-                        <Item>org.apache.karaf.jaas.boot.principal.RolePrincipal
-                        </Item>
-                    </Array>
-                </Set>
-            </New>
-        </Arg>
-    </Call>
-
-</Configure>
diff --git a/ansible/roles/opendaylight/templates/module-shards.conf.j2 b/ansible/roles/opendaylight/templates/module-shards.conf.j2
deleted file mode 100644
index 4fe1f999ff8089697edc19acf893ad2a38281bc0..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/module-shards.conf.j2
+++ /dev/null
@@ -1,59 +0,0 @@
-module-shards = [
-    {
-        name = "default"
-        shards = [
-            {
-                name="default"
-                replicas = [
-                    {% for host in groups['opendaylight'] %}
-                    "{{ hostvars[host]['ansible_hostname'] }}"{% if not loop.last %},
-                    {% endif %}
-                    {% endfor %}
-                ]
-            }
-        ]
-    },
-    {
-        name = "topology"
-        shards = [
-            {
-                name="topology"
-                replicas = [
-                    {% for host in groups['opendaylight'] %}
-                    "{{ hostvars[host]['ansible_hostname'] }}"{% if not loop.last %},
-                    {% endif %}
-                    {% endfor %}
-                ]
-            }
-        ]
-    },
-    {
-        name = "inventory"
-        shards = [
-            {
-                name="inventory"
-                replicas = [
-                    {% for host in groups['opendaylight'] %}
-                    "{{ hostvars[host]['ansible_hostname'] }}"{% if not loop.last %},
-                    {% endif %}
-                    {% endfor %}
-                ]
-            }
-        ]
-    },
-         {
-             name = "toaster"
-             shards = [
-                 {
-                     name="toaster"
-                     replicas = [
-                        {% for host in groups['opendaylight'] %}
-                        "{{ hostvars[host]['ansible_hostname'] }}"{% if not loop.last %},
-                        {% endif %}
-                        {% endfor %}
-                     ]
-                 }
-             ]
-         }
-
-]
diff --git a/ansible/roles/opendaylight/templates/modules.conf.j2 b/ansible/roles/opendaylight/templates/modules.conf.j2
deleted file mode 100644
index 5b0711ea50cbae355536a363e41c49fa0df02d6e..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/modules.conf.j2
+++ /dev/null
@@ -1,20 +0,0 @@
-modules = [
-    {
-        name = "inventory"
-        namespace = "urn:opendaylight:inventory"
-        shard-strategy = "module"
-    },
-
-    {
-        name = "topology"
-        namespace = "urn:TBD:params:xml:ns:yang:network-topology"
-        shard-strategy = "module"
-    },
-
-    {
-        name = "toaster"
-        namespace = "http://netconfcentral.org/ns/toaster"
-        shard-strategy = "module"
-    }
-
-]
diff --git a/ansible/roles/opendaylight/templates/netvirt-aclservice-config.xml.j2 b/ansible/roles/opendaylight/templates/netvirt-aclservice-config.xml.j2
deleted file mode 100644
index 398719570bc13f10f8b3b56669669dbc319d467b..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/netvirt-aclservice-config.xml.j2
+++ /dev/null
@@ -1,4 +0,0 @@
-<aclservice-config xmlns="urn:opendaylight:netvirt:aclservice-config">
-  <security-group-mode>{{ opendaylight_acl_impl }}</security-group-mode>
-  <default-behavior>deny</default-behavior>
-</aclservice-config>
diff --git a/ansible/roles/opendaylight/templates/netvirt-impl-config_netvirt-impl-config.xml.j2 b/ansible/roles/opendaylight/templates/netvirt-impl-config_netvirt-impl-config.xml.j2
deleted file mode 100644
index 9e22e427a34e26b9097adb9bab44c7cb603c6bc3..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/netvirt-impl-config_netvirt-impl-config.xml.j2
+++ /dev/null
@@ -1,7 +0,0 @@
-{% if enable_opendaylight_legacy_netvirt_conntrack | bool %}
-<netvirt-impl-config xmlns="urn:opendaylight:params:xml:ns:yang:netvirt:impl:config">
-  <conntrack-enabled>
-    true
-  </conntrack-enabled>
-</netvirt-impl-config>
-{% endif %}
diff --git a/ansible/roles/opendaylight/templates/opendaylight.json.j2 b/ansible/roles/opendaylight/templates/opendaylight.json.j2
deleted file mode 100644
index 4bce8fde1c67466ed023cbd8f3e822dfe9e92f5b..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/opendaylight.json.j2
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-    "command": "start-odl",
-    "config_files": [
-        {
-            "source": "{{ container_config_directory }}/start-odl",
-            "dest": "/usr/local/bin/start-odl",
-            "owner": "odl",
-            "perm": "0655"
-        },
-        {
-            "source": "{{ container_config_directory }}/org.apache.karaf.features.cfg",
-            "dest": "/opt/opendaylight/etc/org.apache.karaf.features.cfg",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/org.opendaylight.ovsdb.library.cfg",
-            "dest": "/opt/opendaylight/etc/org.opendaylight.ovsdb.library.cfg",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/tomcat-server.xml",
-            "dest": "/opt/opendaylight/configuration/tomcat-server.xml",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/jetty.xml",
-            "dest": "/opt/opendaylight/etc/jetty.xml",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/org.ops4j.pax.logging.cfg",
-            "dest": "/opt/opendaylight/etc/org.ops4j.pax.logging.cfg",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "/var/lib/kolla/config_files/custom.properties",
-            "dest": "/opt/opendaylight/etc/custom.properties",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/netvirt-impl-config_netvirt-impl-config.xml",
-            "dest": "/opt/opendaylight/etc/opendaylight/datastore/initial/config/netvirt-impl-config_netvirt-impl-config.xml",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/netvirt-aclservice-config.xml",
-            "dest": "/opt/opendaylight/etc/opendaylight/datastore/initial/config/netvirt-aclservice-config.xml",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/setenv",
-            "dest": "/opt/opendaylight/bin/setenv",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/akka.conf",
-            "dest": "/opt/opendaylight/configuration/initial/akka.conf",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/modules.conf",
-            "dest": "/opt/opendaylight/configuration/initial/modules.conf",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/module-shards.conf",
-            "dest": "/opt/opendaylight/configuration/initial/module-shards.conf",
-            "owner": "odl",
-            "perm": "0600"
-        },
-        {
-            "source": "{{ container_config_directory }}/10-rest-connector.xml",
-            "dest": "/opt/opendaylight/etc/opendaylight/karaf/10-rest-connector.xml",
-            "owner": "odl",
-            "perm": "0600"
-        }
-    ],
-    "permissions": [
-        {
-            "path": "/var/log/kolla/opendaylight",
-            "owner": "odl:odl",
-            "recurse": true
-        }
-    ]
-}
diff --git a/ansible/roles/opendaylight/templates/org.apache.karaf.features.cfg.j2 b/ansible/roles/opendaylight/templates/org.apache.karaf.features.cfg.j2
deleted file mode 100644
index 18da64d8819f79d6e239e08f07ddbb65f0437298..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/org.apache.karaf.features.cfg.j2
+++ /dev/null
@@ -1,28 +0,0 @@
-################################################################################
-#
-#    Licensed to the Apache Software Foundation (ASF) under one or more
-#    contributor license agreements.  See the NOTICE file distributed with
-#    this work for additional information regarding copyright ownership.
-#    The ASF licenses this file to You 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.
-#
-################################################################################
-
-featuresRepositories = mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features, \
-    mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features, \
-    mvn:org.ops4j.pax.web/pax-web-features/3.2.9/xml/features, \
-    mvn:org.apache.karaf.features/spring/${karaf.version}/xml/features, \
-    mvn:org.opendaylight.integration/features-integration-index/${project.version}/xml/features
-
-featuresBoot=config,standard,region,package,kar,ssh,management{% if not opendaylight_features == '' %},{% endif %}{{ opendaylight_features }}
-
-featuresBootAsynchronous=false
diff --git a/ansible/roles/opendaylight/templates/org.opendaylight.ovsdb.library.cfg.j2 b/ansible/roles/opendaylight/templates/org.opendaylight.ovsdb.library.cfg.j2
deleted file mode 100644
index d5cae1b52fbfed510f3f7d330fd3207a1cfb0321..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/org.opendaylight.ovsdb.library.cfg.j2
+++ /dev/null
@@ -1,7 +0,0 @@
-ovsdb-listener-port = {{ opendaylight_ovsdb_port }}
-
-use-ssl = false
-
-json-rpc-decoder-max-frame-length = 100000
-
-ovsdb-rpc-task-timeout = 1000
diff --git a/ansible/roles/opendaylight/templates/org.ops4j.pax.logging.cfg.j2 b/ansible/roles/opendaylight/templates/org.ops4j.pax.logging.cfg.j2
deleted file mode 100644
index d2aa291f4b388946d1c577cefb8cd03126511e77..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/org.ops4j.pax.logging.cfg.j2
+++ /dev/null
@@ -1,52 +0,0 @@
-################################################################################
-#
-#    Licensed to the Apache Software Foundation (ASF) under one or more
-#    contributor license agreements.  See the NOTICE file distributed with
-#    this work for additional information regarding copyright ownership.
-#    The ASF licenses this file to You 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.
-#
-################################################################################
-
-log4j.rootLogger=INFO, async, osgi:*
-log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-
-log4j.appender.async=org.apache.log4j.AsyncAppender
-log4j.appender.async.appenders=out
-
-log4j.appender.out=org.apache.log4j.RollingFileAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-log4j.appender.out.file=/var/log/kolla/opendaylight/karaf.log
-log4j.appender.out.append=true
-log4j.appender.out.maxFileSize=1MB
-log4j.appender.out.maxBackupIndex=10
-
-log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
-log4j.appender.sift.key=bundle.name
-log4j.appender.sift.default=karaf
-log4j.appender.sift.appender=org.apache.log4j.FileAppender
-log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
-log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n
-log4j.appender.sift.appender.file=/var/log/kolla/opendaylight/$\\{bundle.name\\}.log
-log4j.appender.sift.appender.append=true
-
-log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
-log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
-log4j.appender.syslog.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
-log4j.appender.syslog.syslogHost=127.0.0.1
-log4J.appender.syslog.facility=KARAF
-log4j.appender.syslog.facilityPrinting=false
diff --git a/ansible/roles/opendaylight/templates/org.ops4j.pax.url.mvn.cfg.j2 b/ansible/roles/opendaylight/templates/org.ops4j.pax.url.mvn.cfg.j2
deleted file mode 100644
index 37e9e24206d831f95988398529cb17e6dbc71a17..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/org.ops4j.pax.url.mvn.cfg.j2
+++ /dev/null
@@ -1,34 +0,0 @@
-################################################################################
-#
-#    Licensed to the Apache Software Foundation (ASF) under one or more
-#    contributor license agreements.  See the NOTICE file distributed with
-#    this work for additional information regarding copyright ownership.
-#    The ASF licenses this file to You 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.
-#
-################################################################################
-
-org.ops4j.pax.url.mvn.settings=/var/lib/odl/.m2/settings.xml
-
-org.ops4j.pax.url.mvn.localRepository=${karaf.home}/${karaf.default.repository}
-
-org.ops4j.pax.url.mvn.useFallbackRepositories=false
-
-org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote=false
-
-org.ops4j.pax.url.mvn.repositories= \
-file:${karaf.home}/${karaf.default.repository}@id=system.repository, \
-file:${karaf.data}/kar@id=kar.repository@multi, \
-http://repo1.maven.org/maven2@id=central, \
-http://repository.springsource.com/maven/bundles/release@id=spring.ebr.release, \
-http://repository.springsource.com/maven/bundles/external@id=spring.ebr.external, \
-http://zodiac.springsource.com/maven/bundles/release@id=gemini
diff --git a/ansible/roles/opendaylight/templates/setenv.j2 b/ansible/roles/opendaylight/templates/setenv.j2
deleted file mode 100644
index 969671760256e3a66176ce8ba78b4aaf41be07bd..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/setenv.j2
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-#
-#    Licensed to the Apache Software Foundation (ASF) under one or more
-#    contributor license agreements.  See the NOTICE file distributed with
-#    this work for additional information regarding copyright ownership.
-#    The ASF licenses this file to You 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.
-#
-
-if [ "x$JAVA_MAX_PERM_MEM" = "x" ]; then
-    export JAVA_MAX_PERM_MEM="{{ opendaylight_java_max_perm_mem }}"
-fi
-if [ "x$JAVA_MAX_MEM" = "x" ]; then
-    export JAVA_MAX_MEM="{{ opendaylight_java_max_mem }}"
-fi
diff --git a/ansible/roles/opendaylight/templates/start-odl.j2 b/ansible/roles/opendaylight/templates/start-odl.j2
deleted file mode 100644
index e039b1c65566cd622ca47cdbc312666dbb317c96..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/start-odl.j2
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-java -jar /opt/opendaylight/bin/aaa-cli-jar.jar --dbd /opt/opendaylight/ --nu admin -p {{ opendaylight_password }}
-/opt/opendaylight/bin/karaf
diff --git a/ansible/roles/opendaylight/templates/tomcat-server.xml.j2 b/ansible/roles/opendaylight/templates/tomcat-server.xml.j2
deleted file mode 100644
index 1d199d591ebe82daa05124fa9bedf5dd199eaf64..0000000000000000000000000000000000000000
--- a/ansible/roles/opendaylight/templates/tomcat-server.xml.j2
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You 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.
--->
-<Server>
-  <!--APR library loader. Documentation at /docs/apr.html -->
-  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
-  <Listener className="org.apache.catalina.core.JasperListener" />
-  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
-  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
-  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
-
-  <Service name="Catalina">
-    <Connector port="{{ opendaylight_tomcat_port }}" protocol="HTTP/1.1"
-               connectionTimeout="20000"
-               redirectPort="{{ opendaylight_tomcat_redirect_port }}" />
-
-    <Engine name="Catalina" defaultHost="localhost">
-      <Host name="localhost" appBase=""
-            unpackWARs="false" autoDeploy="false"
-            deployOnStartup="false" createDirs="false">
-            <Realm className="org.opendaylight.controller.karafsecurity.ControllerCustomRealm" />
-            <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
-                        prefix="web_access_log_" suffix=".txt" resolveHosts="false"
-                        rotatable="true" fileDateFormat="yyyy-MM"
-                        pattern="%{yyyy-MM-dd HH:mm:ss.SSS z}t - [%a] - %r"/>
-      </Host>
-    </Engine>
-  </Service>
-</Server>
diff --git a/ansible/roles/openvswitch/templates/start-ovs.j2 b/ansible/roles/openvswitch/templates/start-ovs.j2
index 643a29c20fd99be6587331d329636ea7a403c7e9..4064ed4130bbca212b3d92e6adb53ab8d59ba73d 100644
--- a/ansible/roles/openvswitch/templates/start-ovs.j2
+++ b/ansible/roles/openvswitch/templates/start-ovs.j2
@@ -1,11 +1,2 @@
 #!/usr/bin/env bash
-{% if enable_opendaylight | bool %}
-/usr/bin/ovs-vsctl --no-wait -- set-manager {% for host in groups['opendaylight'] %}tcp:{{ 'api' | kolla_address(host) | put_address_in_context('url') }}:{{ opendaylight_ovsdb_port }} {% endfor %}
-
-/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . other_config:local_ip={{ 'tunnel' | kolla_address }}
-/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . other_config:provider_mappings=physnet1:{{ neutron_bridge_name }}
-/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . external_ids:system-id=`cat /proc/sys/kernel/random/uuid`
-/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . external_ids:odl_os_hostconfig_config_odl_l2='{"supported_vnic_types": [{"vnic_type": "normal", "vif_type": "ovs", "vif_details": {} }], "allowed_network_types": [{{ opendaylight_allowed_network_types }}], "datapath_types": ["netdev", "system"], "bridge_mappings": {"physnet1":"{{ neutron_bridge_name }}"} }'
-/usr/bin/ovs-vsctl --no-wait -- set Open_vSwitch . external_ids:odl_os_hostconfig_hostid="{{ hostvars[inventory_hostname]['ansible_hostname'] }}"
-{% endif %}
 /usr/sbin/ovs-vswitchd unix:/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --log-file=/var/log/kolla/openvswitch/ovs-vswitchd.log --pidfile
diff --git a/ansible/roles/ovs-dpdk/defaults/main.yml b/ansible/roles/ovs-dpdk/defaults/main.yml
index 66be60bce079b2b68b17b0d6ad02e44ffe7590bb..4a1c21dcca8cc9b8a328ba74fa07b1f83126399d 100644
--- a/ansible/roles/ovs-dpdk/defaults/main.yml
+++ b/ansible/roles/ovs-dpdk/defaults/main.yml
@@ -7,7 +7,7 @@ ovsdpdk_services:
   ovsdpdk-db:
     container_name: "ovsdpdk_db"
     image: "{{ ovsdpdk_db_image_full }}"
-    enabled: "{{ neutron_plugin_agent in ['openvswitch', 'opendaylight'] }}"
+    enabled: "{{ neutron_plugin_agent in ['openvswitch'] }}"
     host_in_groups: >-
       {{
       inventory_hostname in groups['compute']
@@ -21,7 +21,7 @@ ovsdpdk_services:
   ovsdpdk-vswitchd:
     container_name: "ovsdpdk_vswitchd"
     image: "{{ ovsdpdk_vswitchd_image_full }}"
-    enabled: "{{ neutron_plugin_agent in ['openvswitch', 'opendaylight'] }}"
+    enabled: "{{ neutron_plugin_agent in ['openvswitch'] }}"
     privileged: True
     host_in_groups: >-
       {{
diff --git a/ansible/roles/skydive/templates/skydive-agent.conf.j2 b/ansible/roles/skydive/templates/skydive-agent.conf.j2
index 0867951108dc2f9b2f3d993b7b87d8ea689885f9..c35cedb5aba4f1b161efc238e67499308967a450 100644
--- a/ansible/roles/skydive/templates/skydive-agent.conf.j2
+++ b/ansible/roles/skydive/templates/skydive-agent.conf.j2
@@ -33,7 +33,7 @@ agent:
   flow:
     probes:
       - gopacket
-{% if neutron_plugin_agent in ['openvswitch', 'opendaylight'] %}
+{% if neutron_plugin_agent in ['openvswitch'] %}
       - ovssflow
 {% endif %}
   topology:
@@ -41,7 +41,7 @@ agent:
       - netlink
       - netns
       - neutron
-{% if neutron_plugin_agent in ['openvswitch', 'opendaylight'] %}
+{% if neutron_plugin_agent in ['openvswitch'] %}
       - ovsdb
 {% endif %}
 
@@ -61,7 +61,7 @@ flow:
   expire: 600
   update: 60
 
-{% if neutron_plugin_agent in ['openvswitch', 'opendaylight'] %}
+{% if neutron_plugin_agent in ['openvswitch'] %}
 ovs:
   ovsdb: tcp://127.0.0.1:{{ ovsdb_port }}
   oflow:
diff --git a/ansible/site.yml b/ansible/site.yml
index 776bc224e5fc4faeb453e4e17d2fa16e93004a24..b292cdc4f903fc80e938fff581510ab149db0f4d 100644
--- a/ansible/site.yml
+++ b/ansible/site.yml
@@ -63,7 +63,6 @@
         - enable_neutron_{{ enable_neutron | bool }}
         - enable_nova_{{ enable_nova | bool }}
         - enable_octavia_{{ enable_octavia | bool }}
-        - enable_opendaylight_{{ enable_opendaylight | bool }}
         - enable_openvswitch_{{ enable_openvswitch | bool }}_enable_ovs_dpdk_{{ enable_ovs_dpdk | bool }}
         - enable_outward_rabbitmq_{{ enable_outward_rabbitmq | bool }}
         - enable_panko_{{ enable_panko | bool }}
@@ -299,11 +298,6 @@
             tasks_from: loadbalancer
           tags: octavia
           when: enable_octavia | bool
-        - include_role:
-            role: opendaylight
-            tasks_from: loadbalancer
-          tags: opendaylight
-          when: enable_opendaylight | bool
         - include_role:
             role: panko
             tasks_from: loadbalancer
@@ -717,17 +711,6 @@
 # own playbook.
 - import_playbook: nova.yml
 
-- name: Apply role opendaylight
-  gather_facts: false
-  hosts:
-    - opendaylight
-    - '&enable_opendaylight_True'
-  serial: '{{ kolla_serial|default("0") }}'
-  roles:
-    - { role: opendaylight,
-        tags: opendaylight,
-        when: enable_opendaylight | bool }
-
 - name: Apply role openvswitch
   gather_facts: false
   hosts:
diff --git a/doc/source/reference/networking/index.rst b/doc/source/reference/networking/index.rst
index 9bc62f399d6a042912c53a97f6e7fc374e44dcdb..f9a2b2f4d1405ee965d6375a8d86a5336647c1ab 100644
--- a/doc/source/reference/networking/index.rst
+++ b/doc/source/reference/networking/index.rst
@@ -14,6 +14,5 @@ Networking-SFC, QoS, and so on.
    dpdk
    neutron
    neutron-extensions
-   opendaylight
    provider-networks
    sriov
diff --git a/doc/source/reference/networking/opendaylight.rst b/doc/source/reference/networking/opendaylight.rst
deleted file mode 100644
index c2f6ce1785a03f986c7d9b5f9c0c7763e2fd9795..0000000000000000000000000000000000000000
--- a/doc/source/reference/networking/opendaylight.rst
+++ /dev/null
@@ -1,57 +0,0 @@
-.. _opendaylight:
-
-=============================
-Opendaylight - SDN controller
-=============================
-
-Preparation and deployment
---------------------------
-
-Modify the ``/etc/kolla/globals.yml`` file as the following example shows:
-
-.. code-block:: yaml
-
-   enable_opendaylight: "yes"
-   neutron_plugin_agent: "opendaylight"
-
-Networking-ODL is an additional Neutron plugin that allows the OpenDaylight
-SDN Controller to utilize its networking virtualization features.
-For OpenDaylight to work, the Networking-ODL plugin has to be installed in
-the ``neutron-server`` container. In this case, one could use the
-neutron-server-opendaylight container and the opendaylight container by
-pulling from Kolla dockerhub or by building them locally.
-
-OpenDaylight ``globals.yml`` configurable options with their defaults include:
-
-.. code-block:: yaml
-
-   opendaylight_mechanism_driver: "opendaylight_v2"
-   opendaylight_l3_service_plugin: "odl-router_v2"
-   opendaylight_acl_impl: "learn"
-   enable_opendaylight_qos: "no"
-   enable_opendaylight_l3: "yes"
-   enable_opendaylight_legacy_netvirt_conntrack: "no"
-   opendaylight_port_binding_type: "pseudo-agentdb-binding"
-   opendaylight_features: "odl-mdsal-apidocs,odl-netvirt-openstack"
-   opendaylight_allowed_network_types: '"flat", "vlan", "vxlan"'
-
-Clustered OpenDaylight Deploy
------------------------------
-
-High availability clustered OpenDaylight requires modifying the inventory file
-and placing three or more hosts in the OpenDaylight or Networking groups.
-
-.. note::
-
-   The OpenDaylight role will allow deploy of one or three plus hosts for
-   OpenDaylight/Networking role.
-
-Verification
-------------
-
-Verify the build and deploy operation of Networking-ODL containers. Successful
-deployment will bring up an Opendaylight container in the list of running
-containers on network/opendaylight node.
-
-For the source code, please refer to the following link:
-https://github.com/openstack/networking-odl
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 5b34dcc24b35fb3c0e106d759f5790bc01ea4ae8..001f5f148118086edfd6c140dbf6f95121750601 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -119,7 +119,7 @@
 # addresses for that reason.
 #neutron_external_interface: "eth1"
 
-# Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs, opendaylight ]
+# Valid options are [ openvswitch, linuxbridge, vmware_nsxv, vmware_nsxv3, vmware_dvs ]
 # if vmware_nsxv3 is selected, enable_openvswitch MUST be set to "no" (default is yes)
 #neutron_plugin_agent: "openvswitch"
 
@@ -185,12 +185,6 @@
 # in a multi-region deployment, and then only in the *first* region.
 #multiple_regions_names: ["{{ openstack_region_name }}"]
 
-##############
-# OpenDaylight
-##############
-#enable_opendaylight_qos: "no"
-#enable_opendaylight_l3: "yes"
-
 ###################
 # OpenStack options
 ###################
@@ -320,7 +314,6 @@
 #enable_nova_ssh: "yes"
 #enable_octavia: "no"
 #enable_onos: "no"
-#enable_opendaylight: "no"
 #enable_openvswitch: "{{ enable_neutron | bool and neutron_plugin_agent != 'linuxbridge' }}"
 #enable_ovs_dpdk: "no"
 #enable_osprofiler: "no"
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index 7b506ca68e386c3ac34c9678bb4030ed6b00cb14..d9553adfdab446e5a69c5288e5173fe72a2c6a36 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -24,11 +24,6 @@ mariadb_backup_database_password:
 # This should only be set if you require a password for your Docker registry
 docker_registry_password:
 
-######################
-# OpenDaylight options
-######################
-opendaylight_password:
-
 ####################
 # VMware support
 ####################
diff --git a/releasenotes/notes/remove-opendaylight-4caac9fbf25b8015.yaml b/releasenotes/notes/remove-opendaylight-4caac9fbf25b8015.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..270b560d31560c7ebc5ff006bd7345ad57c46ab5
--- /dev/null
+++ b/releasenotes/notes/remove-opendaylight-4caac9fbf25b8015.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+  - |
+    Support for deployment of OpenDaylight controller and configuration of Neutron related to
+    integration with OpenDaylight have been removed.
diff --git a/tests/templates/inventory.j2 b/tests/templates/inventory.j2
index 71da73b3ca211b83968a761c6c116f18b123eeff..ad756a6b0d48528c3c1b9b09ee0f52bf65525c62 100644
--- a/tests/templates/inventory.j2
+++ b/tests/templates/inventory.j2
@@ -129,9 +129,6 @@ network
 compute
 manila-share
 
-[opendaylight:children]
-network
-
 [cinder:children]
 control