Project

General

Profile

Download (6.77 KB) Statistics
| Branch: | Tag: | Revision:

foreman-docker / lib / foreman_docker / engine.rb @ d2e54db4

1 9c1fa5fb Daniel Lobato
require 'fast_gettext'
2
require 'gettext_i18n_rails'
3
require 'fog'
4
require 'fog/fogdocker'
5
require 'wicked'
6 387babdd Daniel Lobato
require 'docker'
7 d4e021f3 Amos Benari
8
module ForemanDocker
9 9c1fa5fb Daniel Lobato
  # Inherit from the Rails module of the parent app (Foreman), not the plugin.
10
  # Thus, inherits from ::Rails::Engine and not from Rails::Engine
11 d4e021f3 Amos Benari
  class Engine < ::Rails::Engine
12 916c5290 Dominic Cleal
    engine_name 'foreman_docker'
13
14 e4e8739b Daniel Lobato
    config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
15 5dc4f6d6 Daniel Lobato
    config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
16
17 9c1fa5fb Daniel Lobato
    initializer 'foreman_docker.load_app_instance_data' do |app|
18 fa9ff801 Daniel Lobato
      app.config.paths['db/migrate'] += ForemanDocker::Engine.paths['db/migrate'].existent
19
    end
20 d4e021f3 Amos Benari
21 751c6470 Daniel Lobato
    initializer "foreman_docker.assets.precompile" do |app|
22 eb0c6d28 Daniel Lobato
      app.config.assets.precompile += %w(foreman_docker/autocomplete.css
23
                                         foreman_docker/terminal.css
24
                                         foreman_docker/image_step.js)
25 751c6470 Daniel Lobato
    end
26
27
    initializer 'foreman_docker.configure_assets', :group => :assets do
28 916c5290 Dominic Cleal
      SETTINGS[:foreman_docker] =
29 eb0c6d28 Daniel Lobato
        { :assets => { :precompile => ['foreman_docker/autocomplete.css',
30
                                       'foreman_docker/terminal.css',
31 fe8bb25c Dmitri Dolguikh
                                       'foreman_docker/image_step.js'] } }
32 751c6470 Daniel Lobato
    end
33
34 9c1fa5fb Daniel Lobato
    initializer 'foreman_docker.register_gettext', :after => :load_config_initializers do
35
      locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
36
      locale_domain = 'foreman_docker'
37 d4e021f3 Amos Benari
38
      Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
39
    end
40
41 9c1fa5fb Daniel Lobato
    initializer 'foreman_docker.register_plugin', :after => :finisher_hook do
42 d4e021f3 Amos Benari
      Foreman::Plugin.register :foreman_docker do
43 9c1fa5fb Daniel Lobato
        requires_foreman '> 1.4'
44 29812b3a Dominic Cleal
        compute_resource ForemanDocker::Docker
45 fa9ff801 Daniel Lobato
46 dc3be9a0 David Davis
        sub_menu :top_menu, :containers_menu, :caption => N_('Containers'),
47
                                              :after => :monitor_menu do
48 9c1fa5fb Daniel Lobato
          menu :top_menu, :containers,    :caption => N_('All containers'),
49 dc3be9a0 David Davis
                                          :url_hash => { :controller => :containers,
50
                                                         :action => :index }
51 9c1fa5fb Daniel Lobato
          menu :top_menu, :new_container, :caption => N_('New container'),
52 dc3be9a0 David Davis
                                          :url_hash => { :controller => :containers,
53
                                                         :action => :new }
54 ada932ab Dmitri Dolguikh
          menu :top_menu, :registries, :caption => N_('Registries'),
55
                                       :url_hash => { :controller => :registries,
56
                                                      :action => :index }
57 fa9ff801 Daniel Lobato
        end
58 221cfd7c Daniel Lobato
59
        security_block :containers do
60 5274f6bc Daniel Lobato
          permission :view_containers,
61 d0846a1a Dmitri Dolguikh
                     { :containers          => [:index, :show],
62
                       :'api/v2/containers' => [:index, :show, :logs] },
63
                     :resource_type => 'Container'
64
          permission :commit_containers, { :containers => [:commit] },
65
                     :resource_type => 'Container'
66 5274f6bc Daniel Lobato
          permission :create_containers,
67 d0846a1a Dmitri Dolguikh
                     { :'containers/steps'  => [:show, :update],
68
                       :containers          => [:new],
69
                       :'api/v2/containers' => [:create, :power] },
70
                     :resource_type => 'Container'
71 5274f6bc Daniel Lobato
          permission :destroy_containers,
