Project

General

Profile

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

foreman_docker / lib / foreman_docker / engine.rb @ e6b93aec

1
require 'fast_gettext'
2
require 'gettext_i18n_rails'
3
require 'fog/fogdocker'
4
require 'wicked'
5
require 'docker'
6

    
7
module ForemanDocker
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
10
  class Engine < ::Rails::Engine
11
    engine_name 'foreman_docker'
12

    
13
    config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
14
    config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
15

    
16
    initializer 'foreman_docker.load_app_instance_data' do |app|
17
      app.config.paths['db/migrate'] += ForemanDocker::Engine.paths['db/migrate'].existent
18
    end
19

    
20
    initializer "foreman_docker.assets.precompile" do |app|
21
      app.config.assets.precompile += %w(foreman_docker/autocomplete.css
22
                                         foreman_docker/terminal.css
23
                                         foreman_docker/image_step.js)
24
    end
25

    
26
    initializer 'foreman_docker.configure_assets', :group => :assets do
27
      SETTINGS[:foreman_docker] =
28
        { :assets => { :precompile => ['foreman_docker/autocomplete.css',
29
                                       'foreman_docker/terminal.css',
30
                                       'foreman_docker/image_step.js'] } }
31
    end
32

    
33
    initializer 'foreman_docker.register_gettext', :after => :load_config_initializers do
34
      locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
35
      locale_domain = 'foreman_docker'
36

    
37
      Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
38
    end
39

    
40
    initializer 'foreman_docker.register_plugin', :after => :finisher_hook do
41
      Foreman::Plugin.register :foreman_docker do
42
        requires_foreman '> 1.4'
43
        compute_resource ForemanDocker::Docker
44

    
45
        sub_menu :top_menu, :containers_menu, :caption => N_('Containers'),
46
                                              :after => :monitor_menu do
47
          menu :top_menu, :containers,    :caption => N_('All containers'),
48
                                          :url_hash => { :controller => :containers,
49
                                                         :action => :index }
50
          menu :top_menu, :new_container, :caption => N_('New container'),
51
                                          :url_hash => { :controller => :containers,
52
                                                         :action => :new }
53
          menu :top_menu, :registries, :caption => N_('Registries'),
54
                                       :url_hash => { :controller => :registries,
55
                                                      :action => :index }
56
        end
57

    
58
        security_block :containers do
59
          permission :view_containers,
60
                     { :containers          => [:index, :show],
61
                       :'api/v2/containers' => [:index, :show, :logs] },
62
                     :resource_type => 'Container'
63
          permission :commit_containers, { :containers => [:commit] },
64
                     :resource_type => 'Container'
65
          permission :create_containers,
66
                     { :'containers/steps'  => [:show, :update],
67
                       :containers          => [:new],
68
                       :'api/v2/containers' => [:create, :power] },
69
                     :resource_type => 'Container'
70
          permission :destroy_containers,
71
                     { :containers          => [:destroy],
72
                       :'api/v2/containers' => [:destroy] },
73
                     :resource_type => 'Container'
74
          permission :power_compute_resources_vms,
75
                     { :containers          => [:power],
76
                       :'api/v2/containers' => [:create, :power] },
77
                     :resource_type => 'ComputeResource'
78
        end
79

    
80
        security_block :registries do
81
          permission :view_registries,
82
                     { :registries => [:index, :show],
83
                       :'api/v2/registries' => [:index, :show] },
84
                     :resource_type => 'DockerRegistry'
85
          permission :create_registries,
86
                     { :registries  => [:new, :create, :update, :edit],
87
                       :'api/v2/registries' => [:create, :update] },
88
                     :resource_type => 'DockerRegistry'
89
          permission :destroy_registries,
90
                     { :registries => [:destroy],
91
                       :'api/v2/registries' => [:destroy] },
92
                     :resource_type => 'DockerRegistry'
93
        end
94

    
95
        security_block :image_search do
96
          permission :search_repository_image_search,
97
                     { :image_search => [:auto_complete_repository_name,
98
                                         :auto_complete_image_tag,
99
                                         :search_repository] },
100
                     :resource_type => 'Docker/ImageSearch'
101
        end
102

    
103
        # apipie API documentation
104
        # Only available in 1.8, otherwise it has to be in the initializer below
105
        if SETTINGS[:version].to_s.include?('develop') ||
106
           Gem::Version.new(SETTINGS[:version].notag) >= Gem::Version.new('1.8')
107
          apipie_documented_controllers [
108
            "#{ForemanDocker::Engine.root}/app/controllers/api/v2/*.rb"]
109
        end
110
      end
111
    end
112

    
113
    initializer "foreman_docker.apipie" do
114
      # this condition is here for compatibility reason to work with Foreman 1.4.x
115
      # Also need to handle the reverse of the 1.8 method above
116
      unless SETTINGS[:version].to_s.include?('develop') ||
117
             Gem::Version.new(SETTINGS[:version].notag) >= Gem::Version.new('1.8')
118
        if Apipie.configuration.api_controllers_matcher.is_a?(Array)
119
          Apipie.configuration.api_controllers_matcher <<
120
            "#{ForemanDocker::Engine.root}/app/controllers/api/v2/*.rb"
121
        end
122
      end
123
    end
124

    
125
    rake_tasks do
126
      load "#{ForemanDocker::Engine.root}/lib/foreman_docker/tasks/test.rake"
127
    end
128

    
129
    require 'fog/fogdocker/models/compute/server'
130
    require 'fog/fogdocker/models/compute/image'
131
    require 'fog/fogdocker/models/compute/images'
132
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/server',
133
                             __FILE__)
134
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/image',
135
                             __FILE__)
136
    require File.expand_path('../../../app/models/concerns/fog_extensions/fogdocker/images',
137
                             __FILE__)
138
    config.to_prepare do
139
      Fog::Compute::Fogdocker::Server.send(:include, ::FogExtensions::Fogdocker::Server)
140
      Fog::Compute::Fogdocker::Image.send(:include, ::FogExtensions::Fogdocker::Image)
141
      # Compatibility fixes - to be removed once 1.7 compatibility is no longer required
142
      Fog::Compute::Fogdocker::Images.send(:include, ::FogExtensions::Fogdocker::Images)
143
      ::Taxonomy.send(:include, ForemanDocker::TaxonomyExtensions)
144
    end
145
  end
146
end