Browse Source

Add hash based repository management

This patch adds support for managing repos
for major distros, separated by osfamily at
the top level and operatingsystem below that.

Since redhat, fedora and centos can all install
from rdo, which is the only current option, the
fedora and centos classes simply wrap around the
redhat one. This may change in the future if any
of them change (for example if RHOS support is
added and redhat is now different to fedora)

Change-Id: I5b18f393999d6f70757a2dfd9b12da049d6b64e1
changes/22/113922/24
Michael Chapman 7 years ago
parent
commit
0fc013377b
16 changed files with 990 additions and 1 deletions
  1. +3
    -0
      .fixtures.yml
  2. +3
    -1
      Rakefile
  3. +33
    -0
      examples/redhat_repo.yaml
  4. +29
    -0
      files/RPM-GPG-KEY-EPEL-6
  5. +29
    -0
      files/RPM-GPG-KEY-EPEL-7
  6. +52
    -0
      files/RPM-GPG-KEY-RDO-Havana
  7. +52
    -0
      files/RPM-GPG-KEY-RDO-Juno
  8. +59
    -0
      lib/puppet/parser/functions/validate_yum_hash.rb
  9. +59
    -0
      manifests/repo/debian/debian.pp
  10. +18
    -0
      manifests/repo/debian/params.pp
  11. +54
    -0
      manifests/repo/debian/ubuntu.pp
  12. +32
    -0
      manifests/repo/redhat/params.pp
  13. +134
    -0
      manifests/repo/redhat/redhat.pp
  14. +132
    -0
      spec/classes/openstack_extras_repo_debian_debian_spec.rb
  15. +114
    -0
      spec/classes/openstack_extras_repo_debian_ubuntu_spec.rb
  16. +187
    -0
      spec/classes/openstack_extras_repo_redhat_redhat_spec.rb

+ 3
- 0
.fixtures.yml View File

@ -1,3 +1,6 @@
fixtures:
repositories:
'apt' : 'git://github.com/puppetlabs/puppetlabs-apt'
'stdlib' : 'git://github.com/puppetlabs/puppetlabs-stdlib'
symlinks:
'openstack_extras': "#{source_dir}"

+ 3
- 1
Rakefile View File

@ -4,4 +4,6 @@ require 'puppet-lint/tasks/puppet-lint'
PuppetLint.configuration.fail_on_warnings = true
PuppetLint.configuration.send('disable_80chars')
PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
PuppetLint.configuration.send('disable_double_quoted_strings')
PuppetLint.configuration.send('disable_class_inherits_from_params_class')
PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp", "examples/**/*.pp", "vendor/**/*.pp"]

+ 33
- 0
examples/redhat_repo.yaml View File

@ -0,0 +1,33 @@
# This is an example of how to define your own repos in hiera
# in addition to RDO when using the redhat repo class
# assuming you have included the class somewhere
#
# This is taken from the aptira hiera data files in
# puppet_openstack_builder and may go out of date.
#
# Set up repositories using openstack_extras
openstack_extras::repo::redhat::redhat::repo_hash:
'CentOS-Base':
'descr': 'CentOS-$releasever - Base'
'baseurl': "%{hiera('yum_base_mirror')}/$releasever/os/$basearch/"
'CentOS-Updates':
'descr': 'CentOS-$releasever - Updates'
'baseurl': "%{hiera('yum_base_mirror')}/$releasever/updates/$basearch/"
'CentOS-Extras':
'descr': 'CentOS-$releasever - Extras'
'baseurl': "%{hiera('yum_base_mirror')}/$releasever/extras/$basearch/"
'epel':
'descr': 'Extra Packages for Enterprise Linux 6 - $basearch'
'baseurl': "%{hiera('yum_epel_mirror')}/$releasever/$basearch/"
'gpgkey': 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6'
'failovermethod': 'priority'
openstack_extras::repo::redhat::redhat::repo_defaults:
'proxy': "http://%{hiera('proxy_host')}:%{hiera('proxy_port')}"
openstack_extras::repo::redhat::redhat::gpgkey_hash:
'/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6':
'source': 'puppet:///modules/openstack_extras/RPM-GPG-KEY-EPEL-6'
openstack_extras::repo::redhat::redhat::purge_unmanaged: true
openstack_extras::repo::redhat::redhat::package_require: true

