summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/application/configurer.rb4
-rw-r--r--lib/puppet/application/interface.rb2
-rw-r--r--lib/puppet/application/interface_base.rb7
-rw-r--r--lib/puppet/interface.rb62
-rw-r--r--lib/puppet/interface/certificate_request.rb4
-rw-r--r--lib/puppet/interface/certificate_revocation_list.rb4
-rw-r--r--lib/puppet/interface/configurer.rb12
-rw-r--r--lib/puppet/interface/interface_collection.rb16
-rw-r--r--lib/puppet/interface/key.rb4
-rw-r--r--lib/puppet/interface/resource.rb4
-rw-r--r--lib/puppet/interface/resource_type.rb4
-rw-r--r--lib/puppet/interface/status.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/catalog.rb (renamed from lib/puppet/interface/catalog.rb)4
-rw-r--r--lib/puppet/interface/v0.0.1/catalog/select.rb (renamed from lib/puppet/interface/catalog/select.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/certificate.rb (renamed from lib/puppet/interface/certificate.rb)4
-rw-r--r--lib/puppet/interface/v0.0.1/certificate_request.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/certificate_revocation_list.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/config.rb (renamed from lib/puppet/interface/config.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/configurer.rb12
-rw-r--r--lib/puppet/interface/v0.0.1/facts.rb (renamed from lib/puppet/interface/facts.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/file.rb (renamed from lib/puppet/interface/file.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/key.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/node.rb (renamed from lib/puppet/interface/node.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/report.rb (renamed from lib/puppet/interface/report.rb)2
-rw-r--r--lib/puppet/interface/v0.0.1/resource.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/resource_type.rb4
-rw-r--r--lib/puppet/interface/v0.0.1/status.rb4
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