Add support for iscsid configuration

The iscsid service is used in sevral components like nova, cinder,
glance and so on to connect to iscsi devices. This change introduces
the new class to manage basic configuration of the iscsid service.

Co-authored-by: Alfredo Moralejo <amoralej@redhat.com>
Change-Id: I3fc6d1192632cc1458d00900508d548f522e9cdb
(cherry picked from commit 6e67434c27)
This commit is contained in:
Takashi Kajinami 2021-06-04 00:01:03 +09:00 committed by Alfredo Moralejo
parent fa7ce171e6
commit f93dae64cb
4 changed files with 123 additions and 0 deletions

58
manifests/iscsid.pp Normal file
View File

@ -0,0 +1,58 @@
# == Class: openstacklib::iscsid
#
# Installs and configures the iscsid daemon
#
# == Parameters
#
# [*enabled*]
# (optional) Should the service be enabled.
# Defaults to true.
#
# [*manage_service*]
# (optional) Whether the service should be managed by Puppet.
# Defaults to true.
#
# [*package_ensure*]
# (optional) ensure state for package.
# Defaults to 'present'
#
class openstacklib::iscsid(
$enabled = true,
$manage_service = true,
$package_ensure = 'present'
) {
include openstacklib::params
package { 'open-iscsi':
ensure => $package_ensure,
name => $::openstacklib::params::open_iscsi_package_name,
tag => 'openstack',
}
# In CentOS9/RHEL9 initiatorname.iscsi is not created automatically
# so should be created
exec { 'create-initiatorname-file':
command => 'echo "InitiatorName=`/usr/sbin/iscsi-iname`" > /etc/iscsi/initiatorname.iscsi',
path => ['/usr/bin','/usr/sbin','/bin','/usr/bin'],
unless => 'test -e /etc/iscsi/initiatorname.iscsi',
require => Package['open-iscsi'],
}
if $manage_service {
if $enabled {
$service_ensure = 'running'
} else {
$service_ensure = 'stopped'
}
# iscsid service is started automatically when iscsiadm command is
# executed but there is no harm even if the service is already started.
service { 'iscsid':
ensure => $service_ensure,
enable => $enabled,
}
Package['open-iscsi'] ~> Service['iscsid']
Exec['create-initiatorname-file'] ~> Service['iscsid']
}
}

View File

@ -9,4 +9,17 @@ class openstacklib::params {
$pyvers = $::openstacklib::defaults::pyvers
$openstackclient_package_name = "python${pyvers}-openstackclient"
case $::osfamily {
'RedHat': {
$open_iscsi_package_name = 'iscsi-initiator-utils'
}
'Debian': {
$open_iscsi_package_name = 'open-iscsi'
}
default:{
fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, \
module ${module_name} only support osfamily RedHat and Debian")
}
}
}

View File

@ -0,0 +1,5 @@
---
features:
- |
The new ``openstacklib::iscsid`` class has been added. This class can be
used to set up basic configurations for the iscsid service.

View File

@ -0,0 +1,47 @@
require 'spec_helper'
describe 'openstacklib::iscsid' do
shared_examples_for 'openstacklib::iscsid' do
context 'with default params' do
it { is_expected.to contain_package('open-iscsi').with(
:name => platform_params[:open_iscsi_package_name],
:ensure => 'present',
:tag => 'openstack',
)}
it { is_expected.to contain_exec('create-initiatorname-file').with({
:command => 'echo "InitiatorName=`/usr/sbin/iscsi-iname`" > /etc/iscsi/initiatorname.iscsi',
:path => ['/usr/bin','/usr/sbin','/bin','/usr/bin'],
:unless => 'test -e /etc/iscsi/initiatorname.iscsi',
}).that_requires('Package[open-iscsi]')}
it { is_expected.to contain_service('iscsid').with(
:ensure => 'running',
:enable => true,
) }
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
let(:platform_params) do
case facts[:osfamily]
when 'Debian'
{ :open_iscsi_package_name => 'open-iscsi' }
when 'RedHat'
{ :open_iscsi_package_name => 'iscsi-initiator-utils' }
end
end
it_behaves_like 'openstacklib::iscsid'
end
end
end