foreman_reserve 0.1.8.2 → 0.1.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76737d364a3fa9631d477672be79683f16103685
4
- data.tar.gz: f3d9999a2f153c06cca10e1c26062a773f1830f2
3
+ metadata.gz: 9950443650dc6c90eb1f50231b1682743479c137
4
+ data.tar.gz: 2c86d8839a22a4b3f7044472ad145af0f4f922b1
5
5
  SHA512:
6
- metadata.gz: bca9b3eae19e1f978806c2319caf8cb2e39bdd75d45fb9e5c185fbe43dea64c46eb487810fb83f1197bc4f294dd44a9696cb57f7c86fd2b75dbfad1ae4996007
7
- data.tar.gz: 28793a8f0bb363813e53062c2d2a1d8622fb677844aa1fe2cc61406bb576332020d529101b07d9443bb858c752c897ccc1bcc81314e5710c11817c51ffaf9f37
6
+ metadata.gz: 36e1b1b07b6849e5dc4f6c60dcff26640c8e2c3ebe9b4c38b05902c56df47c76a97269d23db5cb4ec47a7fad5b01391e402bc76a5c7152c3cd71bdd2d87005d7
7
+ data.tar.gz: d567d2c8df0418bec61a318bda98c7d79d353a01eda0b9c20d91285d2792b33b300b7193da8173aba78135e836d5b559800150f654bfe9162385bf2130ad9f22
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ Jeweler::Tasks.new do |gem|
21
21
  gem.description = %Q{Plugin engine for Foreman to reserve a host}
22
22
  gem.email = "dcaroest@redhat.com"
23
23
  gem.authors = ["David Caro", "Joseph Mitchell Magen"]
24
- gem.version = '0.1.8.2'
24
+ gem.version = '0.1.8.3'
25
25
  end
26
26
  #Jeweler::RubygemsDotOrgTasks.new
27
27
 
@@ -1,45 +1,8 @@
1
1
  module Api
2
- module V1
3
- class ForemanReserveController < Api::V1::BaseController
2
+ module V2
3
+ class ReservesController < V2::BaseController
4
4
  unloadable
5
5
 
6
- # Get the list of reserved hosts
7
- # @param query [String] Query to filter the hosts with
8
- def get_reserved(query='')
9
- hosts = User.current.admin? ? Host::Managed : Host::Managed.my_hosts
10
- hosts = hosts.search_for(query)
11
- hosts.find_all do |host|
12
- params = host.info()['parameters']
13
- params and
14
- params.key?('RESERVED') and
15
- params['RESERVED'] != 'false'
16
- end
17
- end
18
-
19
- # Get the list of available hosts
20
- # @param query [String] Query to filter the hosts with
21
- def get_free(query='')
22
- hosts = User.current.admin? ? Host::Managed : Host::Managed.my_hosts
23
- hosts = hosts.search_for(query)
24
- hosts.find_all do |host|
25
- params = host.info()['parameters']
26
- params and
27
- params.key?('RESERVED') and
28
- params['RESERVED'] == 'false'
29
- end
30
- end
31
-
32
- # Return not found
33
- # @param exception [String] Message to show
34
- def not_found(exception = nil)
35
- logger.debug "not found: #{exception}" if exception
36
- respond_to do |format|
37
- format.html { render "common/404", :status => 404 }
38
- format.json { head :status => 404}
39
- format.yaml { head :status => 404}
40
- end
41
- true
42
- end
43
6
 
44
7
  # <b>API METHOD</b>: Reserve one or more hosts, will return 404 if the
45
8
  # given query gives no results and 406 (Not acceptable) if not enough free
@@ -74,9 +37,9 @@ module Api
74
37
  lock.flock(File::LOCK_UN)
75
38
  end
76
39
  respond_to do |format|
77
- format.json {render :json => @hosts }
78
- format.yaml {render :text => @hosts.to_yaml}
79
- format.html {not_found }
40
+ format.json { render :json => @hosts }
41
+ format.yaml { render :text => @hosts.to_yaml }
42
+ format.html { not_found }
80
43
  end
81
44
  end
82
45
 
@@ -87,7 +50,7 @@ module Api
87
50
  #
88
51
  # * <tt><b>amount</b> (Int)</tt> <i>(defaults to: <tt>1</tt>)</i> ---
89
52
  # Amount of hosts to release
90
- # * <tt><b>host_name</b> (String)</tt>
53
+ # * <tt><b>host_name</b> (String)</tt>
91
54
  # <i>(defaults to: <tt>''</tt>)</i> ---
92
55
  # If given, will also filter by that host name
