From 57c6e08276bbdb308dfae4f6ea6bc54e10261a19 Mon Sep 17 00:00:00 2001 From: Alexandre Marangone Date: Thu, 21 Mar 2013 10:58:38 -0700 Subject: [PATCH] Support EL, Fedora and (open)SuSE repo - Recipe is now ceph::repo - For EL, add EPEL repository for dependencies by default. Deactivable by using el_add_epel: false under ceph: {} in the chef environment. - Handle package names difference between EL/FC/SuSE and Debian. Signed-off-by: Alexandre Marangone --- attributes/{apt.rb => repo.rb} | 1 + recipes/apt.rb | 3 ++- recipes/default.rb | 36 ++++++++++++++++++-------- recipes/repo.rb | 8 ++++++ recipes/rpm.rb | 47 ++++++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 11 deletions(-) rename attributes/{apt.rb => repo.rb} (81%) create mode 100644 recipes/repo.rb create mode 100644 recipes/rpm.rb diff --git a/attributes/apt.rb b/attributes/repo.rb similarity index 81% rename from attributes/apt.rb rename to attributes/repo.rb index 3e8804e..c753e56 100644 --- a/attributes/apt.rb +++ b/attributes/repo.rb @@ -1,3 +1,4 @@ default['ceph']['branch'] = "stable" # Can be stable, testing or dev. # Major release version to install or gitbuilder branch default['ceph']['version'] = "bobtail" +default['ceph']['el_add_epel'] = true diff --git a/recipes/apt.rb b/recipes/apt.rb index f666cb1..0b3dabe 100644 --- a/recipes/apt.rb +++ b/recipes/apt.rb @@ -4,7 +4,7 @@ case node['ceph']['branch'] when "stable" apt_repository "ceph-stable" do repo_name "ceph" - uri "http://www.ceph.com/debian-#{node['ceph']['version']}/" + uri "http://ceph.com/debian-#{node['ceph']['version']}/" distribution node['lsb']['codename'] components ["main"] key "https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc" @@ -26,3 +26,4 @@ when "dev" key "https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc" end end + diff --git a/recipes/default.rb b/recipes/default.rb index 327eec6..8cb9395 100644 --- a/recipes/default.rb +++ b/recipes/default.rb @@ -16,18 +16,34 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - -packages = %w{ - ceph - ceph-common -} -if node['ceph']['install_debug'] - packages_dbg = %w{ - ceph-dbg - ceph-common-dbg +packages = [] + +case node['platform_family'] +when "debian" + packages = %w{ + ceph + ceph-common } - packages += packages_dbg + + if node['ceph']['install_debug'] + packages_dbg = %w{ + ceph-dbg + ceph-common-dbg + } + packages += packages_dbg + end +when "rhel", "fedora" + packages = %w{ + ceph + } + + if node['ceph']['install_debug'] + packages_dbg = %w{ + ceph-debug + } + packages += packages_dbg + end end packages.each do |pkg| diff --git a/recipes/repo.rb b/recipes/repo.rb new file mode 100644 index 0000000..3f50c17 --- /dev/null +++ b/recipes/repo.rb @@ -0,0 +1,8 @@ +case node['platform_family'] +when "debian" + include_recipe "ceph::apt" +when "rhel", "suse" + include_recipe "ceph::rpm" +else + raise "not supported" +end diff --git a/recipes/rpm.rb b/recipes/rpm.rb new file mode 100644 index 0000000..7659271 --- /dev/null +++ b/recipes/rpm.rb @@ -0,0 +1,47 @@ +case node['platform_family'] +when "rhel" + version = %x[ cat /etc/redhat-release | awk '{print $3}' | awk -F. '{print $1}' ].chomp + release = "el" + version + if node['ceph']['el_add_epel'] == true + # We need to do this since the EPEL + # version might change + epel_package = %x[ curl -s http://dl.fedoraproject.org/pub/epel/fullfilelist | grep ^#{version}/#{node['kernel']['machine']}/epel-release ].chomp + system "rpm -U http://dl.fedoraproject.org/pub/epel/#{epel_package}" + end +when "fedora" + version = %x[ cat /etc/fedora-release | awk '{print $3}' ].chomp + release = "fc" + version +when "suse" + suse = %x[ head -n1 /etc/SuSE-release| awk '{print $1}' ].chomp.downcase #can be suse or opensuse + version = %x[ grep VERSION /etc/SuSE-release | awk -F'= ' '{print $2}' ].chomp + release = suse + version +end + +end_path = "/#{release}/x86_64/ceph-release-1-0.#{release}.noarch.rpm" +case node['ceph']['branch'] +when "stable" + path = "http://ceph.com/rpm-#{node['ceph']['version']}" + end_path + system "rpm -U #{path}" +when "testing" + path = "http://ceph.com/rpm-testing" + end_path + system "rpm -U #{path}" +when "dev" + if node['platform'] == "centos" + baseurl="http://gitbuilder.ceph.com/ceph-rpm-centos#{version}-x86_64-basic/ref/#{node['ceph']['version']}/x86_64/" + elsif node['platform'] == "fedora" + baseurl="http://gitbuilder.ceph.com/ceph-rpm-#{release}-x86_64-basic/ref/#{node['ceph']['version']}/RPMS/x86_64/" + else + raise "repository not available for your distribution" + end + # Instead of using the yum cookbook, + # we do it this way. It avoids a dependency + system "curl -s 'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/autobuild.asc' > /etc/pki/rpm-gpg/RPM-GPG-KEY-CEPH" + system "cat > /etc/yum.repos.d/ceph.repo << EOF\n" \ + "[ceph]\n" \ + "name=Ceph\n" \ + "baseurl=#{baseurl}\n" \ + "enabled=1\n" \ + "gpgcheck=1\n" \ + "gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CEPH\n" \ + "EOF\n" +end