From 4f9156849b7d33fcdf9b419b993aa1d49f87e057 Mon Sep 17 00:00:00 2001 From: Funs Date: Wed, 4 May 2016 13:44:35 +0200 Subject: [PATCH] puppet lint, updated test plan and LICENS --- LICENSE | 3 +- .../cinder_datera_config/manifests/cinder.pp | 26 +++++----------- .../cinder_datera_driver/manifests/cinder.pp | 28 +++++++++++------- ...stPlanForFuelPluginDateraCinder-1.0.0.docx | Bin 18023 -> 16715 bytes 4 files changed, 25 insertions(+), 32 deletions(-) diff --git a/LICENSE b/LICENSE index e06d208..111cf36 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ Apache License same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright {yyyy} {name of copyright owner} + Copyright 2016 Funs Kessen Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -199,4 +199,3 @@ Apache License 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/deployment_scripts/puppet/modules/cinder_datera_config/manifests/cinder.pp b/deployment_scripts/puppet/modules/cinder_datera_config/manifests/cinder.pp index 277eb91..bb13aca 100755 --- a/deployment_scripts/puppet/modules/cinder_datera_config/manifests/cinder.pp +++ b/deployment_scripts/puppet/modules/cinder_datera_config/manifests/cinder.pp @@ -1,18 +1,6 @@ -# Copyright 2016 Datera, 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 +# Configure the Datera driver in cinder # -# 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 cinder_datera_config::cinder ( $backend_name = 'datera', $backends = '' @@ -32,18 +20,18 @@ class cinder_datera_config::cinder ( if $plugin_settings['multibackend'] { $section = $backend_name cinder_config { - "DEFAULT/enabled_backends": value => "${backend_name},${backends}"; + 'DEFAULT/enabled_backends': value => "${backend_name},${backends}"; } } else { $section = 'DEFAULT' } cinder_datera_config::backend::datera{ $section : - san_ip => $plugin_settings['datera_mvip'], - san_login => $plugin_settings['datera_admin_login'], - san_password => $plugin_settings['datera_admin_password'], - datera_num_replicas => $plugin_settings['datera_num_replicas'], - extra_options => {} + san_ip => $plugin_settings['datera_mvip'], + san_login => $plugin_settings['datera_admin_login'], + san_password => $plugin_settings['datera_admin_password'], + datera_num_replicas => $plugin_settings['datera_num_replicas'], + extra_options => {} } Cinder_config<||>~> Service[cinder_volume] diff --git a/deployment_scripts/puppet/modules/cinder_datera_driver/manifests/cinder.pp b/deployment_scripts/puppet/modules/cinder_datera_driver/manifests/cinder.pp index e254d2c..87ef29a 100644 --- a/deployment_scripts/puppet/modules/cinder_datera_driver/manifests/cinder.pp +++ b/deployment_scripts/puppet/modules/cinder_datera_driver/manifests/cinder.pp @@ -1,26 +1,32 @@ + notice('PLUGIN: cinder_datera_driver::cinder: cinder.pp') +# +# Installs the Datera cinder driver +# class cinder_datera_driver::cinder { $version = hiera('fuel_version') - + $file = '/usr/lib/python2.7/dist-packages/cinder/volume/drivers/datera.py' # install the driver, only required on cinder nodes - notice("PLUGIN: cinder_datera_driver::cinder: trying to install Fuel $version plugin.") + notice("PLUGIN: cinder_datera_driver::cinder: trying to install Fuel \ + ${version} plugin.") if($version == '7.0') { - file { "/usr/lib/python2.7/dist-packages/cinder/volume/drivers/datera.py": - mode => "0644", - owner => 'root', - group => 'root', + file { $file: + mode => '0644', + owner => 'root', + group => 'root', source => 'puppet:///modules/cinder_datera_driver/7.0/datera.py', } } elsif ($version == '8.0') { - file { "/usr/lib/python2.7/dist-packages/cinder/volume/drivers/datera.py": - mode => "0644", - owner => 'root', - group => 'root', + file { $file: + mode => '0644', + owner => 'root', + group => 'root', source => 'puppet:///modules/cinder_datera_driver/8.0/datera.py', } } else { - notice("PLUGIN: cinder_datera_driver::cinder: $version is not supported by us.") + notice("PLUGIN: cinder_datera_driver::cinder: ${version} is not \ + supported by us.") } } class { 'cinder_datera_driver::cinder': } diff --git a/doc/TestPlanForFuelPluginDateraCinder-1.0.0.docx b/doc/TestPlanForFuelPluginDateraCinder-1.0.0.docx index 5efbdf0e4bcbcbf4a70834532592a685b58dab81..8c5d0da4c2c6cde7d59210c1d68adc7e726ad996 100644 GIT binary patch delta 9177 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