From 10765fd76e4e33a5a850bb2dd5c8e378f7a389ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ionu=C8=9B=20Ar=C8=9B=C4=83ri=C8=99i?= Date: Wed, 17 Jul 2013 18:22:06 +0200 Subject: [PATCH] implement SUSE platform support Change-Id: Ief3e20dd27f262d742db04549b5ac2213dc725fe --- attributes/default.rb | 29 ++++++++++--- metadata.rb | 2 +- spec/api-opensuse_spec.rb | 38 +++++++++++++++++ spec/api_spec.rb | 4 +- spec/scheduler-opensuse_spec.rb | 37 +++++++++++++++++ spec/scheduler_spec.rb | 2 +- spec/spec_helper.rb | 13 ++++-- spec/volume-opensuse_spec.rb | 65 ++++++++++++++++++++++++++++++ spec/volume_spec.rb | 2 +- templates/default/targets.conf.erb | 2 +- 10 files changed, 179 insertions(+), 15 deletions(-) create mode 100644 spec/api-opensuse_spec.rb create mode 100644 spec/scheduler-opensuse_spec.rb create mode 100644 spec/volume-opensuse_spec.rb diff --git a/attributes/default.rb b/attributes/default.rb index e43a33f..b2add7b 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -51,11 +51,6 @@ default["openstack"]["block-storage"]["keystone_service_chef_role"] = "keystone" # of the api-paste.ini when node["openstack"]["auth"]["strategy"] == "pki" default["openstack"]["block-storage"]["api"]["auth"]["cache_dir"] = "/var/cache/cinder/api" -# operating system group name -default["openstack"]["block-storage"]["group"] = "cinder" -# operating system user that services will run under -default["openstack"]["block-storage"]["user"] = "cinder" - # Maximum allocatable gigabytes # Should equal total backend storage, default is 10TB default["openstack"]["block-storage"]["max_gigabytes"] = "10000" @@ -129,6 +124,10 @@ default["openstack"]["block-storage"]["policy"]["admin_api"] = '["is_admin:True" case platform when "fedora", "redhat", "centos" # :pragma-foodcritic: ~FC024 - won't fix this + # operating system user and group names + default["openstack"]["block-storage"]["user"] = "cinder" + default["openstack"]["block-storage"]["group"] = "cinder" + default["openstack"]["block-storage"]["platform"] = { "mysql_python_packages" => ["MySQL-python"], "postgresql_python_packages" => ["python-psycopg2"], @@ -143,7 +142,27 @@ when "fedora", "redhat", "centos" # :pragma-foodcritic: ~FC024 - won't fix this "cinder_nfs_packages" => ["nfs-utils", "nfs-utils-lib"], "package_overrides" => "" } +when "suse" + # operating system user and group names + default["openstack"]["block-storage"]["user"] = "openstack-cinder" + default["openstack"]["block-storage"]["group"] = "openstack-cinder" + default["openstack"]["block-storage"]["platform"] = { + "mysql_python_packages" => ["python-mysql"], + "postgresql_python_packages" => ["python-psycopg2"], + "cinder_api_packages" => ["openstack-cinder-api"], + "cinder_api_service" => "openstack-cinder-api", + "cinder_scheduler_packages" => ["openstack-cinder-scheduler"], + "cinder_scheduler_service" => "openstack-cinder-scheduler", + "cinder_volume_packages" => ["openstack-cinder"], + "cinder_volume_service" => "openstack-cinder-volume", + "cinder_iscsitarget_packages" => ["tgt"], + "cinder_iscsitarget_service" => "tgtd", + "cinder_nfs_packages" => ["nfs-utils"] + } when "ubuntu" + # operating system user and group names + default["openstack"]["block-storage"]["user"] = "cinder" + default["openstack"]["block-storage"]["group"] = "cinder" default["openstack"]["block-storage"]["platform"] = { "mysql_python_packages" => ["python-mysqldb"], "postgresql_python_packages" => ["python-psycopg2"], diff --git a/metadata.rb b/metadata.rb index 498bc0b..ca0cde8 100644 --- a/metadata.rb +++ b/metadata.rb @@ -12,7 +12,7 @@ recipe "openstack-block-storage::keystone_registration", "Registers ci recipe "openstack-block-storage::scheduler", "Installs the cinder-scheduler service" recipe "openstack-block-storage::volume", "Installs the cinder-volume service and sets up the iscsi helper" -%w{ ubuntu fedora redhat centos }.each do |os| +%w{ ubuntu fedora redhat centos suse }.each do |os| supports os end diff --git a/spec/api-opensuse_spec.rb b/spec/api-opensuse_spec.rb new file mode 100644 index 0000000..bcba515 --- /dev/null +++ b/spec/api-opensuse_spec.rb @@ -0,0 +1,38 @@ +require_relative "spec_helper" + +describe "openstack-block-storage::api" do + before { block_storage_stubs } + describe "opensuse" do + before do + @chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + @chef_run.converge "openstack-block-storage::api" + end + + it "installs cinder api packages" do + expect(@chef_run).to upgrade_package "openstack-cinder-api" + end + + it "installs mysql python packages by default" do + expect(@chef_run).to upgrade_package "python-mysql" + end + + it "installs postgresql python packages if explicitly told" do + chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + node = chef_run.node + node.set["openstack"]["db"]["volume"]["db_type"] = "postgresql" + chef_run.converge "openstack-block-storage::api" + + expect(chef_run).to upgrade_package "python-psycopg2" + expect(chef_run).not_to upgrade_package "python-mysql" + end + + it "starts cinder api on boot" do + expect(@chef_run).to set_service_to_start_on_boot "openstack-cinder-api" + end + + expect_creates_policy_json( + "service[cinder-api]", "openstack-cinder", "openstack-cinder") + expect_creates_cinder_conf( + "service[cinder-api]", "openstack-cinder", "openstack-cinder") + end +end diff --git a/spec/api_spec.rb b/spec/api_spec.rb index 6bc5c55..fc7fcdc 100644 --- a/spec/api_spec.rb +++ b/spec/api_spec.rb @@ -57,7 +57,7 @@ describe "openstack-block-storage::api" do expect(@chef_run).to set_service_to_start_on_boot "cinder-api" end - expect_creates_cinder_conf "service[cinder-api]" + expect_creates_cinder_conf "service[cinder-api]", "cinder", "cinder" describe "cinder.conf" do before do @@ -112,7 +112,7 @@ describe "openstack-block-storage::api" do expect(@chef_run).to execute_command cmd end - expect_creates_policy_json "service[cinder-api]" + expect_creates_policy_json "service[cinder-api]", "cinder", "cinder" describe "api-paste.ini" do before do diff --git a/spec/scheduler-opensuse_spec.rb b/spec/scheduler-opensuse_spec.rb new file mode 100644 index 0000000..ebe40ab --- /dev/null +++ b/spec/scheduler-opensuse_spec.rb @@ -0,0 +1,37 @@ +require_relative "spec_helper" + +describe "openstack-block-storage::scheduler" do + before { block_storage_stubs } + describe "opensuse" do + before do + @chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + @chef_run.converge "openstack-block-storage::scheduler" + end + + it "installs cinder api packages" do + expect(@chef_run).to upgrade_package "openstack-cinder-scheduler" + end + + it "installs mysql python packages by default" do + expect(@chef_run).to upgrade_package "python-mysql" + end + + it "installs postgresql python packages if explicitly told" do + chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + node = chef_run.node + node.set["openstack"]["db"]["volume"]["db_type"] = "postgresql" + chef_run.converge "openstack-block-storage::scheduler" + + expect(chef_run).to upgrade_package "python-psycopg2" + expect(chef_run).not_to upgrade_package "python-mysql" + end + + it "starts cinder scheduler" do + expect(@chef_run).to start_service "openstack-cinder-scheduler" + end + + it "starts cinder scheduler on boot" do + expect(@chef_run).to set_service_to_start_on_boot "openstack-cinder-scheduler" + end + end +end diff --git a/spec/scheduler_spec.rb b/spec/scheduler_spec.rb index 76bcc42..3192193 100644 --- a/spec/scheduler_spec.rb +++ b/spec/scheduler_spec.rb @@ -45,6 +45,6 @@ describe "openstack-block-storage::scheduler" do expect(@chef_run).to set_service_to_start_on_boot "cinder-scheduler" end - expect_creates_cinder_conf "service[cinder-scheduler]" + expect_creates_cinder_conf "service[cinder-scheduler]", "cinder", "cinder" end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3aac05b..178a1b5 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,6 +1,11 @@ require "chefspec" ::LOG_LEVEL = :fatal +::OPENSUSE_OPTS = { + :platform => "opensuse", + :version => "12.3", + :log_level => ::LOG_LEVEL +} ::REDHAT_OPTS = { :platform => "redhat", :version => "6.3", @@ -34,14 +39,14 @@ def expect_runs_openstack_common_logging_recipe end end -def expect_creates_cinder_conf service, action=:restart +def expect_creates_cinder_conf service, user, group, action=:restart describe "cinder.conf" do before do @file = @chef_run.template "/etc/cinder/cinder.conf" end it "has proper owner" do - expect(@file).to be_owned_by "cinder", "cinder" + expect(@file).to be_owned_by user, group end it "has proper modes" do @@ -54,14 +59,14 @@ def expect_creates_cinder_conf service, action=:restart end end -def expect_creates_policy_json service, action=:restart +def expect_creates_policy_json service, user, group, action=:restart describe "policy.json" do before do @file = @chef_run.template "/etc/cinder/policy.json" end it "has proper owner" do - expect(@file).to be_owned_by "cinder", "cinder" + expect(@file).to be_owned_by user, group end it "has proper modes" do diff --git a/spec/volume-opensuse_spec.rb b/spec/volume-opensuse_spec.rb new file mode 100644 index 0000000..1a3da17 --- /dev/null +++ b/spec/volume-opensuse_spec.rb @@ -0,0 +1,65 @@ +require_relative "spec_helper" + +describe "openstack-block-storage::volume" do + before { block_storage_stubs } + describe "opensuse" do + before do + @chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + @chef_run.converge "openstack-block-storage::volume" + end + + it "installs cinder volume packages" do + expect(@chef_run).to upgrade_package "openstack-cinder" + end + + it "installs mysql python packages by default" do + expect(@chef_run).to upgrade_package "python-mysql" + end + + it "installs postgresql python packages if explicitly told" do + chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_OPTS + node = chef_run.node + node.set["openstack"]["db"]["volume"]["db_type"] = "postgresql" + chef_run.converge "openstack-block-storage::volume" + + expect(chef_run).to upgrade_package "python-psycopg2" + expect(chef_run).not_to upgrade_package "python-mysql" + end + + it "installs cinder iscsi packages" do + expect(@chef_run).to upgrade_package "tgt" + end + + it "starts cinder volume" do + expect(@chef_run).to start_service "openstack-cinder-volume" + end + + it "starts cinder volume on boot" do + expected = "openstack-cinder-volume" + expect(@chef_run).to set_service_to_start_on_boot expected + end + + it "starts iscsi target on boot" do + expect(@chef_run).to set_service_to_start_on_boot "tgtd" + end + + it "installs nfs packages" do + chef_run = ::ChefSpec::ChefRunner.new ::OPENSUSE_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).not_to upgrade_package "nfs-utils-lib" + end + + it "has opensuse include" do + file = "/etc/tgt/targets.conf" + + expect(@chef_run).to create_file_with_content file, + "include /var/lib/cinder/volumes/*" + expect(@chef_run).not_to create_file_with_content file, + "include /etc/tgt/conf.d/*.conf" + end + end +end diff --git a/spec/volume_spec.rb b/spec/volume_spec.rb index 31c1a10..7360791 100644 --- a/spec/volume_spec.rb +++ b/spec/volume_spec.rb @@ -91,7 +91,7 @@ describe "openstack-block-storage::volume" do expect(@chef_run).to set_service_to_start_on_boot "cinder-volume" end - expect_creates_cinder_conf "service[cinder-volume]" + expect_creates_cinder_conf "service[cinder-volume]", "cinder", "cinder" it "starts iscsi target on boot" do expect(@chef_run).to set_service_to_start_on_boot "tgt" diff --git a/templates/default/targets.conf.erb b/templates/default/targets.conf.erb index 9d1b736..fedbd7f 100644 --- a/templates/default/targets.conf.erb +++ b/templates/default/targets.conf.erb @@ -1,6 +1,6 @@ <%= node["openstack"]["block-storage"]["custom_template_banner"] %> -<% if %w{redhat centos fedora}.include?(node["platform"]) %> +<% if %w{redhat centos fedora suse}.include?(node["platform"]) %> include /var/lib/cinder/volumes/* <% end %> <% if %w{debian ubuntu}.include?(node["platform"]) %>