Composable services support for Cinder Pure Storage FlashArray
authorSimon Dodsley <simon@purestorage.com>
Fri, 31 Mar 2017 13:30:59 +0000 (09:30 -0400)
committerSimon Dodsley <simon@purestorage.com>
Mon, 3 Apr 2017 21:41:04 +0000 (17:41 -0400)
Added the heat templates for Cinder Pure Storage FlashArray
backend to use composable services

Change-Id: I6f46f45a3af394de85672261c7d72ddc492a07b2

manifests/profile/base/cinder/volume.pp
manifests/profile/base/cinder/volume/pure.pp [new file with mode: 0644]
releasenotes/notes/add-support-for-pure-cinder-d45e6aaf3e243c91.yaml [new file with mode: 0644]
spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb [new file with mode: 0644]
spec/classes/tripleo_profile_base_cinder_volume_spec.rb

index 9fb1594..e1370a3 100644 (file)
 #
 # === Parameters
 #
+# [*cinder_enable_pure_backend*]
+#   (Optional) Whether to enable the pure backend
+#   Defaults to true
+#
 # [*cinder_enable_dellsc_backend*]
 #   (Optional) Whether to enable the delsc backend
 #   Defaults to true
@@ -60,6 +64,7 @@
 #   Defaults to hiera('step')
 #
 class tripleo::profile::base::cinder::volume (
+  $cinder_enable_pure_backend        = false,
   $cinder_enable_dellsc_backend      = false,
   $cinder_enable_hpelefthand_backend = false,
   $cinder_enable_dellps_backend      = false,
@@ -76,6 +81,13 @@ class tripleo::profile::base::cinder::volume (
   if $step >= 4 {
     include ::cinder::volume
 
+    if $cinder_enable_pure_backend {
+      include ::tripleo::profile::base::cinder::volume::pure
+      $cinder_pure_backend_name = hiera('cinder::backend::pure::volume_backend_name', 'tripleo_pure')
+    } else {
+      $cinder_pure_backend_name = undef
+    }
+
     if $cinder_enable_dellsc_backend {
       include ::tripleo::profile::base::cinder::volume::dellsc
       $cinder_dellsc_backend_name = hiera('cinder::backend::dellsc_iscsi::volume_backend_name', 'tripleo_dellsc')
@@ -134,6 +146,7 @@ class tripleo::profile::base::cinder::volume (
 
     $backends = delete_undef_values([$cinder_iscsi_backend_name,
                                       $cinder_rbd_backend_name,
+                                      $cinder_pure_backend_name,
                                       $cinder_dellps_backend_name,
                                       $cinder_dellsc_backend_name,
                                       $cinder_hpelefthand_backend_name,
diff --git a/manifests/profile/base/cinder/volume/pure.pp b/manifests/profile/base/cinder/volume/pure.pp
new file mode 100644 (file)
index 0000000..e524919
--- /dev/null
@@ -0,0 +1,65 @@
+# 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::pure
+#
+# Cinder Volume pure profile for tripleo
+#
+# === Parameters
+#
+# [*san_ip*]
+#   (required) IP address of PureStorage management VIP.
+#
+# [*pure_api_token*]
+#   (required) API token for management of PureStorage array.
+#
+# [*backend_name*]
+#   (Optional) Name given to the Cinder backend stanza
+#   Defaults to 'tripleo_pure'
+#
+# [*pure_storage_protocol*]
+#   (optional) Must be either 'iSCSI' or 'FC'. This will determine
+#   which Volume Driver will be configured; PureISCSIDriver or PureFCDriver.
+#   Defaults to 'iSCSI'
+#
+# [*use_multipath_for_image_xfer*]
+#   (optional) .
+#   Defaults to True
+#
+# [*use_chap_auth*]
+#   (optional) Only affects the PureISCSIDriver.
+#   Defaults to False
+#
+# [*step*]
+#   (Optional) The current step in deployment. See tripleo-heat-templates
+#   for more details.
+#   Defaults to hiera('step')
+#
+class tripleo::profile::base::cinder::volume::pure (
+  $backend_name = hiera('cinder::backend::pure::volume_backend_name', 'tripleo_pure'),
+  $step         = hiera('step'),
+) {
+  include ::tripleo::profile::base::cinder::volume
+
+  if $step >= 4 {
+    cinder::backend::pure { $backend_name :
+      san_ip                       => hiera('cinder::backend::pure::san_ip', undef),
+      pure_api_token               => hiera('cinder::backend::pure::pure_api_token', undef),
+      pure_storage_protocol        => hiera('cinder::backend::pure::pure_storage_protocol', undef),
+      use_chap_auth                => hiera('cinder::backend::pure::use_chap_auth', undef),
+      use_multipath_for_image_xfer => hiera('cinder::backend::pure::use_multipath_for_image_xfer', undef),
+    }
+  }
+
+}
diff --git a/releasenotes/notes/add-support-for-pure-cinder-d45e6aaf3e243c91.yaml b/releasenotes/notes/add-support-for-pure-cinder-d45e6aaf3e243c91.yaml
new file mode 100644 (file)
index 0000000..da326e4
--- /dev/null
@@ -0,0 +1,3 @@
+---
+features:
+  - Added Pure Storage FlashArray iSCSI and FC backend support for cinder
diff --git a/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb b/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb
new file mode 100644 (file)
index 0000000..fa03dac
--- /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::pure' do
+  shared_examples_for 'tripleo::profile::base::cinder::volume::pure' 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::pure')
+        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__pure('tripleo_pure')
+      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__pure('tripleo_pure')
+      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::pure'
+    end
+  end
+end
index 1542a49..aa3dd89 100644 (file)
@@ -56,6 +56,25 @@ describe 'tripleo::profile::base::cinder::volume' do
         end
       end
 
+      context 'with only pure' do
+        before :each do
+          params.merge!({
+            :cinder_enable_pure_backend  => true,
+            :cinder_enable_iscsi_backend => false,
+          })
+        end
+        it 'should configure only pure' do
+          is_expected.to contain_class('tripleo::profile::base::cinder::volume::pure')
+          is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::iscsi')
+          is_expected.to contain_class('tripleo::profile::base::cinder::volume')
+          is_expected.to contain_class('tripleo::profile::base::cinder')
+          is_expected.to contain_class('cinder::volume')
+          is_expected.to contain_class('cinder::backends').with(
+            :enabled_backends => ['tripleo_pure']
+          )
+        end
+      end
+
       context 'with only dellsc' do
         before :each do
           params.merge!({
@@ -116,8 +135,8 @@ describe 'tripleo::profile::base::cinder::volume' do
       context 'with only nfs' do
         before :each do
           params.merge!({
-            :cinder_enable_nfs_backend => true,
-            :cinder_enable_iscsi_backend  => false,
+            :cinder_enable_nfs_backend   => true,
+            :cinder_enable_iscsi_backend => false,
           })
         end
         it 'should configure only nfs' do
@@ -135,8 +154,8 @@ describe 'tripleo::profile::base::cinder::volume' do
       context 'with only rbd' do
         before :each do
           params.merge!({
-            :cinder_enable_rbd_backend => true,
-            :cinder_enable_iscsi_backend  => false,
+            :cinder_enable_rbd_backend   => true,
+            :cinder_enable_iscsi_backend => false,
           })
         end
         it 'should configure only ceph' do
@@ -160,6 +179,7 @@ describe 'tripleo::profile::base::cinder::volume' do
         end
         it 'should configure only user backend' do
           is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::iscsi')
+          is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::pure')
           is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::dellsc')
           is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::dellps')
           is_expected.to_not contain_class('tripleo::profile::base::cinder::volume::netapp')
@@ -177,16 +197,18 @@ describe 'tripleo::profile::base::cinder::volume' do
       context 'with all tripleo backends' do
         before :each do
           params.merge!({
+            :cinder_enable_nfs_backend    => true,
+            :cinder_enable_rbd_backend    => true,
             :cinder_enable_iscsi_backend  => true,
+            :cinder_enable_pure_backend   => true,
             :cinder_enable_dellsc_backend => true,
             :cinder_enable_dellps_backend => true,
             :cinder_enable_netapp_backend => true,
-            :cinder_enable_nfs_backend => true,
-            :cinder_enable_rbd_backend => true,
           })
         end
         it 'should configure all backends' do
           is_expected.to contain_class('tripleo::profile::base::cinder::volume::iscsi')
+          is_expected.to contain_class('tripleo::profile::base::cinder::volume::pure')
           is_expected.to contain_class('tripleo::profile::base::cinder::volume::dellsc')
           is_expected.to contain_class('tripleo::profile::base::cinder::volume::dellps')
           is_expected.to contain_class('tripleo::profile::base::cinder::volume::netapp')
@@ -196,7 +218,7 @@ describe 'tripleo::profile::base::cinder::volume' do
           is_expected.to contain_class('tripleo::profile::base::cinder')
           is_expected.to contain_class('cinder::volume')
           is_expected.to contain_class('cinder::backends').with(
-            :enabled_backends => ['tripleo_iscsi', 'tripleo_ceph', 'tripleo_dellps', 
+            :enabled_backends => ['tripleo_iscsi', 'tripleo_ceph', 'tripleo_pure', 'tripleo_dellps',
                                   'tripleo_dellsc', 'tripleo_netapp','tripleo_nfs']
           )
         end
@@ -206,7 +228,7 @@ describe 'tripleo::profile::base::cinder::volume' do
 
 
   on_supported_os.each do |os, facts|
-    context "on #{os}" do
+    context 'on #{os}' do
       let(:facts) do
         facts.merge({ :hostname => 'node.example.com' })
       end