+ 29
- 0
files/RPM-GPG-KEY-EPEL-6 View File

@ -0,0 +1,29 @@
-----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-----

+ 29
- 0
files/RPM-GPG-KEY-EPEL-7 View File

@ -0,0 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
mQINBFKuaIQBEAC1UphXwMqCAarPUH/ZsOFslabeTVO2pDk5YnO96f+rgZB7xArB
OSeQk7B90iqSJ85/c72OAn4OXYvT63gfCeXpJs5M7emXkPsNQWWSju99lW+AqSNm
jYWhmRlLRGl0OO7gIwj776dIXvcMNFlzSPj00N2xAqjMbjlnV2n2abAE5gq6VpqP
vFXVyfrVa/ualogDVmf6h2t4Rdpifq8qTHsHFU3xpCz+T6/dGWKGQ42ZQfTaLnDM
jToAsmY0AyevkIbX6iZVtzGvanYpPcWW4X0RDPcpqfFNZk643xI4lsZ+Y2Er9Yu5
S/8x0ly+tmmIokaE0wwbdUu740YTZjCesroYWiRg5zuQ2xfKxJoV5E+Eh+tYwGDJ
n6HfWhRgnudRRwvuJ45ztYVtKulKw8QQpd2STWrcQQDJaRWmnMooX/PATTjCBExB
9dkz38Druvk7IkHMtsIqlkAOQMdsX1d3Tov6BE2XDjIG0zFxLduJGbVwc/6rIc95
T055j36Ez0HrjxdpTGOOHxRqMK5m9flFbaxxtDnS7w77WqzW7HjFrD0VeTx2vnjj
GqchHEQpfDpFOzb8LTFhgYidyRNUflQY35WLOzLNV+pV3eQ3Jg11UFwelSNLqfQf
uFRGc+zcwkNjHh5yPvm9odR1BIfqJ6sKGPGbtPNXo7ERMRypWyRz0zi0twARAQAB
tChGZWRvcmEgRVBFTCAoNykgPGVwZWxAZmVkb3JhcHJvamVjdC5vcmc+iQI4BBMB
AgAiBQJSrmiEAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBqL66iNSxk
5cfGD/4spqpsTjtDM7qpytKLHKruZtvuWiqt5RfvT9ww9GUUFMZ4ZZGX4nUXg49q
ixDLayWR8ddG/s5kyOi3C0uX/6inzaYyRg+Bh70brqKUK14F1BrrPi29eaKfG+Gu
MFtXdBG2a7OtPmw3yuKmq9Epv6B0mP6E5KSdvSRSqJWtGcA6wRS/wDzXJENHp5re
9Ism3CYydpy0GLRA5wo4fPB5uLdUhLEUDvh2KK//fMjja3o0L+SNz8N0aDZyn5Ax
CU9RB3EHcTecFgoy5umRj99BZrebR1NO+4gBrivIfdvD4fJNfNBHXwhSH9ACGCNv
HnXVjHQF9iHWApKkRIeh8Fr2n5dtfJEF7SEX8GbX7FbsWo29kXMrVgNqHNyDnfAB
VoPubgQdtJZJkVZAkaHrMu8AytwT62Q4eNqmJI1aWbZQNI5jWYqc6RKuCK6/F99q
thFT9gJO17+yRuL6Uv2/vgzVR1RGdwVLKwlUjGPAjYflpCQwWMAASxiv9uPyYPHc
ErSrbRG0wjIfAR3vus1OSOx3xZHZpXFfmQTsDP7zVROLzV98R3JwFAxJ4/xqeON4
vCPFU6OsT3lWQ8w7il5ohY95wmujfr6lk89kEzJdOTzcn7DBbUru33CQMGKZ3Evt
RjsC7FDbL017qxS+ZVA/HGkyfiu4cpgV8VUnbql5eAZ+1Ll6Dw==
=hdPa
-----END PGP PUBLIC KEY BLOCK-----

+ 52
- 0
files/RPM-GPG-KEY-RDO-Havana View File

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
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
WRhdyg==
=3A9V
-----END PGP PUBLIC KEY BLOCK-----

+ 52
- 0
files/RPM-GPG-KEY-RDO-Juno View File

@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1
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
tqA=
=vBYB
-----END PGP PUBLIC KEY BLOCK-----

