Add ODL SFC support 69/38269/10
authorYifei Xue <xueyifei@huawei.com>
Thu, 27 Jul 2017 12:34:52 +0000 (20:34 +0800)
committerJustin chi <chigang@huawei.com>
Fri, 28 Jul 2017 11:26:55 +0000 (11:26 +0000)
Add SFC support for Ocata and Carbon.
1. Add ovs-nsh package for sfc scenario
2. Add sfc configuration and tasks
3. Add sfc DHA files

Change-Id: Icf8f20220a2c5ac38a5b92d3ca0e24cbb0e89a52
Signed-off-by: Yifei Xue <xueyifei@huawei.com>
38 files changed:
deploy/adapters/ansible/openstack/HA-ansible-multinodes.yml
deploy/adapters/ansible/roles/post-openstack/tasks/main.yml
deploy/conf/hardware_environment/huawei-pod1/os-odl_l3-sfc-ha.yml [new file with mode: 0644]
deploy/conf/vm_environment/os-odl_l3-sfc-ha.yml [new file with mode: 0644]
plugins/odl_cluster/roles/odl_cluster/tasks/control-hosts-1.yml
plugins/odl_cluster/roles/odl_cluster/tasks/odl-post.yml
plugins/odl_sfc/plugins.desc [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/files/opendaylight.service [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/files/sfc.conf [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/handlers/main.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-2.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-3.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-db-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-2.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-repos-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-2.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-3.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-utility-1.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/main.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/tasks/odl-post.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/templates/acl_conf.sh [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/templates/custom.properties [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/templates/ml2_conf.sh [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/templates/org.apache.karaf.features.cfg [new file with mode: 0755]
plugins/odl_sfc/roles/odl_cluster_sfc/vars/Debian.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/vars/RedHat.yml [new file with mode: 0644]
plugins/odl_sfc/roles/odl_cluster_sfc/vars/main.yml [new file with mode: 0644]
plugins/odl_sfc/roles/setup-sfc/files/setup-odl.yml.j2 [new file with mode: 0644]
plugins/odl_sfc/roles/setup-sfc/tasks/main.yml [new file with mode: 0644]
plugins/odl_sfc/roles/setup-sfc/tasks/setup_sfc.yml [new file with mode: 0644]
plugins/odl_sfc/roles/sfc-pre-2/tasks/main.yml [new file with mode: 0644]
plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml [new file with mode: 0644]
plugins/odl_sfc/roles/sfc-pre/handlers/main.yml [new file with mode: 0755]
plugins/odl_sfc/roles/sfc-pre/tasks/Ubuntu.yml [new file with mode: 0755]
plugins/odl_sfc/roles/sfc-pre/tasks/main.yml [new file with mode: 0755]

index 40c70ac..f253afc 100644 (file)
     - storage
     - rt_kvm
 
+- hosts: all
+  remote_user: root
+  roles:
+    - sfc-pre
+
 - hosts: localhost
   remote_user: root
   roles:
+    - sfc-pre-2
     - config-osa
     - setup-host
     - setup-infrastructure
     - setup-openstack
     - sync-inventory
     - setup-openvswitch
+    - setup-sfc
     - setup-opendaylight
     - post-openstack
 
index 6c84532..2ea325e 100644 (file)
@@ -7,12 +7,6 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 ---
-- name: setup odl
-  shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_ocata-opnfv2/ansible.log; \
-          cd /opt/openstack-ansible/playbooks; \
-          openstack-ansible setup-odl.yml > /dev/null"
-  when: opendaylight is defined and opendaylight == "Enable"
-
 - name: create network
   shell: "export ANSIBLE_LOG_PATH=/var/ansible/run/openstack_ocata-opnfv2/ansible.log; \
           cd /opt/openstack-ansible/playbooks; \
diff --git a/deploy/conf/hardware_environment/huawei-pod1/os-odl_l3-sfc-ha.yml b/deploy/conf/hardware_environment/huawei-pod1/os-odl_l3-sfc-ha.yml
new file mode 100644 (file)
index 0000000..8095fe0
--- /dev/null
@@ -0,0 +1,79 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+---
+TYPE: baremetal
+FLAVOR: cluster
+POWER_TOOL: ipmitool
+
+ipmiUser: root
+ipmiVer: '2.0'
+
+odl_l3_agent: "Enable"
+plugins:
+  - opendaylight: "Enable"
+  - odl_sfc: "Enable"
+
+hosts:
+  - name: host1
+    mac: 'F8:4A:BF:55:A2:8D'
+    interfaces:
+      - eth1: 'F8:4A:BF:55:A2:8E'
+    ipmiIp: 172.16.130.26
+    ipmiPass: Opnfv@pod1
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-adm
+      - ceph-mon
+
+  - name: host2
+    mac: 'D8:49:0B:DA:5A:B7'
+    interfaces:
+      - eth1: 'D8:49:0B:DA:5A:B8'
+    ipmiIp: 172.16.130.27
+    ipmiPass: Opnfv@pod1
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-mon
+
+  - name: host3
+    mac: '78:D7:52:A0:B1:99'
+    interfaces:
+      - eth1: '78:D7:52:A0:B1:9A'
+    ipmiIp: 172.16.130.29
+    ipmiPass: Opnfv@pod1
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-mon
+
+  - name: host4
+    mac: 'D8:49:0B:DA:5B:5D'
+    interfaces:
+      - eth1: 'D8:49:0B:DA:5B:5E'
+    ipmiIp: 172.16.130.30
+    ipmiPass: Opnfv@pod1
+    roles:
+      - compute
+      - ceph-osd
+
+  - name: host5
+    mac: 'D8:49:0B:DA:56:85'
+    interfaces:
+      - eth1: 'D8:49:0B:DA:56:86'
+    ipmiIp: 172.16.130.31
+    ipmiPass: Opnfv@pod1
+    roles:
+      - compute
+      - ceph-osd
diff --git a/deploy/conf/vm_environment/os-odl_l3-sfc-ha.yml b/deploy/conf/vm_environment/os-odl_l3-sfc-ha.yml
new file mode 100644 (file)
index 0000000..4673c58
--- /dev/null
@@ -0,0 +1,50 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+---
+TYPE: virtual
+FLAVOR: cluster
+
+odl_l3_agent: "Enable"
+plugins:
+  - opendaylight: "Enable"
+  - odl_sfc: "Enable"
+
+hosts:
+  - name: host1
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-adm
+      - ceph-mon
+
+  - name: host2
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-mon
+
+  - name: host3
+    roles:
+      - controller
+      - ha
+      - odl
+      - ceph-mon
+
+  - name: host4
+    roles:
+      - compute
+      - ceph-osd
+
+  - name: host5
+    roles:
+      - compute
+      - ceph-osd
index 133d98a..6879340 100644 (file)
@@ -95,4 +95,6 @@
     {{ odl_home }}configuration/tomcat-server.xml
 
 - name: remove karaf data directory
-  shell: rm -rf {{ odl_home }}/data/*;
+  file:
+    path: "{{ odl_home }}data"
+    state: absent
index 8794ff0..9f1cb79 100644 (file)
     - inventory_hostname in groups['neutron_openvswitch_agent']
     - inventory_hostname not in groups['nova_compute']
 
-- name: clear karaf data
-  shell: rm -rf {{ odl_home }}/data/*;
+- name: remove karaf data directory
+  file:
+    path: "{{ odl_home }}data"
+    state: absent
   when: inventory_hostname in groups['network_hosts']
 
 - name: restart opendaylight
diff --git a/plugins/odl_sfc/plugins.desc b/plugins/odl_sfc/plugins.desc
new file mode 100644 (file)
index 0000000..4658b3d
--- /dev/null
@@ -0,0 +1,63 @@
+# ##############################################################
+# This is an example for add a plugin into Compass4nfv
+# It illustrates how feature components can be integrated into Compass4nfv
+# together with scenarios.
+#
+#
+# More details can be found in the development document.
+# ##############################################################
+---
+plugin:
+  # plugin name,it is also as the switch to enable/disable plugin in scenario
+  # files
+  name: odl_sfc
+
+  description: plugin introduce and description
+  maintainers:
+    - xueyifei@huawei.com
+
+  # true: this plugin is deployed separately on a new node
+  # false: this plugin is deployed on controller or compute node
+  independent_hosts: false
+
+  # artifact: packege download url for this plugin
+  artifacts:
+    url:
+
+  # global_vars:
+  # define the parameters required by the plugin
+  # and its value will be defined and passed by compass4nfv
+  global_vars:
+    - xxx: yyy
+    - ntp_server: "pool.ntp.org"
+
+  # orchestration
+  # A plugin can have mutiple components, each component may need to be
+  # installed on different inventory or have its own configuration.
+  # due to Compass4nfv currently only supports ansible, so each component
+  # of the installation and configuration script need to be use ansible.
+  # cm : congfiguration management tool : only ansible support
+  # role: each component corresponds to ansible script that locates in the same
+  # directory as plugin.desc.
+  # phrase: pre_openstack -- the component is installed after the OS
+  # provisioning, before the OpenStack deployment.
+  # phrase: post_openstack -- the component is installed before the OpenStack
+  # deployment.
+  # inventory: if the phrase is pre_openstack, inventory can be controller and
+  # compute. if the phrase is post_openstack, inventory can be get from the file
+  # openstack-ansible.inventory
+  orchestration:
+    cm: ansible
+    roles:
+      - role: sfc-pre
+        excute_after: rt_kvm
+        inventory:
+          - all
+      - role: sfc-pre-2
+        excute_after: sfc-pre
+        inventory:
+          - localhost
+      - role: setup-sfc
+        excute_after: setup-openvswitch
+        inventory:
+          - localhost
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/files/opendaylight.service b/plugins/odl_sfc/roles/odl_cluster_sfc/files/opendaylight.service
new file mode 100644 (file)
index 0000000..f4801a3
--- /dev/null
@@ -0,0 +1,20 @@
+[Unit]
+Description=OpenDaylight
+After=
+
+
+[Service]
+User=root
+Group=root
+Type=simple
+WorkingDirectory=/opt/opendaylight
+PermissionsStartOnly=true
+ExecStartPre=
+ExecStart=/usr/lib/jvm/java-8-oracle/bin/java -Djava.security.properties=/opt/opendaylight/etc/odl.java.security -server -Xms128M -Xmx2048m -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote -Djava.security.egd=file:/dev/./urandom -Djava.endorsed.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/endorsed:/usr/lib/jvm/java-8-oracle/lib/endorsed:/opt/opendaylight/lib/endorsed -Djava.ext.dirs=/usr/lib/jvm/java-8-oracle/jre/lib/ext:/usr/lib/jvm/java-8-oracle/lib/ext:/opt/opendaylight/lib/ext -Dkaraf.instances=/opt/opendaylight/instances -Dkaraf.home=/opt/opendaylight -Dkaraf.base=/opt/opendaylight -Dkaraf.data=/opt/opendaylight/data -Dkaraf.etc=/opt/opendaylight/etc -Djava.io.tmpdir=/opt/opendaylight/data/tmp -Djava.util.logging.config.file=/opt/opendaylight/etc/java.util.logging.properties -Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true -classpath /opt/opendaylight/lib/karaf.branding-1.8.1-SNAPSHOT.jar:/opt/opendaylight/lib/karaf-jaas-boot.jar:/opt/opendaylight/lib/karaf.jar:/opt/opendaylight/lib/karaf-org.osgi.core.jar org.apache.karaf.main.Main
+Restart=on-failure
+LimitNOFILE=65535
+TimeoutStopSec=15
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/files/sfc.conf b/plugins/odl_sfc/roles/odl_cluster_sfc/files/sfc.conf
new file mode 100644 (file)
index 0000000..acf2e2f
--- /dev/null
@@ -0,0 +1,9 @@
+[DEFAULT]
+
+service_plugins = odl-router,metering,networking_sfc.services.sfc.plugin.SfcPlugin,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin
+
+[sfc]
+drivers = odl
+
+[flowclassifier]
+drivers = odl
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/handlers/main.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/handlers/main.yml
new file mode 100644 (file)
index 0000000..2650d07
--- /dev/null
@@ -0,0 +1,11 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+- name: restart odl service
+  service: name=opendaylight state=restarted
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-1.yml
new file mode 100644 (file)
index 0000000..dc071cc
--- /dev/null
@@ -0,0 +1,39 @@
+---
+
+- name: install crudini
+  package:
+    name: crudini
+    state: latest
+
+- name: install networking-odl
+  pip:
+    name: networking-odl
+    version: "{{ networking_odl_version }}"
+    virtualenv: /openstack/venvs/neutron-15.1.4
+
+- name: configure vsctl for dhcp agent
+  shell: |
+    crudini --set /etc/neutron/dhcp_agent.ini OVS \
+        ovsdb_interface vsctl;
+  when:
+    - inventory_hostname not in groups['nova_compute']
+
+- name: configure vsctl for l3 agent
+  shell: |
+    crudini --set /etc/neutron/l3_agent.ini OVS \
+        ovsdb_interface vsctl;
+  when: odl_l3_agent == "Disable" and inventory_hostname not in groups['nova_compute']
+
+- name: stop neutron l3 agent
+  service: name=neutron-l3-agent state=stopped enabled=no
+  when: odl_l3_agent == "Enable" and inventory_hostname not in groups['nova_compute']
+
+- name: shut down and disable Neutron's openvswitch  agent services
+  service: name={{ service_ovs_agent_name }} state=stopped enabled=no
+
+- name: Stop the Open vSwitch service and clear existing OVSDB
+  shell: >
+    service {{ service_ovs_name }} stop ;
+    rm -rf /var/log/openvswitch/* ;
+    rm -rf /etc/openvswitch/conf.db ;
+    service {{ service_ovs_name }} start ;
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-2.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-2.yml
new file mode 100644 (file)
index 0000000..f53a3ac
--- /dev/null
@@ -0,0 +1,87 @@
+---
+
+- name: set opendaylight as the manager
+  command: |
+    su -s /bin/sh -c "ovs-vsctl set-manager tcp:{{ internal_lb_vip_address }}:6640;"
+
+- name: check br-int
+  shell: |
+    ovs-vsctl list-br | grep br-int; while [ $? -ne 0 ]; do sleep 10; \
+        ovs-vsctl list-br | grep br-int; done
+
+# yamllint disable rule:line-length
+- name: set local ip in openvswitch
+  shell: |
+    ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) \
+        other_config={'local_ip'=' {{ hostvars[inventory_hostname]['container_networks']['tunnel_address']['address'] }} '};
+  when: inventory_hostname not in groups['nova_compute']
+
+- name: set local ip in openvswitch
+  shell: |
+    ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) \
+        other_config={'local_ip'=' {{ hostvars[inventory_hostname]['ansible_br_vxlan']['ipv4']['address'] }} '};
+  when: inventory_hostname in groups['nova_compute']
+# yamllint enable rule:line-length
+
+- name: Setup br-provider
+  openvswitch_bridge:
+    bridge: br-provider
+    state: present
+  when:
+    - inventory_hostname not in groups['nova_compute']
+    - odl_l3_agent == "Disable"
+
+- name: add ovs uplink
+  openvswitch_port:
+    bridge: br-provider
+    port: "eth12"
+    state: present
+  when:
+    - inventory_hostname not in groups['nova_compute']
+    - odl_l3_agent == "Disable"
+
+- name: set external nic in openvswitch
+  shell: |
+    ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) \
+        other_config:provider_mappings=physnet:br-provider
+  when:
+    - odl_l3_agent == "Disable"
+    - inventory_hostname not in groups['nova_compute']
+
+- name: set external nic in openvswitch
+  shell: |
+    ovs-vsctl set Open_vSwitch $(ovs-vsctl show | head -n 1) \
+        other_config:provider_mappings=physnet:eth12
+  when:
+    - odl_l3_agent == "Enable"
+
+- name: Set host OVS configurations
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig \
+            --datapath_type=system --bridge_mappings=physnet:br-provider
+  when:
+    - inventory_hostname not in groups['nova_compute']
+    - odl_l3_agent == "Disable"
+
+- name: Set host OVS configurations
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig
+            --datapath_type=system --bridge_mappings=physnet:eth12
+  when:
+    - inventory_hostname not in groups['nova_compute']
+    - odl_l3_agent == "Enable"
+
+- name: Set host OVS configurations
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig --datapath_type=system
+  when:
+    - inventory_hostname in groups['nova_compute']
+    - odl_l3_agent == "Disable"
+
+- name: Set host OVS configurations
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-odl-ovs-hostconfig
+            --datapath_type=system --bridge_mappings=physnet:eth12
+  when:
+    - inventory_hostname in groups['nova_compute']
+    - odl_l3_agent == "Enable"
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-3.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-agents-3.yml
new file mode 100644 (file)
index 0000000..68446a8
--- /dev/null
@@ -0,0 +1,42 @@
+---
+
+- name: configure opendaylight -> ml2
+  shell: >
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers opendaylight_v2;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs enable_tunneling "True";
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet:br-provider;
+
+- name: configure bridge_mappings for L3
+  shell: |
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet:eth12;
+  when: odl_l3_agent == "Enable"
+
+- name: configure external bridge name for L2
+  shell: |
+    crudini --set /etc/neutron/l3_agent.ini DEFAULT external_network_bridge br-provider;
+  when: odl_l3_agent == "Disable"
+
+- name: configure opendaylight in ml2
+  shell: |
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl username admin;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl password admin;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl url \
+        http://{{ internal_lb_vip_address }}:8080/controller/nb/v2/neutron;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl port_binding_controller \
+        pseudo-agentdb-binding;
+
+- name: configure metadata for l3 configuration
+  shell: |
+    crudini --set /etc/neutron/dhcp_agent.ini DEFAULT \
+        enable_isolated_metadata "True";
+  when:
+    - inventory_hostname not in groups['nova_compute']
+
+- name: force metadata for l3 configuration
+  shell: |
+    crudini --set /etc/neutron/dhcp_agent.ini DEFAULT \
+        force_metadata "True";
+  when:
+    - inventory_hostname not in groups['nova_compute']
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-db-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-db-1.yml
new file mode 100644 (file)
index 0000000..3cef979
--- /dev/null
@@ -0,0 +1,8 @@
+---
+
+- name: drop and recreate neutron database
+  shell: |
+    mysql -e "drop database if exists neutron;";
+    mysql -e "create database neutron character set utf8;";
+    mysql -e "grant all on neutron.* to 'neutron'@'%' identified by \
+        '{{ neutron_container_mysql_password }}';";
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-1.yml
new file mode 100644 (file)
index 0000000..6879340
--- /dev/null
@@ -0,0 +1,100 @@
+---
+
+- name: check sdn_package cache
+  stat:
+    path=/opt/sdn_package.tar.gz
+  register: sdn_cache    # Todo: remove hard code and add md5 check
+
+- name: debug
+  debug: msg="{{ sdn_cache }}"
+
+- name: get sdn_package
+  get_url:
+    url: "{{ sdn_package }}"
+    dest: /opt/
+  when: sdn_cache.stat.exists != 'true'
+
+- name: create odl group
+  group: name=odl system=yes state=present
+
+- name: create odl user
+  user:
+    name: odl
+    group: odl
+    home: "{{ odl_home }}"
+    createhome: "yes"
+    system: "yes"
+    shell: "/bin/false"
+
+- name: clear sdn_package
+  command: su -s /bin/sh -c "rm -rf /opt/sdn_package"
+
+- name: clear jdk8 package
+  command: su -s /bin/sh -c "rm -rf /opt/install_jdk8"
+
+- name: unarchive sdn_package
+  command: su -s /bin/sh -c "tar xzf /opt/sdn_package.tar.gz -C /opt/"
+
+- name: copy java package
+  command: su -s /bin/sh -c "cp /opt/sdn_package/java/jdk-8u51-linux-x64.tar.gz /opt/"
+
+- name: unarchive java_install package
+  command: su -s /bin/sh -c "tar xvf /opt/sdn_package/java/install_jdk8.tar -C /opt/"
+
+- name: install java
+  command: su -s /bin/sh -c "/opt/install_jdk8/install_jdk8.sh"
+
+- name: clear odl package
+  command: su -s /bin/sh -c "rm -rf {{ odl_home }}*"
+
+- name: extract odl package
+  command: |
+    su -s /bin/sh -c "tar xzf /opt/sdn_package/odl/{{ odl_pkg_name }} -C {{ odl_home }} \
+        --strip-components 1" odl
+
+- name: opendaylight system file
+  copy:
+    src: "{{ service_file.src }}"
+    dest: "{{ service_file.dst }}"
+    mode: 0755
+
+- name: set l3 fwd enable in custom.properties
+  template:
+    src: custom.properties
+    dest: "{{ odl_home }}/etc/custom.properties"
+    owner: odl
+    group: odl
+    mode: 0775
+  when: odl_l3_agent == "Enable"
+
+- name: create karaf config
+  template:
+    src: org.apache.karaf.features.cfg
+    dest: "{{ odl_home }}/etc/org.apache.karaf.features.cfg"
+    owner: odl
+    group: odl
+    mode: 0775
+
+- name: copy acl configuration script
+  template:
+    src: acl_conf.sh
+    dest: "/opt/acl_conf.sh"
+    mode: 0777
+
+- name: execute acl configuration script
+  command: su -s /bin/sh -c "/opt/acl_conf.sh;" odl
+
+- name: create jetty config
+  shell: >
+    sed -i 's/default="8181"/default="8081"/'
+    {{ odl_home }}etc/jetty.xml
+
+- name: create tomcat config
+  shell: >
+    sed -i 's/port="8282"/port="8081"/'
+    {{ odl_home }}configuration/tomcat-server.xml
+
+- name: remove karaf data directory
+  file:
+    path: "{{ odl_home }}data"
+    state: absent
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-2.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-hosts-2.yml
new file mode 100644 (file)
index 0000000..b8d9403
--- /dev/null
@@ -0,0 +1,23 @@
+---
+
+- name: chown opendaylight directory and files
+  shell: >
+    chown -R odl:odl "{{ odl_home }}";
+    chown odl:odl "{{ service_file.dst }}";
+
+- name: start opendaylight
+  service: name=opendaylight state=started
+  when: ansible_os_family == "Debian"
+
+- name: set opendaylight autostart
+  shell: chkconfig opendaylight on
+  when: ansible_os_family == "RedHat"
+
+- name: start opendaylight
+  shell: service opendaylight start
+  when: ansible_os_family == "RedHat"
+
+- name: check if opendaylight running
+  shell: |
+    netstat -lpen --tcp | grep java |  grep 6653;
+    while [ $? -ne 0 ]; do sleep 10; netstat -lpen --tcp | grep java | grep 6653; done
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-repos-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-repos-1.yml
new file mode 100644 (file)
index 0000000..2e58e14
--- /dev/null
@@ -0,0 +1,27 @@
+---
+
+- name: download networking-odl
+  get_url:
+    url: "{{ odl_pip }}"
+    dest: /var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64
+
+- name: download networking-sfc
+  shell: |
+    mkdir -p /opt/tmp
+    pip install networking-sfc==4.0.0 -d /opt/tmp/
+    cp /opt/tmp/networking* /var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64/
+    rm -rf /opt/tmp
+  when:
+    - odl_sfc == "Enable"
+    - inventory_hostname in groups['repo_container'][0]
+
+- name: patch networking-odl to fix a bug
+  shell: |
+    cd /var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64/
+    tar -zxf networking-odl-4.0.0.tar.gz # hard code, need to modify
+    rm -rf networking-odl-4.0.0.tar.gz
+    sed -i 's/^Babel.*/Babel!=2.4.0,>=2.3.4/' networking-odl-4.0.0/requirements.txt
+    tar -zcf networking-odl-4.0.0.tar.gz networking-odl-4.0.0/
+    rm -rf networking-odl-4.0.0/
+    pip install networking-odl-4.0.0.tar.gz -d ./
+    cd -
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-1.yml
new file mode 100644 (file)
index 0000000..e2dd128
--- /dev/null
@@ -0,0 +1,22 @@
+---
+
+- name: install crudini
+  package:
+    name: crudini
+    state: latest
+
+- name: install networking-odl
+  pip:
+    name: networking-odl
+    version: "{{ networking_odl_version }}"
+    virtualenv: /openstack/venvs/neutron-15.1.4    # Todo: hardcode, need to modify
+
+- name: install networking-sfc
+  pip:
+    name: networking-sfc
+    version: "4.0.0"
+    virtualenv: /openstack/venvs/neutron-15.1.4
+  when: odl_sfc == "Enable"
+
+- name: turn off neutron-server on control node
+  service: name=neutron-server state=stopped
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-2.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-2.yml
new file mode 100644 (file)
index 0000000..5d74338
--- /dev/null
@@ -0,0 +1,49 @@
+---
+
+- name: configure odl l3 driver
+  shell: |
+    crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins \
+        odl-router,metering;
+  when: odl_l3_agent == "Enable"
+
+- name: configure opendaylight -> ml2
+  shell: >
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers opendaylight_v2;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs enable_tunneling "True";
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet:br-provider;
+
+- name: configure bridge_mappings for L3
+  shell: |
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet:eth12;
+  when: odl_l3_agent == "Enable"
+
+- name: turn off l3 ha for odl l2
+  shell: |
+    crudini --set /etc/neutron/neutron.conf DEFAULT l3_ha "False";
+  when: odl_l3_agent == "Disable"
+
+- name: configure opendaylight in ml2
+  shell: |
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl username admin;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl password admin;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl url \
+        http://{{ internal_lb_vip_address }}:8080/controller/nb/v2/neutron;
+    crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_odl port_binding_controller \
+        pseudo-agentdb-binding;
+
+- name: copy sfc.conf
+  copy:
+    src: "{{ sfc_plugins.src }}"
+    dest: "{{ sfc_plugins.dst }}"
+    mode: 0755
+  when: odl_sfc == "Enable"
+
+- name: Configure SFC driver
+  shell: crudini --merge /etc/neutron/neutron.conf < /opt/sfc.conf
+  when: odl_sfc == "Enable"
+
+- name: delete sfc.conf
+  shell: rm -rf {{ sfc_plugins.dst }}
+  when: odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-3.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-servers-3.yml
new file mode 100644 (file)
index 0000000..0c11e36
--- /dev/null
@@ -0,0 +1,28 @@
+---
+
+- name: Perform a Neutron DB online upgrade
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+                      --config-file /etc/neutron/neutron.conf
+                      --config-file /etc/neutron/plugins/ml2/ml2_conf.ini
+                      upgrade --expand
+  become: "yes"
+  become_user: "neutron"
+
+- name: Perform a Neutron DB offline upgrade
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+                      --config-file /etc/neutron/neutron.conf
+                      --config-file /etc/neutron/plugins/ml2/ml2_conf.ini
+                      upgrade --contract
+  become: "yes"
+  become_user: "neutron"
+
+- name: SFC DB upgrade
+  command: |
+    /openstack/venvs/neutron-15.1.4/bin/neutron-db-manage
+                      --subproject networking-sfc
+                      upgrade head
+  become: "yes"
+  become_user: "neutron"
+  when: odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-utility-1.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/control-utility-1.yml
new file mode 100644 (file)
index 0000000..613c796
--- /dev/null
@@ -0,0 +1,7 @@
+---
+
+- name: Install networking-sfc for CLI
+  pip:
+    name: networking-sfc
+    version: "4.0.0"
+  when: odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/main.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/main.yml
new file mode 100644 (file)
index 0000000..91fc71f
--- /dev/null
@@ -0,0 +1,44 @@
+---
+
+- include_vars: "{{ ansible_os_family }}.yml"
+
+- include: control-hosts-1.yml
+  when: inventory_hostname in groups['network_hosts']     # Todo: modify to odl_hosts
+
+- include: control-repos-1.yml
+  vars:
+    odl_pip: "{{ networking_odl_url }}"
+  when: inventory_hostname in groups['repo_container']
+
+- include: control-servers-1.yml
+  when: inventory_hostname in groups['neutron_server']
+
+- include: control-utility-1.yml
+  when:
+    - inventory_hostname in groups['utility']
+    - odl_sfc == "Enable"
+
+- include: control-agents-1.yml
+  when: inventory_hostname in groups['neutron_openvswitch_agent']
+
+- include: control-hosts-2.yml
+  when: inventory_hostname in groups['network_hosts']     # Todo: modify to odl_hosts
+
+- include: control-agents-2.yml
+  when: inventory_hostname in groups['neutron_openvswitch_agent']
+
+- include: control-servers-2.yml
+  when: inventory_hostname in groups['neutron_server']
+
+- include: control-agents-3.yml
+  when: inventory_hostname in groups['neutron_openvswitch_agent']
+
+- include: control-db-1.yml
+  when: inventory_hostname == groups['galera_container'][0]
+
+- include: control-servers-3.yml
+  when:
+    - inventory_hostname in groups['neutron_server'][0]
+    - inventory_hostname not in groups['network_hosts']
+
+- include: odl-post.yml
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/odl-post.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/tasks/odl-post.yml
new file mode 100644 (file)
index 0000000..9f1cb79
--- /dev/null
@@ -0,0 +1,34 @@
+---
+
+- name: restart neutron-server
+  service: name=neutron-server state=restarted enabled=yes
+  when: inventory_hostname in groups['neutron_server']
+
+- name: restart neutron-l3-agent server
+  service: name=neutron-l3-agent state=restarted
+  when:
+    - odl_l3_agent == "Disable"
+    - inventory_hostname in groups['neutron_openvswitch_agent']
+    - inventory_hostname not in groups['nova_compute']
+
+- name: restart neutron-dhcp-agent server
+  service: name=neutron-dhcp-agent state=restarted
+  when:
+    - inventory_hostname in groups['neutron_openvswitch_agent']
+    - inventory_hostname not in groups['nova_compute']
+
+- name: restart neutron-metadata-agent server
+  service: name=neutron-metadata-agent state=restarted
+  when:
+    - inventory_hostname in groups['neutron_openvswitch_agent']
+    - inventory_hostname not in groups['nova_compute']
+
+- name: remove karaf data directory
+  file:
+    path: "{{ odl_home }}data"
+    state: absent
+  when: inventory_hostname in groups['network_hosts']
+
+- name: restart opendaylight
+  shell: sleep 60; service opendaylight restart; sleep 60;
+  when: inventory_hostname in groups['network_hosts']
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/templates/acl_conf.sh b/plugins/odl_sfc/roles/odl_cluster_sfc/templates/acl_conf.sh
new file mode 100644 (file)
index 0000000..4962a17
--- /dev/null
@@ -0,0 +1,12 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+mkdir -p {{ odl_home }}etc/opendaylight/datastore/initial/config/
+CONFFILE=$(find {{ odl_home }} -name "*aclservice*config.xml")
+cp $CONFFILE {{ odl_home }}etc/opendaylight/datastore/initial/config/netvirt-aclservice-config.xml
+sed -i s/stateful/transparent/ {{ odl_home }}etc/opendaylight/datastore/initial/config/netvirt-aclservice-config.xml
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/templates/custom.properties b/plugins/odl_sfc/roles/odl_cluster_sfc/templates/custom.properties
new file mode 100644 (file)
index 0000000..f103c1b
--- /dev/null
@@ -0,0 +1,105 @@
+# Extra packages to import from the boot class loader
+org.osgi.framework.system.packages.extra=org.apache.karaf.branding,sun.reflect,sun.reflect.misc,sun.misc,sun.nio.ch,com.sun.media.sound
+
+# https://bugs.eclipse.org/bugs/show_bug.cgi?id=325578
+# Extend the framework to avoid the resources to be presented with
+# a URL of type bundleresource: but to be presented as file:
+osgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator
+
+# Embedded Tomcat configuration File
+org.eclipse.gemini.web.tomcat.config.path=configuration/tomcat-server.xml
+org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
+
+# Use Equinox as default OSGi Framework Implementation
+karaf.framework=equinox
+
+# Show a progress bar on startup and start the console when all bundles are up and running.
+# (If you are in a hurry you can still type enter to start the shell faster.)
+karaf.delay.console=true
+
+# Set security provider to BouncyCastle
+org.apache.karaf.security.providers = org.bouncycastle.jce.provider.BouncyCastleProvider
+
+# We set this to false to disable the Aries BlueprintExtender from doing its orderly container
+# shutdown so we can do it after the CSS has shut down all its modules. Otherwise Aries will
+# shutdown blueprint containers when the karaf framework starts shutdown (ie when bundle 0 is
+# stopped) which can cause failures on CSS module shutdown due to the core blueprint containers
+# and services already being shut down. This setting can be removed when/if CSS is removed
+# completely from ODL.
+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 configuration
+logback.configurationFile=configuration/logback.xml
+
+# Container configuration
+container.profile = Container
+
+# Connection manager configuration
+connection.scheme = ANY_CONTROLLER_ONE_MASTER
+
+# OVSDB configuration
+# ovsdb plugin supports both active and passive connections. It listens on port 6640 by default for Active connections.
+ovsdb.listenPort=6640
+
+# ovsdb creates Openflow nodes/bridges. This configuration configures the bridge's Openflow version.
+# default Openflow version = 1.0, we also support 1.3.
+# ovsdb.of.version=1.3
+
+# ovsdb can be configured with ml2 to perform l3 forwarding. The config below enables that functionality, which is
+# disabled by default.
+ovsdb.l3.fwd.enabled=yes
+
+# ovsdb can be configured with ml2 to perform arp responder, enabled by default.
+ovsdb.l3.arp.responder.disabled=no
+
+# ovsdb can be configured with ml2 to perform l3 forwarding. When used in that scenario, the mac address of the default
+# gateway --on the external subnet-- is expected to be resolved from its inet address. The config below overrides that
+# specific arp/neighDiscovery lookup.
+# ovsdb.l3gateway.mac=00:00:5E:00:02:01
+
+# TLS configuration
+# To enable TLS, set secureChannelEnabled=true and specify the location of controller Java KeyStore and TrustStore files.
+# The Java KeyStore contains controller's private key and certificate. The Java TrustStore contains the trusted certificate
+# entries, including switches' Certification Authority (CA) certificates. For example,
+# secureChannelEnabled=true
+# controllerKeyStore=./configuration/ctlKeyStore
+# controllerKeyStorePassword=xxxxxxxx (this password should match the password used for KeyStore generation and at least 6 characters)
+# controllerTrustStore=./configuration/ctlTrustStore
+# controllerTrustStorePassword=xxxxxxxx (this password should match the password used for TrustStore generation and at least 6 characters)
+
+secureChannelEnabled=false
+controllerKeyStore=
+controllerKeyStorePassword=
+controllerTrustStore=
+controllerTrustStorePassword=
+
+# User Manager configurations
+enableStrongPasswordCheck = false
+
+#Jolokia configurations
+#org.jolokia.listenForHttpService=false
+
+# Logging configuration for Tomcat-JUL logging
+java.util.logging.config.file=configuration/tomcat-logging.properties
+
+#Hosttracker hostsdb key scheme setting
+hosttracker.keyscheme=IP
+
+# LISP Flow Mapping configuration
+# Enable merging RLOC sets received from different xTR-IDs for the same EID (default: false)
+lisp.mappingMerge = false
+# Enable the Solicit-Map-Request (SMR) mechanism (default: true)
+lisp.smr = true
+# Choose policy for Explicit Locator Path (ELP) handling
+# There are three options:
+#   default: don't add or remove locator records, return mapping as-is
+#   both: keep the ELP, but add the next hop as a standalone non-LCAF locator with a lower priority
+#   replace: remove the ELP, add the next hop as a standalone non-LCAF locator
+lisp.elpPolicy = default
+
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/templates/ml2_conf.sh b/plugins/odl_sfc/roles/odl_cluster_sfc/templates/ml2_conf.sh
new file mode 100644 (file)
index 0000000..0d42e48
--- /dev/null
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+cat <<EOT>> /etc/neutron/plugins/ml2/ml2_conf.ini
+[ml2_odl]
+password = admin
+username = admin
+url = http://{{ internal_vip.ip }}:8080/controller/nb/v2/neutron
+EOT
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/templates/org.apache.karaf.features.cfg b/plugins/odl_sfc/roles/odl_cluster_sfc/templates/org.apache.karaf.features.cfg
new file mode 100755 (executable)
index 0000000..b07e028
--- /dev/null
@@ -0,0 +1,54 @@
+################################################################################
+#
+#    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.
+#
+################################################################################
+
+#
+# Defines if the startlvl should be respected during feature startup. The default value is true. The default
+# behavior for 2.x is false (!) for this property
+#
+# Be aware that this property is deprecated and will be removed in Karaf 4.0. So, if you need to
+# set this to false, please use this only as a temporary solution!
+#
+#respectStartLvlDuringFeatureStartup=true
+
+
+#
+# Defines if the startlvl should be respected during feature uninstall. The default value is true.
+# If true, means stop bundles respecting the descend order of start level in a certain feature.
+#
+#respectStartLvlDuringFeatureUninstall=true
+
+#
+# Comma separated list of features repositories to register by default
+#
+featuresRepositories = mvn:org.apache.karaf.features/standard/3.0.8/xml/features,mvn:org.apache.karaf.features/enterprise/3.0.8/xml/features,mvn:org.ops4j.pax.web/pax-web-features/3.2.9/xml/features,mvn:org.apache.karaf.features/spring/3.0.8/xml/features,mvn:org.opendaylight.integration/features-integration-index/0.6.1-SNAPSHOT/xml/features
+
+#
+# Comma separated list of features to install at startup
+#
+featuresBoot=config,standard,region,package,kar,ssh,management,odl-restconf-all,odl-aaa-authn,odl-dlux-all,odl-netvirt-openstack,odl-mdsal-apidocs,odl-dlux-core,odl-dluxapps-nodes,odl-dluxapps-topology,odl-dluxapps-yangui,odl-dluxapps-yangvisualizer,odl-l2switch-switch,odl-l2switch-switch-ui,odl-ovsdb-hwvtepsouthbound-ui,odl-ovsdb-southbound-impl-ui,odl-netvirt-ui,odl-openflowplugin-flow-services-ui,odl-neutron-logger,odl-netvirt-sfc
+
+#
+# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
+#
+featuresBootAsynchronous=false
+
+#
+# Store cfg file for config element in feature
+#
+#configCfgStore=true
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/vars/Debian.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/vars/Debian.yml
new file mode 100644 (file)
index 0000000..c78c522
--- /dev/null
@@ -0,0 +1,21 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+common_packages:
+  - crudini
+
+service_ovs_name: openvswitch-switch
+service_ovs_agent_name: neutron-openvswitch-agent
+
+service_file:
+  src: opendaylight.service
+  dst: /lib/systemd/system/opendaylight.service
+
+# networking_odl_pkg_name: networking-odl-3.2.0.tar.gz
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/vars/RedHat.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/vars/RedHat.yml
new file mode 100644 (file)
index 0000000..a2e6d01
--- /dev/null
@@ -0,0 +1,19 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+common_packages:
+  - crudini
+
+service_ovs_name: openvswitch
+service_ovs_agent_name: neutron-openvswitch-agent
+
+service_file:
+  src: opendaylight.service
+  dst: /lib/systemd/system/opendaylight.service
diff --git a/plugins/odl_sfc/roles/odl_cluster_sfc/vars/main.yml b/plugins/odl_sfc/roles/odl_cluster_sfc/vars/main.yml
new file mode 100644 (file)
index 0000000..a9466ea
--- /dev/null
@@ -0,0 +1,65 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+odl_username: admin
+odl_password: admin
+odl_api_port: 8181
+
+# odl_sfc
+sfc_plugins:
+  src: sfc.conf
+  dst: /opt/sfc.conf
+
+odl_pkg_url: distribution-karaf-0.6.1-Carbon.tar.gz
+odl_pkg_name: distribution-karaf-0.6.1-Carbon.tar.gz
+odl_home: "/opt/opendaylight/"
+odl_base_features:
+  - config
+  - standard
+  - region
+  - package
+  - kar
+  - ssh
+  - management
+  - odl-restconf
+  - odl-l2switch-switch
+  - odl-openflowplugin-all
+  - odl-mdsal-apidocs
+  - odl-dlux-all
+  - odl-adsal-northbound
+  - odl-nsf-all
+  - odl-ovsdb-openstack
+  - odl-ovsdb-northbound
+  - odl-dlux-core
+
+odl_extra_features:
+  - odl-restconf-all
+  - odl-mdsal-clustering
+  - odl-openflowplugin-flow-services
+  - http
+  - jolokia-osgi
+
+odl_features: "{{ odl_base_features + odl_extra_features }}"
+
+sdn_package: http://artifacts.opnfv.org/compass4nfv/packages/master/sdn_package.tar.gz
+
+# yamllint disable rule:line-length
+networking_odl_url: https://launchpad.net/networking-odl/4.0-ocata/4.0.0/+download/networking-odl-4.0.0.tar.gz
+# yamllint enable rule:line-length
+
+jdk8_pkg_name: jdk-8u51-linux-x64.tar.gz
+jdk8_script_name: install_jdk8.tar
+
+common_packages_noarch: []
+
+odl_pip: networking-odl-3.2.0
+
+networking_odl_version: 4.0.0
+
+networking_odl_pkg_name: networking-odl-3.2.0.tar.gz
diff --git a/plugins/odl_sfc/roles/setup-sfc/files/setup-odl.yml.j2 b/plugins/odl_sfc/roles/setup-sfc/files/setup-odl.yml.j2
new file mode 100644 (file)
index 0000000..0d0cbe9
--- /dev/null
@@ -0,0 +1,13 @@
+---
+
+- name: run opendaylight role
+  hosts: neutron_all | galera_container | network_hosts | repo_container | utility
+  max_fail_percentage: 20
+  user: root
+  roles:
+    - odl_cluster
+  vars:
+    - odl_l3_agent: "{{ odl_l3_agent }}"
+    - odl_sfc: "{{ odl_sfc }}"
+  tags:
+    - odl
diff --git a/plugins/odl_sfc/roles/setup-sfc/tasks/main.yml b/plugins/odl_sfc/roles/setup-sfc/tasks/main.yml
new file mode 100644 (file)
index 0000000..c4c0198
--- /dev/null
@@ -0,0 +1,12 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+- include: setup_sfc.yml
+  when: odl_sfc is defined and odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/setup-sfc/tasks/setup_sfc.yml b/plugins/odl_sfc/roles/setup-sfc/tasks/setup_sfc.yml
new file mode 100644 (file)
index 0000000..9fa9175
--- /dev/null
@@ -0,0 +1,30 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+# yamllint disable rule:line-length
+- name: clear setup-odl.yml.j2
+  file:
+    path: "/var/ansible/run/openstack_ocata-opnfv2/roles/setup-opendaylight/templates/setup-odl.yml.j2"
+    state: absent
+# yamllint enable rule:line-length
+
+- name: override setup-odl.yml.j2
+  copy:
+    src: setup-odl.yml.j2
+    dest: "/var/ansible/run/openstack_ocata-opnfv2/roles/setup-opendaylight/templates/"
+
+- name: clear odl_cluster for sfc
+  file:
+    path: "/var/ansible/run/openstack_ocata-opnfv2/roles/odl_cluster"
+    state: absent
+
+- name: copy odl_cluster role
+  shell: |
+    cp -r /var/ansible/run/openstack_ocata-opnfv2/roles/odl_cluster_sfc \
+          /var/ansible/run/openstack_ocata-opnfv2/roles/odl_cluster
diff --git a/plugins/odl_sfc/roles/sfc-pre-2/tasks/main.yml b/plugins/odl_sfc/roles/sfc-pre-2/tasks/main.yml
new file mode 100644 (file)
index 0000000..c4c0198
--- /dev/null
@@ -0,0 +1,12 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+- include: setup_sfc.yml
+  when: odl_sfc is defined and odl_sfc == "Enable"
diff --git a/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml b/plugins/odl_sfc/roles/sfc-pre-2/tasks/setup_sfc.yml
new file mode 100644 (file)
index 0000000..a80a81e
--- /dev/null
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+- name: add ovs package in neutron
+  lineinfile:
+    dest: /etc/ansible/roles/os_neutron/vars/ubuntu-16.04.yml
+    insertbefore: 'openvswitch-common'
+    line: '  - openvswitch-datapath-dkms'
+
+- name: add ovs package in neutron
+  lineinfile:
+    dest: /etc/ansible/roles/os_neutron/vars/ubuntu-16.04.yml
+    insertafter: 'openvswitch-switch'
+    line: '  - python-openvswitch'
+
+- name: modify ovs installation in neutron
+  blockinfile:
+    dest: /etc/ansible/roles/os_neutron/tasks/neutron_install.yml
+    insertafter: '^# limitations'
+    block: |
+      - name: add ovs-nsh repo
+        apt_repository:
+          repo: "ppa:mardim/mardim-ppa"
+          update_cache: True
+          state: present
+        when:
+          - inventory_hostname in groups['neutron_openvswitch_agent']
+          - inventory_hostname not in groups['nova_compute']
diff --git a/plugins/odl_sfc/roles/sfc-pre/handlers/main.yml b/plugins/odl_sfc/roles/sfc-pre/handlers/main.yml
new file mode 100755 (executable)
index 0000000..5356791
--- /dev/null
@@ -0,0 +1,8 @@
+##############################################################################
+## Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
+## All rights reserved. This program and the accompanying materials
+## are made available under the terms of the Apache License, Version 2.0
+## which accompanies this distribution, and is available at
+## http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
diff --git a/plugins/odl_sfc/roles/sfc-pre/tasks/Ubuntu.yml b/plugins/odl_sfc/roles/sfc-pre/tasks/Ubuntu.yml
new file mode 100755 (executable)
index 0000000..2a59c24
--- /dev/null
@@ -0,0 +1,24 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+- name: add ovs-nsh repo
+  apt_repository:
+    repo: "ppa:mardim/mardim-ppa"
+    update_cache: "True"
+    state: "present"
+
+- name: install ovs packages
+  package:
+    name: "{{ item }}"
+    state: "present"
+  with_items:
+    - "openvswitch-datapath-dkms"
+    - "openvswitch-common"
+    - "openvswitch-switch"
+    - "python-openvswitch"
diff --git a/plugins/odl_sfc/roles/sfc-pre/tasks/main.yml b/plugins/odl_sfc/roles/sfc-pre/tasks/main.yml
new file mode 100755 (executable)
index 0000000..cf14e37
--- /dev/null
@@ -0,0 +1,18 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+- include: "{{ ansible_distribution }}.yml"
+  when:
+    - ansible_distribution == 'Ubuntu'
+    - odl_sfc is defined and odl_sfc == "Enable"
+
+- include: "{{ ansible_os_family }}.yml"
+  when:
+    - ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7'
+    - odl_sfc is defined and odl_sfc == "Enable"