puppetfactory 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +13 -0
  3. data/README.md +0 -0
  4. data/bin/pfsh +31 -0
  5. data/bin/puppetfactory +153 -0
  6. data/lib/puppetfactory.rb +300 -0
  7. data/lib/puppetfactory/cli.rb +114 -0
  8. data/lib/puppetfactory/dashboard/rake_tasks.rb +69 -0
  9. data/lib/puppetfactory/dashboard/serverspec_helper.rb +84 -0
  10. data/lib/puppetfactory/dashboard/spec_helper.rb +26 -0
  11. data/lib/puppetfactory/helpers.rb +37 -0
  12. data/lib/puppetfactory/monkeypatches.rb +30 -0
  13. data/lib/puppetfactory/plugins.rb +11 -0
  14. data/lib/puppetfactory/plugins/certificates.rb +28 -0
  15. data/lib/puppetfactory/plugins/classification.rb +75 -0
  16. data/lib/puppetfactory/plugins/code_manager.rb +156 -0
  17. data/lib/puppetfactory/plugins/console_user.rb +62 -0
  18. data/lib/puppetfactory/plugins/dashboard.rb +128 -0
  19. data/lib/puppetfactory/plugins/docker.rb +193 -0
  20. data/lib/puppetfactory/plugins/example.rb +88 -0
  21. data/lib/puppetfactory/plugins/github.rb +102 -0
  22. data/lib/puppetfactory/plugins/gitlab.rb +62 -0
  23. data/lib/puppetfactory/plugins/hooks.rb +46 -0
  24. data/lib/puppetfactory/plugins/login_shell.rb +10 -0
  25. data/lib/puppetfactory/plugins/logs.rb +34 -0
  26. data/lib/puppetfactory/plugins/r10k.rb +112 -0
  27. data/lib/puppetfactory/plugins/shell_user.rb +69 -0
  28. data/lib/puppetfactory/plugins/user_environment.rb +77 -0
  29. data/public/dashboard.js +100 -0
  30. data/public/font-awesome/css/font-awesome.css +2199 -0
  31. data/public/font-awesome/css/font-awesome.min.css +4 -0
  32. data/public/font-awesome/fonts/FontAwesome.otf +0 -0
  33. data/public/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  34. data/public/font-awesome/fonts/fontawesome-webfont.svg +685 -0
  35. data/public/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  36. data/public/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  37. data/public/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  38. data/public/gitviz/LICENSE.md +20 -0
  39. data/public/gitviz/README.md +13 -0
  40. data/public/gitviz/css/explaingit.css +227 -0
  41. data/public/gitviz/css/vendor/1140.css +130 -0
  42. data/public/gitviz/images/forkme_right_red_aa0000.png +0 -0
  43. data/public/gitviz/images/grippy-close.png +0 -0
  44. data/public/gitviz/images/grippy.png +0 -0
  45. data/public/gitviz/images/prompt.gif +0 -0
  46. data/public/gitviz/index.html +734 -0
  47. data/public/gitviz/js/controlbox.js +459 -0
  48. data/public/gitviz/js/explaingit.js +74 -0
  49. data/public/gitviz/js/historyview.js +979 -0
  50. data/public/gitviz/js/main.js +56 -0
  51. data/public/gitviz/js/vendor/d3.min.js +4 -0
  52. data/public/gitviz/js/vendor/jquery-latest.min.js +6 -0
  53. data/public/gitviz/js/vendor/normalize.css +396 -0
  54. data/public/gitviz/js/vendor/require.min.js +35 -0
  55. data/public/gitviz/memtest.html +44 -0
  56. data/public/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  57. data/public/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  58. data/public/images/ui-bg_flat_10_000000_40x100.png +0 -0
  59. data/public/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  60. data/public/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  61. data/public/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  62. data/public/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  63. data/public/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  64. data/public/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  65. data/public/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  66. data/public/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  67. data/public/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  68. data/public/images/ui-icons_222222_256x240.png +0 -0
  69. data/public/images/ui-icons_228ef1_256x240.png +0 -0
  70. data/public/images/ui-icons_454545_256x240.png +0 -0
  71. data/public/images/ui-icons_ef8c08_256x240.png +0 -0
  72. data/public/images/ui-icons_ffd27a_256x240.png +0 -0
  73. data/public/images/ui-icons_ffffff_256x240.png +0 -0
  74. data/public/jquery-1.11.1.min.js +4 -0
  75. data/public/jquery-ui.css +464 -0
  76. data/public/jquery-ui.min.css +7 -0
  77. data/public/jquery-ui.min.js +13 -0
  78. data/public/jquery-ui.structure.min.css +5 -0
  79. data/public/jquery-ui.theme.min.css +5 -0
  80. data/public/jquery.activity-indicator-1.0.0.min.js +10 -0
  81. data/public/jquery.js +9789 -0
  82. data/public/loginscripts.js +18 -0
  83. data/public/scripts.js +36 -0
  84. data/public/style.css +193 -0
  85. data/public/usermanagement.js +133 -0
  86. data/templates/init_scripts.erb +10 -0
  87. data/templates/puppet.conf.erb +10 -0
  88. data/templates/site.pp.erb +50 -0
  89. data/views/dashboard.erb +62 -0
  90. data/views/home.erb +43 -0
  91. data/views/index.erb +29 -0
  92. data/views/logs.erb +26 -0
  93. data/views/shell.erb +35 -0
  94. data/views/users.erb +69 -0
  95. metadata +256 -0
