18 Commits

Author SHA1 Message Date
9115033d04 [blacksmith] Bump version to 0.2.0 2016-10-13 22:18:18 +01:00
cabc5c19ce Update changelog for 0.2.0 release 2016-10-13 22:17:13 +01:00
7dca7dad51 Update README with information about bundled facts 2016-10-13 22:14:32 +01:00
53bbad2eb1 Fix entropy providers use of equo with locale
Previous attempt didn't work properly. This version uses the proper
`provider.has_command` api to specify the env vars which should be used.

Also catches the exit 1 thrown when `equo match --installed` doesn't
find anything, now that the wrapper script is no longer hiding the exit
code behind an explicit `exit 0`.
2016-10-13 22:08:04 +01:00
80644b6813 Update changelog 2016-10-13 18:56:38 +01:00
4020627a15 Remove obsolete has_entropy fact 2016-10-13 18:55:24 +01:00
a265caa979 Update entropy package provider to use locale without shelling out 2016-10-13 18:55:07 +01:00
7ce45a207f Add a locale fact which uses eselect locale to retrieve system default 2016-10-13 18:54:28 +01:00
6d9b130f9d Update changelog version to 0.1.2, workaround blacksmith problem 2016-10-13 17:07:04 +01:00
f2565cccc1 [blacksmith] Bump version to 0.1.3 2016-10-13 17:05:36 +01:00
f4bdac2266 [blacksmith] Bump version to 0.1.2 2016-10-13 17:04:51 +01:00
f90c0fb9ef Update changelog for release 0.1.1 2016-10-13 17:04:28 +01:00
5e5d056025 Remove required attribute validation
Previously, the entropy types would require that either package, tag, or repo
were provided, since that makes sense for the entropy files. Having a resource
that could not provide any of these would leave a malformed entry in the files.

I've had to remove that due to a deficiency in Puppet that's taken a long time
to track down. While the validation works fine for resources specified in
manifests, it breaks when parsing the records back in. Here's why:

- The provider instances method is called to retrieve a list of all entries
  in the entropy files. This correctly parses the name and properties into the
  provider instance object
- Puppet's type.rb enumerates through each of these, and tries to create a new
  Type insance using just the name and provider parameters from the provider
  instance. It then intends to iterate through the properties and add them one
  at a time.
  0c2157974a/lib/puppet/type.rb (L1180)
- The problem is that the top-level validation function is called when the
  object is first created, and at this time, none of the properties have been
  set, so the required properties have not been set and validation fails.

The top-level validation block cannot mandate a property be set, only other
types of condition.
2016-10-13 16:52:29 +01:00
0e774c77d5 Improve category/package regex, validation and add spec tests 2016-10-13 16:51:22 +01:00
f45895e8dd [blacksmith] Bump version to 0.1.1 2016-10-13 01:06:01 +01:00
fa20f3aead Release 0.1.0 2016-10-13 01:03:33 +01:00
76ffa4937b Add .pmtignore to exclude vendor directory from puppet module 2016-10-13 01:03:26 +01:00
24b4a82949 Update changelog for 0.1.0 2016-10-13 00:49:43 +01:00
20 changed files with 126 additions and 87 deletions

1
.pmtignore Normal file
View File

@@ -0,0 +1 @@
vendor/

View File

@@ -1,9 +1,23 @@
## Unreleased
## 2016-10-13 Release 0.2.0
- Add `locale` fact
- Remove obsolete `has_entropy` fact
- Improve `entropy` package provider to set locale envvar directly
and not shell out to a distributed script to set locale.
## 2016-10-13 Release 0.1.2
- Improved package regexes for valdiation and parsing
(now following the Gentoo EAPI6 PMS document to ensure correctness)
- Removed validation for required parameters in `entropy_*` types
## 2016-10-13 Release 0.1.0
- Added support for additional types:
- `entropy_splitdebug`
- `entropy_splitdebug_mask`
- `entropy_keywords`
- Added spec tests for most types and providers
## 2016-10-10 Release 0.0.2

View File

