From 190e3e0ea75e537808fa0425b0974d6a14edff6e Mon Sep 17 00:00:00 2001 From: Adam Compton Date: Tue, 21 May 2013 11:51:58 -0700 Subject: [PATCH] Adding an "openstack::repo" class which automatically sets up repos Tested with the following combinations: - RHEL-alikes, OpenStack Folsom - RHEL-alikes, OpenStack Grizzly - Fedora 18, OpenStack Grizzly (F18 includes folsom) - Ubuntu 12.04+, OpenStack Folsom - Ubuntu 12.04+, OpenStack Grizzly Change-Id: I737da83d138695a178aaf3fa711a6e08a678adde --- files/RPM-GPG-KEY-EPEL-6 | 31 +++++++++++++ files/RPM-GPG-KEY-RDO-Grizzly | 52 ++++++++++++++++++++++ manifests/repo.pp | 23 ++++++++++ manifests/repo/epel.pp | 26 +++++++++++ manifests/repo/rdo.pp | 31 +++++++++++++ manifests/repo/uca.pp | 18 ++++++++ manifests/repo/yum_refresh.pp | 8 ++++ spec/classes/openstack_repo_spec.rb | 68 +++++++++++++++++++++++++++++ 8 files changed, 257 insertions(+) create mode 100644 files/RPM-GPG-KEY-EPEL-6 create mode 100644 files/RPM-GPG-KEY-RDO-Grizzly create mode 100644 manifests/repo.pp create mode 100644 manifests/repo/epel.pp create mode 100644 manifests/repo/rdo.pp create mode 100644 manifests/repo/uca.pp create mode 100644 manifests/repo/yum_refresh.pp create mode 100644 spec/classes/openstack_repo_spec.rb diff --git a/files/RPM-GPG-KEY-EPEL-6 b/files/RPM-GPG-KEY-EPEL-6 new file mode 100644 index 0000000..1bfc3d5 --- /dev/null +++ b/files/RPM-GPG-KEY-EPEL-6 @@ -0,0 +1,31 @@ +pub 4096R/0608B895 2010-04-23 EPEL (6) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.5 (GNU/Linux) + +mQINBEvSKUIBEADLGnUj24ZVKW7liFN/JA5CgtzlNnKs7sBg7fVbNWryiE3URbn1 +JXvrdwHtkKyY96/ifZ1Ld3lE2gOF61bGZ2CWwJNee76Sp9Z+isP8RQXbG5jwj/4B +M9HK7phktqFVJ8VbY2jfTjcfxRvGM8YBwXF8hx0CDZURAjvf1xRSQJ7iAo58qcHn +XtxOAvQmAbR9z6Q/h/D+Y/PhoIJp1OV4VNHCbCs9M7HUVBpgC53PDcTUQuwcgeY6 +pQgo9eT1eLNSZVrJ5Bctivl1UcD6P6CIGkkeT2gNhqindRPngUXGXW7Qzoefe+fV +QqJSm7Tq2q9oqVZ46J964waCRItRySpuW5dxZO34WM6wsw2BP2MlACbH4l3luqtp +Xo3Bvfnk+HAFH3HcMuwdaulxv7zYKXCfNoSfgrpEfo2Ex4Im/I3WdtwME/Gbnwdq +3VJzgAxLVFhczDHwNkjmIdPAlNJ9/ixRjip4dgZtW8VcBCrNoL+LhDrIfjvnLdRu +vBHy9P3sCF7FZycaHlMWP6RiLtHnEMGcbZ8QpQHi2dReU1wyr9QgguGU+jqSXYar +1yEcsdRGasppNIZ8+Qawbm/a4doT10TEtPArhSoHlwbvqTDYjtfV92lC/2iwgO6g +YgG9XrO4V8dV39Ffm7oLFfvTbg5mv4Q/E6AWo/gkjmtxkculbyAvjFtYAQARAQAB +tCFFUEVMICg2KSA8ZXBlbEBmZWRvcmFwcm9qZWN0Lm9yZz6JAjYEEwECACAFAkvS +KUICGw8GCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRA7Sd8qBgi4lR/GD/wLGPv9 +qO39eyb9NlrwfKdUEo1tHxKdrhNz+XYrO4yVDTBZRPSuvL2yaoeSIhQOKhNPfEgT +9mdsbsgcfmoHxmGVcn+lbheWsSvcgrXuz0gLt8TGGKGGROAoLXpuUsb1HNtKEOwP +Q4z1uQ2nOz5hLRyDOV0I2LwYV8BjGIjBKUMFEUxFTsL7XOZkrAg/WbTH2PW3hrfS +WtcRA7EYonI3B80d39ffws7SmyKbS5PmZjqOPuTvV2F0tMhKIhncBwoojWZPExft +HpKhzKVh8fdDO/3P1y1Fk3Cin8UbCO9MWMFNR27fVzCANlEPljsHA+3Ez4F7uboF +p0OOEov4Yyi4BEbgqZnthTG4ub9nyiupIZ3ckPHr3nVcDUGcL6lQD/nkmNVIeLYP +x1uHPOSlWfuojAYgzRH6LL7Idg4FHHBA0to7FW8dQXFIOyNiJFAOT2j8P5+tVdq8 +wB0PDSH8yRpn4HdJ9RYquau4OkjluxOWf0uRaS//SUcCZh+1/KBEOmcvBHYRZA5J +l/nakCgxGb2paQOzqqpOcHKvlyLuzO5uybMXaipLExTGJXBlXrbbASfXa/yGYSAG +iVrGz9CE6676dMlm8F+s3XXE13QZrXmjloc6jwOljnfAkjTGXjiB7OULESed96MR +XtfLk0W5Ab9pd7tKDR6QHI7rgHXfCopRnZ2VVQ== +=V/6I +-----END PGP PUBLIC KEY BLOCK----- diff --git a/files/RPM-GPG-KEY-RDO-Grizzly b/files/RPM-GPG-KEY-RDO-Grizzly new file mode 100644 index 0000000..671c86e --- /dev/null +++ b/files/RPM-GPG-KEY-RDO-Grizzly @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.11 (GNU/Linux) + +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 +kHVKhYA= +=F6XX +-----END PGP PUBLIC KEY BLOCK----- diff --git a/manifests/repo.pp b/manifests/repo.pp new file mode 100644 index 0000000..3af9545 --- /dev/null +++ b/manifests/repo.pp @@ -0,0 +1,23 @@ +# +# Sets up the package repos necessary to use OpenStack +# on RHEL-alikes and Ubuntu +# +class openstack::repo( + $release = 'grizzly' +) { + if $release == 'grizzly' { + if $::osfamily == 'RedHat' { + include openstack::repo::rdo + } elsif $::operatingsystem == 'Ubuntu' { + class {'openstack::repo::uca': release => $release } + } + } elsif $release == 'folsom' { + if $::osfamily == 'RedHat' { + include openstack::repo::epel + } elsif $::operatingsystem == 'Ubuntu' { + class {'openstack::repo::uca': release => $release } + } + } else { + notify { "WARNING: openstack::repo parameter 'release' of '${release}' not recognized; please use 'grizzly' or 'folsom'.": } + } +} diff --git a/manifests/repo/epel.pp b/manifests/repo/epel.pp new file mode 100644 index 0000000..2e15055 --- /dev/null +++ b/manifests/repo/epel.pp @@ -0,0 +1,26 @@ +# EPEL repo (RHEL-alikes only, _not_ Fedora) +class openstack::repo::epel { + if ($::osfamily == 'RedHat' and + $::operatingsystem != 'Fedora' and + $::operatingsystemrelease =~ /^6\..*$/) { + include openstack::repo::yum_refresh + + yumrepo { 'epel': + mirrorlist => 'https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch', + descr => 'Extra Packages for Enterprise Linux 6 - $basearch', + enabled => 1, + gpgcheck => 1, + gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6', + failovermethod => priority, + notify => Exec['yum_refresh'] + } + file { '/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6': + source => 'puppet:///modules/openstack/RPM-GPG-KEY-EPEL-6', + owner => root, + group => root, + mode => 644, + before => Yumrepo['epel'], + } + Yumrepo['epel'] -> Package<||> + } +} diff --git a/manifests/repo/rdo.pp b/manifests/repo/rdo.pp new file mode 100644 index 0000000..2ed6b8b --- /dev/null +++ b/manifests/repo/rdo.pp @@ -0,0 +1,31 @@ +# RDO repo (supports Grizzly on both RHEL-alikes and Fedora, requires EPEL) +class openstack::repo::rdo { + include openstack::repo::epel + + if $::osfamily == 'RedHat' { + $dist = $::operatingsystem ? { + 'CentOS' => 'epel', + 'Fedora' => 'fedora', + } + # $lsbmajdistrelease is only available with redhat-lsb installed + $osver = regsubst($::operatingsystemrelease, '(\d+)\..*', '\1') + + yumrepo { 'rdo-release': + baseurl => "http://repos.fedorapeople.org/repos/openstack/openstack-grizzly/${dist}-${osver}/", + descr => 'OpenStack Grizzly Repository', + enabled => 1, + gpgcheck => 1, + gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Grizzly', + priority => 98, + notify => Exec['yum_refresh'], + } + file { '/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Grizzly': + source => 'puppet:///modules/openstack/RPM-GPG-KEY-RDO-Grizzly', + owner => root, + group => root, + mode => 644, + before => Yumrepo['rdo-release'], + } + Yumrepo['rdo-release'] -> Package<||> + } +} diff --git a/manifests/repo/uca.pp b/manifests/repo/uca.pp new file mode 100644 index 0000000..2378f3e --- /dev/null +++ b/manifests/repo/uca.pp @@ -0,0 +1,18 @@ +# Ubuntu Cloud Archive repo (supports either Folsom or Grizzly) +class openstack::repo::uca( + $release = 'grizzly' +) { + if ($::operatingsystem == 'Ubuntu' and + $::lsbdistdescription =~ /^.*LTS.*$/) { + include apt::update + + apt::source { 'ubuntu-cloud-archive': + location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu', + release => "${::lsbdistcodename}-updates/${release}", + repos => 'main', + required_packages => 'ubuntu-cloud-keyring', + } + + Exec['apt_update'] -> Package<||> + } +} diff --git a/manifests/repo/yum_refresh.pp b/manifests/repo/yum_refresh.pp new file mode 100644 index 0000000..f750047 --- /dev/null +++ b/manifests/repo/yum_refresh.pp @@ -0,0 +1,8 @@ +# Make sure to refresh yum database after adding repos and before installing packages +class openstack::repo::yum_refresh { + exec { 'yum_refresh': + command => '/usr/bin/yum clean all', + refreshonly => true, + } + Exec['yum_refresh'] -> Package<||> +} diff --git a/spec/classes/openstack_repo_spec.rb b/spec/classes/openstack_repo_spec.rb new file mode 100644 index 0000000..bbac4d7 --- /dev/null +++ b/spec/classes/openstack_repo_spec.rb @@ -0,0 +1,68 @@ +require 'spec_helper' + +describe 'openstack::repo' do + + describe 'RHEL and grizzly' do + let :params do + { :release => 'grizzly' } + end + let :facts do + { + :osfamily => 'RedHat', + :operatingsystem => 'CentOS', + :operatingsystemrelease => '6.4', + } + end + + it do + should contain_yumrepo('rdo-release').with( + :baseurl => 'http://repos.fedorapeople.org/repos/openstack/openstack-grizzly/epel-6/' + ) + should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Grizzly') + + should contain_yumrepo('epel') + should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6') + end + end + + describe 'Fedora and grizzly' do + let :params do + { :release => 'grizzly' } + end + + let :facts do + { + :osfamily => 'RedHat', + :operatingsystem => 'Fedora', + :operatingsystemrelease => '18', + } + end + + it do + should contain_yumrepo('rdo-release').with( + :baseurl => 'http://repos.fedorapeople.org/repos/openstack/openstack-grizzly/fedora-18/' + ) + should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Grizzly') + end + end + + describe 'Ubuntu and grizzly' do + let :params do + { :release => 'grizzly' } + end + + let :facts do + { + :osfamily => 'Debian', + :operatingsystem => 'Ubuntu', + :operatingsystemrelease => '12.04', + :lsbdistdescription => 'Ubuntu 12.04.1 LTS', + :lsbdistcodename => 'precise', + } + end + + it do + should contain_apt__source('ubuntu-cloud-archive').with_release('precise-updates/grizzly') + end + end +end