diff options
Diffstat (limited to 'lib')
27 files changed, 96 insertions, 87 deletions
diff --git a/lib/puppet/application/configurer.rb b/lib/puppet/application/configurer.rb index 378364430..5c9af37d7 100644 --- a/lib/puppet/application/configurer.rb +++ b/lib/puppet/application/configurer.rb @@ -17,7 +17,7 @@ class Puppet::Application::Configurer < Puppet::Application end def run_command - report = Puppet::Interface.interface(:configurer).synchronize(Puppet[:certname]) - Puppet::Interface.interface(:report).submit(report) + report = Puppet::Interface[:configurer, '0.0.1'].synchronize(Puppet[:certname]) + Puppet::Interface[:report, '0.0.1'].submit(report) end end diff --git a/lib/puppet/application/interface.rb b/lib/puppet/application/interface.rb index 10823e920..f447dc30d 100644 --- a/lib/puppet/application/interface.rb +++ b/lib/puppet/application/interface.rb @@ -81,7 +81,7 @@ class Puppet::Application::Interface < Puppet::Application end def actions(indirection) - return [] unless interface = Puppet::Interface.interface(indirection) + return [] unless interface = Puppet::Interface[indirection, '0.0.1'] interface.load_actions return interface.actions.sort { |a,b| a.to_s <=> b.to_s } end diff --git a/lib/puppet/application/interface_base.rb b/lib/puppet/application/interface_base.rb index 7a31ce323..c1c02040a 100644 --- a/lib/puppet/application/interface_base.rb +++ b/lib/puppet/application/interface_base.rb @@ -71,10 +71,11 @@ class Puppet::Application::InterfaceBase < Puppet::Application @type = self.class.name.to_s.sub(/.+:/, '').downcase.to_sym - unless Puppet::Interface.interface?(@type) - raise "Could not find interface '#{@type}'" + # TODO: These should be configurable versions. + unless Puppet::Interface.interface?(@type, '0.0.1') + raise "Could not find version #{1} of interface '#{@type}'" end - @interface = Puppet::Interface.interface(@type) + @interface = Puppet::Interface[@type, '0.0.1'] @format ||= @interface.default_format # We copy all of the app options to the interface. diff --git a/lib/puppet/interface.rb b/lib/puppet/interface.rb index f82d6235c..64f1bfe49 100644 --- a/lib/puppet/interface.rb +++ b/lib/puppet/interface.rb @@ -10,37 +10,39 @@ class Puppet::Interface include Puppet::Util - @interfaces = {} - - # This is just so we can search for actions. We only use its - # list of directories to search. - # Can't we utilize an external autoloader, or simply use the $LOAD_PATH? -pvb - def self.autoloader - @autoloader ||= Puppet::Util::Autoload.new(:application, "puppet/interface") - end + class << self + # This is just so we can search for actions. We only use its + # list of directories to search. + # Can't we utilize an external autoloader, or simply use the $LOAD_PATH? -pvb + def autoloader + @autoloader ||= Puppet::Util::Autoload.new(:application, "puppet/interface") + end - def self.interfaces - Puppet::Interface::InterfaceCollection.interfaces - end + def interfaces + Puppet::Interface::InterfaceCollection.interfaces + end - def self.interface?(name) - Puppet::Interface::InterfaceCollection.interface?(name) - end + def interface?(name, version) + Puppet::Interface::InterfaceCollection.interface?(name, version) + end - def self.register(instance) - Puppet::Interface::InterfaceCollection.register(instance) - end + def register(instance) + Puppet::Interface::InterfaceCollection.register(instance) + end - def self.interface(name, &blk) - if interface?(name) - interface = Puppet::Interface::InterfaceCollection[name] - interface.instance_eval(&blk) if blk - else - interface = new(name, &blk) - Puppet::Interface::InterfaceCollection.register(interface) - interface.load_actions + def define(name, version, &blk) + if interface?(name, version) + interface = Puppet::Interface::InterfaceCollection[name, version] + interface.instance_eval(&blk) if blk + else + interface = self.new(name, :version => version, &blk) + Puppet::Interface::InterfaceCollection.register(interface) + interface.load_actions + end + return interface end - return interface + + alias :[] :define end attr_accessor :default_format @@ -49,10 +51,14 @@ class Puppet::Interface self.default_format = format.to_sym end - attr_accessor :type, :verb, :arguments, :options + attr_accessor :type, :verb, :version, :arguments, :options attr_reader :name def initialize(name, options = {}, &block) + unless options[:version] + raise ArgumentError, "Interface #{name} declared without version!" + end + @name = Puppet::Interface::InterfaceCollection.underscorize(name) @default_format = :pson @@ -86,6 +92,6 @@ class Puppet::Interface end def to_s - "Puppet::Interface(#{name})" + "Puppet::Interface(#{name}, :version => #{version.inspect})" end end diff --git a/lib/puppet/interface/certificate_request.rb b/lib/puppet/interface/certificate_request.rb deleted file mode 100644 index b85c15fef..000000000 --- a/lib/puppet/interface/certificate_request.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:certificate_request) do -end diff --git a/lib/puppet/interface/certificate_revocation_list.rb b/lib/puppet/interface/certificate_revocation_list.rb deleted file mode 100644 index 956fb6494..000000000 --- a/lib/puppet/interface/certificate_revocation_list.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:certificate_revocation_list) do -end diff --git a/lib/puppet/interface/configurer.rb b/lib/puppet/interface/configurer.rb deleted file mode 100644 index 0d21c4d72..000000000 --- a/lib/puppet/interface/configurer.rb +++ /dev/null @@ -1,12 +0,0 @@ -require 'puppet/interface' - -Puppet::Interface.interface(:configurer) do - action(:synchronize) do - invoke do |certname| - facts = Puppet::Interface.interface(:facts).find(certname) - catalog = Puppet::Interface.interface(:catalog).download(certname, facts) - report = Puppet::Interface.interface(:catalog).apply(catalog) - report - end - end -end diff --git a/lib/puppet/interface/interface_collection.rb b/lib/puppet/interface/interface_collection.rb index 47ed702aa..d626c4f72 100644 --- a/lib/puppet/interface/interface_collection.rb +++ b/lib/puppet/interface/interface_collection.rb @@ -1,7 +1,7 @@ require 'puppet/interface' module Puppet::Interface::InterfaceCollection - @interfaces = {} + @interfaces = Hash.new { |hash, key| hash[key] = {} } def self.interfaces unless @loaded @@ -24,20 +24,22 @@ module Puppet::Interface::InterfaceCollection return @interfaces.keys end - def self.[](name) - @interfaces[underscorize(name)] if interface?(name) + def self.[](name, version) + @interfaces[underscorize(name)][version] if interface?(name, version) end - def self.interface?(name) + def self.interface?(name, version) name = underscorize(name) - require "puppet/interface/#{name}" unless @interfaces.has_key? name - return @interfaces.has_key? name + unless @interfaces.has_key?(name) && @interfaces[name].has_key?(version) + require "puppet/interface/v#{version}/#{name}" + end + return @interfaces.has_key?(name) && @interfaces[name].has_key?(version) rescue LoadError return false end def self.register(interface) - @interfaces[underscorize(interface.name)] = interface + @interfaces[underscorize(interface.name)][interface.version] = interface end def self.underscorize(name) diff --git a/lib/puppet/interface/key.rb b/lib/puppet/interface/key.rb deleted file mode 100644 index 57519883d..000000000 --- a/lib/puppet/interface/key.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:key) do -end diff --git a/lib/puppet/interface/resource.rb b/lib/puppet/interface/resource.rb deleted file mode 100644 index 130f40fce..000000000 --- a/lib/puppet/interface/resource.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:resource) do -end diff --git a/lib/puppet/interface/resource_type.rb b/lib/puppet/interface/resource_type.rb deleted file mode 100644 index 70bf3b95a..000000000 --- a/lib/puppet/interface/resource_type.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:resource_type) do -end diff --git a/lib/puppet/interface/status.rb b/lib/puppet/interface/status.rb deleted file mode 100644 index 432d1ce54..000000000 --- a/lib/puppet/interface/status.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'puppet/interface/indirector' - -Puppet::Interface::Indirector.interface(:status) do -end diff --git a/lib/puppet/interface/catalog.rb b/lib/puppet/interface/v0.0.1/catalog.rb index defe32127..7d61528bc 100644 --- a/lib/puppet/interface/catalog.rb +++ b/lib/puppet/interface/v0.0.1/catalog.rb @@ -1,6 +1,6 @@ require 'puppet/interface/indirector' -Puppet::Interface::Indirector.interface(:catalog) do +Puppet::Interface::Indirector.define(:catalog, '0.0.1') do action(:apply) do invoke do |catalog| report = Puppet::Transaction::Report.new("apply") @@ -28,7 +28,7 @@ Puppet::Interface::Indirector.interface(:catalog) do facts_to_upload = {:facts_format => :b64_zlib_yaml, :facts => CGI.escape(facts.render(:b64_zlib_yaml))} catalog = nil retrieval_duration = thinmark do - catalog = Puppet::Interface.interface(:catalog).find(certname, facts_to_upload) + catalog = Puppet::Interface[:catalog, '0.0.1'].find(certname, facts_to_upload) end catalog = catalog.to_ral catalog.finalize diff --git a/lib/puppet/interface/catalog/select.rb b/lib/puppet/interface/v0.0.1/catalog/select.rb index 32d9b7c45..35f1a1e0b 100644 --- a/lib/puppet/interface/catalog/select.rb +++ b/lib/puppet/interface/v0.0.1/catalog/select.rb @@ -1,5 +1,5 @@ # Select and show a list of resources of a given type. -Puppet::Interface.interface(:catalog) do +Puppet::Interface.define(:catalog, '0.0.1') do action :select do invoke do |host,type| catalog = Puppet::Resource::Catalog.indirection.find(host) diff --git a/lib/puppet/interface/certificate.rb b/lib/puppet/interface/v0.0.1/certificate.rb index 86ac6d6ea..2615e3d86 100644 --- a/lib/puppet/interface/certificate.rb +++ b/lib/puppet/interface/v0.0.1/certificate.rb @@ -1,7 +1,7 @@ require 'puppet/interface/indirector' require 'puppet/ssl/host' -Puppet::Interface::Indirector.interface(:certificate) do +Puppet::Interface::Indirector.define(:certificate, '0.0.1') do action :generate do invoke do |name| @@ -19,7 +19,7 @@ Puppet::Interface::Indirector.interface(:certificate) do end end - action :sign do |name| + action :sign do invoke do |name| Puppet::SSL::Host.indirection.save(Puppet::SSL::Host.new(name)) end diff --git a/lib/puppet/interface/v0.0.1/certificate_request.rb b/lib/puppet/interface/v0.0.1/certificate_request.rb new file mode 100644 index 000000000..e5ed1b51e --- /dev/null +++ b/lib/puppet/interface/v0.0.1/certificate_request.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:certificate_request, '0.0.1') do +end diff --git a/lib/puppet/interface/v0.0.1/certificate_revocation_list.rb b/lib/puppet/interface/v0.0.1/certificate_revocation_list.rb new file mode 100644 index 000000000..f6d8a3d6d --- /dev/null +++ b/lib/puppet/interface/v0.0.1/certificate_revocation_list.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:certificate_revocation_list, '0.0.1') do +end diff --git a/lib/puppet/interface/config.rb b/lib/puppet/interface/v0.0.1/config.rb index 79d2ee7c1..b33e19bb4 100644 --- a/lib/puppet/interface/config.rb +++ b/lib/puppet/interface/v0.0.1/config.rb @@ -1,6 +1,6 @@ require 'puppet/interface' -Puppet::Interface.interface(:config) do +Puppet::Interface.define(:config, '0.0.1') do action(:print) do invoke do |*args| Puppet.settings[:configprint] = args.join(",") diff --git a/lib/puppet/interface/v0.0.1/configurer.rb b/lib/puppet/interface/v0.0.1/configurer.rb new file mode 100644 index 000000000..38536b684 --- /dev/null +++ b/lib/puppet/interface/v0.0.1/configurer.rb @@ -0,0 +1,12 @@ +require 'puppet/interface' + +Puppet::Interface.define(:configurer, '0.0.1') do + action(:synchronize) do + invoke do |certname| + facts = Puppet::Interface[:facts, '0.0.1'].find(certname) + catalog = Puppet::Interface[:catalog, '0.0.1'].download(certname, facts) + report = Puppet::Interface[:catalog, '0.0.1'].apply(catalog) + report + end + end +end diff --git a/lib/puppet/interface/facts.rb b/lib/puppet/interface/v0.0.1/facts.rb index 97e22714b..c4bbad845 100644 --- a/lib/puppet/interface/facts.rb +++ b/lib/puppet/interface/v0.0.1/facts.rb @@ -1,7 +1,7 @@ require 'puppet/interface/indirector' require 'puppet/node/facts' -Puppet::Interface::Indirector.interface(:facts) do +Puppet::Interface::Indirector.define(:facts, '0.0.1') do set_default_format :yaml # Upload our facts to the server diff --git a/lib/puppet/interface/file.rb b/lib/puppet/interface/v0.0.1/file.rb index f38af2b92..91904e8e0 100644 --- a/lib/puppet/interface/file.rb +++ b/lib/puppet/interface/v0.0.1/file.rb @@ -1,5 +1,5 @@ require 'puppet/interface/indirector' -Puppet::Interface::Indirector.interface(:file) do +Puppet::Interface::Indirector.define(:file, '0.0.1') do set_indirection_name :file_bucket_file end diff --git a/lib/puppet/interface/v0.0.1/key.rb b/lib/puppet/interface/v0.0.1/key.rb new file mode 100644 index 000000000..fbc9b67b1 --- /dev/null +++ b/lib/puppet/interface/v0.0.1/key.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:key, '0.0.1') do +end diff --git a/lib/puppet/interface/node.rb b/lib/puppet/interface/v0.0.1/node.rb index 8940fd7dd..4ecec1478 100644 --- a/lib/puppet/interface/node.rb +++ b/lib/puppet/interface/v0.0.1/node.rb @@ -1,5 +1,5 @@ require 'puppet/interface/indirector' -Puppet::Interface::Indirector.interface(:node) do +Puppet::Interface::Indirector.define(:node, '0.0.1') do set_default_format :yaml end diff --git a/lib/puppet/interface/report.rb b/lib/puppet/interface/v0.0.1/report.rb index 56a58f6aa..bacb46e70 100644 --- a/lib/puppet/interface/report.rb +++ b/lib/puppet/interface/v0.0.1/report.rb @@ -1,6 +1,6 @@ require 'puppet/interface/indirector' -Puppet::Interface::Indirector.interface(:report) do +Puppet::Interface::Indirector.define(:report, '0.0.1') do action(:submit) do invoke do |report| begin diff --git a/lib/puppet/interface/v0.0.1/resource.rb b/lib/puppet/interface/v0.0.1/resource.rb new file mode 100644 index 000000000..1a6f3b69d --- /dev/null +++ b/lib/puppet/interface/v0.0.1/resource.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:resource, '0.0.1') do +end diff --git a/lib/puppet/interface/v0.0.1/resource_type.rb b/lib/puppet/interface/v0.0.1/resource_type.rb new file mode 100644 index 000000000..6f5547c4d --- /dev/null +++ b/lib/puppet/interface/v0.0.1/resource_type.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:resource_type, '0.0.1') do +end diff --git a/lib/puppet/interface/v0.0.1/status.rb b/lib/puppet/interface/v0.0.1/status.rb new file mode 100644 index 000000000..7f4b56a2b --- /dev/null +++ b/lib/puppet/interface/v0.0.1/status.rb @@ -0,0 +1,4 @@ +require 'puppet/interface/indirector' + +Puppet::Interface::Indirector.define(:status, '0.0.1') do +end |