@@ -0,0 +1,62 @@
1
+ <div id="dashboard">
2
+ <span id="notifications">
3
+ Last updated <%= Puppetfactory::Helpers.approximate_time_difference(@test_data['timestamp']) %>
4
+ (<a href="#" id="show-explanation">Why don't the tests add up?</a>)
5
+ </span>
6
+ <div id="tools">
7
+ <a id="update">Update</a>
8
+ <select name="current" id="current">
9
+ <option value="summary"<%= 'selected' if @current == 'summary' %> >Summary Only</option>
10
+ <option value="all" <%= 'selected' if @current == 'all' %> >All Tests</option>
11
+ <% @available.each do |test| %>
12
+ <option value="<%= test %>" <%= 'selected' if @current == test %> ><%= test %></option>
13
+ <% end %>
14
+ </select>
15
+ </div>
16
+ <div class="content">
17
+ <% @test_data.each do |user, userdata| %>
18
+ <% next if user == 'timestamp' %>
19
+ <% total, passed, percent = Puppetfactory::Plugins::Dashboard.test_completion(userdata['summary']) %>
20
+ <% details="/dashboard/details/#{user}/summary" %>
21
+ <div class="user">
22
+ <label><%= user %></label>
23
+ <div class="progressbar gutter summary <%= user %>">
24
+ <span class="label"><%= passed %> of <%= total %> tests passing</span>
25
+ <div class="completed" style="width: <%= percent %>%">Overall completion <a target="_results" href="<%= details %>">(details)</a></div>
26
+ </div>
27
+
28
+ <% userdata.each do |result, data| %>
29
+ <% next if result == 'summary' %>
30
+ <% total, passed, percent = Puppetfactory::Plugins::Dashboard.test_completion(data) %>
31
+ <% details="/dashboard/details/#{user}/#{result}" %>
32
+ <div class="progressbar gutter <%= result %> <%= user %>">
33
+ <span class="label"><%= passed %> of <%= total %> tests passing</span>
34
+ <div class="completed" style="width: <%= percent %>%"><%= result %> <a target="_results" href="<%= details %>">(details)</a></div>
35
+ </div>
36
+ <% end %>
37
+ </div>
38
+ <% end %>
39
+ </div>
40
+ <div id="explanation" title="Inconsistent Test Results">
41
+ <p>There are several contexts in which the test scores may not perfectly reflect reality.</p>
42
+ <ul>
43
+ <li>
44
+ When rspec runs multiple tests globbed together, the individual results files are not
45
+ written out; only the summary. That means that the individual tests will only sum up to
46
+ the numbers in the summary if you run each test individually first.
47
+ </li>
48
+ <li>
49
+ Individual tests might contradict each other. For example, one lab might ask students
50
+ to manage a user, and the next might instruct them to remove that classification.
51
+ </li>
52
+ <li>
53
+ A student may choose to perform the tasks in the lab in a slightly different fashion.
54
+ For example, if we ask them to make a <code>training</code> user, they might instead
55
+ manage a <code>testing123</code> user. They've still effectively completed the tasks
56
+ set before them.
57
+ </li>
58
+ </ul>
59
+ <p>Please use your own discretion when interpreting these numbers.</p>
60
+ </div>
61
+ </div>
62
+ <script type="text/javascript" src="dashboard.js"></script>
data/views/home.erb ADDED
@@ -0,0 +1,43 @@
1
+ <p>
2
+ A simulated Puppet Enterprise infrastructure has been constructed on the
3
+ classroom server. Each student has an environment providing a sandboxed
4
+ container for Puppet code and configuration. The classroom server is also
5
+ running the unmodified Puppet Enterprise Console with an account for each
6
+ student.
7
+ </p>
8
+
9
+ <p>
10
+ Students have full <code>root</code> access on their container, meaning that all
11
+ Puppet commands and resources work as expected. Each container also exposes
12
+ port 80 as a high port proxied from the Master, meaning that students are able
13
+ to run a web server inside their sandbox environment. A link to this proxied
14
+ port is listed for each user on the <em>Users</em> tab.
15
+ </p>
16
+
17
+ <h3>Resources:</h3>
18
+ <ul>
19
+ <li><a href="http://<%= request.host %>:9090" target="_showoff">Course Material Presentation</a>
20
+ <ul>
21
+ <li>Follow along with the instructor's slides, or navigate it independently.</li>
22
+ </ul>
23
+ </li>
24
+ <li><a href="https://<%= request.host %>" target="_console">Puppet Enterprise Console</a>
25
+ <ul>
26
+ <li>Log into the PE Console using the credentials of the user account you created.</li>
27
+ </ul>
28
+ </li>
29
+ <li><a href="./gitviz/index.html" target="_blank">Git Visualization Tool</a>
30
+ <ul>
31
+ <li>Git's commit graph can be hard to understand. This tool will help visualize what
32
+ happens behind the scenes as you type various <code>git</code> commands.</li>
33
+ </ul>
34
+ </li>
35
+ </ul>
36
+
37
+ <h3>Accessing your environment:</h3>
38
+
39
+ <ol>
40
+ <li>First create your account on the <em>Users</em> tab.</li>
41
+ <li>Log in to your sandbox following the directions on the <em>SSH Login</em> tab.</li>
42
+ <li>Log in to the <a href="https://<%= request.host %>" target="_console">Puppet Enterprise Console</a></li>
43
+ <ol>
data/views/index.erb ADDED
@@ -0,0 +1,29 @@
1
+ <html>
2
+ <head>
3
+ <title>Puppet Training Classroom Manager</title>
4
+ <link rel="stylesheet" type="text/css" href="jquery-ui.css" media="all" />
5
+ <link rel="stylesheet" type="text/css" href="font-awesome/css/font-awesome.min.css">
6
+ <link rel="stylesheet" type="text/css" href="style.css" />
7
+ <script type="text/javascript" src="jquery.js"></script>
8
+ <script type="text/javascript" src="jquery-ui.min.js"></script>
9
+ <script type="text/javascript" src="scripts.js"></script>
10
+ <script type="text/javascript" src="jquery.activity-indicator-1.0.0.min.js"></script>
11
+ </head>
12
+ <body>
13
+ <h1>Puppet Training Classroom Manager</h1>
14
+ <% unless privileged? %><a href="/login" id="login">Admin Login</a><% end %>
15
+ <div id="tabs">
16
+ <ul>
17
+ <li><a href="#home">Home</a></li>
18
+ <li><a href="/users">Users</a></li>
19
+ <li><a class="cache" href="/shell">SSH Login</a></li>
20
+ <% @tabs.each do |url, title| %>
21
+ <li><a href="/<%= url %>"><%= title %></a></li>
22
+ <% end %>
23
+ </ul>
24
+ <div id="home">
25
+ <%= erb :home %>
26
+ </div>
27
+ </div>
28
+ </body>
29
+ </html>
data/views/logs.erb ADDED
@@ -0,0 +1,26 @@
1
+ <div id="logs">
2
+ <h3><%= @logfile %></h3>
3
+ <div class="data"></div>
4
+ </div>
5
+
6
+ <script type="text/javascript">
7
+ function loadLogs() {
8
+ $("#logs .data").load("logs/data", function() {
9
+
10
+ // use timeout instead of an interval so that in case of network error
11
+ // we don't end up with a queue of requests stacked up.
12
+ setTimeout(loadLogs, 5000);
13
+ });
14
+ }
15
+
16
+ $(document).ready(function() {
17
+ loadLogs();
18
+ });
19
+ </script>
20
+
21
+ <style>
22
+ #logs .data {
23
+ font-family: monospace;
24
+ white-space: pre-wrap;
25
+ }
26
+ </style>
data/views/shell.erb ADDED
@@ -0,0 +1,35 @@
1
+ <div id="shell">
2
+ <p>
3
+ <input type="button" id="show-alternate" value="Other ways to log in" />
4
+ Shell accounts have been created for each student for editing code and
5
+ running Puppet interactively. Log in using the user account and credentials
6
+ you created.
7
+ </p>
8
+ <p>
9
+ <iframe id="console" src="/shell/login"></iframe>
10
+ </p>
11
+ <div id="alternate" title="Alternate Login Methods">
12
+ <p>
13
+ If you prefer, you may also use any standard SSH client using the username
14
+ and password you specified. Some common SSH clients include:
15
+ <p>
16
+ <ul>
17
+ <li>
18
+ Built-in to Mac OSX and Linux:
19
+ <ol>
20
+ <li>Start Terminal.app or any terminal emulator to get to the command line</li>
21
+ <li>Run <code>ssh <%= request.host %></code></li>
22
+ </ol>
23
+ </li>
24
+ <li>
25
+ Windows:
26
+ <ul>
27
+ <li><a href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe">PuTTY</a></li>
28
+ <li><a href="http://winscp.net/eng/download.php#download2" target="_new">WinSCP</a></li>
29
+ <li><a href="http://www.vandyke.com/download/securecrt/download.html" target="_new">SecureCRT</a></li>
30
+ </ul>
31
+ </li>
32
+ </ul>
33
+ </div>
34
+ </div>
35
+ <script type="text/javascript" src="loginscripts.js"></script>
data/views/users.erb ADDED
@@ -0,0 +1,69 @@
1
+ <div id="usercontent">
2
+ <div id="newuserwrapper">
3
+ <input type="button" id="showuser" value="+ New User" />
4
+ <div id="newuser">
5
+ <table>
6
+ <tr><td class="label">Username:</td><td><input type="text" id="user" value="" /></td></tr>
7
+ <tr><td class="label">Password:</td><td><input type="password" id="password" value="" /></td></tr>
8
+ <tr><td class="label">Repeat:</td><td><input type="password" id="password2" value="" /></td></tr>
9
+ <tr><td class="label">Session ID:</td><td><input type="text" id="session" value="" /></td></tr>
10
+ </table>
11
+ <input type="button" id="hideuser" value="Cancel" />
12
+ <input type="button" id="save" value="Save" />
13
+ </div>
14
+ </div>
15
+ <% if @current %>
16
+ <h2>Selected User</h2>
17
+ <table id="currentuser">
18
+ <tr><th class="header">Username:</th> <td><%= @current[:username] %></td></tr>
19
+ <tr><th class="header">Certname:</th> <td><%= @current[:certname] %></td></tr>
20
+ <% if @current[:port] -%>
21
+ <tr><th class="header">Sandbox URL:</th> <td><a href="/port/<%= @current[:port] %>/"><%= @current[:url] %></a></td></tr>
22
+ <% end -%>
23
+ <% if @current[:container_status] -%>
24
+ <tr><th class="header">Container:</th> <td><%= @current[:container_status]['Description'] %></td></tr>
25
+ <% end -%>
26
+ <% if @current[:node_group_url] -%>
27
+ <tr><th class="header">Node Group:</th> <td><a href="<%= @current[:node_group_url] %>" target="_console">Console login</a></td></tr>
28
+ <% end -%>
29
+ <% if @current[:controlrepo] -%>
30
+ <tr><th class="header">Control Repo:</th> <td><a href="<%= @current[:controlrepo] %>" target="_repository"><%= @current[:controlrepo] %></a></td></tr>
31
+ <% end -%>
32
+ <% if @current[:latestcommit] -%>
33
+ <tr><th class="header">Latest Commit:</th>
34
+ <td>
35
+ <a href="<%= @current[:latestcommit][:url] %>" target="_repository"><%= @current[:latestcommit][:message] %></a>
36
+ <small>(<%= @current[:latestcommit][:time] %>)</small>
37
+ </td></tr>
38
+ <% end -%>
39
+ <% if settings.plugins.include? :Dashboard -%>
40
+ <tr><th class="header">Spec Tests:</th> <td><a href="/dashboard/details/<%= @current[:username] %>" target="_results">results</a> <small>(may not always be available)</small></td></tr>
41
+ <% end -%>
42
+ <% if action_enabled? :deploy -%>
43
+ <tr class="actions"><td colspan=2><i class="fa"></i><input type="button" id="deploy" data-user="<%= @current[:username] %>" value="Deploy Environment"></td></tr>
44
+ <% end -%>
45
+ </table>
46
+ <% end %>
47
+ <h2>All Users</h2>
48
+ <table id="users">
49
+ <tr class="header">
50
+ <th>Username</th>
51
+ <th>Certname</th>
52
+ <% if @users.first[1][:port] %><th>Sandbox URL</th><% end %>
53
+ <th>&nbsp;</th>
54
+ </tr>
55
+ <% if @users %>
56
+ <% even = true %>
57
+ <% @users.each do |key, user| %>
58
+ <tr class="<%= even ? "even":"odd" %>">
59
+ <td class="username"><%= key %></td>
60
+ <td class="certname"><%= user[:certname] %></td>
61
+ <% if user[:port] %><td class="url"><a href="/port/<%= user[:port] %>/"><%= user[:url] %></a></td><% end %>
62
+ <td class="select"><a href="/users/active/<%= user[:username] %>">select</a></td>
63
+ </tr>
64
+ <% even = !even %>
65
+ <% end %>
66
+ <% end %>
67
+ </table>
68
+ </div>
69
+ <script type="text/javascript" src="usermanagement.js"></script>
metadata ADDED
@@ -0,0 +1,256 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: puppetfactory
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.0
5
+ platform: ruby
6
+ authors:
7
+ - Ben Ford
8
+ - Josh Samuelson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-09-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: json_pure
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: puppetclassify
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.1.0
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.1.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: docker-api
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: httparty
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rest-client
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: hocon
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: octokit
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: |2
127
+ Puppetfactory creates a Puppet Enterprise infrastructure on the classroom server.
128
+ Each student has a container for Puppet code and configuration linked to their
129
+ environment on the master. The containers are built on docker and duplicate most
130
+ of the behavior of a full VM or bare-metal system. The classroom server will also
131
+ be running the unmodified Puppet Enterprise Console with an account for each student.
132
+ email: ben.ford@puppetlabs.com
133
+ executables:
134
+ - pfsh
135
+ - puppetfactory
136
+ extensions: []
137
+ extra_rdoc_files: []
138
+ files:
139
+ - README.md
140
+ - LICENSE
141
+ - bin/pfsh
142
+ - bin/puppetfactory
143
+ - lib/puppetfactory/cli.rb
144
+ - lib/puppetfactory/dashboard/rake_tasks.rb
145
+ - lib/puppetfactory/dashboard/serverspec_helper.rb
146
+ - lib/puppetfactory/dashboard/spec_helper.rb
147
+ - lib/puppetfactory/helpers.rb
148
+ - lib/puppetfactory/monkeypatches.rb
149
+ - lib/puppetfactory/plugins/certificates.rb
150
+ - lib/puppetfactory/plugins/classification.rb
151
+ - lib/puppetfactory/plugins/code_manager.rb
152
+ - lib/puppetfactory/plugins/console_user.rb
153
+ - lib/puppetfactory/plugins/dashboard.rb
154
+ - lib/puppetfactory/plugins/docker.rb
155
+ - lib/puppetfactory/plugins/example.rb
156
+ - lib/puppetfactory/plugins/github.rb
157
+ - lib/puppetfactory/plugins/gitlab.rb
158
+ - lib/puppetfactory/plugins/hooks.rb
159
+ - lib/puppetfactory/plugins/login_shell.rb
160
+ - lib/puppetfactory/plugins/logs.rb
161
+ - lib/puppetfactory/plugins/r10k.rb
162
+ - lib/puppetfactory/plugins/shell_user.rb
163
+ - lib/puppetfactory/plugins/user_environment.rb
164
+ - lib/puppetfactory/plugins.rb
165
+ - lib/puppetfactory.rb
166
+ - views/dashboard.erb
167
+ - views/home.erb
168
+ - views/index.erb
169
+ - views/logs.erb
170
+ - views/shell.erb
171
+ - views/users.erb
172
+ - public/dashboard.js
173
+ - public/font-awesome/css/font-awesome.css
174
+ - public/font-awesome/css/font-awesome.min.css
175
+ - public/font-awesome/fonts/FontAwesome.otf
176
+ - public/font-awesome/fonts/fontawesome-webfont.eot
177
+ - public/font-awesome/fonts/fontawesome-webfont.svg
178
+ - public/font-awesome/fonts/fontawesome-webfont.ttf
179
+ - public/font-awesome/fonts/fontawesome-webfont.woff
180
+ - public/font-awesome/fonts/fontawesome-webfont.woff2
181
+ - public/gitviz/LICENSE.md
182
+ - public/gitviz/README.md
183
+ - public/gitviz/css/explaingit.css
184
+ - public/gitviz/css/vendor/1140.css
185
+ - public/gitviz/images/forkme_right_red_aa0000.png
186
+ - public/gitviz/images/grippy-close.png
187
+ - public/gitviz/images/grippy.png
188
+ - public/gitviz/images/prompt.gif
189
+ - public/gitviz/index.html
190
+ - public/gitviz/js/controlbox.js
191
+ - public/gitviz/js/explaingit.js
192
+ - public/gitviz/js/historyview.js
193
+ - public/gitviz/js/main.js
194
+ - public/gitviz/js/vendor/d3.min.js
195
+ - public/gitviz/js/vendor/jquery-latest.min.js
196
+ - public/gitviz/js/vendor/normalize.css
197
+ - public/gitviz/js/vendor/require.min.js
198
+ - public/gitviz/memtest.html
199
+ - public/images/ui-bg_diagonals-thick_18_b81900_40x40.png
200
+ - public/images/ui-bg_diagonals-thick_20_666666_40x40.png
201
+ - public/images/ui-bg_flat_10_000000_40x100.png
202
+ - public/images/ui-bg_flat_75_ffffff_40x100.png
203
+ - public/images/ui-bg_glass_100_f6f6f6_1x400.png
204
+ - public/images/ui-bg_glass_100_fdf5ce_1x400.png
205
+ - public/images/ui-bg_glass_65_ffffff_1x400.png
206
+ - public/images/ui-bg_glass_75_e6e6e6_1x400.png
207
+ - public/images/ui-bg_gloss-wave_35_f6a828_500x100.png
208
+ - public/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
209
+ - public/images/ui-bg_highlight-soft_75_cccccc_1x100.png
210
+ - public/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
211
+ - public/images/ui-icons_222222_256x240.png
212
+ - public/images/ui-icons_228ef1_256x240.png
213
+ - public/images/ui-icons_454545_256x240.png
214
+ - public/images/ui-icons_ef8c08_256x240.png
215
+ - public/images/ui-icons_ffd27a_256x240.png
216
+ - public/images/ui-icons_ffffff_256x240.png
217
+ - public/jquery-1.11.1.min.js
218
+ - public/jquery-ui.css
219
+ - public/jquery-ui.min.css
220
+ - public/jquery-ui.min.js
221
+ - public/jquery-ui.structure.min.css
222
+ - public/jquery-ui.theme.min.css
223
+ - public/jquery.activity-indicator-1.0.0.min.js
224
+ - public/jquery.js
225
+ - public/loginscripts.js
226
+ - public/scripts.js
227
+ - public/style.css
228
+ - public/usermanagement.js
229
+ - templates/init_scripts.erb
230
+ - templates/puppet.conf.erb
231
+ - templates/site.pp.erb
232
+ homepage: http://www.puppetlabs.com/education
233
+ licenses:
234
+ - Apache-2.0
235
+ metadata: {}
236
+ post_install_message:
237
+ rdoc_options: []
238
+ require_paths:
239
+ - lib
240
+ required_ruby_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ required_rubygems_version: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - ">="
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ requirements: []
251
+ rubyforge_project:
252
+ rubygems_version: 2.0.14.1
253
+ signing_key:
254
+ specification_version: 4
255
+ summary: Stands up a graphical classroom manager with containerized puppet agents.
256
+ test_files: []