@@ -243,6 +243,19 @@ For more info on package keywords, see https://wiki.gentoo.org/wiki/KEYWORDS
* `entropy_splitdebug` Manages entropy package debug information
* `entropy_splitdebug_mask` Manages entropy package debug information masks
### Facts
#### `locale`
Identifies the system-wide default locale, as set by `eselect`.
This is used internally by the entropy package provider to run `equo` commands
using the correct locale.
#### `operatingsystem`
Overrides the detection of the operating system on Sabayon systems to `Sabayon`.
## Limitations
This module is actively used by the developer against current Sabayon versions.

View File

@@ -1,7 +0,0 @@
Facter.add(:has_entropy) do
confine :kernel => :linux
setcode do
FileTest.exists?("/usr/bin/equo")
end
end

7
lib/facter/locale.rb Normal file
View File

@@ -0,0 +1,7 @@
Facter.add(:locale) do
confine :osfamily => :gentoo
setcode do
Facter::Core::Execution.exec('eselect --colour=no --brief locale show').strip
end
end

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_keywords).provide(:parsed,
:match => /^\s*#/
text_line :unmanaged,
:match => %r{^(\S+)\s+([<>]?=)?(?:([a-zA-Z+\/-]+)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?)?(?:\s*repo=([a-zA-Z0-9\._-]+))?\s*$}
:match => %r{^(\S+)\s+([<>]?=)?(?:((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?)?(?:\s*repo=([a-zA-Z0-9\._-]+))?\s*$}
record_line :parsed,
:fields => %w{keyword operator package version repo name},
:match => %r{^(\S+)\s+([<>]?=)?(?:([a-zA-Z+\/-]+)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?)?(?:\s*repo=([a-zA-Z0-9\._-]+))?\s+## Puppet Name: (.*)\s*$},
:match => %r{^(\S+)\s+([<>]?=)?(?:((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?)?(?:\s*repo=([a-zA-Z0-9\._-]+))?\s+## Puppet Name: (.*)\s*$},
:to_line => proc { |record|
line = record[:keyword] + " "
line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_mask).provide(:parsed,
:match => /^\s*#/
text_line :unmanaged,
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s*$}
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s*$}
record_line :parsed,
:fields => %w{operator package version slot use tag repo name},
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:to_line => proc { |record|
line = ""
line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_splitdebug).provide(:parsed,
:match => /^\s*#/
text_line :unmanaged,
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9\._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s*$}
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9\._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s*$}
record_line :parsed,
:fields => %w{operator package version slot use tag repo name},
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9\._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9\._-]+))?(?:::([a-zA-Z0-9\._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:to_line => proc { |record|
line = ""
line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_splitdebug_mask).provide(:parsed,
:match => /^\s*#/
text_line :unmanaged,
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s*$}
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9\._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s*$}
record_line :parsed,
:fields => %w{operator package version slot use tag repo name},
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:to_line => proc { |record|
line = ""
line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_unmask).provide(:parsed,
:match => /^\s*#/
text_line :unmanaged,
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s*$}
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s*$}
record_line :parsed,
:fields => %w{operator package version slot use tag repo name},
:match => %r{^([<>]?=)?([a-zA-Z+\/-]*)(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:match => %r{^([<>]?=)?((?:[A-Za-z0-9+_.-]+/)?[a-zA-Z0-9+_-]+)?(?:-(\d+(?:\.\d+)*[a-z]*(?:_(?:alpha|beta|pre|p|rc)\d*)?(?:-r\d+)?))?(?::([a-zA-Z0-9._-]+))?(?:\[([^\]]*)\])?(?:#([a-zA-Z0-9._-]+))?(?:::([a-zA-Z0-9._-]+))?\s+#+ Puppet Name: (.*)\s*$},
:to_line => proc { |record|
line = ""
line += record[:operator] if record[:operator]

View File

@@ -1,7 +1,7 @@
require 'puppet/provider/package'
require 'fileutils'
Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Package do
Puppet::Type.type(:package).provide(:entropy, :parent => Puppet::Provider::Package) do
desc "Provides packaging support for Sabayon's entropy system."
has_feature :versionable
@@ -9,18 +9,27 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
has_feature :uninstallable
has_feature :upgradeable
commands :equo => "#{File.dirname(__FILE__)}/entropy/equo_locale"
has_command(:equo, "equo") do
locale = Facter.value(:locale)
environment({
:LANG => locale,
:LC_ALL => locale,
:LANGUAHE => locale,
})
end
confine :has_entropy => true
# Require the locale fact exist
confine :false => Facter.value(:locale).nil?
confine :osfamily => :Gentoo
defaultfor :has_entropy => :true, :osfamily => :Gentoo
defaultfor :operatingsystem => :Sabayon
def self.instances
result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_?(?:a(?:lpha)?|b(?:eta)?|pre|rc|p)\d*)?(?:-r\d+)?)(?:#(\S+))?$/
result_fields = [:category, :name, :ensure]
result_fields = [:category, :name, :ensure]
begin
search_output = equo "query", "list", "installed", "--quiet", "--verbose"
search_output = equo("query", "list", "installed", "--quiet", "--verbose").chomp
packages = []
search_output.each_line do |search_result|
@@ -32,6 +41,7 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
package[field] = value unless !value or value.empty?
end
package[:provider] = :entropy
packages << new(package)
end
end
@@ -70,13 +80,12 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
end
def query
result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_(?:alpha|beta|pre|rc|p)\d+)?(?:-r\d+)?)(?:#(\S+))?$/
result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_(?:alpha|beta|pre|rc|p)\d+)?(?:-r\d+)?)(?::[^#]+)?(?:#(\S+))?$/
result_fields = [:category, :name, :version_available]
begin
# Look for an installed package from a known repository
search_output = equo "match", "--quiet", "--verbose", package_name
search_output.chomp
search_output = equo("match", "--quiet", "--verbose", package_name).chomp
search_match = search_output.match(result_format)
if search_match
@@ -85,14 +94,18 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
package[field] = value unless !value or value.empty?
end
installed_output = equo 'match', '--quiet', '--verbose', '--installed', package_name
installed_output.chomp
installed_match = installed_output.match(result_format)
if installed_match
installed_match_fields = Hash[result_fields.zip(installed_match.captures)]
package[:ensure] = installed_match_fields[:version_available]
else
begin
installed_output = equo('match', '--quiet', '--verbose', '--installed', package_name).chomp
installed_match = installed_output.match(result_format)
if installed_match
installed_match_fields = Hash[result_fields.zip(installed_match.captures)]
package[:ensure] = installed_match_fields[:version_available]
else
package[:ensure] = :absent
end
rescue Puppet::ExecutionFailure
package[:ensure] = :absent
end
@@ -101,8 +114,7 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
else
# List all installed packages and try and find if it's installed from outside a repository
# If so, assume the installed version is the latest available
all_installed = equo "query", "list", "installed", "--quiet", "--verbose"
all_installed.chomp
all_installed = equo("query", "list", "installed", "--quiet", "--verbose").chomp
all_installed.split("\n").each do |installed_package|

View File

@@ -1,6 +0,0 @@
#!/bin/bash
source /etc/profile
/usr/bin/equo $@
exit 0

View File

@@ -26,14 +26,12 @@ Puppet::Type.newtype(:entropy_keywords) do
newproperty(:package) do
desc "Name of the package being keyworded"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end
newproperty(:version) do
desc "Version of the package"
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end
newproperty(:repo) do
@@ -53,8 +51,6 @@ Puppet::Type.newtype(:entropy_keywords) do
end
validate do
raise(ArgumentError, "At least one of package or repo is required") if self[:package].nil? && self[:repo].nil?
raise(ArgumentError, "Package is required when a version is specified") if self[:package].nil? && !self[:version].nil?
raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil?

View File

@@ -13,14 +13,12 @@ Puppet::Type.newtype(:entropy_mask) do
newproperty(:package) do
desc "Name of the package being masked"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end
newproperty(:version) do
desc "Version of the package"
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end
newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_mask) do
end
validate do
raise(ArgumentError, "At least one of package, tag or repo is required") if self[:package].nil? && self[:tag].nil? && self[:repo].nil?
raise(ArgumentError, "Package is required when a version is specified") if self[:package].nil? && !self[:version].nil?
raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil?

View File

@@ -13,14 +13,12 @@ Puppet::Type.newtype(:entropy_splitdebug) do
newproperty(:package) do
desc "Name of the package with splitdebug"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end
newproperty(:version) do
desc "Version of the package"
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end
newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_splitdebug) do
end
validate do
raise(ArgumentError, "At least one of package, tag or repo is required") if self[:package].nil? && self[:tag].nil? && self[:repo].nil?
raise(ArgumentError, "Package is required when a version is specified") if self[:package].nil? && !self[:version].nil?
raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil?

View File

@@ -13,14 +13,12 @@ Puppet::Type.newtype(:entropy_splitdebug_mask) do
newproperty(:package) do
desc "Name of the package with splitdebug mask"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end
newproperty(:version) do
desc "Version of the package"
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end
newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_splitdebug_mask) do
end
validate do
raise(ArgumentError, "At least one of package, tag or repo is required") if self[:package].nil? && self[:tag].nil? && self[:repo].nil?
raise(ArgumentError, "Package is required when a version is specified") if self[:package].nil? && !self[:version].nil?
raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil?

View File

@@ -13,14 +13,12 @@ Puppet::Type.newtype(:entropy_unmask) do
newproperty(:package) do
desc "Name of the package being masked"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end
newproperty(:version) do
desc "Version of the package"
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end
newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_unmask) do
end
validate do
raise(ArgumentError, "At least one of package, tag or repo is required") if self[:package].nil? && self[:tag].nil? && self[:repo].nil?
raise(ArgumentError, "Package is required when a version is specified") if self[:package].nil? && !self[:version].nil?
raise(ArgumentError, "Version is required when an operator is specified") if self[:version].nil? && !self[:operator].nil?

View File

@@ -1,20 +1,27 @@
{
"name": "optiz0r-sabayon",
"version": "0.0.2",
"version": "0.2.0",
"author": "Ben Roberts",
"license": "MIT",
"summary": "Extends Puppet with support for the Sabayon Linux distribution",
"source": "https://github.com/Sabayon/puppet-sabayon.git",
"project_page": "https://github.com/Sabayon/puppet-sabayon",
"issues_url": "https://github.com/Sabayon/puppet-sabayon/issues",
"tags": ["sabayon", "entropy"],
"tags": [
"sabayon",
"entropy"
],
"operatingsystem_support": [
{
"operatingsystem":"Sabayon",
"operatingsystemrelease":[ "16.07", "16.11" ]
"operatingsystem": "Sabayon",
"operatingsystemrelease": [
"16.07",
"16.11"
]
}
],
],
"dependencies": [
],
"data_provider": "hiera"
}

