41 Commits

Author SHA1 Message Date
9e682084c8 Bump version to 0.6.0 2019-05-10 22:51:59 +01:00
7004a193c9 Add circle.yaml to pdkignore 2019-05-10 22:48:02 +01:00
21b5dc85e1 Update changelog for switch to PDK 2019-05-10 22:44:48 +01:00
cef80e551b Fix test errors and deprecations 2019-05-10 22:36:04 +01:00
4a3dcd0a8a Rubocop fixes 2019-05-10 22:17:45 +01:00
d1c83026bd Update for tests 2019-05-10 20:06:41 +01:00
186695438a Update for tests 2019-05-10 20:05:16 +01:00
6a5ec21a1e Fixup tests 2019-05-09 23:44:49 +01:00
939f795d37 Autocorrect PDK validation warnings 2019-05-09 23:41:09 +01:00
998f1716f3 Switch to PDK module layout 2019-05-09 23:39:55 +01:00
0291282ee2 Add cleanup task 2019-05-08 22:10:09 +01:00
f95631312f update changelog and bump version to 0.5.0 2018-10-14 12:13:48 +01:00
659e3af412 Update rubocopy gem for security issue, and blacksmith for release 2018-10-14 12:09:18 +01:00
882df7423d Handle packages with pre_pre version strings 2018-10-14 11:54:13 +01:00
c830b8ebd0 Add missing ends 2018-10-14 11:38:29 +01:00
1c7804128c Pass on only the exception message for puppet 6 compatibility 2018-10-14 11:34:51 +01:00
e5718d058e [blacksmith] Bump version to 0.4.1 2017-03-13 21:14:51 +00:00
dc3a3a9337 Release 0.4.0 2017-03-13 21:14:16 +00:00
e4df1583df Add executable bits on sabayon.sh operatingsytem fact 2017-03-13 21:00:12 +00:00
Alexander "Ace" Olofsson
0bc87f0cbf Replace custom fact with executable fact
Should solve #4
2017-03-12 23:46:36 +01:00
c87ceb824b Add CircleCI badge 2016-11-12 18:44:20 +00:00
Ben Roberts
55da9601b0 Merge pull request #3 from ace13/patch-1
Update operatingsystem.rb
2016-11-01 21:39:40 +00:00
Alexander "Ace" Olofsson
c46c360eb0 Update operatingsystem.rb
Use additional confines instead of checks in setcode to detect the distribution ID
2016-10-31 09:31:41 +01:00
9d89654211 Document requirement for lsb-release 2016-10-24 15:19:57 +01:00
d8b9a1b4a5 Add circle.yml to run automated tests on github push 2016-10-19 21:35:30 +01:00
9f8cc61cf1 [blacksmith] Bump version to 0.3.1 2016-10-16 13:44:51 +01:00
e962f31411 Release 0.3.0 2016-10-16 13:43:39 +01:00
97c1cc97e6 Add entropy_repos fact 2016-10-16 13:42:47 +01:00
bd1fd54bbb Handle unexpected boolean type conversion 2016-10-16 13:35:09 +01:00
3a4c1c85ad Add entropy_repo type/provider, with tests and docs 2016-10-16 00:40:35 +01:00
0c3db36c4d [blacksmith] Bump version to 0.2.1 2016-10-13 22:19:22 +01:00
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
53 changed files with 1531 additions and 712 deletions

View File

@@ -1,3 +0,0 @@
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: true

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
*.rb eol=lf
*.erb eol=lf
*.pp eol=lf
*.sh eol=lf
*.epp eol=lf

29
.gitignore vendored
View File

@@ -1,2 +1,27 @@
# blacksmith output directory .git/
pkg .*.sw[op]
.metadata
.yardoc
.yardwarns
*.iml
/.bundle/
/.idea/
/.vagrant/
/coverage/
/bin/
/doc/
/Gemfile.local
/Gemfile.lock
/junit/
/log/
/pkg/
/spec/fixtures/manifests/
/spec/fixtures/modules/
/tmp/
/vendor/
/convert_report.txt
/update_report.txt
.DS_Store
.project
.envrc
/inventory.yaml

41
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,41 @@
---
stages:
- syntax
- unit
cache:
paths:
- vendor/bundle
before_script:
- bundle -v
- rm Gemfile.lock || true
- gem update --system $RUBYGEMS_VERSION
- gem --version
- bundle -v
- bundle install --without system_tests --path vendor/bundle --jobs $(nproc)
syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop-Ruby 2.5.3-Puppet ~> 6:
stage: syntax
image: ruby:2.5.3
script:
- bundle exec rake syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop
variables:
PUPPET_GEM_VERSION: '~> 6'
parallel_spec-Ruby 2.5.3-Puppet ~> 6:
stage: unit
image: ruby:2.5.3
script:
- bundle exec rake parallel_spec
variables:
PUPPET_GEM_VERSION: '~> 6'
parallel_spec-Ruby 2.4.5-Puppet ~> 5:
stage: unit
image: ruby:2.4.5
script:
- bundle exec rake parallel_spec
variables:
PUPPET_GEM_VERSION: '~> 5'

43
.pdkignore Normal file
View File

@@ -0,0 +1,43 @@
.git/
.*.sw[op]
.metadata
.yardoc
.yardwarns
*.iml
/.bundle/
/.idea/
/.vagrant/
/coverage/
/bin/
/doc/
/Gemfile.local
/Gemfile.lock
/junit/
/log/
/pkg/
/spec/fixtures/manifests/
/spec/fixtures/modules/
/tmp/
/vendor/
/convert_report.txt
/update_report.txt
.DS_Store
.project
.envrc
/inventory.yaml
/appveyor.yml
/.fixtures.yml
/Gemfile
/.gitattributes
/.gitignore
/.gitlab-ci.yml
/.pdkignore
/Rakefile
/rakelib/
/.rspec
/.rubocop.yml
/.travis.yml
/.yardopts
/spec/
/.vscode/
/circle.yml

1
.puppet-lint.rc Normal file
View File

@@ -0,0 +1 @@
--relative

2
.rspec Normal file
View File

@@ -0,0 +1,2 @@
--color
--format documentation

122
.rubocop.yml Normal file
View File

@@ -0,0 +1,122 @@
---
require: rubocop-rspec
AllCops:
DisplayCopNames: true
TargetRubyVersion: '2.1'
Include:
- "./**/*.rb"
Exclude:
- bin/*
- ".vendor/**/*"
- "**/Gemfile"
- "**/Rakefile"
- pkg/**/*
- spec/fixtures/**/*
- vendor/**/*
- "**/Puppetfile"
- "**/Vagrantfile"
- "**/Guardfile"
Metrics/LineLength:
Description: People have wide screens, use them.
Max: 200
GetText/DecorateString:
Description: We don't want to decorate test output.
Exclude:
- spec/*
RSpec/BeforeAfterAll:
Description: Beware of using after(:all) as it may cause state to leak between tests.
A necessary evil in acceptance testing.
Exclude:
- spec/acceptance/**/*.rb
RSpec/HookArgument:
Description: Prefer explicit :each argument, matching existing module's style
EnforcedStyle: each
Style/BlockDelimiters:
Description: Prefer braces for chaining. Mostly an aesthetical choice. Better to
be consistent then.
EnforcedStyle: braces_for_chaining
Style/ClassAndModuleChildren:
Description: Compact style reduces the required amount of indentation.
EnforcedStyle: compact
Style/EmptyElse:
Description: Enforce against empty else clauses, but allow `nil` for clarity.
EnforcedStyle: empty
Style/FormatString:
Description: Following the main puppet project's style, prefer the % format format.
EnforcedStyle: percent
Style/FormatStringToken:
Description: Following the main puppet project's style, prefer the simpler template
tokens over annotated ones.
EnforcedStyle: template
Style/Lambda:
Description: Prefer the keyword for easier discoverability.
EnforcedStyle: literal
Style/RegexpLiteral:
Description: Community preference. See https://github.com/voxpupuli/modulesync_config/issues/168
EnforcedStyle: percent_r
Style/TernaryParentheses:
Description: Checks for use of parentheses around ternary conditions. Enforce parentheses
on complex expressions for better readability, but seriously consider breaking
it up.
EnforcedStyle: require_parentheses_when_complex
Style/TrailingCommaInArguments:
Description: Prefer always trailing comma on multiline argument lists. This makes
diffs, and re-ordering nicer.
EnforcedStyleForMultiline: comma
Style/TrailingCommaInLiteral:
Description: Prefer always trailing comma on multiline literals. This makes diffs,
and re-ordering nicer.
EnforcedStyleForMultiline: comma
Style/SymbolArray:
Description: Using percent style obscures symbolic intent of array's contents.
EnforcedStyle: brackets
RSpec/MessageSpies:
EnforcedStyle: receive
Style/Documentation:
Exclude:
- lib/puppet/parser/functions/**/*
- spec/**/*
Style/WordArray:
EnforcedStyle: brackets
Style/CollectionMethods:
Enabled: true
Style/MethodCalledOnDoEndBlock:
Enabled: true
Style/StringMethods:
Enabled: true
Layout/EndOfLine:
Enabled: false
Layout/IndentHeredoc:
Enabled: false
Metrics/AbcSize:
Enabled: false
Metrics/BlockLength:
Enabled: false
Metrics/ClassLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/MethodLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
Metrics/ParameterLists:
Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
RSpec/DescribeClass:
Enabled: false
RSpec/ExampleLength:
Enabled: false
RSpec/MessageExpectation:
Enabled: false
RSpec/MultipleExpectations:
Enabled: false
RSpec/NestedGroups:
Enabled: false
Style/AsciiComments:
Enabled: false
Style/IfUnlessModifier:
Enabled: false
Style/SymbolProc:
Enabled: false

54
.travis.yml Normal file
View File

@@ -0,0 +1,54 @@
---
dist: trusty
language: ruby
cache: bundler
before_install:
- bundle -v
- rm -f Gemfile.lock
- gem update --system $RUBYGEMS_VERSION
- gem --version
- bundle -v
script:
- 'bundle exec rake $CHECK'
bundler_args: --without system_tests
rvm:
- 2.5.3
stages:
- static
- spec
- acceptance
-
if: tag =~ ^v\d
name: deploy
matrix:
fast_finish: true
include:
-
env: CHECK="check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint"
stage: static
-
env: PUPPET_GEM_VERSION="~> 5.0" CHECK=parallel_spec
rvm: 2.4.5
stage: spec
-
env: PUPPET_GEM_VERSION="~> 6.0" CHECK=parallel_spec
rvm: 2.5.3
stage: spec
-
env: DEPLOY_TO_FORGE=yes
stage: deploy
branches:
only:
- master
- /^v\d/
notifications:
email: false
deploy:
provider: puppetforge
user: puppet
password:
secure: ""
on:
tags: true
all_branches: true
condition: "$DEPLOY_TO_FORGE = yes"

