puppet 7.0.0-universal-darwin → 7.5.0-universal-darwin
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 +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -3
- data/Gemfile.lock +45 -33
- data/ext/build_defaults.yaml +0 -1
- data/ext/project_data.yaml +1 -0
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +11 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +16 -3
- data/lib/puppet/defaults.rb +14 -41
- data/lib/puppet/environments.rb +54 -55
- data/lib/puppet/face/facts.rb +26 -2
- data/lib/puppet/face/node/clean.rb +8 -0
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/ffi/windows/api_types.rb +1 -1
- data/lib/puppet/ffi/windows/constants.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +5 -2
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/http/factory.rb +4 -0
- data/lib/puppet/indirector/facts/facter.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http.rb +5 -2
- data/lib/puppet/network/http/api.rb +10 -6
- data/lib/puppet/network/http/api/master.rb +3 -2
- data/lib/puppet/network/http/api/master/v3.rb +2 -25
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
- data/lib/puppet/network/http/api/server.rb +10 -0
- data/lib/puppet/network/http/api/server/v3.rb +39 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/parser/lexer2.rb +0 -4
- data/lib/puppet/pops/validation/checker4_0.rb +0 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings.rb +33 -28
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +166 -146
- data/man/man5/puppet.conf.5 +14 -6
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +8 -2
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +160 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -7
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +21 -1
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -10
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/facts_spec.rb +58 -7
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/application_spec.rb +51 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +1 -56
- data/spec/unit/environments_spec.rb +221 -68
- data/spec/unit/face/node_spec.rb +14 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +9 -0
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/http/factory_spec.rb +19 -0
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +20 -5
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
- data/spec/unit/network/http/api/master_spec.rb +38 -0
- data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
- data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
- data/spec/unit/network/http/api_spec.rb +11 -11
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
- data/spec/unit/pops/validator/validator_spec.rb +20 -43
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +6 -8
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +13 -6
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/certificate_request_spec.rb +4 -10
- data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/sid_spec.rb +6 -0
- data/spec/unit/util_spec.rb +13 -6
- metadata +33 -16
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
- data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -7,6 +7,7 @@ module Puppet::ModuleTool::Errors
|
|
7
7
|
@installed_version = options[:installed_version]
|
8
8
|
@conditions = options[:conditions]
|
9
9
|
@action = options[:action]
|
10
|
+
@unsatisfied = options[:unsatisfied]
|
10
11
|
|
11
12
|
super _("Could not %{action} '%{module_name}' (%{version}); no version satisfies all dependencies") % { action: @action, module_name: @requested_name, version: vstring }
|
12
13
|
end
|
@@ -14,9 +15,23 @@ module Puppet::ModuleTool::Errors
|
|
14
15
|
def multiline
|
15
16
|
message = []
|
16
17
|
message << _("Could not %{action} module '%{module_name}' (%{version})") % { action: @action, module_name: @requested_name, version: vstring }
|
17
|
-
|
18
|
+
|
19
|
+
if @unsatisfied
|
20
|
+
message << _(" The requested version cannot satisfy one or more of the following installed modules:")
|
21
|
+
if @unsatisfied[:current_version]
|
22
|
+
message << _(" %{name}, installed: %{current_version}, expected: %{constraints}") % { name: @unsatisfied[:name], current_version: @unsatisfied[:current_version], constraints: @unsatisfied[:constraints][@unsatisfied[:name]] }
|
23
|
+
else
|
24
|
+
@unsatisfied[:constraints].each do |mod, range|
|
25
|
+
message << _(" %{mod}, expects '%{name}': %{range}") % { mod: mod, name: @requested_name, range: range }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
message << _("")
|
29
|
+
else
|
30
|
+
message << _(" The requested version cannot satisfy all dependencies")
|
31
|
+
end
|
32
|
+
|
18
33
|
#TRANSLATORS `puppet module %{action} --ignore-dependencies` is a command line and should not be translated
|
19
|
-
message << _("
|
34
|
+
message << _(" Use `puppet module %{action} '%{module_name}' --ignore-dependencies` to %{action} only this module") % { action: @action, module_name: @requested_name }
|
20
35
|
message.join("\n")
|
21
36
|
end
|
22
37
|
end
|
@@ -183,6 +183,73 @@ Puppet::Network::FormatHandler.create(:console,
|
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
|
+
Puppet::Network::FormatHandler.create(:flat,
|
187
|
+
:mime => 'text/x-flat-text',
|
188
|
+
:weight => 0) do
|
189
|
+
|
190
|
+
def flatten_hash(hash)
|
191
|
+
hash.each_with_object({}) do |(k, v), h|
|
192
|
+
if v.is_a? Hash
|
193
|
+
flatten_hash(v).map do |h_k, h_v|
|
194
|
+
h["#{k}.#{h_k}"] = h_v
|
195
|
+
end
|
196
|
+
elsif v.is_a? Array
|
197
|
+
v.each_with_index do |el, i|
|
198
|
+
if el.is_a? Hash
|
199
|
+
flatten_hash(el).map do |el_k, el_v|
|
200
|
+
h["#{k}.#{i}.#{el_k}"] = el_v
|
201
|
+
end
|
202
|
+
else
|
203
|
+
h["#{k}.#{i}"] = el
|
204
|
+
end
|
205
|
+
end
|
206
|
+
else
|
207
|
+
h[k] = v
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def flatten_array(array)
|
213
|
+
a={}
|
214
|
+
array.each_with_index do |el, i|
|
215
|
+
if el.is_a? Hash
|
216
|
+
flatten_hash(el).map do |el_k, el_v|
|
217
|
+
a["#{i}.#{el_k}"] = el_v
|
218
|
+
end
|
219
|
+
else
|
220
|
+
a["#{i}"] = el
|
221
|
+
end
|
222
|
+
end
|
223
|
+
a
|
224
|
+
end
|
225
|
+
|
226
|
+
def construct_output(data)
|
227
|
+
output = ''
|
228
|
+
data.each do |key, value|
|
229
|
+
output << "#{key}=#{value}"
|
230
|
+
output << "\n"
|
231
|
+
end
|
232
|
+
output
|
233
|
+
end
|
234
|
+
|
235
|
+
def render(datum)
|
236
|
+
return datum if datum.is_a?(String) || datum.is_a?(Numeric)
|
237
|
+
# Simple hash
|
238
|
+
if datum.is_a?(Hash)
|
239
|
+
data = flatten_hash(datum)
|
240
|
+
return construct_output(data)
|
241
|
+
elsif datum.is_a?(Array)
|
242
|
+
data = flatten_array(datum)
|
243
|
+
return construct_output(data)
|
244
|
+
end
|
245
|
+
Puppet::Util::Json.dump(datum, :pretty => true, :quirks_mode => true)
|
246
|
+
end
|
247
|
+
def render_multiple(data)
|
248
|
+
data.collect(&:render).join("\n")
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
|
186
253
|
Puppet::Network::FormatHandler.create(:rich_data_json, mime: 'application/vnd.puppet.rich+json', charset: Encoding::UTF_8, weight: 30) do
|
187
254
|
def intern(klass, text)
|
188
255
|
Puppet.override({:rich_data => true}) do
|
data/lib/puppet/network/http.rb
CHANGED
@@ -3,8 +3,11 @@ module Puppet::Network::HTTP
|
|
3
3
|
HEADER_ENABLE_PROFILING = "X-Puppet-Profiling"
|
4
4
|
HEADER_PUPPET_VERSION = "X-Puppet-Version"
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
SERVER_URL_PREFIX = "/puppet"
|
7
|
+
SERVER_URL_VERSIONS = "v3"
|
8
|
+
|
9
|
+
MASTER_URL_PREFIX = SERVER_URL_PREFIX
|
10
|
+
MASTER_URL_VERSIONS = SERVER_URL_VERSIONS
|
8
11
|
|
9
12
|
CA_URL_PREFIX = "/puppet-ca"
|
10
13
|
CA_URL_VERSIONS = "v1"
|
@@ -18,18 +18,22 @@ class Puppet::Network::HTTP::API
|
|
18
18
|
"Note that Puppet 3 agents aren't compatible with this version; if you're " +
|
19
19
|
"running Puppet 3, you must either upgrade your agents to match the server " +
|
20
20
|
"or point them to a server running Puppet 3.\n\n" +
|
21
|
-
"
|
21
|
+
"Server Info:\n" +
|
22
22
|
" Puppet version: #{Puppet.version}\n" +
|
23
|
-
" Supported /puppet API versions: #{Puppet::Network::HTTP::
|
23
|
+
" Supported /puppet API versions: #{Puppet::Network::HTTP::SERVER_URL_VERSIONS}\n",
|
24
24
|
Puppet::Network::HTTP::Issues::HANDLER_NOT_FOUND)
|
25
25
|
end)
|
26
26
|
end
|
27
27
|
|
28
|
-
def self.
|
29
|
-
|
30
|
-
Puppet::Network::HTTP::Route.path(
|
28
|
+
def self.server_routes
|
29
|
+
server_prefix = Regexp.new("^#{Puppet::Network::HTTP::SERVER_URL_PREFIX}/")
|
30
|
+
Puppet::Network::HTTP::Route.path(server_prefix).
|
31
31
|
any.
|
32
|
-
chain(Puppet::Network::HTTP::API::
|
32
|
+
chain(Puppet::Network::HTTP::API::Server::V3.routes,
|
33
33
|
Puppet::Network::HTTP::API.not_found)
|
34
34
|
end
|
35
|
+
|
36
|
+
def self.master_routes
|
37
|
+
server_routes
|
38
|
+
end
|
35
39
|
end
|
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'puppet/network/http/api/server'
|
2
|
+
|
3
|
+
Puppet::Network::HTTP::API::Master = Puppet::Network::HTTP::API::Server
|
@@ -1,26 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'puppet/network/http/api/indirected_routes'
|
1
|
+
require 'puppet/network/http/api/master'
|
2
|
+
require 'puppet/network/http/api/server/v3'
|
4
3
|
|
5
|
-
def self.wrap(&block)
|
6
|
-
lambda do |request, response|
|
7
|
-
Puppet::Network::Authorization.check_external_authorization(request.method, request.path)
|
8
|
-
|
9
|
-
block.call.call(request, response)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
INDIRECTED = Puppet::Network::HTTP::Route.
|
14
|
-
path(/.*/).
|
15
|
-
any(wrap { Puppet::Network::HTTP::API::IndirectedRoutes.new } )
|
16
|
-
|
17
|
-
ENVIRONMENTS = Puppet::Network::HTTP::Route.
|
18
|
-
path(%r{^/environments$}).
|
19
|
-
get(wrap { Environments.new(Puppet.lookup(:environments)) } )
|
20
|
-
|
21
|
-
def self.routes
|
22
|
-
Puppet::Network::HTTP::Route.path(%r{v3}).
|
23
|
-
any.
|
24
|
-
chain(ENVIRONMENTS, INDIRECTED)
|
25
|
-
end
|
26
|
-
end
|
@@ -1,34 +1,3 @@
|
|
1
|
-
require 'puppet/
|
1
|
+
require 'puppet/network/http/api/master'
|
2
|
+
require 'puppet/network/http/api/server/v3/environments'
|
2
3
|
|
3
|
-
class Puppet::Network::HTTP::API::Master::V3::Environments
|
4
|
-
def initialize(env_loader)
|
5
|
-
@env_loader = env_loader
|
6
|
-
end
|
7
|
-
|
8
|
-
def call(request, response)
|
9
|
-
response.respond_with(200, "application/json", Puppet::Util::Json.dump({
|
10
|
-
"search_paths" => @env_loader.search_paths,
|
11
|
-
"environments" => Hash[@env_loader.list.collect do |env|
|
12
|
-
[env.name, {
|
13
|
-
"settings" => {
|
14
|
-
"modulepath" => env.full_modulepath,
|
15
|
-
"manifest" => env.manifest,
|
16
|
-
"environment_timeout" => timeout(env),
|
17
|
-
"config_version" => env.config_version || '',
|
18
|
-
}
|
19
|
-
}]
|
20
|
-
end]
|
21
|
-
}))
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def timeout(env)
|
27
|
-
ttl = @env_loader.get_conf(env.name).environment_timeout
|
28
|
-
if ttl == Float::INFINITY
|
29
|
-
"unlimited"
|
30
|
-
else
|
31
|
-
ttl
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'puppet/network/http/api/server/v3/environments'
|
2
|
+
require 'puppet/network/http/api/indirected_routes'
|
3
|
+
|
4
|
+
module Puppet
|
5
|
+
module Network
|
6
|
+
module HTTP
|
7
|
+
class API
|
8
|
+
module Server
|
9
|
+
class V3
|
10
|
+
|
11
|
+
def self.wrap(&block)
|
12
|
+
lambda do |request, response|
|
13
|
+
Puppet::Network::Authorization.
|
14
|
+
check_external_authorization(request.method,
|
15
|
+
request.path)
|
16
|
+
|
17
|
+
block.call.call(request, response)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
INDIRECTED = Puppet::Network::HTTP::Route.
|
22
|
+
path(/.*/).
|
23
|
+
any(wrap { Puppet::Network::HTTP::API::IndirectedRoutes.new } )
|
24
|
+
|
25
|
+
ENVIRONMENTS = Puppet::Network::HTTP::Route.
|
26
|
+
path(%r{^/environments$}).
|
27
|
+
get(wrap { Environments.new(Puppet.lookup(:environments)) } )
|
28
|
+
|
29
|
+
def self.routes
|
30
|
+
Puppet::Network::HTTP::Route.path(%r{v3}).
|
31
|
+
any.
|
32
|
+
chain(ENVIRONMENTS, INDIRECTED)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'puppet/util/json'
|
2
|
+
|
3
|
+
module Puppet
|
4
|
+
module Network
|
5
|
+
module HTTP
|
6
|
+
class API
|
7
|
+
module Server
|
8
|
+
class V3
|
9
|
+
class Environments
|
10
|
+
|
11
|
+
def initialize(env_loader)
|
12
|
+
@env_loader = env_loader
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(request, response)
|
16
|
+
response.respond_with(200, "application/json", Puppet::Util::Json.dump({
|
17
|
+
"search_paths" => @env_loader.search_paths,
|
18
|
+
"environments" => Hash[@env_loader.list.collect do |env|
|
19
|
+
[env.name, {
|
20
|
+
"settings" => {
|
21
|
+
"modulepath" => env.full_modulepath,
|
22
|
+
"manifest" => env.manifest,
|
23
|
+
"environment_timeout" => timeout(env),
|
24
|
+
"config_version" => env.config_version || '',
|
25
|
+
}
|
26
|
+
}]
|
27
|
+
end]
|
28
|
+
}))
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def timeout(env)
|
34
|
+
ttl = @env_loader.get_conf(env.name).environment_timeout
|
35
|
+
if ttl == Float::INFINITY
|
36
|
+
"unlimited"
|
37
|
+
else
|
38
|
+
ttl
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -50,8 +50,9 @@ class Puppet::Parser::AST::HostName < Puppet::Parser::AST::Leaf
|
|
50
50
|
end
|
51
51
|
|
52
52
|
class Puppet::Parser::AST::Regex < Puppet::Parser::AST::Leaf
|
53
|
-
def initialize(
|
54
|
-
super(
|
53
|
+
def initialize(value: nil, file: nil, line: nil, pos: nil)
|
54
|
+
super(value: value, file: file, line: line, pos: pos)
|
55
|
+
|
55
56
|
# transform value from hash options unless it is already a regular expression
|
56
57
|
@value = Regexp.new(@value) unless @value.is_a?(Regexp)
|
57
58
|
end
|
@@ -50,7 +50,7 @@ class Puppet::Parser::TemplateWrapper
|
|
50
50
|
# @return [Array<String>] The tags defined in the current scope
|
51
51
|
# @api public
|
52
52
|
def tags
|
53
|
-
|
53
|
+
raise NotImplementedError, "Call 'all_tags' instead."
|
54
54
|
end
|
55
55
|
|
56
56
|
# @return [Array<String>] All the defined tags
|
@@ -16,10 +16,12 @@ class DeferredResolver
|
|
16
16
|
#
|
17
17
|
# @param facts [Puppet::Node::Facts] the facts object for the node
|
18
18
|
# @param catalog [Puppet::Resource::Catalog] the catalog where all deferred values should be replaced
|
19
|
+
# @param environment [Puppet::Node::Environment] the environment whose anonymous module methods
|
20
|
+
# are to be mixed into the scope
|
19
21
|
# @return [nil] does not return anything - the catalog is modified as a side effect
|
20
22
|
#
|
21
|
-
def self.resolve_and_replace(facts, catalog)
|
22
|
-
compiler = Puppet::Parser::ScriptCompiler.new(
|
23
|
+
def self.resolve_and_replace(facts, catalog, environment = catalog.environment_instance)
|
24
|
+
compiler = Puppet::Parser::ScriptCompiler.new(environment, catalog.name, true)
|
23
25
|
resolver = new(compiler)
|
24
26
|
resolver.set_facts_variable(facts)
|
25
27
|
# TODO:
|
@@ -108,7 +110,7 @@ class DeferredResolver
|
|
108
110
|
# If any of the arguments to a future is a future it needs to be resolved first
|
109
111
|
func_name = f.name
|
110
112
|
mapped_arguments = map_arguments(f.arguments)
|
111
|
-
# if name starts with $ then this is a call to dig
|
113
|
+
# if name starts with $ then this is a call to dig
|
112
114
|
if func_name[0] == DOLLAR
|
113
115
|
var_name = func_name[1..-1]
|
114
116
|
func_name = DIG
|
@@ -31,7 +31,7 @@ class Puppet::Pops::Model::AstTransformer
|
|
31
31
|
def ast(o, klass, hash={})
|
32
32
|
# create and pass hash with file and line information
|
33
33
|
# PUP-3274 - still needed since hostname transformation requires AST::HostName, and AST::Regexp
|
34
|
-
klass.new(merge_location(hash, o))
|
34
|
+
klass.new(**merge_location(hash, o))
|
35
35
|
end
|
36
36
|
|
37
37
|
# THIS IS AN EXPENSIVE OPERATION
|
@@ -134,10 +134,6 @@ class Lexer2
|
|
134
134
|
'type' => [:TYPE, 'type', 4],
|
135
135
|
'attr' => [:ATTR, 'attr', 4],
|
136
136
|
'private' => [:PRIVATE, 'private', 7],
|
137
|
-
'application' => [:APPLICATION, 'application', 11], # reserved
|
138
|
-
'consumes' => [:CONSUMES, 'consumes', 8], # reserved
|
139
|
-
'produces' => [:PRODUCES, 'produces', 8], # reserved
|
140
|
-
'site' => [:SITE, 'site', 4], # reserved
|
141
137
|
}
|
142
138
|
|
143
139
|
KEYWORDS.each {|k,v| v[1].freeze; v.freeze }
|
@@ -236,7 +236,6 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
236
236
|
case p
|
237
237
|
when Model::AbstractResource
|
238
238
|
when Model::CollectExpression
|
239
|
-
acceptor.accept(Issues::UNSUPPORTED_OPERATOR_IN_CONTEXT, p, :operator=>'* =>')
|
240
239
|
else
|
241
240
|
# protect against just testing a snippet that has no parent, error message will be a bit strange
|
242
241
|
# but it is not for a real program.
|
data/lib/puppet/property/list.rb
CHANGED
@@ -47,7 +47,7 @@ module Puppet
|
|
47
47
|
#ok, some 'convention' if the list property is named groups, provider should implement a groups method
|
48
48
|
tmp = provider.send(name) if provider
|
49
49
|
if tmp && tmp != :absent
|
50
|
-
return tmp.split(delimiter)
|
50
|
+
return tmp.instance_of?(Array) ? tmp : tmp.split(delimiter)
|
51
51
|
else
|
52
52
|
return :absent
|
53
53
|
end
|
@@ -130,16 +130,21 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
|
|
130
130
|
private
|
131
131
|
|
132
132
|
def findgroup(key, value)
|
133
|
-
group_file =
|
133
|
+
group_file = '/etc/group'
|
134
134
|
group_keys = [:group_name, :password, :gid, :user_list]
|
135
|
-
|
136
|
-
@
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
|
136
|
+
unless @groups
|
137
|
+
unless Puppet::FileSystem.exist?(group_file)
|
138
|
+
raise Puppet::Error.new("Forcelocal set for group resource '#{resource[:name]}', but #{group_file} does not exist")
|
139
|
+
end
|
140
|
+
|
141
|
+
@groups = []
|
142
|
+
Puppet::FileSystem.each_line(group_file) do |line|
|
143
|
+
group = line.chomp.split(':')
|
144
|
+
@groups << Hash[group_keys.zip(group)]
|
141
145
|
end
|
142
146
|
end
|
143
|
-
|
147
|
+
|
148
|
+
@groups.find { |param| param[key] == value } || false
|
144
149
|
end
|
145
150
|
end
|