Adding support for netapp NFS direct driver

This commit adds support for the 7mode NFS direct driver.
Changed the 'if driver' to a case, somewhat based off the
rcbops cinder-volume recipe. if the NFS driver is chosen, the
volume recipe will install the nfs client package, setup a mountpoint
a shares config file, and setups cinder.conf accordingly

Change-Id: Ia8d4c31235426614a317729494569062a23a05bf
This commit is contained in:
alop 2013-07-10 17:03:38 -07:00
parent be498fa94c
commit a05a53dfeb
7 changed files with 102 additions and 34 deletions

View File

@ -66,6 +66,19 @@ Attributes
* `openstack["block-storage"]["policy"]["default"]` - default volume operations rule
* `openstack["block-storage"]["policy"]["admin_or_owner"]` - Define an admin or owner
* `openstack["block-storage"]["policy"]["admin_api"]` - Define api admin
* `openstack["block-storage"]["netapp"]["protocol"]` - how are we talking to either dfm or filer, http or https
* `openstack["block-storage"]["netapp"]["dfm_hostname"]` - Host or IP of your dfm server
* `openstack["block-storage"]["netapp"]["dfm_login"]` - Username for dfm
* `openstack["block-storage"]["netapp"]["dfm_password"]` - password for the dfm user
* `openstack["block-storage"]["netapp"]["dfm_port"]` - default port for dfm
* `openstack["block-storage"]["netapp"]["dfm_web_port"]` - web gui port for wsdl file download
* `openstack["block-storage"]["netapp"]["storage_service"]` - name of the service in dfpm
* `openstack["block-storage"]["netapp"]["netapp_server_port"]` - web admin port of the filer itself
* `openstack["block-storage"]["netapp"]["netapp_server_hostname"]` - hostname of your filer, needs to be resolvable
* `openstack["block-storage"]["netapp"]["netapp_server_login"]` - Username for netapp filer
* `openstack["block-storage"]["netapp"]["netapp_server_password"]` - password for user above
* `openstack["block-storage"]["nfs"]["shares_config"]` - file containing line by line entries of server:export
* `openstack["block-storage"]["nfs"]["mount_point_base"]` - directory to mount NFS exported shares
Testing
=====

View File

@ -94,6 +94,15 @@ default["openstack"]["block-storage"]["netapp"]["dfm_port"] = "8088"
default["openstack"]["block-storage"]["netapp"]["dfm_web_port"] = "8080"
default["openstack"]["block-storage"]["netapp"]["storage_service"] = "storage_service"
# Netapp direct NFS
default["openstack"]["block-storage"]["netapp"]["netapp_server_port"] = "80"
default["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"] = nil
default["openstack"]["block-storage"]["netapp"]["netapp_server_password"] = nil
default["openstack"]["block-storage"]["netapp"]["netapp_server_login"] = nil
default["openstack"]["block-storage"]["netapp"]["export"] = nil
default["openstack"]["block-storage"]["nfs"]["shares_config"] = "/etc/cinder/shares.conf"
default["openstack"]["block-storage"]["nfs"]["mount_point_base"] = "/mnt/cinder-volumes"
# logging attribute
default["openstack"]["block-storage"]["syslog"]["use"] = false
default["openstack"]["block-storage"]["syslog"]["facility"] = "LOG_LOCAL2"
@ -129,6 +138,7 @@ when "fedora", "redhat", "centos" # :pragma-foodcritic: ~FC024 - won't fix this
"cinder_scheduler_service" => "openstack-cinder-scheduler",
"cinder_iscsitarget_packages" => ["scsi-target-utils"],
"cinder_iscsitarget_service" => "tgtd",
"cinder_nfs_packages" => ["nfs-utils", "nfs-utils-lib"],
"package_overrides" => ""
}
when "ubuntu"
@ -141,6 +151,7 @@ when "ubuntu"
"cinder_scheduler_service" => "cinder-scheduler",
"cinder_iscsitarget_packages" => ["tgt"],
"cinder_iscsitarget_service" => "tgt",
"cinder_nfs_packages" => ["nfs-common"],
"package_overrides" => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'"
}
end

View File

