foreman_content 0.1
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 +7 -0
 - data/README.md +113 -0
 - data/Rakefile +111 -0
 - data/app/assets/javascripts/content/content.js +12 -0
 - data/app/assets/stylesheets/content/application.css +13 -0
 - data/app/controllers/content/api/repositories_controller.rb +27 -0
 - data/app/controllers/content/gpg_keys_controller.rb +42 -0
 - data/app/controllers/content/products_controller.rb +51 -0
 - data/app/controllers/content/repositories_controller.rb +57 -0
 - data/app/helpers/content/application_helper.rb +5 -0
 - data/app/helpers/content/repositories_helper.rb +56 -0
 - data/app/models/content/custom_repository_paths.rb +27 -0
 - data/app/models/content/environment_product.rb +19 -0
 - data/app/models/content/gpg_key.rb +32 -0
 - data/app/models/content/host_product.rb +20 -0
 - data/app/models/content/hostgroup_product.rb +19 -0
 - data/app/models/content/operatingsystem_repository.rb +19 -0
 - data/app/models/content/orchestration/pulp.rb +93 -0
 - data/app/models/content/product.rb +28 -0
 - data/app/models/content/product_operatingsystem.rb +19 -0
 - data/app/models/content/remote/pulp/repository.rb +46 -0
 - data/app/models/content/repository.rb +70 -0
 - data/app/models/content/validators/content_validator.rb +25 -0
 - data/app/models/content/validators/description_format.rb +24 -0
 - data/app/models/content/validators/name_format.rb +40 -0
 - data/app/models/content/validators/no_trailing_space.rb +27 -0
 - data/app/models/setting/content.rb +42 -0
 - data/app/overrides/add_host_conent_tab.rb +9 -0
 - data/app/overrides/add_hostgroup_conent_tab.rb +9 -0
 - data/app/overrides/add_os_conent_tab.rb +9 -0
 - data/app/services/content/pulp_event_handler.rb +25 -0
 - data/app/views/content/gpg_keys/_form.html.erb +8 -0
 - data/app/views/content/gpg_keys/edit.html.erb +3 -0
 - data/app/views/content/gpg_keys/index.html.erb +20 -0
 - data/app/views/content/gpg_keys/new.html.erb +3 -0
 - data/app/views/content/products/_form.html.erb +26 -0
 - data/app/views/content/products/_form_tab.html.erb +3 -0
 - data/app/views/content/products/_host_tab_pane.html.erb +5 -0
 - data/app/views/content/products/_hostgroup_tab_pane.html.erb +5 -0
 - data/app/views/content/products/_operatingsystem_tab_pane.html.erb +5 -0
 - data/app/views/content/products/edit.html.erb +3 -0
 - data/app/views/content/products/index.html.erb +27 -0
 - data/app/views/content/products/new.html.erb +3 -0
 - data/app/views/content/products/welcome.html.erb +8 -0
 - data/app/views/content/repositories/_form.html.erb +30 -0
 - data/app/views/content/repositories/edit.html.erb +3 -0
 - data/app/views/content/repositories/index.html.erb +32 -0
 - data/app/views/content/repositories/new.html.erb +3 -0
 - data/app/views/content/repositories/show.html.erb +98 -0
 - data/app/views/content/repositories/welcome.html.erb +8 -0
 - data/config/routes.rb +36 -0
 - data/db/migrate/20130702140034_create_content_repositories.rb +19 -0
 - data/db/migrate/20130702162629_create_content_products.rb +10 -0
 - data/db/migrate/20130709001120_create_content_gpg_keys.rb +10 -0
 - data/db/migrate/20130717032320_create_content_environments_products.rb +9 -0
 - data/db/migrate/20130722084911_create_content_operatingsystem_repositories.rb +9 -0
 - data/db/migrate/20130723084911_create_content_hostgroup_products.rb +9 -0
 - data/db/migrate/20130723124911_create_content_host_products.rb +9 -0
 - data/db/migrate/20130729032320_create_content_product_operatingsystems.rb +9 -0
 - data/lib/content/engine.rb +59 -0
 - data/lib/content/version.rb +3 -0
 - data/lib/content_environment.rb +13 -0
 - data/lib/content_home_helper_patch.rb +23 -0
 - data/lib/content_host.rb +55 -0
 - data/lib/content_hostgroup.rb +22 -0
 - data/lib/content_operatingsystem.rb +17 -0
 - data/lib/content_redhat.rb +36 -0
 - data/lib/content_taxonomy.rb +18 -0
 - data/lib/foreman_content.rb +4 -0
 - data/lib/pulp_configuration.rb +23 -0
 - data/lib/tasks/content_tasks.rake +4 -0
 - data/test/content_test.rb +7 -0
 - data/test/fixtures/content/products.yml +11 -0
 - data/test/fixtures/content/repositories.yml +11 -0
 - data/test/integration/navigation_test.rb +10 -0
 - data/test/test_helper.rb +23 -0
 - data/test/unit/content/description_format_validator_test.rb +20 -0
 - data/test/unit/content/name_format_validator_test.rb +28 -0
 - data/test/unit/content/product_validation_test.rb +18 -0
 - data/test/unit/content/repositories_test.rb +7 -0
 - metadata +194 -0
 
