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: - Added support for additional types:
- `entropy_splitdebug` - `entropy_splitdebug`
- `entropy_splitdebug_mask` - `entropy_splitdebug_mask`
- `entropy_keywords` - `entropy_keywords`
- Added spec tests for most types and providers
## 2016-10-10 Release 0.0.2 ## 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` Manages entropy package debug information
* `entropy_splitdebug_mask` Manages entropy package debug information masks * `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 ## Limitations
This module is actively used by the developer against current Sabayon versions. 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*#/ :match => /^\s*#/
text_line :unmanaged, 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, record_line :parsed,
:fields => %w{keyword operator package version repo name}, :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| :to_line => proc { |record|
line = record[:keyword] + " " line = record[:keyword] + " "
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_mask).provide(:parsed,
:match => /^\s*#/ :match => /^\s*#/
text_line :unmanaged, 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, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, :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| :to_line => proc { |record|
line = "" line = ""
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_splitdebug).provide(:parsed,
:match => /^\s*#/ :match => /^\s*#/
text_line :unmanaged, 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, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, :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| :to_line => proc { |record|
line = "" line = ""
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_splitdebug_mask).provide(:parsed,
:match => /^\s*#/ :match => /^\s*#/
text_line :unmanaged, 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, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, :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| :to_line => proc { |record|
line = "" line = ""
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]

View File

@@ -18,11 +18,11 @@ Puppet::Type.type(:entropy_unmask).provide(:parsed,
:match => /^\s*#/ :match => /^\s*#/
text_line :unmanaged, 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, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, :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| :to_line => proc { |record|
line = "" line = ""
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]

View File

@@ -1,7 +1,7 @@
require 'puppet/provider/package' require 'puppet/provider/package'
require 'fileutils' 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." desc "Provides packaging support for Sabayon's entropy system."
has_feature :versionable has_feature :versionable
@@ -9,18 +9,27 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
has_feature :uninstallable has_feature :uninstallable
has_feature :upgradeable 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 def self.instances
result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_?(?:a(?:lpha)?|b(?:eta)?|pre|rc|p)\d*)?(?:-r\d+)?)(?:#(\S+))?$/ 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 begin
search_output = equo "query", "list", "installed", "--quiet", "--verbose" search_output = equo("query", "list", "installed", "--quiet", "--verbose").chomp
packages = [] packages = []
search_output.each_line do |search_result| 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? package[field] = value unless !value or value.empty?
end end
package[:provider] = :entropy package[:provider] = :entropy
packages << new(package) packages << new(package)
end end
end end
@@ -70,13 +80,12 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
end end
def query 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] result_fields = [:category, :name, :version_available]
begin begin
# Look for an installed package from a known repository # Look for an installed package from a known repository
search_output = equo "match", "--quiet", "--verbose", package_name search_output = equo("match", "--quiet", "--verbose", package_name).chomp
search_output.chomp
search_match = search_output.match(result_format) search_match = search_output.match(result_format)
if search_match if search_match
@@ -85,8 +94,9 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
package[field] = value unless !value or value.empty? package[field] = value unless !value or value.empty?
end end
installed_output = equo 'match', '--quiet', '--verbose', '--installed', package_name
installed_output.chomp begin
installed_output = equo('match', '--quiet', '--verbose', '--installed', package_name).chomp
installed_match = installed_output.match(result_format) installed_match = installed_output.match(result_format)
if installed_match if installed_match
@@ -95,14 +105,16 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
else else
package[:ensure] = :absent package[:ensure] = :absent
end end
rescue Puppet::ExecutionFailure
package[:ensure] = :absent
end
return package return package
else else
# List all installed packages and try and find if it's installed from outside a repository # 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 # If so, assume the installed version is the latest available
all_installed = equo "query", "list", "installed", "--quiet", "--verbose" all_installed = equo("query", "list", "installed", "--quiet", "--verbose").chomp
all_installed.chomp
all_installed.split("\n").each do |installed_package| 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 newproperty(:package) do
desc "Name of the package being keyworded" desc "Name of the package being keyworded"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end end
newproperty(:version) do newproperty(:version) do
desc "Version of the package" desc "Version of the package"
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
end end
newproperty(:repo) do newproperty(:repo) do
@@ -53,8 +51,6 @@ Puppet::Type.newtype(:entropy_keywords) do
end end
validate do 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, "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? 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 newproperty(:package) do
desc "Name of the package being masked" desc "Name of the package being masked"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end end
newproperty(:version) do newproperty(:version) do
desc "Version of the package" desc "Version of the package"
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
end end
newproperty(:slot) do newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_mask) do
end end
validate do 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, "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? 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 newproperty(:package) do
desc "Name of the package with splitdebug" desc "Name of the package with splitdebug"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end end
newproperty(:version) do newproperty(:version) do
desc "Version of the package" desc "Version of the package"
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
end end
newproperty(:slot) do newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_splitdebug) do
end end
validate do 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, "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? 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 newproperty(:package) do
desc "Name of the package with splitdebug mask" desc "Name of the package with splitdebug mask"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end end
newproperty(:version) do newproperty(:version) do
desc "Version of the package" desc "Version of the package"
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
end end
newproperty(:slot) do newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_splitdebug_mask) do
end end
validate do 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, "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? 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 newproperty(:package) do
desc "Name of the package being masked" desc "Name of the package being masked"
newvalues(%r{^(?:[A-Za-z0-9+_.-]+\/)?[a-zA-Z0-9+_-]+$})
end end
newproperty(:version) do newproperty(:version) do
desc "Version of the package" desc "Version of the package"
newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
validate do |value|
raise(ArgumentError, "") if value !~ /^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$/
end
end end
newproperty(:slot) do newproperty(:slot) do
@@ -52,8 +50,6 @@ Puppet::Type.newtype(:entropy_unmask) do
end end
validate do 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, "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? 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", "name": "optiz0r-sabayon",
"version": "0.0.2", "version": "0.2.0",
"author": "Ben Roberts", "author": "Ben Roberts",
"license": "MIT", "license": "MIT",
"summary": "Extends Puppet with support for the Sabayon Linux distribution", "summary": "Extends Puppet with support for the Sabayon Linux distribution",
"source": "https://github.com/Sabayon/puppet-sabayon.git", "source": "https://github.com/Sabayon/puppet-sabayon.git",
"project_page": "https://github.com/Sabayon/puppet-sabayon", "project_page": "https://github.com/Sabayon/puppet-sabayon",
"issues_url": "https://github.com/Sabayon/puppet-sabayon/issues", "issues_url": "https://github.com/Sabayon/puppet-sabayon/issues",
"tags": ["sabayon", "entropy"], "tags": [
"sabayon",
"entropy"
],
"operatingsystem_support": [ "operatingsystem_support": [
{ {
"operatingsystem": "Sabayon", "operatingsystem": "Sabayon",
"operatingsystemrelease":[ "16.07", "16.11" ] "operatingsystemrelease": [
"16.07",
"16.11"
]
} }
], ],
"dependencies": [ "dependencies": [
], ],
"data_provider": "hiera" "data_provider": "hiera"
} }

View File

@@ -40,12 +40,6 @@ describe Puppet::Type.type(:entropy_keywords) do
end end
describe "when validating required properties" do 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 it "should raise an error when a version is passed with no package" do
expect { expect {
described_class.new(:name => "test", :repo => "test", :version => "1.2.3") described_class.new(:name => "test", :repo => "test", :version => "1.2.3")

View File

@@ -54,10 +54,34 @@ types.each do |type_name, type|
end end
describe "when validating required properties" do describe "when validating required properties" do
it "should raise an error when no required attributes are passed" do 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 { expect {
described_class.new(:name => "test") described_class.new(:name => 'test', :package => package)
}.to raise_error(Puppet::Error, /At least one of (.*) is required/) }.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 end
it "should raise an error when a version is passed with no package" do it "should raise an error when a version is passed with no package" do