93
56
  # * <tt><b>query</b> (String)</tt> <i>(defaults to: <tt>''</tt>)</i> ---
@@ -108,9 +71,9 @@ module Api
108
71
  @hosts = reserved_hosts.each { |host| host.release! }
109
72
  end
110
73
  respond_to do |format|
111
- format.json {render :json => @hosts.map(&:name) }
112
- format.yaml {render :text => @hosts.to_yaml}
113
- format.html {not_found }
74
+ format.json { render :json => @hosts.map(&:name) }
75
+ format.yaml { render :text => @hosts.to_yaml }
76
+ format.html { render :json => hosts }
114
77
  end
115
78
  end
116
79
 
@@ -124,9 +87,9 @@ module Api
124
87
  hosts = get_reserved(params[:query])
125
88
  return not_found if hosts.empty?
126
89
  respond_to do |format|
127
- format.json {render :json => hosts }
128
- format.yaml {render :text => hosts.to_yaml}
129
- format.html {not_found }
90
+ format.json { render :json => hosts }
91
+ format.yaml { render :text => hosts.to_yaml }
92
+ format.html { render :json => hosts }
130
93
  end
131
94
  end
132
95
 
@@ -148,9 +111,9 @@ module Api
148
111
  hosts = hosts[0..(amount-1)]
149
112
  end
150
113
  respond_to do |format|
151
- format.json {render :json => hosts }
152
- format.yaml {render :text => hosts.to_yaml}
153
- format.html {not_found }
114
+ format.json { render :json => hosts }
115
+ format.yaml { render :text => hosts.to_yaml }
116
+ format.html { render :json => hosts }
154
117
  end
155
118
  end
156
119
 
@@ -179,10 +142,60 @@ module Api
179
142
  end
180
143
  @hosts = get_reserved(params[:query])
181
144
  respond_to do |format|
182
- format.json {render :json => @hosts }
183
- format.yaml {render :text => @hosts.to_yaml}
184
- format.html {not_found }
145
+ format.json { render :json => @hosts }
146
+ format.yaml { render :text => @hosts.to_yaml }
147
+ format.html { render :json => hosts }
148
+ end
149
+ end
150
+
151
+ private
152
+
153
+ # Get the list of reserved hosts
154
+ # @param query [String] Query to filter the hosts with
155
+ def get_reserved(query='')
156
+ hosts = User.current.admin? ? Host : my_hosts
157
+ hosts = hosts.search_for(query)
158
+ hosts.find_all do |host|
159
+ params = host.info()['parameters']
160
+ params and
161
+ params.key?('RESERVED') and
162
+ params['RESERVED'] != 'false'
163
+ end
164
+ end
165
+
166
+ # Get the list of available hosts
167
+ # @param query [String] Query to filter the hosts with
168
+ def get_free(query='')
169
+ hosts = User.current.admin? ? Host : my_hosts
170
+ hosts = hosts.search_for(query)
171
+ hosts.find_all do |host|
172
+ params = host.info()['parameters']
173
+ params and
174
+ params.key?('RESERVED') and
175
+ params['RESERVED'] == 'false'
176
+ end
177
+ end
178
+
179
+ def my_hosts
180
+ if SETTINGS[:version].to_s.to_f >= 1.5
181
+ # Foreman 1.5+
182
+ Host.authorized(:view_hosts, Host)
183
+ else
184
+ # Foreman < 1.5
185
+ Host.my_hosts
186
+ end
187
+ end
188
+
189
+ # Return not found
190
+ # @param exception [String] Message to show
191
+ def not_found(exception = nil)
192
+ logger.debug "not found: #{exception}" if exception
193
+ respond_to do |format|
194
+ format.html { render "common/404", :status => 404 }
195
+ format.json { head :status => 404}
196
+ format.yaml { head :status => 404}
185
197
  end
198
+ true
186
199
  end
187
200
 
188
201
  # Return HTTP 406 (Not acceptable)