| 
         @@ -0,0 +1,98 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <% javascript 'charts' %>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <% title @repository.to_label %>
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            <%= title_actions(button_group(
         
     | 
| 
      
 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)
         
     | 
| 
      
 7 
     | 
    
         
            +
                              )) %>
         
     | 
| 
      
 8 
     | 
    
         
            +
            <div class="row">
         
     | 
| 
      
 9 
     | 
    
         
            +
              <div class="span12">
         
     | 
| 
      
 10 
     | 
    
         
            +
                <table class="table table-bordered table-striped">
         
     | 
| 
      
 11 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 12 
     | 
    
         
            +
                    <th><%= _('Repository details') %></th>
         
     | 
| 
      
 13 
     | 
    
         
            +
                    <th></th>
         
     | 
| 
      
 14 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 15 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 16 
     | 
    
         
            +
                    <td> <%= _("Name") %> </td>
         
     | 
| 
      
 17 
     | 
    
         
            +
                    <td> <%= @repository.to_label %> </td>
         
     | 
| 
      
 18 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 19 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 20 
     | 
    
         
            +
                    <td> <%= _("Description") %> </td>
         
     | 
| 
      
 21 
     | 
    
         
            +
                    <td> <%= @repository.description %> </td>
         
     | 
| 
      
 22 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 23 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 24 
     | 
    
         
            +
                    <td> <%= _("Feed") %> </td>
         
     | 
| 
      
 25 
     | 
    
         
            +
                    <td> <%= @repository.feed %> </td>
         
     | 
| 
      
 26 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 27 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 28 
     | 
    
         
            +
                    <td> <%= _("Content type") %> </td>
         
     | 
| 
      
 29 
     | 
    
         
            +
                    <td> <%= @repository.content_type %> </td>
         
     | 
| 
      
 30 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 31 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 32 
     | 
    
         
            +
                    <td> <%= _("Architecture") %> </td>
         
     | 
| 
      
 33 
     | 
    
         
            +
                    <td> <%= @repository.architecture %> </td>
         
     | 
| 
      
 34 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 35 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 36 
     | 
    
         
            +
                    <td> <%= _("Enabled") %> </td>
         
     | 
| 
      
 37 
     | 
    
         
            +
                    <td> <%= @repository.enabled %> </td>
         
     | 
| 
      
 38 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 39 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 40 
     | 
    
         
            +
                    <td> <%= _("Unprotected") %> </td>
         
     | 
| 
      
 41 
     | 
    
         
            +
                    <td> <%= @repository.unprotected %> </td>
         
     | 
| 
      
 42 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 43 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 44 
     | 
    
         
            +
                    <td> <%= _("Full path") %> </td>
         
     | 
| 
      
 45 
     | 
    
         
            +
                    <td> <%= @repository.full_path %> </td>
         
     | 
| 
      
 46 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 47 
     | 
    
         
            +
                </table>
         
     | 
| 
      
 48 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 49 
     | 
    
         
            +
            </div>
         
     | 
| 
      
 50 
     | 
    
         
            +
            <div class="row-fluid">
         
     | 
| 
      
 51 
     | 
    
         
            +
              <div class="stats-well span4">
         
     | 
| 
      
 52 
     | 
    
         
            +
                <h4 class="ca" ><%= _('Last Update Metrics') -%></h4>
         
     | 
| 
      
 53 
     | 
    
         
            +
                <div style="margin-top:50px;padding-bottom: 40px;">
         
     | 
