From 541320330b03e6c656560ce73ae5f57584274b2a Mon Sep 17 00:00:00 2001 From: Ed Balduf Date: Tue, 11 Aug 2015 09:10:39 -0600 Subject: [PATCH] Refactor of code to accomplish the following 1) Use SolidFire puppet module which matches the release of OpenStack in this Fuel release 2) Rename the modules class to controller 3) Call out the module at the correct time within deploy and correct class of node 4) Make environment_config.yaml appropriate for this version of the driver (i.e. no caching) 5) Documents as required 6) Clean up what is checked into git Change-Id: I05283107291d7d8a29502f043a5bb7d49b0c3bb8 --- .gitignore | 9 ++ .../puppet/manifests/controller.pp | 17 +++ deployment_scripts/puppet/manifests/site.pp | 3 - .../manifests/controller.pp | 63 ++++++++ .../plugin_solidfire_cinder/manifests/init.pp | 33 +--- docs/figures/cinder-solidfire-plugin.png | Bin 0 -> 87357 bytes docs/solidfire-cinder-guide.rst | 105 +++++++++++++ environment_config.yaml | 55 ++----- ...in-solidfire-cinder-1.0-1.0.0-1.noarch.rpm | Bin 17787 -> 0 bytes metadata.yaml | 6 +- specs/solidfire-plugin-specs.rst | 141 ++++++++++++++++++ tasks.yaml | 6 +- 12 files changed, 358 insertions(+), 80 deletions(-) create mode 100644 .gitignore create mode 100755 deployment_scripts/puppet/manifests/controller.pp delete mode 100755 deployment_scripts/puppet/manifests/site.pp create mode 100755 deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/controller.pp create mode 100644 docs/figures/cinder-solidfire-plugin.png create mode 100644 docs/solidfire-cinder-guide.rst delete mode 100644 fuel-plugin-solidfire-cinder-1.0-1.0.0-1.noarch.rpm create mode 100644 specs/solidfire-plugin-specs.rst diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3688c6c --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.tox +.build +*.pyc +repositories/centos/* +repositories/ubuntu/* +deployment_scripts/puppet/modules/inifile +deployment_scripts/puppet/modules/stdlib +build.sh +*.rpm diff --git a/deployment_scripts/puppet/manifests/controller.pp b/deployment_scripts/puppet/manifests/controller.pp new file mode 100755 index 0000000..09857a2 --- /dev/null +++ b/deployment_scripts/puppet/manifests/controller.pp @@ -0,0 +1,17 @@ +# +# Copyright 2015 SolidFire, 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 plugin_solidfire_cinder::controller \ No newline at end of file diff --git a/deployment_scripts/puppet/manifests/site.pp b/deployment_scripts/puppet/manifests/site.pp deleted file mode 100755 index 611d42f..0000000 --- a/deployment_scripts/puppet/manifests/site.pp +++ /dev/null @@ -1,3 +0,0 @@ -$fuel_settings = parseyaml($astute_settings_yaml) -#class {'plugin_solidfire_cinder::': } -include plugin_solidfire_cinder diff --git a/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/controller.pp b/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/controller.pp new file mode 100755 index 0000000..0d798fb --- /dev/null +++ b/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/controller.pp @@ -0,0 +1,63 @@ +# Copyright 2015 SolidFire, 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. +# + +class plugin_solidfire_cinder::controller ( + $backend_name = 'solidfire', + $backends = '' +) { + + include cinder::params + include cinder::client + + $plugin_settings = hiera('fuel-plugin-solidfire-cinder') + + if $::cinder::params::volume_package { + package { $::cinder::params::volume_package: + ensure => present, + } + Package[$::cinder::params::volume_package] -> Cinder_config<||> + } + + if $plugin_settings['multibackend'] { + $section = $backend_name + cinder_config { + "DEFAULT/enabled_backends": value => "${backend_name},${backends}"; + } + } else { + $section = 'DEFAULT' + } + + cinder::backend::solidfire { $section : + san_ip => $plugin_settings['solidfire_mvip'], + san_login => $plugin_settings['solidfire_admin_login'], + san_password => $plugin_settings['solidfire_admin_password'], + volume_backend_name => $section, + sf_emulate_512 => $plugin_settings['solidfire_emulate_512'], + sf_api_port => $plugin_settings['solidfire_api_port'], + # due to a non-update of the puppet modules in version 6.1 of fuel we need to set this + volume_driver => 'cinder.volume.drivers.solidfire.SolidFireDriver' + } + + Cinder_config<||>~> Service[cinder_volume] + + service { 'cinder_volume': + ensure => running, + name => $::cinder::params::volume_service, + enable => true, + hasstatus => true, + hasrestart => true, + } + +} diff --git a/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/init.pp b/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/init.pp index c978ad3..e72173f 100755 --- a/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/init.pp +++ b/deployment_scripts/puppet/modules/plugin_solidfire_cinder/manifests/init.pp @@ -1,3 +1,4 @@ +# # Copyright 2015 SolidFire, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -12,34 +13,4 @@ # License for the specific language governing permissions and limitations # under the License. # - -class plugin_solidfire_cinder { - - include cinder::params - - if $::fuel_settings['fuel-plugin-solidfire-cinder']['multibackend'] { - $section = 'cinder_solidfire' - } else { - $section = 'DEFAULT' - } - - if $::cinder::params::volume_package { - package { $::cinder::params::volume_package: - ensure => present, - } - Package[$::cinder::params::volume_package] -> Cinder_config<||> - } - - cinder_config { - "${section}/volume_driver": value => 'cinder.volume.drivers.solidfire.SolidFireDriver'; - "${section}/san_login": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_admin_login']; - "${section}/san_password": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_admin_password']; - "${section}/san_ip": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_mvip']; - "${section}/sf_api_port": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_api_port']; - "${section}/sf_emulate_512": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidifre_emulate_512']; - "${section}/sf_allow_template_caching": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_enable_image_caching']; - "${section}/sf_template_account_name": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_image_cache_account']; - "${section}/sf_account_prefix": value => $::fuel_settings['fuel-plugin-solidfire-cinder']['solidfire_account_prefix']; - } - -} +class plugin__solidfire_cinder {} \ No newline at end of file diff --git a/docs/figures/cinder-solidfire-plugin.png b/docs/figures/cinder-solidfire-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..6e235174e0aa4d63c6d2fc72d6ef34c0a2db5b44 GIT binary patch literal 87357 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 literal 0 HcmV?d00001 diff --git a/docs/solidfire-cinder-guide.rst b/docs/solidfire-cinder-guide.rst new file mode 100644 index 0000000..a20c542 --- /dev/null +++ b/docs/solidfire-cinder-guide.rst @@ -0,0 +1,105 @@ +************************************************************ +Guide to the SolidFire Cinder Plugin version 1.0.0 for Fuel +************************************************************ + +This document provides instructions for installing, configuring and using +SolidFire Cinder plugin for Fuel. + +Key terms, acronyms and abbreviations +===================================== + +MVIP + Management Virtual IP (MVIP) is the IP address (or hostname) of + the management interface to the SolidFire cluster + +Cluster Admin account + The Cluster Admin account on a SolidFire cluster is the account by + which you administer the SolidFire cluster. + +SolidFire accounts + SolidFire accounts are automatically created by the SolidFire + OpenStack driver as needed based on the Project ID. These accounts + manage the CHAP authentication for the volumes allocated by that + project. No configuration is needed for these accounts. + +SolidFire Cinder +============= + +The SolidFire Cinder Fuel plugin provides an automated method +to insert the necessary lines into the cinder.conf file. The plugin +extends the Fuel GUI to provide the necessary entry locations for the +information for the configuration file. + +License +------- + +======================= ================== +Component License type +======================= ================== +No Components are present + +============================================ + +Requirements +------------ + +======================= ================== +Requirement Version/Comment +======================= ================== +Fuel 6.1 + +============================================ + +Limitations +----------- + +Fuel does not support multiple storage backends in Cinder, therefore +the SolidFire Cinder Fuel plugin also does not support multiple backends. +The SolidFire Cinder Fuel plugin does however provide the ability to +create a configuarion file stanza such that when multi-backend support +is added to fuel the stanza is correct. + +Installation Guide +================== + +Provide step-by-step instructions for plugin installation. +If plugin requires pre-installation steps like backend configuration, +you should also add this information here. + +SolidFire Cinder Plugin installation +-------------------------- + +1. Download the plugin from Fuel Plugins Catalog. +2. Copy the plugin on already installed Fuel Master node. If you do not + have the Fuel Master node yet, see Quick Start Guide: + scp fuel-plugin-solidfire-cinder-1.0-1.0.1-1.noarch.rpm root@::/tmp +3. Log into the Fuel Master node. +4. Install the plugin: + cd /tmp + fuel plugins --install /tmp/fuel-plugin-solidfire-cinder-1.0-1.0.1-1.noarch.rpm +4. After plugin is installed, create a new OpenStack environment. +5. Configure your environment. +6. Open the Settings tab of the Fuel web UI and scroll down the page. Select the + Fuel plugin to enable SolidFire driver in Cinder plugin checkbox: +7. Enter the Cluster Admin account information (account and password) and the IP address + of the Management Virtual IP (MVIP) of the SolidFire Cluster. +7a. Select the defaults for all other SolidFire options. + +User Guide +========== + +Once the OpenStack instance is deployed by Fuel the SolidFire plugin provides no +user configurable or maintainable options. + +The SolidFire driver (Once configured by Fuel) will output all logs into the +cinder-volume process log file with the 'SolidFire' title. + +Known issues +============ + +There are no known issues at this time. + +Appendix +======== + +N/A diff --git a/environment_config.yaml b/environment_config.yaml index e899950..f6a29e8 100644 --- a/environment_config.yaml +++ b/environment_config.yaml @@ -1,15 +1,21 @@ attributes: multibackend: - value: false + value: true label: 'Multibackend enabled' - description: 'SolidFire will be used in a Multibackend env (not implemented by Fuel).' - weight: 40 + description: 'SolidFire will be used in a Multibackend env.' + weight: 10 type: "checkbox" - solidifire_admin_login: + solidfire_mvip: + value: '' + label: 'Cluster MVIP (san_ip)' + description: 'The hostname (or IP address) for the SolidFire Cluster API endpoint.' + weight: 20 + type: "text" + solidfire_admin_login: value: '' label: 'Login for Cluster Admin account (san_login)' description: 'Cluster account used by Cinder service.' - weight: 10 + weight: 30 type: "text" regex: source: '\S' @@ -18,17 +24,11 @@ attributes: value: '' label: 'Password for Cluster Admin account (san_password)' description: 'Cluster account used by Cinder service.' - weight: 20 + weight: 40 type: "password" - solidfire_mvip: - value: '' - label: 'Cluster MVIP (san_ip)' - description: 'The hostname (or IP address) for the SolidFire Cluster API endpoint.' - weight: 30 - type: "text" solidfire_api_port: value: '443' - label: 'Cluster enpoint port' + label: 'Cluster endpoint port' description: 'The TCP port to use for API communication with the cluster or proxy server.' weight: 50 type: "text" @@ -36,37 +36,12 @@ attributes: value: "true" values: - data: "true" - label: "true" + label: "True" description: "Enables 512 byte emulation on volumes during creation." - data: "false" - label: "false" + label: "False" description: "Disables 512 byte emulation and uses the native 4096 byte block size." label: "SolidFire Emulate 512 block size" description: 'Enable/Disable 512 byte block size emulation (typically left enabled).' weight: 60 type: "radio" - solidfire_enable_image_caching: - value: "true" - values: - - data: "true" - label: "true" - description: "Enables caching of glance images on the SolidFire cluster." - - data: "false" - label: "false" - description: "Disables caching of glance images on the SolidFire cluster." - label: "SolidFire enable image caching" - description: 'Enable/Disable caching of Glance images on the SolidFire cluster.' - weight: 70 - type: "radio" - solidfire_image_cache_account: - value: 'openstack-vtemplate' - label: 'Image Cache account name' - description: 'The SolidFire tenant that will own cached image volumes on the Cluster.' - weight: 70 - type: "text" - solidfire_account_prefix: - value: '' - label: 'Account Prefix for this OpenStack' - description: 'Pre-pend this name to all accounts on the SolidFire Array.' - weight: 80 - type: "text" diff --git a/fuel-plugin-solidfire-cinder-1.0-1.0.0-1.noarch.rpm b/fuel-plugin-solidfire-cinder-1.0-1.0.0-1.noarch.rpm deleted file mode 100644 index 81088f09b0b7feae8b3e79b8224818f3ac347617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17787 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 diff --git a/metadata.yaml b/metadata.yaml index 80464e5..3a91e6b 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,11 +1,11 @@ name: fuel-plugin-solidfire-cinder title: Fuel plugin to enable SolidFire driver in Cinder -version: '1.0.0' +version: '1.0.1' description: Enables the SolidFire driver in Cinder fuel_version: ['6.1'] licenses: ['Apache License Version 2.0'] -authors: ['John Griffith '] -homepage: 'https://github.com/stackforge/fuel-plugins' +authors: ['John Griffith ', 'Ed Balduf '] +homepage: 'https://github.com/stackforge/fuel-plugin-solidfire-cinder' groups: ['storage::cinder'] releases: diff --git a/specs/solidfire-plugin-specs.rst b/specs/solidfire-plugin-specs.rst new file mode 100644 index 0000000..92de01a --- /dev/null +++ b/specs/solidfire-plugin-specs.rst @@ -0,0 +1,141 @@ + + This work is licensed under the Apache License, Version 2.0. + + http://www.apache.org/licenses/LICENSE-2.0 + +================================================== +Fuel plugin for SolidFire clusters as a Cinder backend +================================================== + +SolidFire plugin for Fuel extends Mirantis OpenStack functionality by adding +support for SolidFire clusters in Cinder using iSCSI protocol. +It replaces Cinder LVM driver which is the default volume backend that uses +local volumes managed by LVM. + +Problem description +=================== + +Currently, Fuel has no support for SolidFire clusters as block storage for +OpenStack environments. Solidfire plugin aims to provide support for it. + +Proposed change +=============== + +Implement a Fuel plugin that will configure the SolidFire driver for +Cinder on all Controller nodes. Cinder volume service will be managed +by Pacemaker/Corosync to provide HA. Having all Cinder services run +on controllers no additional Cinder node is required in environment. + +Alternatives +------------ + +It might have been implemented as part of Fuel core but we decided to make it +as a plugin for several reasons: + +* This isn't something that all operators may want to deploy. +* Any new additional functionality makes the project's testing more difficult, + which is an additional risk for the Fuel release. + +Data model impact +----------------- + +None + +REST API impact +--------------- + +None + +Upgrade impact +-------------- + +None + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +None + +Performance Impact +------------------ + +The SolidFire storage clusters provide high performance block storage for +OpenStack envirnments, and therefore enabling the SolidFire driver in OpenStack +will greatly improve peformance of OpenStack. + +Other deployer impact +--------------------- + +The deployer should configure the IP addresses on the SolidFire array before +they deloy the Fuel Plugin to the controllers. If not, the Cinder-volume service +will need to be restarted once the SolidFire cluster is configured + +Developer impact +---------------- + +None + +Implementation +============== + +The plugin generates the approriate cinder.conf stanzas to enable the SolidFire +cluster within OpenStack. There are NO other packages required, the SolidFire driver +which is included in the OpenStack distribution is all that is necessary. + +Plugin has two tasks. Each task per role. They are run in the following order: + +* The first task installs and configures cinder-volume on Primary Controller. +* The second task installs and configures cinder-volume on Controller nodes. + +Cinder-volume service is installed on all Controller nodes and is managed by +Pacemaker. It runs in active/passive mode where only one instance is active. +All instances of cinder-volume have the same “host” parameter in cinder.conf +file. This is required to achieve ability to manage all volumes in the +environment by any cinder-volume instance. + +Assignee(s) +----------- + +| Edward Balduf +| John Griffith + +Work Items +---------- + +* Implement the Fuel plugin. +* Implement the Puppet manifests. +* Testing. +* Write the documentation. + +Dependencies +============ + +* Fuel 6.1 and higher. + +Testing +======= + +* Prepare a test plan. +* Test the plugin by deploying environments with all Fuel deployment modes. + +Documentation Impact +==================== + +* Deployment Guide (how to install the storage backends, how to prepare an + environment for installation, how to install the plugin, how to deploy an + OpenStack environment with the plugin). +* User Guide (which features the plugin provides, how to use them in the + deployed OpenStack environment). +* Test Plan. +* Test Report. + diff --git a/tasks.yaml b/tasks.yaml index 1867569..31bc6a1 100644 --- a/tasks.yaml +++ b/tasks.yaml @@ -2,10 +2,10 @@ # here you can also specify several roles, for example # ['cinder', 'compute'] will be applied only on # cinder and compute nodes -- role: ['cinder'] - stage: post_deployment +- role: ['primary-controller', 'controller'] + stage: post_deployment/6101 type: puppet parameters: - puppet_manifest: puppet/manifests/site.pp + puppet_manifest: puppet/manifests/controller.pp puppet_modules: puppet/modules:/etc/puppet/modules timeout: 360