puppetfactory 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/puppetfactory/dashboard/rake_tasks.rb +8 -3
- data/lib/puppetfactory/dashboard/spec_helper.rb +5 -1
- data/lib/puppetfactory/plugins/dashboard.rb +20 -6
- data/lib/puppetfactory/plugins/gitea.rb +68 -0
- data/lib/puppetfactory/plugins/user_environment.rb +3 -1
- data/views/logs.erb +9 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f21eff79fdd9ffaded59f986834a49490379cf2
|
4
|
+
data.tar.gz: d38bc62908bcbace5d0155f9a1c77adf8dac0965
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a4543c5d601cc2478e21088024b991e2afcdd13fe3fc2db1c3b915f8794f54a03416e952554d70851ff86e23b31681bc48c00967f632accd256ece149be86d9
|
7
|
+
data.tar.gz: e68ef55d635a24b24b97283cf8fe53b0a543a2d65d4ee2fb720eab471dbdaffef0b99a301d2f91294c6d12232bab9e2cd56cd6ac0aed9548d743301ee59406e9
|
@@ -36,9 +36,11 @@ namespace :spec do
|
|
36
36
|
targets = []
|
37
37
|
Dir.glob('/etc/puppetlabs/code/environments/*').each do |dir|
|
38
38
|
next unless File.directory?(dir)
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
|
40
|
+
dir = File.basename(dir)
|
41
|
+
next if dir == 'production'
|
42
|
+
|
43
|
+
targets << dir.sub('_production', '')
|
42
44
|
end
|
43
45
|
task :all_agents => targets
|
44
46
|
|
@@ -47,10 +49,12 @@ namespace :spec do
|
|
47
49
|
html = "output/html/#{test}"
|
48
50
|
json = "output/json/#{test}"
|
49
51
|
pattern = "spec/#{test}_spec.rb"
|
52
|
+
puts "Running the #{test} test suite..."
|
50
53
|
else
|
51
54
|
html = "output/html"
|
52
55
|
json = "output/json"
|
53
56
|
pattern = "spec/*_spec.rb"
|
57
|
+
puts "Running all test suites..."
|
54
58
|
end
|
55
59
|
|
56
60
|
FileUtils.mkdir_p html
|
@@ -59,6 +63,7 @@ namespace :spec do
|
|
59
63
|
targets.each do |target|
|
60
64
|
desc "Run Puppetfactory tests for #{target}"
|
61
65
|
RSpec::Core::RakeTask.new(target.to_sym) do |t|
|
66
|
+
puts " * #{target}"
|
62
67
|
ENV['TARGET_HOST'] = target
|
63
68
|
t.verbose = false
|
64
69
|
t.fail_on_error = false
|
@@ -6,10 +6,14 @@ environmentpath = "/etc/puppetlabs/code/environments"
|
|
6
6
|
|
7
7
|
if File.directory? "#{environmentpath}/#{username}_production"
|
8
8
|
environment = "#{username}_production"
|
9
|
-
|
9
|
+
elsif File.directory? "#{environmentpath}/#{username}"
|
10
10
|
environment = username
|
11
|
+
else
|
12
|
+
raise "No environment exists for #{username}"
|
11
13
|
end
|
12
14
|
|
15
|
+
puts " - Testing environment #{environment}"
|
16
|
+
|
13
17
|
RSpec.configure do |c|
|
14
18
|
c.environmentpath = environmentpath
|
15
19
|
c.module_path = "#{environmentpath}/#{environment}/site"
|
@@ -43,10 +43,15 @@ class Puppetfactory::Plugins::Dashboard < Puppetfactory::Plugins
|
|
43
43
|
@server.get '/dashboard/update' do
|
44
44
|
$logger.info "Triggering dashboard update."
|
45
45
|
|
46
|
-
|
46
|
+
case plugin(:Dashboard, :update_results)
|
47
|
+
when :running
|
48
|
+
{'status' => 'fail', 'message' => 'Already running'}.to_json
|
49
|
+
when :success
|
47
50
|
{'status' => 'success'}.to_json
|
51
|
+
when :fail
|
52
|
+
{'status' => 'fail', 'message' => "Tests failed to execute. Please see logs"}.to_json
|
48
53
|
else
|
49
|
-
{'status' => 'fail', 'message' =>
|
54
|
+
{'status' => 'fail', 'message' => "Unknown status"}.to_json
|
50
55
|
end
|
51
56
|
end
|
52
57
|
|
@@ -67,20 +72,29 @@ class Puppetfactory::Plugins::Dashboard < Puppetfactory::Plugins
|
|
67
72
|
end
|
68
73
|
|
69
74
|
def update_results()
|
70
|
-
return
|
75
|
+
return :running if @test_running
|
71
76
|
@test_running = true
|
72
77
|
|
78
|
+
output = nil
|
79
|
+
status = nil
|
80
|
+
|
73
81
|
Dir.chdir(@path) do
|
74
82
|
case @current_test
|
75
83
|
when 'all', 'summary'
|
76
|
-
|
84
|
+
output, status = Open3.capture2e('rake', 'generate')
|
77
85
|
else
|
78
|
-
|
86
|
+
output, status = Open3.capture2e('rake', 'generate', "current_test=#{@current_test}")
|
79
87
|
end
|
80
88
|
end
|
81
89
|
|
90
|
+
if status.success?
|
91
|
+
$logger.info output
|
92
|
+
else
|
93
|
+
$logger.error output
|
94
|
+
end
|
95
|
+
|
82
96
|
@test_running = false
|
83
|
-
|
97
|
+
return status.success? ? :success : :fail
|
84
98
|
end
|
85
99
|
|
86
100
|
def available_tests()
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'puppetfactory'
|
4
|
+
|
5
|
+
class Puppetfactory::Plugins::Gitea < Puppetfactory::Plugins
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
super(options)
|
9
|
+
|
10
|
+
@suffix = options[:usersuffix]
|
11
|
+
@gitea_path = options[:gitea_path] || '/home/git/go/bin/gitea'
|
12
|
+
@admin_username = options[:gitea_admin_username] || 'root'
|
13
|
+
@admin_password = options[:gitea_admin_password] || 'puppetlabs'
|
14
|
+
@gitea_port = options[:gitea_port] || '3000'
|
15
|
+
|
16
|
+
begin
|
17
|
+
`curl -su "#{@admin_username}:#{@admin_password}" --data 'clone_addr=https://github.com/puppetlabs-education/classroom-control-vf.git&uid=1&repo_name=classroom-control-vf' http://localhost:#{@gitea_port}/api/v1/repos/migrate`
|
18
|
+
FileUtils::mkdir_p '/var/cache/puppetfactory/gitea'
|
19
|
+
Dir.chdir('/var/cache/puppetfactory/gitea') do
|
20
|
+
`git clone --depth 1 http://#{@admin_username}:#{@admin_password}@localhost:#{@gitea_port}/#{@admin_username}/classroom-control-vf.git`
|
21
|
+
end
|
22
|
+
rescue => e
|
23
|
+
$logger.error "Error migrating repository: #{e.message}"
|
24
|
+
return false
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_collaborator(owner, repo, username, permission)
|
30
|
+
`curl -su "#{@admin_username}:#{@admin_password}" -X PUT -H "Content-Type: application/json" -d '{"permissions":"#{permission}"}' http://localhost:#{@gitea_port}/api/v1/repos/#{owner}/#{repo}/collaborators/#{username}`
|
31
|
+
end
|
32
|
+
|
33
|
+
def make_branch(username)
|
34
|
+
Dir.chdir('/var/cache/puppetfactory/gitea/classroom-control-vf') do
|
35
|
+
`git checkout -b #{username} && git push origin #{username}`
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def create(username, password)
|
40
|
+
begin
|
41
|
+
if password.length < 8
|
42
|
+
raise "Password must be at least 8 characters"
|
43
|
+
end
|
44
|
+
`su git -c "cd && #{@gitea_path} admin create-user --name #{username} --password #{password} --email #{username}.#{@suffix}"`
|
45
|
+
add_collaborator(@admin_username, 'classroom-control-vf', username, 'write')
|
46
|
+
make_branch(username)
|
47
|
+
$logger.info "Created Gitea user #{username}."
|
48
|
+
rescue => e
|
49
|
+
$logger.error "Error creating Gitea user #{username}: #{e.message}"
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
|
53
|
+
true
|
54
|
+
end
|
55
|
+
|
56
|
+
def delete(username)
|
57
|
+
begin
|
58
|
+
`curl -su "#{@admin_username}:#{@admin_password}" -X "DELETE" http://localhost:#{@gitea_port}/api/v1/admin/users/#{username}`
|
59
|
+
$logger.info "Removed GitLab user #{username}."
|
60
|
+
rescue => e
|
61
|
+
$logger.error "Error removing GitLab user #{username}: #{e.message}"
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
|
65
|
+
true
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -38,7 +38,7 @@ class Puppetfactory::Plugins::UserEnvironment < Puppetfactory::Plugins
|
|
38
38
|
|
39
39
|
# make sure the user and pe-puppet can access all the needful
|
40
40
|
FileUtils.chown_R(username, 'pe-puppet', environment)
|
41
|
-
FileUtils.
|
41
|
+
FileUtils.chmod_R(0750, environment)
|
42
42
|
|
43
43
|
deploy(username)
|
44
44
|
|
@@ -60,6 +60,8 @@ class Puppetfactory::Plugins::UserEnvironment < Puppetfactory::Plugins
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def deploy(username)
|
63
|
+
# TODO: temporary hack to keep this from disrupting current deliveries.
|
64
|
+
return if @codestage == @environments
|
63
65
|
environment = Puppetfactory::Helpers.environment_name(username)
|
64
66
|
|
65
67
|
FileUtils.cp_r("#{@codestage}/#{environment}/.", "#{@environments}/#{environment}")
|
data/views/logs.erb
CHANGED
@@ -4,8 +4,13 @@
|
|
4
4
|
</div>
|
5
5
|
|
6
6
|
<script type="text/javascript">
|
7
|
-
function loadLogs() {
|
7
|
+
function loadLogs(force) {
|
8
8
|
$("#logs .data").load("logs/data", function() {
|
9
|
+
var elem = $(this)[0]
|
10
|
+
// track the bottom of the logs, unless we've scrolled away
|
11
|
+
if(force || (elem.scrollHeight - elem.scrollTop - elem.clientHeight < 100)) {
|
12
|
+
$(this).animate({scrollTop: elem.scrollHeight}, 500);
|
13
|
+
}
|
9
14
|
|
10
15
|
// use timeout instead of an interval so that in case of network error
|
11
16
|
// we don't end up with a queue of requests stacked up.
|
@@ -14,7 +19,7 @@
|
|
14
19
|
}
|
15
20
|
|
16
21
|
$(document).ready(function() {
|
17
|
-
loadLogs();
|
22
|
+
loadLogs(true);
|
18
23
|
});
|
19
24
|
</script>
|
20
25
|
|
@@ -22,5 +27,7 @@
|
|
22
27
|
#logs .data {
|
23
28
|
font-family: monospace;
|
24
29
|
white-space: pre-wrap;
|
30
|
+
height: 500px;
|
31
|
+
overflow-y: scroll;
|
25
32
|
}
|
26
33
|
</style>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppetfactory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Ford
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/puppetfactory/plugins/dashboard.rb
|
156
156
|
- lib/puppetfactory/plugins/docker.rb
|
157
157
|
- lib/puppetfactory/plugins/example.rb
|
158
|
+
- lib/puppetfactory/plugins/gitea.rb
|
158
159
|
- lib/puppetfactory/plugins/github.rb
|
159
160
|
- lib/puppetfactory/plugins/gitlab.rb
|
160
161
|
- lib/puppetfactory/plugins/gitviz.rb
|
@@ -259,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
260
|
version: '0'
|
260
261
|
requirements: []
|
261
262
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.
|
263
|
+
rubygems_version: 2.4.5.1
|
263
264
|
signing_key:
|
264
265
|
specification_version: 4
|
265
266
|
summary: Stands up a graphical classroom manager with containerized puppet agents.
|