foreman_docker 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -2
- data/Rakefile +13 -2
- data/app/assets/stylesheets/foreman_docker/terminal.css.scss +85 -0
- data/app/controllers/containers/steps_controller.rb +55 -0
- data/app/controllers/containers_controller.rb +62 -0
- data/app/helpers/container_steps_helper.rb +11 -0
- data/app/helpers/containers_helper.rb +54 -0
- data/app/models/concerns/fog_extensions/fogdocker/image.rb +1 -2
- data/app/models/concerns/fog_extensions/fogdocker/server.rb +18 -8
- data/app/models/container.rb +29 -0
- data/app/models/docker_image.rb +7 -0
- data/app/models/docker_tag.rb +7 -0
- data/app/models/foreman_docker/docker.rb +22 -16
- data/app/views/api/v1/compute_resources/docker.json +1 -0
- data/app/views/api/v2/compute_resources/docker.json +1 -0
- data/app/views/compute_resources/form/_docker.html.erb +8 -1
- data/app/views/compute_resources_vms/show/_docker.html.erb +4 -0
- data/app/views/containers/_list.html.erb +35 -0
- data/app/views/containers/index.html.erb +31 -0
- data/app/views/containers/show.html.erb +104 -0
- data/app/views/containers/steps/_form_buttons.html.erb +20 -0
- data/app/views/containers/steps/_title.html.erb +3 -0
- data/app/views/containers/steps/configuration.html.erb +14 -0
- data/app/views/containers/steps/environment.html.erb +9 -0
- data/app/views/containers/steps/image.html.erb +33 -0
- data/app/views/containers/steps/preliminary.html.erb +18 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20140930175337_add_email_to_compute_resource.rb +5 -0
- data/db/migrate/20141005233312_create_containers.rb +11 -0
- data/db/migrate/20141007225130_add_compute_resource_id_to_container.rb +5 -0
- data/db/migrate/20141009001613_add_tag_to_container.rb +5 -0
- data/db/migrate/20141009011026_add_attributes_to_container.rb +12 -0
- data/db/migrate/20141010173220_create_docker_images.rb +36 -0
- data/db/migrate/20141018110810_add_uuid_to_containers.rb +6 -0
- data/lib/foreman_docker/engine.rb +38 -6
- data/lib/foreman_docker/tasks/test.rake +44 -0
- data/lib/foreman_docker/version.rb +1 -1
- data/test/factories/compute_resources.rb +15 -0
- data/test/factories/containers.rb +6 -0
- data/test/factories/docker_image.rb +5 -0
- data/test/factories/docker_tag.rb +6 -0
- data/test/functionals/container_controller_test.rb +27 -0
- data/test/functionals/containers_steps_controller_test.rb +39 -0
- data/test/models/container_test.rb +36 -0
- data/test/models/docker_image_test.rb +12 -0
- data/test/models/docker_tag_test.rb +17 -0
- data/test/test_plugin_helper.rb +14 -0
- metadata +95 -85
- data/lib/tasks/foreman_docker_tasks.rake +0 -4
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -5
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -23
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -29
- data/test/dummy/config/environments/production.rb +0 -80
- data/test/dummy/config/environments/test.rb +0 -36
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -12
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -56
- data/test/dummy/public/404.html +0 -58
- data/test/dummy/public/422.html +0 -58
- data/test/dummy/public/500.html +0 -57
- data/test/dummy/public/favicon.ico +0 -0
- data/test/foreman_docker_test.rb +0 -7
- data/test/test_helper.rb +0 -15
@@ -0,0 +1 @@
|
|
1
|
+
attributes :user
|
@@ -0,0 +1 @@
|
|
1
|
+
attributes :user
|
@@ -1,4 +1,11 @@
|
|
1
1
|
<%= text_f f, :url, :size => "col-md-8", :help_block => _("e.g. https://docker.example.com:4243 or unix:///var/run/docker.sock") %>
|
2
2
|
<%= text_f f, :user %>
|
3
3
|
<%= password_f f, :password %>
|
4
|
-
|
4
|
+
<%= text_f f, :email %>
|
5
|
+
|
6
|
+
<% client = f.object.client rescue [] %>
|
7
|
+
<%= link_to_function _("Test Connection"), "testConnection(this)",
|
8
|
+
:class => "btn + #{client.nil? ? "btn-default" : "btn-success"}",
|
9
|
+
:'data-url' => test_connection_compute_resources_path %>
|
10
|
+
|
11
|
+
<%= image_tag('/assets/spinner.gif', :id => 'test_connection_indicator', :class => 'hide') %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<table class="table table-bordered table-striped table-condensed" data-table="inline">
|
2
|
+
</thead>
|
3
|
+
<tr>
|
4
|
+
<th class="text-center"><%= sort :name, :as => _("Name") %></th>
|
5
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :status, :as => _("Status") %></th>
|
6
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :image, :as => _("Image") %></th>
|
7
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :command, :as => _("Command") %></th>
|
8
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :uptime, :as => _("Uptime") %></th>
|
9
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :running_on, :as => _("Running on") %></th>
|
10
|
+
<th class="hidden-tablet hidden-xs text-center"><%= sort :managed , :as => _("Managed") %></th>
|
11
|
+
<th></th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
|
15
|
+
<% containers.each do |container| %>
|
16
|
+
<tr>
|
17
|
+
<td class="ellipsis text-center"><%= link_to_container(container, resource) %></td>
|
18
|
+
<td class="hidden-tablet hidden-xs text-center"><span <%= vm_power_class(container.ready?) %>><%= vm_state(container) %></span></td>
|
19
|
+
<td class="hidden-tablet hidden-xs text-center"><%= trunc(container.image_friendly_name) %></td>
|
20
|
+
<td class="hidden-tablet hidden-xs text-center"><%= trunc(container.command) %></td>
|
21
|
+
<td class="hidden-tablet hidden-xs text-center"><span class="glyphicon glyphicon-time"></span> <%= container.ready? ? time_ago_in_words(container.started_at) : "N/A" %></td>
|
22
|
+
<td class="hidden-tablet hidden-xs text-center"><%= link_to resource, compute_resource_path(resource)%> </td>
|
23
|
+
<td class="hidden-tablet hidden-xs text-center"><%= managed_icon(container, resource) %></td>
|
24
|
+
<% @compute_resource = resource %>
|
25
|
+
<td><%= action_buttons(vm_power_action(container),
|
26
|
+
display_delete_if_authorized(hash_for_container_path(:compute_resource_id => resource,
|
27
|
+
:id => container.id).
|
28
|
+
merge(:auth_object => resource, :auth_action => 'destroy',
|
29
|
+
:authorizer => authorizer),
|
30
|
+
:confirm => _("Delete %s?") % container.name)) %></td>
|
31
|
+
</tr>
|
32
|
+
<% end %>
|
33
|
+
</table>
|
34
|
+
|
35
|
+
<%= will_paginate_with_info containers %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<% title _("Containers") %>
|
2
|
+
|
3
|
+
<% if authorized? %>
|
4
|
+
<% title_actions button_group(link_to_if_authorized _("New container"), hash_for_new_container_path,
|
5
|
+
:class => 'btn-success' ) %>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
9
|
+
<% @container_resources.each_with_index do |resource, i| %>
|
10
|
+
<% if i == 0 %>
|
11
|
+
<li class="active"><a href="#<%= "primary" %>" data-toggle="tab"><%= _("#{resource.name}") %></a></li>
|
12
|
+
<% else %>
|
13
|
+
<li><a href="#<%= resource.name %>" data-toggle="tab"><%= _("#{resource.name}") %></a></li>
|
14
|
+
<% end %>
|
15
|
+
<% end %>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
<div class="tab-content">
|
19
|
+
<% @container_resources.each_with_index do |resource, i| %>
|
20
|
+
<% if i == 0 %>
|
21
|
+
<div class="tab-pane active" id="primary">
|
22
|
+
<% else %>
|
23
|
+
<div class="tab-pane" id="<%= resource.name %>">
|
24
|
+
<% end %>
|
25
|
+
<%= render 'list', :containers => resource.vms.to_a
|
26
|
+
.sort_by(&:name).paginate(:page => params[:page],
|
27
|
+
:per_page => 10),
|
28
|
+
:resource => resource %>
|
29
|
+
</div>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
@@ -0,0 +1,104 @@
|
|
1
|
+
<% title "#{@container.name.titleize} - #{@container.in_fog.name}" %>
|
2
|
+
<%= stylesheet 'foreman_docker/terminal' %>
|
3
|
+
<%= container_title_actions(@container) %>
|
4
|
+
<div id="host-show" class="row">
|
5
|
+
<div class="col-md-4">
|
6
|
+
<div id="myTabContent" class="tab-content">
|
7
|
+
<div class="tab-pane active in">
|
8
|
+
<table id="properties_table" class="table table-bordered table-striped">
|
9
|
+
<tr><th colspan="2"><%= _('Properties') %></th></tr>
|
10
|
+
<tr>
|
11
|
+
<td><%= _('Name') %></td>
|
12
|
+
<td><%= @container.in_fog.name %></td>
|
13
|
+
</tr>
|
14
|
+
<tr>
|
15
|
+
<td><%= _('Image') %></td>
|
16
|
+
<td><%= @container.image.image_id %> </td>
|
17
|
+
</tr>
|
18
|
+
<tr>
|
19
|
+
<td><%= _('Tag') %></td>
|
20
|
+
<td><%= @container.tag.tag %> </td>
|
21
|
+
</tr>
|
22
|
+
<tr>
|
23
|
+
<td><%= _('IP Address') %></td>
|
24
|
+
<td><%= @container.in_fog.ipaddress %> </td>
|
25
|
+
</tr>
|
26
|
+
<tr>
|
27
|
+
<td><%= _('CPU shares') %></td>
|
28
|
+
<td><%= @container.in_fog.cores %></td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td><%= _('UUID') %></td>
|
32
|
+
<td><%= trunc @container.in_fog.identity %></td>
|
33
|
+
</tr>
|
34
|
+
<tr>
|
35
|
+
<td><%= _('Memory') %></td>
|
36
|
+
<td><%= number_to_human_size @container.in_fog.memory %> </td>
|
37
|
+
</tr>
|
38
|
+
<tr>
|
39
|
+
<td><%= _('Command') %></td>
|
40
|
+
<td><%= @container.in_fog.command %> </td>
|
41
|
+
</tr>
|
42
|
+
<tr>
|
43
|
+
<td><%= _('Exposed ports') %></td>
|
44
|
+
<td><%= @container.in_fog.exposed_ports %> </td>
|
45
|
+
</tr>
|
46
|
+
|
47
|
+
<tr>
|
48
|
+
<td><%= _('Running on') %></td>
|
49
|
+
<td><%= link_to @container.compute_resource,
|
50
|
+
compute_resource_path(@container.compute_resource) %></td>
|
51
|
+
</tr>
|
52
|
+
</tr>
|
53
|
+
</table>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
<div class="col-md-8">
|
58
|
+
<% if @container.in_fog.ready? %>
|
59
|
+
<ul id="myTab" class="nav nav-tabs">
|
60
|
+
<li class="active"><a href="#processes" data-toggle="tab">
|
61
|
+
<span class="glyphicon glyphicon-credit-card"></span>
|
62
|
+
<%= _('Processes') %>
|
63
|
+
</a></li>
|
64
|
+
<li><a href="#logs" data-toggle="tab">
|
65
|
+
<span class="glyphicon glyphicon-list-alt"></span>
|
66
|
+
<%= _('Logs') %>
|
67
|
+
</a></li>
|
68
|
+
</ul>
|
69
|
+
<div id="myTabContent" class="tab-content">
|
70
|
+
<div class="tab-pane active in" id="processes">
|
71
|
+
<% processes = Docker::Container.get(@container.uuid).top %>
|
72
|
+
<div class='accordion' id='accordion'>
|
73
|
+
<% processes.each do |process| %>
|
74
|
+
<div>
|
75
|
+
<h2>
|
76
|
+
<a href='#<%= process['PID'] %>-index'
|
77
|
+
class='accordion-toggle'
|
78
|
+
data-toggle='collapse'
|
79
|
+
data-parent='#accordion'>
|
80
|
+
<%= process['CMD'] %>
|
81
|
+
</a><br>
|
82
|
+
<small><%= process['UID'] %></small>
|
83
|
+
</h2>
|
84
|
+
</div>
|
85
|
+
<div id='<%= process['PID'] %>-index' class='collapse accordion-body'>
|
86
|
+
<pre class="prettyprint"><%= JSON.pretty_generate(process) %></pre>
|
87
|
+
</div>
|
88
|
+
<% end %>
|
89
|
+
</div>
|
90
|
+
</div>
|
91
|
+
<div class="tab-pane" id="logs">
|
92
|
+
<pre class="terminal terminal-output pre-scrollable"><code><%= Docker::Container.get(@container.uuid).logs(:stdout => true, :tail => 100) %></code></pre>
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
<% else %>
|
96
|
+
<div class="alert alert-block alert-warning">
|
97
|
+
<p><strong><%= _("Notice") %></strong>
|
98
|
+
<hr>
|
99
|
+
<%= _("Your container is stopped.") %></p>
|
100
|
+
<p><%= _("Please turn on your container to see processes running, logs, and more.") %></p>
|
101
|
+
</div>
|
102
|
+
<% end %>
|
103
|
+
</div>
|
104
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<div class="clearfix">
|
2
|
+
<div class="form-actions">
|
3
|
+
<% if step == :preliminary %>
|
4
|
+
<%= link_to _("Cancel"), containers_path, :class => "btn btn-danger" %>
|
5
|
+
<% else %>
|
6
|
+
<a class="btn btn-default" href="<%= previous_wizard_path %>">
|
7
|
+
<span class="glyphicon glyphicon-chevron-left"></span>
|
8
|
+
<%= _("Back") %>
|
9
|
+
</a>
|
10
|
+
<% end %>
|
11
|
+
<%= button_tag(:type => 'submit', :class => "btn btn-primary pull-right") do %>
|
12
|
+
<% if step == :environment %>
|
13
|
+
<%= _("Submit") %>
|
14
|
+
<% else %>
|
15
|
+
<%= _("Next") %>
|
16
|
+
<span class="glyphicon glyphicon-chevron-right"></span>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%= render :layout => 'title', :locals => { :step => 3 } do %>
|
2
|
+
<%= form_for @container, :url => wizard_path, :method => :put do |f| %>
|
3
|
+
<h3><%= _("Basic options") %></h3>
|
4
|
+
<%= text_f f, :name, :size => 'col-md-4' %>
|
5
|
+
<%= text_f f, :command, :size => 'col-md-4' %>
|
6
|
+
<%= text_f f, :entrypoint, :size => 'col-md-4' %>
|
7
|
+
<hr>
|
8
|
+
<h3><%= _("Compute options") %></h3>
|
9
|
+
<%= selectable_f f, :cpu_set, 1..f.object.compute_resource.max_cpu_count, { }, :class => "col-md-2", :label => _('Cores') %>
|
10
|
+
<%= text_f f, :cpu_shares, :class => "col-md-2", :label => _('CPU shares') %>
|
11
|
+
<%= selectable_f f, :memory, memory_options(f.object.compute_resource.max_memory), { }, :class => "col-md-2", :label => _('Memory') %>
|
12
|
+
<%= render :partial => 'form_buttons' %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render :layout => 'title', :locals => { :step => 4 } do %>
|
2
|
+
<%= form_for @container, :url => wizard_path, :method => :put do |f| %>
|
3
|
+
<%= checkbox_f f, :tty, :help_inline => _('Allocate a pseudo-tty'), :label => _('TTY') %>
|
4
|
+
<%= checkbox_f f, :attach_stdin, :label => _('Attach STDIN') %>
|
5
|
+
<%= checkbox_f f, :attach_stdout, :label => _('Attach STDOUT') %>
|
6
|
+
<%= checkbox_f f, :attach_stderr, :label => _('Attach STDERR') %>
|
7
|
+
<%= render :partial => 'form_buttons' %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<%= render :layout => 'title', :locals => { :step => 2 } do %>
|
2
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
3
|
+
<li class="active"><a href="#primary" data-toggle="tab">
|
4
|
+
<span class="glyphicon glyphicon-cloud-download"></span>
|
5
|
+
<%= _("Docker hub") %>
|
6
|
+
</a></li>
|
7
|
+
<li><a href="#others" data-toggle="tab">
|
8
|
+
<span class="glyphicon glyphicon-globe"></span>
|
9
|
+
<%= _("Others") %>
|
10
|
+
</a></li>
|
11
|
+
</ul>
|
12
|
+
<div class="tab-content">
|
13
|
+
<%= form_for @container, :url => wizard_path, :method => :put do |f| %>
|
14
|
+
<div class="tab-pane active" id="primary">
|
15
|
+
<div class="input-group col-md-6">
|
16
|
+
<%= auto_complete_search(:image, '',
|
17
|
+
:path => 'containers_path',
|
18
|
+
:value => f.object.image.present? ? f.object.image.image_id : '',
|
19
|
+
:placeholder => ('Find your favorite container, e.g: centos:latest')) %>
|
20
|
+
<span class="input-group-btn">
|
21
|
+
<%= button_tag(:class => 'btn btn-default') do %>
|
22
|
+
<span class="glyphicon glyphicon-search"></span>
|
23
|
+
<%= _("Search") %>
|
24
|
+
<% end %>
|
25
|
+
</span>
|
26
|
+
</div>
|
27
|
+
<hr>
|
28
|
+
<%= text_f f, :tag, :value => f.object.tag.present? ? f.object.tag.tag : '', :size => 'col-md-4' %>
|
29
|
+
</div>
|
30
|
+
<%= render :partial => 'form_buttons' %>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<%= render :layout => 'title', :locals => { :step => 1 } do %>
|
2
|
+
<%= form_for @container, :url => wizard_path, :method => :put do |f| %>
|
3
|
+
<div>
|
4
|
+
<% if @container_resources.present? %>
|
5
|
+
<h3><%= _("Resource selection") %></h3>
|
6
|
+
<%= _("Where do you want to deploy your container?:") %>
|
7
|
+
<hr>
|
8
|
+
<%= select_f f, :compute_resource_id, @container_resources, :id, :to_label, {}, { :label => _('Deploy on') } %>
|
9
|
+
<% else %>
|
10
|
+
<div class="alert alert-warning alert-dismissable">
|
11
|
+
<%= image_tag 'false.png' %> <%= (_("You need a Docker compute resource in order to create containers. Please %s and try again.") % link_to('add a new one', hash_for_new_compute_resource_path)).html_safe %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<%= render :partial => 'form_buttons' %>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class AddAttributesToContainer < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :containers, :entrypoint, :string
|
4
|
+
add_column :containers, :cpu_set, :integer
|
5
|
+
add_column :containers, :cpu_shares, :float
|
6
|
+
add_column :containers, :memory, :integer
|
7
|
+
add_column :containers, :tty, :boolean
|
8
|
+
add_column :containers, :attach_stdin, :boolean, :default => true
|
9
|
+
add_column :containers, :attach_stdout, :boolean, :default => true
|
10
|
+
add_column :containers, :attach_stderr, :boolean, :default => true
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class CreateDockerImages < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table :docker_images do |t|
|
4
|
+
t.string :image_id
|
5
|
+
t.integer :size
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :docker_tags do |t|
|
10
|
+
t.string :tag
|
11
|
+
t.references :docker_image, :null => false
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
add_foreign_key :docker_tags, :docker_images,
|
15
|
+
:column => :docker_image_id
|
16
|
+
|
17
|
+
remove_column :containers, :image
|
18
|
+
remove_column :containers, :tag
|
19
|
+
add_column :containers, :docker_image_id, :integer
|
20
|
+
add_column :containers, :docker_tag_id, :integer
|
21
|
+
add_foreign_key :containers, :docker_images,
|
22
|
+
:column => :docker_image_id
|
23
|
+
add_foreign_key :containers, :docker_tags,
|
24
|
+
:column => :docker_tag_id
|
25
|
+
end
|
26
|
+
|
27
|
+
def down
|
28
|
+
drop_table :docker_images
|
29
|
+
drop_table :docker_tags
|
30
|
+
|
31
|
+
add_column :containers, :image, :string
|
32
|
+
add_column :containers, :tag, :string
|
33
|
+
remove_column :containers, :docker_image_id
|
34
|
+
remove_column :containers, :docker_tag_id
|
35
|
+
end
|
36
|
+
end
|
@@ -2,28 +2,60 @@ require 'fast_gettext'
|
|
2
2
|
require 'gettext_i18n_rails'
|
3
3
|
require 'fog'
|
4
4
|
require 'fog/fogdocker'
|
5
|
+
require 'wicked'
|
5
6
|
|
6
7
|
module ForemanDocker
|
7
|
-
#Inherit from the Rails module of the parent app (Foreman), not the plugin.
|
8
|
-
#Thus, inherits from ::Rails::Engine and not from Rails::Engine
|
8
|
+
# Inherit from the Rails module of the parent app (Foreman), not the plugin.
|
9
|
+
# Thus, inherits from ::Rails::Engine and not from Rails::Engine
|
9
10
|
class Engine < ::Rails::Engine
|
11
|
+
initializer 'foreman_docker.load_app_instance_data' do |app|
|
12
|
+
app.config.paths['db/migrate'] += ForemanDocker::Engine.paths['db/migrate'].existent
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "foreman_docker.assets.precompile" do |app|
|
16
|
+
app.config.assets.precompile += ['foreman_docker/terminal.css']
|
17
|
+
end
|
18
|
+
|
19
|
+
initializer 'foreman_docker.configure_assets', :group => :assets do
|
20
|
+
SETTINGS[:foreman_docker_engine] =
|
21
|
+
{ :assets => { :precompile => ['foreman_docker/terminal.css'] } }
|
22
|
+
end
|
10
23
|
|
11
|
-
initializer 'foreman_docker.register_gettext', :after => :load_config_initializers do
|
24
|
+
initializer 'foreman_docker.register_gettext', :after => :load_config_initializers do
|
12
25
|
locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
|
13
|
-
locale_domain = '
|
26
|
+
locale_domain = 'foreman_docker'
|
14
27
|
|
15
28
|
Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
|
16
29
|
end
|
17
30
|
|
18
|
-
initializer 'foreman_docker.register_plugin', :after=> :finisher_hook do
|
31
|
+
initializer 'foreman_docker.register_plugin', :after => :finisher_hook do
|
19
32
|
Foreman::Plugin.register :foreman_docker do
|
20
33
|
requires_foreman '> 1.4'
|
21
|
-
# Register docker compute resource in foreman
|
22
34
|
compute_resource ForemanDocker::Docker
|
35
|
+
|
36
|
+
sub_menu :top_menu, :containers_menu, :caption => N_('Containers'),
|
37
|
+
:after => :monitor_menu do
|
38
|
+
menu :top_menu, :containers, :caption => N_('All containers'),
|
39
|
+
:url_hash => { :controller => :containers,
|
40
|
+
:action => :index }
|
41
|
+
menu :top_menu, :new_container, :caption => N_('New container'),
|
42
|
+
:url_hash => { :controller => :containers,
|
43
|
+
:action => :new }
|
44
|
+
end
|
45
|
+
|
46
|
+
security_block :containers do
|
47
|
+
permission :view_containers, :containers => [:index, :show]
|
48
|
+
permission :create_containers, :'containers/steps' => [:show, :update],
|
49
|
+
:containers => [:new]
|
50
|
+
permission :destroy_containers, :containers => [:destroy]
|
51
|
+
end
|
23
52
|
end
|
24
53
|
|
25
54
|
end
|
26
55
|
|
56
|
+
rake_tasks do
|
57
|
+
load "#{ForemanDocker::Engine.root}/lib/foreman_docker/tasks/test.rake"
|
58
|
+
end
|
27
59
|
end
|
28
60
|
|
29
61
|
# extend fog docker server and image models.
|