1
.yardopts Normal file
View File

@@ -0,0 +1 @@
--markup markdown

View File

@@ -1,4 +1,34 @@
## 2016-10-13 Release 0.1.1 ## 2019-05-10 Release 0.6.0
- Adds `cleanup` task
- Convert module to using PDK
## 2018-10-14 Release 0.5.0
- Update package install error handling for compatbility with
puppet 6
- Add support for `pre_pre` package versions
- Update build-time gems
## 2017-03-13 Release 0.4.0
- Replace operatingsystem.rb native fact with executable fact to workaround
[https://tickets.puppetlabs.com/browse/FACT-1528](FACT-1528) (ace13)
## 2016-10-16 Release 0.3.0
- Add `entropy_repo` type to enable/disable repositories
- Add `entropy_repos` fact
## 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 - Improved package regexes for valdiation and parsing
(now following the Gentoo EAPI6 PMS document to ensure correctness) (now following the Gentoo EAPI6 PMS document to ensure correctness)

80
Gemfile
View File

@@ -1,19 +1,71 @@
source ENV['GEM_SOURCE'] || 'https://rubygems.org' source ENV['GEM_SOURCE'] || 'https://rubygems.org'
puppetversion = ENV.key?('PUPPET_VERSION') ? ENV['PUPPET_VERSION'] : ['>= 3.3'] def location_for(place_or_version, fake_version = nil)
gem 'metadata-json-lint' git_url_regex = %r{\A(?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
gem 'puppet', puppetversion file_url_regex = %r{\Afile:\/\/(?<path>.*)}
gem 'puppetlabs_spec_helper', '>= 1.0.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet'
gem 'puppet-blacksmith'
# rspec must be v2 for ruby 1.8.7 if place_or_version && (git_url = place_or_version.match(git_url_regex))
if RUBY_VERSION >= '1.8.7' && RUBY_VERSION < '1.9' [fake_version, { git: git_url[:url], branch: git_url[:branch], require: false }].compact
gem 'rspec', '~> 2.0' elsif place_or_version && (file_url = place_or_version.match(file_url_regex))
gem 'rake', '~> 10.0' ['>= 0', { path: File.expand_path(file_url[:path]), require: false }]
else else
# rubocop requires ruby >= 1.9 [place_or_version, { require: false }]
gem 'rubocop'
end end
end
ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
minor_version = ruby_version_segments[0..1].join('.')
group :development do
gem "fast_gettext", '1.1.0', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.1.0')
gem "fast_gettext", require: false if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.1.0')
gem "json_pure", '<= 2.0.1', require: false if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
gem "json", '= 1.8.1', require: false if Gem::Version.new(RUBY_VERSION.dup) == Gem::Version.new('2.1.9')
gem "json", '= 2.0.4', require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "puppet-module-posix-default-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-posix-dev-r#{minor_version}", require: false, platforms: [:ruby]
gem "puppet-module-win-default-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
gem "puppet-module-win-dev-r#{minor_version}", require: false, platforms: [:mswin, :mingw, :x64_mingw]
end
puppet_version = ENV['PUPPET_GEM_VERSION']
facter_version = ENV['FACTER_GEM_VERSION']
hiera_version = ENV['HIERA_GEM_VERSION']
gems = {}
gems['puppet'] = location_for(puppet_version)
# If facter or hiera versions have been specified via the environment
# variables
gems['facter'] = location_for(facter_version) if facter_version
gems['hiera'] = location_for(hiera_version) if hiera_version
if Gem.win_platform? && puppet_version =~ %r{^(file:///|git://)}
# If we're using a Puppet gem on Windows which handles its own win32-xxx gem
# dependencies (>= 3.5.0), set the maximum versions (see PUP-6445).
gems['win32-dir'] = ['<= 0.4.9', require: false]
gems['win32-eventlog'] = ['<= 0.6.5', require: false]
gems['win32-process'] = ['<= 0.7.5', require: false]
gems['win32-security'] = ['<= 0.2.5', require: false]
gems['win32-service'] = ['0.8.8', require: false]
end
gems.each do |gem_name, gem_params|
gem gem_name, *gem_params
end
# Evaluate Gemfile.local and ~/.gemfile if they exist
extra_gemfiles = [
"#{__FILE__}.local",
File.join(Dir.home, '.gemfile'),
]
extra_gemfiles.each do |gemfile|
if File.file?(gemfile) && File.readable?(gemfile)
eval(File.read(gemfile), binding)
end
end
# vim: syntax=ruby

View File

@@ -1,91 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (2.2.8)
ast (2.3.0)
diff-lcs (1.2.5)
domain_name (0.5.20160826)
unf (>= 0.0.5, < 1.0.0)
facter (2.4.6)
CFPropertyList (~> 2.2.6)
hiera (3.2.1)
http-cookie (1.0.3)
domain_name (~> 0.5)
json (2.0.2)
json_pure (1.8.3)
metaclass (0.0.4)
metadata-json-lint (0.0.11)
json
spdx-licenses (~> 1.0)
mime-types (2.99.3)
mocha (1.2.0)
metaclass (~> 0.0.1)
netrc (0.11.0)
parser (2.3.1.4)
ast (~> 2.2)
powerpack (0.1.1)
puppet (4.7.0)
CFPropertyList (~> 2.2.6)
facter (> 2.0, < 4)
hiera (>= 2.0, < 4)
json_pure (~> 1.8)
puppet-blacksmith (3.4.0)
puppet (>= 2.7.16)
rest-client (~> 1.8.0)
puppet-lint (2.0.2)
puppet-syntax (2.1.0)
rake
puppetlabs_spec_helper (1.2.2)
mocha (~> 1.0)
puppet-lint (~> 2.0)
puppet-syntax (~> 2.0)
rspec-puppet (~> 2.0)
rainbow (2.1.0)
rake (11.3.0)
rest-client (1.8.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 3.0)
netrc (~> 0.7)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-core (3.5.4)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-puppet (2.4.0)
rspec
rspec-support (3.5.0)
rubocop (0.43.0)
parser (>= 2.3.1.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
spdx-licenses (1.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
unicode-display_width (1.1.1)
PLATFORMS
ruby
DEPENDENCIES
facter (>= 1.7.0)
metadata-json-lint
puppet (>= 3.3)
puppet-blacksmith
puppet-lint (>= 1.0.0)
puppetlabs_spec_helper (>= 1.0.0)
rspec-puppet
rubocop
BUNDLED WITH
1.12.5

View File

@@ -1,5 +1,7 @@
# Sabayon # Sabayon
[![CircleCI](https://circleci.com/gh/Sabayon/puppet-sabayon.svg?style=shield)](https://circleci.com/gh/Sabayon/puppet-sabayon)
#### Table of Contents #### Table of Contents
1. [Description](#description) 1. [Description](#description)
@@ -18,7 +20,9 @@ This module extends puppet with support for the Sabayon Linux distribution.
It adds support for: It adds support for:
* The Entropy package manager * The Entropy package manager
* Managing `Sabayon Community Repository (SCR)` definitions using `enman` * Managing `Sabayon Community Repository (SCR)` definitions using `enman`
* Enabling and disabling entropy repositories
* Entropy package masks and unmasks * Entropy package masks and unmasks
* Splitdebug installs for packages
* Using systemd as the default service provider * Using systemd as the default service provider
## Setup ## Setup
@@ -35,6 +39,10 @@ It adds support for:
This module overrides the default provider for `package` resources to This module overrides the default provider for `package` resources to
force use of `entropy` force use of `entropy`
### Prerequisites
* `sys-apps/lsb-release` is required for the operatingsystem fact to work
### Beginning with sabayon ### Beginning with sabayon
The types and providers within this module can be used without any special The types and providers within this module can be used without any special
@@ -78,12 +86,41 @@ not install 'mysql' since there's no way to disambiguate between
### Managing enman repositories ### Managing enman repositories
Install an available SCR repository using enman. The title is taken to be the
repository name by default, and must be available via enman. Use an `ensure`
value of `present` to install the repo, and `absent` to remove it.
```puppet ```puppet
enman_repo { 'community': enman_repo { 'community':
ensure => present, ensure => present,
} }
``` ```
### Enabling and disabling entropy repositories
Installed repositories (whether system or SCR repositories) can be enabled and
disabled using the `entropy_repo` type.
To enable a repository, use:
```puppet
entropy_repo { 'sabayon-limbo':
enabled => 'true',
}
```
To disable a repository (only if present), use:
```puppet
if 'sabayon-limbo' in $facts['entropy_repos'] {
entropy_repo { 'sabayon-limbo':
enabled => 'false',
}
}
```
This type cannot currently install or remove repositories, only control the
enabled state of existing repositories. The repository being managed must
already exist on the system.
### Masking packages ### Masking packages
Entropy is very flexible in how to specify which packages can be masked, Entropy is very flexible in how to specify which packages can be masked,
@@ -238,11 +275,55 @@ For more info on package keywords, see https://wiki.gentoo.org/wiki/KEYWORDS
### Types ### Types
* `enman_repo`: Manages SCR repositories using enman * `enman_repo`: Manages SCR repositories using enman
* `entropy_repo`: Enables/Disables repositories
* `entropy_mask`: Manages entropy package masks * `entropy_mask`: Manages entropy package masks
* `entropy_unmask`: Manages entropy package unmasks * `entropy_unmask`: Manages entropy package unmasks
* `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
#### `entropy_repos`
Provides a structured fact identifying the entropy repos present on the system
including their enabled/disabled state, and whether they are enman or entropy
repositories.
Example (in yaml format for readability):
```yaml
---
sabayonlinux.org:
repo_type: "entropy"
enabled: "true"
sabayon-limbo:
repo_type: "entropy"
enabled: "false"
community:
repo_type: "enman"
enabled: "true"
```
#### `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`.
### Tasks
This module includes tasks for ad-hoc use with Puppet Bolt or Choria.
### `cleanup`
This task executes `equo cleanup` command on the target nodes, which frees up
disk space used by cached package downloads. It does not accept any parameters,
and does not support running noop mode.
## 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.
@@ -254,3 +335,7 @@ best-efforts basis.
Pull requests welcome! Pull requests welcome!
## Contributors
* [https://github.com/ace13](ace13)

View File

@@ -1,33 +1,76 @@
require 'puppetlabs_spec_helper/rake_tasks' require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-lint/tasks/puppet-lint' require 'puppet-syntax/tasks/puppet-syntax'
require 'metadata-json-lint/rake_task' require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
require 'puppet_blacksmith/rake_tasks' require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
if RUBY_VERSION >= '1.9' def changelog_user
require 'rubocop/rake_task' return unless Rake.application.top_level_tasks.include? "changelog"
RuboCop::RakeTask.new returnVal = nil || JSON.load(File.read('metadata.json'))['author']
raise "unable to find the changelog_user in .sync.yml, or the author in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator user:#{returnVal}"
returnVal
end end
PuppetLint.configuration.send('disable_80chars') def changelog_project
PuppetLint.configuration.relative = true return unless Rake.application.top_level_tasks.include? "changelog"
PuppetLint.configuration.ignore_paths = ['spec/**/*.pp', 'pkg/**/*.pp', 'vendor/**/*.pp'] returnVal = nil || JSON.load(File.read('metadata.json'))['name']
raise "unable to find the changelog_project in .sync.yml or the name in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator project:#{returnVal}"
returnVal
end
desc 'Validate manifests, templates, and ruby files' def changelog_future_release
task :validate do return unless Rake.application.top_level_tasks.include? "changelog"
Dir['manifests/**/*.pp'].each do |manifest| returnVal = "v%s" % JSON.load(File.read('metadata.json'))['version']
sh "puppet parser validate --noop #{manifest}" raise "unable to find the future_release (version) in metadata.json" if returnVal.nil?
puts "GitHubChangelogGenerator future_release:#{returnVal}"
returnVal
end end
Dir['spec/**/*.rb', 'lib/**/*.rb'].each do |ruby_file|
sh "ruby -c #{ruby_file}" unless ruby_file =~ %r{spec/fixtures} PuppetLint.configuration.send('disable_relative')
if Bundler.rubygems.find_name('github_changelog_generator').any?
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
config.user = "#{changelog_user}"
config.project = "#{changelog_project}"
config.future_release = "#{changelog_future_release}"
config.exclude_labels = ['maintenance']
config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)."
config.add_pr_wo_labels = true
config.issues = false
config.merge_prefix = "### UNCATEGORIZED PRS; GO LABEL THEM"
config.configure_sections = {
"Changed" => {
"prefix" => "### Changed",
"labels" => ["backwards-incompatible"],
},
"Added" => {
"prefix" => "### Added",
"labels" => ["feature", "enhancement"],
},
"Fixed" => {
"prefix" => "### Fixed",
"labels" => ["bugfix"],
},
}
end end
Dir['templates/**/*.erb'].each do |template| else
sh "erb -P -x -T '-' #{template} | ruby -c" desc 'Generate a Changelog from GitHub'
task :changelog do
raise <<EOM
The changelog tasks depends on unreleased features of the github_changelog_generator gem.
Please manually add it to your .sync.yml for now, and run `pdk update`:
---
Gemfile:
optional:
':development':
- gem: 'github_changelog_generator'
git: 'https://github.com/skywinder/github-changelog-generator'
ref: '20ee04ba1234e9e83eb2ffb5056e23d641c7a018'
condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.2.2')"
EOM
end end
end end
desc 'Run metadata_lint, lint, validate, and spec tests.'
task :test do
[:metadata_lint, :lint, :validate, :spec].each do |test|
Rake::Task[test].invoke
end
end

55
appveyor.yml Normal file
View File

@@ -0,0 +1,55 @@
---
version: 1.1.x.{build}
branches:
only:
- master
skip_commits:
message: /^\(?doc\)?.*/
clone_depth: 10
init:
- SET
- 'mkdir C:\ProgramData\PuppetLabs\code && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\facter && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\hiera && exit 0'
- 'mkdir C:\ProgramData\PuppetLabs\puppet\var && exit 0'
environment:
matrix:
-
RUBY_VERSION: 24-x64
CHECK: syntax lint metadata_lint check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop
-
PUPPET_GEM_VERSION: ~> 5.0
RUBY_VERSION: 24
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 5.0
RUBY_VERSION: 24-x64
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 6.0
RUBY_VERSION: 25
CHECK: parallel_spec
-
PUPPET_GEM_VERSION: ~> 6.0
RUBY_VERSION: 25-x64
CHECK: parallel_spec
matrix:
fast_finish: true
install:
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
- bundle install --jobs 4 --retry 2 --without system_tests
- type Gemfile.lock
build: off
test_script:
- bundle exec puppet -V
- ruby -v
- gem -v
- bundle -v
- bundle exec rake %CHECK%
notifications:
- provider: Email
to:
- nobody@nowhere.com
on_build_success: false
on_build_failure: false
on_build_status_changed: false

3
circle.yml Normal file
View File

@@ -0,0 +1,3 @@
test:
override:
- bundle exec rake test

5
facts.d/sabayon.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/sh
if [ -f /etc/sabayon-release ]; then
echo "operatingsystem=Sabayon"
fi

View File

@@ -0,0 +1,20 @@
Facter.add('entropy_repos') do
confine operatingsystem: :Sabayon
setcode do
# Use the types/providers to do the heavy lifting here
repos = {}
Puppet::Type.type(:entropy_repo).provider(:file).instances.each do |repo|
Facter.debug(repo.enabled)
r = {
repo_type: repo.repo_type,
enabled: repo.enabled,
}
repos[repo.name] = r
end
repos
end
end

View File

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

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

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

View File

@@ -1,14 +0,0 @@
Facter.add(:operatingsystem) do
# Sabayon Linux is a variant of Gentoo so this resolution needs to come
# before the Gentoo resolution.
has_weight(100)
confine :kernel => :linux
setcode do
distid = Facter.value(:lsbdistid)
if distid == "Sabayon"
'Sabayon'
end
end
end

View File

@@ -1,19 +1,19 @@
Puppet::Type.type(:enman_repo).provide(:enman) do Puppet::Type.type(:enman_repo).provide(:enman) do
desc "Enman provider for Enman Repositories" desc 'Enman provider for Enman Repositories'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
commands({:enman => "enman"}) commands(enman: 'enman')
mk_resource_methods mk_resource_methods
def create def create
enman("add", resource[:name]) enman('add', resource[:name])
@property_hash[:ensure] = :present @property_hash[:ensure] = :present
end end
def destroy def destroy
enman("remove", resource[:name]) enman('remove', resource[:name])
@property_hash[:ensure] = :absent @property_hash[:ensure] = :absent
end end
@@ -22,33 +22,31 @@ Puppet::Type.type(:enman_repo).provide(:enman) do
end end
def self.instances def self.instances
all_installed = enman("list", "--quiet", "--installed").chomp.split all_installed = enman('list', '--quiet', '--installed').chomp.split
all_available = enman("list", "--quiet", "--available").chomp.split all_available = enman('list', '--quiet', '--available').chomp.split
all_available.collect do |available_repo| all_available.map do |available_repo|
repo = { repo = {
:name => available_repo, name: available_repo,
:ensure => all_installed.include?(available_repo) ? :present : :absent, ensure: all_installed.include?(available_repo) ? :present : :absent,
:provider => :enman_repo, provider: :enman_repo,
} }
Puppet.debug(repo) Puppet.debug(repo)
new(repo) new(repo)
end end
end end
def self.prefetch(resources) def self.prefetch(resources)
available_repos = self.instances() available_repos = instances
resources.each do |name, resource| resources.each do |name, _resource|
if provider = available_repos.find { |r| r.name == name } provider = available_repos.find { |r| r.name == name }
if provider
resources[name].provider = provider resources[name].provider = provider
end end
end end
end end
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,41 +1,55 @@
require 'puppet/provider/parsedfile' require 'puppet/provider/parsedfile'
file = "/etc/entropy/packages/package.keywords" file = '/etc/entropy/packages/package.keywords'
Puppet::Type.type(:entropy_keywords).provide(:parsed, Puppet::Type.type(:entropy_keywords).provide(:parsed,
:parent => Puppet::Provider::ParsedFile, parent: Puppet::Provider::ParsedFile,
:default_target => file, default_target: file,
:filetype => :flat filetype: :flat) do
) do
desc "Override keywords for entropy packages" desc 'Override keywords for entropy packages'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
text_line :blank, text_line :blank,
:match => /^\s*$/ match: %r{^\s*$}
text_line :comment, text_line :comment,
:match => /^\s*#/ match: %r{^\s*#}
text_line :unmanaged, text_line :unmanaged,
: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*$} 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*$
}x
record_line :parsed, record_line :parsed,
:fields => %w{keyword operator package version repo name}, fields: ['keyword', 'operator', 'package', 'version', 'repo', 'name'],
: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*$}, match: %r{
:to_line => proc { |record| ^(\S+)\s+([<>]?=)?
line = record[:keyword] + " " (?:
((?:[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+\#+\s+Puppet\s+Name:\s+(.*)
\s*$
}x,
to_line: proc { |record|
line = record[:keyword] + ' '
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]
line += record[:package] if record[:package] line += record[:package] if record[:package]
line += "-" + record[:version] if record[:version] line += '-' + record[:version] if record[:version]
line += " " if record[:package] && record[:repo] line += ' ' if record[:package] && record[:repo]
line += "repo=" + record[:repo] if record[:repo] line += 'repo=' + record[:repo] if record[:repo]
line += " ## Puppet Name: " + record[:name] line += ' ## Puppet Name: ' + record[:name]
line line
} }
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,43 +1,57 @@
require 'puppet/provider/parsedfile' require 'puppet/provider/parsedfile'
masks = "/etc/entropy/packages/package.mask" masks = '/etc/entropy/packages/package.mask'
Puppet::Type.type(:entropy_mask).provide(:parsed, Puppet::Type.type(:entropy_mask).provide(:parsed,
:parent => Puppet::Provider::ParsedFile, parent: Puppet::Provider::ParsedFile,
:default_target => masks, default_target: masks,
:filetype => :flat filetype: :flat) do
) do
desc "File mask provider for entropy packages" desc 'File mask provider for entropy packages'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
text_line :blank, text_line :blank,
:match => /^\s*$/ match: %r{^\s*$}
text_line :comment, text_line :comment,
:match => /^\s*#/ match: %r{^\s*#}
text_line :unmanaged, text_line :unmanaged,
: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*$} 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*$
}x
record_line :parsed, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, fields: ['operator', 'package', 'version', 'slot', 'use', 'tag', 'repo', 'name'],
: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*$}, match: %r{
:to_line => proc { |record| ^([<>]?=)?
line = "" ((?:[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+\#+\s+Puppet\s+Name:\s+(.*)\s*$
}x,
to_line: proc { |record|
line = ''
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]
line += record[:package] if record[:package] line += record[:package] if record[:package]
line += "-" + record[:version] if record[:version] line += '-' + record[:version] if record[:version]
line += ":" + record[:slot] if record[:slot] line += ':' + record[:slot] if record[:slot]
line += "[" + record[:use] + "]" if record[:use] line += '[' + record[:use] + ']' if record[:use]
line += "#" + record[:tag] if record[:tag] line += '#' + record[:tag] if record[:tag]
line += "::" + record[:repo] if record[:repo] line += '::' + record[:repo] if record[:repo]
line += " ## Puppet Name: " + record[:name] line += ' ## Puppet Name: ' + record[:name]
line line
} }
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -0,0 +1,71 @@
Puppet::Type.type(:entropy_repo).provide(:file) do
desc 'File provider for Entropy Repositories'
defaultfor operatingsystem: :sabayon
mk_resource_methods
def type_prefix
if @property_hash[:repo_type] == 'enman'
'enman_'
else
''
end
end
def enabled=(value)
enabled_filename = "/etc/entropy/repositories.conf.d/entropy_#{type_prefix}#{@property_hash[:name]}"
disabled_filename = "/etc/entropy/repositories.conf.d/_entropy_#{type_prefix}#{@property_hash[:name]}"
if ['true', :true].include?(value)
if File.exist?(disabled_filename)
File.rename(disabled_filename, enabled_filename)
end
elsif File.exist?(enabled_filename)
File.rename(enabled_filename, disabled_filename)
end
@property_hash[:enabled] = value
end
def self.instances
repos = Dir.entries('/etc/entropy/repositories.conf.d/')
repos.map { |r|
if ['.', '..'].include?(r)
nil
elsif r =~ %r{\.example$}
nil
elsif r !~ %r{^_?entropy_}
nil
else
matches = %r{^(_)?entropy_(enman_)?(.*)$}.match(r)
enabled = matches[1].nil? ? 'true' : 'false'
type = (matches[2] == 'enman_') ? 'enman' : 'entropy'
name = matches[3]
repo = {
name: name,
repo_type: type,
enabled: enabled,
provider: :entropy_repo,
}
new(repo)
end
}.compact
end
def self.prefetch(resources)
repos = instances
resources.each do |name, _resource|
provider = repos.find { |r| r.name == name }
if provider
resources[name].provider = provider
end
end
end
end
# vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,43 +1,59 @@
require 'puppet/provider/parsedfile' require 'puppet/provider/parsedfile'
file = "/etc/entropy/packages/package.splitdebug" file = '/etc/entropy/packages/package.splitdebug'
Puppet::Type.type(:entropy_splitdebug).provide(:parsed, Puppet::Type.type(:entropy_splitdebug).provide(:parsed,
:parent => Puppet::Provider::ParsedFile, parent: Puppet::Provider::ParsedFile,
:default_target => file, default_target: file,
:filetype => :flat filetype: :flat) do
) do
desc "File splitdebug provider for entropy packages" desc 'File splitdebug provider for entropy packages'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
text_line :blank, text_line :blank,
:match => /^\s*$/ match: %r{^\s*$}
text_line :comment, text_line :comment,
:match => /^\s*#/ match: %r{^\s*#}
text_line :unmanaged, text_line :unmanaged,
: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*$} 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*$
}x
record_line :parsed, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, fields: ['operator', 'package', 'version', 'slot', 'use', 'tag', 'repo', 'name'],
: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*$}, match: %r{
:to_line => proc { |record| ^([<>]?=)?
line = "" ((?:[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+\#+\s+Puppet\s+Name:\s+(.*)
\s*$
}x,
to_line: proc { |record|
line = ''
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]
line += record[:package] if record[:package] line += record[:package] if record[:package]
line += "-" + record[:version] if record[:version] line += '-' + record[:version] if record[:version]
line += ":" + record[:slot] if record[:slot] line += ':' + record[:slot] if record[:slot]
line += "[" + record[:use] + "]" if record[:use] line += '[' + record[:use] + ']' if record[:use]
line += "#" + record[:tag] if record[:tag] line += '#' + record[:tag] if record[:tag]
line += "::" + record[:repo] if record[:repo] line += '::' + record[:repo] if record[:repo]
line += " ## Puppet Name: " + record[:name] line += ' ## Puppet Name: ' + record[:name]
line line
} }
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,43 +1,58 @@
require 'puppet/provider/parsedfile' require 'puppet/provider/parsedfile'
file = "/etc/entropy/packages/package.splitdebug.mask" file = '/etc/entropy/packages/package.splitdebug.mask'
Puppet::Type.type(:entropy_splitdebug_mask).provide(:parsed, Puppet::Type.type(:entropy_splitdebug_mask).provide(:parsed,
:parent => Puppet::Provider::ParsedFile, parent: Puppet::Provider::ParsedFile,
:default_target => file, default_target: file,
:filetype => :flat filetype: :flat) do
) do
desc "File splitdebug mask provider for entropy packages" desc 'File splitdebug mask provider for entropy packages'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
text_line :blank, text_line :blank,
:match => /^\s*$/ match: %r{^\s*$}
text_line :comment, text_line :comment,
:match => /^\s*#/ match: %r{^\s*#}
text_line :unmanaged, text_line :unmanaged,
: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*$} 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*$
}x
record_line :parsed, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, fields: ['operator', 'package', 'version', 'slot', 'use', 'tag', 'repo', 'name'],
: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*$}, match: %r{
:to_line => proc { |record| ^([<>]?=)?
line = "" ((?:[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+\#+\s+Puppet\s+Name:\s+(.*)
\s*$
}x,
to_line: proc { |record|
line = ''
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]
line += record[:package] if record[:package] line += record[:package] if record[:package]
line += "-" + record[:version] if record[:version] line += '-' + record[:version] if record[:version]
line += ":" + record[:slot] if record[:slot] line += ':' + record[:slot] if record[:slot]
line += "[" + record[:use] + "]" if record[:use] line += '[' + record[:use] + ']' if record[:use]
line += "#" + record[:tag] if record[:tag] line += '#' + record[:tag] if record[:tag]
line += "::" + record[:repo] if record[:repo] line += '::' + record[:repo] if record[:repo]
line += " ## Puppet Name: " + record[:name] line += ' ## Puppet Name: ' + record[:name]
line line
} }
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,43 +1,59 @@
require 'puppet/provider/parsedfile' require 'puppet/provider/parsedfile'
unmasks = "/etc/entropy/packages/package.unmask" unmasks = '/etc/entropy/packages/package.unmask'
Puppet::Type.type(:entropy_unmask).provide(:parsed, Puppet::Type.type(:entropy_unmask).provide(:parsed,
:parent => Puppet::Provider::ParsedFile, parent: Puppet::Provider::ParsedFile,
:default_target => unmasks, default_target: unmasks,
:filetype => :flat filetype: :flat) do
) do
desc "File unmask provider for entropy packages" desc 'File unmask provider for entropy packages'
defaultfor :operatingsystem => :sabayon defaultfor operatingsystem: :sabayon
text_line :blank, text_line :blank,
:match => /^\s*$/ match: %r{^\s*$}
text_line :comment, text_line :comment,
:match => /^\s*#/ match: %r{^\s*#}
text_line :unmanaged, text_line :unmanaged,
: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*$} 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*$
}x
record_line :parsed, record_line :parsed,
:fields => %w{operator package version slot use tag repo name}, fields: ['operator', 'package', 'version', 'slot', 'use', 'tag', 'repo', 'name'],
: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*$}, match: %r{
:to_line => proc { |record| ^([<>]?=)?
line = "" ((?:[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+\#+\s+Puppet\s+Name:\s+(.*)
\s*$
}x,
to_line: proc { |record|
line = ''
line += record[:operator] if record[:operator] line += record[:operator] if record[:operator]
line += record[:package] if record[:package] line += record[:package] if record[:package]
line += "-" + record[:version] if record[:version] line += '-' + record[:version] if record[:version]
line += ":" + record[:slot] if record[:slot] line += ':' + record[:slot] if record[:slot]
line += "[" + record[:use] + "]" if record[:use] line += '[' + record[:use] + ']' if record[:use]
line += "#" + record[:tag] if record[:tag] line += '#' + record[:tag] if record[:tag]
line += "::" + record[:repo] if record[:repo] line += '::' + record[:repo] if record[:repo]
line += " ## Puppet Name: " + record[:name] line += ' ## Puppet Name: ' + record[:name]
line line
} }
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

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,47 +9,61 @@ 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 = %r{
^(\S+)\/(\S+)-([\.\d]+(?:_?(?:a(?:lpha)?|b(?:eta)?|pre|pre_pre|rc|p)\d*)?
(?:-r\d+)?)(?:\#(\S+))?$
}x
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|
match = result_format.match(search_result) match = result_format.match(search_result)
if match next unless match
package = {} package = {}
result_fields.zip(match.captures) do |field, value| result_fields.zip(match.captures) do |field, value|
package[field] = value unless !value or value.empty? package[field] = value unless !value || value.empty?
end end
package[:provider] = :entropy package[:provider] = :entropy
packages << new(package) packages << new(package)
end end
end
return packages return packages
rescue Puppet::ExecutionFailure => detail rescue Puppet::ExecutionFailure => detail
raise Puppet::Error.new(detail) raise Puppet::Error, detail.message
end end
end end
def install def install
should = @resource.should(:ensure) should = @resource.should(:ensure)
name = package_name name = package_name
unless should == :present or should == :latest unless [:present, :latest].include?(should)
# We must install a specific version # We must install a specific version
name = "=#{name}-#{should}" name = "=#{name}-#{should}"
end end
equo "install", name begin
equo 'install', name
rescue Puppet::ExecutionFailure => detail
raise Puppet::Error, detail.message
end
end end
# The common package name format. # The common package name format.
@@ -62,31 +76,35 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa
end end
def uninstall def uninstall
equo "remove", package_name equo 'remove', package_name
rescue Puppet::ExecutionFailure => detail
raise Puppet::Error, detail.message
end end
def update def update
self.install install
end end
def query def query
result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_(?:alpha|beta|pre|rc|p)\d+)?(?:-r\d+)?)(?:#(\S+))?$/ result_format = %r{
^(\S+)\/(\S+)-([\.\d]+(?:_(?:alpha|beta|pre_pre|pre|rc|p)\d+)?(?:-r\d+)?)
(?::[^\#]+)?(?:\#(\S+))?$
}x
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
package = {} package = {}
result_fields.zip(search_match.captures).each do |field, value| result_fields.zip(search_match.captures).each do |field, value|
package[field] = value unless !value or value.empty? package[field] = value unless !value || value.empty?
end end
installed_output = equo 'match', '--quiet', '--verbose', '--installed', package_name begin
installed_output.chomp 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,45 +113,43 @@ 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|
search_match = installed_package.match(result_format) search_match = installed_package.match(result_format)
if search_match next unless search_match
search_captures = search_match.captures search_captures = search_match.captures
if (search_captures[0] == @resource[:category] and search_captures[1] == @resource[:name]) or "#{search_captures[0]}/#{search_captures[1]}" == package_name next unless (search_captures[0] == (@resource[:category]) && search_captures[1] == (@resource[:name])) || package_name == "#{search_captures[0]}/#{search_captures[1]}"
package = { package = {
:ensure => search_captures[2] ensure: search_captures[2],
} }
result_fields.zip(search_captures).each do |field, value| result_fields.zip(search_captures).each do |field, value|
package[field] = value unless !value or value.empty? package[field] = value unless !value || value.empty?
end end
return package return package
end
end
end end
raise Puppet::Error.new("No package found with the specified name [#{package_name}]") raise Puppet::Error, "No package found with the specified name [#{package_name}]"
end end
rescue Puppet::ExecutionFailure => detail rescue Puppet::ExecutionFailure => detail
raise Puppet::Error.new(detail) raise Puppet::Error, detail.message
end end
end end
def latest def latest
self.query[:version_available] query[:version_available]
end end
end end

View File

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

View File

@@ -1,8 +1,7 @@
# Manage systemd services using /bin/systemctl # Manage systemd services using /bin/systemctl
Puppet::Type.type(:service).provide :sabayon, :parent => :systemd do Puppet::Type.type(:service).provide :sabayon, parent: :systemd do
desc "Manages `systemd` services using `systemctl`." desc 'Manages `systemd` services using `systemctl`.'
defaultfor :operatingsystem => :sabayon
defaultfor operatingsystem: :sabayon
end end

View File

@@ -1,18 +1,16 @@
Puppet::Type.newtype(:enman_repo) do Puppet::Type.newtype(:enman_repo) do
@desc = "Manages Sabayon Community Repositories" @desc = 'Manages Sabayon Community Repositories'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Name of the Enman Repository" desc 'Name of the Enman Repository'
isnamevar isnamevar
end end
autorequire(:package) do autorequire(:package) do
['enman'] ['enman']
end end
end end
# vim: set ts=2 shiftwidth=2 expandtab : # vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,23 +1,23 @@
Puppet::Type.newtype(:entropy_keywords) do Puppet::Type.newtype(:entropy_keywords) do
@desc = "Override keywords for Entropy packages" @desc = 'Override keywords for Entropy packages'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Unique name for this keyword entry" desc 'Unique name for this keyword entry'
end end
newproperty(:keyword) do newproperty(:keyword) do
desc "Keyword to be applied to matching packages" desc 'Keyword to be applied to matching packages'
defaultto { defaultto do
os = Facter.value(:os) os = Facter.value(:os)
if os.key?('architecture') if os.key?('architecture')
os['architecture'] os['architecture']
else else
'**' '**'
end end
} end
end end
newproperty(:operator) do newproperty(:operator) do
@@ -25,35 +25,35 @@ Puppet::Type.newtype(:entropy_keywords) do
end end
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+_-]+$}) 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+)?$}) newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end end
newproperty(:repo) do newproperty(:repo) do
desc "Repo for the package" desc 'Repo for the package'
end end
newproperty(:target) do newproperty(:target) do
desc "Location of the package.keywords file being managed" desc 'Location of the package.keywords file being managed'
defaultto { defaultto do
if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target @resource.class.defaultprovider.default_target
else else
nil nil
end end
} end
end end
validate do validate do
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?
end end
autobefore(:package) do autobefore(:package) do
@@ -62,4 +62,3 @@ Puppet::Type.newtype(:entropy_keywords) do
end end
# vim: set ts=2 sw=2 expandtab: # vim: set ts=2 sw=2 expandtab:

View File

@@ -1,10 +1,10 @@
Puppet::Type.newtype(:entropy_mask) do Puppet::Type.newtype(:entropy_mask) do
@desc = "Mask packages in Entropy" @desc = 'Mask packages in Entropy'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Unique name for this mask" desc 'Unique name for this mask'
end end
newproperty(:operator) do newproperty(:operator) do
@@ -12,47 +12,47 @@ Puppet::Type.newtype(:entropy_mask) do
end end
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+_-]+$}) 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+)?$}) newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end end
newproperty(:slot) do newproperty(:slot) do
desc "Slot the package is in" desc 'Slot the package is in'
end end
newproperty(:use) do newproperty(:use) do
desc "Useflags for the package" desc 'Useflags for the package'
end end
newproperty(:tag) do newproperty(:tag) do
desc "Tag for the package" desc 'Tag for the package'
end end
newproperty(:repo) do newproperty(:repo) do
desc "Repo for the package" desc 'Repo for the package'
end end
newproperty(:target) do newproperty(:target) do
desc "Location of the package.mask file being managed" desc 'Location of the package.mask file being managed'
defaultto { defaultto do
if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target @resource.class.defaultprovider.default_target
else else
nil nil
end end
} end
end end
validate do validate do
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?
end end
autobefore(:package) do autobefore(:package) do
@@ -61,4 +61,3 @@ Puppet::Type.newtype(:entropy_mask) do
end end
# vim: set ts=2 sw=2 expandtab: # vim: set ts=2 sw=2 expandtab:

View File

@@ -0,0 +1,20 @@
require 'puppet/property/boolean'
Puppet::Type.newtype(:entropy_repo) do
@desc = 'Manages Entropy Repositories'
newparam(:name) do
desc 'Name of the Entropy Repository'
end
newproperty(:repo_type, readonly: true) do
desc 'What type of repository this is (enman or entropy)'
end
newproperty(:enabled) do
desc 'Whether the repository is enabled or not'
newvalues('true', 'false')
end
end
# vim: set ts=2 shiftwidth=2 expandtab :

View File

@@ -1,10 +1,10 @@
Puppet::Type.newtype(:entropy_splitdebug) do Puppet::Type.newtype(:entropy_splitdebug) do
@desc = "Manages splitdebug for packages in Entropy" @desc = 'Manages splitdebug for packages in Entropy'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Unique name for this splitdebug specification" desc 'Unique name for this splitdebug specification'
end end
newproperty(:operator) do newproperty(:operator) do
@@ -12,47 +12,47 @@ Puppet::Type.newtype(:entropy_splitdebug) do
end end
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+_-]+$}) 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+)?$}) newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end end
newproperty(:slot) do newproperty(:slot) do
desc "Slot the package is in" desc 'Slot the package is in'
end end
newproperty(:use) do newproperty(:use) do
desc "Useflags for the package" desc 'Useflags for the package'
end end
newproperty(:tag) do newproperty(:tag) do
desc "Tag for the package" desc 'Tag for the package'
end end
newproperty(:repo) do newproperty(:repo) do
desc "Repo for the package" desc 'Repo for the package'
end end
newproperty(:target) do newproperty(:target) do
desc "Location of the package.splitdebug file being managed" desc 'Location of the package.splitdebug file being managed'
defaultto { defaultto do
if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target @resource.class.defaultprovider.default_target
else else
nil nil
end end
} end
end end
validate do validate do
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?
end end
autobefore(:package) do autobefore(:package) do
@@ -61,4 +61,3 @@ Puppet::Type.newtype(:entropy_splitdebug) do
end end
# vim: set ts=2 sw=2 expandtab: # vim: set ts=2 sw=2 expandtab:

View File

@@ -1,10 +1,10 @@
Puppet::Type.newtype(:entropy_splitdebug_mask) do Puppet::Type.newtype(:entropy_splitdebug_mask) do
@desc = "Manages splitdebug masks for packages in Entropy" @desc = 'Manages splitdebug masks for packages in Entropy'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Unique name for this splitdebug mask specification" desc 'Unique name for this splitdebug mask specification'
end end
newproperty(:operator) do newproperty(:operator) do
@@ -12,47 +12,47 @@ Puppet::Type.newtype(:entropy_splitdebug_mask) do
end end
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+_-]+$}) 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+)?$}) newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end end
newproperty(:slot) do newproperty(:slot) do
desc "Slot the package is in" desc 'Slot the package is in'
end end
newproperty(:use) do newproperty(:use) do
desc "Useflags for the package" desc 'Useflags for the package'
end end
newproperty(:tag) do newproperty(:tag) do
desc "Tag for the package" desc 'Tag for the package'
end end
newproperty(:repo) do newproperty(:repo) do
desc "Repo for the package" desc 'Repo for the package'
end end
newproperty(:target) do newproperty(:target) do
desc "Location of the package.splitdebug.mask file being managed" desc 'Location of the package.splitdebug.mask file being managed'
defaultto { defaultto do
if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target @resource.class.defaultprovider.default_target
else else
nil nil
end end
} end
end end
validate do validate do
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?
end end
autobefore(:package) do autobefore(:package) do
@@ -61,4 +61,3 @@ Puppet::Type.newtype(:entropy_splitdebug_mask) do
end end
# vim: set ts=2 sw=2 expandtab: # vim: set ts=2 sw=2 expandtab:

View File

@@ -1,10 +1,10 @@
Puppet::Type.newtype(:entropy_unmask) do Puppet::Type.newtype(:entropy_unmask) do
@desc = "Unmask packages in Entropy" @desc = 'Unmask packages in Entropy'
ensurable ensurable
newparam(:name) do newparam(:name) do
desc "Unique name for this unmask" desc 'Unique name for this unmask'
end end
newproperty(:operator) do newproperty(:operator) do
@@ -12,47 +12,47 @@ Puppet::Type.newtype(:entropy_unmask) do
end end
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+_-]+$}) 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+)?$}) newvalues(%r{^(\d*(?:\.\d+[a-zA-Z]*)*)(?:_((?:alpha|beta|pre|rc)\d*))?(-r\d+)?$})
end end
newproperty(:slot) do newproperty(:slot) do
desc "Slot the package is in" desc 'Slot the package is in'
end end
newproperty(:use) do newproperty(:use) do
desc "Useflags for the package" desc 'Useflags for the package'
end end
newproperty(:tag) do newproperty(:tag) do
desc "Tag for the package" desc 'Tag for the package'
end end
newproperty(:repo) do newproperty(:repo) do
desc "Repo for the package" desc 'Repo for the package'
end end
newproperty(:target) do newproperty(:target) do
desc "Location of the package.unmask file being managed" desc 'Location of the package.unmask file being managed'
defaultto { defaultto do
if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile) if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target @resource.class.defaultprovider.default_target
else else
nil nil
end end
} end
end end
validate do validate do
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?
end end
autobefore(:package) do autobefore(:package) do
@@ -61,4 +61,3 @@ Puppet::Type.newtype(:entropy_unmask) do
end end
# vim: set ts=2 sw=2 expandtab: # vim: set ts=2 sw=2 expandtab:

View File

@@ -1,27 +1,38 @@
{ {
"name": "optiz0r-sabayon", "name": "optiz0r-sabayon",
"version": "0.1.2", "version": "0.6.0",
"author": "Ben Roberts", "author": "Ben Roberts",
"license": "MIT",
"summary": "Extends Puppet with support for the Sabayon Linux distribution", "summary": "Extends Puppet with support for the Sabayon Linux distribution",
"license": "MIT",
"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": [ "dependencies": [
"sabayon",
"entropy"
], ],
"data_provider": "hiera",
"operatingsystem_support": [ "operatingsystem_support": [
{ {
"operatingsystem": "Sabayon", "operatingsystem": "Sabayon",
"operatingsystemrelease": [ "operatingsystemrelease": [
"16.07", "16.07",
"16.11" "16.11",
"19.03",
"19.05"
] ]
} }
], ],
"dependencies": [ "requirements": [
{
], "name": "puppet",
"data_provider": "hiera" "version_requirement": ">= 4.10.0 < 7.0.0"
}
],
"tags": [
"sabayon",
"entropy"
],
"pdk-version": "1.10.0",
"template-url": "file:///opt/puppetlabs/pdk/share/cache/pdk-templates.git#1.10.0",
"template-ref": "1.10.0-0-gbba9ac3"
} }

View File

@@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe 'sabayon' do describe 'sabayon' do
context 'with default values for all parameters' do context 'with default values for all parameters' do
it { should contain_class('sabayon') } it { is_expected.to contain_class('sabayon') }
it { should contain_package('app-admin/enman') } it { is_expected.to contain_package('app-admin/enman') }
end end
end end

7
spec/default_facts.yml Normal file
View File

@@ -0,0 +1,7 @@
# Use default_module_facts.yml for module specific facts.
#
# Facts specified here will override the values provided by rspec-puppet-facts.
---
ipaddress: "172.16.254.254"
is_pe: false
macaddress: "AA:AA:AA:AA:AA:AA"

View File

@@ -1 +1,48 @@
require 'puppetlabs_spec_helper/module_spec_helper' require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet-facts'
require 'spec_helper_local' if File.file?(File.join(File.dirname(__FILE__), 'spec_helper_local.rb'))
include RspecPuppetFacts
default_facts = {
puppetversion: Puppet.version,
facterversion: Facter.version,
}
default_fact_files = [
File.expand_path(File.join(File.dirname(__FILE__), 'default_facts.yml')),
File.expand_path(File.join(File.dirname(__FILE__), 'default_module_facts.yml')),
]
default_fact_files.each do |f|
next unless File.exist?(f) && File.readable?(f) && File.size?(f)
begin
default_facts.merge!(YAML.safe_load(File.read(f), [], [], true))
rescue => e
RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
end
end
RSpec.configure do |c|
c.mock_with :mocha
c.default_facts = default_facts
c.before :each do
# set to strictest setting for testing
# by default Puppet runs at warning level
Puppet.settings[:strict] = :warning
end
c.filter_run_excluding(bolt: true) unless ENV['GEM_BOLT']
c.after(:suite) do
end
end
def ensure_module_defined(module_name)
module_name.split('::').reduce(Object) do |last_module, next_module|
last_module.const_set(next_module, Module.new) unless last_module.const_defined?(next_module, false)
last_module.const_get(next_module, false)
end
end
# 'spec_overrides' from sync.yml will appear below this line

View File

@@ -1,10 +1,11 @@
require 'spec_helper' require 'spec_helper'
describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
before do let(:default_target) { described_class.default_target }
before(:each) do
described_class.stubs(:filetype).returns(Puppet::Util::FileType::FileTypeRam) described_class.stubs(:filetype).returns(Puppet::Util::FileType::FileTypeRam)
described_class.stubs(:filetype=) described_class.stubs(:filetype=)
@default_target = described_class.default_target
end end
describe 'should have a default target of /etc/entropy/packages/package.keywords' do describe 'should have a default target of /etc/entropy/packages/package.keywords' do
@@ -14,7 +15,7 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
end end
describe 'when parsing' do describe 'when parsing' do
it 'should parse out the name' do it 'parses out the name' do
line = '** app-admin/foobar ## Puppet Name: foobar' line = '** app-admin/foobar ## Puppet Name: foobar'
expect(described_class.parse_line(line)[:name]).to eq('foobar') expect(described_class.parse_line(line)[:name]).to eq('foobar')
end end
@@ -23,15 +24,15 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
line = '** app-admin/foobar ## Puppet Name: foobar' line = '** app-admin/foobar ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the keyword' do it 'parses out the keyword' do
expect(parsed[:keyword]).to eq('**') expect(parsed[:keyword]).to eq('**')
end end
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :repo].each do |param| [:operator, :version, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -42,19 +43,19 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
line = '** app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar' line = '** app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the keyword' do it 'parses out the keyword' do
expect(parsed[:keyword]).to eq('**') expect(parsed[:keyword]).to eq('**')
end end
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the version' do it 'parses out the version' do
expect(parsed[:version]).to eq('1.2.3_alpha1-r1') expect(parsed[:version]).to eq('1.2.3_alpha1-r1')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :repo].each do |param| [:operator, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -65,23 +66,23 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
line = '** >=app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar' line = '** >=app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the keyword' do it 'parses out the keyword' do
expect(parsed[:keyword]).to eq('**') expect(parsed[:keyword]).to eq('**')
end end
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the version' do it 'parses out the version' do
expect(parsed[:version]).to eq('1.2.3_alpha1-r1') expect(parsed[:version]).to eq('1.2.3_alpha1-r1')
end end
it 'should parse out the operator' do it 'parses out the operator' do
expect(parsed[:operator]).to eq('>=') expect(parsed[:operator]).to eq('>=')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:repo].each do |param| [:repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -92,19 +93,19 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
line = '** app-admin/foobar repo=community ## Puppet Name: foobar' line = '** app-admin/foobar repo=community ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the keyword' do it 'parses out the keyword' do
expect(parsed[:keyword]).to eq('**') expect(parsed[:keyword]).to eq('**')
end end
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the repo' do it 'parses out the repo' do
expect(parsed[:repo]).to eq('community') expect(parsed[:repo]).to eq('community')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version].each do |param| [:operator, :version].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -115,15 +116,15 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
line = 'amd64 repo=community ## Puppet Name: foobar' line = 'amd64 repo=community ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the keyword' do it 'parses out the keyword' do
expect(parsed[:keyword]).to eq('amd64') expect(parsed[:keyword]).to eq('amd64')
end end
it 'should parse out the repo' do it 'parses out the repo' do
expect(parsed[:repo]).to eq('community') expect(parsed[:repo]).to eq('community')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:package, :operator, :version].each do |param| [:package, :operator, :version].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -135,99 +136,99 @@ describe Puppet::Type.type(:entropy_keywords).provider(:parsed) do
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
expected = { expected = {
:name => 'foobar', name: 'foobar',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:operator => '>=', operator: '>=',
:version => '1.2.3a_alpha1-r1', version: '1.2.3a_alpha1-r1',
:repo => 'community', repo: 'community',
} }
it 'should parse out all parameters' do it 'parses out all parameters' do
expected.each do |param, value| expected.each do |param, value|
expect(parsed[param]).to eq(value) expect(parsed[param]).to eq(value)
end end
end end
end end
end end
describe 'when flushing' do describe 'when flushing' do
let(:ramfile) { Puppet::Util::FileType::FileTypeRam.new(:default_target) }
before :each do before :each do
@ramfile = Puppet::Util::FileType::FileTypeRam.new(@default_target) File.stubs(:exist?).with(:default_target).returns(true)
File.stubs(:exist?).with(@default_target).returns(true) described_class.stubs(:target_object).returns(:ramfile)
described_class.any_instance.stubs(:target_object).returns(@ramfile)
end end
after :each do after :each do
described_class.clear described_class.clear
end end
it 'should output a single package entry' do it 'outputs a single package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
} }
expect(described_class.to_line(resource)).to eq ('** app-admin/foobar ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** app-admin/foobar ## Puppet Name: test'
end end
it 'should output a versioned package entry' do it 'outputs a versioned package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:version => '1.2.3', version: '1.2.3',
} }
expect(described_class.to_line(resource)).to eq ('** app-admin/foobar-1.2.3 ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** app-admin/foobar-1.2.3 ## Puppet Name: test'
end end
it 'should output a ranged versioned package entry' do it 'outputs a ranged versioned package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:version => '1.2.3', version: '1.2.3',
:operator => '>=', operator: '>=',
} }
expect(described_class.to_line(resource)).to eq ('** >=app-admin/foobar-1.2.3 ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** >=app-admin/foobar-1.2.3 ## Puppet Name: test'
end end
it 'should output a repo-specific package entry' do it 'outputs a repo-specific package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('** app-admin/foobar repo=community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** app-admin/foobar repo=community ## Puppet Name: test'
end end
it 'should output a whole-repo entry' do it 'outputs a whole-repo entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('** repo=community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** repo=community ## Puppet Name: test'
end end
it 'should output all fields for a package entry' do it 'outputs all fields for a package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:keyword => '**', keyword: '**',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:operator => '>=', operator: '>=',
:version => '1.2.3', version: '1.2.3',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('** >=app-admin/foobar-1.2.3 repo=community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '** >=app-admin/foobar-1.2.3 repo=community ## Puppet Name: test'
end end
end end
end end

View File

@@ -0,0 +1,61 @@
require 'spec_helper'
describe Puppet::Type.type(:entropy_repo).provider(:file) do
describe 'when fetching existing resources' do
let(:instances) do
described_class.instances
end
let(:repos) do
[
{ name: 'sabayonlinux.org', type: 'entropy', enabled: 'true' },
{ name: 'sabayon-limbo', type: 'entropy', enabled: 'false' },
{ name: 'community', type: 'enman', enabled: 'true' },
]
end
before(:each) do
Dir.stubs(:entries).with('/etc/entropy/repositories.conf.d/').returns([
'.', '..', 'README',
'entropy_sabayonlinux.org',
'_entropy_sabayon-limbo',
'entropy_enman_community',
'entropy_foobar.example'
])
end
it 'identifies the correct number of repos' do
expect(instances.size).to eq(repos.size)
end
it 'identifies the correct repo name' do
repos.each_with_index do |repo, index|
expect(instances[index].name).to eq(repo[:name])
end
end
it 'identifies the correct enabled state' do
repos.each_with_index do |repo, index|
expect(instances[index].enabled).to eq(repo[:enabled])
end
end
end
describe 'when enabling a repository' do
it 'enables a disabled repository' do
File.stubs(:exist?).with('/etc/entropy/repositories.conf.d/entropy_sabayonlinux.org').returns(true).once
File.stubs(:rename).with('/etc/entropy/repositories.conf.d/entropy_sabayonlinux.org', '/etc/entropy/repositories.conf.d/_entropy_sabayonlinux.org').once
instance = described_class.new(name: 'sabayonlinux.org', enabled: 'true', type: 'entropy')
instance.enabled = 'false'
end
end
describe 'when disabling a repository' do
it 'disables an enabled repository' do
File.stubs(:exist?).with('/etc/entropy/repositories.conf.d/_entropy_sabayon-limbo').returns(true).once
File.stubs(:rename).with('/etc/entropy/repositories.conf.d/_entropy_sabayon-limbo', '/etc/entropy/repositories.conf.d/entropy_sabayon-limbo').once
instance = described_class.new(name: 'sabayon-limbo', enabled: 'false', type: 'entropy')
instance.enabled = 'true'
end
end
end

View File

@@ -5,25 +5,26 @@ require 'puppet/type/entropy_splitdebug'
require 'puppet/type/entropy_splitdebug_mask' require 'puppet/type/entropy_splitdebug_mask'
types = { types = {
:entropy_mask => Puppet::Type::Entropy_mask, entropy_mask: Puppet::Type::Entropy_mask,
:entropy_unmask => Puppet::Type::Entropy_unmask, entropy_unmask: Puppet::Type::Entropy_unmask,
:entropy_splitdebug => Puppet::Type::Entropy_splitdebug, entropy_splitdebug: Puppet::Type::Entropy_splitdebug,
:entropy_splitdebug_mask => Puppet::Type::Entropy_splitdebug_mask, entropy_splitdebug_mask: Puppet::Type::Entropy_splitdebug_mask,
} }
default_targets = { default_targets = {
:entropy_mask => '/etc/entropy/packages/package.mask', entropy_mask: '/etc/entropy/packages/package.mask',
:entropy_unmask => '/etc/entropy/packages/package.unmask', entropy_unmask: '/etc/entropy/packages/package.unmask',
:entropy_splitdebug => '/etc/entropy/packages/package.splitdebug', entropy_splitdebug: '/etc/entropy/packages/package.splitdebug',
:entropy_splitdebug_mask => '/etc/entropy/packages/package.splitdebug.mask', entropy_splitdebug_mask: '/etc/entropy/packages/package.splitdebug.mask',
} }
types.each do |type_name, type| types.each do |type_name, _type|
describe Puppet::Type.type(type_name).provider(:parsed) do describe Puppet::Type.type(type_name).provider(:parsed) do
before do let(:default_target) { described_class.default_target }
before(:each) do
described_class.stubs(:filetype).returns(Puppet::Util::FileType::FileTypeRam) described_class.stubs(:filetype).returns(Puppet::Util::FileType::FileTypeRam)
described_class.stubs(:filetype=) described_class.stubs(:filetype=)
@default_target = described_class.default_target
end end
describe "should have a default target of #{default_targets[type_name]}" do describe "should have a default target of #{default_targets[type_name]}" do
@@ -33,7 +34,7 @@ types.each do |type_name, type|
end end
describe 'when parsing' do describe 'when parsing' do
it 'should parse out the name' do it 'parses out the name' do
line = 'app-admin/foobar ## Puppet Name: foobar' line = 'app-admin/foobar ## Puppet Name: foobar'
expect(described_class.parse_line(line)[:name]).to eq('foobar') expect(described_class.parse_line(line)[:name]).to eq('foobar')
end end
@@ -42,11 +43,11 @@ types.each do |type_name, type|
line = 'app-admin/foobar ## Puppet Name: foobar' line = 'app-admin/foobar ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :slot, :use, :tag, :repo].each do |param| [:operator, :version, :slot, :use, :tag, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -57,15 +58,15 @@ types.each do |type_name, type|
line = 'app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar' line = 'app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the version' do it 'parses out the version' do
expect(parsed[:version]).to eq('1.2.3_alpha1-r1') expect(parsed[:version]).to eq('1.2.3_alpha1-r1')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :slot, :use, :tag, :repo].each do |param| [:operator, :slot, :use, :tag, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -76,19 +77,19 @@ types.each do |type_name, type|
line = '>=app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar' line = '>=app-admin/foobar-1.2.3_alpha1-r1 ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the version' do it 'parses out the version' do
expect(parsed[:version]).to eq('1.2.3_alpha1-r1') expect(parsed[:version]).to eq('1.2.3_alpha1-r1')
end end
it 'should parse out the operator' do it 'parses out the operator' do
expect(parsed[:operator]).to eq('>=') expect(parsed[:operator]).to eq('>=')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:slot, :use, :tag, :repo].each do |param| [:slot, :use, :tag, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -99,15 +100,15 @@ types.each do |type_name, type|
line = 'app-admin/foobar:1.1 ## Puppet Name: foobar' line = 'app-admin/foobar:1.1 ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the slot' do it 'parses out the slot' do
expect(parsed[:slot]).to eq('1.1') expect(parsed[:slot]).to eq('1.1')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :use, :tag, :repo].each do |param| [:operator, :version, :use, :tag, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -118,15 +119,15 @@ types.each do |type_name, type|
line = 'app-admin/foobar[-foo,bar] ## Puppet Name: foobar' line = 'app-admin/foobar[-foo,bar] ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the use' do it 'parses out the use' do
expect(parsed[:use]).to eq('-foo,bar') expect(parsed[:use]).to eq('-foo,bar')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :slot, :tag, :repo].each do |param| [:operator, :version, :slot, :tag, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -137,15 +138,15 @@ types.each do |type_name, type|
line = 'app-admin/foobar#server ## Puppet Name: foobar' line = 'app-admin/foobar#server ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the tag' do it 'parses out the tag' do
expect(parsed[:tag]).to eq('server') expect(parsed[:tag]).to eq('server')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :slot, :use, :repo].each do |param| [:operator, :version, :slot, :use, :repo].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -156,15 +157,15 @@ types.each do |type_name, type|
line = 'app-admin/foobar::community ## Puppet Name: foobar' line = 'app-admin/foobar::community ## Puppet Name: foobar'
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
it 'should parse out the package name' do it 'parses out the package name' do
expect(parsed[:package]).to eq('app-admin/foobar') expect(parsed[:package]).to eq('app-admin/foobar')
end end
it 'should parse out the repo' do it 'parses out the repo' do
expect(parsed[:repo]).to eq('community') expect(parsed[:repo]).to eq('community')
end end
it 'should have all other parameters undefined' do it 'has all other parameters undefined' do
[:operator, :version, :slot, :use, :tag].each do |param| [:operator, :version, :slot, :use, :tag].each do |param|
expect(parsed[param]).to be_nil expect(parsed[param]).to be_nil
end end
@@ -176,128 +177,130 @@ types.each do |type_name, type|
parsed = described_class.parse_line(line) parsed = described_class.parse_line(line)
expected = { expected = {
:name => 'foobar', name: 'foobar',
:operator => '>=', operator: '>=',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:version => '1.2.3a_alpha1-r1', version: '1.2.3a_alpha1-r1',
:slot => '1', slot: '1',
:use => '-foo', use: '-foo',
:tag => 'server', tag: 'server',
:repo => 'community', repo: 'community',
} }
it 'should parse out all parameters' do it 'parses out all parameters' do
expected.each do |param, value| expected.each do |param, value|
expect(parsed[param]).to eq(value) expect(parsed[param]).to eq(value)
end end
end end
end end
end end
describe 'when flushing' do describe 'when flushing' do
let(:ramfile) do
Puppet::Util::FileType::FileTypeRam.new(:default_target)
end
before :each do before :each do
@ramfile = Puppet::Util::FileType::FileTypeRam.new(@default_target)
File.stubs(:exist?).with(default_targets[type_name]).returns(true) File.stubs(:exist?).with(default_targets[type_name]).returns(true)
described_class.any_instance.stubs(:target_object).returns(@ramfile) described_class.stubs(:target_object).returns(:ramfile)
end end
after :each do after :each do
described_class.clear described_class.clear
end end
it 'should output a single package entry' do it 'outputs a single package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar ## Puppet Name: test'
end end
it 'should output a versioned package entry' do it 'outputs a versioned package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:version => '1.2.3', version: '1.2.3',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar-1.2.3 ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar-1.2.3 ## Puppet Name: test'
end end
it 'should output a ranged versioned package entry' do it 'outputs a ranged versioned package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:version => '1.2.3', version: '1.2.3',
:operator => '>=', operator: '>=',
} }
expect(described_class.to_line(resource)).to eq ('>=app-admin/foobar-1.2.3 ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '>=app-admin/foobar-1.2.3 ## Puppet Name: test'
end end
it 'should output a use-restricted package entry' do it 'outputs a use-restricted package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:use => '-foo,bar', use: '-foo,bar',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar[-foo,bar] ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar[-foo,bar] ## Puppet Name: test'
end end
it 'should output a slotted package entry' do it 'outputs a slotted package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:slot => '1.1', slot: '1.1',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar:1.1 ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar:1.1 ## Puppet Name: test'
end end
it 'should output a tagged package entry' do it 'outputs a tagged package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:tag => 'server', tag: 'server',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar#server ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar#server ## Puppet Name: test'
end end
it 'should output a repo-specific package entry' do it 'outputs a repo-specific package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('app-admin/foobar::community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq 'app-admin/foobar::community ## Puppet Name: test'
end end
it 'should output a whole-repo entry' do it 'outputs a whole-repo entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('::community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '::community ## Puppet Name: test'
end end
it 'should output all fields for a package entry' do it 'outputs all fields for a package entry' do
resource = { resource = {
:record_type => :parsed, record_type: :parsed,
:name => 'test', name: 'test',
:package => 'app-admin/foobar', package: 'app-admin/foobar',
:operator => '>=', operator: '>=',
:version => '1.2.3', version: '1.2.3',
:slot => '1.1', slot: '1.1',
:use => '-foo,bar', use: '-foo,bar',
:tag => 'server', tag: 'server',
:repo => 'community', repo: 'community',
} }
expect(described_class.to_line(resource)).to eq ('>=app-admin/foobar-1.2.3:1.1[-foo,bar]#server::community ## Puppet Name: test') expect(described_class.to_line(resource)).to eq '>=app-admin/foobar-1.2.3:1.1[-foo,bar]#server::community ## Puppet Name: test'
end end
end end
end end

View File

@@ -1,15 +1,17 @@
require 'spec_helper'
describe Puppet::Type.type(:enman_repo) do describe Puppet::Type.type(:enman_repo) do
before do before(:each) do
@provider = stub 'provider' provider = stub 'provider'
@provider.stubs(:name).returns(:enman) provider.stubs(:name).returns(:enman)
described_class.stubs(:defaultprovider).returns(@provider) described_class.stubs(:defaultprovider).returns(provider)
end end
it "should be an instance of Puppet::Type::Enman_repo" do it 'is an instance of Puppet::Type::Enman_repo' do
expect(described_class.new(:name => "test")).to be_an_instance_of Puppet::Type::Enman_repo expect(described_class.new(name: 'test')).to be_an_instance_of Puppet::Type::Enman_repo
end end
describe "when validating attributes" do describe 'when validating attributes' do
params = [:name] params = [:name]
params.each do |param| params.each do |param|
@@ -19,7 +21,7 @@ describe Puppet::Type.type(:enman_repo) do
end end
end end
it "should have name as the namevar" do it 'has name as the namevar' do
expect(described_class.key_attributes).to eq [:name] expect(described_class.key_attributes).to eq [:name]
end end
end end

View File

@@ -1,17 +1,19 @@
require 'spec_helper'
describe Puppet::Type.type(:entropy_keywords) do describe Puppet::Type.type(:entropy_keywords) do
before do before(:each) do
@provider = stub 'provider' provider = stub 'provider'
@provider.stubs(:name).returns(:parsed) provider.stubs(:name).returns(:parsed)
@provider.stubs(:ancestors).returns([Puppet::Provider::ParsedFile]) provider.stubs(:ancestors).returns([Puppet::Provider::ParsedFile])
@provider.stubs(:default_target).returns("defaulttarget") provider.stubs(:default_target).returns('defaulttarget')
described_class.stubs(:defaultprovider).returns(@provider) described_class.stubs(:defaultprovider).returns(provider)
end end
it "should be an instance of Puppet::Type::Entropy_keywords" do it 'is an instance of Puppet::Type::Entropy_keywords' do
expect(described_class.new(:name => "test", :package => "app-admin/dummy")).to be_an_instance_of Puppet::Type::Entropy_keywords expect(described_class.new(name: 'test', package: 'app-admin/dummy')).to be_an_instance_of Puppet::Type::Entropy_keywords
end end
describe "when validating attributes" do describe 'when validating attributes' do
params = [:name] params = [:name]
properties = [:package, :operator, :version, :repo, :target] properties = [:package, :operator, :version, :repo, :target]
@@ -26,37 +28,36 @@ describe Puppet::Type.type(:entropy_keywords) do
expect(described_class.attrtype(property)).to eq :property expect(described_class.attrtype(property)).to eq :property
end end
end end
end end
it "should have name as the namevar" do it 'has name as the namevar' do
expect(described_class.key_attributes).to eq [:name] expect(described_class.key_attributes).to eq [:name]
end end
describe "when validating the target property" do describe 'when validating the target property' do
it "should default to the provider's default target" do it "defaults to the provider's default target" do
expect(described_class.new(:name => "test", :package => "app-admin/dummy").should(:target)).to eq "defaulttarget" expect(described_class.new(name: 'test', package: 'app-admin/dummy').should(:target)).to eq 'defaulttarget'
end end
end end
describe "when validating required properties" do describe 'when validating required properties' do
it "should raise an error when a version is passed with no package" do it 'raises 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')
}.to raise_error(Puppet::Error, /Package is required/) }.to raise_error(Puppet::Error, %r{Package is required})
end end
it "should raise an error when an operator is passed with no version" do it 'raises an error when an operator is passed with no version' do
expect { expect {
described_class.new(:name => "test", :package => "app-admin/dummy", :operator => "<=") described_class.new(name: 'test', package: 'app-admin/dummy', operator: '<=')
}.to raise_error(Puppet::Error, /Version is required/) }.to raise_error(Puppet::Error, %r{Version is required})
end end
end end
describe "when the catalog includes a matching package" do describe 'when the catalog includes a matching package' do
it "should have an autobefore relationship" do it 'has an autobefore relationship' do
resource = described_class.new(:name => "test", :package => "app-admin/dummy") resource = described_class.new(name: 'test', package: 'app-admin/dummy')
package = Puppet::Type.type(:package).new(:title => 'app-admin/dummy') package = Puppet::Type.type(:package).new(title: 'app-admin/dummy')
catalog = Puppet::Resource::Catalog.new catalog = Puppet::Resource::Catalog.new
catalog.add_resource package catalog.add_resource package

View File

@@ -0,0 +1,34 @@
require 'spec_helper'
describe Puppet::Type.type(:entropy_repo) do
before(:each) do
provider = stub 'provider'
provider.stubs(:name).returns(:file)
described_class.stubs(:defaultprovider).returns(provider)
end
it 'is an instance of Puppet::Type::Entropy_repo' do
expect(described_class.new(name: 'test')).to be_an_instance_of Puppet::Type::Entropy_repo
end
describe 'when validating attributes' do
params = [:name]
properties = [:repo_type, :enabled]
params.each do |param|
it "should have the #{param} param" do
expect(described_class.attrtype(param)).to eq :param
end
end
properties.each do |property|
it "should have the #{property} property" do
expect(described_class.attrtype(property)).to eq :property
end
end
end
it 'has name as the namevar' do
expect(described_class.key_attributes).to eq [:name]
end
end

View File

@@ -5,27 +5,27 @@ require 'puppet/type/entropy_splitdebug'
require 'puppet/type/entropy_splitdebug_mask' require 'puppet/type/entropy_splitdebug_mask'
types = { types = {
:entropy_mask => Puppet::Type::Entropy_mask, entropy_mask: Puppet::Type::Entropy_mask,
:entropy_unmask => Puppet::Type::Entropy_unmask, entropy_unmask: Puppet::Type::Entropy_unmask,
:entropy_splitdebug => Puppet::Type::Entropy_splitdebug, entropy_splitdebug: Puppet::Type::Entropy_splitdebug,
:entropy_splitdebug_mask => Puppet::Type::Entropy_splitdebug_mask, entropy_splitdebug_mask: Puppet::Type::Entropy_splitdebug_mask,
} }
types.each do |type_name, type| types.each do |type_name, type|
describe Puppet::Type.type(type_name) do describe Puppet::Type.type(type_name) do
before do before(:each) do
@provider = stub 'provider' provider = stub 'provider'
@provider.stubs(:name).returns(:parsed) provider.stubs(:name).returns(:parsed)
@provider.stubs(:ancestors).returns([Puppet::Provider::ParsedFile]) provider.stubs(:ancestors).returns([Puppet::Provider::ParsedFile])
@provider.stubs(:default_target).returns("defaulttarget") provider.stubs(:default_target).returns('defaulttarget')
described_class.stubs(:defaultprovider).returns(@provider) described_class.stubs(:defaultprovider).returns(provider)
end end
it "should be an instance of #{type.class.name}" do it "should be an instance of #{type.class.name}" do
expect(described_class.new(:name => "test", :package => "app-admin/dummy")).to be_an_instance_of type expect(described_class.new(name: 'test', package: 'app-admin/dummy')).to be_an_instance_of type
end end
describe "when validating attributes" do describe 'when validating attributes' do
params = [:name] params = [:name]
properties = [:package, :operator, :version, :slot, :use, :tag, :repo, :target] properties = [:package, :operator, :version, :slot, :use, :tag, :repo, :target]
@@ -40,32 +40,31 @@ types.each do |type_name, type|
expect(described_class.attrtype(property)).to eq :property expect(described_class.attrtype(property)).to eq :property
end end
end end
end end
it "should have name as the namevar" do it 'has name as the namevar' do
expect(described_class.key_attributes).to eq [:name] expect(described_class.key_attributes).to eq [:name]
end end
describe "when validating the target property" do describe 'when validating the target property' do
it "should default to the provider's default target" do it "defaults to the provider's default target" do
expect(described_class.new(:name => "test", :package => "app-admin/dummy").should(:target)).to eq "defaulttarget" expect(described_class.new(name: 'test', package: 'app-admin/dummy').should(:target)).to eq 'defaulttarget'
end end
end end
describe "when validating required properties" do describe 'when validating required properties' do
packages = [ packages = [
'virtual/package', 'virtual/package',
'package', 'package',
'package-with-dash', 'package-with-dash',
'package_with_underscores', 'package_with_underscores',
'category-123/package2', 'category-123/package2',
'category.with.dots/package' 'category.with.dots/package',
] ]
packages.each do |package| packages.each do |package|
it "should accept valid package name #{package}" do it "should accept valid package name #{package}" do
expect { expect {
described_class.new(:name => 'test', :package => package) described_class.new(name: 'test', package: package)
}.not_to raise_error }.not_to raise_error
end end
end end
@@ -79,28 +78,28 @@ types.each do |type_name, type|
packages.each do |package| packages.each do |package|
it "should reject invalid package name #{package}" do it "should reject invalid package name #{package}" do
expect { expect {
described_class.new(:name => 'test', :package => package) described_class.new(name: 'test', package: package)
}.to raise_error(Puppet::Error) }.to raise_error(Puppet::Error)
end end
end end
it "should raise an error when a version is passed with no package" do it 'raises 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')
}.to raise_error(Puppet::Error, /Package is required/) }.to raise_error(Puppet::Error, %r{Package is required})
end end
it "should raise an error when an operator is passed with no version" do it 'raises an error when an operator is passed with no version' do
expect { expect {
described_class.new(:name => "test", :package => "app-admin/dummy", :operator => "<=") described_class.new(name: 'test', package: 'app-admin/dummy', operator: '<=')
}.to raise_error(Puppet::Error, /Version is required/) }.to raise_error(Puppet::Error, %r{Version is required})
end end
end end
describe "when the catalog includes a matching package" do describe 'when the catalog includes a matching package' do
it "should have an autobefore relationship" do it 'has an autobefore relationship' do
resource = described_class.new(:name => "test", :package => "app-admin/dummy") resource = described_class.new(name: 'test', package: 'app-admin/dummy')
package = Puppet::Type.type(:package).new(:title => 'app-admin/dummy') package = Puppet::Type.type(:package).new(title: 'app-admin/dummy')
catalog = Puppet::Resource::Catalog.new catalog = Puppet::Resource::Catalog.new
catalog.add_resource package catalog.add_resource package

7
tasks/cleanup.json Normal file
View File

@@ -0,0 +1,7 @@
{
"puppet_task_version": 1,
"supports_noop": false,
"description": "Run `equo cleanup` on target nodes to free up disk space used by downloaded packages",
"parameters": {
}
}

3
tasks/cleanup.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
/usr/bin/equo cleanup

1
vendor/.gitignore vendored
View File

@@ -1 +0,0 @@
bundle