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 0000000..6e23517 Binary files /dev/null and b/docs/figures/cinder-solidfire-plugin.png differ 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 81088f0..0000000 Binary files a/fuel-plugin-solidfire-cinder-1.0-1.0.0-1.noarch.rpm and /dev/null differ 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