Add module to support ScaleIO backend in Cinder
authorGiulio Fidente <gfidente@redhat.com>
Tue, 7 Feb 2017 14:44:04 +0000 (15:44 +0100)
committerrajinir <rajini_ram@dell.com>
Thu, 9 Feb 2017 19:46:50 +0000 (13:46 -0600)
Also adds an initial spec file for basic testing of the module.

Change-Id: I5534aab53b70de215336a076d25263c73b8d7b5b
Partial-Bug: #1661316

manifests/profile/base/cinder/volume.pp
manifests/profile/base/cinder/volume/scaleio.pp [new file with mode: 0644]
spec/classes/tripleo_profile_base_cinder_scaleio_spec.rb [new file with mode: 0644]

index 7663b6f..03bb767 100644 (file)
 #   (Optional) Whether to enable the rbd backend
 #   Defaults to true
 #
+# [*cinder_enable_scaleio_backend*]
+#   (Optional) Whether to enable the scaleio backend
+#   Defaults to true
+#
 # [*cinder_user_enabled_backends*]
 #   (Optional) List of additional backend stanzas to activate
 #   Defaults to hiera('cinder_user_enabled_backends')
@@ -63,6 +67,7 @@ class tripleo::profile::base::cinder::volume (
   $cinder_enable_netapp_backend      = false,
   $cinder_enable_nfs_backend         = false,
   $cinder_enable_rbd_backend         = false,
+  $cinder_enable_scaleio_backend     = false,
   $cinder_user_enabled_backends      = hiera('cinder_user_enabled_backends', undef),
   $step                              = hiera('step'),
 ) {
@@ -120,6 +125,13 @@ class tripleo::profile::base::cinder::volume (
       $cinder_rbd_backend_name = undef
     }
 
+    if $cinder_enable_scaleio_backend {
+      include ::tripleo::profile::base::cinder::volume::scaleio
+      $cinder_scaleio_backend_name = hiera('cinder::backend::scaleio::volume_backend_name', 'tripleo_scaleio')
+    } else {
+      $cinder_scaleio_backend_name = undef
+    }
+
     $backends = delete_undef_values([$cinder_iscsi_backend_name,
                                       $cinder_rbd_backend_name,
                                       $cinder_eqlx_backend_name,
@@ -127,6 +139,7 @@ class tripleo::profile::base::cinder::volume (
                                       $cinder_hpelefthand_backend_name,
                                       $cinder_netapp_backend_name,
                                       $cinder_nfs_backend_name,
+                                      $cinder_scaleio_backend_name,
                                       $cinder_user_enabled_backends])
     # NOTE(aschultz): during testing it was found that puppet 3 may incorrectly
     # include a "" in the previous array which is not removed by the
diff --git a/manifests/profile/base/cinder/volume/scaleio.pp b/manifests/profile/base/cinder/volume/scaleio.pp
new file mode 100644 (file)
index 0000000..a30cffa
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright 2016 Red Hat, 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: tripleo::profile::base::cinder::volume::scaleio
+#
+# Cinder Volume scaleio profile for tripleo
+#
+# === Parameters
+#
+# [*backend_name*]
+#   (Optional) Name given to the Cinder backend stanza
+#   Defaults to 'tripleo_scaleio'
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::cinder::volume::scaleio (
+  $backend_name = hiera('cinder::backend::scaleio::volume_backend_name', 'tripleo_scaleio'),
+  $step         = hiera('step'),
+) {
+  include ::tripleo::profile::base::cinder::volume
+
+  if $step >= 4 {
+    cinder::backend::scaleio { $backend_name :
+      sio_login                        => hiera('cinder::backend::scaleio::sio_login', undef),
+      sio_password                     => hiera('cinder::backend::scaleio::sio_password', undef),
+      sio_server_hostname              => hiera('cinder::backend::scaleio::sio_server_hostname', undef),
+      sio_server_port                  => hiera('cinder::backend::scaleio::sio_server_port', undef),
+      sio_verify_server_certificate    => hiera('cinder::backend::scaleio::sio_verify_server_certificate', undef),
+      sio_server_certificate_path      => hiera('cinder::backend::scaleio::sio_server_certificate_path', undef),
+      sio_protection_domain_name       => hiera('cinder::backend::scaleio::sio_protection_domain_name', undef),
+      sio_protection_domain_id         => hiera('cinder::backend::scaleio::sio_protection_domain_id', undef),
+      sio_storage_pool_id              => hiera('cinder::backend::scaleio::sio_storage_pool_id', undef),
+      sio_storage_pool_name            => hiera('cinder::backend::scaleio::sio_storage_pool_name', undef),
+      sio_storage_pools                => hiera('cinder::backend::scaleio::sio_storage_pools', undef),
+      sio_round_volume_capacity        => hiera('cinder::backend::scaleio::sio_round_volume_capacity', undef),
+      sio_unmap_volume_before_deletion => hiera('cinder::backend::scaleio::sio_unmap_volume_before_deletion', undef),
+      sio_max_over_subscription_ratio  => hiera('cinder::backend::scaleio::sio_max_over_subscription_ratio', undef),
+      sio_thin_provision               => hiera('cinder::backend::scaleio::sio_thin_provision', undef),
+    }
+  }
+
+}
diff --git a/spec/classes/tripleo_profile_base_cinder_scaleio_spec.rb b/spec/classes/tripleo_profile_base_cinder_scaleio_spec.rb
new file mode 100644 (file)
index 0000000..0f12b0a
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# Copyright (C) 2016 Red Hat, 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.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::cinder::volume::scaleio' do
+  shared_examples_for 'tripleo::profile::base::cinder::volume::scaleio' do
+    before :each do
+      facts.merge!({ :step => params[:step] })
+    end
+
+    context 'with step less than 4' do
+      let(:params) { { :step => 3 } }
+
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::cinder::volume::scaleio')
+        is_expected.to contain_class('tripleo::profile::base::cinder::volume')
+        is_expected.to contain_class('tripleo::profile::base::cinder')
+        is_expected.to_not contain_cinder__backend__scaleio('tripleo_scaleio')
+      end
+    end
+
+    context 'with step 4' do
+      let(:params) { {
+        :step => 4,
+      } }
+
+      it 'should trigger complete configuration' do
+        # TODO(aschultz): check hiera parameters
+        is_expected.to contain_cinder__backend__scaleio('tripleo_scaleio')
+      end
+    end
+  end
+
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::cinder::volume::scaleio'
+    end
+  end
+end