@@ -0,0 +1,31 @@
1
+ module Host::HostExtensions
2
+ extend ActiveSupport::Concern
3
+ module InstanceMethods
4
+
5
+ # Reserve the host
6
+ #
7
+ # @param reason [String] Reason to reserve the host under
8
+ def reserve!(reason = 'true')
9
+ param = "RESERVED"
10
+ if p=host_parameters.find_by_name(param)
11
+ p.update_attribute(:value, reason)
12
+ else
13
+ host_parameters.create!(:name => param, :value => reason)
14
+ end
15
+ end
16
+
17
+ # Release the host
18
+ def release!
19
+ param = "RESERVED"
20
+ if p=host_parameters.find_by_name(param)
21
+ p.update_attribute(:value, "false")
22
+ end
23
+ end
24
+
25
+ # Return a json represenatation of the host
26
+ def as_json(options={})
27
+ super(:methods => [:host_parameters])
28
+ end
29
+
30
+ end
31
+ end
@@ -1,9 +1,27 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
- get "api/hosts_reserve" => "api/v1/foreman_reserve#reserve"
4
- get "api/hosts_release" => "api/v1/foreman_reserve#release"
5
- get "api/show_available" => "api/v1/foreman_reserve#show_available"
6
- get "api/show_reserved" => "api/v1/foreman_reserve#show_reserved"
7
- get "api/update_reserved_reason" => "api/v1/foreman_reserve#update_reason"
3
+ namespace :api, :defaults => {:format => 'json'} do
4
+ get 'hosts_reserve' => 'v2/reserves#reserve'
5
+ get 'hosts_release' => 'v2/reserves#release'
6
+ get 'show_available' => 'v2/reserves#show_available'
7
+ get 'show_reserved' => 'v2/reserves#show_reserved'
8
+ get 'update_reserved_reason' => 'v2/reserves#update_reason'
9
+
10
+ scope "(:apiv)", :module => :v2,
11
+ :defaults => {:apiv => 'v2'},
12
+ :apiv => /v1|v2/,
13
+ :constraints => ApiConstraints.new(:version => 2) do
14
+
15
+ resources :reserves, :only => [] do
16
+ collection do
17
+ get 'reserve'
18
+ get 'release'
19
+ get 'show_available'
20
+ get 'show_reserved'
21
+ get 'update_reserved_reason' => 'reserves#update_reason'
22
+ end
23
+ end
24
+ end
25
+ end
8
26
 
9
27
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "foreman_reserve"
8
- s.version = "0.1.8.2"
8
+ s.version = "0.1.8.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Caro", "Joseph Mitchell Magen"]
12
- s.date = "2014-01-30"
12
+ s.date = "2014-03-07"
13
13
  s.description = "Plugin engine for Foreman to reserve a host"
14
14
  s.email = "dcaroest@redhat.com"
