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:
13
README.md
13
README.md
@@ -66,6 +66,19 @@ Attributes
|
|||||||
* `openstack["block-storage"]["policy"]["default"]` - default volume operations rule
|
* `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_or_owner"]` - Define an admin or owner
|
||||||
* `openstack["block-storage"]["policy"]["admin_api"]` - Define api admin
|
* `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
|
Testing
|
||||||
=====
|
=====
|
||||||
|
@@ -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"]["dfm_web_port"] = "8080"
|
||||||
default["openstack"]["block-storage"]["netapp"]["storage_service"] = "storage_service"
|
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
|
# logging attribute
|
||||||
default["openstack"]["block-storage"]["syslog"]["use"] = false
|
default["openstack"]["block-storage"]["syslog"]["use"] = false
|
||||||
default["openstack"]["block-storage"]["syslog"]["facility"] = "LOG_LOCAL2"
|
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_scheduler_service" => "openstack-cinder-scheduler",
|
||||||
"cinder_iscsitarget_packages" => ["scsi-target-utils"],
|
"cinder_iscsitarget_packages" => ["scsi-target-utils"],
|
||||||
"cinder_iscsitarget_service" => "tgtd",
|
"cinder_iscsitarget_service" => "tgtd",
|
||||||
|
"cinder_nfs_packages" => ["nfs-utils", "nfs-utils-lib"],
|
||||||
"package_overrides" => ""
|
"package_overrides" => ""
|
||||||
}
|
}
|
||||||
when "ubuntu"
|
when "ubuntu"
|
||||||
@@ -141,6 +151,7 @@ when "ubuntu"
|
|||||||
"cinder_scheduler_service" => "cinder-scheduler",
|
"cinder_scheduler_service" => "cinder-scheduler",
|
||||||
"cinder_iscsitarget_packages" => ["tgt"],
|
"cinder_iscsitarget_packages" => ["tgt"],
|
||||||
"cinder_iscsitarget_service" => "tgt",
|
"cinder_iscsitarget_service" => "tgt",
|
||||||
|
"cinder_nfs_packages" => ["nfs-common"],
|
||||||
"package_overrides" => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'"
|
"package_overrides" => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'"
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@@ -43,11 +43,41 @@ platform_options["cinder_iscsitarget_packages"].each do |pkg|
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
volume_driver = node["openstack"]["block-storage"]["volume"]["driver"]
|
case node["openstack"]["block-storage"]["volume"]["driver"]
|
||||||
if volume_driver == "cinder.volume.drivers.netapp.NetAppISCSIDriver"
|
when "cinder.volume.drivers.netapp.iscsi.NetAppISCSIDriver"
|
||||||
node.override["openstack"]["block-storage"]["netapp"]["dfm_password"] = service_password "netapp"
|
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"
|
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
|
end
|
||||||
|
|
||||||
service "cinder-volume" do
|
service "cinder-volume" do
|
||||||
|
@@ -30,6 +30,16 @@ describe "openstack-block-storage::volume" do
|
|||||||
expect(@chef_run).to set_service_to_start_on_boot "tgtd"
|
expect(@chef_run).to set_service_to_start_on_boot "tgtd"
|
||||||
end
|
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
|
it "has redhat include" do
|
||||||
file = "/etc/tgt/targets.conf"
|
file = "/etc/tgt/targets.conf"
|
||||||
|
|
||||||
|
@@ -28,11 +28,29 @@ describe "openstack-block-storage::volume" do
|
|||||||
expect(@chef_run).to upgrade_package "tgt"
|
expect(@chef_run).to upgrade_package "tgt"
|
||||||
end
|
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
|
it "configures netapp dfm password" do
|
||||||
::Chef::Recipe.any_instance.stub(:service_password).with("netapp").
|
::Chef::Recipe.any_instance.stub(:service_password).with("netapp").
|
||||||
and_return "netapp-pass"
|
and_return "netapp-pass"
|
||||||
chef_run = ::ChefSpec::ChefRunner.new ::UBUNTU_OPTS do |n|
|
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
|
end
|
||||||
chef_run.converge "openstack-block-storage::volume"
|
chef_run.converge "openstack-block-storage::volume"
|
||||||
n = chef_run.node["openstack"]["block-storage"]["netapp"]["dfm_password"]
|
n = chef_run.node["openstack"]["block-storage"]["netapp"]["dfm_password"]
|
||||||
|
@@ -605,36 +605,18 @@ netapp_storage_service=<%= node["openstack"]["block-storage"]["netapp"]["storage
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
######## defined in cinder.volume.netapp_nfs ########
|
######## defined in cinder.volume.netapp_nfs ########
|
||||||
|
<% if node["openstack"]["block-storage"]["volume"]["driver"] == "cinder.volume.drivers.netapp.nfs.NetAppDirect7modeNfsDriver" %>
|
||||||
|
|
||||||
# synchronous_snapshot_create=0
|
nfs_mount_point_base=<%= node["openstack"]["block-storage"]["nfs"]["mount_point_base"] %>
|
||||||
#### (IntOpt) Does snapshot creation call returns immediately
|
<% node["openstack"]["block-storage"]["netapp"]["netapp_server_hostname"].each do |h| %>
|
||||||
|
netapp_server_hostname=<%= h %>
|
||||||
# netapp_wsdl_url=<None>
|
<% end %>
|
||||||
#### (StrOpt) URL of the WSDL file for the DFM server
|
netapp_server_port=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_port"] %>
|
||||||
|
netapp_login=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_login"] %>
|
||||||
# netapp_login=<None>
|
netapp_password=<%= node["openstack"]["block-storage"]["netapp"]["netapp_server_password"] %>
|
||||||
#### (StrOpt) User name for the DFM server
|
nfs_share_config=<%= node["openstack"]["block-storage"]["nfs"]["shares_config"] %>
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
|
||||||
######## defined in cinder.volume.nexenta.volume ########
|
######## defined in cinder.volume.nexenta.volume ########
|
||||||
|
|
||||||
|
4
templates/default/shares.conf.erb
Normal file
4
templates/default/shares.conf.erb
Normal 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 %>
|
Reference in New Issue
Block a user