puppet 3.6.1-x86-mingw32 → 3.6.2-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/bin/puppet +4 -0
- data/ext/debian/puppetmaster-passenger.postinst +91 -41
- data/ext/rack/example-passenger-vhost.conf +4 -0
- data/lib/puppet/configurer/downloader.rb +3 -3
- data/lib/puppet/configurer/plugin_handler.rb +2 -1
- data/lib/puppet/defaults.rb +22 -3
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +9 -2
- data/lib/puppet/node/environment.rb +2 -0
- data/lib/puppet/parser/ast.rb +0 -1
- data/lib/puppet/parser/ast/collexpr.rb +1 -1
- data/lib/puppet/parser/functions.rb +26 -13
- data/lib/puppet/parser/resource.rb +11 -0
- data/lib/puppet/resource/catalog.rb +5 -2
- data/lib/puppet/settings.rb +53 -16
- data/lib/puppet/settings/array_setting.rb +17 -0
- data/lib/puppet/settings/base_setting.rb +22 -1
- data/lib/puppet/transaction.rb +1 -1
- data/lib/puppet/type/user.rb +4 -3
- data/lib/puppet/util/logging.rb +1 -0
- data/lib/puppet/util/tagging.rb +7 -6
- data/lib/puppet/version.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +28 -0
- data/spec/integration/parser/future_compiler_spec.rb +29 -0
- data/spec/integration/type/user_spec.rb +31 -0
- data/spec/unit/configurer/downloader_spec.rb +67 -35
- data/spec/unit/configurer/plugin_handler_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +36 -0
- data/spec/unit/parser/functions_spec.rb +1 -4
- data/spec/unit/settings/array_setting_spec.rb +39 -0
- data/spec/unit/settings_spec.rb +69 -76
- data/spec/unit/type/user_spec.rb +13 -6
- data/spec/unit/util/logging_spec.rb +6 -0
- data/spec/unit/util/tagging_spec.rb +31 -0
- metadata +3131 -3163
- data/lib/puppet/parser/ast/tag.rb +0 -24
@@ -184,11 +184,14 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
184
184
|
# The relationship_graph form of the catalog. This contains all of the
|
185
185
|
# dependency edges that are used for determining order.
|
186
186
|
#
|
187
|
+
# @param given_prioritizer [Puppet::Graph::Prioritizer] The prioritization
|
188
|
+
# strategy to use when constructing the relationship graph. Defaults the
|
189
|
+
# being determined by the `ordering` setting.
|
187
190
|
# @return [Puppet::Graph::RelationshipGraph]
|
188
191
|
# @api public
|
189
|
-
def relationship_graph
|
192
|
+
def relationship_graph(given_prioritizer = nil)
|
190
193
|
if @relationship_graph.nil?
|
191
|
-
@relationship_graph = Puppet::Graph::RelationshipGraph.new(prioritizer)
|
194
|
+
@relationship_graph = Puppet::Graph::RelationshipGraph.new(given_prioritizer || prioritizer)
|
192
195
|
@relationship_graph.populate_from(self)
|
193
196
|
end
|
194
197
|
@relationship_graph
|
data/lib/puppet/settings.rb
CHANGED
@@ -11,6 +11,7 @@ class Puppet::Settings
|
|
11
11
|
require 'puppet/settings/base_setting'
|
12
12
|
require 'puppet/settings/string_setting'
|
13
13
|
require 'puppet/settings/enum_setting'
|
14
|
+
require 'puppet/settings/array_setting'
|
14
15
|
require 'puppet/settings/file_setting'
|
15
16
|
require 'puppet/settings/directory_setting'
|
16
17
|
require 'puppet/settings/file_or_directory_setting'
|
@@ -93,6 +94,8 @@ class Puppet::Settings
|
|
93
94
|
@used = []
|
94
95
|
|
95
96
|
@hooks_to_call_on_application_initialization = []
|
97
|
+
@deprecated_setting_names = []
|
98
|
+
@deprecated_settings_that_have_been_configured = []
|
96
99
|
|
97
100
|
@translate = Puppet::Settings::ValueTranslator.new
|
98
101
|
@config_file_parser = Puppet::Settings::ConfigFile.new(@translate)
|
@@ -109,7 +112,9 @@ class Puppet::Settings
|
|
109
112
|
# @return [Object] the value of the setting
|
110
113
|
# @api private
|
111
114
|
def [](param)
|
112
|
-
|
115
|
+
if @deprecated_setting_names.include?(param)
|
116
|
+
issue_deprecation_warning(setting(param), "Accessing '#{param}' as a setting is deprecated.")
|
117
|
+
end
|
113
118
|
value(param)
|
114
119
|
end
|
115
120
|
|
@@ -118,7 +123,9 @@ class Puppet::Settings
|
|
118
123
|
# @param value [Object] the new value of the setting
|
119
124
|
# @api private
|
120
125
|
def []=(param, value)
|
121
|
-
|
126
|
+
if @deprecated_setting_names.include?(param)
|
127
|
+
issue_deprecation_warning(setting(param), "Modifying '#{param}' as a setting is deprecated.")
|
128
|
+
end
|
122
129
|
@value_sets[:memory].set(param, value)
|
123
130
|
unsafe_flush_cache
|
124
131
|
end
|
@@ -315,6 +322,7 @@ class Puppet::Settings
|
|
315
322
|
end
|
316
323
|
apply_metadata
|
317
324
|
call_hooks_deferred_to_application_initialization
|
325
|
+
issue_deprecations
|
318
326
|
|
319
327
|
@app_defaults_initialized = true
|
320
328
|
end
|
@@ -392,8 +400,8 @@ class Puppet::Settings
|
|
392
400
|
end
|
393
401
|
end
|
394
402
|
|
395
|
-
if
|
396
|
-
|
403
|
+
if s = @config[str]
|
404
|
+
@deprecated_settings_that_have_been_configured << s if s.completely_deprecated?
|
397
405
|
end
|
398
406
|
|
399
407
|
@value_sets[:cli].set(str, value)
|
@@ -533,7 +541,7 @@ class Puppet::Settings
|
|
533
541
|
# If we get here and don't have any data, we just return and don't muck with the current state of the world.
|
534
542
|
return if data.nil?
|
535
543
|
|
536
|
-
|
544
|
+
record_deprecations_from_puppet_conf(data)
|
537
545
|
|
538
546
|
# If we get here then we have some data, so we need to clear out any previous settings that may have come from
|
539
547
|
# config files.
|
@@ -656,6 +664,7 @@ class Puppet::Settings
|
|
656
664
|
:terminus => TerminusSetting,
|
657
665
|
:duration => DurationSetting,
|
658
666
|
:ttl => TTLSetting,
|
667
|
+
:array => ArraySetting,
|
659
668
|
:enum => EnumSetting,
|
660
669
|
:priority => PrioritySetting,
|
661
670
|
:autosign => AutosignSetting,
|
@@ -863,6 +872,8 @@ class Puppet::Settings
|
|
863
872
|
@hooks_to_call_on_application_initialization << tryconfig
|
864
873
|
end
|
865
874
|
end
|
875
|
+
|
876
|
+
@deprecated_setting_names << name if tryconfig.deprecated?
|
866
877
|
end
|
867
878
|
|
868
879
|
call.each do |setting|
|
@@ -1053,24 +1064,50 @@ Generated on #{Time.now}.
|
|
1053
1064
|
|
1054
1065
|
private
|
1055
1066
|
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1067
|
+
DEPRECATION_REFS = {
|
1068
|
+
[:manifest, :modulepath, :config_version, :templatedir, :manifestdir] =>
|
1069
|
+
"See http://links.puppetlabs.com/env-settings-deprecations"
|
1070
|
+
}.freeze
|
1059
1071
|
|
1060
|
-
|
1061
|
-
|
1072
|
+
# Record that we want to issue a deprecation warning later in the application
|
1073
|
+
# initialization cycle when we have settings bootstrapped to the point where
|
1074
|
+
# we can read the Puppet[:disable_warnings] setting.
|
1075
|
+
#
|
1076
|
+
# We are only recording warnings applicable to settings set in puppet.conf
|
1077
|
+
# itself.
|
1078
|
+
def record_deprecations_from_puppet_conf(puppet_conf)
|
1079
|
+
conf_sections = puppet_conf.sections.inject([]) do |accum,entry|
|
1062
1080
|
accum << entry[1] if [:main, :master, :agent, :user].include?(entry[0])
|
1063
1081
|
accum
|
1064
1082
|
end
|
1065
1083
|
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1084
|
+
conf_sections.each do |section|
|
1085
|
+
section.settings.each do |conf_setting|
|
1086
|
+
if setting = self.setting(conf_setting.name)
|
1087
|
+
@deprecated_settings_that_have_been_configured << setting if setting.deprecated?
|
1088
|
+
end
|
1069
1089
|
end
|
1090
|
+
end
|
1091
|
+
end
|
1070
1092
|
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1093
|
+
def issue_deprecations
|
1094
|
+
@deprecated_settings_that_have_been_configured.each do |setting|
|
1095
|
+
issue_deprecation_warning(setting)
|
1096
|
+
end
|
1097
|
+
end
|
1098
|
+
|
1099
|
+
def issue_deprecation_warning(setting, msg = nil)
|
1100
|
+
name = setting.name
|
1101
|
+
ref = DEPRECATION_REFS.find { |params,reference| params.include?(name) }
|
1102
|
+
ref = ref[1] if ref
|
1103
|
+
case
|
1104
|
+
when msg
|
1105
|
+
msg << " #{ref}" if ref
|
1106
|
+
Puppet.deprecation_warning(msg)
|
1107
|
+
when setting.completely_deprecated?
|
1108
|
+
Puppet.deprecation_warning("Setting #{name} is deprecated. #{ref}", "setting-#{name}")
|
1109
|
+
when setting.allowed_on_commandline?
|
1110
|
+
Puppet.deprecation_warning("Setting #{name} is deprecated in puppet.conf. #{ref}", "puppet-conf-setting-#{name}")
|
1074
1111
|
end
|
1075
1112
|
end
|
1076
1113
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Puppet::Settings::ArraySetting < Puppet::Settings::BaseSetting
|
2
|
+
|
3
|
+
def type
|
4
|
+
:array
|
5
|
+
end
|
6
|
+
|
7
|
+
def munge(value)
|
8
|
+
case value
|
9
|
+
when String
|
10
|
+
value.split(/\s*,\s*/)
|
11
|
+
when Array
|
12
|
+
value
|
13
|
+
else
|
14
|
+
raise ArgumentError, "Expected an Array or String, got a #{value.class}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -3,7 +3,7 @@ require 'puppet/settings/errors'
|
|
3
3
|
# The base setting type
|
4
4
|
class Puppet::Settings::BaseSetting
|
5
5
|
attr_accessor :name, :desc, :section, :default, :call_on_define, :call_hook
|
6
|
-
attr_reader :short
|
6
|
+
attr_reader :short, :deprecated
|
7
7
|
|
8
8
|
def self.available_call_hook_values
|
9
9
|
[:on_define_and_write, :on_initialize_and_write, :on_write_only]
|
@@ -165,4 +165,25 @@ class Puppet::Settings::BaseSetting
|
|
165
165
|
def set_meta(meta)
|
166
166
|
Puppet.notice("#{name} does not support meta data. Ignoring.")
|
167
167
|
end
|
168
|
+
|
169
|
+
def deprecated=(deprecation)
|
170
|
+
raise(ArgumentError, "'#{deprecation}' is an unknown setting deprecation state. Must be either :completely or :allowed_on_commandline") unless [:completely, :allowed_on_commandline].include?(deprecation)
|
171
|
+
@deprecated = deprecation
|
172
|
+
end
|
173
|
+
|
174
|
+
def deprecated?
|
175
|
+
!!@deprecated
|
176
|
+
end
|
177
|
+
|
178
|
+
# True if we should raise a deprecation_warning if the setting is submitted
|
179
|
+
# on the commandline or is set in puppet.conf.
|
180
|
+
def completely_deprecated?
|
181
|
+
@deprecated == :completely
|
182
|
+
end
|
183
|
+
|
184
|
+
# True if we should raise a deprecation_warning if the setting is found in
|
185
|
+
# puppet.conf, but not if the user sets it on the commandline
|
186
|
+
def allowed_on_commandline?
|
187
|
+
@deprecated == :allowed_on_commandline
|
188
|
+
end
|
168
189
|
end
|
data/lib/puppet/transaction.rb
CHANGED
data/lib/puppet/type/user.rb
CHANGED
@@ -572,7 +572,7 @@ module Puppet
|
|
572
572
|
defaultto false
|
573
573
|
end
|
574
574
|
|
575
|
-
def
|
575
|
+
def generate
|
576
576
|
return [] if self[:purge_ssh_keys].empty?
|
577
577
|
find_unmanaged_keys
|
578
578
|
end
|
@@ -639,7 +639,7 @@ module Puppet
|
|
639
639
|
#
|
640
640
|
# @return [Array<Puppet::Type::Ssh_authorized_key] a list of resources
|
641
641
|
# representing the found keys
|
642
|
-
# @see
|
642
|
+
# @see generate
|
643
643
|
# @api private
|
644
644
|
def find_unmanaged_keys
|
645
645
|
self[:purge_ssh_keys].
|
@@ -647,6 +647,7 @@ module Puppet
|
|
647
647
|
map { |f| unknown_keys_in_file(f) }.
|
648
648
|
flatten.each do |res|
|
649
649
|
res[:ensure] = :absent
|
650
|
+
res[:user] = self[:name]
|
650
651
|
@parameters.each do |name, param|
|
651
652
|
res[name] = param.value if param.metaparam?
|
652
653
|
end
|
@@ -657,7 +658,7 @@ module Puppet
|
|
657
658
|
# on the keys. These are considered names of possible ssh_authorized_keys
|
658
659
|
# resources. Keys that are managed by the present catalog are ignored.
|
659
660
|
#
|
660
|
-
# @see
|
661
|
+
# @see generate
|
661
662
|
# @api private
|
662
663
|
# @return [Array<Puppet::Type::Ssh_authorized_key] a list of resources
|
663
664
|
# representing the found keys
|
data/lib/puppet/util/logging.rb
CHANGED
@@ -65,6 +65,7 @@ module Puppet::Util::Logging
|
|
65
65
|
# @param [String] key Optional key to mark the message as unique. If not
|
66
66
|
# passed in, the originating call line will be used instead.
|
67
67
|
def deprecation_warning(message, key = nil)
|
68
|
+
return if Puppet[:disable_warnings].include?('deprecations')
|
68
69
|
$deprecation_warnings ||= {}
|
69
70
|
if $deprecation_warnings.length < 100 then
|
70
71
|
key ||= (offender = get_deprecation_offender)
|
data/lib/puppet/util/tagging.rb
CHANGED
@@ -3,12 +3,14 @@ require 'puppet/util/tag_set'
|
|
3
3
|
module Puppet::Util::Tagging
|
4
4
|
ValidTagRegex = /^\w[-\w:.]*$/
|
5
5
|
|
6
|
-
# Add a tag to
|
7
|
-
#
|
6
|
+
# Add a tag to the current tag set.
|
7
|
+
# When a tag set is used for a scope, these tags will be added to all of
|
8
|
+
# the objects contained in this scope when the objects are finished.
|
9
|
+
#
|
8
10
|
def tag(*ary)
|
9
11
|
@tags ||= new_tags
|
10
12
|
|
11
|
-
ary.each do |tag|
|
13
|
+
ary.flatten.each do |tag|
|
12
14
|
name = tag.to_s.downcase
|
13
15
|
if name =~ ValidTagRegex
|
14
16
|
@tags << name
|
@@ -16,12 +18,12 @@ module Puppet::Util::Tagging
|
|
16
18
|
@tags << section
|
17
19
|
end
|
18
20
|
else
|
19
|
-
fail(Puppet::ParseError, "Invalid tag #{name}")
|
21
|
+
fail(Puppet::ParseError, "Invalid tag '#{name}'")
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
|
-
#
|
26
|
+
# Is the receiver tagged with the given tags?
|
25
27
|
def tagged?(*tags)
|
26
28
|
not ( self.tags & tags.flatten.collect { |t| t.to_s } ).empty?
|
27
29
|
end
|
@@ -39,7 +41,6 @@ module Puppet::Util::Tagging
|
|
39
41
|
return if tags.nil? or tags == ""
|
40
42
|
|
41
43
|
tags = tags.strip.split(/\s*,\s*/) if tags.is_a?(String)
|
42
|
-
|
43
44
|
tags.each {|t| tag(t) }
|
44
45
|
end
|
45
46
|
|
data/lib/puppet/version.rb
CHANGED
@@ -501,6 +501,34 @@ describe "Puppet::Parser::Compiler" do
|
|
501
501
|
end
|
502
502
|
end
|
503
503
|
end
|
504
|
+
|
505
|
+
context 'when evaluating collection' do
|
506
|
+
it 'matches on container inherited tags' do
|
507
|
+
Puppet[:code] = <<-MANIFEST
|
508
|
+
class xport_test {
|
509
|
+
tag 'foo_bar'
|
510
|
+
@notify { 'nbr1':
|
511
|
+
message => 'explicitly tagged',
|
512
|
+
tag => 'foo_bar'
|
513
|
+
}
|
514
|
+
|
515
|
+
@notify { 'nbr2':
|
516
|
+
message => 'implicitly tagged'
|
517
|
+
}
|
518
|
+
|
519
|
+
Notify <| tag == 'foo_bar' |> {
|
520
|
+
message => 'overridden'
|
521
|
+
}
|
522
|
+
}
|
523
|
+
include xport_test
|
524
|
+
MANIFEST
|
525
|
+
|
526
|
+
catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
|
527
|
+
|
528
|
+
expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
|
529
|
+
expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
|
530
|
+
end
|
531
|
+
end
|
504
532
|
end
|
505
533
|
|
506
534
|
describe 'using classic parser' do
|
@@ -367,4 +367,33 @@ describe "Puppet::Parser::Compiler" do
|
|
367
367
|
end
|
368
368
|
end
|
369
369
|
end
|
370
|
+
|
371
|
+
context 'when evaluating collection' do
|
372
|
+
it 'matches on container inherited tags' do
|
373
|
+
Puppet[:code] = <<-MANIFEST
|
374
|
+
class xport_test {
|
375
|
+
tag('foo_bar')
|
376
|
+
@notify { 'nbr1':
|
377
|
+
message => 'explicitly tagged',
|
378
|
+
tag => 'foo_bar'
|
379
|
+
}
|
380
|
+
|
381
|
+
@notify { 'nbr2':
|
382
|
+
message => 'implicitly tagged'
|
383
|
+
}
|
384
|
+
|
385
|
+
Notify <| tag == 'foo_bar' |> {
|
386
|
+
message => 'overridden'
|
387
|
+
}
|
388
|
+
}
|
389
|
+
include xport_test
|
390
|
+
MANIFEST
|
391
|
+
|
392
|
+
catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
|
393
|
+
|
394
|
+
expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
|
395
|
+
expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
370
399
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet_spec/files'
|
4
|
+
require 'puppet_spec/compiler'
|
5
|
+
|
6
|
+
describe Puppet::Type.type(:user), '(integration)', :unless => Puppet.features.microsoft_windows? do
|
7
|
+
include PuppetSpec::Files
|
8
|
+
include PuppetSpec::Compiler
|
9
|
+
|
10
|
+
context "when set to purge ssh keys from a file" do
|
11
|
+
let(:tempfile) { file_containing('user_spec', "# comment\nssh-rsa KEY-DATA key-name") }
|
12
|
+
# must use an existing user, or the generated key resource
|
13
|
+
# will fail on account of an invalid user for the key
|
14
|
+
# - root should be a safe default
|
15
|
+
let(:manifest) { "user { 'root': purge_ssh_keys => '#{tempfile}' }" }
|
16
|
+
|
17
|
+
it "should purge authorized ssh keys" do
|
18
|
+
apply_compiled_manifest(manifest, Puppet::Graph::RandomPrioritizer.new)
|
19
|
+
File.read(tempfile).should_not =~ /key-name/
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with other prefetching resources evaluated first" do
|
23
|
+
let(:manifest) { "host { 'test': before => User[root] } user { 'root': purge_ssh_keys => '#{tempfile}' }" }
|
24
|
+
|
25
|
+
it "should purge authorized ssh keys" do
|
26
|
+
apply_compiled_manifest(manifest, Puppet::Graph::RandomPrioritizer.new)
|
27
|
+
File.read(tempfile).should_not =~ /key-name/
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -6,6 +6,10 @@ require 'puppet/configurer/downloader'
|
|
6
6
|
describe Puppet::Configurer::Downloader do
|
7
7
|
require 'puppet_spec/files'
|
8
8
|
include PuppetSpec::Files
|
9
|
+
|
10
|
+
let(:path) { Puppet[:plugindest] }
|
11
|
+
let(:source) { 'puppet://puppet/plugins' }
|
12
|
+
|
9
13
|
it "should require a name" do
|
10
14
|
lambda { Puppet::Configurer::Downloader.new }.should raise_error(ArgumentError)
|
11
15
|
end
|
@@ -21,87 +25,115 @@ describe Puppet::Configurer::Downloader do
|
|
21
25
|
dler.source.should == "source"
|
22
26
|
end
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
+
def downloader(options = {})
|
29
|
+
options[:name] ||= "facts"
|
30
|
+
options[:path] ||= path
|
31
|
+
options[:source_permissions] ||= :ignore
|
32
|
+
Puppet::Configurer::Downloader.new(options[:name], options[:path], source, options[:ignore], options[:environment], options[:source_permissions])
|
33
|
+
end
|
28
34
|
|
35
|
+
def generate_file_resource(options = {})
|
36
|
+
dler = downloader(options)
|
37
|
+
dler.file
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "when creating the file that does the downloading" do
|
29
41
|
it "should create a file instance with the right path and source" do
|
30
|
-
|
31
|
-
|
42
|
+
file = generate_file_resource(:path => path, :source => source)
|
43
|
+
|
44
|
+
expect(file[:path]).to eq(path)
|
45
|
+
expect(file[:source]).to eq([source])
|
32
46
|
end
|
33
47
|
|
34
48
|
it "should tag the file with the downloader name" do
|
35
|
-
|
36
|
-
|
49
|
+
name = "mydownloader"
|
50
|
+
file = generate_file_resource(:name => name)
|
51
|
+
|
52
|
+
expect(file[:tag]).to eq([name])
|
37
53
|
end
|
38
54
|
|
39
55
|
it "should always recurse" do
|
40
|
-
|
41
|
-
|
56
|
+
file = generate_file_resource
|
57
|
+
|
58
|
+
expect(file[:recurse]).to be_true
|
42
59
|
end
|
43
60
|
|
44
61
|
it "should always purge" do
|
45
|
-
|
46
|
-
|
62
|
+
file = generate_file_resource
|
63
|
+
|
64
|
+
expect(file[:purge]).to be_true
|
47
65
|
end
|
48
66
|
|
49
67
|
it "should never be in noop" do
|
50
|
-
|
51
|
-
|
68
|
+
file = generate_file_resource
|
69
|
+
|
70
|
+
expect(file[:noop]).to be_false
|
52
71
|
end
|
53
72
|
|
54
|
-
it "should set source_permissions to ignore" do
|
55
|
-
|
56
|
-
|
73
|
+
it "should set source_permissions to ignore by default" do
|
74
|
+
file = generate_file_resource
|
75
|
+
|
76
|
+
expect(file[:source_permissions]).to eq(:ignore)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should allow source_permissions to be overridden" do
|
80
|
+
file = generate_file_resource(:source_permissions => :use)
|
81
|
+
|
82
|
+
expect(file[:source_permissions]).to eq(:use)
|
57
83
|
end
|
58
84
|
|
59
85
|
describe "on POSIX", :as_platform => :posix do
|
60
86
|
it "should always set the owner to the current UID" do
|
61
87
|
Process.expects(:uid).returns 51
|
62
|
-
|
63
|
-
|
88
|
+
|
89
|
+
file = generate_file_resource(:path => '/path')
|
90
|
+
expect(file[:owner]).to eq(51)
|
64
91
|
end
|
65
92
|
|
66
93
|
it "should always set the group to the current GID" do
|
67
94
|
Process.expects(:gid).returns 61
|
68
|
-
|
69
|
-
|
95
|
+
|
96
|
+
file = generate_file_resource(:path => '/path')
|
97
|
+
expect(file[:group]).to eq(61)
|
70
98
|
end
|
71
99
|
end
|
72
100
|
|
73
101
|
describe "on Windows", :as_platform => :windows do
|
74
102
|
it "should omit the owner" do
|
75
|
-
|
76
|
-
|
103
|
+
file = generate_file_resource(:path => 'C:/path')
|
104
|
+
|
105
|
+
expect(file[:owner]).to be_nil
|
77
106
|
end
|
78
107
|
|
79
108
|
it "should omit the group" do
|
80
|
-
|
81
|
-
|
109
|
+
file = generate_file_resource(:path => 'C:/path')
|
110
|
+
|
111
|
+
expect(file[:group]).to be_nil
|
82
112
|
end
|
83
113
|
end
|
84
114
|
|
85
115
|
it "should always force the download" do
|
86
|
-
|
87
|
-
|
116
|
+
file = generate_file_resource
|
117
|
+
|
118
|
+
expect(file[:force]).to be_true
|
88
119
|
end
|
89
120
|
|
90
121
|
it "should never back up when downloading" do
|
91
|
-
|
92
|
-
|
122
|
+
file = generate_file_resource
|
123
|
+
|
124
|
+
expect(file[:backup]).to be_false
|
93
125
|
end
|
94
126
|
|
95
127
|
it "should support providing an 'ignore' parameter" do
|
96
|
-
|
97
|
-
|
98
|
-
|
128
|
+
file = generate_file_resource(:ignore => '.svn')
|
129
|
+
|
130
|
+
expect(file[:ignore]).to eq(['.svn'])
|
99
131
|
end
|
100
132
|
|
101
133
|
it "should split the 'ignore' parameter on whitespace" do
|
102
|
-
|
103
|
-
|
104
|
-
|
134
|
+
file = generate_file_resource(:ignore => '.svn CVS')
|
135
|
+
|
136
|
+
expect(file[:ignore]).to eq(['.svn', 'CVS'])
|
105
137
|
end
|
106
138
|
end
|
107
139
|
|