@ -43,11 +43,41 @@ platform_options["cinder_iscsitarget_packages"].each do |pkg|
end
end
volume_driver = node["openstack"]["block-storage"]["volume"]["driver"]
if volume_driver == "cinder.volume.drivers.netapp.NetAppISCSIDriver"
node.override["openstack"]["block-storage"]["netapp"]["dfm_password"] = service_password "netapp"
elsif volume_driver == 'cinder.volume.drivers.RBDDriver'
node.override["openstack"]["block-storage"]["rbd_secret_uuid"] = service_password "rbd"
case node["openstack"]["block-storage"]["volume"]["driver"]
when "cinder.volume.drivers.netapp.iscsi.NetAppISCSIDriver"
node.override["openstack"]["block-storage"]["netapp"]["dfm_password"] = service_password "netapp"
when "cinder.volume.drivers.RBDDriver"
node.override["openstack"]["block-storage"]["rbd_secret_uuid"] = service_password "rbd"
when "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver"
node.override["openstack"]["block-storage"]["netapp"]["netapp_server_password"] = service_password "netapp-filer"
directory node["openstack"]["block-storage"]["nfs"]["mount_point_base"] do
owner node["openstack"]["block-storage"]["user"]
group node["openstack"]["block-storage"]["group"]
action :create
end
template node["openstack"]["block-storage"]["nfs"]["shares_config"] do
source "shares.conf.erb"
mode "0600"
owner node["openstack"]["block-storage"]["user"]
group node["openstack"]["block-storage"]["group"]
variables(
"host" => node["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"],
"export" => node["openstack"]["block-storage"]["netapp"]["export"]
)
notifies :restart, "service[cinder-volume]"
end
platform_options["cinder_nfs_packages"].each do |pkg|
package pkg do
options platform_options["package_overrides"]
action :upgrade
end
end
end
service "cinder-volume" do

View File

@ -30,6 +30,16 @@ describe "openstack-block-storage::volume" do
expect(@chef_run).to set_service_to_start_on_boot "tgtd"
end
it "installs nfs packages" do
chef_run = ::ChefSpec::ChefRunner.new ::REDHAT_OPTS do |n|
n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver"
end
chef_run.converge "openstack-block-storage::volume"
expect(chef_run).to upgrade_package "nfs-utils"
expect(chef_run).to upgrade_package "nfs-utils-lib"
end
it "has redhat include" do
file = "/etc/tgt/targets.conf"

View File

@ -28,11 +28,29 @@ describe "openstack-block-storage::volume" do
expect(@chef_run).to upgrade_package "tgt"
end
it "installs nfs packages" do
chef_run = ::ChefSpec::ChefRunner.new ::UBUNTU_OPTS do |n|
n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver"
end
chef_run.converge "openstack-block-storage::volume"
expect(chef_run).to upgrade_package "nfs-common"
end
it "creates the nfs mount point" do
chef_run = ::ChefSpec::ChefRunner.new ::UBUNTU_OPTS do |n|
n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver"
end
chef_run.converge "openstack-block-storage::volume"
expect(chef_run).to create_directory "/mnt/cinder-volumes"
end
it "configures netapp dfm password" do
::Chef::Recipe.any_instance.stub(:service_password).with("netapp").
and_return "netapp-pass"
chef_run = ::ChefSpec::ChefRunner.new ::UBUNTU_OPTS do |n|
n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.netapp.NetAppISCSIDriver"
n.set["openstack"]["block-storage"]["volume"]["driver"] = "cinder.volume.drivers.netapp.iscsi.NetAppISCSIDriver"
end
chef_run.converge "openstack-block-storage::volume"
n = chef_run.node["openstack"]["block-storage"]["netapp"]["dfm_password"]

View File

@ -605,36 +605,18 @@ netapp_storage_service=<%= node["openstack"]["block-storage"]["netapp"]["storage
<% end %>
######## defined in cinder.volume.netapp_nfs ########
<% if node["openstack"]["block-storage"]["volume"]["driver"] == "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver" %>
# synchronous_snapshot_create=0
#### (IntOpt) Does snapshot creation call returns immediately
# netapp_wsdl_url=<None>
#### (StrOpt) URL of the WSDL file for the DFM server
# netapp_login=<None>
#### (StrOpt) User name for the DFM server
# netapp_password=<None>
#### (StrOpt) Password for the DFM server
# netapp_server_hostname=<None>
#### (StrOpt) Hostname for the DFM server
# netapp_server_port=8088
#### (IntOpt) Port number for the DFM server
# netapp_storage_service=<None>
#### (StrOpt) Storage service to use for provisioning (when
#### volume_type=None)
# netapp_storage_service_prefix=<None>
#### (StrOpt) Prefix of storage service name to use for provisioning
#### (volume_type name will be appended)
# netapp_vfiler=<None>
#### (StrOpt) Vfiler to use for provisioning
nfs_mount_point_base=<%= node["openstack"]["block-storage"]["nfs"]["mount_point_base"] %>
<% node["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"].each do |h| %>
netapp_server_hostname=<%= h %>
<% end %>
netapp_server_port=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_port"] %>
netapp_login=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_login"] %>
netapp_password=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_password"] %>
nfs_share_config=<%= node["openstack"]["block-storage"]["nfs"]["shares_config"] %>
<% end %>
######## defined in cinder.volume.nexenta.volume ########

View File

@ -0,0 +1,4 @@
# Automatically generated by chef, changes will be overwritten
<% node["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"].each do |h| %>
<%= h %>:<%= @nfs_export %>
<% end %>