default server in remote filebuckets

With the path parameter set to false, the server defaults
to Puppet[:server]. This allows to use a remote filebucket without
syncing the servername there with the one used on the config file.

To use the default server, this manifest can be used:
filebucket { main: path => false }

A related bug report is:
http://projects.reductivelabs.com/issues/2456
This commit is contained in:
Till Maas 2009-08-02 11:20:30 +02:00 коммит произвёл James Turnbull
Родитель 1f8ef6086c
Коммит 266aafa6ef
3 изменённых файлов: 62 добавлений и 23 удалений

Просмотреть файл

@ -34,9 +34,10 @@ module Puppet
end
newparam(:server) do
desc "The server providing the filebucket. If this is
not specified, then the bucket is local and *path* must be
specified."
desc "The server providing the remote filebucket. If this is not
specified then *path* is checked. If it is set, then the
bucket is local. Otherwise the puppetmaster server specified
in the config or at the commandline is used."
end
newparam(:port) do
@ -48,8 +49,8 @@ module Puppet
newparam(:path) do
desc "The path to the local filebucket. If this is
not specified, then the bucket is remote and *server* must be
specified."
unset, then the bucket is remote. The parameter *server* must
can be specified to set the remote server."
defaultto { Puppet[:clientbucketdir] }
end
@ -72,30 +73,37 @@ module Puppet
end
def mkbucket
# Default is a local filebucket, if no server is given.
# If the default path has been removed, too, then
# the puppetmaster is used as default server
type = "local"
if self[:server]
begin
@bucket = Puppet::Network::Client.client(:Dipper).new(
:Server => self[:server],
:Port => self[:port]
)
rescue => detail
self.fail(
"Could not create remote filebucket: %s" % detail
)
end
else
begin
type = "remote"
server = self[:server]
elsif not self[:path]
type = "remote"
server = Puppet[:server]
end
begin
if type == "local"
@bucket = Puppet::Network::Client.client(:Dipper).new(
:Path => self[:path]
)
rescue => detail
if Puppet[:trace]
puts detail.backtrace
end
self.fail(
"Could not create local filebucket: %s" % detail
else
@bucket = Puppet::Network::Client.client(:Dipper).new(
:Server => server,
:Port => self[:port]
)
end
rescue => detail
if Puppet[:trace]
puts detail.backtrace
end
self.fail(
"Could not create %s filebucket: %s" % [type, detail]
)
end
@bucket.name = self.name

Просмотреть файл

@ -0,0 +1,30 @@
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../../spec_helper'
describe Puppet::Type.type(:filebucket) do
it "be local by default" do
bucket = Puppet::Type.type(:filebucket).new :name => "main"
bucket.name.should == "main"
bucket.bucket.should be_instance_of(Puppet::Network::Client::Dipper)
bucket.bucket.local.should == true
end
it "not be local if path is false" do
bucket = Puppet::Type.type(:filebucket).new :name => "main", :path => false
bucket.name.should == "main"
bucket.bucket.should be_instance_of(Puppet::Network::Client::Dipper)
bucket.bucket.local.should_not == true
end
it "not be local if a server is specified" do
bucket = Puppet::Type.type(:filebucket).new :name => "main", :server => "puppet"
bucket.name.should == "main"
bucket.bucket.should be_instance_of(Puppet::Network::Client::Dipper)
bucket.bucket.local.should_not == true
end
end

Просмотреть файл

@ -5,6 +5,7 @@
require 'puppettest'
require 'puppettest/runnable_test'
require 'test/unit'
class PuppetTest::TestCase < Test::Unit::TestCase
include PuppetTest