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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 98a14b1df3c7c1c6fdc4a8ab870ccf579e379374
4
- data.tar.gz: 330ee7f16af7a0d4c9cc28f49572ba5fcc721fbb
3
+ metadata.gz: 6f21eff79fdd9ffaded59f986834a49490379cf2
4
+ data.tar.gz: d38bc62908bcbace5d0155f9a1c77adf8dac0965
5
5
  SHA512:
6
- metadata.gz: 0facd2f02cb71826e570aedcededc5b9a7350d7de4ea373c2080a7cdf49c9d4fd8150b83d6c8dc8b6c24d5f15179e300c7d2c3bc2d2bcfff1ca8d8946d337449
7
- data.tar.gz: 8a4f20a8f41b1557cbed4f824146376789f870341d3d338a271d8b72f55dd1e3a71229fa1890710a7aded41fba6a26150b97b10e9ada934129ffa106a2c637e3
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
- next unless dir.end_with? '_production'
40
- target = File.basename(dir.sub('_production', ''))
41
- targets << target
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
- else
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
- if plugin(:Dashboard, :update_results)
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' => 'Already running'}.to_json
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 false if @test_running
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
- system('rake', 'generate')
84
+ output, status = Open3.capture2e('rake', 'generate')
77
85
  else
78
- system('rake', 'generate', "current_test=#{@current_test}")
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
- true
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.chmod(0750, environment)
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.3
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-10-12 00:00:00.000000000 Z
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.2.5
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.