From eb59187c6976d7ff831e4bc9dc1dc7a1c75f1efa Mon Sep 17 00:00:00 2001 From: Joe Topjian Date: Wed, 16 May 2012 23:06:32 -0600 Subject: [PATCH] Modified nova-volume: * Tried to refactor to allow other nova-volume drivers to easily be added. * As well, allow other iscsi implementations to be configured in iscsi.pp * Added iscsi_helper and iscsi_ip_address as a parameter for nova::volume::iscsi * Added tests for volume manifests * Added example configs. --- examples/all.pp | 2 ++ examples/multi.pp | 6 +++++ manifests/volume.pp | 29 +++----------------- manifests/volume/iscsi.pp | 57 +++++++++++++++++++++++++++++++++++++++ tests/volume.pp | 5 ++++ tests/volume/iscsi.pp | 5 ++++ 6 files changed, 79 insertions(+), 25 deletions(-) create mode 100644 manifests/volume/iscsi.pp create mode 100644 tests/volume.pp create mode 100644 tests/volume/iscsi.pp diff --git a/examples/all.pp b/examples/all.pp index 7736dbcd4..0e2e7036f 100644 --- a/examples/all.pp +++ b/examples/all.pp @@ -178,6 +178,8 @@ class { 'nova::volume': enabled => true } +class { 'nova::volume::iscsi': } + class { 'nova::cert': enabled => true } diff --git a/examples/multi.pp b/examples/multi.pp index 2d02dd230..3577639a8 100644 --- a/examples/multi.pp +++ b/examples/multi.pp @@ -197,6 +197,12 @@ node /controller/ { enabled => true } + class { 'nova::volume': + enabled => true, + } + + class { 'nova::volume::iscsi': } + ######## Horizon ######## class { 'memcached': diff --git a/manifests/volume.pp b/manifests/volume.pp index b818a576f..ad859d89c 100644 --- a/manifests/volume.pp +++ b/manifests/volume.pp @@ -1,34 +1,13 @@ class nova::volume( - $enabled = false, - $ensure_package = 'present' + $enabled = false ) { include 'nova::params' - exec { 'volumes': - command => 'dd if=/dev/zero of=/tmp/nova-volumes.img bs=1M seek=20k count=0 && /sbin/vgcreate nova-volumes `/sbin/losetup --show -f /tmp/nova-volumes.img`', - onlyif => 'test ! -e /tmp/nova-volumes.img', - path => ["/usr/bin", "/bin", "/usr/local/bin"], - before => Service['nova-volume'], - } - nova::generic_service { 'volume': - enabled => $enabled, - package_name => $::nova::params::volume_package_name, - service_name => $::nova::params::volume_service_name, - ensure_package => $ensure_package, + enabled => $enabled, + package_name => $::nova::params::volume_package_name, + service_name => $::nova::params::volume_service_name, } - package { 'tgt': - name => $::nova::params::tgt_package_name, - ensure => present, - } - # TODO is this fedora specific? - service {'tgtd': - name => $::nova::params::tgt_service_name, - provider => $::nova::params::special_service_provider, - ensure => $service_ensure, - enable => $enabled, - require => [Nova::Generic_service['volume'], Package['tgt']], - } } diff --git a/manifests/volume/iscsi.pp b/manifests/volume/iscsi.pp new file mode 100644 index 000000000..f50eb6fbc --- /dev/null +++ b/manifests/volume/iscsi.pp @@ -0,0 +1,57 @@ +# Class: nova::volume::iscsi +# +# iscsi is the default volume driver for OpenStack. +# +# [*Parameters*] +# +# [volume_group] Name of the volume group to use. +# Optional. Defaults to 'nova-volumes' - the OpenStack default. +# +# [iscsi_helper] Name of the iscsi helper to use. +# Optional. Defaults to 'tgtadm' - the OpenStack default. +# +# [iscsi_ip_address] IP address on the nova-volume server where +# compute nodes will connect to for volumes. +# Optional. Defaults to undef. OpenStack defaults to server IP. +# +# This class assumes that you have already configured your +# volume group - either by another module or during the server +# provisioning +# + +class nova::volume::iscsi ( + $volume_group = 'nova-volumes', + $iscsi_helper = 'tgtadm', + $iscsi_ip_address = undef, +) { + + include 'nova::params' + + nova_config { 'volume_group': value => $volume_group } + + if $iscsi_ip_address { + nova_config { 'iscsi_ip_address': value => $iscsi_ip_address } + } + + case $iscsi_helper { + 'tgtadm': { + package { 'tgt': + name => $::nova::params::tgt_package_name, + ensure => present, + } + service { 'tgtd': + name => $::nova::params::tgt_service_name, + provider => $::nova::params::special_service_provider, + ensure => running, + enable => true, + require => [Nova::Generic_service['volume'], Package['tgt']], + } + # This is the default, but might as well be verbose + nova_config { 'iscsi_helper': value => 'tgtadm' } + } + + default: { + fail("Unsupported iscsi helper: ${iscsi_helper}. The supported iscsi helper is tgtadm.") + } + } +} diff --git a/tests/volume.pp b/tests/volume.pp new file mode 100644 index 000000000..7188a1ae5 --- /dev/null +++ b/tests/volume.pp @@ -0,0 +1,5 @@ +class { 'nova': } + +class { 'nova::volume': + enabled => true, +} diff --git a/tests/volume/iscsi.pp b/tests/volume/iscsi.pp new file mode 100644 index 000000000..fac41fc89 --- /dev/null +++ b/tests/volume/iscsi.pp @@ -0,0 +1,5 @@ +class { 'nova': } +class { 'nova::volume': + enabled => true, +} +class {'nova::volume::iscsi': }