foreman_discovery 1.4.1 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/README.md +52 -96
- data/app/controllers/api/v2/discovered_hosts_controller.rb +104 -3
- data/app/controllers/api/v2/discovery_rules_controller.rb +79 -0
- data/app/controllers/concerns/foreman/controller/discovered_extensions.rb +55 -0
- data/app/controllers/discovered_hosts_controller.rb +82 -19
- data/app/controllers/discovery_rules_controller.rb +73 -0
- data/app/helpers/discovered_hosts_helper.rb +18 -6
- data/app/helpers/discovery_rules_helper.rb +36 -0
- data/app/lib/puppet_fact_parser_extensions.rb +9 -3
- data/app/models/concerns/discovery_subnet.rb +7 -0
- data/app/models/discovery_attribute_set.rb +8 -0
- data/app/models/discovery_rule.rb +24 -0
- data/app/models/host/discovered.rb +64 -7
- data/app/models/host/managed_extensions.rb +3 -8
- data/app/models/hostgroup_extensions.rb +7 -0
- data/app/models/setting/discovered.rb +14 -0
- data/app/overrides/subnet_form_with_discovery_proxy.rb +9 -0
- data/app/views/api/v2/discovered_hosts/auto_provision.json.rabl +3 -0
- data/app/views/api/v2/discovered_hosts/auto_provision_all.json.rabl +3 -0
- data/app/views/api/v2/discovered_hosts/main.json.rabl +1 -1
- data/app/views/api/v2/discovery_rules/base.json.rabl +3 -0
- data/app/views/api/v2/discovery_rules/index.json.rabl +3 -0
- data/app/views/api/v2/discovery_rules/main.json.rabl +5 -0
- data/app/views/api/v2/discovery_rules/show.json.rabl +3 -0
- data/app/views/dashboard/_discovery_widget.html.erb +5 -11
- data/app/views/dashboard/_discovery_widget_host_list.html.erb +17 -0
- data/app/views/discovered_hosts/_discovered_host.html.erb +12 -0
- data/app/views/discovered_hosts/_discovered_hosts_list.html.erb +11 -2
- data/app/views/discovered_hosts/index.html.erb +1 -0
- data/app/views/discovery_rules/_form.html.erb +14 -0
- data/app/views/discovery_rules/edit.html.erb +3 -0
- data/app/views/discovery_rules/index.html.erb +26 -0
- data/app/views/discovery_rules/new.html.erb +3 -0
- data/config/routes.rb +19 -0
- data/db/migrate/20141107091416_create_discovery_rules.rb +15 -0
- data/db/migrate/20141107091417_add_discovery_rule_to_host.rb +9 -0
- data/db/migrate/20141126165451_add_discovery_id_to_subnet.rb +9 -0
- data/db/migrate/20141223101707_create_discovery_attribute_sets.rb +14 -0
- data/db/migrate/20141223142759_fill_discovery_attribute_sets_for_existing_hosts.rb +8 -0
- data/db/seeds.d/60_discovery_proxy_feature.rb +2 -0
- data/lib/discovery.rake +0 -82
- data/lib/foreman_discovery/engine.rb +81 -14
- data/lib/foreman_discovery/proxy_operations.rb +18 -0
- data/lib/foreman_discovery/version.rb +1 -1
- data/locale/de/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/de/foreman_discovery.po +1 -1
- data/locale/en_GB/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/en_GB/foreman_discovery.po +1 -1
- data/locale/es/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/es/foreman_discovery.po +3 -3
- data/locale/fr/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/fr/foreman_discovery.po +1 -1
- data/locale/gl/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/gl/foreman_discovery.po +1 -1
- data/locale/it/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/it/foreman_discovery.po +1 -1
- data/locale/ja/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ja/foreman_discovery.po +1 -1
- data/locale/ko/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ko/foreman_discovery.po +1 -1
- data/locale/pt_BR/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/pt_BR/foreman_discovery.po +1 -1
- data/locale/ru/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/ru/foreman_discovery.po +1 -1
- data/locale/sv_SE/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/sv_SE/foreman_discovery.po +1 -1
- data/locale/zh_CN/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_CN/foreman_discovery.po +1 -1
- data/locale/zh_TW/LC_MESSAGES/foreman_discovery.mo +0 -0
- data/locale/zh_TW/foreman_discovery.po +1 -1
- data/test/factories/discovery_rule_related.rb +20 -0
- data/test/functional/api/v2/discovered_hosts_controller_test.rb +81 -0
- data/test/functional/api/v2/discovery_rules_controller_test.rb +51 -0
- data/test/functional/discovered_hosts_controller_test.rb +96 -3
- data/test/functional/discovery_rules_controller_test.rb +62 -0
- data/test/test_helper.rb +0 -1
- data/test/unit/discovered_extensions_test.rb +106 -0
- data/test/unit/discovery_attribute_set_test.rb +43 -0
- data/test/unit/facts.json +4 -1
- data/test/unit/host_discovered_test.rb +44 -4
- metadata +100 -75
- data/Rakefile +0 -110
- data/lib/foreman_discovery/facts.rb +0 -12
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YzI1Yjc3N2VkMTBkODgyYWE2Nzg4ZDZkNzgzYTFmYWJkZGViZDlmOA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4b30c810a94650d5f72b8592168e2f2afd5d0854
|
4
|
+
data.tar.gz: 77645786d40659c4205c4f02ed2eb0a426f3fb62
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
OWIxYjA4OWNmYzVjZGQwN2NiOWY4ZDYwOGI2MmJmNGNlOWViNDNlODkxNTA4
|
11
|
-
ZmJjNzIwMTYxOGFmZmE0YTE4MjRjMmVkNGE4YThjZjQyMmVkNzc=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODcxNDVjZDQxYzNmM2MxZTNkMDhhNDI1ZDY2NTBkNmJlMjE1MDZmNjk2NjFi
|
14
|
-
YmY1OTk0Yzc2YzA5NmVlMWIxMzE4NzVlODY2MjNmYTdjNTczNGNhZjllNjg5
|
15
|
-
OTUyODA1MTY0ZDkzOWQ3YzBhY2E4N2Y5YTA4NjE5ZTZiM2UyOTM=
|
6
|
+
metadata.gz: fc9544ac861a5a08b494b8a9089fbc4ce25bc2641f79877f85636927cb4d702ffd9b01d6bf266b0574068ae69d66884e7c71223159984e6e61fe8d445d7b4e49
|
7
|
+
data.tar.gz: bee1405da6e16b59b45fad2d4eb88da763b3af79e12de6fd1b1e24e95931ee69054d49796d83a58dac87ed1107a0d055b2434ad78853248a4174bc60792b9f94
|
data/README.md
CHANGED
@@ -11,14 +11,9 @@ artifacts (and terms) used in this document:
|
|
11
11
|
|
12
12
|
## Minimal hardware requirements
|
13
13
|
|
14
|
-
Since the bootable image runs from memory, keep in mind the
|
15
|
-
|
16
|
-
|
17
|
-
* 700 MB RAM for the CentOS image
|
18
|
-
* 900 MB RAM for the Fedora image
|
19
|
-
|
20
|
-
When testing those images on virtual machines, make sure they have allocated
|
21
|
-
enough memory, otherwise kernel panic can be seen during boot sequence.
|
14
|
+
Since the bootable image runs from memory, keep in mind the minimum
|
15
|
+
requirement of 500 MB RAM otherwise kernel panic can be seen during boot
|
16
|
+
sequence.
|
22
17
|
|
23
18
|
# Installation (plugin)
|
24
19
|
|
@@ -33,12 +28,13 @@ RPM users can install the "ruby193-rubygem-foreman_discovery" or
|
|
33
28
|
|
34
29
|
## Compatibility
|
35
30
|
|
36
|
-
| Foreman Version | Plugin Version |
|
31
|
+
| Foreman Version | Plugin Version | Image Version |
|
37
32
|
| --------------- | --------------:| -------------------:|
|
38
33
|
| <= 1.2 | 1.0.2 | N/A |
|
39
34
|
| = 1.3 | 1.1.0 | 0.1.0 |
|
40
35
|
| = 1.4 | 1.2.0 | 0.3.0-1 |
|
41
|
-
|
|
36
|
+
| = 1.5 | 1.3.0 | 0.5.0-1 |
|
37
|
+
| >= 1.6 | 1.4.0 | 0.6 or 2.0 |
|
42
38
|
|
43
39
|
## Latest code
|
44
40
|
|
@@ -49,28 +45,20 @@ branch of the plugin can be obtained by updating the Gemfile in this way:
|
|
49
45
|
|
50
46
|
# Installation (image)
|
51
47
|
|
52
|
-
The image is based on CentOS
|
53
|
-
|
54
|
-
releases as well as nightly builds for those who want to live on the edge, or
|
55
|
-
alternatively a local image can be rebuilt by the user.
|
56
|
-
|
57
|
-
The recommended option is to download a prebuilt image from the Foreman
|
58
|
-
repositories.
|
59
|
-
|
60
|
-
Nightly builds have the ssh daemon enabled and root password set to "redhat";
|
61
|
-
logging is also increased. Conversely, releases have the root account locked
|
62
|
-
and there is no ssh access. Note that the first console (tty1) is reserved for
|
63
|
-
Discovery output. For a login prompt (nightly images only) use tty2.
|
48
|
+
The image is based on CentOS 7 and about 150 MB in size. The recommended
|
49
|
+
option is to download a prebuilt image from the Foreman repositories.
|
64
50
|
|
65
51
|
## Downloading an image
|
66
52
|
|
67
53
|
### Download via installer
|
68
54
|
|
69
55
|
As of Foreman 1.6, the foreman-installer is able to automatically download
|
70
|
-
latest stable
|
71
|
-
|
56
|
+
latest stable image. For this, re-run the installer with the following
|
57
|
+
option:
|
72
58
|
|
73
|
-
# foreman-installer
|
59
|
+
# foreman-installer \
|
60
|
+
--enable-foreman-plugin-discovery \
|
61
|
+
--foreman-plugin-discovery-install-images=true
|
74
62
|
|
75
63
|
### Manual download
|
76
64
|
|
@@ -78,39 +66,23 @@ Images are available from:
|
|
78
66
|
|
79
67
|
* http://downloads.theforeman.org/discovery/
|
80
68
|
|
81
|
-
|
82
|
-
|
83
|
-
Kernel/initrd (recommended):
|
69
|
+
To download the latest release to the expected location, do the following:
|
84
70
|
|
85
|
-
|
86
|
-
|
71
|
+
# wget http://downloads.theforeman.org/discovery/releases/latest/fdi-image-latest.tar \
|
72
|
+
-O - | tar x --overwrite -C /var/lib/tftpboot/boot
|
87
73
|
|
88
|
-
|
74
|
+
After download, verify checksums:
|
89
75
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
# yum -y install livecd-tools
|
95
|
-
# ln -sf ovirt-node-iso-3.X.0-0.999.201404170648.el6.iso foreman.iso
|
96
|
-
# sudo livecd-iso-to-pxeboot foreman.iso
|
97
|
-
# find tftpboot/
|
98
|
-
tftpboot/
|
99
|
-
tftpboot/vmlinuz0
|
100
|
-
tftpboot/pxelinux.0
|
101
|
-
tftpboot/pxelinux.cfg
|
102
|
-
tftpboot/pxelinux.cfg/default
|
103
|
-
tftpboot/initrd0.img
|
104
|
-
|
105
|
-
Once the initrd/vmlinuz pair (whether from direct download or from ISO
|
106
|
-
extraction) is available, copy them to the TFTP BOOT directory and rename them
|
107
|
-
to *vmlinuz0* and *initrd0.img*.
|
76
|
+
# cat /var/lib/tftpboot/boot/fdi-image/SHA256SUM
|
77
|
+
beb3cfba7d9fb9d71481c0c8f... initrd0.img
|
78
|
+
f03bce150d2473a28697d2988... vmlinuz0
|
79
|
+
# sha256sum /var/lib/tftpboot/boot/fdi-image/*
|
108
80
|
|
109
81
|
### Building an image
|
110
82
|
|
111
83
|
To build a discovery image, please visit the
|
112
|
-
[
|
113
|
-
|
84
|
+
[foreman-discovery-image](https://github.com/theforeman/foreman-discovery-image)
|
85
|
+
git repository and find the README for further instructions.
|
114
86
|
|
115
87
|
# Configuration (image)
|
116
88
|
|
@@ -119,19 +91,26 @@ not registered in Foreman. To achieve this, the PXE default.cfg file needs to
|
|
119
91
|
be altered to instruct new machines to boot the discovery image.
|
120
92
|
|
121
93
|
In the Foreman UI, go to Provisioning Templates, edit *PXELinux global default*
|
122
|
-
template and add:
|
94
|
+
template and add the following after the "LABEL local" block of options:
|
123
95
|
|
124
96
|
LABEL discovery
|
125
97
|
MENU LABEL Foreman Discovery
|
126
98
|
MENU DEFAULT
|
127
|
-
KERNEL boot/
|
128
|
-
APPEND
|
99
|
+
KERNEL boot/fdi-image/vmlinuz0
|
100
|
+
APPEND initrd=boot/fdi-image/initrd0.img rootflags=loop root=live:/fdi.iso rootfstype=auto ro rd.live.image acpi=force rd.luks=0 rd.md=0 rd.dm=0 rd.lvm=0 rd.bootif=0 rd.neednet=0 nomodeset proxy.url=http://xyz proxy.type=proxy
|
129
101
|
IPAPPEND 2
|
130
102
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
103
|
+
The `proxy.type` option can be either `proxy` or `foreman`. In the first case
|
104
|
+
all communication goes through Smart Proxy, in the latter case the
|
105
|
+
communication goes directly to Foreman (legacy mode). This is the default when
|
106
|
+
not specified.
|
107
|
+
|
108
|
+
The `proxy.url` specifies URL of the Smart Proxy or Foreman depending on the
|
109
|
+
previous setting. Both http and https schemes are supported. For backward
|
110
|
+
compatibility, `foreman.url` is an alias for this setting.
|
111
|
+
|
112
|
+
Once the APPEND line is modified properly, set the entry to be default via the
|
113
|
+
`ONTIMEOUT` option:
|
135
114
|
|
136
115
|
ONTIMEOUT discovery
|
137
116
|
|
@@ -155,21 +134,11 @@ booted from.
|
|
155
134
|
_Warning_: For now, the selinux=0 option *must* be provided, the image is read
|
156
135
|
only anyway but we plan to enable and test with SELinux too.
|
157
136
|
|
158
|
-
|
159
|
-
like this:
|
137
|
+
## Updating the on-disk `default` file
|
160
138
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
TIMEOUT 200
|
165
|
-
TOTALTIMEOUT 6000
|
166
|
-
ONTIMEOUT discovery
|
167
|
-
|
168
|
-
LABEL discovery
|
169
|
-
MENU LABEL Foreman Discovery
|
170
|
-
KERNEL boot/tftpboot/vmlinuz0
|
171
|
-
APPEND rootflags=loop initrd=boot/tftpboot/initrd0.img root=live:/foreman.iso rootfstype=auto ro rd.live.image rd.live.check rd.lvm=0 rootflags=ro crashkernel=128M elevator=deadline max_loop=256 rd.luks=0 rd.md=0 rd.dm=0 nomodeset selinux=0 stateless foreman.url=https://foreman.example.com
|
172
|
-
IPAPPEND 2
|
139
|
+
Once the template has been updated, click the Build PXE Default button at the top
|
140
|
+
of the Provisioning Templates page. This will instruct the TFTP proxy to rewrite
|
141
|
+
the `pxelinux.cfg/default` file.
|
173
142
|
|
174
143
|
# Configuration (plugin)
|
175
144
|
|
@@ -179,7 +148,7 @@ configuration is available.
|
|
179
148
|
If Locations and/or Organisations are enabled, Foreman will default to using
|
180
149
|
the first Location and first Organisation for Discovered hosts. If hosts should
|
181
150
|
be placed in some other Location/Organization, alter the default Loc/Org in
|
182
|
-
`More->Settings->
|
151
|
+
`More->Settings->Discovered`
|
183
152
|
|
184
153
|
There is also setting called `discovery_fact` which defaults to
|
185
154
|
`discovery_bootif` which specifies which incoming fact should be used to get
|
@@ -189,11 +158,11 @@ the `IPAPPEND 2` option is set correctly in the Foreman template.
|
|
189
158
|
|
190
159
|
# Usage
|
191
160
|
|
192
|
-
Boot a machine using the new PXE config above. It should register with
|
193
|
-
The new Host should show up in `
|
194
|
-
|
195
|
-
|
196
|
-
|
161
|
+
Boot a machine using the new PXE config above. It should register with
|
162
|
+
Foreman. The new Host should show up in `Hosts->Discovered Hosts`. Then select
|
163
|
+
a Discovered Host and choose Provision. This will redirect to the normal Edit
|
164
|
+
page for a Host, with the discovered data filled in where possible. Fill in
|
165
|
+
the details as normal.
|
197
166
|
|
198
167
|
On save, a reboot is sent to the discovered host, after which it should reboot into
|
199
168
|
the installer for the chosen OS, and finally into the installed OS.
|
@@ -217,15 +186,11 @@ If the booted machine fails to register with Foreman, then there are a number of
|
|
217
186
|
* Check DNS is working for that image, or use an IP in `foreman.url`
|
218
187
|
* Check DHCP is handing IPs to the booted image correctly
|
219
188
|
|
220
|
-
|
221
|
-
|
189
|
+
To log in the running image you need to set root password which is locked by
|
190
|
+
default. In addition, you can enable ssh server as well. To do this, provide
|
191
|
+
the following kernel command line options:
|
222
192
|
|
223
|
-
|
224
|
-
RHhwCLrQXB8zE
|
225
|
-
|
226
|
-
And then provide it as an kernel command line option:
|
227
|
-
|
228
|
-
... stateless rootpw=RHhwCLrQXB8zE
|
193
|
+
APPEND ... fdi.ssh=1 fdi.rootpw=redhat
|
229
194
|
|
230
195
|
# API
|
231
196
|
|
@@ -242,18 +207,9 @@ If you only wish to test the plugin code itself, you don't need to create the PX
|
|
242
207
|
image above, or have a TFTP server to run it from. Simply POST a hash of Host Facts to
|
243
208
|
`/api/v2/discovered_hosts/facts` to create a Discovered Host in the UI.
|
244
209
|
|
245
|
-
# TODO
|
246
|
-
|
247
|
-
* Support for downloading shell script for oVirt Node image
|
248
|
-
* Add more Tests
|
249
|
-
* Add proper Location/Organization handling (via a Wizard maybe?)
|
250
|
-
* Add per-subnet discovery
|
251
|
-
* Rake Task for ISO build
|
252
|
-
* Easy way to add custom facts to build/runtime
|
253
|
-
|
254
210
|
# Copyright
|
255
211
|
|
256
|
-
Copyright (c) 2012-
|
212
|
+
Copyright (c) 2012-2014 Greg Sutcliffe and The Foreman developers
|
257
213
|
|
258
214
|
This program is free software: you can redistribute it and/or modify
|
259
215
|
it under the terms of the GNU General Public License as published by
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Api
|
2
2
|
module V2
|
3
3
|
class DiscoveredHostsController < ::Api::V2::BaseController
|
4
|
+
include Foreman::Controller::DiscoveredExtensions
|
4
5
|
|
5
|
-
before_filter :find_resource, :except => %w{index create facts}
|
6
|
+
before_filter :find_resource, :except => %w{index create facts auto_provision_all}
|
6
7
|
skip_before_filter :authorize, :only => :facts
|
7
8
|
|
8
9
|
resource_description do
|
@@ -80,7 +81,13 @@ module Api
|
|
80
81
|
@host.managed = true
|
81
82
|
@host.build = true
|
82
83
|
forward_request_url
|
83
|
-
|
84
|
+
update_response = @host.update_attributes(params[:discovered_host])
|
85
|
+
Host.transaction do
|
86
|
+
if update_response
|
87
|
+
delete_discovery_attribute_set(@host.id)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
process_response update_response
|
84
91
|
end
|
85
92
|
|
86
93
|
api :DELETE, "/discovered_hosts/:id/", N_("Delete a discovered host")
|
@@ -94,12 +101,94 @@ module Api
|
|
94
101
|
param :facts, Hash, :required => true, :desc => N_("hash containing facts for the host")
|
95
102
|
|
96
103
|
def facts
|
97
|
-
|
104
|
+
state = true
|
105
|
+
Host.transaction do
|
106
|
+
@discovered_host, state = Host::Discovered.import_host_and_facts(params[:facts])
|
107
|
+
end
|
108
|
+
@discovered_host.transaction do
|
109
|
+
if state && rule = find_discovery_rule(@discovered_host)
|
110
|
+
state = perform_auto_provision(@discovered_host, rule) if Setting['discovery_auto']
|
111
|
+
else
|
112
|
+
Rails.logger.warn "Discovered facts import unsuccessful, skipping auto provisioning" if Setting['discovery_auto']
|
113
|
+
end
|
114
|
+
end
|
98
115
|
process_response state
|
99
116
|
rescue ::Foreman::Exception => e
|
100
117
|
render :json => {'message'=>e.to_s}, :status => :unprocessable_entity
|
101
118
|
end
|
102
119
|
|
120
|
+
api :POST, "/discovered_hosts/:id/auto_provision", N_("Execute rules against a discovered host")
|
121
|
+
param :id, :identifier, :required => true
|
122
|
+
|
123
|
+
def auto_provision
|
124
|
+
@discovered_host.transaction do
|
125
|
+
if rule = find_discovery_rule(@discovered_host)
|
126
|
+
msg = _("Host %s was provisioned with rule %s") % [@discovered_host.name, rule.name]
|
127
|
+
process_response perform_auto_provision(@discovered_host, rule), msg
|
128
|
+
else
|
129
|
+
process_success _("No rule found for host %s") % @discovered_host.name
|
130
|
+
end
|
131
|
+
end
|
132
|
+
rescue ::Foreman::Exception => e
|
133
|
+
render :json => {'message' => e.to_s}, :status => :unprocessable_entity
|
134
|
+
end
|
135
|
+
|
136
|
+
api :POST, "/discovered_hosts/auto_provision_all", N_("Execute rules against all currently discovered hosts")
|
137
|
+
|
138
|
+
def auto_provision_all
|
139
|
+
result = true
|
140
|
+
error_message = _("Errors during auto provisioning: %s")
|
141
|
+
|
142
|
+
if Host::Discovered.count == 0
|
143
|
+
error_message = _("No discovered hosts to provision")
|
144
|
+
result = false
|
145
|
+
end
|
146
|
+
|
147
|
+
Host.transaction do
|
148
|
+
overall_errors = ""
|
149
|
+
Host::Discovered.all.each do |discovered_host|
|
150
|
+
if rule = find_discovery_rule(discovered_host)
|
151
|
+
result &= perform_auto_provision(discovered_host, rule)
|
152
|
+
unless discovered_host.errors.empty?
|
153
|
+
errors = discovered_host.errors.full_messages.join(' ')
|
154
|
+
logger.warn "Failed to auto provision host %s: %s" % [discovered_host.name, errors]
|
155
|
+
overall_errors << "#{discovered_host.name}: #{errors} "
|
156
|
+
end
|
157
|
+
else
|
158
|
+
logger.warn "No rule found for host %s" % discovered_host.name
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
if result
|
163
|
+
process_success _("Discovered hosts are provisioning now")
|
164
|
+
else
|
165
|
+
render_error :custom_error,
|
166
|
+
:status => :unprocessable_entity,
|
167
|
+
:locals => {
|
168
|
+
:message => error_message % overall_errors
|
169
|
+
}
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
api :PUT, "/discovered_hosts/:id/refresh_facts", N_("Refreshing the facts of a discovered host")
|
175
|
+
param :id, :identifier, :required => true
|
176
|
+
|
177
|
+
def refresh_facts
|
178
|
+
process_response @discovered_host.refresh_facts
|
179
|
+
rescue ::Foreman::Exception => e
|
180
|
+
render :json => { 'message' => e.to_s }
|
181
|
+
end
|
182
|
+
|
183
|
+
api :PUT, "/discovered_hosts/:id/reboot", N_("Rebooting a discovered host")
|
184
|
+
param :id, :identifier, :required => true
|
185
|
+
|
186
|
+
def reboot
|
187
|
+
process_response @discovered_host.reboot
|
188
|
+
rescue ::Foreman::Exception => e
|
189
|
+
render :json => {'message'=>e.to_s}
|
190
|
+
end
|
191
|
+
|
103
192
|
private
|
104
193
|
|
105
194
|
def resource_class
|
@@ -110,6 +199,18 @@ module Api
|
|
110
199
|
@discovered_host.request_url = request.host_with_port if @discovered_host.respond_to?(:request_url)
|
111
200
|
end
|
112
201
|
|
202
|
+
def action_permission
|
203
|
+
case params[:action]
|
204
|
+
when 'auto_provision'
|
205
|
+
:auto_provision
|
206
|
+
when 'auto_provision_all'
|
207
|
+
:auto_provision_all
|
208
|
+
when 'refresh_facts', 'reboot'
|
209
|
+
:edit
|
210
|
+
else
|
211
|
+
super
|
212
|
+
end
|
213
|
+
end
|
113
214
|
end
|
114
215
|
end
|
115
216
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Api
|
2
|
+
module V2
|
3
|
+
class DiscoveryRulesController < ::Api::V2::BaseController
|
4
|
+
|
5
|
+
before_filter :find_resource, :except => %w{index create facts}
|
6
|
+
|
7
|
+
resource_description do
|
8
|
+
resource_id 'discovery_rules'
|
9
|
+
api_version 'v2'
|
10
|
+
api_base_url "/api/v2"
|
11
|
+
end
|
12
|
+
|
13
|
+
api :GET, "/discovery_rules/", N_("List all discovery rules")
|
14
|
+
param :search, String, :desc => N_("filter results")
|
15
|
+
param :order, String, :desc => N_("sort results")
|
16
|
+
param :page, String, :desc => N_("paginate results")
|
17
|
+
param :per_page, String, :desc => N_("number of entries per request")
|
18
|
+
|
19
|
+
def index
|
20
|
+
@discovery_rules = resource_scope.search_for(*search_options).paginate(paginate_options)
|
21
|
+
end
|
22
|
+
|
23
|
+
api :GET, "/discovery_rules/:id/", N_("Show a discovery rule")
|
24
|
+
param :id, :identifier_dottable, :required => true
|
25
|
+
|
26
|
+
def show
|
27
|
+
end
|
28
|
+
|
29
|
+
def_param_group :discovery_rule do
|
30
|
+
param :discovery_rule, Hash, :action_aware => true do
|
31
|
+
param :name, String, :required => true
|
32
|
+
param :search, String, :required => true
|
33
|
+
param :hostgroup_id, Integer, :required => true
|
34
|
+
param :hostname, String, :required => true
|
35
|
+
param :max_count, Integer
|
36
|
+
param :priority, Integer
|
37
|
+
param :enabled, :bool
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
api :POST, "/discovery_rules/", N_("Create a discovery rule")
|
42
|
+
param_group :discovery_rule, :as => :create
|
43
|
+
|
44
|
+
def create
|
45
|
+
@discovery_rule = DiscoveryRule.new(params[:discovery_rule])
|
46
|
+
process_response @discovery_rule.save
|
47
|
+
end
|
48
|
+
|
49
|
+
api :PUT, "/discovery_rules/:id/", N_("Update a rule")
|
50
|
+
param :id, :identifier, :required => true
|
51
|
+
param :discovery_rule, Hash, :action_aware => true do
|
52
|
+
param :name, String, :required => true
|
53
|
+
param :search, String, :required => true
|
54
|
+
param :hostgroup_id, Integer, :required => true
|
55
|
+
param :hostname, String, :required => true
|
56
|
+
param :max_count, Integer
|
57
|
+
param :priority, Integer
|
58
|
+
param :enabled, :bool
|
59
|
+
end
|
60
|
+
|
61
|
+
def update
|
62
|
+
process_response @discovery_rule.update_attributes(params[:discovery_rule])
|
63
|
+
end
|
64
|
+
|
65
|
+
api :DELETE, "/discovery_rules/:id/", N_("Delete a rule")
|
66
|
+
param :id, :identifier, :required => true
|
67
|
+
|
68
|
+
def destroy
|
69
|
+
process_response @discovery_rule.destroy
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def resource_class
|
75
|
+
DiscoveryRule
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|