+ 59
- 0
lib/puppet/parser/functions/validate_yum_hash.rb View File

@ -0,0 +1,59 @@
module Puppet::Parser::Functions
yumrepo_arguments = [
'name',
'ensure',
'baseurl',
'cost',
'descr',
'enabled',
'enablegroups',
'exclude',
'failovermethod',
'gpgcheck',
'gpgkey',
'http_caching',
'include',
'includepkgs',
'keepalive',
'metadata_expire',
'metalink',
'mirrorlist',
'priority',
'protect',
'provider',
'proxy',
'proxy_password',
'proxy_username',
'repo_gpgcheck',
's3_enabled',
'skip_if_unavailable',
'sslcacert',
'sslclientcert',
'sslclientkey',
'sslverify',
'target',
'timeout'
]
newfunction(:validate_yum_hash) do |args|
if args.size > 1
raise Puppet::Error, "validate_yum_hash takes only a single argument, #{args.size} provided"
end
arg = args[0]
if not arg.kind_of?(Hash)
raise Puppet::Error, "non-hash argument provided to validate_yum_hash"
end
if arg.size > 0
arg.each do |title, params|
params.each do |param, value|
if ! yumrepo_arguments.include?(param)
raise Puppet::Error, "Parameter #{param} is not valid for the yumrepo type"
end
end
end
end
end
end

+ 59
- 0
manifests/repo/debian/debian.pp View File

@ -0,0 +1,59 @@
# == Class: openstack_extras::repo::debian::debian
#
# This repo sets up apt sources for use with the debian
# osfamily and debian operatingsystem
#
# === Parameters:
#
# [*release*]
# (optional) The OpenStack release to add a
# Debian Wheezy apt source for.
# Defaults to 'icehouse'
#
# [*manage_whz*]
# (optional) Whether or not to add the default
# Debian Wheezy APT source
# Defaults to true
#
# [*source_hash*]
# (optional) A hash of apt::source resources to
# create and manage
# Defaults to {}
#
# [*source_defaults*]
# (optional) A hash of defaults to use for all apt::source
# resources created by this class
# Defaults to {}
#
# [*package_require*]
# (optional) Whether or not to run 'apt-get update' before
# installing any packages.
# Defaults to false
#
class openstack_extras::repo::debian::debian(
$release = $::openstack_extras::repo::debian::params::release,
$manage_whz = true,
$source_hash = {},
$source_defaults = {},
$package_require = false
) inherits openstack_extras::repo::debian::params {
if $manage_whz {
apt::source { $::openstack_extras::repo::debian::params::whz_name:
location => $::openstack_extras::repo::debian::params::whz_location,
release => $release,
repos => $::openstack_extras::repo::debian::params::whz_repos,
required_packages => $::openstack_extras::repo::debian::params::whz_required_packages
} ->
apt::source { "${::openstack_extras::repo::debian::params::whz_name}_backports":
location => $::openstack_extras::repo::debian::params::whz_location,
release => "${release}-backports",
repos => $::openstack_extras::repo::debian::params::whz_repos,
}
}
create_resources('apt::source', $source_hash, $source_defaults)
if $package_require {
Exec['apt_update'] -> Package<||>
}
}

+ 18
- 0
manifests/repo/debian/params.pp View File

@ -0,0 +1,18 @@
# == Class: openstack_extras::repo::debian::params
#
# This repo sets defaults for the debian osfamily
#
class openstack_extras::repo::debian::params
{
$release = 'icehouse'
$uca_name = 'ubuntu-cloud-archive'
$uca_location = 'http://ubuntu-cloud.archive.canonical.com/ubuntu'
$uca_repos = 'main'
$uca_required_packages = 'ubuntu-cloud-keyring'
$whz_name = 'debian_wheezy'
$whz_location = 'http://archive.gplhost.com/debian'
$whz_repos = 'main'
$whz_required_packages = 'gplhost-archive-keyring'
}

+ 54
- 0
manifests/repo/debian/ubuntu.pp View File