| 
      
 54 
     | 
    
         
            +
                  <%= flot_pie_chart("metrics" ,_("Last Update Metrics"), sync_history_times(@sync_history), :class => "statistics-pie small")%>
         
     | 
| 
      
 55 
     | 
    
         
            +
                </div>
         
     | 
| 
      
 56 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 57 
     | 
    
         
            +
              <div class="stats-well span4">
         
     | 
| 
      
 58 
     | 
    
         
            +
                <h4 class="ca" ><%= _('Update Summary') -%></h4>
         
     | 
| 
      
 59 
     | 
    
         
            +
                <%= flot_bar_chart("status" ,"", _("Number of packages"), sync_history_metrics(@sync_history), :class => "statistics-bar")%>
         
     | 
| 
      
 60 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              <div class="span4">
         
     | 
| 
      
 63 
     | 
    
         
            +
                <table class="table table-bordered table-striped">
         
     | 
| 
      
 64 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 65 
     | 
    
         
            +
                    <th><%= _('Repository Counters') %></th>
         
     | 
| 
      
 66 
     | 
    
         
            +
                    <th></th>
         
     | 
| 
      
 67 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 68 
     | 
    
         
            +
                  <% @details[:content_unit_counts].each do |name, value| -%>
         
     | 
| 
      
 69 
     | 
    
         
            +
                    <tr>
         
     | 
| 
      
 70 
     | 
    
         
            +
                      <td> <%= name.humanize %> </td>
         
     | 
| 
      
 71 
     | 
    
         
            +
                      <td> <%= value %> </td>
         
     | 
| 
      
 72 
     | 
    
         
            +
                    </tr>
         
     | 
| 
      
 73 
     | 
    
         
            +
                  <% end -%>
         
     | 
| 
      
 74 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 75 
     | 
    
         
            +
                    <td> <%= _("Last published") %> </td>
         
     | 
| 
      
 76 
     | 
    
         
            +
                    <td> <%= last_publish @details %> </td>
         
     | 
| 
      
 77 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 78 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 79 
     | 
    
         
            +
                    <td> <%= _("Last synchronized") %> </td>
         
     | 
| 
      
 80 
     | 
    
         
            +
                    <td> <%= last_sync @details %> </td>
         
     | 
| 
      
 81 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 82 
     | 
    
         
            +
                </table>
         
     | 
| 
      
 83 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 84 
     | 
    
         
            +
              <div class="span4">
         
     | 
| 
      
 85 
     | 
    
         
            +
                <table class="table table-bordered table-striped">
         
     | 
| 
      
 86 
     | 
    
         
            +
                  <tr>
         
     | 
| 
      
 87 
     | 
    
         
            +
                    <th><%= _('Last Sync') %></th>
         
     | 
| 
      
 88 
     | 
    
         
            +
                    <th></th>
         
     | 
| 
      
 89 
     | 
    
         
            +
                  </tr>
         
     | 
| 
      
 90 
     | 
    
         
            +
                  <% sync_history_status(@sync_history).each do |name, value| -%>
         
     | 
| 
      
 91 
     | 
    
         
            +
                    <tr>
         
     | 
| 
      
 92 
     | 
    
         
            +
                      <td> <%= name.humanize %> </td>
         
     | 
| 
      
 93 
     | 
    
         
            +
                      <td> <%= value %> </td>
         
     | 
| 
      
 94 
     | 
    
         
            +
                    </tr>
         
     | 
| 
      
 95 
     | 
    
         
            +
                  <% end -%>
         
     | 
| 
      
 96 
     | 
    
         
            +
                </table>
         
     | 
| 
      
 97 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 98 
     | 
    
         
            +
            </div>
         
     | 
    
        data/config/routes.rb
    ADDED
    
    | 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Rails.application.routes.draw do
         
     | 
| 
      
 2 
     | 
    
         
            +
              scope :module => :content do
         
     | 
| 
      
 3 
     | 
    
         
            +
                resources :gpg_keys do
         
     | 
| 
      
 4 
     | 
    
         
            +
                  collection do
         
     | 
| 
      
 5 
     | 
    
         
            +
                    get 'auto_complete_search'
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                resources :products do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  collection do
         
     | 
| 
      
 11 
     | 
    
         
            +
                    get 'auto_complete_search'
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  member do
         
     | 
