From 7b5f189acf383e60befe0e4eaf7084d85fe2b928 Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Sat, 8 Oct 2016 20:22:10 +0100 Subject: [PATCH] Add a type/provider to handle enman repos --- lib/puppet/provider/enman_repo/enman.rb | 60 +++++++++++++++++++++++++ lib/puppet/type/enman_repo.rb | 11 +++++ 2 files changed, 71 insertions(+) create mode 100644 lib/puppet/provider/enman_repo/enman.rb create mode 100644 lib/puppet/type/enman_repo.rb diff --git a/lib/puppet/provider/enman_repo/enman.rb b/lib/puppet/provider/enman_repo/enman.rb new file mode 100644 index 0000000..1f4afd9 --- /dev/null +++ b/lib/puppet/provider/enman_repo/enman.rb @@ -0,0 +1,60 @@ +require 'open3' + +Puppet::Type.type(:enman_repo).provide(:enman) do + desc "Enman provider for Enman Repositories" + + defaultfor :operatingsystem => :sabayon + + commands({:enman => "enman"}) + + mk_resource_methods + + def initialize(value={}) + super(value) + end + + def create + enman("add", resource[:name]) + @property_hash[:ensure] = :present + end + + def destroy + enman("remove", resource[:name]) + @property_hash[:ensure] = :absent + end + + def exists? + @property_hash[:ensure] == :present + end + + def self.instances + all_installed = enman("list", "--quiet", "--installed").chomp.split + all_available = enman("list", "--quiet", "--available").chomp.split + + all_available.collect do |available_repo| + repo = { + :name => available_repo, + :ensure => all_installed.include?(available_repo) ? :present : :absent, + :provider => :enman_repo, + } + + Puppet.debug(repo) + new(repo) + end + + end + + def self.prefetch(resources) + available_repos = self.instances() + + resources.each do |name, resource| + if provider = available_repos.find { |r| r.name == name } + resources[name].provider = provider + end + end + end + +end + +# vim: set ts=2 shiftwidth=2 expandtab : + diff --git a/lib/puppet/type/enman_repo.rb b/lib/puppet/type/enman_repo.rb new file mode 100644 index 0000000..1a40426 --- /dev/null +++ b/lib/puppet/type/enman_repo.rb @@ -0,0 +1,11 @@ +Puppet::Type.newtype(:enman_repo) do + @desc = "foo" + + ensurable + + newparam(:name) do + desc "Name of the Enman Repository" + isnamevar + end + +end