@ -0,0 +1,54 @@
# == Class: openstack_extras::repo::debian::ubuntu
#
# This repo sets up apt sources for use with the debian
# osfamily and ubuntu operatingsystem
#
# === Parameters:
#
# [*release*]
# (optional) The OpenStack release to add an
# Ubuntu Cloud Archive APT source for.
# Defaults to 'icehouse'
#
# [*manage_uca*]
# (optional) Whether or not to add the default
# Ubuntu Cloud Archive APT source
# Defaults to true
#
# [*source_hash*]
# (optional) A hash of apt::source resources to
# create and manage
# Defaults to {}
#
# [*source_defaults*]
# (optional) A hash of defaults to use for all apt::source
# resources created by this class
# Defaults to {}
#
# [*package_require*]
# (optional) Whether or not to run 'apt-get update' before
# installing any packages.
# Defaults to false
#
class openstack_extras::repo::debian::ubuntu(
$release = $::openstack_extras::repo::debian::params::release,
$manage_uca = true,
$source_hash = {},
$source_defaults = {},
$package_require = false
) inherits openstack_extras::repo::debian::params {
if $manage_uca {
apt::source { $::openstack_extras::repo::debian::params::uca_name:
location => $::openstack_extras::repo::debian::params::uca_location,
release => "${::lsbdistcodename}-updates/${release}",
repos => $::openstack_extras::repo::debian::params::uca_repos,
required_packages => $::openstack_extras::repo::debian::params::uca_required_packages
}
}
create_resources('apt::source', $source_hash, $source_defaults)
if $package_require {
Exec['apt_update'] -> Package<||>
}
}

+ 32
- 0
manifests/repo/redhat/params.pp View File

@ -0,0 +1,32 @@
# == Class: openstack_extras::repo::redhat::params
#
# This repo sets defaults for use with the redhat
# osfamily repo classes.
#
class openstack_extras::repo::redhat::params
{
$release = 'juno'
$repo_defaults = { 'enabled' => '1',
'gpgcheck' => '1',
'notify' => "Exec[yum_refresh]",
'mirrorlist' => 'absent',
'require' => "Anchor[openstack_extras_redhat]"
}
$gpgkey_defaults = { 'owner' => 'root',
'group' => 'root',
'mode' => '0644',
'before' => "Anchor[openstack_extras_redhat]"
}
case $::operatingsystem {
centos, redhat, scientific, slc: { $dist = 'epel' }
fedora: { $dist = 'fedora' }
default: {
warning('Unrecognised operatingsystem')
}
}
$rdo_priority = 98
}

+ 134
- 0
manifests/repo/redhat/redhat.pp View File