| 
      
 14 
     | 
    
         
            +
                    put :sync
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                resources :repositories do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  collection do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    get 'auto_complete_search'
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                  member do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    put :sync
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                namespace :api do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  resources :repositories do
         
     | 
| 
      
 29 
     | 
    
         
            +
                    collection do
         
     | 
| 
      
 30 
     | 
    
         
            +
                      post 'events'
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentRepositories < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table    :content_repositories do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  t.string      :name, :null => false
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.string      :description
         
     | 
| 
      
 6 
     | 
    
         
            +
                  t.string      :content_type, :default => "yum", :null => false
         
     | 
| 
      
 7 
     | 
    
         
            +
                  t.boolean     :enabled, :default => true
         
     | 
| 
      
 8 
     | 
    
         
            +
                  t.string      :relative_path
         
     | 
| 
      
 9 
     | 
    
         
            +
                  t.string      :feed
         
     | 
| 
      
 10 
     | 
    
         
            +
                  t.boolean     :unprotected, :default => false
         
     | 
| 
      
 11 
     | 
    
         
            +
                  t.references  :product, :null => false
         
     | 
| 
      
 12 
     | 
    
         
            +
                  t.string      :pulp_id
         
     | 
| 
      
 13 
     | 
    
         
            +
                  t.references  :gpg_key
         
     | 
| 
      
 14 
     | 
    
         
            +
                  t.references  :architecture
         
     | 
| 
      
 15 
     | 
    
         
            +
                  t.timestamps
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
                add_index :content_repositories, :pulp_id, :unique => true
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,10 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentGpgKeys < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_gpg_keys do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  t.string :name, :null => false
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.text :content, :null => false
         
     | 
| 
      
 6 
     | 
    
         
            +
                  t.timestamps
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
                add_index(:content_gpg_keys, [:name], :unique=>true)
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentEnvironmentsProducts < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_environment_products do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                   t.references :environment, :null =>false
         
     | 