72 d0846a1a Dmitri Dolguikh
                     { :containers          => [:destroy],
73
                       :'api/v2/containers' => [:destroy] },
74
                     :resource_type => 'Container'
75 5274f6bc Daniel Lobato
          permission :power_compute_resources_vms,
76 d0846a1a Dmitri Dolguikh
                     { :containers          => [:power],
77
                       :'api/v2/containers' => [:create, :power] },
78
                     :resource_type => 'ComputeResource'
79 221cfd7c Daniel Lobato
        end
80 ada932ab Dmitri Dolguikh
81
        security_block :registries do
82 d2e54db4 David Davis
          permission :view_registries,
83
                     { :registries => [:index, :show],
84
                       :'api/v2/registries' => [:index, :show] },
85 d0846a1a Dmitri Dolguikh
                     :resource_type => 'DockerRegistry'
86 d2e54db4 David Davis
          permission :create_registries,
87
                     { :registries  => [:new, :create, :update, :edit],
88
                       :'api/v2/registries' => [:create, :update] },
89 d0846a1a Dmitri Dolguikh
                     :resource_type => 'DockerRegistry'
90 d2e54db4 David Davis
          permission :destroy_registries,
91
                     { :registries => [:destroy],
92
                       :'api/v2/registries' => [:destroy] },
93 d0846a1a Dmitri Dolguikh
                     :resource_type => 'DockerRegistry'
94 ada932ab Dmitri Dolguikh
        end
95 6d101d7a Dmitri Dolguikh
96
        security_block :image_search do
97
          permission :search_repository_image_search,
98 d0846a1a Dmitri Dolguikh
                     { :image_search => [:auto_complete_repository_name,
99
                                         :auto_complete_image_tag,
100
                                         :search_repository] },
101
                     :resource_type => 'Docker/ImageSearch'
102 6d101d7a Dmitri Dolguikh
        end
103 5274f6bc Daniel Lobato
104
        # apipie API documentation
105
        # Only available in 1.8, otherwise it has to be in the initializer below
106
        if SETTINGS[:version].to_s.include?('develop') ||
107 8a1d63a3 David Davis
           Gem::Version.new(SETTINGS[:version].notag) >= Gem::Version.new('1.8')
108 5274f6bc Daniel Lobato
          apipie_documented_controllers [
109
            "#{ForemanDocker::Engine.root}/app/controllers/api/v2/*.rb"]
110
        end
111
      end
112
    end
113
114
    initializer "foreman_docker.apipie" do
115
      # this condition is here for compatibility reason to work with Foreman 1.4.x
116
      # Also need to handle the reverse of the 1.8 method above
117
      unless SETTINGS[:version].to_s.include?('develop') ||
118 8a1d63a3 David Davis
             Gem::Version.new(SETTINGS[:version].notag) >= Gem::Version.new('1.8')
119 5274f6bc Daniel Lobato
        if Apipie.configuration.api_controllers_matcher.is_a?(Array)
120
          Apipie.configuration.api_controllers_matcher <<
121
            "#{ForemanDocker::Engine.root}/app/controllers/api/v2/*.rb"
122
        end
123 d4e021f3 Amos Benari
      end
124
    end
125 466cd5ba Daniel Lobato
126
    rake_tasks do
127
      load "#{ForemanDocker::Engine.root}/lib/foreman_docker/tasks/test.rake"
128
    end
129 d4e021f3 Amos Benari
130 5d7016fd Daniel Lobato
    require 'fog/fogdocker/models/compute/server'
131
    require 'fog/fogdocker/models/compute/image'
132 9f0918fc Daniel Lobato
    require 'fog/fogdocker/models/compute/images'
133 5d7016fd Daniel Lobato
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/server',
134
                             __FILE__)
135
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/image',
136
                             __FILE__)
137 9f0918fc Daniel Lobato
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/images',
138
                             __FILE__)
139 5d7016fd Daniel Lobato
    config.to_prepare do
140
      Fog::Compute::Fogdocker::Server.send(:include, ::FogExtensions::Fogdocker::Server)
141
      Fog::Compute::Fogdocker::Image.send(:include, ::FogExtensions::Fogdocker::Image)
142 9f0918fc Daniel Lobato
      # Compatibility fixes - to be removed once 1.7 compatibility is no longer required
143
      Fog::Compute::Fogdocker::Images.send(:include, ::FogExtensions::Fogdocker::Images)
144 5d7016fd Daniel Lobato
      ::Taxonomy.send(:include, ForemanDocker::TaxonomyExtensions)
145
    end
146
  end
147 29812b3a Dominic Cleal
end