@ -0,0 +1,134 @@
# == Class: openstack_extras::repo::redhat::redhat
#
# This repo sets up yum repos for use with the redhat
# osfamily and redhat operatingsystem.
#
# === Parameters:
#
# [*release*]
# (optional) The openstack release to use if managing rdo
# Defaults to $::openstack_extras::repo::redhat::params::release
#
# [*manage_rdo*]
# (optional) Whether to create a predefined yumrepo resource
# for the RDO OpenStack repository provided by RedHat
# Defaults to true
#
# [*repo_hash*]
# (optional) A hash of yumrepo resources that will be passed to
# create_resource. See examples folder for some useful examples.
# Defaults to {}
#
# [*repo_defaults*]
# (optional) The defaults for the yumrepo resources that will be
# created using create_resource.
# Defaults to $::openstack_extras::repo::redhat::params::repo_defaults
#
# [*gpgkey_hash*]
# (optional) A hash of file resources that will be passed to
# create_resource. See examples folder for some useful examples.
# Defaults to {}
#
# [*gpgkey_defaults*]
# (optional) The default resource attributes to
# create gpgkeys with.
# Defaults to $::openstack_extras::repo::redhat::params::gpgkey_defaults
#
# [*purge_unmanaged*]
# (optional) Purge the yum.repos.d directory of
# all repositories not managed by Puppet
# Defaults to false
#
# [*package_require*]
# (optional) Set all packages to require all
# yumrepos be set.
# Defaults to false
#
class openstack_extras::repo::redhat::redhat(
$release = $::openstack_extras::repo::redhat::params::release,
$manage_rdo = true,
$manage_epel = true,
$repo_hash = {},
$repo_defaults = {},
$gpgkey_hash = {},
$gpgkey_defaults = {},
$purge_unmanaged = false,
$package_require = false
) inherits openstack_extras::repo::redhat::params {
validate_string($release)
validate_bool($manage_rdo)
validate_bool($manage_epel)
validate_hash($repo_hash)
validate_hash($repo_defaults)
validate_hash($gpgkey_hash)
validate_hash($gpgkey_defaults)
validate_bool($purge_unmanaged)
validate_bool($package_require)
$_repo_defaults = merge($::openstack_extras::repo::redhat::params::repo_defaults, $repo_defaults)
$_gpgkey_defaults = merge($::openstack_extras::repo::redhat::params::gpgkey_defaults, $gpgkey_defaults)
anchor { 'openstack_extras_redhat': }
if $manage_rdo {
$release_cap = capitalize($release)
$_dist = $::openstack_extras::repo::redhat::params::dist
$rdo_hash = { 'rdo-release' => {
'baseurl' => "http://repos.fedorapeople.org/repos/openstack/openstack-${release}/${_dist}-${::operatingsystemmajrelease}/",
'descr' => "OpenStack ${release_cap} Repository",
'priority' => $::openstack_extras::repo::redhat::params::rdo_priority,
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-${release_cap}",
}
}
$rdokey_hash = { "/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-${release_cap}" => {
'source' => "puppet:///modules/openstack_extras/RPM-GPG-KEY-RDO-${release_cap}"
}
}
create_resources('file', $rdokey_hash, $_gpgkey_defaults)
create_resources('yumrepo', $rdo_hash, $_repo_defaults)
}
if $manage_epel {
if ($::osfamily == 'RedHat' and
$::operatingsystem != 'Fedora')
{
$epel_hash = { 'epel' => {
'baseurl' => "https://download.fedoraproject.org/pub/epel/${::operatingsystemmajrelease}/\$basearch",
'descr' => "Extra Packages for Enterprise Linux ${::operatingsystemmajrelease} - \$basearch",
'gpgkey' => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::operatingsystemmajrelease}",
'failovermethod' => 'priority'
}
}
$epelkey_hash = { "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-${::operatingsystemmajrelease}" => {
'source' => "puppet:///modules/openstack_extras/RPM-GPG-KEY-EPEL-${::operatingsystemmajrelease}"
}
}
create_resources('file', $epelkey_hash, $_gpgkey_defaults)
create_resources('yumrepo', $epel_hash, $_repo_defaults)
}
}
validate_yum_hash($repo_hash)
create_resources('yumrepo', $repo_hash, $_repo_defaults)
create_resources('file', $gpgkey_hash, $_gpgkey_defaults)
if ((versioncmp($::puppetversion, '3.5') > 0) and $purge_unmanaged) {
resources { 'yumrepo': purge => true }
}
if $package_require {
Yumrepo<||> -> Package<||>
}
exec { 'yum_refresh':
command => '/usr/bin/yum clean all',
refreshonly => true,
} -> Package <||>
}

+ 132
- 0
spec/classes/openstack_extras_repo_debian_debian_spec.rb View File

@ -0,0 +1,132 @@
require 'spec_helper'
describe 'openstack_extras::repo::debian::debian' do
let :class_params do
{
:manage_whz => true,
:source_hash => {},
:source_defaults => {},
:package_require => false
}
end
let :paramclass_defaults do
{
:release => 'icehouse'
}
end
let :default_params do
class_params.merge!(paramclass_defaults)
end
context 'on Debian platforms' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Debian',
:lsbdistid => 'Debian'
}
end
describe 'with default parameters' do
let :params do
{}.merge!(default_params)
end
it { should contain_apt__source('debian_wheezy').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'icehouse',
:repos => 'main',
:required_packages => 'gplhost-archive-keyring'
)}
it { should contain_apt__source('debian_wheezy_backports').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'icehouse-backports',
:repos => 'main'
)}
end
describe 'with overridden release' do
let :params do
default_params.merge!({ :release => 'juno' })
end
it { should contain_apt__source('debian_wheezy').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'juno',
:repos => 'main',
:required_packages => 'gplhost-archive-keyring'
)}
it { should contain_apt__source('debian_wheezy_backports').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'juno-backports',
:repos => 'main'
)}
end
describe 'with overridden source hash' do
let :params do
default_params.merge!({ :source_hash => {
'debian_unstable' => {
'location' => 'http://mymirror/debian/',
'repos' => 'main',
'release' => 'unstable'
},
'puppetlabs' => {
'location' => 'http://apt.puppetlabs.com',
'repos' => 'main',
'release' => 'wheezy',
'key' => '4BD6EC30',
'key_server' => 'pgp.mit.edu'
}
}
})
end
it { should contain_apt__source('debian_unstable').with(
:location => 'http://mymirror/debian/',
:release => 'unstable',
:repos => 'main'
)}
it { should contain_apt__source('puppetlabs').with(
:location => 'http://apt.puppetlabs.com',
:repos => 'main',
:release => 'wheezy',
:key => '4BD6EC30',
:key_server => 'pgp.mit.edu'
)}
end
describe 'with overridden source default' do
let :params do
default_params.merge!({ :source_defaults => {
'include_src' => 'true'
}
})
end
it { should contain_apt__source('debian_wheezy').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'icehouse',
:repos => 'main',
:required_packages => 'gplhost-archive-keyring',
:include_src => 'true'
)}
it { should contain_apt__source('debian_wheezy_backports').with(
:location => 'http://archive.gplhost.com/debian',
:release => 'icehouse-backports',
:repos => 'main',
:include_src => 'true'
)}
end
end
end