| 
      
 5 
     | 
    
         
            +
                   t.references :product, :null =>false
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
                add_index(:content_environment_products, [:environment_id, :product_id],:name=>'environment_products_index', :unique=>true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentOperatingsystemRepositories < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_operatingsystem_repositories do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  t.references :repository, :null =>false
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.references :operatingsystem, :null =>false
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
                add_index(:content_operatingsystem_repositories, [:repository_id, :operatingsystem_id],:name=>'operatingsystem_repositories_index', :unique=>true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentHostgroupProducts < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_hostgroup_products do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  t.references :hostgroup, :null =>false
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.references :product, :null =>false
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
                add_index(:content_hostgroup_products, [:product_id, :hostgroup_id],:name=>'hostgroup_products_index', :unique=>true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentHostProducts < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_host_products do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  t.references :host, :null =>false
         
     | 
| 
      
 5 
     | 
    
         
            +
                  t.references :product, :null =>false
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
                add_index(:content_host_products, [:product_id, :host_id],:name=>'host_products_index', :unique=>true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class CreateContentProductOperatingsystems < ActiveRecord::Migration
         
     | 
| 
      
 2 
     | 
    
         
            +
              def change
         
     | 
| 
      
 3 
     | 
    
         
            +
                create_table :content_product_operatingsystems do |t|
         
     | 
| 
      
 4 
     | 
    
         
            +
                   t.references :operatingsystem, :null =>false
         
     | 
| 
      
 5 
     | 
    
         
            +
                   t.references :product, :null =>false
         
     | 
| 
      
 6 
     | 
    
         
            +
                end
         
     | 
| 
      
 7 
     | 
    
         
            +
                add_index(:content_product_operatingsystems, [:operatingsystem_id, :product_id],:name=>'product_operatingsystems_index', :unique=>true)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'content_home_helper_patch'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'content_taxonomy'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'content_environment'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'content_operatingsystem'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'content_redhat'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'content_hostgroup'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'content_host'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'pulp_configuration'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            module Content
         
     | 
| 
      
 12 
     | 
    
         
            +
              ENGINE_NAME = "content"
         
     | 
| 
      
 13 
     | 
    
         
            +
              class Engine < ::Rails::Engine
         
     | 
| 
      
 14 
     | 
    
         
            +
                engine_name Content::ENGINE_NAME
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                # Load this before the Foreman config initializers, so that the Setting.descendants
         
     | 
| 
      
 17 
     | 
    
         
            +
                # list includes the plugin STI setting class
         
     | 
| 
      
 18 
     | 
    
         
            +
                initializer 'foreman_content.load_default_settings', :before => :load_config_initializers do |app|
         
     | 
| 
      
 19 
     | 
    
         
            +
                  require_dependency File.expand_path("../../../app/models/setting/content.rb", __FILE__) if (Setting.table_exists? rescue(false))
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                initializer "foreman_content.load_app_instance_data" do |app|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  app.config.paths['db/migrate'] += Content::Engine.paths['db/migrate'].existent
         
     | 
| 
      
 24 
     | 
    
         
            +
                  app.config.autoload_paths += Dir["#{config.root}/app/services)"]
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                # Include extensions to models in this config.to_prepare block
         
     | 
| 
      
 28 
     | 
    
         
            +
                config.to_prepare do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  ::PulpConfiguration.initialize_runcible
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # Patch the menu
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ::HomeHelper.send :include, ContentHomeHelperPatch
         
     | 
| 
      
 32 
     | 
    
         
            +
                  # Extend the taxonomy model
         
     | 
| 
      
 33 
     | 
    
         
            +
                  ::Taxonomy.send :include, ContentTaxonomy
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # Extend the environment model
         
     | 
| 
      
 35 
     | 
    
         
            +
                  ::Environment.send :include, ContentEnvironment
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # Extend OS model
         
     | 
| 
      
 37 
     | 
    
         
            +
                  ::Operatingsystem.send :include, ContentOperatingsystem
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # Extend RedHat OS family model
         
     | 
| 
      
 39 
     | 
    
         
            +
                  ::Redhat.send :include, ContentRedhat
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # Extend the hostgroup model
         
     | 
| 
      
 41 
     | 
    
         
            +
                  ::Hostgroup.send :include, ContentHostgroup
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # Extend the host model
         
     | 
| 
      
 43 
     | 
    
         
            +
                  ::Host::Managed.send :include, ContentHost
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              def table_name_prefix
         
     | 
| 
      
 48 
     | 
    
         
            +
                Content::ENGINE_NAME + '_'
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              def self.table_name_prefix
         
     | 
| 
      
 52 
     | 
    
         
            +
                Content::ENGINE_NAME + '_'
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              def use_relative_model_naming
         
     | 
| 
      
 56 
     | 
    
         
            +
                true
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ContentEnvironment
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 3 
     | 
    
         
            +
                base.send(:include, InstanceMethods)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                base.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  has_many :environment_products, :dependent => :destroy, :uniq=>true, :class_name => 'Content::EnvironmentProduct'
         
     | 
| 
      
 7 
     | 
    
         
            +
                  has_many :products, :through => :environment_products, :class_name => 'Content::Product'
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ContentHomeHelperPatch
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 3 
     | 
    
         
            +
                base.send(:include, InstanceMethods)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                base.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  alias_method_chain :setting_options, :content_link
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 11 
     | 
    
         
            +
                # Adds a content link to the More menu
         
     | 
| 
      
 12 
     | 
    
         
            +
                def setting_options_with_content_link
         
     | 
| 
      
 13 
     | 
    
         
            +
                  choices       = setting_options_without_content_link
         
     | 
| 
      
 14 
     | 
    
         
            +
                  content_group =
         
     | 
| 
      
 15 
     | 
    
         
            +
                    [
         
     | 
| 
      
 16 
     | 
    
         
            +
                      [_('Products'),     :"content/products"],
         
     | 
| 
      
 17 
     | 
    
         
            +
                      [_('Repositories'), :"content/repositories"],
         
     | 
| 
      
 18 
     | 
    
         
            +
                      [_('Gpg keys'),     :"content/gpg_keys"]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 20 
     | 
    
         
            +
                  choices.insert(3, [:divider], [:group, _("Content"), content_group])
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/content_host.rb
    ADDED
    
    | 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ContentHost
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 3 
     | 
    
         
            +
                base.send(:include, InstanceMethods)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                base.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  has_many :host_products, :dependent => :destroy, :uniq=>true,:foreign_key => :host_id, :class_name => 'Content::HostProduct'
         
     | 
| 
      
 7 
     | 
    
         
            +
                  has_many :products, :through => :host_products, :class_name => 'Content::Product'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  scoped_search :in=>:products, :on=>:name, :complete_value => true, :rename => :product
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  alias_method_chain :params, :repositories
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                # adds repository hash to ENC global parameters
         
     | 
| 
      
 18 
     | 
    
         
            +
                def params_with_repositories
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # convert all repos to a format that puppet create_resource with yumrepo can consume
         
     | 
| 
      
 20 
     | 
    
         
            +
                  repos = Hash[attached_repositories.map{ |repo| [repo.to_label, format_repo(repo)] }]
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # adds a global parameter called repositories contain all repos
         
     | 
| 
      
 22 
     | 
    
         
            +
                  params_without_repositories.merge('repositories' => repos)
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                # product_ids from the os default and hostgroup.
         
     | 
| 
      
 26 
     | 
    
         
            +
                def inherited_product_ids
         
     | 
| 
      
 27 
     | 
    
         
            +
                  products = []
         
     | 
| 
      
 28 
     | 
    
         
            +
                  products += operatingsystem.product_ids if operatingsystem
         
     | 
| 
      
 29 
     | 
    
         
            +
                  products += Content::HostgroupProduct.where(:hostgroup_id => hostgroup.path_ids).pluck(:product_id) if hostgroup_id
         
     | 
| 
      
 30 
     | 
    
         
            +
                  products.uniq
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def all_product_ids
         
     | 
| 
      
 34 
     | 
    
         
            +
                  (inherited_product_ids + product_ids).uniq
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def attached_repositories
         
     | 
| 
      
 38 
     | 
    
         
            +
                  Content::Repository.attached_to_host(self)
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                private
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                # convert a repository to a format that puppet create_resource with yumrepo can consume
         
     | 
| 
      
 44 
     | 
    
         
            +
                def format_repo repo
         
     | 
| 
      
 45 
     | 
    
         
            +
                   {
         
     | 
| 
      
 46 
     | 
    
         
            +
                     'baseurl' => repo.full_path,
         
     | 
| 
      
 47 
     | 
    
         
            +
                     # yum repos have descr field but no name, if descr is empty use the repo name
         
     | 
| 
      
 48 
     | 
    
         
            +
                     'descr' => repo.description.blank? ? repo.name : repo.description,
         
     | 
| 
      
 49 
     | 
    
         
            +
                     'enabled' => repo.enabled ? '1': '0',
         
     | 
| 
      
 50 
     | 
    
         
            +
                     'gpgcheck' => !!repo.gpg_key ? '1': '0'
         
     | 
| 
      
 51 
     | 
    
         
            +
                   }
         
     | 
| 
      
 52 
     | 
    
         
            +
                 end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ContentHostgroup
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 3 
     | 
    
         
            +
                base.send(:include, InstanceMethods)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                base.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  has_many :hostgroup_products, :dependent => :destroy, :uniq=>true, :class_name => 'Content::HostgroupProduct'
         
     | 
| 
      
 7 
     | 
    
         
            +
                  has_many :products, :through => :hostgroup_products, :class_name => 'Content::Product'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  scoped_search :in=>:products, :on=>:name, :complete_value => true, :rename => :product
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 14 
     | 
    
         
            +
                def inherited_product_ids
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Content::HostgroupProduct.where(:hostgroup_id => hostgroup.ancestor_ids).pluck(:product_id)
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def all_product_ids
         
     | 
| 
      
 19 
     | 
    
         
            +
                  (inherited_product_ids + product_ids).uniq
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ContentOperatingsystem
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 3 
     | 
    
         
            +
                base.send(:include, InstanceMethods)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                base.class_eval do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  has_many :operatingsystem_repositories, :dependent => :destroy, :uniq => true, :class_name => 'Content::OperatingsystemRepository'
         
     | 
| 
      
 7 
     | 
    
         
            +
                  has_many :repositories, :through => :operatingsystem_repositories, :class_name => 'Content::Repository'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  has_many :product_operatingsystems, :dependent => :destroy, :uniq => true, :class_name => 'Content::ProductOperatingsystem'
         
     | 
| 
      
 10 
     | 
    
         
            +
                  has_many :products, :through => :product_operatingsystems, :class_name => 'Content::Product'
         
     | 
| 
      
 11 
     | 
    
         
            +
                  has_many :default_repositories, :through => :products, :source => :repositories, :class_name => 'Content::Repository'
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              module InstanceMethods
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     |