diff options
Diffstat (limited to 'plugins/odl_cluster/tasks')
-rw-r--r-- | plugins/odl_cluster/tasks/control-agents-1.yml | 39 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-agents-2.yml | 87 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-agents-3.yml | 37 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-db-1.yml | 8 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-hosts-1.yml | 98 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-hosts-2.yml | 23 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-repos-1.yml | 17 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-servers-1.yml | 15 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-servers-2.yml | 34 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/control-servers-3.yml | 19 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/main.yml | 39 | ||||
-rw-r--r-- | plugins/odl_cluster/tasks/odl-post.yml | 32 |
12 files changed, 448 insertions, 0 deletions
diff --git a/plugins/odl_cluster/tasks/control-agents-1.yml b/plugins/odl_cluster/tasks/control-agents-1.yml new file mode 100644 index 00000000..dc071cc7 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-agents-1.yml @@ -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_cluster/tasks/control-agents-2.yml b/plugins/odl_cluster/tasks/control-agents-2.yml new file mode 100644 index 00000000..b138dc38 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-agents-2.yml @@ -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=physnet1: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=physnet1: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=physnet1: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=physnet1: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=physnet1:eth12 + when: + - inventory_hostname in groups['nova_compute'] + - odl_l3_agent == "Enable" diff --git a/plugins/odl_cluster/tasks/control-agents-3.yml b/plugins/odl_cluster/tasks/control-agents-3.yml new file mode 100644 index 00000000..66a0873f --- /dev/null +++ b/plugins/odl_cluster/tasks/control-agents-3.yml @@ -0,0 +1,37 @@ +--- + +- 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 physnet1:br-provider; + +- name: configure bridge_mappings for L3 + shell: | + crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet1:eth12; + when: odl_l3_agent == "Enable" + +- 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_cluster/tasks/control-db-1.yml b/plugins/odl_cluster/tasks/control-db-1.yml new file mode 100644 index 00000000..3cef9792 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-db-1.yml @@ -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_cluster/tasks/control-hosts-1.yml b/plugins/odl_cluster/tasks/control-hosts-1.yml new file mode 100644 index 00000000..133d98a7 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-hosts-1.yml @@ -0,0 +1,98 @@ +--- + +- 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 + shell: rm -rf {{ odl_home }}/data/*; diff --git a/plugins/odl_cluster/tasks/control-hosts-2.yml b/plugins/odl_cluster/tasks/control-hosts-2.yml new file mode 100644 index 00000000..b8d9403a --- /dev/null +++ b/plugins/odl_cluster/tasks/control-hosts-2.yml @@ -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_cluster/tasks/control-repos-1.yml b/plugins/odl_cluster/tasks/control-repos-1.yml new file mode 100644 index 00000000..8427e4f0 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-repos-1.yml @@ -0,0 +1,17 @@ +--- + +- name: download networking-odl + get_url: + url: "{{ odl_pip }}" + dest: /var/www/repo/os-releases/15.1.4/ubuntu-16.04-x86_64 + +- 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_cluster/tasks/control-servers-1.yml b/plugins/odl_cluster/tasks/control-servers-1.yml new file mode 100644 index 00000000..459c734a --- /dev/null +++ b/plugins/odl_cluster/tasks/control-servers-1.yml @@ -0,0 +1,15 @@ +--- + +- 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: turn off neutron-server on control node + service: name=neutron-server state=stopped diff --git a/plugins/odl_cluster/tasks/control-servers-2.yml b/plugins/odl_cluster/tasks/control-servers-2.yml new file mode 100644 index 00000000..d19d2db1 --- /dev/null +++ b/plugins/odl_cluster/tasks/control-servers-2.yml @@ -0,0 +1,34 @@ +--- + +- 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 physnet1:br-provider; + +- name: configure bridge_mappings for L3 + shell: | + crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs bridge_mappings physnet1: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; diff --git a/plugins/odl_cluster/tasks/control-servers-3.yml b/plugins/odl_cluster/tasks/control-servers-3.yml new file mode 100644 index 00000000..3d5c307b --- /dev/null +++ b/plugins/odl_cluster/tasks/control-servers-3.yml @@ -0,0 +1,19 @@ +--- + +- 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" diff --git a/plugins/odl_cluster/tasks/main.yml b/plugins/odl_cluster/tasks/main.yml new file mode 100644 index 00000000..44359056 --- /dev/null +++ b/plugins/odl_cluster/tasks/main.yml @@ -0,0 +1,39 @@ +--- + +- 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-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_cluster/tasks/odl-post.yml b/plugins/odl_cluster/tasks/odl-post.yml new file mode 100644 index 00000000..8794ff0c --- /dev/null +++ b/plugins/odl_cluster/tasks/odl-post.yml @@ -0,0 +1,32 @@ +--- + +- 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: clear karaf data + shell: rm -rf {{ odl_home }}/data/*; + 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'] |