+ 114
- 0
spec/classes/openstack_extras_repo_debian_ubuntu_spec.rb View File

@ -0,0 +1,114 @@
require 'spec_helper'
describe 'openstack_extras::repo::debian::ubuntu' do
let :class_params do
{
:manage_uca => true,
:source_hash => {},
:source_defaults => {},
:package_require => false
}
end
let :paramclass_defaults do
{
:release => 'icehouse'
}
end
let :default_params do
class_params.merge!(paramclass_defaults)
end
context 'on Debian platforms' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Ubuntu',
:lsbdistid => 'Ubuntu',
:lsbdistcodename => 'trusty'
}
end
describe 'with default parameters' do
let :params do
{}.merge!(default_params)
end
it { should contain_apt__source('ubuntu-cloud-archive').with(
:location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu',
:release => 'trusty-updates/icehouse',
:repos => 'main',
:required_packages => 'ubuntu-cloud-keyring'
)}
end
describe 'with overridden release' do
let :params do
default_params.merge!({ :release => 'juno' })
end
it { should contain_apt__source('ubuntu-cloud-archive').with(
:location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu',
:release => 'trusty-updates/juno',
:repos => 'main',
:required_packages => 'ubuntu-cloud-keyring'
)}
end
describe 'with overridden source hash' do
let :params do
default_params.merge!({ :source_hash => {
'local_mirror' => {
'location' => 'http://mymirror/ubuntu/',
'repos' => 'main',
'release' => 'trusty'
},
'puppetlabs' => {
'location' => 'http://apt.puppetlabs.com',
'repos' => 'main',
'release' => 'trusty',
'key' => '4BD6EC30',
'key_server' => 'pgp.mit.edu'
}
}
})
end
it { should contain_apt__source('local_mirror').with(
:location => 'http://mymirror/ubuntu/',
:release => 'trusty',
:repos => 'main'
)}
it { should contain_apt__source('puppetlabs').with(
:location => 'http://apt.puppetlabs.com',
:release => 'trusty',
:repos => 'main',
:key => '4BD6EC30',
:key_server => 'pgp.mit.edu'
)}
end
describe 'with overridden source default' do
let :params do
default_params.merge!({ :source_defaults => {
'include_src' => 'true'
}
})
end
it { should contain_apt__source('ubuntu-cloud-archive').with(
:include_src => 'true',
:location => 'http://ubuntu-cloud.archive.canonical.com/ubuntu',
:release => 'trusty-updates/icehouse',
:repos => 'main',
:required_packages => 'ubuntu-cloud-keyring'
)}
end
end
end

+ 187
- 0
spec/classes/openstack_extras_repo_redhat_redhat_spec.rb View File