15
15
  s.extra_rdoc_files = [
@@ -18,14 +18,12 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- "Gemfile",
22
- "Gemfile.lock",
23
21
  "LICENSE.txt",
24
22
  "README.rdoc",
25
23
  "Rakefile",
26
24
  "VERSION",
27
- "app/controllers/foreman_reserve/api/hosts_controller.rb",
28
- "app/models/foreman_reserve/host_extensions.rb",
25
+ "app/controllers/api/v2/reserves_controller.rb",
26
+ "app/models/host/host_extensions.rb",
29
27
  "config/routes.rb",
30
28
  "foreman_reserve.gemspec",
31
29
  "lib/foreman_reserve.rb",
@@ -37,26 +35,5 @@ Gem::Specification.new do |s|
37
35
  s.require_paths = ["lib"]
38
36
  s.rubygems_version = "2.0.14"
39
37
  s.summary = "Plugin engine for Foreman to reserve a host"
40
-
41
- if s.respond_to? :specification_version then
42
- s.specification_version = 4
43
-
44
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_development_dependency(%q<shoulda>, [">= 0"])
46
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
47
- s.add_development_dependency(%q<bundler>, ["~> 1.2.2"])
48
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
49
- else
50
- s.add_dependency(%q<shoulda>, [">= 0"])
51
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
52
- s.add_dependency(%q<bundler>, ["~> 1.2.2"])
53
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
54
- end
55
- else
56
- s.add_dependency(%q<shoulda>, [">= 0"])
57
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
- s.add_dependency(%q<bundler>, ["~> 1.2.2"])
59
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
60
- end
61
38
  end
62
39
 
@@ -1,3 +1,4 @@
1
+ require "foreman_reserve/engine"
2
+
1
3
  module ForemanReserve
2
- require "foreman_reserve/engine"
3
4
  end
@@ -1,13 +1,27 @@
1
- require 'foreman_reserve'
2
- require 'rails'
3
- require 'action_controller'
4
-
5
1
  module ForemanReserve
6
2
  class Engine < ::Rails::Engine
7
3
 
8
4
  config.to_prepare do
9
- Host::Managed.send :include, ForemanReserve::HostExtensions
10
- Host.send :include, ForemanReserve::HostExtensions
5
+ if SETTINGS[:version].to_s.to_f >= 1.2
6
+ # Foreman 1.2
7
+ Host::Managed.send :include, Host::HostExtensions
8
+ else
9
+ # Foreman < 1.2
10
+ Host.send :include, Host::HostExtensions
11
+ end
12
+ end
13
+
14
+ initializer 'foreman_reserve.register_plugin', :after=> :finisher_hook do |app|
15
+ Foreman::Plugin.register :foreman_reserve do
16
+ requires_foreman '>= 1.4'
17
+
18
+ security_block :foreman_reserve do
19
+ permission :view_reserved_hosts, { 'api/v2/reserves' => [:show_available, :show_reserved] }
20
+ permission :reserve_and_free_hosts, { 'api/v2/reserves' => [:reserve, :release, :update_reason] }
21
+ end
22
+
23
+ role "Reserve Hosts", [:view_reserved_hosts, :reserve_and_free_hosts]
24
+ end
11
25
  end
12
26
 
13
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_reserve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8.2
4
+ version: 0.1.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Caro
@@ -9,64 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-30 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: shoulda
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - '>='
19
- - !ruby/object:Gem::Version
20
- version: '0'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - '>='
26
- - !ruby/object:Gem::Version
27
- version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: rdoc
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ~>
33
- - !ruby/object:Gem::Version
34
- version: '3.12'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- version: '3.12'
42
- - !ruby/object:Gem::Dependency
43
- name: bundler
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ~>
47
- - !ruby/object:Gem::Version
48
- version: 1.2.2
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ~>
54
- - !ruby/object:Gem::Version
55
- version: 1.2.2
56
- - !ruby/object:Gem::Dependency
57
- name: jeweler
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ~>
61
- - !ruby/object:Gem::Version
62
- version: 1.8.4
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 1.8.4
12
+ date: 2014-03-07 00:00:00.000000000 Z
13
+ dependencies: []
70
14
  description: Plugin engine for Foreman to reserve a host
71
15
  email: dcaroest@redhat.com
72
16
  executables: []
@@ -76,14 +20,12 @@ extra_rdoc_files:
76
20
  - README.rdoc
77
21
  files:
78
22
  - .document
79
- - Gemfile
80
- - Gemfile.lock
81
23
  - LICENSE.txt
82
24
  - README.rdoc
83
25
  - Rakefile
84
26
  - VERSION
85
- - app/controllers/foreman_reserve/api/hosts_controller.rb
86
- - app/models/foreman_reserve/host_extensions.rb
27
+ - app/controllers/api/v2/reserves_controller.rb
28
+ - app/models/host/host_extensions.rb
87
29
  - config/routes.rb
88
30
  - foreman_reserve.gemspec
89
31
  - lib/foreman_reserve.rb
data/Gemfile DELETED
@@ -1,14 +0,0 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem "shoulda", ">= 0"
10
- gem "rdoc", "~> 3.12"
11
- gem "bundler", "~> 1.2.2"
12
- gem "jeweler", "~> 1.8.4"
13
- # gem "rcov", ">= 0"
14
- end
@@ -1,33 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activesupport (3.2.9)
5
- i18n (~> 0.6)
6
- multi_json (~> 1.0)
7
- git (1.2.5)
8
- i18n (0.6.1)
9
- jeweler (1.8.4)
10
- bundler (~> 1.0)
11
- git (>= 1.2.5)
12
- rake
13
- rdoc
14
- json (1.7.5)
15
- multi_json (1.3.7)
16
- rake (10.0.2)
17
- rdoc (3.12)
18
- json (~> 1.4)
19
- shoulda (3.3.2)
20
- shoulda-context (~> 1.0.1)
21
- shoulda-matchers (~> 1.4.1)
22
- shoulda-context (1.0.1)
23
- shoulda-matchers (1.4.1)
24
- activesupport (>= 3.0.0)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- bundler (~> 1.2.2)
31
- jeweler (~> 1.8.4)
32
- rdoc (~> 3.12)
33
- shoulda
@@ -1,33 +0,0 @@
1
- module ForemanReserve
2
- module HostExtensions
3
- extend ActiveSupport::Concern
4
- module InstanceMethods
5
-
6
- # Reserve the host
7
- #
8
- # @param reason [String] Reason to reserve the host under
9
- def reserve!(reason = 'true')
10
- param = "RESERVED"
11
- if p=host_parameters.find_by_name(param)
12
- p.update_attribute(:value, reason)
13
- else
14
- host_parameters.create!(:name => param, :value => reason)
15
- end
16
- end
17
-
18
- # Release the host
19
- def release!
20
- param = "RESERVED"
21
- if p=host_parameters.find_by_name(param)
22
- p.update_attribute(:value, "false")
23
- end
24
- end
25
-
26
- # Return a json represenatation of the host
27
- def as_json(options={})
28
- super(:methods => [:host_parameters])
29
- end
30
-
31
- end
32
- end
33
- end