r10k 3.10.0 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -10
- data/CHANGELOG.mkd +9 -0
- data/README.mkd +6 -0
- data/doc/dynamic-environments/configuration.mkd +14 -0
- data/doc/puppetfile.mkd +15 -1
- data/integration/Rakefile +2 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +15 -13
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +3 -3
- data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +3 -3
- data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +3 -3
- data/lib/r10k/action/deploy/environment.rb +6 -1
- data/lib/r10k/action/deploy/module.rb +31 -5
- data/lib/r10k/action/runner.rb +34 -4
- data/lib/r10k/cli/deploy.rb +4 -0
- data/lib/r10k/git.rb +3 -0
- data/lib/r10k/git/rugged/credentials.rb +77 -0
- data/lib/r10k/git/stateful_repository.rb +1 -0
- data/lib/r10k/initializers.rb +3 -0
- data/lib/r10k/module/base.rb +37 -0
- data/lib/r10k/module/forge.rb +1 -0
- data/lib/r10k/module/git.rb +1 -0
- data/lib/r10k/module/svn.rb +1 -0
- data/lib/r10k/module_loader/puppetfile.rb +15 -4
- data/lib/r10k/puppetfile.rb +10 -11
- data/lib/r10k/settings.rb +44 -2
- data/lib/r10k/settings/definition.rb +1 -1
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +106 -38
- data/r10k.gemspec +2 -0
- data/spec/unit/action/deploy/environment_spec.rb +16 -0
- data/spec/unit/action/deploy/module_spec.rb +178 -0
- data/spec/unit/action/runner_spec.rb +80 -0
- data/spec/unit/git/rugged/credentials_spec.rb +29 -0
- data/spec/unit/git/stateful_repository_spec.rb +5 -0
- data/spec/unit/module/base_spec.rb +46 -0
- data/spec/unit/module/forge_spec.rb +19 -0
- data/spec/unit/module/git_spec.rb +17 -0
- data/spec/unit/module/svn_spec.rb +18 -0
- data/spec/unit/module_loader/puppetfile_spec.rb +16 -3
- data/spec/unit/module_spec.rb +12 -1
- data/spec/unit/puppetfile_spec.rb +31 -1
- data/spec/unit/settings_spec.rb +18 -0
- metadata +16 -2
data/lib/r10k/git.rb
CHANGED
@@ -135,6 +135,9 @@ module R10K
|
|
135
135
|
|
136
136
|
def_setting_attr :private_key
|
137
137
|
def_setting_attr :oauth_token
|
138
|
+
def_setting_attr :github_app_id
|
139
|
+
def_setting_attr :github_app_key
|
140
|
+
def_setting_attr :github_app_ttl
|
138
141
|
def_setting_attr :proxy
|
139
142
|
def_setting_attr :username
|
140
143
|
def_setting_attr :repositories, {}
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'r10k/git/rugged'
|
2
2
|
require 'r10k/git/errors'
|
3
3
|
require 'r10k/logging'
|
4
|
+
require 'json'
|
5
|
+
require 'jwt'
|
6
|
+
require 'net/http'
|
7
|
+
require 'openssl'
|
4
8
|
|
5
9
|
# Generate credentials for secured remote connections.
|
6
10
|
#
|
@@ -62,15 +66,29 @@ class R10K::Git::Rugged::Credentials
|
|
62
66
|
|
63
67
|
def get_plaintext_credentials(url, username_from_url)
|
64
68
|
per_repo_oauth_token = nil
|
69
|
+
per_repo_github_app_id = nil
|
70
|
+
per_repo_github_app_key = nil
|
71
|
+
per_repo_github_app_ttl = nil
|
72
|
+
|
65
73
|
if per_repo_settings = R10K::Git.get_repo_settings(url)
|
66
74
|
per_repo_oauth_token = per_repo_settings[:oauth_token]
|
75
|
+
per_repo_github_app_id = per_repo_settings[:github_app_id]
|
76
|
+
per_repo_github_app_key = per_repo_settings[:github_app_key]
|
77
|
+
per_repo_github_app_ttl = per_repo_settings[:github_app_ttl]
|
67
78
|
end
|
68
79
|
|
80
|
+
app_id = per_repo_github_app_id || R10K::Git.settings[:github_app_id]
|
81
|
+
app_key = per_repo_github_app_key || R10K::Git.settings[:github_app_key]
|
82
|
+
app_ttl = per_repo_github_app_ttl || R10K::Git.settings[:github_app_ttl]
|
83
|
+
|
69
84
|
if token_path = per_repo_oauth_token || R10K::Git.settings[:oauth_token]
|
70
85
|
@oauth_token ||= extract_token(token_path, url)
|
71
86
|
|
72
87
|
user = 'x-oauth-token'
|
73
88
|
password = @oauth_token
|
89
|
+
elsif app_id && app_key && app_ttl
|
90
|
+
user = 'x-access-token'
|
91
|
+
password = github_app_token(app_id, app_key, app_ttl)
|
74
92
|
else
|
75
93
|
user = get_git_username(url, username_from_url)
|
76
94
|
password = URI.parse(url).password || ''
|
@@ -125,4 +143,63 @@ class R10K::Git::Rugged::Credentials
|
|
125
143
|
|
126
144
|
user
|
127
145
|
end
|
146
|
+
|
147
|
+
def github_app_token(app_id, private_key, ttl)
|
148
|
+
raise R10K::Git::GitError, _('Github App id contains invalid characters.') unless app_id =~ /^\d+$/
|
149
|
+
raise R10K::Git::GitError, _('Github App token ttl contains invalid characters.') unless ttl =~ /^\d+$/
|
150
|
+
raise R10K::Git::GitError, _('Github App key is missing or unreadable') unless File.readable?(private_key)
|
151
|
+
|
152
|
+
begin
|
153
|
+
ssl_key = OpenSSL::PKey::RSA.new(File.read(private_key).strip)
|
154
|
+
unless ssl_key.private?
|
155
|
+
raise R10K::Git::GitError, _('Github App key is not a valid SSL private key')
|
156
|
+
end
|
157
|
+
rescue OpenSSL::PKey::RSAError
|
158
|
+
raise R10K::Git::GitError, _('Github App key is not a valid SSL key')
|
159
|
+
end
|
160
|
+
|
161
|
+
logger.debug2 _("Using Github App id %{app_id} with SSL key from %{key_path}") % { key_path: private_key, app_id: app_id }
|
162
|
+
|
163
|
+
jwt_issue_time = Time.now.to_i - 60
|
164
|
+
jwt_exp_time = (jwt_issue_time + 60) + ttl.to_i
|
165
|
+
payload = { iat: jwt_issue_time, exp: jwt_exp_time, iss: app_id }
|
166
|
+
jwt = JWT.encode(payload, ssl_key, "RS256")
|
167
|
+
|
168
|
+
get = URI.parse("https://api.github.com/app/installations")
|
169
|
+
get_request = Net::HTTP::Get.new(get)
|
170
|
+
get_request["Authorization"] = "Bearer #{jwt}"
|
171
|
+
get_request["Accept"] = "application/vnd.github.v3+json"
|
172
|
+
get_req_options = { use_ssl: get.scheme == "https", }
|
173
|
+
get_response = Net::HTTP.start(get.hostname, get.port, get_req_options) do |http|
|
174
|
+
http.request(get_request)
|
175
|
+
end
|
176
|
+
|
177
|
+
unless (get_response.class < Net::HTTPSuccess)
|
178
|
+
logger.debug2 _("Unexpected response code: #{get_response.code}\nResponse body: #{get_response.body}")
|
179
|
+
raise R10K::Git::GitError, _("Error using private key to get Github App access token from url")
|
180
|
+
end
|
181
|
+
|
182
|
+
access_tokens_url = JSON.parse(get_response.body)[0]['access_tokens_url']
|
183
|
+
|
184
|
+
post = URI.parse(access_tokens_url)
|
185
|
+
post_request = Net::HTTP::Post.new(post)
|
186
|
+
post_request["Authorization"] = "Bearer #{jwt}"
|
187
|
+
post_request["Accept"] = "application/vnd.github.v3+json"
|
188
|
+
post_req_options = { use_ssl: post.scheme == "https", }
|
189
|
+
post_response = Net::HTTP.start(post.hostname, post.port, post_req_options) do |http|
|
190
|
+
http.request(post_request)
|
191
|
+
end
|
192
|
+
|
193
|
+
unless (post_response.class < Net::HTTPSuccess)
|
194
|
+
logger.debug2 _("Unexpected response code: #{post_response.code}\nResponse body: #{post_response.body}")
|
195
|
+
raise R10K::Git::GitError, _("Error using private key to generate access token from #{access_token_url}")
|
196
|
+
end
|
197
|
+
|
198
|
+
token = JSON.parse(post_response.body)['token']
|
199
|
+
|
200
|
+
raise R10K::Git::GitError, _("Github App token contains invalid characters.") unless valid_token?(token)
|
201
|
+
|
202
|
+
logger.debug2 _("Github App token generated, expires at: %{expire}") % {expire: JSON.parse(post_response.body)['expires_at']}
|
203
|
+
token
|
204
|
+
end
|
128
205
|
end
|
data/lib/r10k/initializers.rb
CHANGED
@@ -56,6 +56,9 @@ module R10K
|
|
56
56
|
with_setting(:proxy) { |value| R10K::Git.settings[:proxy] = value }
|
57
57
|
with_setting(:repositories) { |value| R10K::Git.settings[:repositories] = value }
|
58
58
|
with_setting(:oauth_token) { |value| R10K::Git.settings[:oauth_token] = value }
|
59
|
+
with_setting(:github_app_id) { |value| R10K::Git.settings[:github_app_id] = value }
|
60
|
+
with_setting(:github_app_key) { |value| R10K::Git.settings[:github_app_key] = value }
|
61
|
+
with_setting(:github_app_ttl) { |value| R10K::Git.settings[:github_app_ttl] = value }
|
59
62
|
end
|
60
63
|
end
|
61
64
|
|
data/lib/r10k/module/base.rb
CHANGED
@@ -35,6 +35,10 @@ class R10K::Module::Base
|
|
35
35
|
# @return [String] Where the module was sourced from. E.g., "Puppetfile"
|
36
36
|
attr_accessor :origin
|
37
37
|
|
38
|
+
# @!attribute [rw] spec_deletable
|
39
|
+
# @return [Boolean] set this to true if the spec dir can be safely removed, ie in the moduledir
|
40
|
+
attr_accessor :spec_deletable
|
41
|
+
|
38
42
|
# There's been some churn over `author` vs `owner` and `full_name` over
|
39
43
|
# `title`, so in the short run it's easier to support both and deprecate one
|
40
44
|
# later.
|
@@ -52,6 +56,9 @@ class R10K::Module::Base
|
|
52
56
|
@path = Pathname.new(File.join(@dirname, @name))
|
53
57
|
@environment = environment
|
54
58
|
@overrides = args.delete(:overrides) || {}
|
59
|
+
@spec_deletable = true
|
60
|
+
@exclude_spec = args.delete(:exclude_spec)
|
61
|
+
@exclude_spec = @overrides[:modules].delete(:exclude_spec) if @overrides.dig(:modules, :exclude_spec)
|
55
62
|
@origin = 'external' # Expect Puppetfile or R10k::Environment to set this to a specific value
|
56
63
|
|
57
64
|
@requested_modules = @overrides.dig(:modules, :requested_modules) || []
|
@@ -64,6 +71,36 @@ class R10K::Module::Base
|
|
64
71
|
path.to_s
|
65
72
|
end
|
66
73
|
|
74
|
+
# Delete the spec dir if @exclude_spec has been set to true and @spec_deletable is also true
|
75
|
+
def maybe_delete_spec_dir
|
76
|
+
if @exclude_spec
|
77
|
+
if @spec_deletable
|
78
|
+
delete_spec_dir
|
79
|
+
else
|
80
|
+
logger.info _("Spec dir for #{@title} will not be deleted because it is not in the moduledir")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Actually remove the spec dir
|
86
|
+
def delete_spec_dir
|
87
|
+
spec_path = @path + 'spec'
|
88
|
+
if spec_path.symlink?
|
89
|
+
spec_path = spec_path.realpath
|
90
|
+
end
|
91
|
+
if spec_path.directory?
|
92
|
+
logger.debug2 _("Deleting spec data at #{spec_path}")
|
93
|
+
# Use the secure flag for the #rm_rf method to avoid security issues
|
94
|
+
# involving TOCTTOU(time of check to time of use); more details here:
|
95
|
+
# https://ruby-doc.org/stdlib-2.7.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-rm_rf
|
96
|
+
# Additionally, #rm_rf also has problems in windows with with symlink targets
|
97
|
+
# also being deleted; this should be revisted if Windows becomes higher priority.
|
98
|
+
FileUtils.rm_rf(spec_path, secure: true)
|
99
|
+
else
|
100
|
+
logger.debug2 _("No spec dir detected at #{spec_path}, skipping deletion")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
67
104
|
# Synchronize this module with the indicated state.
|
68
105
|
# @param [Hash] opts Deprecated
|
69
106
|
def sync(opts={})
|
data/lib/r10k/module/forge.rb
CHANGED
data/lib/r10k/module/git.rb
CHANGED
data/lib/r10k/module/svn.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
+
require 'r10k/logging'
|
2
|
+
|
1
3
|
module R10K
|
2
4
|
module ModuleLoader
|
3
5
|
class Puppetfile
|
4
6
|
|
7
|
+
include R10K::Logging
|
8
|
+
|
5
9
|
DEFAULT_MODULEDIR = 'modules'
|
6
10
|
DEFAULT_PUPPETFILE_NAME = 'Puppetfile'
|
7
11
|
DEFAULT_FORGE_API = 'forgeapi.puppetlabs.com'
|
8
12
|
|
9
13
|
attr_accessor :default_branch_override, :environment
|
10
|
-
attr_reader :modules, :moduledir,
|
14
|
+
attr_reader :modules, :moduledir, :puppetfile_path,
|
11
15
|
:managed_directories, :desired_contents, :purge_exclusions
|
12
16
|
|
13
17
|
# @param basedir [String] The path that contains the moduledir &
|
@@ -30,7 +34,7 @@ module R10K
|
|
30
34
|
|
31
35
|
@basedir = cleanpath(basedir)
|
32
36
|
@moduledir = resolve_path(@basedir, moduledir)
|
33
|
-
@
|
37
|
+
@puppetfile_path = resolve_path(@basedir, puppetfile)
|
34
38
|
@forge = forge
|
35
39
|
@overrides = overrides
|
36
40
|
@environment = environment
|
@@ -41,11 +45,14 @@ module R10K
|
|
41
45
|
@managed_directories = []
|
42
46
|
@desired_contents = []
|
43
47
|
@purge_exclusions = []
|
48
|
+
|
49
|
+
logger.info _("Using Puppetfile '%{puppetfile}'") % {puppetfile: @puppetfile_path}
|
50
|
+
logger.debug _("Using moduledir '%{moduledir}'") % {moduledir: @moduledir}
|
44
51
|
end
|
45
52
|
|
46
53
|
def load
|
47
54
|
dsl = R10K::ModuleLoader::Puppetfile::DSL.new(self)
|
48
|
-
dsl.instance_eval(puppetfile_content(@
|
55
|
+
dsl.instance_eval(puppetfile_content(@puppetfile_path), @puppetfile_path)
|
49
56
|
|
50
57
|
validate_no_duplicate_names(@modules)
|
51
58
|
@modules
|
@@ -64,7 +71,7 @@ module R10K
|
|
64
71
|
}
|
65
72
|
|
66
73
|
rescue SyntaxError, LoadError, ArgumentError, NameError => e
|
67
|
-
raise R10K::Error.wrap(e, _("Failed to evaluate %{path}") % {path: @
|
74
|
+
raise R10K::Error.wrap(e, _("Failed to evaluate %{path}") % {path: @puppetfile_path})
|
68
75
|
end
|
69
76
|
|
70
77
|
|
@@ -103,11 +110,14 @@ module R10K
|
|
103
110
|
|
104
111
|
module_info[:overrides] = @overrides
|
105
112
|
|
113
|
+
spec_deletable = false
|
114
|
+
|
106
115
|
if install_path = module_info.delete(:install_path)
|
107
116
|
install_path = resolve_path(@basedir, install_path)
|
108
117
|
validate_install_path(install_path, name)
|
109
118
|
else
|
110
119
|
install_path = @moduledir
|
120
|
+
spec_deletable = true
|
111
121
|
end
|
112
122
|
|
113
123
|
if @default_branch_override
|
@@ -116,6 +126,7 @@ module R10K
|
|
116
126
|
|
117
127
|
mod = R10K::Module.new(name, install_path, module_info, @environment)
|
118
128
|
mod.origin = :puppetfile
|
129
|
+
mod.spec_deletable = spec_deletable
|
119
130
|
|
120
131
|
# Do not save modules if they would conflict with the attached
|
121
132
|
# environment
|
data/lib/r10k/puppetfile.rb
CHANGED
@@ -30,10 +30,6 @@ class Puppetfile
|
|
30
30
|
# @return [String] The base directory that contains the Puppetfile
|
31
31
|
attr_reader :basedir
|
32
32
|
|
33
|
-
# @!attrbute [r] puppetfile_path
|
34
|
-
# @return [String] The path to the Puppetfile
|
35
|
-
attr_reader :puppetfile_path
|
36
|
-
|
37
33
|
# @!attribute [r] environment
|
38
34
|
# @return [R10K::Environment] Optional R10K::Environment that this Puppetfile belongs to.
|
39
35
|
attr_reader :environment
|
@@ -68,21 +64,20 @@ class Puppetfile
|
|
68
64
|
|
69
65
|
@force = deprecated_force_arg || options.delete(:force) || false
|
70
66
|
@moduledir = deprecated_moduledir_arg || options.delete(:moduledir) || File.join(basedir, 'modules')
|
71
|
-
|
72
|
-
|
67
|
+
puppetfile_name = deprecated_name_arg || options.delete(:puppetfile_name) || 'Puppetfile'
|
68
|
+
puppetfile_path = deprecated_path_arg || options.delete(:puppetfile_path)
|
69
|
+
@puppetfile = puppetfile_path || puppetfile_name
|
73
70
|
@environment = options.delete(:environment)
|
74
71
|
|
75
72
|
@overrides = options.delete(:overrides) || {}
|
76
73
|
@default_branch_override = @overrides.dig(:environments, :default_branch_override)
|
77
74
|
|
78
|
-
logger.info _("Using Puppetfile '%{puppetfile}'") % {puppetfile: @puppetfile_path}
|
79
|
-
|
80
75
|
@forge = 'forgeapi.puppetlabs.com'
|
81
76
|
|
82
77
|
@loader = ::R10K::ModuleLoader::Puppetfile.new(
|
83
78
|
basedir: @basedir,
|
84
79
|
moduledir: @moduledir,
|
85
|
-
puppetfile: @
|
80
|
+
puppetfile: @puppetfile,
|
86
81
|
forge: @forge,
|
87
82
|
overrides: @overrides,
|
88
83
|
environment: @environment
|
@@ -106,8 +101,8 @@ class Puppetfile
|
|
106
101
|
if self.loaded?
|
107
102
|
return @loaded_content
|
108
103
|
else
|
109
|
-
if !File.readable?(
|
110
|
-
logger.debug _("Puppetfile %{path} missing or unreadable") % {path:
|
104
|
+
if !File.readable?(puppetfile_path)
|
105
|
+
logger.debug _("Puppetfile %{path} missing or unreadable") % {path: puppetfile_path.inspect}
|
111
106
|
else
|
112
107
|
self.load!(default_branch_override)
|
113
108
|
end
|
@@ -156,6 +151,10 @@ class Puppetfile
|
|
156
151
|
@loader.moduledir
|
157
152
|
end
|
158
153
|
|
154
|
+
def puppetfile_path
|
155
|
+
@loader.puppetfile_path
|
156
|
+
end
|
157
|
+
|
159
158
|
def environment=(env)
|
160
159
|
@loader.environment = env
|
161
160
|
@environment = env
|
data/lib/r10k/settings.rb
CHANGED
@@ -42,6 +42,22 @@ module R10K
|
|
42
42
|
Only used by the 'rugged' Git provider."
|
43
43
|
}),
|
44
44
|
|
45
|
+
Definition.new(:github_app_id, {
|
46
|
+
:desc => "The Github App id for Git SSL remotes.
|
47
|
+
Only used by the 'rugged' Git provider."
|
48
|
+
}),
|
49
|
+
|
50
|
+
Definition.new(:github_app_key, {
|
51
|
+
:desc => "The Github App private key for Git SSL remotes.
|
52
|
+
Only used by the 'rugged' Git provider."
|
53
|
+
}),
|
54
|
+
|
55
|
+
Definition.new(:github_app_ttl, {
|
56
|
+
:desc => "The ttl expiration for SSL tokens.
|
57
|
+
Only used by the 'rugged' Git provider.",
|
58
|
+
:default => "120",
|
59
|
+
}),
|
60
|
+
|
45
61
|
URIDefinition.new(:proxy, {
|
46
62
|
:desc => "An optional proxy server to use when interacting with Git sources via HTTP(S).",
|
47
63
|
:default => :inherit,
|
@@ -65,6 +81,24 @@ module R10K
|
|
65
81
|
:default => :inherit
|
66
82
|
}),
|
67
83
|
|
84
|
+
Definition.new(:github_app_id, {
|
85
|
+
:desc => "The Github App id for Git SSL remotes.
|
86
|
+
Only used by the 'rugged' Git provider.",
|
87
|
+
:default => :inherit
|
88
|
+
}),
|
89
|
+
|
90
|
+
Definition.new(:github_app_key, {
|
91
|
+
:desc => "The Github App private key for Git SSL remotes.
|
92
|
+
Only used by the 'rugged' Git provider.",
|
93
|
+
:default => :inherit
|
94
|
+
}),
|
95
|
+
|
96
|
+
Definition.new(:github_app_ttl, {
|
97
|
+
:desc => "The ttl expiration for Git SSL tokens.
|
98
|
+
Only used by the 'rugged' Git provider.",
|
99
|
+
:default => :inherit
|
100
|
+
}),
|
101
|
+
|
68
102
|
URIDefinition.new(:proxy, {
|
69
103
|
:desc => "An optional proxy server to use when interacting with Git sources via HTTP(S).",
|
70
104
|
:default => :inherit,
|
@@ -161,7 +195,15 @@ module R10K
|
|
161
195
|
end
|
162
196
|
end
|
163
197
|
}),
|
164
|
-
|
198
|
+
Definition.new(:exclude_spec, {
|
199
|
+
:desc => "Whether or not to deploy the spec dir of a module. Defaults to false.",
|
200
|
+
:default => false,
|
201
|
+
:validate => lambda do |value|
|
202
|
+
unless !!value == value
|
203
|
+
raise ArgumentError, "`exclude_spec` can only be a boolean value, not '#{value}'"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
})])
|
165
207
|
end
|
166
208
|
|
167
209
|
def self.global_settings
|
@@ -180,7 +222,7 @@ module R10K
|
|
180
222
|
}),
|
181
223
|
|
182
224
|
Definition.new(:postrun, {
|
183
|
-
:desc => "The command r10k should run after deploying environments.",
|
225
|
+
:desc => "The command r10k should run after deploying environments or modules.",
|
184
226
|
:validate => lambda do |value|
|
185
227
|
if !value.is_a?(Array)
|
186
228
|
raise ArgumentError, "The postrun setting should be an array of strings, not a #{value.class}"
|
data/lib/r10k/version.rb
CHANGED
@@ -2,5 +2,5 @@ module R10K
|
|
2
2
|
# When updating to a new major (X) or minor (Y) version, include `#major` or
|
3
3
|
# `#minor` (respectively) in your commit message to trigger the appropriate
|
4
4
|
# release. Otherwise, a new patch (Z) version will be released.
|
5
|
-
VERSION = '3.
|
5
|
+
VERSION = '3.11.0'
|
6
6
|
end
|
data/locales/r10k.pot
CHANGED
@@ -6,11 +6,11 @@
|
|
6
6
|
#, fuzzy
|
7
7
|
msgid ""
|
8
8
|
msgstr ""
|
9
|
-
"Project-Id-Version: r10k 3.9.3-
|
9
|
+
"Project-Id-Version: r10k 3.9.3-75-ge9bdb69\n"
|
10
10
|
"\n"
|
11
11
|
"Report-Msgid-Bugs-To: docs@puppetlabs.com\n"
|
12
|
-
"POT-Creation-Date: 2021-
|
13
|
-
"PO-Revision-Date: 2021-
|
12
|
+
"POT-Creation-Date: 2021-08-13 23:48+0000\n"
|
13
|
+
"PO-Revision-Date: 2021-08-13 23:48+0000\n"
|
14
14
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
15
15
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
16
16
|
"Language: \n"
|
@@ -31,31 +31,31 @@ msgstr ""
|
|
31
31
|
msgid "Reason: %{write_lock}"
|
32
32
|
msgstr ""
|
33
33
|
|
34
|
-
#: ../lib/r10k/action/deploy/environment.rb:
|
34
|
+
#: ../lib/r10k/action/deploy/environment.rb:113
|
35
35
|
msgid "Environment(s) \\'%{environments}\\' cannot be found in any source and will not be deployed."
|
36
36
|
msgstr ""
|
37
37
|
|
38
|
-
#: ../lib/r10k/action/deploy/environment.rb:
|
38
|
+
#: ../lib/r10k/action/deploy/environment.rb:146
|
39
39
|
msgid "Environment %{env_dir} does not match environment name filter, skipping"
|
40
40
|
msgstr ""
|
41
41
|
|
42
|
-
#: ../lib/r10k/action/deploy/environment.rb:
|
42
|
+
#: ../lib/r10k/action/deploy/environment.rb:154
|
43
43
|
msgid "Deploying environment %{env_path}"
|
44
44
|
msgstr ""
|
45
45
|
|
46
|
-
#: ../lib/r10k/action/deploy/environment.rb:
|
46
|
+
#: ../lib/r10k/action/deploy/environment.rb:157
|
47
47
|
msgid "Environment %{env_dir} is now at %{env_signature}"
|
48
48
|
msgstr ""
|
49
49
|
|
50
|
-
#: ../lib/r10k/action/deploy/environment.rb:
|
50
|
+
#: ../lib/r10k/action/deploy/environment.rb:161
|
51
51
|
msgid "Environment %{env_dir} is new, updating all modules"
|
52
52
|
msgstr ""
|
53
53
|
|
54
|
-
#: ../lib/r10k/action/deploy/module.rb:
|
54
|
+
#: ../lib/r10k/action/deploy/module.rb:98
|
55
55
|
msgid "Only updating modules in environment(s) %{opt_env} skipping environment %{env_path}"
|
56
56
|
msgstr ""
|
57
57
|
|
58
|
-
#: ../lib/r10k/action/deploy/module.rb:
|
58
|
+
#: ../lib/r10k/action/deploy/module.rb:100
|
59
59
|
msgid "Updating modules %{modules} in environment %{env_path}"
|
60
60
|
msgstr ""
|
61
61
|
|
@@ -63,15 +63,15 @@ msgstr ""
|
|
63
63
|
msgid "Syntax OK"
|
64
64
|
msgstr ""
|
65
65
|
|
66
|
-
#: ../lib/r10k/action/runner.rb:
|
66
|
+
#: ../lib/r10k/action/runner.rb:57 ../lib/r10k/deployment/config.rb:42
|
67
67
|
msgid "Overriding config file setting '%{key}': '%{old_val}' -> '%{new_val}'"
|
68
68
|
msgstr ""
|
69
69
|
|
70
|
-
#: ../lib/r10k/action/runner.rb:
|
70
|
+
#: ../lib/r10k/action/runner.rb:99
|
71
71
|
msgid "Reading configuration from %{config_path}"
|
72
72
|
msgstr ""
|
73
73
|
|
74
|
-
#: ../lib/r10k/action/runner.rb:
|
74
|
+
#: ../lib/r10k/action/runner.rb:102
|
75
75
|
msgid "No config file explicitly given and no default config file could be found, default settings will be used."
|
76
76
|
msgstr ""
|
77
77
|
|
@@ -207,54 +207,106 @@ msgstr ""
|
|
207
207
|
msgid "Rugged versions prior to 0.24.0 do not support pruning stale branches during fetch, please upgrade your \\'rugged\\' gem. (Current version is: %{version})"
|
208
208
|
msgstr ""
|
209
209
|
|
210
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
210
|
+
#: ../lib/r10k/git/rugged/credentials.rb:28
|
211
211
|
msgid "Authentication failed for Git remote %{url}."
|
212
212
|
msgstr ""
|
213
213
|
|
214
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
214
|
+
#: ../lib/r10k/git/rugged/credentials.rb:52
|
215
215
|
msgid "Using per-repository private key %{key} for URL %{url}"
|
216
216
|
msgstr ""
|
217
217
|
|
218
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
218
|
+
#: ../lib/r10k/git/rugged/credentials.rb:55
|
219
219
|
msgid "URL %{url} has no per-repository private key using '%{key}'."
|
220
220
|
msgstr ""
|
221
221
|
|
222
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
222
|
+
#: ../lib/r10k/git/rugged/credentials.rb:57
|
223
223
|
msgid "Git remote %{url} uses the SSH protocol but no private key was given"
|
224
224
|
msgstr ""
|
225
225
|
|
226
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
226
|
+
#: ../lib/r10k/git/rugged/credentials.rb:61
|
227
227
|
msgid "Unable to use SSH key auth for %{url}: private key %{private_key} is missing or unreadable"
|
228
228
|
msgstr ""
|
229
229
|
|
230
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
230
|
+
#: ../lib/r10k/git/rugged/credentials.rb:102
|
231
231
|
msgid "Using OAuth token from stdin for URL %{url}"
|
232
232
|
msgstr ""
|
233
233
|
|
234
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
234
|
+
#: ../lib/r10k/git/rugged/credentials.rb:105
|
235
235
|
msgid "Using OAuth token from %{token_path} for URL %{url}"
|
236
236
|
msgstr ""
|
237
237
|
|
238
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
238
|
+
#: ../lib/r10k/git/rugged/credentials.rb:107
|
239
239
|
msgid "%{path} is missing or unreadable, cannot load OAuth token"
|
240
240
|
msgstr ""
|
241
241
|
|
242
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
242
|
+
#: ../lib/r10k/git/rugged/credentials.rb:111
|
243
243
|
msgid "Supplied OAuth token contains invalid characters."
|
244
244
|
msgstr ""
|
245
245
|
|
246
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
246
|
+
#: ../lib/r10k/git/rugged/credentials.rb:135
|
247
247
|
msgid "URL %{url} includes the username %{username}, using that user for authentication."
|
248
248
|
msgstr ""
|
249
249
|
|
250
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
250
|
+
#: ../lib/r10k/git/rugged/credentials.rb:138
|
251
251
|
msgid "URL %{url} did not specify a user, using %{user} from configuration"
|
252
252
|
msgstr ""
|
253
253
|
|
254
|
-
#: ../lib/r10k/git/rugged/credentials.rb:
|
254
|
+
#: ../lib/r10k/git/rugged/credentials.rb:141
|
255
255
|
msgid "URL %{url} did not specify a user, using current user %{user}"
|
256
256
|
msgstr ""
|
257
257
|
|
258
|
+
#: ../lib/r10k/git/rugged/credentials.rb:148
|
259
|
+
msgid "Github App id contains invalid characters."
|
260
|
+
msgstr ""
|
261
|
+
|
262
|
+
#: ../lib/r10k/git/rugged/credentials.rb:149
|
263
|
+
msgid "Github App token ttl contains invalid characters."
|
264
|
+
msgstr ""
|
265
|
+
|
266
|
+
#: ../lib/r10k/git/rugged/credentials.rb:150
|
267
|
+
msgid "Github App key is missing or unreadable"
|
268
|
+
msgstr ""
|
269
|
+
|
270
|
+
#: ../lib/r10k/git/rugged/credentials.rb:155
|
271
|
+
msgid "Github App key is not a valid SSL private key"
|
272
|
+
msgstr ""
|
273
|
+
|
274
|
+
#: ../lib/r10k/git/rugged/credentials.rb:158
|
275
|
+
msgid "Github App key is not a valid SSL key"
|
276
|
+
msgstr ""
|
277
|
+
|
278
|
+
#: ../lib/r10k/git/rugged/credentials.rb:161
|
279
|
+
msgid "Using Github App id %{app_id} with SSL key from %{key_path}"
|
280
|
+
msgstr ""
|
281
|
+
|
282
|
+
#: ../lib/r10k/git/rugged/credentials.rb:178
|
283
|
+
msgid ""
|
284
|
+
"Unexpected response code: #{get_response.code}\n"
|
285
|
+
"Response body: #{get_response.body}"
|
286
|
+
msgstr ""
|
287
|
+
|
288
|
+
#: ../lib/r10k/git/rugged/credentials.rb:179
|
289
|
+
msgid "Error using private key to get Github App access token from url"
|
290
|
+
msgstr ""
|
291
|
+
|
292
|
+
#: ../lib/r10k/git/rugged/credentials.rb:194
|
293
|
+
msgid ""
|
294
|
+
"Unexpected response code: #{post_response.code}\n"
|
295
|
+
"Response body: #{post_response.body}"
|
296
|
+
msgstr ""
|
297
|
+
|
298
|
+
#: ../lib/r10k/git/rugged/credentials.rb:195
|
299
|
+
msgid "Error using private key to generate access token from #{access_token_url}"
|
300
|
+
msgstr ""
|
301
|
+
|
302
|
+
#: ../lib/r10k/git/rugged/credentials.rb:200
|
303
|
+
msgid "Github App token contains invalid characters."
|
304
|
+
msgstr ""
|
305
|
+
|
306
|
+
#: ../lib/r10k/git/rugged/credentials.rb:202
|
307
|
+
msgid "Github App token generated, expires at: %{expire}"
|
308
|
+
msgstr ""
|
309
|
+
|
258
310
|
#: ../lib/r10k/git/rugged/thin_repository.rb:85 ../lib/r10k/git/shellgit/thin_repository.rb:65
|
259
311
|
msgid "Updated repo %{path} to include alternate object db path %{objects_dir}"
|
260
312
|
msgstr ""
|
@@ -319,27 +371,39 @@ msgstr ""
|
|
319
371
|
msgid "Module %{name} with args %{args} doesn't have an implementation. (Are you using the right arguments?)"
|
320
372
|
msgstr ""
|
321
373
|
|
322
|
-
#: ../lib/r10k/module/base.rb:
|
374
|
+
#: ../lib/r10k/module/base.rb:80
|
375
|
+
msgid "Spec dir for #{@title} will not be deleted because it is not in the moduledir"
|
376
|
+
msgstr ""
|
377
|
+
|
378
|
+
#: ../lib/r10k/module/base.rb:92
|
379
|
+
msgid "Deleting spec data at #{spec_path}"
|
380
|
+
msgstr ""
|
381
|
+
|
382
|
+
#: ../lib/r10k/module/base.rb:100
|
383
|
+
msgid "No spec dir detected at #{spec_path}, skipping deletion"
|
384
|
+
msgstr ""
|
385
|
+
|
386
|
+
#: ../lib/r10k/module/base.rb:112
|
323
387
|
msgid "Deploying module to %{path}"
|
324
388
|
msgstr ""
|
325
389
|
|
326
|
-
#: ../lib/r10k/module/base.rb:
|
390
|
+
#: ../lib/r10k/module/base.rb:115
|
327
391
|
msgid "Only updating modules %{modules}, skipping module %{name}"
|
328
392
|
msgstr ""
|
329
393
|
|
330
|
-
#: ../lib/r10k/module/base.rb:
|
394
|
+
#: ../lib/r10k/module/base.rb:171
|
331
395
|
msgid "Module name (%{title}) must match either 'modulename' or 'owner/modulename'"
|
332
396
|
msgstr ""
|
333
397
|
|
334
|
-
#: ../lib/r10k/module/forge.rb:
|
398
|
+
#: ../lib/r10k/module/forge.rb:90
|
335
399
|
msgid "The module %{title} does not appear to have any published releases, cannot determine latest version."
|
336
400
|
msgstr ""
|
337
401
|
|
338
|
-
#: ../lib/r10k/module/forge.rb:
|
402
|
+
#: ../lib/r10k/module/forge.rb:93 ../lib/r10k/module/forge.rb:122
|
339
403
|
msgid "The module %{title} does not exist on %{url}."
|
340
404
|
msgstr ""
|
341
405
|
|
342
|
-
#: ../lib/r10k/module/forge.rb:
|
406
|
+
#: ../lib/r10k/module/forge.rb:197
|
343
407
|
msgid "Forge module names must match 'owner/modulename', instead got #{title}"
|
344
408
|
msgstr ""
|
345
409
|
|
@@ -355,30 +419,34 @@ msgstr ""
|
|
355
419
|
msgid "Could not read metadata.json"
|
356
420
|
msgstr ""
|
357
421
|
|
358
|
-
#: ../lib/r10k/puppetfile.rb:
|
422
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:49
|
359
423
|
msgid "Using Puppetfile '%{puppetfile}'"
|
360
424
|
msgstr ""
|
361
425
|
|
362
|
-
#: ../lib/r10k/puppetfile.rb:
|
363
|
-
msgid "
|
426
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:50
|
427
|
+
msgid "Using moduledir '%{moduledir}'"
|
364
428
|
msgstr ""
|
365
429
|
|
366
|
-
#: ../lib/r10k/puppetfile.rb:
|
430
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:74
|
367
431
|
msgid "Failed to evaluate %{path}"
|
368
432
|
msgstr ""
|
369
433
|
|
370
|
-
#: ../lib/r10k/puppetfile.rb:
|
434
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:149
|
371
435
|
msgid "Puppetfiles cannot contain duplicate module names."
|
372
436
|
msgstr ""
|
373
437
|
|
374
|
-
#: ../lib/r10k/puppetfile.rb:
|
438
|
+
#: ../lib/r10k/module_loader/puppetfile.rb:151
|
375
439
|
msgid "Remove the duplicates of the following modules: %{dupes}"
|
376
440
|
msgstr ""
|
377
441
|
|
378
|
-
#: ../lib/r10k/puppetfile.rb:
|
442
|
+
#: ../lib/r10k/module_loader/puppetfile/dsl.rb:32
|
379
443
|
msgid "unrecognized declaration '%{method}'"
|
380
444
|
msgstr ""
|
381
445
|
|
446
|
+
#: ../lib/r10k/puppetfile.rb:105
|
447
|
+
msgid "Puppetfile %{path} missing or unreadable"
|
448
|
+
msgstr ""
|
449
|
+
|
382
450
|
#: ../lib/r10k/settings/collection.rb:77
|
383
451
|
msgid "Validation failed for '%{name}' settings group"
|
384
452
|
msgstr ""
|