@ -0,0 +1,187 @@
require 'spec_helper'
describe 'openstack_extras::repo::redhat::redhat' do
let :class_params do
{
:manage_rdo => true,
:manage_epel => true,
:repo_hash => {},
:gpgkey_hash => {},
:purge_unmanaged => false,
:package_require => false
}
end
let :paramclass_defaults do
{
:release => 'icehouse',
:repo_defaults => { 'enabled' => '1',
'gpgcheck' => '1',
'notify' => "Exec[yum_refresh]",
'mirrorlist' => 'absent',
'require' => "Anchor[openstack_extras_redhat]"
},
:gpgkey_defaults => { 'owner' => 'root',
'group' => 'root',
'mode' => '0644',
'before' => "Anchor[openstack_extras_redhat]"
}
}
end
let :default_params do
class_params.merge!(paramclass_defaults)
end
context 'on RedHat platforms' do
let :facts do
{
:osfamily => 'RedHat',
:operatingsystem => 'RedHat',
:operatingsystemrelease => '6.5',
:operatingsystemmajrelease => '6'
}
end
describe 'with default parameters' do
let :params do
{}.merge!(default_params)
end
it { should contain_yumrepo('rdo-release').with(
:baseurl => "http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/",
:descr => "OpenStack Icehouse Repository",
:priority => 98,
:gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse",
:enabled => '1',
:gpgcheck => '1',
:mirrorlist => 'absent',
:require => "Anchor[openstack_extras_redhat]",
:notify => "Exec[yum_refresh]"
)}
it { should contain_yumrepo('epel').with(
:baseurl => 'https://download.fedoraproject.org/pub/epel/6/$basearch',
:descr => 'Extra Packages for Enterprise Linux 6 - $basearch',
:gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6",
:failovermethod => 'priority',
:enabled => '1',
:gpgcheck => '1',
:mirrorlist => 'absent',
:require => "Anchor[openstack_extras_redhat]",
:notify => "Exec[yum_refresh]"
)}
it { should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse').with(
:source => "puppet:///modules/openstack_extras/RPM-GPG-KEY-RDO-Icehouse",
:owner => 'root',
:group => 'root',
:mode => '0644',
:before => "Anchor[openstack_extras_redhat]"
)}
end
describe 'with overridden release' do
let :params do
default_params.merge!({ :release => 'juno' })
end
it { should contain_yumrepo('rdo-release').with(
:baseurl => "http://repos.fedorapeople.org/repos/openstack/openstack-juno/epel-6/",
:descr => "OpenStack Juno Repository",
:gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Juno"
)}
it { should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Juno').with(
:source => "puppet:///modules/openstack_extras/RPM-GPG-KEY-RDO-Juno"
)}
end
describe 'with overridden repo hash' do
let :params do
default_params.merge!({ :repo_hash => {
'CentOS-Base' => {
'baseurl' => 'http://mymirror/$releasever/os/$basearch/',
'descr' => 'CentOS-$releasever - Base',
'gpgkey' => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6'
},
'CentOS-Updates' => {
'baseurl' => 'http://mymirror/$releasever/updates/$basearch/',
'descr' => 'CentOS-$releasever - Updates',
'gpgkey' => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6',
}
}
})
end
it { should contain_yumrepo('CentOS-Base').with(
:baseurl => "http://mymirror/$releasever/os/$basearch/",
:descr => "CentOS-$releasever - Base",
:enabled => '1',
:gpgcheck => '1',
:gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6',
:mirrorlist => 'absent',
:require => "Anchor[openstack_extras_redhat]",
:notify => "Exec[yum_refresh]"
)}
it { should contain_yumrepo('CentOS-Updates').with(
:baseurl => "http://mymirror/$releasever/updates/$basearch/",
:descr => "CentOS-$releasever - Updates",
:enabled => '1',
:gpgcheck => '1',
:gpgkey => 'file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6',
:mirrorlist => 'absent',
:require => "Anchor[openstack_extras_redhat]",
:notify => "Exec[yum_refresh]"
)}
end
describe 'with overridden repo default' do
let :params do
default_params.merge!({ :repo_defaults => {
'proxy' => 'http://my.proxy.com:8000'
}
})
end
it { should contain_yumrepo('rdo-release').with(
:baseurl => "http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/",
:descr => "OpenStack Icehouse Repository",
:gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse",
:proxy => "http://my.proxy.com:8000"
)}
end
describe 'with overridden gpgkey default' do
let :params do
default_params.merge!({ :gpgkey_defaults => {
'owner' => 'steve'
}
})
end
it { should contain_file('/etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse').with(
:owner => "steve"
)}
end
describe 'with epel management disabled' do
let :params do
default_params.merge!({ :manage_epel => false })
end
it { should_not contain_yumrepo('epel') }
end
describe 'with rdo management disabled' do
let :params do
default_params.merge!({ :manage_rdo => false })
end
it { should_not contain_yumrepo('rdo-release') }
end
end
end

Loading…
Cancel
Save