r10k 3.10.0 → 3.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 ""
|