diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e06d208 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..04c83b1 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +fuel-plugin-nuage +============ + +Plugin description \ No newline at end of file diff --git a/deployment_scripts/configure_vsd_cms_id.py b/deployment_scripts/configure_vsd_cms_id.py new file mode 100644 index 0000000..e278e99 --- /dev/null +++ b/deployment_scripts/configure_vsd_cms_id.py @@ -0,0 +1,90 @@ +# Copyright 2015 Alcatel-Lucent USA Inc. +# +# 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 argparse +import logging +import os +import sys +from uuid import getnode + +def dummy(msg): + return msg + +import __builtin__ +__builtin__.__dict__['_'] = dummy + +def get_mac(): + mac = getnode() + return ':'.join(("%012X" % mac)[i:i + 2] for i in range(0, 12, 2)) + +DEFAULT_CMS_NAME = 'OpenStack_' + get_mac() + +from restproxy import RESTProxyServer + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler()) + +REST_SUCCESS_CODES = range(200, 207) + +def init_arg_parser(): + + parser = argparse.ArgumentParser() + parser.add_argument('--server', action='store', required=True, + help='VSD IP address') + parser.add_argument('--serverauth', action='store', required=True, + help='VSD login username and password') + parser.add_argument('--organization', action='store', required=True, + help='VSD organization') + parser.add_argument('--auth_resource', action='store', required=True, + help='VSD auth resource') + parser.add_argument('--serverssl', action='store', required=True, + help='VSD Server SSL') + parser.add_argument('--base_uri', action='store', required=True, + help='Nuage Base URI') + parser.add_argument('--name', action='store', + default=DEFAULT_CMS_NAME, + help='The name of the CMS to create on VSD') + return parser + + +def main(): + parser = init_arg_parser() + args = parser.parse_args() + + try: + restproxy = RESTProxyServer(server=args.server, + base_uri=args.base_uri, + serverssl=args.serverssl, + serverauth=args.serverauth, + auth_resource=args.auth_resource, + organization=args.organization) + except Exception as e: + logger.error('Error in connecting to VSD:%s' % str(e)) + sys.exit(1) + + response = restproxy.rest_call('POST', "/cms", {'name': args.name}) + if response[0] not in REST_SUCCESS_CODES: + logger.error('Failed to create CMS on VSD.') + sys.exit(1) + + cms_id = response[3][0]['ID'] + cfgfile = open("cms_id.txt",'w') + cfgfile.write(cms_id) + cfgfile.close() + logger.info("CMS ID generated by Nuage VSD: %s", cms_id) + logger.info("CMS ID has also been stored in auto-generated cms_id.txt file") + logger.info("Provide this CMS ID on the Fuel UI before deploying your Openstack environment") + +if __name__ == '__main__': + main() diff --git a/deployment_scripts/deploy.sh b/deployment_scripts/deploy.sh new file mode 100755 index 0000000..3e4f2cb --- /dev/null +++ b/deployment_scripts/deploy.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# It's a script which deploys your plugin +echo fuel-plugin-nuage > /tmp/fuel-plugin-nuage diff --git a/deployment_scripts/disable_pacemaker_neutron_services.sh b/deployment_scripts/disable_pacemaker_neutron_services.sh new file mode 100644 index 0000000..6f3b9ce --- /dev/null +++ b/deployment_scripts/disable_pacemaker_neutron_services.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +crm resource stop p_neutron-metadata-agent +crm configure delete p_neutron-metadata-agent + +crm resource stop p_neutron-dhcp-agent +crm configure delete p_neutron-dhcp-agent + +crm resource stop p_neutron-l3-agent +crm configure delete p_neutron-l3-agent diff --git a/deployment_scripts/pre_compute_setup.sh b/deployment_scripts/pre_compute_setup.sh new file mode 100644 index 0000000..985705f --- /dev/null +++ b/deployment_scripts/pre_compute_setup.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +lineno=$(iptables -nvL INPUT --line-numbers | grep "state RELATED,ESTABLISHED" | awk '{print $1}') +iptables -I INPUT $lineno -s 0.0.0.0/0 -p udp -m multiport --dports 4789 -m comment --comment "001 vxlan incoming" -j ACCEPT + +lineno=$(iptables -nvL INPUT --line-numbers | grep "state NEW,RELATED,ESTABLISHED" | awk '{print $1}') +iptables -I INPUT $lineno -s 0.0.0.0/0 -p tcp -m multiport --dports 9697 -m comment --comment "Nuage metadata listen port for tenant VM metadata requests on compute" -j ACCEPT + +iptables-save > /etc/iptables/rules.v4 + +out=$(cat /proc/net/bonding/bond0 | grep "Slave Interface" | grep "eth") + +if [[ " ${out[*]} " == *"eth"* ]]; then + echo "NIC Bonding exists on Openstack nodes" + bond_intf=$(ifconfig -a | grep "bond" | awk '{print $1}') + for intf in $bond_intf + do + (dhclient $intf) & sleep 10 ; kill $! + done + exit 0 +else + echo "No NIC Bonding present on Openstack nodes" +fi + +intf_list=$(ifconfig -a | grep "eth" | awk '{print $1}') + +for intf in $intf_list +do + (dhclient $intf) & sleep 10 ; kill $! +done diff --git a/deployment_scripts/pre_controller_setup.sh b/deployment_scripts/pre_controller_setup.sh new file mode 100644 index 0000000..730a5f3 --- /dev/null +++ b/deployment_scripts/pre_controller_setup.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +lineno=$(iptables -nvL INPUT --line-numbers | grep "state NEW,RELATED,ESTABLISHED" | awk '{print $1}') +iptables -I INPUT $lineno -s 0.0.0.0/0 -p tcp -m multiport --dports 8775 -m comment --comment "Nuage Metadata Agent listen port on the controller" -j ACCEPT + +iptables-save > /etc/iptables/rules.v4 + +out=$(cat /proc/net/bonding/bond0 | grep "Slave Interface" | grep "eth") + +if [[ " ${out[*]} " == *"eth"* ]]; then + echo "NIC Bonding exists on Openstack nodes" + bond_intf=$(ifconfig -a | grep "bond" | awk '{print $1}') + for intf in $bond_intf + do + (dhclient $intf) & sleep 10 ; kill $! + done + exit 0 +else + echo "No NIC Bonding present on Openstack nodes" +fi + +intf_list=$(ifconfig -a | grep "eth" | awk '{print $1}') + +for intf in $intf_list +do + (dhclient $intf) & sleep 10 ; kill $! +done diff --git a/deployment_scripts/puppet/manifests/compute-hiera-override.pp b/deployment_scripts/puppet/manifests/compute-hiera-override.pp new file mode 100644 index 0000000..f9d9bb0 --- /dev/null +++ b/deployment_scripts/puppet/manifests/compute-hiera-override.pp @@ -0,0 +1,19 @@ +$hiera_dir = '/etc/hiera/override' +$plugin_name = 'nuage-openstack-fuel-plugin' +$plugin_yaml = "${plugin_name}.yaml" + +file {'/etc/hiera/override': + ensure => directory, +} -> + +file { "${hiera_dir}/${plugin_yaml}": + ensure => file, + content => template('nuage/compute.plugins.yaml.erb'), + require => File['/etc/hiera/override'] +} -> + +file_line {"${plugin_name}_hiera_override": + path => '/etc/hiera.yaml', + line => " - override/${plugin_name}", + after => ' - override/module/%{calling_module}', +} diff --git a/deployment_scripts/puppet/manifests/controller-hiera-override.pp b/deployment_scripts/puppet/manifests/controller-hiera-override.pp new file mode 100644 index 0000000..dec4ecf --- /dev/null +++ b/deployment_scripts/puppet/manifests/controller-hiera-override.pp @@ -0,0 +1,20 @@ +$hiera_dir = '/etc/hiera/override' +$plugin_name = 'nuage-openstack-fuel-plugin' +$plugin_yaml = "${plugin_name}.yaml" + +file {'/etc/hiera/override': + ensure => directory, +} -> + +file { "${hiera_dir}/${plugin_yaml}": + ensure => file, + content => "quantum_settings: + predefined_networks: ''", + require => File['/etc/hiera/override'] +} -> + +file_line {"${plugin_name}_hiera_override": + path => '/etc/hiera.yaml', + line => " - override/${plugin_name}", + after => ' - override/module/%{calling_module}', +} diff --git a/deployment_scripts/puppet/manifests/site-compute-post-1.pp b/deployment_scripts/puppet/manifests/site-compute-post-1.pp new file mode 100644 index 0000000..0a7cb1b --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-compute-post-1.pp @@ -0,0 +1,2 @@ +include nuage +include nuage::compute::configure_vrs diff --git a/deployment_scripts/puppet/manifests/site-compute-post-2.pp b/deployment_scripts/puppet/manifests/site-compute-post-2.pp new file mode 100644 index 0000000..76d7983 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-compute-post-2.pp @@ -0,0 +1,2 @@ +include nuage +include nuage::compute::install_nuage_metadata_agent diff --git a/deployment_scripts/puppet/manifests/site-compute-post-3.pp b/deployment_scripts/puppet/manifests/site-compute-post-3.pp new file mode 100644 index 0000000..5e4d347 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-compute-post-3.pp @@ -0,0 +1,8 @@ +include nuage + +class { 'nuage::compute::nova': + firewall_driver => 'nova.virt.firewall.NoopFirewallDriver', + security_group_api => 'neutron', + libvirt_vif_driver => 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver', + neutron_ovs_bridge => 'alubr0', +} diff --git a/deployment_scripts/puppet/manifests/site-controller-post-1.pp b/deployment_scripts/puppet/manifests/site-controller-post-1.pp new file mode 100644 index 0000000..8e0cdf8 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-1.pp @@ -0,0 +1 @@ +include nuage::controller::disable_neutron_services diff --git a/deployment_scripts/puppet/manifests/site-controller-post-2.pp b/deployment_scripts/puppet/manifests/site-controller-post-2.pp new file mode 100644 index 0000000..c39e092 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-2.pp @@ -0,0 +1 @@ +include nuage::controller::purge_neutron_packages diff --git a/deployment_scripts/puppet/manifests/site-controller-post-3.pp b/deployment_scripts/puppet/manifests/site-controller-post-3.pp new file mode 100644 index 0000000..81f8adb --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-3.pp @@ -0,0 +1 @@ +include nuage::controller::install_nuage_neutron diff --git a/deployment_scripts/puppet/manifests/site-controller-post-4.pp b/deployment_scripts/puppet/manifests/site-controller-post-4.pp new file mode 100644 index 0000000..35384d2 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-4.pp @@ -0,0 +1,6 @@ +include nuage + +class { 'nuage::controller::set_nuage_core_plugin': + core_plugin => 'neutron.plugins.nuage.plugin.NuagePlugin', + service_plugins => '', +} diff --git a/deployment_scripts/puppet/manifests/site-controller-post-5.pp b/deployment_scripts/puppet/manifests/site-controller-post-5.pp new file mode 100644 index 0000000..089a294 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-5.pp @@ -0,0 +1,2 @@ +include nuage +include nuage::controller::configure_nuage_plugin diff --git a/deployment_scripts/puppet/manifests/site-controller-post-6.pp b/deployment_scripts/puppet/manifests/site-controller-post-6.pp new file mode 100644 index 0000000..e099dc1 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site-controller-post-6.pp @@ -0,0 +1,8 @@ +include nuage + +class { 'nuage::controller::nova': + firewall_driver => 'nova.virt.firewall.NoopFirewallDriver', + security_group_api => 'neutron', + libvirt_vif_driver => 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver', + neutron_ovs_bridge => 'alubr0', +} diff --git a/deployment_scripts/puppet/manifests/site.pp b/deployment_scripts/puppet/manifests/site.pp new file mode 100644 index 0000000..6c0d899 --- /dev/null +++ b/deployment_scripts/puppet/manifests/site.pp @@ -0,0 +1,15 @@ +# Copyright 2015 Mirantis, Inc. +# +# 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 + +include nuage diff --git a/deployment_scripts/puppet/modules/nuage/manifests/compute/configure_vrs.pp b/deployment_scripts/puppet/modules/nuage/manifests/compute/configure_vrs.pp new file mode 100644 index 0000000..68eadd8 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/compute/configure_vrs.pp @@ -0,0 +1,55 @@ +# Configure the VRS on compute +class nuage::compute::configure_vrs { + + include ::nuage::params + + package { $::nuage::params::openvswitch_switch: + ensure => 'purged', + } -> + package { $::nuage::params::python_twisted: + ensure => 'present', + } -> + package { $::nuage::params::nuage_openvswitch_switch: + ensure => 'present', + require => Package[$::nuage::params::openvswitch_switch] + } + + file { '/etc/default/openvswitch-switch': + require => Package[$::nuage::params::nuage_openvswitch_switch], + notify => Service[$::nuage::params::nuage_openvswitch_switch] + } + + File_line<||> ~> Service[$::nuage::params::nuage_openvswitch_switch] + File['/etc/default/openvswitch-switch'] -> File_line<||> + + service { $::nuage::params::nuage_openvswitch_switch: + ensure => 'running', + require => Package[$::nuage::params::nuage_openvswitch_switch], + subscribe => File['/etc/default/openvswitch-switch'], + } + + file_line { 'openvswitch active controller ip address': + ensure => present, + line => "ACTIVE_CONTROLLER=${nuage::active_controller}", + match => 'ACTIVE_CONTROLLER=', + path => '/etc/default/openvswitch-switch', + } + + if $::nuage::backup_controller { + file_line { 'openvswitch backup controller ip address': + ensure => present, + line => "STANDBY_CONTROLLER=${nuage::backup_controller}", + match => 'STANDBY_CONTROLLER=', + path => '/etc/default/openvswitch-switch', + } + } + + if $::nuage::pat_to_underlay { + file_line { 'openvswitch uplink interface for pat to underlay': + ensure => present, + line => "NETWORK_UPLINK_INTF=${nuage::network_uplink_intf}", + match => 'NETWORK_UPLINK_INTF=', + path => '/etc/default/openvswitch-switch', + } + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/compute/install_nuage_metadata_agent.pp b/deployment_scripts/puppet/modules/nuage/manifests/compute/install_nuage_metadata_agent.pp new file mode 100644 index 0000000..2a4d3d7 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/compute/install_nuage_metadata_agent.pp @@ -0,0 +1,23 @@ +# Install nuage metadata agent packages + +class nuage::compute::install_nuage_metadata_agent { + + include ::nuage::params + + package { $::nuage::params::python_novaclient: + ensure => present, + } + + package { $::nuage::params::nuage_metadata_agent: + ensure => present, + require => Package[$::nuage::params::python_novaclient] + } -> + file { '/etc/default/nuage-metadata-agent': + content => template('nuage/nuage-metadata-agent.erb'), + notify => Service[$::nuage::params::nuage_openvswitch_switch], + } + + service { $::nuage::params::nuage_openvswitch_switch: + subscribe => File['/etc/default/nuage-metadata-agent'], + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/compute/nova.pp b/deployment_scripts/puppet/modules/nuage/manifests/compute/nova.pp new file mode 100644 index 0000000..37e0379 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/compute/nova.pp @@ -0,0 +1,26 @@ +# Nova parameters for Nuage + +class nuage::compute::nova ( + $firewall_driver, + $security_group_api, + $libvirt_vif_driver, + $neutron_ovs_bridge, +) { + + include ::nuage::params + + service { $::nuage::params::nova_compute: + ensure => running, + enable => true, + } + + Nova_config<||> ~> Service[$::nuage::params::nova_compute] + + #Setting nova.conf parameters on all Openstack nodes + nova_config { + 'DEFAULT/firewall_driver': value => $firewall_driver; + 'DEFAULT/security_group_api': value => $security_group_api; + 'DEFAULT/libvirt_vif_driver' : value => $libvirt_vif_driver; + 'neutron/ovs_bridge' : value => $neutron_ovs_bridge; + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/configure_nuage_plugin.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/configure_nuage_plugin.pp new file mode 100644 index 0000000..15cde51 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/configure_nuage_plugin.pp @@ -0,0 +1,44 @@ +# Configure Nuage neutron plugin + +class nuage::controller::configure_nuage_plugin { + + include ::nuage::params + + service { $::nuage::params::neutron_server: + ensure => running, + enable => true, + subscribe => File['/etc/neutron/plugin.ini'] + } + + package { $::nuage::params::nuage_neutron: + ensure => present, + } -> + file { '/etc/neutron/plugins/nuage': + ensure => directory, + owner => 'root', + group => 'neutron', + mode => '0640' + } -> + file { '/etc/neutron/plugins/nuage/plugin.ini': + ensure => 'present', + require => File['/etc/neutron/plugins/nuage'], + content => template('nuage/plugin.ini.erb'), + } -> + file {'/etc/neutron/plugin.ini': + ensure => link, + target => '/etc/neutron/plugins/nuage/plugin.ini', + require => Package[$::nuage::params::nuage_neutron], + notify => Service[$::nuage::params::neutron_server] + } + + if $::nuage::pat_to_underlay { + file_line { 'config flag in nuage plugin file for pat to underlay': + ensure => present, + line => "nuage_pat = default_enabled", + match => 'nuage_pat =', + path => '/etc/neutron/plugins/nuage/plugin.ini', + require => File['/etc/neutron/plugins/nuage/plugin.ini'], + notify => Service[$::nuage::params::neutron_server] + } + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/disable_neutron_services.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/disable_neutron_services.pp new file mode 100644 index 0000000..1afe71f --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/disable_neutron_services.pp @@ -0,0 +1,25 @@ +# Disable non-essential neutron services +class nuage::controller::disable_neutron_services { + + include ::nuage::params + + service { $::nuage::params::neutron_dhcp_agent: + ensure => 'stopped' + } + + service { $::nuage::params::neutron_l3_agent: + ensure => 'stopped' + } + + service { $::nuage::params::neutron_metadata_agent: + ensure => 'stopped' + } + + service { $::nuage::params::neutron_plugin_openvswitch_agent: + ensure => 'stopped' + } + + service { $::nuage::params::openvswitch_switch: + ensure => 'stopped' + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/install_nuage_neutron.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/install_nuage_neutron.pp new file mode 100644 index 0000000..8f81b86 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/install_nuage_neutron.pp @@ -0,0 +1,18 @@ +# Install Nuage neutron packages + +class nuage::controller::install_nuage_neutron { + + include ::nuage::params + + package { $::nuage::params::nuage_neutron: + ensure => present, + } + + package { $::nuage::params::nuage_openstack_neutronclient: + ensure => present, + } + + package { $::nuage::params::nuage_python_nuagenetlib: + ensure => present, + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/nova.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/nova.pp new file mode 100644 index 0000000..a03cb96 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/nova.pp @@ -0,0 +1,42 @@ +# Nova parameters for Nuage + +class nuage::controller::nova ( + $firewall_driver, + $security_group_api, + $libvirt_vif_driver, + $neutron_ovs_bridge, +) { + + include ::nuage::params + + service { $::nuage::params::nova_api: + ensure => running, + enable => true, + } + + service { $::nuage::params::nova_scheduler: + ensure => running, + enable => true, + } + + service { $::nuage::params::nova_conductor: + ensure => running, + enable => true, + } + + Nova_config<||> ~> Service[$::nuage::params::nova_api, + $::nuage::params::nova_scheduler, + $::nuage::params::nova_conductor] + + #Setting nova.conf parameters on all Openstack nodes + nova_config { + 'DEFAULT/firewall_driver': value => $firewall_driver; + 'DEFAULT/security_group_api': value => $security_group_api; + 'DEFAULT/libvirt_vif_driver' : value => $libvirt_vif_driver; + 'DEFAULT/use_forwarded_for' : value => 'True'; + 'DEFAULT/instance_name_template' : value => 'inst-%08x'; + 'DEFAULT/metadata_listen_port' : value => $nuage::nova_metadata_port; + 'neutron/ovs_bridge' : value => $neutron_ovs_bridge; + 'neutron/service_metadata_proxy' : value => 'True'; + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/purge_neutron_packages.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/purge_neutron_packages.pp new file mode 100644 index 0000000..2347532 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/purge_neutron_packages.pp @@ -0,0 +1,26 @@ +# Purge non-essential neutron packages + +class nuage::controller::purge_neutron_packages { + + include ::nuage::params + + package { $::nuage::params::neutron_dhcp_agent: + ensure => 'purged' + } + + package { $::nuage::params::neutron_l3_agent: + ensure => 'purged' + } + + package { $::nuage::params::neutron_metadata_agent: + ensure => 'purged' + } + + package { $::nuage::params::neutron_plugin_openvswitch_agent: + ensure => 'purged' + } + + package { $::nuage::params::openvswitch_switch: + ensure => 'purged' + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/controller/set_nuage_core_plugin.pp b/deployment_scripts/puppet/modules/nuage/manifests/controller/set_nuage_core_plugin.pp new file mode 100644 index 0000000..4921f31 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/controller/set_nuage_core_plugin.pp @@ -0,0 +1,14 @@ +#Set neutron core plugin to nuage + +class nuage::controller::set_nuage_core_plugin ( + $core_plugin, + $service_plugins, +) { + + #Setting core plugin to be Nuage and disabling service plugins + + neutron_config { + 'DEFAULT/core_plugin' : value => $core_plugin; + 'DEFAULT/service_plugins': value => $service_plugins; + } +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/init.pp b/deployment_scripts/puppet/modules/nuage/manifests/init.pp new file mode 100644 index 0000000..0669ef0 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/init.pp @@ -0,0 +1,33 @@ +# Parameters for configuring Nuage Fuel plugin +class nuage { + +$settings = hiera('nuage-openstack-fuel-plugin') +$nova_settings=hiera('nova') +$neutron_settings=hiera_hash('quantum_settings', {}) +$nova_auth_ip=hiera('management_vip') + +$net_partition_name = $settings['nuage_net_partition_name'] +$vsd_ip = $settings['nuage_vsd_ip'] +$vsd_username = $settings['nuage_vsd_username'] +$vsd_password = $settings['nuage_vsd_password'] +$vsd_organization = $settings['nuage_vsd_organization'] +$base_uri_version = $settings['nuage_base_uri_version'] +$active_controller = $settings['nuage_active_vsc_ip'] +$backup_controller = $settings['nuage_backup_vsc_ip'] + +## Metadata settings +$metadata_port = $settings['metadata_port'] +$nova_metadata_port = $settings['nova_metadata_port'] +$nova_region_name = $settings['nova_region_name'] +$nova_api_endpoint_type = $settings['nova_api_endpoint_type'] +$metadata_secret=$neutron_settings['metadata']['metadata_proxy_shared_secret'] +$nova_os_password = $nova_settings['user_password'] +$nova_client_version = '2' +$nova_os_username = 'nova' +$nova_os_tenant_name = 'services' +$metadata_agent_start_with_ovs = 'true' + +$nuage_cms_id = $settings['nuage_cms_id'] +$pat_to_underlay = $settings['pat_to_underlay'] +$network_uplink_intf = $settings['pat_to_underlay_uplink_intf'] +} diff --git a/deployment_scripts/puppet/modules/nuage/manifests/params.pp b/deployment_scripts/puppet/modules/nuage/manifests/params.pp new file mode 100644 index 0000000..fda6810 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/manifests/params.pp @@ -0,0 +1,50 @@ +# OS specific parameters for the nuage plugin + +class nuage::params { + + if ($::osfamily == 'Redhat') { + + $nova_api = 'nova-api' + $nova_scheduler = 'nova-scheduler' + $nova_conductor = 'nova-conductor' + $nova_compute = 'nova-compute' + + $neutron_dhcp_agent = 'neutron-dhcp-agent' + $neutron_l3_agent = 'neutron-l3-agent' + $neutron_metadata_agent = 'neutron-metadata-agent' + $neutron_plugin_openvswitch_agent = 'neutron-openvswitch-agent' + $neutron_server = 'neutron-server' + $openvswitch_switch = 'openvswitch' + + $python_novaclient = 'python-novaclient' + $python_twisted = 'python-twisted' + + $nuage_neutron = 'nuage-neutron' + $nuage_metadata_agent = 'nuage-metadata-agent' + $nuage_openstack_neutronclient = 'nuage-openstack-neutronclient' + $nuage_python_nuagenetlib = 'nuagenetlib' + $nuage_openvswitch_switch = 'nuage-openvswitch' + } elsif($::osfamily == 'Debian') { + + $nova_api = 'nova-api' + $nova_scheduler = 'nova-scheduler' + $nova_conductor = 'nova-conductor' + $nova_compute = 'nova-compute' + + $neutron_dhcp_agent = 'neutron-dhcp-agent' + $neutron_l3_agent = 'neutron-l3-agent' + $neutron_metadata_agent = 'neutron-metadata-agent' + $neutron_plugin_openvswitch_agent = 'neutron-plugin-openvswitch-agent' + $neutron_server = 'neutron-server' + $openvswitch_switch = 'openvswitch-switch' + + $python_novaclient = 'python-novaclient' + $python_twisted = 'python-twisted' + + $nuage_neutron = 'nuage-openstack-neutron' + $nuage_metadata_agent = 'nuage-metadata-agent' + $nuage_openstack_neutronclient = 'nuage-openstack-neutronclient' + $nuage_python_nuagenetlib = 'nuagenetlib' + $nuage_openvswitch_switch = 'nuage-openvswitch-switch' + } +} diff --git a/deployment_scripts/puppet/modules/nuage/templates/compute.plugins.yaml.erb b/deployment_scripts/puppet/modules/nuage/templates/compute.plugins.yaml.erb new file mode 100644 index 0000000..7929e0b --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/templates/compute.plugins.yaml.erb @@ -0,0 +1 @@ +openstack::network::agents: [] diff --git a/deployment_scripts/puppet/modules/nuage/templates/nuage-metadata-agent.erb b/deployment_scripts/puppet/modules/nuage/templates/nuage-metadata-agent.erb new file mode 100644 index 0000000..f8fd79d --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/templates/nuage-metadata-agent.erb @@ -0,0 +1,30 @@ +# Copyright (C) 2014, Nuage Networks +# METADATA_PORT: TCP Port to listen for metadata server requests +# (metadata_port in neutron.conf) +METADATA_PORT=<%= scope.lookupvar('nuage::metadata_port') %> +# NOVA_METADATA_IP: IP address used by Nova metadata server +# (nova_metadata_ip in neutron.conf) +NOVA_METADATA_IP=<%= scope.lookupvar('nuage::nova_auth_ip') %> +# NOVA_METADATA_PORT: TCP Port used by Nova metadata server +# (metadata_listen_port in nova.conf or nova_metadata_port in neutron.conf) +NOVA_METADATA_PORT=<%= scope.lookupvar('nuage::nova_metadata_port') %> +# METADATA_PROXY_SHARED_SECRET: Shared secret to sign the instance-id +# request. Must match metadata_proxy_shared_secret in nova.conf +METADATA_PROXY_SHARED_SECRET="<%= scope.lookupvar('nuage::metadata_secret') %>" +# NOVA_CLIENT_VERSION: +NOVA_CLIENT_VERSION=<%= scope.lookupvar('nuage::nova_client_version') %> +# NOVA_OS_USERNAME: +NOVA_OS_USERNAME=<%= scope.lookupvar('nuage::nova_os_username') %> +# NOVA_OS_PASSWORD: +NOVA_OS_PASSWORD=<%= scope.lookupvar('nuage::nova_os_password') %> +# NOVA_OS_TENANT_NAME: +NOVA_OS_TENANT_NAME=<%= scope.lookupvar('nuage::nova_os_tenant_name') %> +# NOVA_OS_AUTH_URL: +NOVA_OS_AUTH_URL=http://<%= scope.lookupvar('nuage::nova_auth_ip') %>:5000/v2.0 +# NUAGE_METADATA_AGENT_START_WITH_OVS: if nuage-metadata-agent needs to be +# started with nuage-openvswitch-switch +NUAGE_METADATA_AGENT_START_WITH_OVS=<%= scope.lookupvar('nuage::metadata_agent_start_with_ovs') %> +# NOVA_API_ENDPOINT_TYPE: one of publicURL, internalURL, adminURL +NOVA_API_ENDPOINT_TYPE=<%= scope.lookupvar('nuage::nova_api_endpoint_type') %> +# NOVA_REGION_NAME: +NOVA_REGION_NAME=<%= scope.lookupvar('nuage::nova_region_name') %> diff --git a/deployment_scripts/puppet/modules/nuage/templates/plugin.ini.erb b/deployment_scripts/puppet/modules/nuage/templates/plugin.ini.erb new file mode 100644 index 0000000..1fd27a2 --- /dev/null +++ b/deployment_scripts/puppet/modules/nuage/templates/plugin.ini.erb @@ -0,0 +1,17 @@ +[RESTPROXY] +# Desired Name of VSD Organization/Enterprise to use when net-partition +# is not specified +default_net_partition_name = <%= scope.lookupvar('nuage::net_partition_name') %> +# Hostname or IP address and port for connection to VSD server +server = <%= scope.lookupvar('nuage::vsd_ip') %> +# VSD Username and password for OpenStack plugin connection +# User must belong to CSP Root group and CSP CMS group +serverauth = <%= scope.lookupvar('nuage::vsd_username') %>:<%= scope.lookupvar('nuage::vsd_password') %> + +### Do not change the below options for standard installs +organization = <%= scope.lookupvar('nuage::vsd_organization') %> +auth_resource = /me +serverssl = True +base_uri = /nuage/api/<%= scope.lookupvar('nuage::base_uri_version') %> +cms_id = <%= scope.lookupvar('nuage::nuage_cms_id') %> +nuage_pat = default_disabled diff --git a/deployment_scripts/test_neutron_setup_with_nuage_plugin.sh b/deployment_scripts/test_neutron_setup_with_nuage_plugin.sh new file mode 100644 index 0000000..f1bedd8 --- /dev/null +++ b/deployment_scripts/test_neutron_setup_with_nuage_plugin.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +source ~/openrc + +neutron net-list +if [ "$?" = "0" ]; then + echo "Neutron successfully started with Nuage Plugin" + exit 0 +else + echo "Neutron failed to start with Nuage Plugin" + exit 1 +fi diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml new file mode 100644 index 0000000..85da723 --- /dev/null +++ b/deployment_tasks.yaml @@ -0,0 +1,19 @@ +- id: controller-hiera-override + type: puppet + groups: [primary-controller, controller] + required_for: [globals] + requires: [hiera] + parameters: + puppet_manifest: puppet/manifests/controller-hiera-override.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- id: compute-hiera-override + type: puppet + groups: ['compute'] + required_for: [globals] + requires: [hiera] + parameters: + puppet_manifest: puppet/manifests/compute-hiera-override.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 diff --git a/environment_config.yaml b/environment_config.yaml new file mode 100644 index 0000000..d8b4184 --- /dev/null +++ b/environment_config.yaml @@ -0,0 +1,115 @@ +attributes: + # Show Nuage plugin option only in supported network config + metadata: + restrictions: + - condition: "not (cluster:net_provider == 'neutron' and networking_parameters:segmentation_type == 'vlan')" + message: "Please use Neutron with VLAN segmentation, the only network type supported with Nuage plugin." + nuage_net_partition_name: + value: '' + label: 'Nuage Net Partition name' + description: 'Nuage Net Partition name for VSD' + weight: 20 + type: "text" + nuage_vsd_ip: + value: '' + label: 'VSD IP address' + description: 'VSD Management IP address' + weight: 30 + type: "text" + regex: + source: '(^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))((:8443)|(:443))$' + error: "Valid format for VSD IP is VSD-IP:8443 for standalone VSD and VSD-IP:443 for clustered VSD" + nuage_vsd_username: + value: '' + label: 'VSD username' + description: 'VSD user' + weight: 40 + type: "text" + nuage_vsd_password: + value: '' + label: 'VSD password' + description: 'VSD password' + weight: 50 + type: "text" + nuage_vsd_organization: + value: '' + label: 'VSD organization name' + description: 'VSD organization' + weight: 60 + type: "text" + nuage_base_uri_version: + value: '' + label: 'Nuage base uri version' + description: 'Nuage base uri version number' + weight: 70 + type: "text" + regex: + source: '^(v[0-9]{1})_(([0-9]{1}))$' + error: "Invalid base URI version. Example of valid base uri version : v3_2 for VSP release 3.2" + nuage_active_vsc_ip: + value: '' + label: 'Active VSC IP address' + description: 'Active VSC IP address' + weight: 80 + type: "text" + regex: + source: '^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' + error: "Invalid Active VSC IP address" + nuage_backup_vsc_ip: + value: '' + label: 'Backup VSC IP address' + description: 'Backup VSC IP address' + weight: 90 + type: "text" + regex: + source: '(^(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|\s+' + error: "Invalid Standby VSC IP address" + metadata_port: + value: '9697' + label: 'Nuage Metadata agent port number' + description: 'Nuage Metadata agent port number' + weight: 100 + type: "text" + nova_metadata_port: + value: '8775' + label: 'Nova metadata port number' + description: 'Nova metadata port number' + weight: 110 + type: "text" + nova_region_name: + value: 'RegionOne' + label: 'Nova Region Name' + description: 'Nova Region name' + weight: 120 + type: "text" + nuage_cms_id: + value: '' + label: 'Nuage CMS ID' + description: 'Nuage CMS ID' + weight: 130 + type: "text" + pat_to_underlay: + value: false + label: "PAT to Underlay" + description: "If selected, PAT to underlay feature will be enabled" + weight: 140 + type: "checkbox" + pat_to_underlay_uplink_intf: + value: 'br-mgmt' + label: 'Uplink Interface for PAT to Underlay feature' + description: 'Provide an uplink interface only if PAT to Underlay feature enabled' + weight: 150 + type: "text" + nova_api_endpoint_type: + type: "radio" + weight: 160 + value: "publicURL" + label: "Nova API endpoint type" + description: "Select Nova API endpoint type" + values: + - data: "publicURL" + label: "publicURL" + - data: "internalURL" + label: "internalURL" + - data: "adminURL" + label: "adminURL" diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000..d09901d --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,30 @@ +# Plugin name +name: nuage-openstack-fuel-plugin +# Human-readable name for your plugin +title: Fuel Nuage plugin +# Plugin version +version: '1.0.0' +# Description +description: Nuage plugin for Fuel provides the functionality to add Nuage SDN for Mirantis OpenStack +# Required fuel version +fuel_version: ['7.0'] +# Specify license of your plugin +licenses: ['Apache License Version 2.0'] +# Specify author or company name +authors: ['Rohan Parulekar, Vishal Patil'] +# A link to the plugin's page +homepage: 'https://github.com/stackforge/fuel-plugins' +# Specify a group which your plugin implements, possible options: +# network, storage, storage::cinder, storage::glance, hypervisor +groups: [] + +# The plugin is compatible with releases in the list +releases: + - os: ubuntu + version: 2015.1.0-7.0 + mode: ['ha'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/ubuntu + +# Version of plugin package +package_version: '3.0.0' diff --git a/pre_build_hook b/pre_build_hook new file mode 100755 index 0000000..dc05e98 --- /dev/null +++ b/pre_build_hook @@ -0,0 +1,5 @@ +#!/bin/bash + +# Add here any the actions which are required before plugin build +# like packages building, packages downloading from mirrors and so on. +# The script should return 0 if there were no errors. diff --git a/repositories/centos/.gitkeep b/repositories/centos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/repositories/ubuntu/.gitkeep b/repositories/ubuntu/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tasks.yaml b/tasks.yaml new file mode 100644 index 0000000..1cd521c --- /dev/null +++ b/tasks.yaml @@ -0,0 +1,103 @@ +- role: ['primary-controller'] + stage: post_deployment/6001 + type: shell + parameters: + cmd: sudo bash ./disable_pacemaker_neutron_services.sh + timeout: 720 + fail_on_error: false + +- role: ['primary-controller','controller'] + stage: post_deployment/6002 + type: shell + parameters: + cmd: sudo bash ./pre_controller_setup.sh + timeout: 720 + fail_on_error: false + +- role: ['compute'] + stage: post_deployment/6003 + type: shell + parameters: + cmd: sudo bash ./pre_compute_setup.sh + timeout: 720 + fail_on_error: false + +- role: ['primary-controller','controller'] + stage: post_deployment/6004 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-1.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6005 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-2.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6006 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-3.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6007 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-4.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6008 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-5.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6009 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-controller-post-6.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['compute'] + stage: post_deployment/6010 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-compute-post-1.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['compute'] + stage: post_deployment/6011 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-compute-post-2.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['compute'] + stage: post_deployment/6012 + type: puppet + parameters: + puppet_manifest: puppet/manifests/site-compute-post-3.pp + puppet_modules: puppet/modules:/etc/puppet/modules + timeout: 720 + +- role: ['primary-controller','controller'] + stage: post_deployment/6013 + type: shell + parameters: + cmd: sudo bash ./test_neutron_setup_with_nuage_plugin.sh + timeout: 720 + fail_on_error: true