foreman_content 0.2 → 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +40 -1
- data/app/controllers/content/api/repositories_controller.rb +3 -5
- data/app/controllers/content/content_views_controller.rb +48 -0
- data/app/controllers/content/products_controller.rb +1 -1
- data/app/controllers/content/repositories_controller.rb +9 -6
- data/app/helpers/content/content_views_helper.rb +21 -0
- data/app/helpers/content/products_helper.rb +9 -0
- data/app/helpers/content/repositories_helper.rb +3 -49
- data/app/models/concerns/content/environment_extensions.rb +2 -2
- data/app/models/concerns/content/home_helper.rb +1 -0
- data/app/models/concerns/content/host_extensions.rb +17 -1
- data/app/models/concerns/content/hostgroup_extensions.rb +14 -0
- data/app/models/concerns/content/operatingsystem_extensions.rb +6 -5
- data/app/models/concerns/content/orchestration/pulp/clone.rb +77 -0
- data/app/models/concerns/content/orchestration/pulp/sync.rb +70 -0
- data/app/models/concerns/content/orchestration/pulp.rb +25 -0
- data/app/models/content/available_content_view.rb +12 -0
- data/app/models/content/content_view.rb +66 -0
- data/app/models/content/content_view_host.rb +9 -0
- data/app/models/content/content_view_repository_clone.rb +5 -0
- data/app/models/content/host_product.rb +0 -11
- data/app/models/content/hostgroup_product.rb +0 -11
- data/app/models/content/operatingsystem_repository.rb +0 -11
- data/app/models/content/product.rb +6 -5
- data/app/models/content/repository/operating_system.rb +14 -0
- data/app/models/content/repository/product.rb +21 -0
- data/app/models/content/repository.rb +28 -39
- data/app/models/content/repository_clone.rb +29 -0
- data/app/models/content/validators/content_validator.rb +0 -12
- data/app/models/content/validators/description_format.rb +0 -12
- data/app/models/content/validators/no_trailing_space.rb +0 -12
- data/app/models/setting/content.rb +0 -18
- data/app/overrides/{add_host_conent_tab.rb → add_host_content_tab.rb} +2 -2
- data/app/overrides/{add_hostgroup_conent_tab.rb → add_hostgroup_content_tab.rb} +1 -1
- data/app/services/content/content_view_factory.rb +41 -0
- data/app/services/content/{pulp_configuration.rb → pulp/configuration.rb} +1 -1
- data/app/services/content/pulp/event_handler.rb +61 -0
- data/app/services/content/pulp/repository.rb +200 -0
- data/app/services/content/pulp/repository_clone.rb +24 -0
- data/app/services/content/pulp/repository_sync_history.rb +35 -0
- data/app/services/content/pulp/repository_sync_status.rb +30 -0
- data/app/views/content/content_views/_form.html.erb +49 -0
- data/app/views/content/content_views/_form_tab.html.erb +3 -0
- data/app/views/content/content_views/_host_tab_pane.html.erb +5 -0
- data/app/views/content/content_views/_step1.html.erb +18 -0
- data/app/views/content/content_views/_step2.html.erb +16 -0
- data/app/views/content/content_views/edit.html.erb +5 -0
- data/app/views/content/content_views/index.html.erb +27 -0
- data/app/views/content/content_views/new.html.erb +11 -0
- data/app/views/content/products/_form.html.erb +2 -13
- data/app/views/content/products/_form_tab.html.erb +3 -3
- data/app/views/content/products/_hostgroup_tab_pane.html.erb +2 -2
- data/app/views/content/products/index.html.erb +6 -1
- data/app/views/content/repositories/_os_form.html.erb +22 -0
- data/app/views/content/repositories/{_form.html.erb → _product_form.html.erb} +4 -6
- data/app/views/content/repositories/edit.html.erb +5 -2
- data/app/views/content/repositories/index.html.erb +12 -9
- data/app/views/content/repositories/new.html.erb +5 -2
- data/app/views/content/repositories/show.html.erb +9 -16
- data/config/environment.rb +0 -0
- data/config/routes.rb +6 -0
- data/db/migrate/20130702140034_create_content_repositories.rb +6 -2
- data/db/migrate/20130722084911_create_content_operatingsystem_repositories.rb +1 -1
- data/db/migrate/20130807121629_create_content_content_views.rb +15 -0
- data/db/migrate/20130807123220_create_content_available_content_views.rb +11 -0
- data/db/migrate/20130812154754_create_content_content_view_hosts.rb +9 -0
- data/db/migrate/20130813110455_create_content_repository_clones.rb +17 -0
- data/db/migrate/20130825145431_create_content_content_view_repository_clones.rb +12 -0
- data/lib/content/engine.rb +2 -0
- data/lib/content/version.rb +1 -1
- data/test/fixtures/content/repository_clones.yml +21 -0
- data/test/unit/content/repository_clone_test.rb +7 -0
- metadata +44 -17
- data/app/models/concerns/content/custom_repository_paths.rb +0 -29
- data/app/models/content/environment_product.rb +0 -19
- data/app/models/content/orchestration/pulp.rb +0 -93
- data/app/models/content/product_operatingsystem.rb +0 -19
- data/app/models/content/remote/pulp/repository.rb +0 -48
- data/app/overrides/add_os_conent_tab.rb +0 -9
- data/app/services/content/pulp_event_handler.rb +0 -25
- data/app/views/content/products/_host_tab_pane.html.erb +0 -5
- data/app/views/content/products/_operatingsystem_tab_pane.html.erb +0 -5
- data/db/migrate/20130717032320_create_content_environments_products.rb +0 -9
- data/db/migrate/20130729032320_create_content_product_operatingsystems.rb +0 -9
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
class Content::Pulp::RepositorySyncStatus
|
|
2
|
+
attr_reader :state, :progress, :finish_time, :start_time, :sync_times, :sync_metrics, :message, :task_id
|
|
3
|
+
|
|
4
|
+
HISTORY_ERROR = 'failed'
|
|
5
|
+
HISTORY_SUCCESS = 'success'
|
|
6
|
+
FINISHED = 'finished'
|
|
7
|
+
ERROR = 'error'
|
|
8
|
+
RUNNING = 'running'
|
|
9
|
+
WAITING = 'waiting'
|
|
10
|
+
CANCELED = 'canceled'
|
|
11
|
+
NOT_SYNCED = 'not synchronized'
|
|
12
|
+
|
|
13
|
+
def initialize(attrs)
|
|
14
|
+
@state = NOT_SYNCED
|
|
15
|
+
@sync_times = @sync_metrics = {}
|
|
16
|
+
|
|
17
|
+
attrs.each do |k, v|
|
|
18
|
+
instance_variable_set("@#{k}", v) if respond_to?("#{k}".to_sym)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def not_synced?
|
|
23
|
+
state == NOT_SYNCED
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def running?
|
|
27
|
+
state == RUNNING
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<%= form_for @content_view, :url => (@content_view.new_record? ? content_views_path : content_view_path(@content_view)) do |f| %>
|
|
2
|
+
<%= base_errors_for @content_view %>
|
|
3
|
+
|
|
4
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
|
5
|
+
<li class="active"><a href="#primary" data-toggle="tab"><%= _("Content view") %></a></li>
|
|
6
|
+
<li><a href="#availability" data-toggle="tab"><%= _("Availability") %></a></li>
|
|
7
|
+
</ul>
|
|
8
|
+
|
|
9
|
+
<div class="tab-content">
|
|
10
|
+
<div class="tab-pane active" id="primary">
|
|
11
|
+
<%= text_f f, :name, :value => @content_view.to_label %>
|
|
12
|
+
|
|
13
|
+
<% if @content_view.new_record? %>
|
|
14
|
+
<% @content_view.source_repositories.each do |repo| %>
|
|
15
|
+
<%= f.hidden_field :source_repositories, :multiple => true, :value => repo.id %>
|
|
16
|
+
<% end if @content_view.source_repositories %>
|
|
17
|
+
<% @content_view.repository_clones.each do |repo| %>
|
|
18
|
+
<%= f.hidden_field :repository_clone_ids, :multiple => true, :value => repo.id %>
|
|
19
|
+
<% end if @content_view.repository_clones %>
|
|
20
|
+
|
|
21
|
+
<%= f.hidden_field :originator_id, :value => @content_view.originator_id %>
|
|
22
|
+
<%= f.hidden_field :originator_type, :value => @content_view.originator_type %>
|
|
23
|
+
<% end %>
|
|
24
|
+
|
|
25
|
+
<table class="table table-bordered">
|
|
26
|
+
<tr>
|
|
27
|
+
<th><%= _("Name") %></th>
|
|
28
|
+
<th><%= _("State") %></th>
|
|
29
|
+
<th><%= _("Last publish") %></th>
|
|
30
|
+
<th><%= _("Content type") %></th>
|
|
31
|
+
</tr>
|
|
32
|
+
<% repositories(@content_view).each do |repository| %>
|
|
33
|
+
<tr>
|
|
34
|
+
<td><%= repository.name %></td>
|
|
35
|
+
<td><%= repository.try(:state) %></td>
|
|
36
|
+
<td><%= last_time(repository.last_published) %></td>
|
|
37
|
+
<td><%= repository.content_type %></td>
|
|
38
|
+
</tr>
|
|
39
|
+
<% end %>
|
|
40
|
+
</table>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="tab-pane" id="availability">
|
|
43
|
+
<%= multiple_selects(f, :environments, Environment,
|
|
44
|
+
Content::AvailableContentView.where(:content_view_id => @content_view.id).pluck(:environment_id),
|
|
45
|
+
{ :label => _('Available in environments') }) %>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
<%= submit_or_cancel f %>
|
|
49
|
+
<% end %>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<%= wizard_header 1, _('Select source type'), _('Select content'), _('Create') %>
|
|
2
|
+
<%= form_tag hash_for_new_content_view_path, :class => 'form-horizontal well', :method => :get do %>
|
|
3
|
+
<% case params[:type] %>
|
|
4
|
+
<% when 'product' %>
|
|
5
|
+
<%= field(nil, _('Product')) do
|
|
6
|
+
select_tag('product', options_from_collection_for_select(Content::Product.has_repos, 'id', 'name'))
|
|
7
|
+
end %>
|
|
8
|
+
<% when 'operatingsystem' %>
|
|
9
|
+
<%= field(nil, _('Operating system')) do
|
|
10
|
+
select_tag('operatingsystem', options_from_collection_for_select(Redhat.has_repos, 'id', 'to_label'))
|
|
11
|
+
end %>
|
|
12
|
+
<% when 'hostgroup' %>
|
|
13
|
+
<%= field(nil, _('Host group')) do
|
|
14
|
+
select_tag('hostgroup', options_from_collection_for_select(accessible_hostgroups, 'id', 'to_label'))
|
|
15
|
+
end %>
|
|
16
|
+
<% end %>
|
|
17
|
+
<%= next_or_cancel hash_for_new_content_view_path() %>
|
|
18
|
+
<% end %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<%= wizard_header 2, _("Select source type"), _("Select content"), _("Create") %>
|
|
2
|
+
<%= form_for Content::ContentViewFactory.new, :url => hash_for_new_content_view_path, :class => 'form-horizontal well', :method => :get do |f| %>
|
|
3
|
+
<%= f.hidden_field :originator_id, :value => @hostgroup.id %>
|
|
4
|
+
<%= f.hidden_field :originator_type, :value => @hostgroup.class.name %>
|
|
5
|
+
<%= select_f f, :parent_cv, @hostgroup.parent.try(:content_views) || [], "id", "name",
|
|
6
|
+
:label => _("Parent Content view") %>
|
|
7
|
+
<h6>Products</h6>
|
|
8
|
+
<% @hostgroup.products.each do |product| %>
|
|
9
|
+
<%= select_f f, :product_cv, product.content_views, "id", "name", {}, :label => product.name %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<h6>Operating System</h6>
|
|
13
|
+
<%= select_f f, :os_cv, @hostgroup.os.content_views, "id", "name" %>
|
|
14
|
+
|
|
15
|
+
<%= next_or_cancel hash_for_new_content_view_path() %>
|
|
16
|
+
<% end %>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<% title _("Content Views") %>
|
|
2
|
+
<% title_actions select_action_button( _('New content view'),
|
|
3
|
+
display_link_if_authorized(_("Product view"), hash_for_new_content_view_path(:type=>'product')),
|
|
4
|
+
display_link_if_authorized(_("Operating system view"), hash_for_new_content_view_path(:type=>'operatingsystem')),
|
|
5
|
+
display_link_if_authorized(_("Hostgroup view"), hash_for_new_content_view_path(:type=>'hostgroup'))) %>
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
<table class="table table-bordered table-striped">
|
|
9
|
+
<tr>
|
|
10
|
+
<th><%= sort :name, :as => s_("Name") %></th>
|
|
11
|
+
<th><%= _("Repositories") %></th>
|
|
12
|
+
<th><%= _("Created at") %></th>
|
|
13
|
+
<th></th>
|
|
14
|
+
</tr>
|
|
15
|
+
<% @content_views.each do |content_view| %>
|
|
16
|
+
<tr>
|
|
17
|
+
<td><%= link_to_if_authorized(h(content_view.name), hash_for_edit_content_view_path(content_view)) %></td>
|
|
18
|
+
<td><%= @counter[content_view.id] || '0' %></td>
|
|
19
|
+
<td><%= _("%s ago") % time_ago_in_words(content_view.created_at) %></td>
|
|
20
|
+
<td><%= action_buttons(
|
|
21
|
+
display_delete_if_authorized(hash_for_content_view_path(content_view), :confirm => "Delete #{content_view}?")
|
|
22
|
+
)%></td>
|
|
23
|
+
</tr>
|
|
24
|
+
<% end %>
|
|
25
|
+
</table>
|
|
26
|
+
<%= page_entries_info @content_views %>
|
|
27
|
+
<%= will_paginate @content_views %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<%= javascript 'content/content.js' %>
|
|
2
|
+
|
|
3
|
+
<% title _("New Content View") %>
|
|
4
|
+
|
|
5
|
+
<% if @content_view %>
|
|
6
|
+
<%= render :partial => 'form' %>
|
|
7
|
+
<% elsif @hostgroup %>
|
|
8
|
+
<%= render :partial => 'step2' %>
|
|
9
|
+
<% else %>
|
|
10
|
+
<%= render :partial => 'step1' %>
|
|
11
|
+
<% end %>
|
|
@@ -3,24 +3,13 @@
|
|
|
3
3
|
<%= base_errors_for @product %>
|
|
4
4
|
<ul class="nav nav-tabs" data-tabs="tabs">
|
|
5
5
|
<li class="active"><a href="#primary" data-toggle="tab"><%= _("Product") %></a></li>
|
|
6
|
-
<li><a href="#environments" data-toggle="tab"><%= _("Environments") %></a></li>
|
|
7
|
-
<li><a href="#operatingsystems" data-toggle="tab"><%= _("Operating systems") %></a></li>
|
|
8
6
|
</ul>
|
|
9
7
|
<div class="tab-content">
|
|
10
8
|
<div class="tab-pane active" id="primary">
|
|
11
9
|
<%= text_f f, :name %>
|
|
12
|
-
<%=
|
|
13
|
-
</div>
|
|
14
|
-
<div class="tab-pane" id="environments">
|
|
15
|
-
<%= alert :class => 'controls alert-success', :header => 'Product environments list',
|
|
16
|
-
:text => _('Repositories of this product will be restricted only for hosts in the selected environments.') %>
|
|
17
|
-
<%= multiple_selects(f, :environments, Environment, f.object.environment_ids) %>
|
|
18
|
-
</div>
|
|
19
|
-
<div class="tab-pane" id="operatingsystems">
|
|
20
|
-
<%= alert :class => 'controls alert-success', :header => 'Default Products for operating system',
|
|
21
|
-
:text => _('Repositories of this product will be added to every host that runs the selected operating system, pending environment restriction') %>
|
|
22
|
-
<%= multiple_selects(f, :operatingsystems, Redhat, f.object.operatingsystem_ids,{:label=>"Operating system default products"}) %>
|
|
10
|
+
<%= textarea_f f, :description, :class => "input-xlarge" , :rows=> '3' %>
|
|
23
11
|
</div>
|
|
12
|
+
|
|
24
13
|
</div>
|
|
25
14
|
<%= submit_or_cancel f %>
|
|
26
15
|
<% end %>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<li id="
|
|
2
|
-
<a href="#
|
|
3
|
-
</li>
|
|
1
|
+
<li id="content_tab">
|
|
2
|
+
<a href="#product" data-toggle="tab">Content</a>
|
|
3
|
+
</li>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<div class="tab-pane" id="
|
|
1
|
+
<div class="tab-pane" id="product">
|
|
2
2
|
<%= fields_for @hostgroup do |f| %>
|
|
3
3
|
<%= multiple_selects f, :products, Content::Product, @hostgroup.all_product_ids , {:disabled => @hostgroup.inherited_product_ids}, {} %>
|
|
4
4
|
<% end -%>
|
|
5
|
-
</div>
|
|
5
|
+
</div>
|
|
@@ -16,7 +16,12 @@
|
|
|
16
16
|
<td><%= link_to @counter[product.id] || '0', repositories_path(:search => "product=#{product.name}") %></td>
|
|
17
17
|
<td align="right">
|
|
18
18
|
<%= action_buttons(
|
|
19
|
-
display_link_if_authorized(_("
|
|
19
|
+
display_link_if_authorized(_("Create Content View"), hash_for_new_content_view_path(:product=>product),
|
|
20
|
+
:disabled => visible?(product.id)),
|
|
21
|
+
display_link_if_authorized(_("Synchronize"), hash_for_sync_product_path(product), :method => :put,
|
|
22
|
+
:disabled => visible?(product.id)),
|
|
23
|
+
display_link_if_authorized(_("Add Repository"),
|
|
24
|
+
hash_for_new_repository_path(:type => "product",:product_id => product.id)),
|
|
20
25
|
display_delete_if_authorized(hash_for_product_path(product), :confirm => "Delete #{product.name}?")
|
|
21
26
|
)%>
|
|
22
27
|
</td>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<%= javascript 'content/content.js' %>
|
|
2
|
+
<%= form_for @repository, :url => (@repository.new_record? ? repositories_path : repository_path(:id => @repository.id)) do |f| %>
|
|
3
|
+
<%= base_errors_for @repository %>
|
|
4
|
+
<ul class="nav nav-tabs" data-tabs="tabs">
|
|
5
|
+
<li class="active"><a href="#primary" data-toggle="tab"><%= _("Repository") %></a></li>
|
|
6
|
+
</ul>
|
|
7
|
+
<div class="tab-content">
|
|
8
|
+
<div class="tab-pane active" id="primary">
|
|
9
|
+
<%= f.hidden_field :type %>
|
|
10
|
+
<%= select_f f, :operatingsystem_id, ::Redhat.all, :id, :to_label, {}, {:label => _("Operating System")} %>
|
|
11
|
+
<%= text_f f, :name %>
|
|
12
|
+
<%= text_f f, :feed, :class => 'span6' %>
|
|
13
|
+
<%= selectable_f f, :content_type, @repository.content_types %>
|
|
14
|
+
<%= select_f f, :architecture_id, ::Architecture.all, :id, :name, { :include_blank => N_("noarch")} %>
|
|
15
|
+
<%= checkbox_f f, :enabled %>
|
|
16
|
+
|
|
17
|
+
<%= select_f f, :gpg_key_id, Content::GpgKey.all, :id, :name, {:include_blank => true}, {:label => _("GPG Key")} %>
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<%= submit_or_cancel f %>
|
|
22
|
+
<% end %>
|
|
@@ -7,23 +7,21 @@
|
|
|
7
7
|
</ul>
|
|
8
8
|
<div class="tab-content">
|
|
9
9
|
<div class="tab-pane active" id="primary">
|
|
10
|
+
<%= f.hidden_field :type %>
|
|
10
11
|
<%= select_f f, :product_id, Content::Product.all, :id, :name, {}, {:label => _("Product")} %>
|
|
11
12
|
<%= text_f f, :name %>
|
|
12
13
|
<%= text_f f, :feed, :class => 'span6' %>
|
|
13
|
-
<%= selectable_f f, :content_type,
|
|
14
|
+
<%= selectable_f f, :content_type, @repository.content_types %>
|
|
14
15
|
<%= select_f f, :architecture_id, ::Architecture.all, :id, :name, { :include_blank => N_("noarch")} %>
|
|
15
16
|
<%= checkbox_f f, :enabled %>
|
|
16
17
|
|
|
17
18
|
<%= select_f f, :gpg_key_id, Content::GpgKey.all, :id, :name, {:include_blank => true}, {:label => _("GPG Key")} %>
|
|
18
19
|
|
|
19
|
-
<% unless @repository.new_record? %>
|
|
20
|
-
<%= text_f f, :full_path, :disabled => true, :class => 'span6' %>
|
|
21
|
-
<% end %>
|
|
22
20
|
</div>
|
|
23
21
|
<div class="tab-pane" id="operatingsystems">
|
|
24
22
|
<%= alert :class => 'controls alert-success', :header => 'Repository for operating systems',
|
|
25
|
-
|
|
26
|
-
<%= multiple_selects(f, :operatingsystems, ::Redhat,
|
|
23
|
+
:text => _('This Repository will be restricted only to hosts that runs the selected operating system') %>
|
|
24
|
+
<%= multiple_selects(f, :operatingsystems, ::Redhat, @repository.operatingsystem_ids) %>
|
|
27
25
|
</div>
|
|
28
26
|
</div>
|
|
29
27
|
<%= submit_or_cancel f %>
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
<% title _("Repositories") %>
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
<% title_actions select_action_button(_('New repository'),
|
|
4
|
+
display_link_if_authorized(_("New Product Repository"), hash_for_new_repository_path(:type => 'product')),
|
|
5
|
+
display_link_if_authorized(_("New Operating system Repository"), hash_for_new_repository_path(:type => 'operatingsystem'))) %>
|
|
3
6
|
|
|
4
7
|
<table class="table table-bordered table-striped">
|
|
5
8
|
<tr>
|
|
6
9
|
<th><%= sort :name, :as => s_("Name") %></th>
|
|
7
10
|
<th><%= _("Product") %></th>
|
|
8
|
-
<th><%= _("
|
|
11
|
+
<th><%= _("State") %></th>
|
|
9
12
|
<th><%= _("Last sync status") %></th>
|
|
10
13
|
<th><%= _("Content type") %></th>
|
|
11
14
|
<th></th>
|
|
@@ -13,16 +16,16 @@
|
|
|
13
16
|
<% @repositories.each do |repository| %>
|
|
14
17
|
<tr>
|
|
15
18
|
<td><%= link_to_if_authorized(h(repository.name), hash_for_repository_path(repository)) %></td>
|
|
16
|
-
<td><%= repository.
|
|
17
|
-
<td><%= repository.
|
|
18
|
-
<td><%=
|
|
19
|
+
<td><%= repository.entity_name %></td>
|
|
20
|
+
<td><%= repository.try(:state) %></td>
|
|
21
|
+
<td><%= last_time(repository.last_sync) %></td>
|
|
19
22
|
<td><%= repository.content_type %></td>
|
|
20
23
|
<td align="right">
|
|
21
24
|
<%= action_buttons(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
display_link_if_authorized(_("Edit"), hash_for_edit_repository_path(repository)),
|
|
26
|
+
display_link_if_authorized(_("Synchronize"), hash_for_sync_repository_path(repository), :method => :put),
|
|
27
|
+
display_delete_if_authorized(hash_for_repository_path(repository), :confirm => "Delete #{repository.name}?")
|
|
28
|
+
) %>
|
|
26
29
|
|
|
27
30
|
</td>
|
|
28
31
|
</tr>
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
<%= title_actions(button_group(
|
|
5
5
|
link_to_if_authorized(_("Edit"), hash_for_edit_repository_path(@repository)),
|
|
6
|
-
link_to_if_authorized(_("Synchronize"), hash_for_sync_repository_path(@repository), :method => :put)
|
|
6
|
+
link_to_if_authorized(_("Synchronize"), hash_for_sync_repository_path(@repository), :method => :put),
|
|
7
|
+
display_delete_if_authorized(hash_for_repository_path(@repository), :class => 'btn-danger', :confirm => "Delete #{@repository.name}?")
|
|
7
8
|
)) %>
|
|
8
9
|
<div class="row">
|
|
9
10
|
<div class="span12">
|
|
@@ -40,10 +41,6 @@
|
|
|
40
41
|
<td> <%= _("Unprotected") %> </td>
|
|
41
42
|
<td> <%= @repository.unprotected %> </td>
|
|
42
43
|
</tr>
|
|
43
|
-
<tr>
|
|
44
|
-
<td> <%= _("Full path") %> </td>
|
|
45
|
-
<td> <%= @repository.full_path %> </td>
|
|
46
|
-
</tr>
|
|
47
44
|
</table>
|
|
48
45
|
</div>
|
|
49
46
|
</div>
|
|
@@ -51,12 +48,12 @@
|
|
|
51
48
|
<div class="stats-well span4">
|
|
52
49
|
<h4 class="ca" ><%= _('Last Update Metrics') -%></h4>
|
|
53
50
|
<div style="margin-top:50px;padding-bottom: 40px;">
|
|
54
|
-
<%= flot_pie_chart("metrics" ,_("Last Update Metrics"),
|
|
51
|
+
<%= flot_pie_chart("metrics" ,_("Last Update Metrics"), @repository.sync_history.last.try(:times), :class => "statistics-pie small")%>
|
|
55
52
|
</div>
|
|
56
53
|
</div>
|
|
57
54
|
<div class="stats-well span4">
|
|
58
55
|
<h4 class="ca" ><%= _('Update Summary') -%></h4>
|
|
59
|
-
<%= flot_bar_chart("status" ,"", _("Number of packages"),
|
|
56
|
+
<%= flot_bar_chart("status" ,"", _("Number of packages"), @repository.sync_history.last.try(:metrics), :class => "statistics-bar")%>
|
|
60
57
|
</div>
|
|
61
58
|
|
|
62
59
|
<div class="span4">
|
|
@@ -65,19 +62,15 @@
|
|
|
65
62
|
<th><%= _('Repository Counters') %></th>
|
|
66
63
|
<th></th>
|
|
67
64
|
</tr>
|
|
68
|
-
<% @
|
|
65
|
+
<% @repository.counters.each do |name, value| -%>
|
|
69
66
|
<tr>
|
|
70
|
-
<td> <%= name.humanize %> </td>
|
|
67
|
+
<td> <%= name.to_s.humanize %> </td>
|
|
71
68
|
<td> <%= value %> </td>
|
|
72
69
|
</tr>
|
|
73
70
|
<% end -%>
|
|
74
|
-
<tr>
|
|
75
|
-
<td> <%= _("Last published") %> </td>
|
|
76
|
-
<td> <%= last_publish @details %> </td>
|
|
77
|
-
</tr>
|
|
78
71
|
<tr>
|
|
79
72
|
<td> <%= _("Last synchronized") %> </td>
|
|
80
|
-
<td> <%=
|
|
73
|
+
<td> <%= last_time @repository.last_sync %> </td>
|
|
81
74
|
</tr>
|
|
82
75
|
</table>
|
|
83
76
|
</div>
|
|
@@ -87,9 +80,9 @@
|
|
|
87
80
|
<th><%= _('Last Sync') %></th>
|
|
88
81
|
<th></th>
|
|
89
82
|
</tr>
|
|
90
|
-
<%
|
|
83
|
+
<% @repository.sync_history.last.status.each do |name, value| -%>
|
|
91
84
|
<tr>
|
|
92
|
-
<td> <%= name.humanize %> </td>
|
|
85
|
+
<td> <%= name.to_s.humanize %> </td>
|
|
93
86
|
<td> <%= value %> </td>
|
|
94
87
|
</tr>
|
|
95
88
|
<% end -%>
|
|
File without changes
|
data/config/routes.rb
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
class CreateContentRepositories < ActiveRecord::Migration
|
|
2
2
|
def change
|
|
3
3
|
create_table :content_repositories do |t|
|
|
4
|
+
t.string :type
|
|
5
|
+
t.string :pulp_id, :null => false
|
|
4
6
|
t.string :name, :null => false
|
|
5
7
|
t.string :description
|
|
6
8
|
t.string :content_type, :default => "yum", :null => false
|
|
7
9
|
t.boolean :enabled, :default => true
|
|
8
|
-
t.string :relative_path
|
|
9
10
|
t.string :feed
|
|
10
11
|
t.boolean :unprotected, :default => false
|
|
11
|
-
t.references :product, :null => false
|
|
12
12
|
t.string :pulp_id
|
|
13
13
|
t.references :gpg_key
|
|
14
14
|
t.references :architecture
|
|
15
|
+
t.string :status
|
|
16
|
+
t.datetime :last_sync
|
|
17
|
+
t.references :product
|
|
18
|
+
t.references :operatingsystem
|
|
15
19
|
t.timestamps
|
|
16
20
|
end
|
|
17
21
|
add_index :content_repositories, :pulp_id, :unique => true
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
class CreateContentContentViews < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :content_content_views do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :ancestry
|
|
6
|
+
t.integer :originator_id
|
|
7
|
+
t.string :originator_type
|
|
8
|
+
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
add_index(:content_content_views, :ancestry,:name=>'content_view_ancestry_index')
|
|
12
|
+
add_index :content_content_views, [:originator_id, :originator_type]
|
|
13
|
+
add_index :content_content_views, :originator_type
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class CreateContentAvailableContentViews < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :content_available_content_views do |t|
|
|
4
|
+
t.references :environment, :null =>false
|
|
5
|
+
t.references :content_view, :null =>false
|
|
6
|
+
t.references :operatingsystem
|
|
7
|
+
t.boolean :archived
|
|
8
|
+
t.boolean :default
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
class CreateContentContentViewHosts < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :content_content_view_hosts do |t|
|
|
4
|
+
t.references :host, :null =>false
|
|
5
|
+
t.references :content_view, :null =>false
|
|
6
|
+
end
|
|
7
|
+
add_index(:content_content_view_hosts, [:content_view_id, :host_id],:name=>'content_content_view_hosts_index', :unique=>true)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class CreateContentRepositoryClones < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :content_repository_clones do |t|
|
|
4
|
+
t.string :name
|
|
5
|
+
t.string :description
|
|
6
|
+
t.references :repository
|
|
7
|
+
t.string :relative_path
|
|
8
|
+
t.string :pulp_id
|
|
9
|
+
t.string :status
|
|
10
|
+
t.datetime :last_published
|
|
11
|
+
|
|
12
|
+
t.timestamps
|
|
13
|
+
end
|
|
14
|
+
add_index :content_repository_clones, :repository_id
|
|
15
|
+
add_index :content_repository_clones, :pulp_id, :unique => true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class CreateContentContentViewRepositoryClones < ActiveRecord::Migration
|
|
2
|
+
def change
|
|
3
|
+
create_table :content_content_view_repository_clones do |t|
|
|
4
|
+
t.references :content_view
|
|
5
|
+
t.references :repository_clone
|
|
6
|
+
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
add_index :content_content_view_repository_clones, :content_view_id, :name => 'cv_repo_clone_cv_id'
|
|
10
|
+
add_index :content_content_view_repository_clones, :repository_clone_id, :name => 'cv_repo_clone_clone_id'
|
|
11
|
+
end
|
|
12
|
+
end
|
data/lib/content/engine.rb
CHANGED
data/lib/content/version.rb
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
|
2
|
+
|
|
3
|
+
one:
|
|
4
|
+
name: MyString
|
|
5
|
+
description: MyString
|
|
6
|
+
repository:
|
|
7
|
+
relative_path: MyString
|
|
8
|
+
content_view:
|
|
9
|
+
pulp_id: MyString
|
|
10
|
+
status: MyString
|
|
11
|
+
last_published: 2013-08-13 14:04:55
|
|
12
|
+
|
|
13
|
+
two:
|
|
14
|
+
name: MyString
|
|
15
|
+
description: MyString
|
|
16
|
+
repository:
|
|
17
|
+
relative_path: MyString
|
|
18
|
+
content_view:
|
|
19
|
+
pulp_id: MyString
|
|
20
|
+
status: MyString
|
|
21
|
+
last_published: 2013-08-13 14:04:55
|