From 751ebb1c0c9944dc73e77daa4a32c2b9a1d94625 Mon Sep 17 00:00:00 2001 From: Stanislaw Bogatkin Date: Fri, 17 Oct 2014 16:51:01 +0400 Subject: [PATCH] LBaaS plugin for fuel, multinode Works for multinode only DocImpact Closes-Bug: #1392413 Implements: blueprint cinder-neutron-plugins-in-fuel Change-Id: I57e85dba161983c6d1408fe31cebd22b4030da6c --- LICENSE | 202 ++++++++++++++++++ README.md | 4 + deployment_scripts/puppet/manifests/site.pp | 1 + .../puppet/modules/lbaas/Gemfile | 7 + .../puppet/modules/lbaas/README.md | 79 +++++++ .../puppet/modules/lbaas/Rakefile | 18 ++ .../provider/lbaas_config/ini_setting.rb | 27 +++ .../provider/neutron_config/ini_setting.rb | 27 +++ .../lbaas/lib/puppet/type/lbaas_config.rb | 42 ++++ .../lbaas/lib/puppet/type/neutron_config.rb | 42 ++++ .../puppet/modules/lbaas/manifests/init.pp | 95 ++++++++ .../puppet/modules/lbaas/manifests/params.pp | 21 ++ .../puppet/modules/lbaas/metadata.json | 14 ++ .../modules/lbaas/spec/classes/init_spec.rb | 7 + .../puppet/modules/lbaas/spec/spec_helper.rb | 1 + .../puppet/modules/lbaas/tests/init.pp | 12 ++ environment_config.yaml | 6 + metadata.yaml | 25 +++ pre_build_hook | 14 ++ repositories/centos/.gitkeep | 0 repositories/ubuntu/.gitkeep | 0 tasks.yaml | 8 + 22 files changed, 652 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 deployment_scripts/puppet/manifests/site.pp create mode 100644 deployment_scripts/puppet/modules/lbaas/Gemfile create mode 100644 deployment_scripts/puppet/modules/lbaas/README.md create mode 100644 deployment_scripts/puppet/modules/lbaas/Rakefile create mode 100644 deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/lbaas_config/ini_setting.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/neutron_config/ini_setting.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/lib/puppet/type/lbaas_config.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/lib/puppet/type/neutron_config.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/manifests/init.pp create mode 100644 deployment_scripts/puppet/modules/lbaas/manifests/params.pp create mode 100644 deployment_scripts/puppet/modules/lbaas/metadata.json create mode 100644 deployment_scripts/puppet/modules/lbaas/spec/classes/init_spec.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/spec/spec_helper.rb create mode 100644 deployment_scripts/puppet/modules/lbaas/tests/init.pp create mode 100644 environment_config.yaml create mode 100644 metadata.yaml create mode 100755 pre_build_hook create mode 100644 repositories/centos/.gitkeep create mode 100644 repositories/ubuntu/.gitkeep create mode 100644 tasks.yaml 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..8474f26 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +LBaaS plugin for fuel +============ + +Plugin description diff --git a/deployment_scripts/puppet/manifests/site.pp b/deployment_scripts/puppet/manifests/site.pp new file mode 100644 index 0000000..e868cef --- /dev/null +++ b/deployment_scripts/puppet/manifests/site.pp @@ -0,0 +1 @@ +include lbaas \ No newline at end of file diff --git a/deployment_scripts/puppet/modules/lbaas/Gemfile b/deployment_scripts/puppet/modules/lbaas/Gemfile new file mode 100644 index 0000000..7bd34cd --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +puppetversion = ENV.key?('PUPPET_VERSION') ? "= #{ENV['PUPPET_VERSION']}" : ['>= 3.3'] +gem 'puppet', puppetversion +gem 'puppetlabs_spec_helper', '>= 0.1.0' +gem 'puppet-lint', '>= 0.3.2' +gem 'facter', '>= 1.7.0' diff --git a/deployment_scripts/puppet/modules/lbaas/README.md b/deployment_scripts/puppet/modules/lbaas/README.md new file mode 100644 index 0000000..d755b66 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/README.md @@ -0,0 +1,79 @@ +# lbaas + +#### Table of Contents + +1. [Overview](#overview) +2. [Module Description - What the module does and why it is useful](#module-description) +3. [Setup - The basics of getting started with lbaas](#setup) + * [What lbaas affects](#what-lbaas-affects) + * [Setup requirements](#setup-requirements) + * [Beginning with lbaas](#beginning-with-lbaas) +4. [Usage - Configuration options and additional functionality](#usage) +5. [Reference - An under-the-hood peek at what the module is doing and how](#reference) +5. [Limitations - OS compatibility, etc.](#limitations) +6. [Development - Guide for contributing to the module](#development) + +## Overview + +A one-maybe-two sentence summary of what the module does/what problem it solves. +This is your 30 second elevator pitch for your module. Consider including +OS/Puppet version it works with. + +## Module Description + +If applicable, this section should have a brief description of the technology +the module integrates with and what that integration enables. This section +should answer the questions: "What does this module *do*?" and "Why would I use +it?" + +If your module has a range of functionality (installation, configuration, +management, etc.) this is the time to mention it. + +## Setup + +### What lbaas affects + +* A list of files, packages, services, or operations that the module will alter, + impact, or execute on the system it's installed on. +* This is a great place to stick any warnings. +* Can be in list or paragraph form. + +### Setup Requirements **OPTIONAL** + +If your module requires anything extra before setting up (pluginsync enabled, +etc.), mention it here. + +### Beginning with lbaas + +The very basic steps needed for a user to get the module up and running. + +If your most recent release breaks compatibility or requires particular steps +for upgrading, you may wish to include an additional section here: Upgrading +(For an example, see http://forge.puppetlabs.com/puppetlabs/firewall). + +## Usage + +Put the classes, types, and resources for customizing, configuring, and doing +the fancy stuff with your module here. + +## Reference + +Here, list the classes, types, providers, facts, etc contained in your module. +This section should include all of the under-the-hood workings of your module so +people know what the module is touching on their system but don't need to mess +with things. (We are working on automating this section!) + +## Limitations + +This is where you list OS compatibility, version compatibility, etc. + +## Development + +Since your module is awesome, other users will want to play with it. Let them +know what the ground rules for contributing are. + +## Release Notes/Contributors/Etc **Optional** + +If you aren't using changelog, put your release notes here (though you should +consider using changelog). You may also add any additional sections you feel are +necessary or important to include here. Please use the `## ` header. diff --git a/deployment_scripts/puppet/modules/lbaas/Rakefile b/deployment_scripts/puppet/modules/lbaas/Rakefile new file mode 100644 index 0000000..d1e11f7 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/Rakefile @@ -0,0 +1,18 @@ +require 'rubygems' +require 'puppetlabs_spec_helper/rake_tasks' +require 'puppet-lint/tasks/puppet-lint' +PuppetLint.configuration.send('disable_80chars') +PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"] + +desc "Validate manifests, templates, and ruby files" +task :validate do + Dir['manifests/**/*.pp'].each do |manifest| + sh "puppet parser validate --noop #{manifest}" + end + Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file| + sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/ + end + Dir['templates/**/*.erb'].each do |template| + sh "erb -P -x -T '-' #{template} | ruby -c" + end +end diff --git a/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/lbaas_config/ini_setting.rb b/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/lbaas_config/ini_setting.rb new file mode 100644 index 0000000..465786c --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/lbaas_config/ini_setting.rb @@ -0,0 +1,27 @@ +Puppet::Type.type(:lbaas_config).provide( + :ini_setting, + :parent => Puppet::Type.type(:ini_setting).provider(:ruby) +) do + + def section + resource[:name].split('/', 2).first + end + + def setting + resource[:name].split('/', 2).last + end + + def separator + '=' + end + + def self.file_path + '/etc/neutron/lbaas_agent.ini' + end + + # added for backwards compatibility with older versions of inifile + def file_path + self.class.file_path + end + +end \ No newline at end of file diff --git a/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/neutron_config/ini_setting.rb b/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/neutron_config/ini_setting.rb new file mode 100644 index 0000000..f65c3dd --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/lib/puppet/provider/neutron_config/ini_setting.rb @@ -0,0 +1,27 @@ +Puppet::Type.type(:neutron_config).provide( + :ini_setting, + :parent => Puppet::Type.type(:ini_setting).provider(:ruby) +) do + + def section + resource[:name].split('/', 2).first + end + + def setting + resource[:name].split('/', 2).last + end + + def separator + '=' + end + + def self.file_path + '/etc/neutron/neutron.conf' + end + + # added for backwards compatibility with older versions of inifile + def file_path + self.class.file_path + end + +end \ No newline at end of file diff --git a/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/lbaas_config.rb b/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/lbaas_config.rb new file mode 100644 index 0000000..06ef144 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/lbaas_config.rb @@ -0,0 +1,42 @@ +Puppet::Type.newtype(:lbaas_config) do + + ensurable + + newparam(:name, :namevar => true) do + desc 'Section/setting name to manage from /etc/neutron/lbaas_agent.ini' + newvalues(/\S+\/\S+/) + end + + newproperty(:value) do + desc 'The value of the setting to be defined.' + munge do |value| + value = value.to_s.strip + value.capitalize! if value =~ /^(true|false)$/i + value + end + + def is_to_s( currentvalue ) + if resource.secret? + return '[old secret redacted]' + else + return currentvalue + end + end + + def should_to_s( newvalue ) + if resource.secret? + return '[new secret redacted]' + else + return newvalue + end + end + end + + newparam(:secret, :boolean => true) do + desc 'Whether to hide the value from Puppet logs. Defaults to `false`.' + + newvalues(:true, :false) + + defaultto false + end +end diff --git a/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/neutron_config.rb b/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/neutron_config.rb new file mode 100644 index 0000000..26f49dd --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/lib/puppet/type/neutron_config.rb @@ -0,0 +1,42 @@ +Puppet::Type.newtype(:neutron_config) do + + ensurable + + newparam(:name, :namevar => true) do + desc 'Section/setting name to manage from /etc/neutron/neutron.conf' + newvalues(/\S+\/\S+/) + end + + newproperty(:value) do + desc 'The value of the setting to be defined.' + munge do |value| + value = value.to_s.strip + value.capitalize! if value =~ /^(true|false)$/i + value + end + + def is_to_s( currentvalue ) + if resource.secret? + return '[old secret redacted]' + else + return currentvalue + end + end + + def should_to_s( newvalue ) + if resource.secret? + return '[new secret redacted]' + else + return newvalue + end + end + end + + newparam(:secret, :boolean => true) do + desc 'Whether to hide the value from Puppet logs. Defaults to `false`.' + + newvalues(:true, :false) + + defaultto false + end +end diff --git a/deployment_scripts/puppet/modules/lbaas/manifests/init.pp b/deployment_scripts/puppet/modules/lbaas/manifests/init.pp new file mode 100644 index 0000000..790efb1 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/manifests/init.pp @@ -0,0 +1,95 @@ +# == Class: lbaas +# +# Full description of class lbaas here. +# +# === Parameters +# +# Document parameters here. +# +# [*sample_parameter*] +# Explanation of what this parameter affects and what it defaults to. +# e.g. "Specify one or more upstream ntp servers as an array." +# +# === Variables +# +# Here you should define a list of variables that this module would require. +# +# [*sample_variable*] +# Explanation of how this variable affects the funtion of this class and if +# it has a default. e.g. "The parameter enc_ntp_servers must be set by the +# External Node Classifier as a comma separated list of hostnames." (Note, +# global variables should be avoided in favor of class parameters as +# of Puppet 2.6.) +# +# === Examples +# +# class { 'lbaas': +# servers => [ 'pool.ntp.org', 'ntp.local.company.com' ], +# } +# +# === Authors +# +# Author Name +# +# === Copyright +# +# Copyright 2014 Your name here, unless otherwise noted. +# +class lbaas { + include lbaas::params + + package { $lbaas::params::lbaas_package_name: + ensure => present, + } + +# Actually, we need to define some resource, where we will do this configs and then we will call this resource from here. It need to better split +# configuration part (we will try that package with neutron is anstalled in that defined resource) and we can notify something from resource - e.g. +# we can create notify from that resource to neutron-server service. But now it good in that view. +# if $::osfamily == 'Debian'{ +# neutron_config { +# "service_providers/service_provider": value => 'LOADBALANCER:Haproxy:neutron.services.loadbalancer.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default'; +# } +# } + +# Sorry, that needs to rework, obviously, but I haven't so much time to do it. + exec { "add_lbaas_plugin": + command => "/bin/sed -i \"/`egrep -v \'(^#|^$)\' $lbaas::params::neutron_conf_file | egrep \'.*service_plugins.*\'`/ s/$/,lbaas/\" $lbaas::params::neutron_conf_file", + unless => "/bin/egrep -v '(^#|^$)' $lbaas::params::neutron_conf_file | egrep '.*service_plugins.*lbaas.*'", + notify => Service['neutron-server'] + } + + lbaas_config { + "DEFAULT/device_driver": value => 'neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver'; + "DEFAULT/interface_driver": value => 'neutron.agent.linux.interface.OVSInterfaceDriver'; + "haproxy/user_group": value => $lbaas::params::usergroup; + } + +# That too should be redesigned, but I'm not sure that I need to write whole new provider to change one string of code. + exec { "enable_lbaas": + command => "/bin/sed -i \"s/'enable_lb': False/'enable_lb': True/\" $lbaas::params::horizon_settings_file", + unless => "/bin/egrep \"'enable_lb': True\" $lbaas::params::horizon_settings_file", + notify => Service[$lbaas::params::httpd_service_name], + } + + service { 'neutron-server': + ensure => running, + enable => true, + require => Package[$lbaas::params::lbaas_package_name], + } + + service { 'neutron-lbaas-agent': + ensure => running, + enable => true, + require => Package[$lbaas::params::lbaas_package_name], + } + + package { $lbaas::params::haproxy_pkg: + ensure => present, + } + + service { $lbaas::params::httpd_service_name: + enable => true, + ensure => running, + } + +} diff --git a/deployment_scripts/puppet/modules/lbaas/manifests/params.pp b/deployment_scripts/puppet/modules/lbaas/manifests/params.pp new file mode 100644 index 0000000..42aa867 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/manifests/params.pp @@ -0,0 +1,21 @@ +class lbaas::params { + $neutron_conf_file = '/etc/neutron/neutron.conf' + $lbaas_conf_file = '/etc/neutron/lbaas_agent.ini' + $haproxy_pkg = 'haproxy' + + if $::osfamily == 'Debian' { + $httpd_service_name = 'apache2' + $horizon_settings_file = '/etc/openstack-dashboard/local_settings.py' + $lbaas_package_name = 'neutron-lbaas-agent' + $usergroup = 'nogroup' + + } elsif($::osfamily == 'RedHat') { + $httpd_service_name = 'httpd' + $horizon_settings_file = '/etc/openstack-dashboard/local_settings' + $lbaas_package_name = 'openstack-neutron' + $usergroup = 'nobody' + + } else { + fail("unsupported family ${::osfamily}") + } +} diff --git a/deployment_scripts/puppet/modules/lbaas/metadata.json b/deployment_scripts/puppet/modules/lbaas/metadata.json new file mode 100644 index 0000000..c3f59c6 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/metadata.json @@ -0,0 +1,14 @@ +{ + "name": "sbog-lbaas", + "version": "0.1.0", + "author": "sbog", + "summary": "Module to manage lbaas", + "license": "Apache 2.0", + "source": "", + "project_page": "sbogatkin@mirantis.com", + "issues_url": "sbogatkin@mirantis.com", + "dependencies": [ + {"name":"puppetlabs-stdlib","version_requirement":">= 1.0.0"} + ] +} + diff --git a/deployment_scripts/puppet/modules/lbaas/spec/classes/init_spec.rb b/deployment_scripts/puppet/modules/lbaas/spec/classes/init_spec.rb new file mode 100644 index 0000000..daa09e9 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/spec/classes/init_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' +describe 'lbaas' do + + context 'with defaults for all parameters' do + it { should contain_class('lbaas') } + end +end diff --git a/deployment_scripts/puppet/modules/lbaas/spec/spec_helper.rb b/deployment_scripts/puppet/modules/lbaas/spec/spec_helper.rb new file mode 100644 index 0000000..2c6f566 --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/spec/spec_helper.rb @@ -0,0 +1 @@ +require 'puppetlabs_spec_helper/module_spec_helper' diff --git a/deployment_scripts/puppet/modules/lbaas/tests/init.pp b/deployment_scripts/puppet/modules/lbaas/tests/init.pp new file mode 100644 index 0000000..71b7e2d --- /dev/null +++ b/deployment_scripts/puppet/modules/lbaas/tests/init.pp @@ -0,0 +1,12 @@ +# The baseline for module testing used by Puppet Labs is that each manifest +# should have a corresponding test manifest that declares that class or defined +# type. +# +# Tests are then run by using puppet apply --noop (to check for compilation +# errors and view a log of events) or by fully applying the test in a virtual +# environment (to compare the resulting system state to the desired state). +# +# Learn more about module testing here: +# http://docs.puppetlabs.com/guides/tests_smoke.html +# +include lbaas diff --git a/environment_config.yaml b/environment_config.yaml new file mode 100644 index 0000000..cb45692 --- /dev/null +++ b/environment_config.yaml @@ -0,0 +1,6 @@ +attributes: + # Show lbaas only for neutron + metadata: + restrictions: + - condition: cluster:net_provider != 'neutron' + action: hide diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000..ad9bbc8 --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,25 @@ +# Plugin name +name: lbaas +title: LBaaS plugin for Neutron +# Plugin version +version: 1.0.0 +# Description +description: Enables LBaaS for Neutron, works in multinode mode only +# Required fuel version +fuel_version: ['6.0'] + +# The plugin is compatible with releases in the list +releases: + - os: ubuntu + version: 2014.2-6.0 + mode: ['multinode'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/ubuntu + - os: centos + version: 2014.2-6.0 + mode: ['multinode'] + deployment_scripts_path: deployment_scripts/ + repository_path: repositories/centos + +# Version of plugin package +package_version: '1.0.0' diff --git a/pre_build_hook b/pre_build_hook new file mode 100755 index 0000000..266fb48 --- /dev/null +++ b/pre_build_hook @@ -0,0 +1,14 @@ +#!/bin/bash + +set -eux + +ROOT="$(dirname `readlink -f $0`)" +MODULES="${ROOT}"/deployment_scripts/puppet/modules/ +TMP_DIR="${ROOT}"/tmp +mkdir -p "${MODULES}" +mkdir -p "${TMP_DIR}" +REPO_PATH='https://github.com/stackforge/fuel-library/tarball/f43d885914d74fbd062096763222f350f47480e1' + +wget -qO- "${REPO_PATH}" | \ + tar -C "${MODULES}" --strip-components=3 -zxvf - \ + stackforge-fuel-library-f43d885/deployment/puppet/inifile 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..ae3169b --- /dev/null +++ b/tasks.yaml @@ -0,0 +1,8 @@ +# Deployment is required for controllers +- role: ['controller'] + stage: post_deployment + type: puppet + parameters: + puppet_manifest: puppet/manifests/site.pp + puppet_modules: puppet/modules + timeout: 360