diff --git a/.gitignore b/.gitignore index 62992a1..d2c6b6a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,89 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask instance folder +instance/ + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ +doc/build/ + +# PyBuilder +target/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +*.swp .build/ -**.swp +midonet-fuel-plugin-*.rpm diff --git a/README.rst b/README.rst index 2981dfd..748275d 100644 --- a/README.rst +++ b/README.rst @@ -7,7 +7,8 @@ Compatible versions: - MidoNet v2015.6 - Midokura Enterprise MidoNet 1.9 -How to build the plugin: +How to build the plugin +----------------------- - Install Fuel plugin builder (fpb) @@ -23,13 +24,22 @@ How to build the plugin: $ cd fuel-plugin-midonet $ fpb --build . -- Check if file midonet-fuel-plugin-3.0-3.0.1-1.noarch.rpm was created. +A *rpm* called `midonet-fuel-plugin-4.0-4.0.0-1.noarch.rpm` should be created in +the same directory. - :: +Follow the documentation to install and configure the plugin. You can read the +`rst` files in this very repository, or you can build a documentation file. - $ fuel plugins - id | name | version | package_version - ---|---------------------|---------|---------------- - 1 | midonet-fuel-plugin | 3.0.1 | 3.0.0 +How to build the documentation +------------------------------ -Please refer to `Plugin Guide <./doc/user-guide.rst>`_ for documentation +You need to have **Sphinx** installed in your computer. The Makefile provides +several target formats to do so. Go to the `doc` directory and run: + + make html + +or: + + make pdf + +You will need `rst2pdf` to run the latter. diff --git a/components.yaml b/components.yaml new file mode 100644 index 0000000..14d4c2b --- /dev/null +++ b/components.yaml @@ -0,0 +1,14 @@ +- name: 'network:neutron:midonet' + label: 'Neutron with MidoNet' + description: 'MidoNet is a production grade network virtualization software' + bind: !!pairs + - "cluster:net_provider": "neutron" + - "cluster:net_segment_type": "tun" + compatible: + - name: 'hypervisor:kvm' + - name: 'hypervisor:qemu' + incompatible: + - name: 'hypervisor:vmware' + description: 'MidoNet plugin is not compatible with VMware' + - name: 'additional_service:ironic' + description: 'MidoNet plugin is not compatible with Ironic' diff --git a/deployment_scripts/clean-neutron.sh b/deployment_scripts/clean-neutron.sh deleted file mode 100755 index 3dacca1..0000000 --- a/deployment_scripts/clean-neutron.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -source /root/openrc -router_id=`neutron router-list | grep "network_id" | awk '{print $2}'` -neutron router-gateway-clear $router_id -subnet_id=`neutron router-port-list $router_id | grep "subnet_id" | awk '{print $8}' | awk -F '\"' '{print $2}'` -neutron router-interface-delete $router_id $subnet_id -neutron router-delete $router_id -neutron subnet-delete $subnet_id -neutron net-delete net04 -neutron net-delete net04_ext diff --git a/deployment_scripts/install_dependencies.sh b/deployment_scripts/install_dependencies.sh deleted file mode 100755 index e03f01f..0000000 --- a/deployment_scripts/install_dependencies.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/bash - -osfamily=$(facter osfamily) -if [[ $osfamily == "RedHat" ]]; then - - # Install lsb library to get '$::lsbdistrelease' and '$::lsbmajdistrelease' - yum -y install redhat-lsb-core git - - # Install Cento5 Vault repos for Java 1.7 OpenJDK and dependencies - cat < /etc/yum.repos.d/Centos5-Vault.repo - -[base] -name=CentOS-\$releasever - Base -mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=os -#baseurl=http://mirror.centos.org/centos/\$releasever/os/\$basearch/ -gpgcheck=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#released updates -[updates] -name=CentOS-\$releasever - Updates -mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=updates -#baseurl=http://mirror.centos.org/centos/\$releasever/updates/\$basearch/ -gpgcheck=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that may be useful -[extras] -name=CentOS-\$releasever - Extras -mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=extras -#baseurl=http://mirror.centos.org/centos/\$releasever/extras/\$basearch/ -gpgcheck=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#additional packages that extend functionality of existing packages -[centosplus] -name=CentOS-\$releasever - Plus -mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=centosplus -#baseurl=http://mirror.centos.org/centos/\$releasever/centosplus/\$basearch/ -gpgcheck=0 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - -#contrib - packages by Centos Users -[contrib] -name=CentOS-\$releasever - Contrib -mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=contrib -#baseurl=http://mirror.centos.org/centos/\$releasever/contrib/\$basearch/ -gpgcheck=0 -enabled=0 -gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 - - -EOF - - cat < /etc/yum.repos.d/midonet-third-party.repo -[midonet-third-party] -name=Midonet third party repo -baseurl=http://repo.midonet.org/misc/RHEL/6/misc -enabled=1 -gpgcheck=1 -gpgkey=http://repo.midonet.org/packages.midokura.key -timeout=60 -EOF - - # Need to set these steps for a default zookeeper installation - yum install -y java-1.7.0-openjdk - mkdir -p /usr/java - ln -s /etc/alternatives/jre_1.7.0 /usr/java/default -else - apt-get install -y ruby-dev -fi - -gem install json --no-ri --no-rdoc --debug -gem install faraday --no-ri --no-rdoc --debug - -puppet module install ripienaar-module_data --version=0.0.3 --force -puppet module install puppetlabs-java --version=1.4.1 --ignore-dependencies --force -puppet module install puppetlabs-apt --version=1.8.0 --ignore-dependencies --force -puppet module install midonet-cassandra --version=1.0.4 --ignore-dependencies --force -puppet module install richardc-datacat --version=0.6.2 --force -puppet module install deric-zookeeper --version=0.3.9 --ignore-dependencies --force -puppet module install puppetlabs-concat --version=1.2.4 --ignore-dependencies --force -puppet module install nanliu-staging --version=1.0.4 --ignore-dependencies --force -puppet module install puppetlabs-tomcat --version=1.3.2 --ignore-dependencies --force -puppet module install midonet-midonet --version=2015.6.7 --ignore-dependencies --force - -if [[ ! -a /etc/puppet/modules/neutron/manifests/plugins/midonet.pp ]]; then - # Apply the released patch of Neutron Puppet to allow midonet manifests - wget https://github.com/openstack/puppet-neutron/commit/5e034e2af7ecb31cfcb758c7f43f47e46ce5677a.diff -O /etc/puppet/modules/neutron/midonet.diff - cd /etc/puppet/modules/neutron && patch -p1 < midonet.diff && cd - -fi diff --git a/deployment_scripts/install_midonet_puppet_modules.sh b/deployment_scripts/install_midonet_puppet_modules.sh new file mode 100755 index 0000000..18f640d --- /dev/null +++ b/deployment_scripts/install_midonet_puppet_modules.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +puppet module install ripienaar-module_data --version=0.0.3 --force +puppet module install puppetlabs-java --version=1.4.1 --ignore-dependencies --force +puppet module install midonet-cassandra --version=1.0.4 --ignore-dependencies --force +puppet module install deric-zookeeper --version=0.3.9 --ignore-dependencies --force +puppet module install puppetlabs-tomcat --version=1.3.2 --ignore-dependencies --force +puppet module install midonet-midonet --version=2015.6.7 --ignore-dependencies --force + +gem install faraday # This is needed by the midonet providers diff --git a/deployment_scripts/puppet/files/midonet-fuel-plugin.yaml b/deployment_scripts/puppet/files/midonet-fuel-plugin.yaml new file mode 100644 index 0000000..18a2eb2 --- /dev/null +++ b/deployment_scripts/puppet/files/midonet-fuel-plugin.yaml @@ -0,0 +1,3 @@ +neutron::core_plugin: 'midonet.neutron.plugin_v1.MidonetPluginV2' +neutron::agents::dhcp::interface_driver: 'neutron.agent.linux.interface.MidonetInterfaceDriver' +neutron::agents::dhcp::dhcp_driver: 'midonet.neutron.agent.midonet_driver.DhcpNoOpDriver' diff --git a/deployment_scripts/puppet/files/startup.conf b/deployment_scripts/puppet/files/startup.conf index be3b9ef..14992b5 100644 --- a/deployment_scripts/puppet/files/startup.conf +++ b/deployment_scripts/puppet/files/startup.conf @@ -2,6 +2,5 @@ start on runlevel [123456] stop on shutdown script - puppet apply --modulepath=/etc/fuel/plugins/midonet-fuel-plugin-3.0/puppet/modules:/etc/puppet/modules /etc/fuel/plugins/midonet-fuel-plugin-3.0/puppet/manifests/midonet-gateway-bgp.pp + puppet apply --modulepath=/etc/fuel/plugins/midonet-fuel-plugin-4.0/puppet/modules:/etc/puppet/modules /etc/fuel/plugins/midonet-fuel-plugin-4.0/puppet/manifests/midonet-gateway-bgp.pp end script - diff --git a/deployment_scripts/puppet/manifests/midonet-compute-nova.pp b/deployment_scripts/puppet/manifests/midonet-compute-nova.pp new file mode 100644 index 0000000..906ef81 --- /dev/null +++ b/deployment_scripts/puppet/manifests/midonet-compute-nova.pp @@ -0,0 +1,129 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: neutron-compute-nova.pp') + +$network_scheme = hiera_hash('network_scheme', {}) +prepare_network_config($network_scheme) + +$use_neutron = hiera('use_neutron', false) + +include nova::params +$neutron_config = hiera_hash('neutron_config', {}) +$neutron_integration_bridge = 'br-int' +$nova_hash = hiera_hash('nova', {}) +$libvirt_vif_driver = pick($nova_hash['libvirt_vif_driver'], 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver') + +$management_vip = hiera('management_vip') +$service_endpoint = hiera('service_endpoint', $management_vip) +$admin_password = try_get_value($neutron_config, 'keystone/admin_password') +$admin_tenant_name = try_get_value($neutron_config, 'keystone/admin_tenant', 'services') +$admin_username = try_get_value($neutron_config, 'keystone/admin_user', 'neutron') +$region_name = hiera('region', 'RegionOne') +$auth_api_version = 'v2.0' +$ssl_hash = hiera_hash('use_ssl', {}) + +$admin_identity_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'admin', 'protocol', 'http') +$admin_identity_address = get_ssl_property($ssl_hash, {}, 'keystone', 'admin', 'hostname', [$service_endpoint, $management_vip]) + +$neutron_internal_protocol = get_ssl_property($ssl_hash, {}, 'neutron', 'internal', 'protocol', 'http') +$neutron_endpoint = get_ssl_property($ssl_hash, {}, 'neutron', 'internal', 'hostname', [hiera('neutron_endpoint', ''), $management_vip]) + +$admin_identity_uri = "${admin_identity_protocol}://${admin_identity_address}:35357" +$admin_auth_url = "${admin_identity_uri}/${auth_api_version}" +$neutron_url = "${neutron_internal_protocol}://${neutron_endpoint}:9696" + +$nova_migration_ip = get_network_role_property('nova/migration', 'ipaddr') + +service { 'libvirt' : + ensure => 'running', + enable => true, + # Workaround for bug LP #1469308 + # also service name for Ubuntu and Centos is the same. + name => 'libvirtd', + provider => $nova::params::special_service_provider, +} + +exec { 'destroy_libvirt_default_network': + command => 'virsh net-destroy default', + onlyif => 'virsh net-info default | grep -qE "Active:.* yes"', + path => [ '/bin', '/sbin', '/usr/bin', '/usr/sbin' ], + tries => 3, + require => Service['libvirt'], +} + +exec { 'undefine_libvirt_default_network': + command => 'virsh net-undefine default', + onlyif => 'virsh net-info default 2>&1 > /dev/null', + path => [ '/bin', '/sbin', '/usr/bin', '/usr/sbin' ], + tries => 3, + require => Exec['destroy_libvirt_default_network'], +} + +Service['libvirt'] ~> Exec['destroy_libvirt_default_network'] + +# script called by qemu needs to manipulate the tap device +file_line { 'clear_emulator_capabilities': + path => '/etc/libvirt/qemu.conf', + line => 'clear_emulator_capabilities = 0', + notify => Service['libvirt'] +} + +class { 'nova::compute::neutron': + libvirt_vif_driver => $libvirt_vif_driver, +} + +nova_config { + 'DEFAULT/linuxnet_interface_driver': value => 'nova.network.linux_net.LinuxOVSInterfaceDriver'; + 'DEFAULT/linuxnet_ovs_integration_bridge': value => $neutron_integration_bridge; + 'DEFAULT/network_device_mtu': value => '65000'; + 'DEFAULT/my_ip': value => $nova_migration_ip; +} + +class { 'nova::network::neutron' : + neutron_admin_password => $admin_password, + neutron_admin_tenant_name => $admin_tenant_name, + neutron_region_name => $region_name, + neutron_admin_username => $admin_username, + neutron_admin_auth_url => $admin_auth_url, + neutron_url => $neutron_url, + neutron_ovs_bridge => $neutron_integration_bridge, +} + +augeas { 'sysctl-net.bridge.bridge-nf-call-arptables': + context => '/files/etc/sysctl.conf', + changes => "set net.bridge.bridge-nf-call-arptables '1'", + before => Service['libvirt'], +} +augeas { 'sysctl-net.bridge.bridge-nf-call-iptables': + context => '/files/etc/sysctl.conf', + changes => "set net.bridge.bridge-nf-call-iptables '1'", + before => Service['libvirt'], +} +augeas { 'sysctl-net.bridge.bridge-nf-call-ip6tables': + context => '/files/etc/sysctl.conf', + changes => "set net.bridge.bridge-nf-call-ip6tables '1'", + before => Service['libvirt'], +} + +service { 'nova-compute': + ensure => 'running', + name => $::nova::params::compute_service_name, +} +Nova_config<| |> ~> Service['nova-compute'] + +if($::operatingsystem == 'Ubuntu') { + tweaks::ubuntu_service_override { 'nova-network': + package_name => 'nova-network', + } +} diff --git a/deployment_scripts/puppet/manifests/midonet-define-repositories.pp b/deployment_scripts/puppet/manifests/midonet-define-repositories.pp index 0167202..d46db93 100644 --- a/deployment_scripts/puppet/manifests/midonet-define-repositories.pp +++ b/deployment_scripts/puppet/manifests/midonet-define-repositories.pp @@ -1,4 +1,18 @@ -# Define the midonet repositories based on the settings file +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-define-repositories.pp') + $midonet_settings = hiera('midonet-fuel-plugin') $mem = $midonet_settings['mem'] $mem_version = $midonet_settings['mem_version'] @@ -27,48 +41,41 @@ zg== =zF5K -----END PGP PUBLIC KEY BLOCK-----" -if $mem { - case $operatingsystem { - 'CentOS': { - class { '::midonet::repository': - midonet_repo => "http://${mem_user}:${mem_password}@yum.midokura.com/repo/${mem_version}/stable/RHEL", - manage_distro_repo => false, - midonet_key_url => "http://${mem_user}:${mem_password}@yum.midokura.com/repo/RPM-GPG-KEY-midokura", - midonet_openstack_repo => "http://${mem_user}:${mem_password}@yum.midokura.com/repo/openstack-kilo/stable/RHEL", - midonet_stage => '', - openstack_release => 'kilo' - } - } - 'Ubuntu': { - apt::key { 'BC4E4E90DDA81C21396081CC67B38D3A054314CD': - key_content => $key_content - } -> +include apt +include apt::update - class { '::midonet::repository': - midonet_repo => "http://${mem_user}:${mem_password}@apt.midokura.com/midonet/${mem_version}/stable", - manage_distro_repo => false, - midonet_openstack_repo => "http://${mem_user}:${mem_password}@apt.midokura.com/openstack/kilo/stable", - midonet_stage => 'trusty', - openstack_release => 'kilo' - } - } - } -} else { - case $operatingsystem { - 'CentOS': { - class { '::midonet::repository': - midonet_repo => "http://repo.midonet.org/midonet/${oss_version}/RHEL", - manage_distro_repo => false, - openstack_release => 'kilo' - } - } - 'Ubuntu': { - class { '::midonet::repository': - midonet_repo => "http://repo.midonet.org/midonet/${oss_version}", - manage_distro_repo => false, - openstack_release => 'kilo' - } - } - } +# MidoNet Neutron plugin Liberty key +apt::source {'midonet_neutron_liberty': + comment => 'midonet plugin repository', + location => 'http://builds.midonet.org/openstack-liberty', + release => 'stable', + key => '99143E75', + key_source => 'https://builds.midonet.org/midorepo.key', + include_src => false } +if $mem { + apt::key { 'BC4E4E90DDA81C21396081CC67B38D3A054314CD': + key_content => $key_content + } -> + + # MEM 1.9 public key + apt::source {'midonet_oss': + comment => 'midonet repository', + location => "http://${mem_user}:${mem_password}@apt.midokura.com/midonet/${mem_version}/stable", + release => 'trusty', + include_src => false + } + +} else { + + # OSS 2015.06 + apt::source {'midonet_oss': + comment => 'midonet repository', + location => 'http://repo.midonet.org/midonet/v2015.06', + release => 'stable', + key => '50F18FCF', + key_source => 'http://repo.midonet.org/packages.midokura.key', + include_src => false + } +} diff --git a/deployment_scripts/puppet/manifests/midonet-delete-datapaths.pp b/deployment_scripts/puppet/manifests/midonet-delete-datapaths.pp deleted file mode 100644 index c2e434a..0000000 --- a/deployment_scripts/puppet/manifests/midonet-delete-datapaths.pp +++ /dev/null @@ -1,28 +0,0 @@ -$service_path = $operatingsystem ? { - 'CentOS' => '/sbin:/bin', - 'Ubuntu' => '/usr/bin:/usr/sbin:/sbin:/bin' -} - -exec {'service midolman stop': - path => $service_path, - onlyif => 'ps aux | grep midolman | grep -v grep' -} -> - -exec {'/usr/bin/mm-dpctl --delete-dp ovs-system': - path => "/usr/bin:/usr/sbin:/bin", - onlyif => '/usr/bin/mm-dpctl --show-dp ovs-system' -} -> - -exec {'/usr/bin/mm-dpctl --delete-dp midonet': - path => "/usr/bin:/usr/sbin:/bin", - onlyif => '/usr/bin/mm-dpctl --show-dp midonet' -} -> - -exec {'sleep 3': - path => $service_path -} -> - -exec {'service midolman start': - path => $service_path -} - diff --git a/deployment_scripts/puppet/manifests/midonet-disable-services.pp b/deployment_scripts/puppet/manifests/midonet-disable-services.pp deleted file mode 100644 index 78f477e..0000000 --- a/deployment_scripts/puppet/manifests/midonet-disable-services.pp +++ /dev/null @@ -1,68 +0,0 @@ -# Extract hiera data -$network_metadata = hiera_hash('network_metadata') -$roles = $network_metadata['nodes']["$::hostname"]['node_roles'] - -$ovs_agent_name = $operatingsystem ? { - 'CentOS' => 'neutron-openvswitch-agent', - 'Ubuntu' => 'neutron-plugin-openvswitch-agent', -} - -$l3_agent_name = $operatingsystem ? { - 'CentOS' => 'neutron-l3-agent', - 'Ubuntu' => 'neutron-l3-agent' -} - -$dhcp_agent_name = $operatingsystem ? { - 'CentOS' => 'neutron-dhcp-agent', - 'Ubuntu' => 'neutron-dhcp-agent' -} - -$metadata_agent_name = $operatingsystem ? { - 'CentOS' => 'neutron-metadata-agent', - 'Ubuntu' => 'neutron-metadata-agent' -} - -if member($roles, 'primary-controller') { - cs_resource { "p_${ovs_agent_name}": - ensure => absent, - } - exec {'stop-dhcp-agent': - command => 'crm resource stop p_neutron-dhcp-agent', - path => '/usr/bin:/usr/sbin' - } -> - exec {'stop-metadata-agent': - command => 'crm resource stop p_neutron-metadata-agent', - path => '/usr/bin:/usr/sbin' - } -> - exec {'stop-l3-agent': - command => 'crm resource stop p_neutron-l3-agent', - path => '/usr/bin:/usr/sbin' - } -> - exec {'delete-l3-agent': - command => 'crm configure delete p_neutron-l3-agent', - path => '/usr/bin:/usr/sbin' - } -} else { - service {$ovs_agent_name: - ensure => stopped, - enable => false, - } - - service {$l3_agent_name: - ensure => stopped, - enable => false, - } - - service {$dhcp_agent_name: - ensure => stopped - } - - service {$metadata_agent_name: - ensure => stopped - } -} - - -service { 'neutron-server': - ensure => stopped -} diff --git a/deployment_scripts/puppet/manifests/midonet-enable-ip-forward.pp b/deployment_scripts/puppet/manifests/midonet-enable-ip-forward.pp index 561f11e..3b9ad95 100644 --- a/deployment_scripts/puppet/manifests/midonet-enable-ip-forward.pp +++ b/deployment_scripts/puppet/manifests/midonet-enable-ip-forward.pp @@ -1,4 +1,4 @@ -# Copyright 2015 Mirantis, Inc. +# Copyright 2016 Midokura, SARL. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -11,6 +11,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +notice('MODULAR: midonet-enable-ip.forward.pp') sysctl::value { 'net.ipv4.ip_forward': value => '1' diff --git a/deployment_scripts/puppet/manifests/midonet-install-nova-network.pp b/deployment_scripts/puppet/manifests/midonet-ensure-rootwrap.pp similarity index 100% rename from deployment_scripts/puppet/manifests/midonet-install-nova-network.pp rename to deployment_scripts/puppet/manifests/midonet-ensure-rootwrap.pp diff --git a/deployment_scripts/puppet/manifests/midonet-gateway-bgp.pp b/deployment_scripts/puppet/manifests/midonet-gateway-bgp.pp index 92bab05..b8299e2 100644 --- a/deployment_scripts/puppet/manifests/midonet-gateway-bgp.pp +++ b/deployment_scripts/puppet/manifests/midonet-gateway-bgp.pp @@ -17,10 +17,6 @@ $bgp_subnet = split($midonet_settings['bgp_cidr'], '/') $bgp_subnet_ip = $bgp_subnet[0] $bgp_subnet_cidr = $bgp_subnet[1] -notify {"peers": - message => "floating neeet si $remote_peers" -} - exec {"set down external bridge": path => "/usr/bin:/usr/sbin:/sbin", command => "ip link set dev br-ex down" @@ -65,7 +61,7 @@ exec {"set up external bridge": file {"/etc/init/midonet-network.conf": ensure => present, - source => "/etc/fuel/plugins/midonet-fuel-plugin-3.0/puppet/files/startup.conf" + source => "/etc/fuel/plugins/midonet-fuel-plugin-4.0/puppet/files/startup.conf" } -> midonet_gateway { $::fqdn: diff --git a/deployment_scripts/puppet/manifests/midonet-host-registry.pp b/deployment_scripts/puppet/manifests/midonet-host-registry.pp index ecbac7e..399b47b 100644 --- a/deployment_scripts/puppet/manifests/midonet-host-registry.pp +++ b/deployment_scripts/puppet/manifests/midonet-host-registry.pp @@ -1,3 +1,18 @@ +# Copyright 2015 Midokura SARL. +# +# Licensed 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. +notice('MODULAR: midonet-host-registry.pp') + # Extract data from hiera $api_ip = hiera('management_vip') $access_data = hiera_hash('access') @@ -21,12 +36,12 @@ exec {'service midolman restart': } -> midonet_host_registry {$::fqdn: + ensure => present, midonet_api_url => "http://${api_ip}:8081", username => $username, password => $password, tenant_name => $tenant_name, underlay_ip_address => $::ipaddress_br_mesh, tunnelzone_type => $tz_type, - tunnelzone_name => 'tzonefuel', - ensure => present + tunnelzone_name => 'tzonefuel' } diff --git a/deployment_scripts/puppet/manifests/midonet-install-agent.pp b/deployment_scripts/puppet/manifests/midonet-install-agent.pp index 7c062f5..fed4398 100644 --- a/deployment_scripts/puppet/manifests/midonet-install-agent.pp +++ b/deployment_scripts/puppet/manifests/midonet-install-agent.pp @@ -1,3 +1,18 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-install-agent.pp') + # Extract data from hiera $network_metadata = hiera_hash('network_metadata') $neutron_config = hiera_hash('neutron_config') @@ -33,11 +48,11 @@ service {$ovsdb_service_name: } -> package {$openvswitch_package_neutron: - ensure => absent + ensure => purged } -> package {$openvswitch_package: - ensure => absent + ensure => purged } -> class {'::midonet::midonet_agent': @@ -65,3 +80,8 @@ if $segmentation_type =='tun' { } } +exec {'/usr/bin/mm-dpctl --delete-dp ovs-system': + path => "/usr/bin:/usr/sbin:/bin", + onlyif => '/usr/bin/mm-dpctl --show-dp ovs-system', + require => Class['::midonet::midonet_agent'] +} diff --git a/deployment_scripts/puppet/manifests/midonet-install-api.pp b/deployment_scripts/puppet/manifests/midonet-install-api.pp index 00617e6..030a73c 100644 --- a/deployment_scripts/puppet/manifests/midonet-install-api.pp +++ b/deployment_scripts/puppet/manifests/midonet-install-api.pp @@ -1,3 +1,18 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-install-api.pp') + # Extract data from hiera $network_metadata = hiera_hash('network_metadata') $controllers_map = get_nodes_hash_by_roles($network_metadata, ['controller', 'primary-controller']) @@ -11,6 +26,11 @@ $keystone_data = hiera_hash('keystone') $access_data = hiera_hash('access') $public_ssl_hash = hiera('public_ssl') +file_line {'disable_ipv6': + path => '/etc/default/tomcat7', + line => 'JAVA_OPTS="${JAVA_OPTS} -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses"' +} -> + class {'::midonet::midonet_api': zk_servers => $zoo_ips_hash, keystone_auth => true, diff --git a/deployment_scripts/puppet/manifests/midonet-neutron-configure.pp b/deployment_scripts/puppet/manifests/midonet-neutron-configure.pp new file mode 100644 index 0000000..fcba69c --- /dev/null +++ b/deployment_scripts/puppet/manifests/midonet-neutron-configure.pp @@ -0,0 +1,137 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-configure-neutron.pp') + +# Neutron data +$amqp_port = '5673' +$rabbit_hash = hiera('rabbit_hash', {}) +$management_vip = hiera('management_vip') +$service_endpoint = hiera('service_endpoint', $management_vip) +$neutron_config = hiera('quantum_settings') +$neutron_db_password = $neutron_config['database']['passwd'] +$neutron_user_password = $neutron_config['keystone']['admin_password'] + +# Neutron plugin data +$access_data = hiera_hash('access') +$username = $access_data['user'] +$password = $access_data['password'] +$tenant_name = $access_data['tenant'] + +$openstack_network_hash = hiera_hash('openstack_network', { }) +$use_syslog = hiera('use_syslog', true) +$use_stderr = hiera('use_stderr', false) +$verbose = pick($openstack_network_hash['verbose'], hiera('verbose', true)) + + +# Unfortunately, core_plugin in the 'openstack-network-common-config' +# task is hardcoded. The core_plugin value for midonet is overrided +# in hiera file, so running again class{'::neutron'} should modify +# the core_plugin value in /etc/neutron/neutron.conf +# +# Hoping that Fuel will make the core plugin configurable and we +# can remove this step +class {'::neutron': + verbose => $verbose, + debug => false, + use_syslog => $use_syslog, + use_stderr => $use_stderr, + log_facility => 'LOG_USER', + base_mac => 'fa:16:3e:00:00:00', + service_plugins => [], + allow_overlapping_ips => true, + mac_generation_retries => '32', + dhcp_lease_duration => '600', + dhcp_agents_per_network => '2', + report_interval => '10', + rabbit_user => $rabbit_hash['user'], + rabbit_host => ['localhost'], + rabbit_hosts => split(hiera('amqp_hosts', ''), ','), + rabbit_port => '5672', + rabbit_password => $rabbit_hash['password'], + kombu_reconnect_delay => '5.0', + network_device_mtu => undef, + advertise_mtu => true +} -> + +# NOTE: Don't comment these lines. Since we have changed the name +# of the package, we are trying to get rid of this restriction: +# https://github.com/openstack/puppet-neutron/blob/7.0.0/manifests/plugins/midonet.pp#L108 +package {'python-neutron-plugin-midonet': + ensure => absent +} + +# The real plugin package +package {'python-networking-midonet': + ensure => present +} + +file {'/etc/default/neutron-server': + ensure => present, + owner => 'root', + group => 'root', + mode => '0644' +} -> +class {'::neutron::plugins::midonet': + midonet_api_ip => $service_endpoint, + midonet_api_port => '8081', + keystone_username => $username, + keystone_password => $password, + keystone_tenant => $tenant_name +} + +class { '::neutron::server': + sync_db => $primary_controller ? {true => 'primary', default => 'slave'}, + auth_host => $service_endpoint, + auth_port => '35357', + auth_protocol => 'http', + auth_password => $neutron_user_password, + auth_tenant => 'services', + auth_user => 'neutron', + auth_uri => "http://${service_endpoint}:35357/v2.0", + + database_retry_interval => 2, + database_connection => "mysql://neutron:${neutron_db_password}@${service_endpoint}/neutron?&read_timeout=60", + database_max_retries => -1, + + agent_down_time => 15, + + api_workers => min($::processorcount + 0, 50 + 0), + rpc_workers => 0, +} + +# Nova notifications needed data +$ssl_hash = hiera_hash('use_ssl', {}) +$nova_endpoint = hiera('nova_endpoint', $management_vip) +$nova_hash = hiera_hash('nova', {}) +$nova_internal_protocol = get_ssl_property($ssl_hash, {}, 'nova', 'internal', 'protocol', 'http') +$nova_internal_endpoint = get_ssl_property($ssl_hash, {}, 'nova', 'internal', 'hostname', [$nova_endpoint]) +$admin_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'admin', 'protocol', 'http') +$admin_auth_endpoint = get_ssl_property($ssl_hash, {}, 'keystone', 'admin', 'hostname', [$service_endpoint, $management_vip]) + +# Actual attributes +$nova_url = "${nova_internal_protocol}://${nova_internal_endpoint}:8774/v2" +$nova_admin_auth_url = "${admin_auth_protocol}://${admin_auth_endpoint}:35357/" +$nova_auth_user = pick($nova_hash['user'], 'nova') +$nova_auth_tenant = pick($nova_hash['tenant'], 'services') +$nova_auth_password = $nova_hash['user_password'] +$auth_region = hiera('region', 'RegionOne') + +class { 'neutron::server::notifications': + nova_url => $nova_url, + auth_url => $nova_admin_auth_url, + username => $nova_auth_user, + tenant_name => $nova_auth_tenant, + password => $nova_auth_password, + region_name => $auth_region, +} diff --git a/deployment_scripts/puppet/manifests/midonet-neutron-networks.pp b/deployment_scripts/puppet/manifests/midonet-neutron-networks.pp new file mode 100644 index 0000000..ce46c09 --- /dev/null +++ b/deployment_scripts/puppet/manifests/midonet-neutron-networks.pp @@ -0,0 +1,85 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-neutron-networks.pp') + +# Extract data from hiera +$access_data = hiera_hash('access') +$keystone_admin_tenant = $access_data['tenant'] +$network_metadata = hiera_hash('network_metadata') +$node_roles = $network_metadata['nodes'][$::hostname]['node_roles'] +$neutron_settings = hiera('neutron_config') +$external_net_name = $neutron_settings['default_floating_net'] +$tenant_net_name = $neutron_settings['default_private_net'] +$predefined_nets = $neutron_settings['predefined_networks'] +$tenant_net = $predefined_nets[$tenant_net_name] +$external_net = $predefined_nets[$external_net_name] + +# Plugin settings data (overrides $external_net l3 values) +$midonet_settings = hiera_hash('midonet-fuel-plugin') +$tz_type = $midonet_settings['tunnel_type'] +$floating_range_start = $midonet_settings['floating_ip_range_start'] +$floating_range_end = $midonet_settings['floating_ip_range_end'] +$floating_cidr = $midonet_settings['floating_cidr'] +$floating_gateway_ip = $midonet_settings['gateway'] + +$allocation_pools = "start=$floating_range_start,end=$floating_range_end" + +service { 'neutron-server': + ensure => running, +} + +neutron_network { $tenant_net_name: + ensure => present, + router_external => $tenant_net['L2']['router_ext'], + tenant_name => $tenant_net['tenant'], + shared => $tenant_net['shared'] +} -> + +neutron_subnet { "${tenant_net_name}__subnet": + ensure => present, + cidr => $tenant_net['L3']['subnet'], + network_name => $tenant_net_name, + tenant_name => $tenant_net['tenant'], + gateway_ip => $tenant_net['L3']['gateway'], + enable_dhcp => $tenant_net['L3']['enable_dhcp'], + dns_nameservers => $tenant_net['L3']['nameservers'] +} -> + +neutron_network { $external_net_name: + ensure => present, + router_external => $external_net['L2']['router_ext'], + tenant_name => $external_net['tenant'], + shared => $external_net['shared'] +} -> + +neutron_subnet { "${external_net_name}__subnet": + ensure => present, + cidr => $floating_cidr, + network_name => $external_net_name, + tenant_name => $external_net['tenant'], + gateway_ip => $floating_gateway_ip, + enable_dhcp => $external_net['L3']['enable_dhcp'], + dns_nameservers => $external_net['L3']['nameservers'], + allocation_pools => $allocation_pools +} -> + +neutron_router { 'mido_router': + ensure => present, + tenant_name => $external_net['tenant'], + gateway_network_name => $external_net_name, +} -> + +neutron_router_interface { "mido_router:${tenant_net_name}__subnet": + ensure => present, +} diff --git a/deployment_scripts/puppet/manifests/midonet-nsdb.pp b/deployment_scripts/puppet/manifests/midonet-nsdb.pp index f1d7f07..8bcdf85 100644 --- a/deployment_scripts/puppet/manifests/midonet-nsdb.pp +++ b/deployment_scripts/puppet/manifests/midonet-nsdb.pp @@ -11,6 +11,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +notice('MODULAR: midonet-nsdb.pp') # Extract data from hiera $fuel_settings = parseyaml($astute_settings_yaml) diff --git a/deployment_scripts/puppet/manifests/midonet-override-hiera.pp b/deployment_scripts/puppet/manifests/midonet-override-hiera.pp new file mode 100644 index 0000000..346aa7e --- /dev/null +++ b/deployment_scripts/puppet/manifests/midonet-override-hiera.pp @@ -0,0 +1,30 @@ +# Copyright 2016 Midokura, SARL. +# +# Licensed 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. +notice('MODULAR: midonet-override-hiera.pp') + +$midonet_settings = hiera('midonet-fuel-plugin') +$mem = $midonet_settings['mem'] + +file {'/etc/hiera/plugins/midonet-fuel-plugin.yaml': + ensure => file, + source => '/etc/fuel/plugins/midonet-fuel-plugin-4.0/puppet/files/midonet-fuel-plugin.yaml' +} + +if $mem == false { + # MidoNet 2015.06 OSS does not support fernet tokens + file_line {'token_provider': + path => '/etc/hiera/plugins/midonet-fuel-plugin.yaml', + line => 'token_provider: uuid' + } +} diff --git a/deployment_scripts/puppet/manifests/midonet-reconfigure-neutron.pp b/deployment_scripts/puppet/manifests/midonet-reconfigure-neutron.pp deleted file mode 100644 index 54c4872..0000000 --- a/deployment_scripts/puppet/manifests/midonet-reconfigure-neutron.pp +++ /dev/null @@ -1,71 +0,0 @@ -# Neutron data -$amqp_port = '5673' -$rabbit_hash = hiera('rabbit_hash', {}) -$service_endpoint = hiera('management_vip') -$neutron_config = hiera('quantum_settings') -$neutron_db_password = $neutron_config['database']['passwd'] -$neutron_user_password = $neutron_config['keystone']['admin_password'] - -# Neutron plugin data -$access_data = hiera_hash('access') -$username = $access_data['user'] -$password = $access_data['password'] -$tenant_name = $access_data['tenant'] - -class {'::neutron': - verbose => false, - debug => false, - use_syslog => false, - log_facility => 'LOG_USER', - base_mac => 'fa:16:3e:00:00:00', - core_plugin => 'neutron.plugins.midonet.plugin.MidonetPluginV2', - service_plugins => [], - allow_overlapping_ips => true, - mac_generation_retries => 32, - dhcp_lease_duration => 600, - dhcp_agents_per_network => 2, - report_interval => 5, - rabbit_user => $rabbit_hash['user'], - rabbit_host => ['localhost'], - rabbit_hosts => split(hiera('amqp_hosts', ''), ','), - rabbit_port => '5672', - rabbit_password => $rabbit_hash['password'], - kombu_reconnect_delay => '5.0', - network_device_mtu => undef, -} - -class {'::neutron::plugins::midonet': - midonet_api_ip => $service_endpoint, - midonet_api_port => '8081', - keystone_username => $username, - keystone_password => $password, - keystone_tenant => $tenant_name -} - -class { '::neutron::server': - sync_db => $primary_controller ? {true => 'primary', default => 'slave'}, - auth_host => $service_endpoint, - auth_port => '35357', - auth_protocol => 'http', - auth_password => $neutron_user_password, - auth_tenant => 'services', - auth_user => 'neutron', - auth_uri => "http://${service_endpoint}:35357/v2.0", - - database_retry_interval => 2, - database_connection => "mysql://neutron:${neutron_db_password}@${service_endpoint}/neutron?&read_timeout=60", - database_max_retries => -1, - - agent_down_time => 15, - - api_workers => min($::processorcount + 0, 50 + 0), - rpc_workers => 0, -} - -class { '::neutron::agents::dhcp': - debug => false, - interface_driver => 'neutron.agent.linux.interface.MidonetInterfaceDriver', - dhcp_driver => 'midonet.neutron.agent.midonet_driver.DhcpNoOpDriver', - enable_isolated_metadata => true, - enabled => true, -} diff --git a/deployment_scripts/puppet/manifests/midonet-recreate-neutron-db.pp b/deployment_scripts/puppet/manifests/midonet-recreate-neutron-db.pp deleted file mode 100644 index f3f2402..0000000 --- a/deployment_scripts/puppet/manifests/midonet-recreate-neutron-db.pp +++ /dev/null @@ -1,22 +0,0 @@ -exec { 'drop_neutron_db': - command => "mysql -e 'drop database if exists neutron;'", - path => '/usr/bin', -} - -exec { 'create_neutron_db': - command => "mysql -e 'create database neutron character set utf8;'", - path => '/usr/bin', -} - -exec { 'grant_neutron_db': - command => "mysql -e \"grant all on neutron.* to 'neutron'@'%';\"", - path => '/usr/bin', -} - -exec { 'neutron_db_sync': - command => 'neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head', - path => '/usr/bin', - timeout => 500, -} - -Exec['drop_neutron_db'] -> Exec['create_neutron_db'] -> Exec['grant_neutron_db'] -> Exec['neutron_db_sync'] diff --git a/deployment_scripts/puppet/manifests/midonet-replace-guess-func.pp b/deployment_scripts/puppet/manifests/midonet-replace-guess-func.pp new file mode 100644 index 0000000..09479a1 --- /dev/null +++ b/deployment_scripts/puppet/manifests/midonet-replace-guess-func.pp @@ -0,0 +1,22 @@ +# Copyright 2015 Midokura SARL. +# +# Licensed 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. +notice('MODULAR: midonet-replace-guess-func.pp') + +# NOTE: This replacement may be only needed on Ubuntu hosts +file_line { 'replace_guess': + path => '/usr/share/neutron-common/plugin_guess_func', + match => '"neutron.plugins.midonet.plugin.MidonetPluginV2"', + line => "\t\"midonet.neutron.plugin_v1.MidonetPluginV2\")", + multiple => true +} diff --git a/deployment_scripts/puppet/manifests/midonet-restart-neutron.pp b/deployment_scripts/puppet/manifests/midonet-restart-neutron.pp deleted file mode 100644 index 0ab4fa1..0000000 --- a/deployment_scripts/puppet/manifests/midonet-restart-neutron.pp +++ /dev/null @@ -1,92 +0,0 @@ -# Extract data from hiera -$access_data = hiera_hash('access') -$keystone_admin_tenant = $access_data['tenant'] -$network_metadata = hiera_hash('network_metadata') -$node_roles = $network_metadata['nodes'][$::hostname]['node_roles'] -$neutron_settings = hiera('quantum_settings') -$nets = $neutron_settings['predefined_networks'] -$segment_id = $nets['net04']['L2']['segment_id'] -$vm_net_l3 = $nets['net04']['L3'] - -# Plugin settings data -$midonet_settings = hiera_hash('midonet-fuel-plugin') -$tz_type = $midonet_settings['tunnel_type'] -$range_start = $midonet_settings['floating_ip_range_start'] -$range_end = $midonet_settings['floating_ip_range_end'] - -$vm_net = { shared => false, - "L2" => { network_type => $tz_type, - router_ext => false, - physnet => false, - segment_id => $segment_id, - }, - "L3" => $vm_net_l3, - tenant => 'admin' - } - -$allocation_pools = "start=$range_start,end=$range_end" - -service { 'neutron-server': - ensure => running, -} - -if member($node_roles, 'primary-controller') { - exec {'refresh-dhcp-agent': - command => 'crm resource start p_neutron-dhcp-agent', - path => '/usr/bin:/usr/sbin', - tries => 3, - try_sleep => 10, - } -> - exec {'refresh-metadata-agent': - command => 'crm resource start p_neutron-metadata-agent', - path => '/usr/bin:/usr/sbin', - tries => 3, - try_sleep => 10, - } -> - - neutron_network { 'net04': - ensure => present, - router_external => $nets['net04']['L2']['router_ext'], - tenant_name => $nets['net04']['tenant'], - shared => $nets['net04']['shared'] - } -> - - neutron_subnet { "net04__subnet": - ensure => present, - cidr => $nets['net04']['L3']['subnet'], - network_name => 'net04', - tenant_name => $nets['net04']['tenant'], - gateway_ip => $nets['net04']['L3']['gateway'], - enable_dhcp => $nets['net04']['L3']['enable_dhcp'], - dns_nameservers => $nets['net04']['L3']['nameservers'] - } -> - - neutron_network { 'net04_ext': - ensure => present, - router_external => $nets['net04_ext']['L2']['router_ext'], - tenant_name => $nets['net04_ext']['tenant'], - shared => $nets['net04_ext']['shared'] - } -> - - neutron_subnet { "net04_ext__subnet": - ensure => present, - cidr => $midonet_settings['floating_cidr'], - network_name => 'net04_ext', - tenant_name => $nets['net04_ext']['tenant'], - gateway_ip => $midonet_settings['gateway'], - enable_dhcp => $nets['net04_ext']['L3']['enable_dhcp'], - dns_nameservers => $nets['net04_ext']['L3']['nameservers'], - allocation_pools => $allocation_pools - } -> - - neutron_router { 'router04': - ensure => present, - tenant_name => $nets['net04_ext']['tenant'], - gateway_network_name => 'net04_ext', - } -> - - neutron_router_interface { "router04:net04__subnet": - ensure => present, - } - -} diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index d6f86a3..7c1ce65 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -1,17 +1,293 @@ -- id: mido-nsdb - type: group - role: [nsdb] - requires: [] - required_for: [pre_deployment_end] +# +# GROUPS +# +- id: nsdb parameters: strategy: type: parallel + requires: + - deploy_start + required_for: + - controller + - primary-controller + - deploy_end + role: + - nsdb + type: group + tasks: + - logging + - hiera + - globals + - netconfig-midonet - id: midonet-gw - type: group - role: [midonet-gw] - requires: [deploy_start] - required_for: [deploy_end] parameters: strategy: type: parallel + required_for: + - deploy_end + requires: + - nsdb + role: + - midonet-gw + tasks: + - logging + - hiera + - globals + - netconfig-midonet + type: group + +# +# DEPLOYMENT +# + +- id: netconfig-midonet + parameters: + puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/netconfig/netconfig.pp + puppet_modules: /etc/puppet/modules + timeout: 3600 + cwd: / + required_for: + - netconfig + requires: + - tools + groups: + - /.*/ + type: puppet + version: 2.0.0 + +# First independent tasks +- id: setup_repositories_midonet + groups: + - primary-controller + - controller + - compute + - nsdb + - midonet-gw + required_for: + - deploy_end + requires: + - netconfig + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-define-repositories.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +- id: enable_ip_forward_midonet + groups: + - compute + - controller + - primary-controller + - midonet-gw + required_for: + - deploy_end + requires: + - deploy_start + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-enable-ip-forward.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 720 + +# NSDB-only tasks +- id: zookeeper_and_cassandra_midonet + groups: + - nsdb + required_for: + - deploy_end + requires: + - setup_repositories_midonet + - firewall + type: puppet + reexecute_on: + - deploy_changes + parameters: + puppet_manifest: puppet/manifests/midonet-nsdb.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +# PRE-NEUTRON CONFIGURATION +- id: deploy_api_midonet + groups: + - primary-controller + - controller + required_for: + - deploy_end + - openstack-network-start + requires: + - setup_repositories_midonet + - enable_ip_forward_midonet + - firewall + - primary-cluster-haproxy + - cluster-haproxy + type: puppet + reexecute_on: + - deploy_changes + parameters: + puppet_manifest: puppet/manifests/midonet-install-api.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +# In controllers, we have to install midolman 'before' the neutron +# configuration, because subnet creates a the DHCP port in neutron +# and we need to do the binding. +- id: agent-midonet-controller + groups: + - primary-controller + - controller + required_for: + - deploy_end + - openstack-network-start + requires: + - deploy_api_midonet + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-install-agent.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +# NEUTRON CONFIGURATION +- id: openstack-network-midonet-replace-service-name + groups: + - primary-controller + - controller + requires: + - openstack-network-common-config + required_for: + - openstack-network-end + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-replace-guess-func.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +- id: openstack-network-midonet-config + groups: + - primary-controller + - controller + requires: + - openstack-network-midonet-replace-service-name + required_for: + - openstack-network-server-config + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-neutron-configure.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +- id: openstack-network-midonet-networks + groups: + - primary-controller + requires: + - openstack-network-server-config + required_for: + - openstack-network-end + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-neutron-networks.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +- id: openstack-network-midonet-compute-nova + parameters: + puppet_manifest: puppet/manifests/midonet-compute-nova.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + required_for: + - openstack-network-end + requires: + - openstack-network-common-config + - openstack-network-agents-l3 + - openstack-network-agents-metadata + type: puppet + groups: + - compute + + +# Skipped tasks +- id: openstack-network-server-config + type: skipped +- id: openstack-network-networks + type: skipped +- id: openstack-network-routers + type: skipped +- id: openstack-network-plugins-l2 + type: skipped +- id: primary-openstack-network-plugins-l2 + type: skipped +- id: openstack-network-agents-l3 + type: skipped +- id: primary-openstack-network-agents-l3 + type: skipped +- id: openstack-network-compute-nova + type: skipped +- id: netconfig + type: skipped + +# POST-DEPLOYMENT TASKS + +# The task configure_default_route reinstalls openvswitch-switch +# and removes midolman. This task only runs on compute hosts, so +# we have to make sure that midolman is installed 'after' the +# 'configure_default_route' task has run +- id: agent-midonet-compute + role: + - compute + - midonet-gw + required_for: + - post_deployment_end + requires: + - configure_default_route + type: puppet + reexecute_on: + - deploy_changes + parameters: + puppet_manifest: puppet/manifests/midonet-install-agent.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 1440 + +- id: tunnel-zones-midonet + role: + - compute + - controller + - primary-controller + - midonet-gw + required_for: + - post_deployment_end + requires: + - agent-midonet-compute + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-host-registry.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 720 + +- id: rootwrap-midonet + role: + - compute + - controller + - primary-controller + - midonet-gw + required_for: + - post_deployment_end + requires: + - agent-midonet-compute + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-ensure-rootwrap.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 720 + +- id: gateway-midonet + role: + - midonet-gw + requires: + - tunnel-zones-midonet + required_for: + - post_deployment_end + type: puppet + parameters: + puppet_manifest: puppet/manifests/midonet-gateway-bgp.pp + puppet_modules: "puppet/modules/:/etc/puppet/modules/" + timeout: 720 diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..72e79d9 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,184 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " pdf to make a PDF file" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Together-Message.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Together-Message.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Together-Message" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Together-Message" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." + +pdf: + $(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) $(BUILDDIR)/pdf + @echo + @echo "Build finished. The PDF file is in $(BUILDDIR)/pdf." + diff --git a/doc/content/installation.rst b/doc/content/installation.rst deleted file mode 100644 index 6e01f78..0000000 --- a/doc/content/installation.rst +++ /dev/null @@ -1,240 +0,0 @@ - -.. raw:: pdf - - PageBreak oneColumn - - -Installation Guide -================== - -Install the Plugin ------------------- - -To install the MidoNet Fuel plugin: - -#. Download the plugin from the `Fuel Plugin Catalog`_ - -#. Log into Fuel Master node and install the plugin using the - `Fuel CLI `_: - - :: - - # fuel plugins --install midonet-fuel-plugin-3.0-3.0.1-1.noarch.rpm - -#. Verify that the plugin is installed correctly: - :: - - # fuel plugins - id | name | version | package_version - ---|---------|---------|---------------- - 9 | midonet | 3.0.1 | 3.0.0 - - -Enable Experimental Features ----------------------------- - -To be able to use MidoNet Fuel plugin correctly, Fuel `Experimental Features`_ -must be enabled. This is done automatically by plugin post-install script, -assuming the plugin is installed on top of clean Fuel master installation. -In case the process has to be done manually, follow these steps: - -#. Modify the ``/etc/fuel/version.yaml`` file in *Fuel Master* - host to add ``experimental`` to the ``feature_groups`` list in the ``VERSION`` - section, just below ``mirantis`` item: - - :: - - VERSION: - ... - feature_groups: - - mirantis - - experimental - -#. Restart the *Nailgun* container with dependencies by running:: - - # dockerctl restart nailgun - # dockerctl restart nginx - # dockerctl shell cobbler - # cobbler sync - # exit - -#. Make sure the *nginx* and the *nailgun* docker services finished the restart - process before go on with the new section:: - - # dockerctl check - - -Create the MidoNet roles ------------------------- - -MidoNet core functionality depends on two roles that are not provided by Fuel -on default: - -- the **NSDB** role, which deploys the Network State DataBase services, namely - ZooKeeper and Cassandra. - -- the **Gateway** role, which provides the MidoNet gateway service needed for - handling external *OpenStack* traffic. (See `MidoNet Fuel Plugin User Guide`_ for - more info about networking in MidoNet) - -The above roles are added automatically by plugin post-install script, -assuming the plugin is installed on top of clean Fuel master installation. -In case the process has to be done manually, follow these steps: - -NSDB role -````````` - -#. Create a YAML file with the **NSDB** role definition, like this: - - :: - - name: nsdb - meta: - name: Network State Database for MidoNet - description: MidoNet Synchronization Services - volumes_roles_mapping: - - allocate_size: min - id: os - -#. Name it, for instance, ``nsdb.yaml``. Push the role for the environment - (``Ubuntu 2015.1.0-7.0``) using the - `Fuel CLI `_: - - :: - - $ fuel release - ---|----------------------|-------------|------------------|------------- - 2 | Kilo on Ubuntu 14.04 | available | Ubuntu | 2015.1.0-7.0 - 1 | Kilo on CentOS 6.5 | unavailable | CentOS | 2015.1.0-7.0 - - :: - - $ fuel role --create --release 2 --file nsdb.yaml - - -Gateway role -```````````` - -#. Create the role for **MidoNet Gateway** by creating a file called - ``gateway.yaml`` with the following contents: - - :: - - name: midonet-gw - meta: - name: MidoNet HA Gateway - description: MidoNet Gateway - volumes_roles_mapping: - - allocate_size: min - id: os - -#. Create the role for the environment (``Ubuntu 2015.1.0-7.0``) using the - `Fuel CLI `_: - - :: - - $ fuel release - ---|----------------------|-------------|------------------|------------- - 2 | Kilo on Ubuntu 14.04 | available | Ubuntu | 2015.1.0-7.0 - 1 | Kilo on CentOS 6.5 | unavailable | CentOS | 2015.1.0-7.0 - - :: - - $ fuel role --create --release 2 --file gateway.yaml - - -Edit the Fuel deployment graph dependency cycle ------------------------------------------------ - -The roles that were just added needs to be accompanied with appropriate -deployment tasks, so that `Fuel's Deployment Graph -`_ -is fully populated. Again, needed deployment tasks are added automatically by -plugin post-install script, assuming the plugin is installed on top of clean -Fuel master installation. In case the process still has to be done manually, -follow these steps: - -#. Create a group type for Fuel |FuelVer| in a YAML file called - ``/tmp/midonet_groups.yaml`` with the following content:: - - - id: nsdb - parameters: - strategy: - type: parallel - requires: - - deploy_start - required_for: - - deploy_end - role: - - nsdb - type: group - tasks: - - logging - - hiera - - globals - - netconfig - - id: midonet-gw - parameters: - strategy: - type: parallel - required_for: - - deploy_end - requires: - - deploy_start - role: - - midonet-gw - tasks: - - logging - - hiera - - globals - - netconfig - type: group - - -#. Download the deployment tasks for the **release 2** (``Ubuntu 2015.1.0-7.0``): - - :: - - $ fuel release - ---|----------------------|-------------|------------------|------------- - 2 | Kilo on Ubuntu 14.04 | available | Ubuntu | 2015.1.0-7.0 - 1 | Kilo on CentOS 6.5 | unavailable | CentOS | 2015.1.0-7.0 - - :: - - fuel rel --rel 2 --deployment-tasks --download - -#. A file ``./release_2/deployment_tasks.yaml`` will be downloaded. - -#. Without moving from your current directory, append the - ``/tmp/midonet_groups.yaml`` file into the ``deployment_tasks.yaml``: - - :: - - cat /tmp/midonet_groups.yaml >> ./release_2/deployment_tasks.yaml - -#. Upload the edited ``deployment-tasks`` file to the ``release 2``: - - :: - - fuel rel --rel 2 --deployment-tasks --upload - - -#. Current Fuel Plugins framework only allows to apply tasks on - *pre_deployment* and *post_deployment* stages, adding these groups - and tasks into the main graph will allow **NSDB** and **Gateway** - associated tasks to: - - - Configure *logging* to see Puppet and MCollective logs related to the tasks - from the Fuel Web UI. - - - Access to hiera variables. - - - Access to global variables. - - - Configure the IP addresses for - `each Fuel network type `_. - -.. _Experimental Features: https://docs.mirantis.com/openstack/fuel/fuel-7.0/operations.html#enable-experimental-features -.. _Fuel Plugin Catalog: https://www.mirantis.com/products/openstack-drivers-and-plugins/fuel-plugins/ - diff --git a/doc/images/bgp_params.png b/doc/images/bgp_params.png new file mode 100644 index 0000000..fb886f4 Binary files /dev/null and b/doc/images/bgp_params.png differ diff --git a/doc/images/floating_network.png b/doc/images/floating_network.png new file mode 100644 index 0000000..6fd193e Binary files /dev/null and b/doc/images/floating_network.png differ diff --git a/doc/images/mem.png b/doc/images/mem.png index e894794..19f3b05 100644 Binary files a/doc/images/mem.png and b/doc/images/mem.png differ diff --git a/doc/images/mem_credentials.png b/doc/images/mem_credentials.png index 61b71db..d393720 100644 Binary files a/doc/images/mem_credentials.png and b/doc/images/mem_credentials.png differ diff --git a/doc/images/nodes_to_roles.png b/doc/images/nodes_to_roles.png index 20f5ff4..e46fd7c 100644 Binary files a/doc/images/nodes_to_roles.png and b/doc/images/nodes_to_roles.png differ diff --git a/doc/images/other.png b/doc/images/other.png new file mode 100644 index 0000000..9db7822 Binary files /dev/null and b/doc/images/other.png differ diff --git a/doc/images/overridden_options.png b/doc/images/overridden_options.png index 395710d..536bdb1 100644 Binary files a/doc/images/overridden_options.png and b/doc/images/overridden_options.png differ diff --git a/doc/images/plugin_config.png b/doc/images/plugin_config.png deleted file mode 100644 index 3bce35c..0000000 Binary files a/doc/images/plugin_config.png and /dev/null differ diff --git a/doc/images/public_network.png b/doc/images/public_network.png new file mode 100644 index 0000000..bf59cf3 Binary files /dev/null and b/doc/images/public_network.png differ diff --git a/doc/images/public_to_all.png b/doc/images/public_to_all.png deleted file mode 100644 index 7d1791e..0000000 Binary files a/doc/images/public_to_all.png and /dev/null differ diff --git a/doc/images/tunnel_type.png b/doc/images/tunnel_type.png new file mode 100644 index 0000000..29be0e6 Binary files /dev/null and b/doc/images/tunnel_type.png differ diff --git a/doc/images/tunneling.png b/doc/images/tunneling.png index a6a4df1..ff0bd24 100644 Binary files a/doc/images/tunneling.png and b/doc/images/tunneling.png differ diff --git a/doc/content/appendix.rst b/doc/source/appendix.rst similarity index 78% rename from doc/content/appendix.rst rename to doc/source/appendix.rst index c74031a..007c0d5 100644 --- a/doc/content/appendix.rst +++ b/doc/source/appendix.rst @@ -9,10 +9,7 @@ Appendix B - references - `MidoNet Web Site `_ - `MidoNet v2015.06 Documentation `_ -- `MidoNet v2015.06 Code `_ +- `MidoNet v2015.06 Code `_ - `Midokura Enterprise MidoNet (MEM) v1.9 Documentation `_ - `Midokura Enterprise MidoNet (MEM) 30 Day Trial `_ -- `Fuel Enable Experimental Features `_ - `Fuel Plugins Catalog `_ - - diff --git a/doc/source/appendixes.rst b/doc/source/appendixes.rst new file mode 100644 index 0000000..48878a3 --- /dev/null +++ b/doc/source/appendixes.rst @@ -0,0 +1,9 @@ +Appendixes +========== + +.. toctree:: + :maxdepth: 1 + + licenses + appendix + bgp-peer diff --git a/doc/content/bgp-peer.rst b/doc/source/bgp-peer.rst similarity index 98% rename from doc/content/bgp-peer.rst rename to doc/source/bgp-peer.rst index de22e90..8b3d616 100644 --- a/doc/content/bgp-peer.rst +++ b/doc/source/bgp-peer.rst @@ -1,8 +1,11 @@ +.. raw:: pdf -Setting up test BGP peer -======================== + PageBreak oneColumn -`BGP`_ is routing is an exterior gateway protocol supported and recommended to +Appendix C - Setting up test BGP peer +===================================== + +`BGP`_ routing is an exterior gateway protocol supported and recommended to MidoNet production use case. An external BGP peer is necessary for Floating IP (FIP) traffic between the deployed OpenStack cloud instances and the external network(s). These BGP peers are usually available for production or data-center @@ -44,7 +47,6 @@ in this guide: - VyOS management IP on eth0 interface: **10.20.0.254/24** - Default gateway for management subnet: **10.20.0.1** -| Also, BGP protocol itself needs some parameters to be set up. For our simple demonstration we assume that VyOS BGP peer that we are creating is going to @@ -60,7 +62,6 @@ and IP addresses: - MidoNet BGP gateway IP address: **10.88.88.2** - MidoNet BGP gateway AS number: **12345** -| Finally, to fulfill the purpose of this BGP setup, we need to know which Floating IP subnet is going to be handled by MidoNet-based OpenStack cloud, @@ -68,7 +69,6 @@ so we specify subnet: - Floating IP subnet: **200.200.200.0/24** -| VyOS Installation @@ -339,4 +339,3 @@ in the management network gateway router, 10.20.0.1. For example: In case management gateway router is not accessible, the above static route can be set at each individual host that needs to access "fake" Floating IP network range. - diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 0000000..4bd19bd --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,79 @@ +# -*- coding: utf-8 -*- +# Licensed 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. + +import os +import sys + +sys.path.insert(0, os.path.abspath('../..')) +# -- General configuration ---------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.autodoc', + 'reno.sphinxext', + 'rst2pdf.pdfbuilder' +] + +# autodoc generation is a bit aggressive and a nuisance when doing heavy +# text edit cycles. +# execute "export SPHINX_DEBUG=1" in your terminal to disable + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'fuel-midonet-plugin' +copyright = u'2016, Midokura SARL' +version = '4.0.0' + +# If true, '()' will be appended to :func: etc. cross-reference text. +add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +add_module_names = True + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# -- Options for HTML output -------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +# html_theme_path = ["."] +# html_theme = '_theme' +# html_static_path = ['static'] +# html_theme = 'default' + +# Output file base name for HTML help builder. +htmlhelp_basename = '%sdoc' % project + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto/manual]). +latex_documents = [ + ('index', + '%s.tex' % project, + u'%s Documentation' % project, + u'OpenStack Foundation', 'manual'), +] + +pdf_documents = [(master_doc, project, u'MidoNet plugin for Fuel 8', copyright),] + +# Example configuration for intersphinx: refer to the Python standard library. +#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/content/description.rst b/doc/source/description.rst similarity index 69% rename from doc/content/description.rst rename to doc/source/description.rst index b3dbf90..e892d62 100644 --- a/doc/content/description.rst +++ b/doc/source/description.rst @@ -1,3 +1,7 @@ +.. |FuelVer| replace:: 8.0 +.. |PrevPluginVer| replace:: 3.0.1 +.. |PluginVer| replace:: 4.0.0 + .. raw:: pdf PageBreak oneColumn @@ -12,9 +16,9 @@ puppet manifests to install all the components to deploy easily MidoNet with Fuel in both lab or production environments. Fuel MidoNet plugin is capable of deploying MidoNet v2015.06_ on top of Mirantis -OpenStack Fuel version |FuelVer| (including Maintenance Update 2). There are no -prerequisites to use the MidoNet plugin: MidoNet is Open Source, and the plugin -sets the repositories from where download and install MidoNet packages. +OpenStack Fuel version |FuelVer|. There are no prerequisites to use the MidoNet +plugin: MidoNet is Open Source, and the plugin sets the repositories from where +download and install MidoNet packages. This plugin also supports Midokura Enterprise MidoNet (MEM_) installation by allowing the user to choose the option from the Fuel Web UI. @@ -44,7 +48,7 @@ Known Limitations MidoNet itself supports any number of gateway nodes, it is only a plugin limitation, additional nodes needs to be set up manually. -.. _v2015.06: https://github.com/midonet/midonet/tree/stable/v2015.06.2 +.. _v2015.06: https://github.com/midonet/midonet/releases/tag/v2015.06.3 .. _MEM: http://docs.midokura.com/docs/latest/manager-guide/content/index.html .. _provided: http://www.midokura.com/mem-eval @@ -54,15 +58,10 @@ Changes in MidoNet plugin |PluginVer| * New features: - * Support for Fuel 7.0 Maintenance Release 2 - * Added post_install.sh script that sets up Fuel experimental features, - customized MidoNet roles and custom deployment graph - -* Bug fixes: - - * Provided updated python-neutron-plugin-midonet debian package - * MidoNet BGP gateway role parameters - * Neutron db creation timeouts - * Fix some OSTF test scenarios - * Numerous documentation fixes - + * Support for Fuel |FuelVer| + * Tasks are included in the ``deployment`` stage of Fuel instead of in the + ``post_deployment``, so the time of deployment has decreased around 20-30 + minutes, as well as it makes the deployment more reliable. + * **MidoNet** option available in the *Networking Setup* during the environment + creation, making the configuration of an environment with MidoNet much + easier. diff --git a/doc/content/guide.rst b/doc/source/guide.rst similarity index 57% rename from doc/content/guide.rst rename to doc/source/guide.rst index 4beba34..a9218b4 100644 --- a/doc/content/guide.rst +++ b/doc/source/guide.rst @@ -14,23 +14,22 @@ MidoNet SDN controller as a Neutron back-end. MidoNet Networks ---------------- -MidoNet changes the behavior of default Neutron deployments, understanding +MidoNet changes the behaviour of default Neutron deployments, understanding what MidoNet plugin does, especially in regard to external networks, is essential to configure and use MidoNet Fuel plugin properly. MidoNet plugin is compatible with both **Neutron + GRE** and -**Neutron + VxLAN** network tunneling overlays, so let's focus on showing -the differences beteewn the Neutron default ML2 deployments first. +**Neutron + VxLAN** network tunnelling overlays, so let's focus on showing +the differences between the Neutron default ML2 deployments first. Neutron without MidoNet plugin `````````````````````````````` -Fuel |FuelVer| reference architecture contains some useful informaition in -`Neutron Network Topologies -`_ -section. First, let's have an overview of Neutron-default ML2 topolgy: +Fuel 7.0 reference architecture contains some useful information in +`Neutron Network Topologies`_ section. First, let's have an overview of +Neutron-default ML2 topolgy: -.. image:: images/fuelml2gre.png +.. image:: ../images/fuelml2gre.png :width: 100% In this topology, red, or "North" network represents the Public Internet, @@ -42,10 +41,6 @@ service is running on the controller, answers all ARP requests coming from of the traffic destined to Floating IP assigned to Virtual Machines and places the resulting packets in the overlay of the green, "South" network (br-tun). -Even in an HA deployment, the L3 agent only runs on one of the Controllers, and -only gets spawned in another host if the previous one loses connectivity -(active-standby Corosync / Pacemaker HA setup). - Node hosting Neutron Controller has to: - Serve the API requests coming from users @@ -57,7 +52,7 @@ Node hosting Neutron Controller has to: Neutron with MidoNet plugin ``````````````````````````` -With MidoNet, Neutron separates the control traffic from the data traffic. +With MidoNet, Neutron separates the control traffic from the data traffic. Even the Floating IPs live in the network overlay. Floating IP subnet is separated from the services API network range (called Public Network on Fuel and represented by the red network below) and MidoNet gateway advertises the @@ -67,7 +62,7 @@ environment settings get overridden. MidoNet deployment topology: -.. image:: images/midonet_fuel.png +.. image:: ../images/midonet_fuel.png :width: 100% On this topology diagram: @@ -83,23 +78,24 @@ On this topology diagram: Including traffic to and form floating IP addresses. - **Management network** is the blue one. All nodes need to be connected to - it, this network is used for access to *NSDB* nodes in order to access + it, this network is used for access to *NSDB* nodes in order to access virtual networks topology and flow information. - **PXE/Admin network** is the gray one. Needed by Fuel master to orchestrate the deployment. - **Storage network** is not shown on the diagram, as it is out of scope of - this guide (and NEutron & MidoNet itself). + this guide (and Neutron & MidoNet itself). + MidoNet gateway is native distributed system, one can place as many gateways -necessary, so North-South traffic can be distributed and balanced. Once BGP -sessions are established and routes are exchanged between BGP "peers", -each North-to-South network packet gets routed from the External Public API -network to one of the MidoNet gateways. It does not matter which of them gets -the packet, they work as if they are a single entity. MidoNet gateway sends -the inbound packet directly to the Compute that hosts the target virtual -machine. +necessary, so North-South traffic can be distributed and balanced (Although due +plugin limitation you can only deploy one). Once BGP sessions are established +and routes are exchanged between BGP "peers", each North-to-South network packet +gets routed from the External Public API network to one of the MidoNet gateways. +It does not matter which of them gets the packet, they work as if they are a +single entity. MidoNet gateway sends the inbound packet directly to the Compute +that hosts the target virtual machine. In this way controller nodes gets significantly less overloaded, since they only need to answer user requests and they don't handle VM traffic at all @@ -113,110 +109,97 @@ Select Environment ------------------ #. When creating the environment in the Fuel UI wizard, choose **Neutron with - tunneling segmentation** (second option) on the Network tab. + MidoNet** on the *Networking Setup* section: - .. image:: images/tunneling.png - :width: 100% + .. image:: ../images/tunneling.png + :width: 75% After that, you will be able to choose between *GRE* or *VXLAN* segmentation. MidoNet works with both. #. MidoNet plugin does not interact with the rest of the options, so choose - whatever your deployment demands on them. Follow instructions from - `the official Mirantis OpenStack documentation `_ - to finish the configuration. - -Alternatively, this can be done in fuel cli: - -:: - - $ fuel env --create --name test-deployment --rel 2 --net neutron --nst tun + whatever your deployment demands on them. Follow instructions from the + `official Mirantis OpenStack documentation`_ to finish the configuration. -Once the environment is created, open the *Settings* tab of the Fuel Web UI. +Configure MidoNet Plugin +------------------------ +Once the environment is created, open the *Settings* tab of the Fuel Web UI, and +go to the *Other* section: + + .. image:: ../images/other.png + :width: 75% Install Midokura Enterprise MidoNet (Optional) ----------------------------------------------- +`````````````````````````````````````````````` #. Installing Midokura Enterprise MidoNet, you will be able to use some specific features from MidoNet only available on the Enterprise version. #. Activate the option **Install Midokura Enterprise MidoNet**. - .. image:: images/mem.png - :width: 100% + .. image:: ../images/mem.png + :width: 75% -#. Select the Midokura Enterprise MidoNet (MEM) version and fill the **Username** and - **Password** fields for downloading the packages from the repository. +#. Select the Midokura Enterprise MidoNet (MEM) version (only 1.9 available now) + and fill the **Username** and **Password** fields for downloading the + packages from the repository. - .. image:: images/mem_credentials.png - :width: 100% + .. image:: ../images/mem_credentials.png + :width: 75% -Configure MidoNet Plugin ------------------------- +Choose Tunnel Type +`````````````````` -#. Configuring the MidoNet plugin for Fuel, you will override most of the options - of the *Public Network* section of the *Settings* tab of the environment: - - .. image:: images/overridden_options.png - :width: 100% - - Fuel will still reserve IP addresses of the *IP range* (first row) to assign - API-accessible IPs to the OpenStack services, but the rest will be overridden by - the plugin options that you are about to configure, making the Floating Network - full-overlay and pure floating. - -#. Activate the option **Assign public networks to all nodes**. - By default, Fuel only gives public access to Controllers. We need to enable - this option in order to have external connectivity to Gateway nodes. - - .. image:: images/public_to_all.png - :width: 100% - -#. Select the plugin checkbox and fill the options: - - .. image:: images/plugin_config.png - :width: 100% - - Let's explain them: - - - **Tunnel Type**: Here you can choose between GRE or VxLAN as - tunneling technology. Both are supported by MidoNet, but VxLAN is - recommended for its performance. - - - **Floating Network subnet** Public Network CIDR**: This option represents - the CIDR of Neutron's external network (overriding Public Network CIDR for - the default Neutron ML2 plugin). This subnet **MUST NOT** be the same as - the *Public Network* CIDR section of the *Settings* tab of the - environment. Since there is no option to fine-tune this kind of network - separation control within Fuel core, one must use MidoNet Fuel plugin - settings to do it. - - - **Floating Network Gateway IP**: The Gateway IP address to the MidoNet - Virtual IP subnet. This IP address is usually set to the first available - IP in the subnet. Make sure that the address really belongs to the - *Floating Network subnet* CIDR. - - - **Floating Network Range Start** and **Floating Network Range End**: - First and last IP address of the Floating range of IPs available for use - on virtual machines. - - - **BGP routing subnet**: IP subnet in which BGP peers resides. Both local - and remote BGP peer IP addresses must belong to this subnet. +MidoNet tunnelling is compatible with **GRE** and **VXLAN**. - - **BGP local IP address** and **BGP local AS**: This pair of parameters - identifies BGP peer local to MidoNet gateway. They are usually given by - ISP to be set into your networking equipment (in this case your MidoNet - gateway) by the network administrators. "AS number" stands for Autonomous - System Number. + .. image:: ../images/tunnel_type.png + :width: 75% - - **BGP peer IP address** and **BGP peer AS**: This pair of parameters - usually identifies BGP peer on the side of your ISP. They are usually - given by ISP to be set into your BGP peer so that those peers know where - to find each other. +Both are supported by MidoNet, but VxLAN is recommended for its performance. + +Floating Network Options +```````````````````````` + +Configure the Floating fields of the plugin options (they are already been +filled by default, but you will need to change them for sure): + + + .. image:: ../images/floating_network.png + :width: 75% + + +Configuring the floating fields in *MidoNet plugin*, you will override most of the +options of the *Neutron L3/Floating Network Parameters* section of the +*Networks* tab of the environment: + + .. image:: ../images/overridden_options.png + :width: 75% + +So this *Floating IP range* (first row) will be completely ignored. This +range has to match with the *CIDR* of the *Public Network*: + + .. image:: ../images/public_network.png + :width: 75% + +Which only will be used for API-accessible IPs to the OpenStack services but not +for Virtual Machine's floating IPs. Please refer to `Neutron with Midonet +plugin`_ section of this document if it is not clear enough to you. + +Configure BGP +````````````` + +Fill the BGP attributes: + + + .. image:: ../images/bgp_params.png + :width: 75% + +There is a nice tutorial in this document: **Setting up test BGP peer** to run a +BGP peer for testing environments. Assign Roles to Nodes @@ -225,30 +208,30 @@ Assign Roles to Nodes #. Go to the *Nodes* tab and you will see the **Network State DataBase** and **MidoNet HA Gateway** roles available to be assigned to roles. - .. image:: images/nodes_to_roles.png - :width: 100% + .. image:: ../images/nodes_to_roles.png + :width: 75% #. Some general advice to be followed: - **Gateway** role should be given to a dedicated node. - - **NSDB** role can be combined with any other roles, but note that it needs at least 4GB RAM for itself (dedicated storage hihgly recommended). +Fuel will force you to choose at least one **NSDB** node in your environment (3 +are recommended). + + Finish environment configuration -------------------------------- -#. Run `network verification check `_ - -#. Press `Deploy button `_ to once you are done with environment configuration. - +We recommend to run a `Connectivity Check`_ before deploy the environment Operations and Troubleshooting ------------------------------ A successful deployment done with MidoNet Fuel plugin will produce fully -working OpenStack environment, with MidoNet Neutron network back-end. +working OpenStack environment, with MidoNet as a Neutron network back-end. MidoNet is fully compatible with Neutron and Nova APIs and most of its aspects can be directly managed by OpenStack Horizon WEB interface, as well as Neutron API. @@ -262,6 +245,8 @@ the deployment went fine, please see `MidoNet Troubleshooting Guide`_. .. _MidoNet Operations Guide: https://docs.midonet.org/docs/v2015.06/en/operations-guide/content/index.html .. _MidoNet Troubleshooting Guide: https://docs.midonet.org/docs/v2015.06/en/troubleshooting-guide/content/index.html +.. _`Connectivity Check`: https://docs.mirantis.com/openstack/fuel/fuel-8.0/user-guide.html#verify-networks + Troubleshooting MidoNet Fuel deployment @@ -289,3 +274,6 @@ messages, they should either be included in MidoNet support claims to help to help the troubleshooting or an action can be taken by user to prevent issue from happening on re-deployment. + +.. _`Neutron Network Topologies`: https://docs.mirantis.com/openstack/fuel/fuel-7.0/reference-architecture.html#neutron-with-gre-segmentation-and-ovs +.. _`official Mirantis OpenStack documentation`: https://docs.mirantis.com/openstack/fuel/fuel-7.0/user-guide.html#create-a-new-openstack-environment diff --git a/doc/user-guide.rst b/doc/source/index.rst similarity index 65% rename from doc/user-guide.rst rename to doc/source/index.rst index eb5abd3..07e59c1 100644 --- a/doc/user-guide.rst +++ b/doc/source/index.rst @@ -1,30 +1,29 @@ +.. |FuelVer| replace:: 8.0 +.. |PrevPluginVer| replace:: 3.0.1 +.. |PluginVer| replace:: 4.0.0 -.. |FuelVer| replace:: 7.0 -.. |PrevPluginVer| replace:: 3.0.0 -.. |PluginVer| replace:: 3.0.1 -============================= - Guide to the MidoNet Plugin -============================= - -.. class:: center - -version 3.0-|PluginVer|-1 for Fuel |FuelVer| +Document purpose +================ +This document will guide you through the steps of install, configure and use the +MidoNet plugin version |PluginVer| for Fuel |FuelVer|. .. raw:: pdf PageBreak oneColumn +Contents +======== -.. contents:: -.. section-numbering:: - - -.. raw:: pdf - - PageBreak oneColumn +.. toctree:: + :maxdepth: 2 + description + terms + installation + guide + appendixes Revision history ================ @@ -41,6 +40,9 @@ Revision history 0.3 07.03.2016 Samir Ibradzic Added release notes and troubleshooting (samir@midokura.com) + 4.0 24.03.2016 Jaume Devesa Adapt to Fuel 8 + + (jaume@midokura.com) ========= =============== ========================== ========================= .. raw:: pdf @@ -48,16 +50,3 @@ Revision history PageBreak oneColumn -Document purpose -================ - -This document will guide you through the steps of install, configure and use the -MidoNet plugin version |PluginVer| for Fuel |FuelVer|. - -.. include:: content/description.rst -.. include:: content/terms.rst -.. include:: content/installation.rst -.. include:: content/guide.rst -.. include:: content/licenses.rst -.. include:: content/appendix.rst - diff --git a/doc/source/installation.rst b/doc/source/installation.rst new file mode 100644 index 0000000..6c60bfa --- /dev/null +++ b/doc/source/installation.rst @@ -0,0 +1,32 @@ + +.. raw:: pdf + + PageBreak oneColumn + + +Installation Guide +================== + +Install the Plugin +------------------ + +To install the MidoNet Fuel plugin: + +#. Download the plugin from the `Fuel Plugin Catalog`_ + +#. Log into Fuel Master node and install the plugin using the `Fuel CLI`_: + + :: + + # fuel plugins --install midonet-fuel-plugin-4.0-4.0.0-1.noarch.rpm + +#. Verify that the plugin is installed correctly: + :: + + # fuel plugins + id | name | version | package_version + ---|---------|---------|---------------- + 9 | midonet | 4.0.1 | 4.0.0 + +.. _`Fuel Plugin Catalog`: https://www.mirantis.com/products/openstack-drivers-and-plugins/fuel-plugins/ +.. _`Fuel CLI`: https://docs.mirantis.com/openstack/fuel/fuel-8.0/user-guide.html#using-fuel-cli diff --git a/doc/content/licenses.rst b/doc/source/licenses.rst similarity index 97% rename from doc/content/licenses.rst rename to doc/source/licenses.rst index aaa9162..549d24e 100644 --- a/doc/content/licenses.rst +++ b/doc/source/licenses.rst @@ -4,7 +4,7 @@ PageBreak oneColumn -Appendix B - licenses +Appendix A - licenses ===================== Third Party Components Used in MidoNet OSS @@ -63,13 +63,10 @@ Puppet Modules ====================== ========== Name License ====================== ========== -midonet-midonet Apache 2.0 ripienaar-module_data Apache 2.0 -puppetlabs-inifile Apache 2.0 deric-zookeeper Apache 2.0 midonet-cassandra Apache 2.0 -puppetlabs-apt Apache 2.0 puppetlabs-java Apache 2.0 puppetlabs-tomcat Apache 2.0 +midonet-midonet Apache 2.0 ====================== ========== - diff --git a/doc/content/terms.rst b/doc/source/terms.rst similarity index 100% rename from doc/content/terms.rst rename to doc/source/terms.rst diff --git a/environment_config.yaml b/environment_config.yaml index eada51d..f535fec 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -39,7 +39,7 @@ attributes: value: '' label: "MEM repository password" description: "Password for Midokura Enterprise MidoNet (MEM) repository" - type: "text" + type: "password" weight: 9 restrictions: - condition: "settings:midonet-fuel-plugin.mem.value == false" @@ -63,7 +63,7 @@ attributes: # Floating IP range # floating_cidr: - value: '' + value: '200.200.200.0/24' label: 'Floating Network subnet' description: 'CIDR of the Floating Network. Will override the default settings' weight: 20 @@ -73,7 +73,7 @@ attributes: error: 'Floating Network must be a CIDR' gateway: - value: '' + value: '200.200.200.1' label: 'Floating Network Gateway IP' description: 'Gateway of the Floating Network. Will override the default settings' weight: 21 @@ -83,7 +83,7 @@ attributes: error: 'Floating Network gateway must be an IP address' floating_ip_range_start: - value: '' + value: '200.200.200.100' label: 'Floating Network range start' description: 'First IP address of the Floating Network range. Will override the default settings' weight: 22 @@ -93,7 +93,7 @@ attributes: error: 'Floating Network range start value must be an IP address' floating_ip_range_end: - value: '' + value: '200.200.200.200' label: 'Floating Network range end' description: 'Last IP address of the Floating Network range. Will override the default settings' weight: 23 @@ -104,7 +104,7 @@ attributes: ## BGP Options ### bgp_cidr: - value: '' + value: '10.88.88.0/30' label: 'BGP routing subnet' description: 'CIDR of the BGP network' weight: 30 @@ -114,7 +114,7 @@ attributes: error: 'BGP Network must be a CIDR' bgp_ip: - value: '' + value: '10.88.88.2' label: 'BGP local IP address' description: 'IP address of the first Local BGP peer' weight: 31 @@ -124,7 +124,7 @@ attributes: error: 'Local BGP peer must be an IP address' local_as: - value: '' + value: '12345' label: 'BGP local AS' description: 'Autonomous System Number of the MidoNet Gateway' weight: 32 @@ -134,7 +134,7 @@ attributes: error: "BGP local AS must be an integer of 5 digits" remote_ip1: - value: '' + value: '10.88.88.1' label: 'BGP peer IP address' description: 'IP address of the BGP peer' weight: 33 @@ -144,7 +144,7 @@ attributes: error: 'Remote BGP peer must be an IP address' remote_as1: - value: '' + value: '65535' label: 'BGP peer AS' description: 'Autonomous System Number of the BGP peer' weight: 34 @@ -152,4 +152,3 @@ attributes: regex: source: '^([0-9]){5}$' error: "Remote AS must be an integer of 5 digits" - diff --git a/metadata.yaml b/metadata.yaml index 7fa9c26..0879c44 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,20 +1,18 @@ name: midonet-fuel-plugin title: Neutron Midonet plugin -version: 3.0.1 +version: 4.0.0 description: Enable to use plugin Midonet for Neutron -fuel_version: ['7.0'] +fuel_version: ['8.0'] +is_hotpluggable: false + releases: - os: ubuntu - version: 2015.1.0-7.0 + version: liberty-8.0 mode: ['ha', 'multinode'] deployment_scripts_path: deployment_scripts/ repository_path: repositories/ubuntu - - os: centos - version: 2015.1.0-7.0 - mode: ['ha', 'multinode'] - deployment_scripts_path: deployment_scripts/ - repository_path: repositories/centos -package_version: '3.0.0' + +package_version: '4.0.0' licenses: ['Apache 2.0'] authors: ['Lucas Eznarriaga , Midokura', 'Jaume Devesa , Midokura', diff --git a/node_roles.yaml b/node_roles.yaml new file mode 100644 index 0000000..5ef82f5 --- /dev/null +++ b/node_roles.yaml @@ -0,0 +1,18 @@ +nsdb: + name: Network State Database for MidoNet + description: MidoNet Synchronization Services + has_primary: false + public_ip_required: false + weight: 100 + limits: + min: 1 + recommended: 3 + +midonet-gw: + name: MidoNet HA Gateway + description: OpenStack node Gateway using MidoNet BGP + has_primary: false + public_ip_required: true + weight: 100 + conflicts: + - controller diff --git a/post_install.sh b/post_install.sh deleted file mode 100644 index d974ca7..0000000 --- a/post_install.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash -# -# Fuel 7.0 default deployment config hack script -# - -#TODO: rollback all changes on package uninstall (uninstall.sh) - -KEYSTONE_PASS=$(sed -n '/"FUEL_ACCESS"/,/^"/s/\(^[ ]*"password": "\)\(.*\)\("\)/\2/p') -[ -z "$KEYSTONE_PASS" ] && KEYSTONE_PASS=$(sed -n '/FUEL_ACCESS/,/^[ ]/s/\(^[ ]*password: \)\(.*\)\(\)/\2/p') -[ -z "$KEYSTONE_PASS" ] && KEYSTONE_PASS=admin -export KEYSTONE_USER=admin -export KEYSTONE_PASS -FUEL_VER=$(fuel --version 2>&1 | tail -n1 | cut -c 1-3) -YAML_CFG=/etc/fuel/$FUEL_VER/version.yaml - -# Enable Fuel experimental features -if ! grep -q "\- experimental" $YAML_CFG; then - echo "Enableing Fuel experimental features in $YAML_CFG" - sed -i 's|^\([ ]*\)- mirantis|\0\n\1- experimental|' $YAML_CFG - dockerctl restart nailgun > /dev/null - echo -n "Restarting Nailgun" - while ! fuel plugins &> /dev/null; do - echo -n . - sleep 1 - done - echo -# dockerctl restart nginx -# dockerctl shell cobbler -# cobbler sync -fi - -# Generate and register additional roles -echo "Updating MidoNet NSDB & GW Fuel roles:" -cat > /tmp/role-nsdb.yaml << THEEND -name: nsdb -meta: - name: Network State Database for MidoNet - description: MidoNet Synchronization Services -volumes_roles_mapping: - - allocate_size: min - id: os -THEEND -cat > /tmp/role-gw.yaml << THEEND -name: midonet-gw -meta: - name: MidoNet HA Gateway - description: MidoNet Gateway -volumes_roles_mapping: -- allocate_size: min - id: os -THEEND -REL=$(fuel rel 2>/dev/null | grep "on Ubuntu" | awk '{ print $1 }') -fuel role --update --rel $REL --file /tmp/role-nsdb.yaml 2> /dev/null -fuel role --update --rel $REL --file /tmp/role-gw.yaml 2> /dev/null -rm -rf /tmp/role-nsdb.yaml /tmp/role-gw.yaml - -# Check if additional deployment tasks needs to be enabled -pushd /tmp > /dev/null -fuel rel --rel $REL --deployment-tasks --download 2> /dev/null -if ! grep -q "\- id: nsdb" release_$REL/deployment_tasks.yaml; then - echo "Enabling MidoNet NSDB Fuel deployment tasks" - cat >> release_$REL/deployment_tasks.yaml << THEEND -- id: nsdb - parameters: - strategy: - type: parallel - requires: - - deploy_start - required_for: - - deploy_end - role: - - nsdb - type: group - tasks: - - logging - - hiera - - globals - - netconfig -THEEND - fuel rel --rel $REL --deployment-tasks --upload 2> /dev/null -fi -if ! grep -q "\- id: midonet-gw" release_$REL/deployment_tasks.yaml; then - echo "Enabling MidoNet GW Fuel deployment tasks" - cat >> release_$REL/deployment_tasks.yaml << THEEND -- id: midonet-gw - parameters: - strategy: - type: parallel - required_for: - - deploy_end - requires: - - deploy_start - role: - - midonet-gw - tasks: - - logging - - hiera - - globals - - netconfig - type: group -THEEND - fuel rel --rel $REL --deployment-tasks --upload 2> /dev/null -fi -rm -rf /tmp/release_$REL/deployment_tasks.yaml -popd > /dev/null - -echo Done. -echo - diff --git a/repositories/ubuntu/.gitkeep b/repositories/ubuntu/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/repositories/ubuntu/python-neutron-plugin-midonet_1.0.0_all.deb b/repositories/ubuntu/python-neutron-plugin-midonet_1.0.0_all.deb new file mode 100644 index 0000000..bac457c Binary files /dev/null and b/repositories/ubuntu/python-neutron-plugin-midonet_1.0.0_all.deb differ diff --git a/repositories/ubuntu/python-neutron-plugin-midonet_2015.1.1_all.deb b/repositories/ubuntu/python-neutron-plugin-midonet_2015.1.1_all.deb deleted file mode 100644 index 5557ad2..0000000 Binary files a/repositories/ubuntu/python-neutron-plugin-midonet_2015.1.1_all.deb and /dev/null differ diff --git a/specs/fuel-plugin-midonet.rst b/specs/fuel-plugin-midonet.rst index 54c631d..da249ba 100644 --- a/specs/fuel-plugin-midonet.rst +++ b/specs/fuel-plugin-midonet.rst @@ -10,7 +10,7 @@ MidoNet open source version that will be deployed is v2015.06. Midokura Enterprise Midonet (MEM) version that will be deployed is 1.9. -This plugin currently is only compatible with version 7.0 of Mirantis +This plugin currently is only compatible with version 8.0 of Mirantis OpenStack Fuel. Problem description @@ -41,14 +41,14 @@ What is new from the previous versions ====================================== This plugin was originally developed for Fuel 6.1, and there are some -important changes included in this plugin version for Fuel 7.0: +important changes included in this plugin version for Fuel 8.0: - Regarding encapsulation methods, the plugin only supported GRE on previous versions. Now it supports both GRE and VxLAN. - Regarding OS support, the plugin supported both CentOS 6.5 and Ubuntu 14.04 on previous versions. Now it only supports Ubuntu - 14.04, since Fuel 7.0 itself only supports this OS version. + 14.04, since Fuel 8.0 itself only supports this OS version. Alternatives ------------ @@ -68,8 +68,8 @@ None. Upgrade impact -------------- -This plugin is only compatible with Fuel 7.0. If an upgrade is performed -on the Fuel Master node to Fuel version higher than 7.0, it could stop +This plugin is only compatible with Fuel 8.0. If an upgrade is performed +on the Fuel Master node to Fuel version higher than 8.0, it could stop working. Security impact @@ -125,7 +125,7 @@ Work Items Dependencies ============ -* Fuel 7.0 +* Fuel 8.0 Testing ======= diff --git a/tasks.yaml b/tasks.yaml index cd8d99e..9801e27 100644 --- a/tasks.yaml +++ b/tasks.yaml @@ -1,184 +1,26 @@ -# -# Pre-deployment tasks -# - -# When the node is not the controller and we need to configure the public -# address of the node, somehow it fails saying that openvswitch is not -# installed. By creating the file '/etc/hiera/override/node/${::fqdn}.yaml and -# setting use_neutron:true on it we force that openvswitch will be installed by -# the l23network module. that does not mean that we will install neutron there. -- id: midonet_trick_l23network - role: [nsdb, compute, midonet-gw] - stage: pre_deployment/6001 - required_for: [pre_deployment_end] - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-trick-l23network.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" - timeout: 720 - -# -# Post-deployment tasks -# - -# Configure the repositories and the puppet modules we need to deploy -# midonet on the nodes. -- id: midonet_install_dependencies - role: [primary-controller, controller, compute, nsdb, midonet-gw] - stage: post_deployment/1003 - required_for: [post_deployment_end] +# Install the MidoNet dependencies +- role: + - primary-controller + - controller + - compute + - nsdb + - midonet-gw + stage: pre_deployment type: shell parameters: - cmd: ./install_dependencies.sh + cmd: bash install_midonet_puppet_modules.sh timeout: 1440 -- id: midonet_install_repositories - role: [primary-controller, controller, compute, nsdb, midonet-gw] - stage: post_deployment/1004 - required_for: [post_deployment_end] +# Override neutron params +- role: + - primary-controller + - controller + - compute + - nsdb + - midonet-gw + stage: pre_deployment type: puppet parameters: - puppet_manifest: puppet/manifests/midonet-define-repositories.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" - timeout: 720 - -# Enable IP forward in all the nodes that will install midolman agent -- id: midonet_enable_ip_forward - role: [nsdb, compute, controller, primary-controller] - stage: post_deployment/4400 - required_for: [post_deployment_end] - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-enable-ip-forward.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" - timeout: 720 - -# This task will install and configure the `nsdb` role (with zookeeper -# and cassandra) -- id: midonet_cassandra_and_zookeeper - role: [nsdb] - stage: post_deployment/6001 - required_for: [deploy_end] - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-nsdb.pp + puppet_manifest: puppet/manifests/midonet-override-hiera.pp puppet_modules: "puppet/modules/:/etc/puppet/modules/" timeout: 1440 - -# Only running on primary controller: since we can only set tasks on -# post-deployments, reaching this point means Neutron is deployed with -# ML2 plugin (the default one). This script cleans the networks created -# by the regular deployment. -- id: midonet_clean_neutron_db - role: [primary-controller] - stage: post_deployment/6400 - type: shell - parameters: - cmd: ./clean_neutron.sh - timeout: 1440 - fail_on_error: false - -# Disable all the Neutron services: neutorn-server, l3-agent, dhcp-agent -# metadata-agent -- id: midonet_disable_services - role: [primary-controller, controller] - stage: post_deployment/6405 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-disable-services.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 720 - -# Deploy the midonet api in the controllers -- id: midonet_deploy_api - role: [primary-controller, controller] - stage: post_deployment/6410 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-install-api.pp - puppet_modules: puppet/modules:/etc/puppet/modules/ - timeout: 1440 - -# Install, configure and run MidoNet agent and remove any other -# openvswitch package which is not the Kernel module -- id: midonet_agent - role: [primary-controller, controller, compute, midonet-gw] - stage: post_deployment/6415 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-install-agent.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" - timeout: 1440 - -# During deployment, openvswitch has created a datapath called `ovs-services`. -# Stop MidoNet agent, and clean the datapath, and run MidoNet agent again -- id: midonet_delete_datapaths - role: [primary-controller, controller, compute, midonet-gw] - stage: post_deployment/6420 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-delete-datapaths.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 720 - -# Install nova-rootwrap network filters -- id: midonet_nova_network - role: [compute] - stage: post_deployment/6421 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-install-nova-network.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 720 - -# Register any host that runs MidoNet agent to the default tunnelzone -- id: midonet_host_registry - role: [primary-controller, controller, compute, midonet-gw] - stage: post_deployment/6425 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-host-registry.pp - puppet_modules: "puppet/modules/:/etc/puppet/modules/" - timeout: 720 - -# Reconfigure neturon files to run with MidoNet plugin -- id: midonet_reconfigure_neutron - role: [primary-controller, controller] - stage: post_deployment/6430 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-reconfigure-neutron.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 720 - -# Clean and run Neutron database. That may help if someday we need a MidoNet -# specific database table -- id: midonet_recreate_neutron_db - role: [primary-controller] - stage: post_deployment/6435 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-recreate-neutron-db.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 1440 - -# Recreate the default networks on Neutron database and restart Neutron -# services -- id: midonet_restart_neutron - role: [primary-controller, controller] - stage: post_deployment/6440 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-restart-neutron.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 720 - -# In Gateway node: register the node as the gateway of the deployment -- id: midonet_configure_gateway - role: [midonet-gw] - stage: post_deployment/6500 - type: puppet - parameters: - puppet_manifest: puppet/manifests/midonet-gateway-bgp.pp - puppet_modules: puppet/modules:/etc/puppet/modules - timeout: 1440 diff --git a/volumes.yaml b/volumes.yaml new file mode 100644 index 0000000..e372c3b --- /dev/null +++ b/volumes.yaml @@ -0,0 +1,5 @@ +volumes_roles_mapping: + nsdb: + - {allocate_size: "min", id: "os"} + - {allocate_size: "all", id: "vm"} +volumes: []