View File

@@ -40,12 +40,6 @@ describe Puppet::Type.type(:entropy_keywords) do
end
describe "when validating required properties" do
it "should raise an error when no required attributes are passed" do
expect {
described_class.new(:name => "test")
}.to raise_error(Puppet::Error, /At least one of (.*) is required/)
end
it "should raise an error when a version is passed with no package" do
expect {
described_class.new(:name => "test", :repo => "test", :version => "1.2.3")

View File

@@ -54,10 +54,34 @@ types.each do |type_name, type|
end
describe "when validating required properties" do
it "should raise an error when no required attributes are passed" do
expect {
described_class.new(:name => "test")
}.to raise_error(Puppet::Error, /At least one of (.*) is required/)
packages = [
'virtual/package',
'package',
'package-with-dash',
'package_with_underscores',
'category-123/package2',
'category.with.dots/package'
]
packages.each do |package|
it "should accept valid package name #{package}" do
expect {
described_class.new(:name => 'test', :package => package)
}.not_to raise_error
end
end
packages = [
'two/category/package',
'invalid-package-1.2',
'/no-category-package',
'no-package-category/',
]
packages.each do |package|
it "should reject invalid package name #{package}" do
expect {
described_class.new(:name => 'test', :package => package)
}.to raise_error(Puppet::Error)
end
end
it "should raise an error when a version is passed with no package" do