poise-git 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.kitchen.yml +3 -0
- data/.travis.yml +54 -0
- data/.yardopts +7 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +36 -0
- data/LICENSE +201 -0
- data/README.md +151 -0
- data/Rakefile +17 -0
- data/chef/attributes/default.rb +26 -0
- data/chef/recipes/default.rb +22 -0
- data/lib/poise_git.rb +24 -0
- data/lib/poise_git/cheftie.rb +18 -0
- data/lib/poise_git/git_client_providers.rb +36 -0
- data/lib/poise_git/git_client_providers/base.rb +93 -0
- data/lib/poise_git/git_client_providers/dummy.rb +79 -0
- data/lib/poise_git/git_client_providers/system.rb +73 -0
- data/lib/poise_git/git_command_mixin.rb +37 -0
- data/lib/poise_git/resources.rb +27 -0
- data/lib/poise_git/resources/poise_git.rb +252 -0
- data/lib/poise_git/resources/poise_git_client.rb +82 -0
- data/lib/poise_git/safe_string.rb +25 -0
- data/lib/poise_git/version.rb +20 -0
- data/poise-git.gemspec +42 -0
- data/test/cookbook/metadata.rb +18 -0
- data/test/cookbook/recipes/default.rb +96 -0
- data/test/gemfiles/chef-12.1.gemfile +23 -0
- data/test/gemfiles/chef-12.10.gemfile +23 -0
- data/test/gemfiles/chef-12.11.gemfile +23 -0
- data/test/gemfiles/chef-12.12.gemfile +22 -0
- data/test/gemfiles/chef-12.13.gemfile +22 -0
- data/test/gemfiles/chef-12.14.gemfile +19 -0
- data/test/gemfiles/chef-12.15.gemfile +19 -0
- data/test/gemfiles/chef-12.16.gemfile +19 -0
- data/test/gemfiles/chef-12.17.gemfile +19 -0
- data/test/gemfiles/chef-12.18.gemfile +19 -0
- data/test/gemfiles/chef-12.19.gemfile +19 -0
- data/test/gemfiles/chef-12.2.gemfile +23 -0
- data/test/gemfiles/chef-12.3.gemfile +23 -0
- data/test/gemfiles/chef-12.4.gemfile +24 -0
- data/test/gemfiles/chef-12.5.gemfile +23 -0
- data/test/gemfiles/chef-12.6.gemfile +23 -0
- data/test/gemfiles/chef-12.7.gemfile +23 -0
- data/test/gemfiles/chef-12.8.gemfile +23 -0
- data/test/gemfiles/chef-12.9.gemfile +23 -0
- data/test/gemfiles/chef-12.gemfile +19 -0
- data/test/gemfiles/master.gemfile +25 -0
- data/test/integration/default/serverspec/default_spec.rb +49 -0
- data/test/spec/git_client_providers/dummy_spec.rb +76 -0
- data/test/spec/git_client_providers/system_spec.rb +64 -0
- data/test/spec/recipe_spec.rb +35 -0
- data/test/spec/resources/poise_git_client.rb +64 -0
- data/test/spec/resources/poise_git_spec.rb +153 -0
- data/test/spec/spec_helper.rb +19 -0
- metadata +208 -0
@@ -0,0 +1,252 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015-2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'shellwords'
|
18
|
+
require 'zlib'
|
19
|
+
|
20
|
+
require 'chef/provider/git'
|
21
|
+
require 'chef/resource/git'
|
22
|
+
require 'poise'
|
23
|
+
|
24
|
+
require 'poise_git/git_command_mixin'
|
25
|
+
require 'poise_git/safe_string'
|
26
|
+
|
27
|
+
|
28
|
+
module PoiseGit
|
29
|
+
module Resources
|
30
|
+
# (see PoiseGit::Resource)
|
31
|
+
# @since 1.0.0
|
32
|
+
module PoiseGit
|
33
|
+
# A `poise_git` resource to manage Python installations using pip.
|
34
|
+
#
|
35
|
+
# @provides poise_git
|
36
|
+
# @action checkout
|
37
|
+
# @action export
|
38
|
+
# @action sync
|
39
|
+
# @example
|
40
|
+
# poise_git '/srv/myapp' do
|
41
|
+
# repository 'https://...'
|
42
|
+
# deploy_key data_bag_item('deploy_keys', 'myapp')['key']
|
43
|
+
# end
|
44
|
+
class Resource < Chef::Resource::Git
|
45
|
+
include Poise
|
46
|
+
include ::PoiseGit::GitCommandMixin
|
47
|
+
provides(:poise_git)
|
48
|
+
# Manually create matchers because #actions is unreliable.
|
49
|
+
%i{checkout export sync}.each do |action|
|
50
|
+
Poise::Helpers::ChefspecMatchers.create_matcher(:poise_git, action)
|
51
|
+
end
|
52
|
+
|
53
|
+
# @api private
|
54
|
+
def initialize(*args)
|
55
|
+
super
|
56
|
+
# Because the superclass declares this, we have to as well. Should be
|
57
|
+
# removable at some point when Chef makes everything use the provider
|
58
|
+
# resolver system instead.
|
59
|
+
@resource_name = :poise_git if defined?(@resource_name) && @resource_name
|
60
|
+
@provider = ::PoiseGit::Resources::PoiseGit::Provider if defined?(@provider) && @provider
|
61
|
+
end
|
62
|
+
|
63
|
+
# @!attribute strict_ssh
|
64
|
+
# Enable strict SSH host key checking. Defaults to false.
|
65
|
+
# @return [Boolean]
|
66
|
+
attribute(:strict_ssh, equal_to: [true, false], default: false)
|
67
|
+
|
68
|
+
# @!attribute deploy_key
|
69
|
+
# SSH deploy key as either a string value or a path to a key file.
|
70
|
+
# @return [String]
|
71
|
+
def deploy_key(val=nil)
|
72
|
+
# Use a SafeString for literal deploy keys so they aren't shown.
|
73
|
+
val = SafeString.new(val) if val && !deploy_key_is_local?(val)
|
74
|
+
set_or_return(:deploy_key, val, kind_of: String)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Default SSH wrapper path.
|
78
|
+
#
|
79
|
+
# @api private
|
80
|
+
# @return [String]
|
81
|
+
def ssh_wrapper_path
|
82
|
+
@ssh_wrapper_path ||= "#{Chef::Config[:file_cache_path]}/poise_git_wrapper_#{Zlib.crc32(name)}"
|
83
|
+
end
|
84
|
+
|
85
|
+
# Guess if the deploy key is a local path or literal value.
|
86
|
+
#
|
87
|
+
# @api private
|
88
|
+
# @param key [String, nil] Key value to check. Defaults to self.key.
|
89
|
+
# @return [Boolean]
|
90
|
+
def deploy_key_is_local?(key=nil)
|
91
|
+
key ||= deploy_key
|
92
|
+
# Try to be mindful of Windows-y paths here even though they almost
|
93
|
+
# certainly won't actually work later on with ssh.
|
94
|
+
key && key =~ /\A(\/|[a-zA-Z]:)/
|
95
|
+
end
|
96
|
+
|
97
|
+
# Path to deploy key.
|
98
|
+
#
|
99
|
+
# @api private
|
100
|
+
# @return [String]
|
101
|
+
def deploy_key_path
|
102
|
+
@deploy_key_path ||= if deploy_key_is_local?
|
103
|
+
deploy_key
|
104
|
+
else
|
105
|
+
"#{Chef::Config[:file_cache_path]}/poise_git_deploy_#{Zlib.crc32(name)}"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Hook to force the git install via recipe if needed.
|
110
|
+
def after_created
|
111
|
+
if !parent_git && node['poise-git']['default_recipe']
|
112
|
+
# Use the default recipe to give us a parent the next time we ask.
|
113
|
+
run_context.include_recipe(node['poise-git']['default_recipe'])
|
114
|
+
# Force it to re-expand the cache next time.
|
115
|
+
@parent_git = nil
|
116
|
+
end
|
117
|
+
super
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
# The default provider for the `poise_git` resource.
|
123
|
+
#
|
124
|
+
# @see Resource
|
125
|
+
class Provider < Chef::Provider::Git
|
126
|
+
include Poise
|
127
|
+
include ::PoiseGit::GitCommandMixin
|
128
|
+
provides(:poise_git)
|
129
|
+
|
130
|
+
# @api private
|
131
|
+
def initialize(*args)
|
132
|
+
super
|
133
|
+
# Set the SSH wrapper path in a late-binding kind of way. This better
|
134
|
+
# supports situations where the user doesn't exist until Chef converges.
|
135
|
+
new_resource.ssh_wrapper(new_resource.ssh_wrapper_path) if new_resource.deploy_key
|
136
|
+
end
|
137
|
+
|
138
|
+
# Hack our special login in before load_current_resource runs because that
|
139
|
+
# needs access to the git remote.
|
140
|
+
#
|
141
|
+
# @api private
|
142
|
+
def load_current_resource
|
143
|
+
create_deploy_key if new_resource.deploy_key
|
144
|
+
super
|
145
|
+
end
|
146
|
+
|
147
|
+
# Like {#load_current_resource}, make sure git is installed since we might
|
148
|
+
# need it depending on the version of Chef.
|
149
|
+
#
|
150
|
+
# @api private
|
151
|
+
def define_resource_requirements
|
152
|
+
create_deploy_key if new_resource.deploy_key
|
153
|
+
super
|
154
|
+
end
|
155
|
+
|
156
|
+
private
|
157
|
+
|
158
|
+
# Install git and set up the deploy key if needed. Safe to call multiple
|
159
|
+
# times if needed.
|
160
|
+
#
|
161
|
+
# @api private
|
162
|
+
# @return [void]
|
163
|
+
def create_deploy_key
|
164
|
+
return if @create_deploy_key
|
165
|
+
Chef::Log.debug("[#{new_resource}] Creating deploy key")
|
166
|
+
old_why_run = Chef::Config[:why_run]
|
167
|
+
begin
|
168
|
+
# Forcibly disable why run support so these will always run, since
|
169
|
+
# we need to be able to talk to the git remote even just for the
|
170
|
+
# whyrun checks.
|
171
|
+
Chef::Config[:why_run] = false
|
172
|
+
notifying_block do
|
173
|
+
write_deploy_key
|
174
|
+
write_ssh_wrapper
|
175
|
+
end
|
176
|
+
ensure
|
177
|
+
Chef::Config[:why_run] = old_why_run
|
178
|
+
end
|
179
|
+
@create_deploy_key = true
|
180
|
+
end
|
181
|
+
|
182
|
+
# Copy the deploy key to a file if needed.
|
183
|
+
#
|
184
|
+
# @api private
|
185
|
+
# @return [void]
|
186
|
+
def write_deploy_key
|
187
|
+
# Check if we have a local path or some actual content
|
188
|
+
return if new_resource.deploy_key_is_local?
|
189
|
+
file new_resource.deploy_key_path do
|
190
|
+
owner new_resource.user
|
191
|
+
group new_resource.group
|
192
|
+
mode '600'
|
193
|
+
content new_resource.deploy_key
|
194
|
+
sensitive true
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Create the SSH wrapper script.
|
199
|
+
#
|
200
|
+
# @api private
|
201
|
+
# @return [void]
|
202
|
+
def write_ssh_wrapper
|
203
|
+
# Write out the GIT_SSH script, it should already be enabled above
|
204
|
+
file new_resource.ssh_wrapper_path do
|
205
|
+
owner new_resource.user
|
206
|
+
group new_resource.group
|
207
|
+
mode '700'
|
208
|
+
content %Q{#!/bin/sh\n/usr/bin/env ssh #{'-o "StrictHostKeyChecking=no" ' unless new_resource.strict_ssh}-i "#{new_resource.deploy_key_path}" $@\n}
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
# Patch back in the `#git` from the git provider. This otherwise conflicts
|
213
|
+
# with the `#git` defined by the DSL, which gets included in such a way
|
214
|
+
# that the DSL takes priority.
|
215
|
+
#
|
216
|
+
# @api private
|
217
|
+
def git(*args, &block)
|
218
|
+
self.class.superclass.instance_method(:git).bind(self).call(*args, &block)
|
219
|
+
end
|
220
|
+
|
221
|
+
# Trick all shell_out related things in the base class in to using
|
222
|
+
# my git_shell_out instead.
|
223
|
+
#
|
224
|
+
# @api private
|
225
|
+
def shell_out(*cmd, **options)
|
226
|
+
if @shell_out_hack_inner
|
227
|
+
# This is the real call.
|
228
|
+
super
|
229
|
+
else
|
230
|
+
# This ia call we want to intercept and send to our method.
|
231
|
+
begin
|
232
|
+
@shell_out_hack_inner = true
|
233
|
+
# Remove nils and flatten for compat with how core uses this method.
|
234
|
+
cmd.compact!
|
235
|
+
cmd.flatten!
|
236
|
+
# Reparse the command to get a clean array.
|
237
|
+
cmd = Shellwords.split(cmd.join(' '))
|
238
|
+
# We'll add the git command back in ourselves.
|
239
|
+
cmd.shift if cmd.first == 'git'
|
240
|
+
# Push the yak stack.
|
241
|
+
git_shell_out(*cmd, **options)
|
242
|
+
ensure
|
243
|
+
@shell_out_hack_inner = false
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'chef/resource'
|
18
|
+
require 'poise'
|
19
|
+
|
20
|
+
|
21
|
+
module PoiseGit
|
22
|
+
module Resources
|
23
|
+
# (see PoiseGitClient::Resource)
|
24
|
+
# @since 1.0.0
|
25
|
+
module PoiseGitClient
|
26
|
+
# A `poise_git_client` resource to install a C compiler and build tools.
|
27
|
+
#
|
28
|
+
# @provides poise_git_client
|
29
|
+
# @action install
|
30
|
+
# @action uninstall
|
31
|
+
# @example
|
32
|
+
# poise_git_client 'git'
|
33
|
+
class Resource < Chef::Resource
|
34
|
+
include Poise(inversion: true, container: true)
|
35
|
+
provides(:poise_git_client)
|
36
|
+
actions(:install, :uninstall)
|
37
|
+
|
38
|
+
# @!attribute version
|
39
|
+
# Version of Git to install. The version is prefix-matched so `'2'`
|
40
|
+
# will install the most recent Git 2.x, and so on.
|
41
|
+
# @return [String]
|
42
|
+
# @example Install any version
|
43
|
+
# poise_git_client 'any' do
|
44
|
+
# version ''
|
45
|
+
# end
|
46
|
+
# @example Install Git 2
|
47
|
+
# poise_git_client '2'
|
48
|
+
attribute(:version, kind_of: String, default: lazy { default_version })
|
49
|
+
|
50
|
+
# The path to the `git` binary for this Git installation. This is
|
51
|
+
# an output property.
|
52
|
+
#
|
53
|
+
# @return [String]
|
54
|
+
# @example
|
55
|
+
# execute "#{resources('poise_git_client[git]').git_binary} init"
|
56
|
+
def git_binary
|
57
|
+
provider_for_action(:git_binary).git_binary
|
58
|
+
end
|
59
|
+
|
60
|
+
# The environment variables for this Git installation. This is an
|
61
|
+
# output property.
|
62
|
+
#
|
63
|
+
# @return [Hash<String, String>]
|
64
|
+
def git_environment
|
65
|
+
provider_for_action(:git_environment).git_environment
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
# Default value for the version property. Trims an optional `git-` from
|
71
|
+
# the resource name.
|
72
|
+
#
|
73
|
+
# @return [String]
|
74
|
+
def default_version
|
75
|
+
name[/^(git-?)?(.*)$/, 2] || ''
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Providers can be found under git_client_providers/.
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015-2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
|
18
|
+
module PoiseGit
|
19
|
+
# A string that won't be shown in Chef error output
|
20
|
+
class SafeString < String
|
21
|
+
def to_text
|
22
|
+
'"suppressed sensitive value"'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015-2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
|
18
|
+
module PoiseGit
|
19
|
+
VERSION = '1.0.0'
|
20
|
+
end
|
data/poise-git.gemspec
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015-2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
lib = File.expand_path('../lib', __FILE__)
|
18
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
19
|
+
require 'poise_git/version'
|
20
|
+
|
21
|
+
Gem::Specification.new do |spec|
|
22
|
+
spec.name = 'poise-git'
|
23
|
+
spec.version = PoiseGit::VERSION
|
24
|
+
spec.authors = ['Noah Kantrowitz']
|
25
|
+
spec.email = %w{noah@coderanger.net}
|
26
|
+
spec.description = 'A Chef cookbook for installing and using Git.'
|
27
|
+
spec.summary = spec.description
|
28
|
+
spec.homepage = 'https://github.com/poise/poise-git'
|
29
|
+
spec.license = 'Apache 2.0'
|
30
|
+
|
31
|
+
spec.files = `git ls-files`.split($/)
|
32
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
33
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
34
|
+
spec.require_paths = %w{lib}
|
35
|
+
|
36
|
+
spec.add_dependency 'chef', '>= 12.1', '< 14'
|
37
|
+
spec.add_dependency 'halite', '~> 1.1'
|
38
|
+
spec.add_dependency 'poise', '~> 2.6'
|
39
|
+
spec.add_dependency 'poise-languages', '~> 2.1'
|
40
|
+
|
41
|
+
spec.add_development_dependency 'poise-boiler', '~> 1.6'
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
name 'poise-git_test'
|
18
|
+
depends 'poise-git'
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2017, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
# Test SSH deploy key. Go ahead and scrape it, won't get you much.
|
18
|
+
# Pubkey ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCk2Y0Vj3oWr5oyo2ekL0V7Tj9/vNBjH6AiO/zfIc+7dR1KaCeCkx5GRhP/XxaiSn3Fxl1JSpBswd+Oue9SJ16nuQ2eUrK5zzN+GRsz4DfqvczmDLGHrlND3FpE+GbCMbmXObYoki9LuysrYVWfye4Rc5ICm+rSqtD+QB8rUguqXKu9tVVx9ug22P5s5OxcTCOZRJsz4U++64coD8X3P++6icGemXZDUUR5B2oWoMzXafbOC1Oo0aStAxEew/kfs3hFmdfmMdC9KAilqPxY1LtqHhMB0rdqynaAc4r1HKoSbAGdcwrJgd2TV8eoB25ydvzZwnOhLdO5Cm8Od63ovEUR
|
19
|
+
DEPLOY_KEY = <<-EOH
|
20
|
+
-----BEGIN RSA PRIVATE KEY-----
|
21
|
+
MIIEowIBAAKCAQEApNmNFY96Fq+aMqNnpC9Fe04/f7zQYx+gIjv83yHPu3UdSmgn
|
22
|
+
gpMeRkYT/18Wokp9xcZdSUqQbMHfjrnvUidep7kNnlKyuc8zfhkbM+A36r3M5gyx
|
23
|
+
h65TQ9xaRPhmwjG5lzm2KJIvS7srK2FVn8nuEXOSApvq0qrQ/kAfK1ILqlyrvbVV
|
24
|
+
cfboNtj+bOTsXEwjmUSbM+FPvuuHKA/F9z/vuonBnpl2Q1FEeQdqFqDM12n2zgtT
|
25
|
+
qNGkrQMRHsP5H7N4RZnX5jHQvSgIpaj8WNS7ah4TAdK3asp2gHOK9RyqEmwBnXMK
|
26
|
+
yYHdk1fHqAducnb82cJzoS3TuQpvDnet6LxFEQIDAQABAoIBAHkim/fB7LcK5sZb
|
27
|
+
KOePDQGk6ChXeNG+BY/igNj+IYXgc1uf2Zirvs1o5Xz8RMeQ8YcJUrduoV4pwLtC
|
28
|
+
ikfWQkoBQ66ZmlfLmE0K6eBe3PgT7KMHpNTNFsaA/5w65FfC7lvfvqllcne12+0O
|
29
|
+
ozq9ycDtKdfc9ttDRjvupnjQ212deUmpg6BG8rR9dx87Rwbk2/l+dCiSafl4HN5N
|
30
|
+
LbrENL7K3j+XVA2DKEVsrCstJzaFgqflcsnrDX76M9TEx1MtowM3Ec3jcT9W1FX1
|
31
|
+
/Rizmyow4ZV56QVz1+U13N7j0tW4EJl9EQnUye7UXyoSKfDOAGkZEKeztephBwZQ
|
32
|
+
WBgnBLkCgYEA1FmUBv7gBnVRtpfDF+qefhgT9O/ANBh0W4m6mAzawle+TleZ1vsJ
|
33
|
+
1oKG6XcSQQiRRnKdcAakxSmIw5LK54hlMczy9l5GHRQozYrbdsGUzTgYHcmThr6v
|
34
|
+
V4b7c+OxmfeV3vae07GHeXUPttzHDKXBdQqZaTaax5y8bjAflmRYNbcCgYEAxrxj
|
35
|
+
1SSwOlTXB+PVaHUPTe4AvrliCxjs9PV4O1f8oMbZ97avvNrtBNroYvukLfQNrnfF
|
36
|
+
0fIdm/BDOgAnD5I9bwbOuRqvLidzHik9KM33mpmC/4fRI5lFzMv0yd4S/dpJbGql
|
37
|
+
FQvZKGGGc8h4NXiXdSqCqr+axJdBRRL+2PJ3G3cCgYB4jZpiFlRsljIbrTDO5R2x
|
38
|
+
jE3YIjxF1xRH23sZU0LmThX2N/lYeRBuvY+F/1lXnluLWQpUTRFB9YB1N2MF6wM4
|
39
|
+
MJhGkeLQI1++wPQzCVdG4m+eiY+9UYgN8s3STxPGyy5EdFJa8FBu/aw8Lj66yWd4
|
40
|
+
4NmTR7K7XBoFnEByiukhJQKBgQCb//2NrkL3RumUM++tE1Z0IcNL81FWzLYUgyth
|
41
|
+
yetweSdYH3tLj75F9WA9crKpr82dij8qUheT9MGQodYHjw/SO1HCU4P3gtgGcPCl
|
42
|
+
OyiFnsMJup8chpAX9nGslDnsMpE4HW6AWtCXthZIhLB3qLWbL0dqqQTgFKsTgZmy
|
43
|
+
yoFceQKBgBcNNGTOjzW+J7lfC+AY+XUPhZQAUJi47+m0Tbrp5j/1BDuvI6WTlsIr
|
44
|
+
7WMFJM91xqHQZK7D0zjbGa42+uwlCs+ZBolNZpW2K7dNAriBjHuD3VDhlkqZrPC2
|
45
|
+
EwOhBYydRkzoALbgESjKP3VwfIVr9tWs4CyndY81uqRbgiRqdzR4
|
46
|
+
-----END RSA PRIVATE KEY-----
|
47
|
+
EOH
|
48
|
+
|
49
|
+
# Base case test.
|
50
|
+
poise_git '/test1' do
|
51
|
+
repository 'https://github.com/poise/test_repo.git'
|
52
|
+
revision 'master'
|
53
|
+
end
|
54
|
+
|
55
|
+
# Test using a branch just to make sure I didn't break that.
|
56
|
+
poise_git '/test2' do
|
57
|
+
repository 'https://github.com/poise/test_repo.git'
|
58
|
+
revision 'release'
|
59
|
+
end
|
60
|
+
|
61
|
+
# Test using an inline string value for the deploy key.
|
62
|
+
poise_git '/test3' do
|
63
|
+
repository 'git@github.com:coderanger/private_test_repo.git'
|
64
|
+
revision 'master'
|
65
|
+
deploy_key DEPLOY_KEY
|
66
|
+
end
|
67
|
+
|
68
|
+
# Test using a file path for the deploy key.
|
69
|
+
file '/test4.key' do
|
70
|
+
content DEPLOY_KEY
|
71
|
+
mode '600'
|
72
|
+
sensitive true
|
73
|
+
end
|
74
|
+
|
75
|
+
poise_git '/test4' do
|
76
|
+
repository 'git@github.com:coderanger/private_test_repo.git'
|
77
|
+
revision 'release'
|
78
|
+
deploy_key '/test4.key'
|
79
|
+
end
|
80
|
+
|
81
|
+
# Test deploying as a non-root user.
|
82
|
+
user 'poise' do
|
83
|
+
system true
|
84
|
+
end
|
85
|
+
|
86
|
+
directory '/test5' do
|
87
|
+
mode '777'
|
88
|
+
owner 'poise'
|
89
|
+
end
|
90
|
+
|
91
|
+
poise_git '/test5' do
|
92
|
+
repository 'git@github.com:coderanger/private_test_repo.git'
|
93
|
+
revision 'master'
|
94
|
+
deploy_key DEPLOY_KEY
|
95
|
+
user 'poise'
|
96
|
+
end
|