foreman_fog_proxmox 0.13.4 → 0.14.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +63 -52
  3. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +0 -2
  4. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +0 -1
  5. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +0 -2
  6. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +0 -1
  7. data/app/controllers/concerns/foreman_fog_proxmox/compute_resources_vms_controller.rb +17 -7
  8. data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
  9. data/app/controllers/concerns/foreman_fog_proxmox/hosts_controller.rb +58 -0
  10. data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +6 -3
  11. data/app/helpers/proxmox_compute_controllers_helper.rb +2 -1
  12. data/app/helpers/proxmox_compute_resources_helper.rb +3 -3
  13. data/app/helpers/proxmox_compute_resources_vms_helper.rb +16 -7
  14. data/app/helpers/proxmox_form_helper.rb +10 -6
  15. data/app/helpers/proxmox_vm_config_helper.rb +16 -25
  16. data/app/helpers/proxmox_vm_interfaces_helper.rb +19 -6
  17. data/app/helpers/proxmox_vm_os_template_helper.rb +2 -5
  18. data/app/helpers/proxmox_vm_uuid_helper.rb +1 -1
  19. data/app/helpers/proxmox_vm_volumes_helper.rb +22 -25
  20. data/app/models/concerns/fog_extensions/proxmox/node.rb +2 -2
  21. data/app/models/concerns/fog_extensions/proxmox/server.rb +10 -6
  22. data/app/models/concerns/host_ext/proxmox/associator.rb +3 -2
  23. data/app/models/concerns/host_ext/proxmox/for_vm.rb +1 -1
  24. data/app/models/concerns/host_ext/proxmox/interfaces.rb +7 -3
  25. data/app/models/concerns/orchestration/proxmox/compute.rb +11 -4
  26. data/app/models/foreman_fog_proxmox/options_select.rb +1 -3
  27. data/app/models/foreman_fog_proxmox/proxmox.rb +12 -10
  28. data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +15 -3
  29. data/app/models/foreman_fog_proxmox/proxmox_connection.rb +6 -2
  30. data/app/models/foreman_fog_proxmox/proxmox_console.rb +3 -1
  31. data/app/models/foreman_fog_proxmox/proxmox_images.rb +2 -2
  32. data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +37 -14
  33. data/app/models/foreman_fog_proxmox/proxmox_operating_systems.rb +6 -1
  34. data/app/models/foreman_fog_proxmox/proxmox_pools.rb +4 -4
  35. data/app/models/foreman_fog_proxmox/proxmox_version.rb +7 -3
  36. data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +9 -7
  37. data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +37 -24
  38. data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +4 -5
  39. data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +23 -12
  40. data/app/models/foreman_fog_proxmox/vms.rb +2 -2
  41. data/app/overrides/compute_resources_vms/form/add_clone_to_new_vm_compute_detail.rb +1 -1
  42. data/app/views/compute_resources_vms/form/proxmox/_add_from_profile_to_compute_form.html.erb +2 -2
  43. data/app/views/compute_resources_vms/form/proxmox/_add_from_profile_to_hosts_compute_detail_form.html.erb +4 -2
  44. data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +0 -1
  45. data/app/views/compute_resources_vms/form/proxmox/container/_config.html.erb +2 -2
  46. data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +1 -1
  47. data/app/views/compute_resources_vms/form/proxmox/container/_volume_mp.html.erb +1 -1
  48. data/app/views/compute_resources_vms/form/proxmox/container/_volume_rootfs.html.erb +1 -1
  49. data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +3 -3
  50. data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +2 -2
  51. data/app/views/compute_resources_vms/form/proxmox/server/_volume_hard_disk.html.erb +1 -1
  52. data/config/routes.rb +8 -4
  53. data/db/migrate/20210312105013_update_proxmox_uuid_host.rb +1 -2
  54. data/lib/foreman_fog_proxmox/engine.rb +5 -3
  55. data/lib/foreman_fog_proxmox/semver.rb +1 -4
  56. data/lib/foreman_fog_proxmox/version.rb +1 -1
  57. data/locale/en/foreman_fog_proxmox.po +140 -47
  58. data/locale/foreman_fog_proxmox.pot +300 -137
  59. data/locale/fr/foreman_fog_proxmox.po +145 -52
  60. data/test/factories/foreman_fog_proxmox/proxmox_container_mock_factory.rb +6 -7
  61. data/test/factories/foreman_fog_proxmox/proxmox_server_mock_factory.rb +6 -7
  62. data/test/functional/compute_resources_controller_test.rb +4 -2
  63. data/test/test_plugin_helper.rb +12 -7
  64. data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +38 -47
  65. data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +49 -34
  66. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +29 -65
  67. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +3 -3
  68. data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +22 -13
  69. data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +48 -37
  70. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +45 -35
  71. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +0 -4
  72. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +34 -22
  73. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +20 -14
  74. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_hard_disk_test.rb +76 -54
  75. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +26 -15
  76. data/test/unit/foreman_fog_proxmox/proxmox_vm_queries_test.rb +1 -1
  77. data/test/unit/foreman_fog_proxmox/semver_test.rb +2 -1
  78. metadata +36 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e42832dc77d338bb20585f27678bc2207c23a610f7c7b478f24f3791ca65a414
4
- data.tar.gz: 1385bea7eed802496ae7ab85ca013e75dc0343a8a433a347d8811b59fd620cd0
3
+ metadata.gz: 70a0629dba4c5afe29ddca15cbe49df9325edb80ca73d076c41c3fc1d283ecff
4
+ data.tar.gz: f680eed4c519701ecdc5bc38117ca62eb846551ab972aa8e5f38869b17fe414e
5
5
  SHA512:
6
- metadata.gz: 91a262ffeb2b720fae01136cdcd158cd8c577702fafbea36d550eae859c6734f7a7ec1c390b39077852100d4507d9b3502bb7f3f1cb5c7d22c02cd7b012c51cf
7
- data.tar.gz: 25512a916934966d9b5e66494f1b294c5b13d69ba326ed61170e330bff616111103984701a6311b150fb444dab3f0a48920c8debe193b7698a2ec43a0110cdd1
6
+ metadata.gz: 6c8d56b7e0a4e02ac2195fdd248aa12f5934b8a9746763d1aff59d0df1316f09abb3dbfe212f99e7a39307132065550871bb84a7fcab04787e3e8ca9bd70e50d
7
+ data.tar.gz: 883ee296ceea79f15e220c8fe9cad273aed8201862be59b41b79761ae01d8cc837adcbe3dae54e9e24d1f30f34dee3d85e7eb8c83ccaa94d0522f27bc28925b3
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ![CI](https://github.com/theforeman/foreman_fog_proxmox/workflows/CI/badge.svg)
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/922162c278e0fa9207ba/maintainability)](https://codeclimate.com/github/theforeman/foreman_fog_proxmox/maintainability)
5
- [![Test Coverage](https://api.codeclimate.com/v1/badges/922162c278e0fa9207ba/test_coverage)](https://codeclimate.com/github/theforeman/foreman_fog_proxmox/test_coverage)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/a6446cf7b1cf09b83de6/test_coverage)](https://codeclimate.com/github/theforeman/foreman_fog_proxmox/test_coverage)
6
6
  [![Gem Version](https://badge.fury.io/rb/foreman_fog_proxmox.svg)](https://badge.fury.io/rb/foreman_fog_proxmox)
7
7
 
8
8
  # ForemanFogProxmox
@@ -38,9 +38,27 @@ You can support the plugin development via the following methods:
38
38
 
39
39
  ## Installation
40
40
 
41
- ### Prerequisites
41
+ ### From OS packages (required)
42
42
 
43
- You need [nodejs](https://nodejs.org/en/download/package-manager/) installed in order to use foreman-assets package.
43
+ Please see the Foreman manual for complete instructions:
44
+
45
+ * [Foreman: How to Install a Plugin from package](https://theforeman.org/plugins/#2.Installation)
46
+
47
+ [Install from package](https://theforeman.org/plugins/#2.2Packageinstallation) is the easiest way to install the plugin. Choose the latest release plugins repository. If you don't find it in the same foreman release repository, get it from the `nightly` repository.
48
+
49
+ Then you can install it with the package manager, in Debian/Ubuntu:
50
+
51
+ ```shell
52
+ sudo apt-get install ruby-foreman-fog-proxmox
53
+ ```
54
+
55
+ and in Fedora/Redhat Linux:
56
+
57
+ ```shell
58
+ sudo dnf install rubygem-foreman_fog_proxmox
59
+ ```
60
+
61
+ Redhat, CentOS or Fedora users should also [setup Selinux](https://projects.theforeman.org/projects/foreman/wiki/SELinux) to allow foreman and all its plugins to work.
44
62
 
45
63
  ### From gem
46
64
 
@@ -69,6 +87,8 @@ sudo -u foreman /usr/bin/foreman-ruby /usr/bin/bundle install
69
87
 
70
88
  * Precompile plugin assets:
71
89
 
90
+ You need [nodejs](https://nodejs.org/en/download/package-manager/) installed in order to use foreman-assets package.
91
+
72
92
  ```shell
73
93
  /usr/bin/foreman-ruby /usr/bin/bundle exec bin/rake plugin:assets:precompile[foreman_fog_proxmox]
74
94
  ```
@@ -99,28 +119,6 @@ Then you can check plugin installation after login into your new foreman server
99
119
  ![About resources](.github/images/about_resources.png)
100
120
  ![About greffon](.github/images/about_greffon.png)
101
121
 
102
- ### From OS packages
103
-
104
- Please see the Foreman manual for complete instructions:
105
-
106
- * [Foreman: How to Install a Plugin from package](https://theforeman.org/plugins/#2.Installation)
107
-
108
- [Install from package](https://theforeman.org/plugins/#2.2Packageinstallation) is the easiest way to install the plugin. Choose the latest release plugins repository. If you don't find it in the same foreman release repository, get it from the `nightly` repository.
109
-
110
- Then you can install it with the package manager, in Debian/Ubuntu:
111
-
112
- ```shell
113
- sudo apt-get install ruby-foreman-fog-proxmox
114
- ```
115
-
116
- and in Fedora/Redhat Linux:
117
-
118
- ```shell
119
- sudo dnf install rubygem-foreman_fog_proxmox
120
- ```
121
-
122
- Redhat, CentOS or Fedora users should also [setup Selinux](https://projects.theforeman.org/projects/foreman/wiki/SELinux) to allow foreman and all its plugins to work.
123
-
124
122
  ## Usage
125
123
 
126
124
  * [Compute resource](.github/compute_resource.md)
@@ -130,15 +128,17 @@ Redhat, CentOS or Fedora users should also [setup Selinux](https://projects.thef
130
128
 
131
129
  ### Dev prerequisites
132
130
 
133
- * You need a Proxmox VE 5.4+ server running.
134
- * You need ruby >= 2.5. You can install it with [asdf-vm](https://asdf-vm.com).
135
- * You also need nodejs in your dev machine to run webpack-dev-server. You can install it with [asdf-vm](https://asdf-vm.com).
131
+ > See [Foreman dev setup](https://github.com/theforeman/foreman/blob/develop/developer_docs/foreman_dev_setup.asciidoc)
132
+
133
+ * You need a Proxmox VE 6.2+ server running.
134
+ * You need ruby 2.7. You can install it with [asdf-vm](https://asdf-vm.com).
135
+ * You also need nodejs 14 in your dev machine to run webpack-dev-server. You can install it with [asdf-vm](https://asdf-vm.com).
136
136
 
137
137
  ### Platform
138
138
 
139
139
  * Fork this github repo.
140
140
  * Clone it on your local machine
141
- * Install foreman v1.22+ on your machine:
141
+ * Install foreman v2.5+ on your machine:
142
142
 
143
143
  ```shell
144
144
  git clone https://github.com/theforeman/foreman -b develop
@@ -160,9 +160,9 @@ gem 'simplecov' # test
160
160
 
161
161
  ```shell
162
162
  gem install bundler
163
- # prerequisites postgresql-XX-client library on OS (XX=major release installed in OS)
164
- bundle config set without 'libvirt ovirt mysql2'
165
- bundle config build.pg --with-pg-config=/usr/pgsql-XX/bin/pg_config
163
+ # prerequisites libraries on Ubuntu OS:
164
+ # sudo apt install postgresql-client-13 libpq-dev libsystemd-dev
165
+ bundle config set without 'libvirt ovirt'
166
166
  bundle install
167
167
  ```
168
168
 
@@ -180,6 +180,12 @@ add these lines to config/settings.yml:
180
180
 
181
181
  ```yaml
182
182
  :webpack_dev_server: true
183
+ :destroy_vm_on_host_delete: true # optional, could be set on UI
184
+ :logging:
185
+ :level: debug
186
+ :loggers:
187
+ :sql:
188
+ :enabled: false
183
189
  ```
184
190
 
185
191
  * SQLite is no more default rails dev or test database, instead add:
@@ -191,45 +197,42 @@ DATABASE_URL=nulldb://nohost
191
197
  * (Optional) test and dev with postgresql database:
192
198
 
193
199
  ```shell
194
- cp config/model.mappings.example config/model.mappings
195
200
  cp config/database.yml.example config/database.yml
196
201
  ```
197
202
 
198
203
  add these lines to each environment in config/database.yml:
199
204
 
200
205
  ```yaml
206
+ host: localhost
201
207
  username: foreman
202
208
  password: foreman
203
209
  ```
204
210
 
205
211
  ```shell
206
212
  cp config/ignored_environments.yml.sample config/ignored_environments.yml
207
- docker run --name foreman-db -v foreman_data:/var/lib/postgresql/data -e POSTGRES_DB=foreman -e POSTGRES_USER=foreman -e POSTGRES_PASSWORD=foreman -p 5432:5432 -d postgres
213
+ docker run --name foreman-db -v foreman_data:/var/lib/postgresql/data -e POSTGRES_DB=foreman -e POSTGRES_USER=foreman -e POSTGRES_PASSWORD=foreman -p 5432:5432 -d postgres:13
208
214
  bundle exec bin/rake db:migrate
209
- # reboot if settings.NAME error in schema
210
- bundle exec bin/rake db:seed assets:precompile locale:pack webpack:compile
215
+ RAILS_ENV=development bundle exec bin/rake db:seed assets:precompile locale:pack webpack:compile
211
216
  ```
212
217
 
213
- * You can reset admin password if needed:
218
+ * You can reset and change your admin password if needed:
214
219
 
215
220
  ```shell
216
- bundle exec bin/rake permissions:reset
221
+ RAILS_ENV=development bundle exec bin/rake permissions:reset password=changeme
217
222
  ```
218
223
 
219
224
  * You should write tests and you can execute those specific to this plugin:
220
225
 
221
- first, create database `foreman-test` with psql commands:
226
+ first, create database `foreman-test`:
222
227
 
223
228
  ```shell
224
- docker exec -it foreman-db psql -U foreman
225
- foreman=# create database "foreman-test";
229
+ RAILS_ENV=test bundle exec rake db:create
226
230
  ```
227
231
 
228
232
  then add test schema and seeds:
229
233
 
230
234
  ```shell
231
235
  RAILS_ENV=test bundle exec bin/rake db:migrate
232
- # reboot if error: "ActiveRecord::RecordNotFound: Couldn't find Setting with [WHERE "settings"."name" = $1]"
233
236
  RAILS_ENV=test bundle exec bin/rake db:seed
234
237
  ```
235
238
 
@@ -247,10 +250,22 @@ export DISABLE_SPRING=true
247
250
  bundle exec bin/rake test TEST=../foreman_fog_proxmox/test/functional/compute_resources_controller_test.rb DATABASE_URL=nulldb://nohost
248
251
  ```
249
252
 
250
- * Check code syntax with rubocop and foreman rules:
253
+ * In foreman_fog_proxmox source directory, check code syntax with rubocop and foreman rules:
254
+
255
+ ```shell
256
+ bundle exec rubocop
257
+ ```
258
+
259
+ safe autocorrect:
260
+
261
+ ```shell
262
+ bundle exec rubocop -a
263
+ ```
264
+
265
+ Temporary ignore offenses:
251
266
 
252
267
  ```shell
253
- bundle exec bin/rake foreman_fog_proxmox:rubocop
268
+ bundle exec rubocop --auto-gen-config
254
269
  ```
255
270
 
256
271
  * See deface overrides result:
@@ -267,14 +282,16 @@ bundle exec bin/rake plugin:assets:precompile[foreman_fog_proxmox]
267
282
 
268
283
  * In foreman directory, after you modify foreman_fog_proxmox translations (language, texts in new files, etc) you have to compile it:
269
284
 
285
+ Prerequisites: [Transifex CLI](https://github.com/transifex/cli)
286
+
270
287
  ```shell
271
- bundle exec bin/rake plugin:gettext[foreman_fog_proxmox]
288
+ bundle exec bin/rake plugin:gettext\[foreman_fog_proxmox\]
272
289
  ```
273
290
 
274
291
  * In foreman directory, run in a new terminal the webpack-dev-server:
275
292
 
276
293
  ```shell
277
- ./node_modules/.bin/webpack-dev-server --config config/webpack.config.js
294
+ ./node_modules/.bin/webpack-dev-server-without-h2 --config config/webpack.config.js
278
295
  ```
279
296
 
280
297
  * Or without webpack-dev-server, add this line in config/settings.yml:
@@ -301,12 +318,6 @@ bundle exec bin/rails server
301
318
  bundle exec foreman start
302
319
  ```
303
320
 
304
- If you want to delete vm on host destroy, add this line in config/settings.yml:
305
-
306
- ```yml
307
- :destroy_vm_on_host_delete: false
308
- ```
309
-
310
321
  See details in [foreman plugin development](https://projects.theforeman.org/projects/foreman/wiki/How_to_Create_a_Plugin)
311
322
 
312
323
  ## Contributing
@@ -15,8 +15,6 @@
15
15
  // You should have received a copy of the GNU General Public License
16
16
  // along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
- $(document).on('ContentLoad', tfm.numFields.initAll);
19
-
20
18
  $(document).ready(function () {
21
19
  sslVerifyPeerSelected();
22
20
  authMethodSelected();
@@ -15,7 +15,6 @@
15
15
  // You should have received a copy of the GNU General Public License
16
16
  // along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
- $(document).on('ContentLoad', tfm.numFields.initAll);
19
18
  $(document).ready(vmTypeSelected);
20
19
 
21
20
  function vmTypeSelected() {
@@ -46,7 +46,6 @@ function controllerSelected(item) {
46
46
  var device = $(device_selector).limitedSpinner('value');
47
47
  var id = controller + device;
48
48
  $(id_selector).val(id);
49
- tfm.numFields.initAll();
50
49
  }
51
50
 
52
51
  function deviceSelected(item) {
@@ -58,7 +57,6 @@ function deviceSelected(item) {
58
57
  var controller = $(controller_selector).val();
59
58
  var id = controller + device;
60
59
  $(id_selector).val(id);
61
- tfm.numFields.initAll();
62
60
  }
63
61
 
64
62
  function computeControllerMaxDevice(controller) {
@@ -21,5 +21,4 @@ function cloudinitControllerSelected(item) {
21
21
  var max = computeControllerMaxDevice(controller);
22
22
  var device_selector = 'host_compute_attributes_volumes_attributes_' + index + 'device';
23
23
  $(device_selector).attr('data-soft-max', max);
24
- tfm.numFields.initAll();
25
24
  }
@@ -26,15 +26,20 @@ module ForemanFogProxmox
26
26
  module Overrides
27
27
  def associate
28
28
  if Host.for_vm_uuid(@compute_resource, @vm).any?
29
- process_error(:error_msg => _("VM already associated with a host"), :redirect => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)))
29
+ process_error(:error_msg => _("VM already associated with a host"),
30
+ :redirect => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id],
31
+ :id => proxmox_vm_id(@compute_resource, @vm)))
30
32
  return
31
33
  end
32
34
  host = @compute_resource.associated_host(@vm) if @compute_resource.respond_to?(:associated_host)
33
35
  if host.present?
34
36
  host.associate!(@compute_resource, @vm)
35
- process_success(:success_msg => _("VM associated to host %s") % host.name, :success_redirect => host_path(host))
37
+ process_success(:success_msg => _("VM associated to host %s") % host.name,
38
+ :success_redirect => host_path(host))
36
39
  else
37
- process_error(:error_msg => _("No host found to associate this VM with"), :redirect => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)))
40
+ process_error(:error_msg => _("No host found to associate this VM with"),
41
+ :redirect => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id],
42
+ :id => proxmox_vm_id(@compute_resource, @vm)))
38
43
  end
39
44
  end
40
45
 
@@ -51,14 +56,15 @@ module ForemanFogProxmox
51
56
  'hosts/console/log'
52
57
  end
53
58
  rescue StandardError => e
54
- process_error :redirect => compute_resource_vm_path(@compute_resource, proxmox_vm_id(@compute_resource, @vm)), :error_msg => (_("Failed to set console: %s") % e), :object => @vm
59
+ process_error :redirect => compute_resource_vm_path(@compute_resource, proxmox_vm_id(@compute_resource, @vm)),
60
+ :error_msg => (_("Failed to set console: %s") % e), :object => @vm
55
61
  end
56
62
 
57
63
  private
58
64
 
59
65
  def proxmox_vm_id(compute_resource, vm)
60
66
  id = vm.identity
61
- id = vm.unique_cluster_identity(compute_resource) if compute_resource.class == ForemanFogProxmox::Proxmox
67
+ id = vm.unique_cluster_identity(compute_resource) if compute_resource.instance_of?(ForemanFogProxmox::Proxmox)
62
68
  id
63
69
  end
64
70
 
@@ -69,11 +75,15 @@ module ForemanFogProxmox
69
75
  else
70
76
  error format(_("failed to %<action>s %<vm>s"), { :action => _(action), :vm => @vm })
71
77
  end
72
- redirect_back(:fallback_location => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)))
78
+ redirect_back(:fallback_location => compute_resource_vm_path(
79
+ :compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)
80
+ ))
73
81
  # This should only rescue Fog::Errors, but Fog returns all kinds of errors...
74
82
  rescue StandardError => e
75
83
  error format(_("Error - %<message>s"), { :message => _(e.message) })
76
- redirect_back(:fallback_location => compute_resource_vm_path(:compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)))
84
+ redirect_back(:fallback_location => compute_resource_vm_path(
85
+ :compute_resource_id => params[:compute_resource_id], :id => proxmox_vm_id(@compute_resource, @vm)
86
+ ))
77
87
  end
78
88
  end
79
89
  end
@@ -27,7 +27,7 @@ module ForemanFogProxmox
27
27
  def compute_resource_params_filter
28
28
  super.tap do |filter|
29
29
  filter.permit :ssl_verify_peer,
30
- :ssl_certs, :disable_proxy, :auth_method, :token_id, :token
30
+ :ssl_certs, :disable_proxy, :auth_method, :token_id, :token
31
31
  end
32
32
  end
33
33
 
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2021 Tristan Robert
4
+
5
+ # This file is part of ForemanFogProxmox.
6
+
7
+ # ForemanFogProxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # ForemanFogProxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ module ForemanFogProxmox
21
+ module HostsController
22
+ extend ActiveSupport::Concern
23
+ included do
24
+ prepend Overrides
25
+ end
26
+ module Overrides
27
+ include ForemanFogProxmox::ProxmoxVmNew
28
+ # Clone the host
29
+ def clone
30
+ super
31
+ return true unless @host.compute_resource.instance_of?(ForemanFogProxmox::Proxmox)
32
+
33
+ @host.compute_attributes[:vmid] = next_vmid
34
+ @host.compute_attributes[:interfaces_attributes].each do |index, interface_attributes|
35
+ @host.compute_attributes[:interfaces_attributes][index] =
36
+ interface_attributes.merge(macaddr: nil).merge(hwaddr: nil).merge(ip: nil).merge(ip6: nil)
37
+ end
38
+ @host.compute_attributes[:volumes_attributes].each do |index, volume_attributes|
39
+ @host.compute_attributes[:volumes_attributes][index] = volume_attributes.merge(volid: nil)
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def bridges
46
+ @host.compute_resource.bridges
47
+ end
48
+
49
+ def nodes
50
+ @host.compute_resource.nodes
51
+ end
52
+
53
+ def storages
54
+ @host.compute_resource.storages
55
+ end
56
+ end
57
+ end
58
+ end
@@ -21,7 +21,8 @@ module ForemanFogProxmox
21
21
  class ComputeResourcesController < ::ApplicationController
22
22
  # GET foreman_fog_proxmox/isos/:compute_resource_id/:node_id/:storage
23
23
  def isos_by_id_and_node_and_storage
24
- volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id], params[:storage], 'iso')
24
+ volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id],
25
+ params[:storage], 'iso')
25
26
  respond_to do |format|
26
27
  format.json { render :json => volumes }
27
28
  end
@@ -29,7 +30,8 @@ module ForemanFogProxmox
29
30
 
30
31
  # GET foreman_fog_proxmox/ostemplates/:compute_resource_id/:node_id/:storage
31
32
  def ostemplates_by_id_and_node_and_storage
32
- volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id], params[:storage], 'vztmpl')
33
+ volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id],
34
+ params[:storage], 'vztmpl')
33
35
  respond_to do |format|
34
36
  format.json { render :json => volumes }
35
37
  end
@@ -37,7 +39,8 @@ module ForemanFogProxmox
37
39
 
38
40
  # GET foreman_fog_proxmox/isos/:compute_resource_id/:node_id
39
41
  def isos_by_id_and_node
40
- volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id], params[:storage], 'iso')
42
+ volumes = load_compute_resource(params[:compute_resource_id]).images_by_storage(params[:node_id],
43
+ params[:storage], 'iso')
41
44
  respond_to do |format|
42
45
  format.json { render :json => volumes }
43
46
  end
@@ -19,7 +19,8 @@
19
19
 
20
20
  module ProxmoxComputeControllersHelper
21
21
  def proxmox_controllers_map
22
- proxmox_controllers_cloudinit_map << ForemanFogProxmox::OptionsSelect.new(name: 'VirtIO Block', id: 'virtio', range: 15)
22
+ proxmox_controllers_cloudinit_map << ForemanFogProxmox::OptionsSelect.new(name: 'VirtIO Block', id: 'virtio',
23
+ range: 15)
23
24
  end
24
25
 
25
26
  def proxmox_controllers_cloudinit_map
@@ -21,9 +21,9 @@ module ProxmoxComputeResourcesHelper
21
21
  def user_token_expiration_date(compute_resource)
22
22
  expire = compute_resource.current_user_token_expire
23
23
  rescue ::Foreman::Exception => e
24
- return 'Has already expired. Please edit the compute resource to set a new valid one.' if e.message == 'User token expired'
24
+ 'Has already expired. Please edit the compute resource to set a new valid one.' if e.message == 'User token expired'
25
25
  rescue StandardError => e
26
- logger.warn(format(_('failed to get identity client version: %<e>s'), e: e))
26
+ logger.warn("failed to get identity client version: #{e}")
27
27
  raise e
28
28
  else
29
29
  return 'Never' if expire == 0
@@ -36,7 +36,7 @@ module ProxmoxComputeResourcesHelper
36
36
  rescue ::Foreman::Exception => e
37
37
  return [] if e.message == 'User token expired'
38
38
  rescue StandardError => e
39
- logger.warn(format(_('failed to get cluster nodes: %<e>s'), e: e))
39
+ logger.warn("failed to get cluster nodes: #{e}")
40
40
  raise e
41
41
  else
42
42
  nodes
@@ -20,7 +20,7 @@
20
20
  module ProxmoxComputeResourcesVmsHelper
21
21
  def proxmox_vm_id(compute_resource, vm)
22
22
  id = vm.identity
23
- id = vm.unique_cluster_identity(compute_resource) if compute_resource.class == ForemanFogProxmox::Proxmox
23
+ id = vm.unique_cluster_identity(compute_resource) if compute_resource.instance_of?(ForemanFogProxmox::Proxmox)
24
24
  id
25
25
  end
26
26
 
@@ -32,7 +32,9 @@ module ProxmoxComputeResourcesVmsHelper
32
32
  end
33
33
 
34
34
  def vm_power_action(vm, authorizer = nil)
35
- opts = hash_for_power_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => proxmox_vm_id(@compute_resource, vm)).merge(:auth_object => @compute_resource, :permission => 'power_compute_resources_vms', :authorizer => authorizer)
35
+ opts = hash_for_power_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => proxmox_vm_id(@compute_resource, vm)).merge(
36
+ :auth_object => @compute_resource, :permission => 'power_compute_resources_vms', :authorizer => authorizer
37
+ )
36
38
  html = power_action_html(vm)
37
39
 
38
40
  display_link_if_authorized "Power #{action_string(vm)}", opts, html.merge(:method => :put)
@@ -46,7 +48,8 @@ module ProxmoxComputeResourcesVmsHelper
46
48
  :id => proxmox_vm_id(@compute_resource, vm)
47
49
  ).merge(
48
50
  :auth_object => @compute_resource,
49
- :permission => 'edit_compute_resources'),
51
+ :permission => 'edit_compute_resources'
52
+ ),
50
53
  :title => _('Associate VM to a Foreman host'),
51
54
  :method => :put,
52
55
  :class => 'btn btn-default'
@@ -62,7 +65,8 @@ module ProxmoxComputeResourcesVmsHelper
62
65
  hash_for_import_compute_resource_vm_path(
63
66
  :compute_resource_id => @compute_resource,
64
67
  :id => proxmox_vm_id(@compute_resource, vm),
65
- :type => 'managed'),
68
+ :type => 'managed'
69
+ ),
66
70
  html_options
67
71
  )
68
72
  import_unmanaged_link = display_link_if_authorized(
@@ -70,7 +74,8 @@ module ProxmoxComputeResourcesVmsHelper
70
74
  hash_for_import_compute_resource_vm_path(
71
75
  :compute_resource_id => @compute_resource,
72
76
  :id => proxmox_vm_id(@compute_resource, vm),
73
- :type => 'unmanaged'),
77
+ :type => 'unmanaged'
78
+ ),
74
79
  html_options
75
80
  )
76
81
 
@@ -88,12 +93,16 @@ module ProxmoxComputeResourcesVmsHelper
88
93
  ),
89
94
  {
90
95
  :id => 'console-button',
91
- :class => 'btn btn-info'
96
+ :class => 'btn btn-info',
92
97
  }
93
98
  )
94
99
  end
95
100
 
96
101
  def vm_delete_action(vm, authorizer = nil)
97
- display_delete_if_authorized(hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => proxmox_vm_id(@compute_resource, vm)).merge(:auth_object => @compute_resource, :authorizer => authorizer), :class => 'btn btn-danger')
102
+ display_delete_if_authorized(
103
+ hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => proxmox_vm_id(@compute_resource, vm)).merge(
104
+ :auth_object => @compute_resource, :authorizer => authorizer
105
+ ), :class => 'btn btn-danger'
106
+ )
98
107
  end
99
108
  end
@@ -29,9 +29,11 @@ module ProxmoxFormHelper
29
29
  options[:value] = value if value.present?
30
30
  addClass options, 'form-control'
31
31
  pass = f.password_field(attr, options) +
32
- tag(:span, '', class: 'glyphicon glyphicon-warning-sign input-addon', title: 'Caps lock ON', style: 'display:none')
32
+ tag(:span, '', class: 'glyphicon glyphicon-warning-sign input-addon', title: 'Caps lock ON',
33
+ style: 'display:none')
33
34
  if unset_button
34
- button = link_to_function(icon_text('edit', '', :kind => 'pficon'), 'toggle_input_group(this)', :id => 'disable-pass-btn', :class => 'btn btn-default', :title => _('Change the password'))
35
+ button = link_to_function(icon_text('edit', '', :kind => 'pficon'), 'toggle_input_group(this)',
36
+ :id => 'disable-pass-btn', :class => 'btn btn-default', :title => _('Change the password'))
35
37
  input_group(pass, input_group_btn(button))
36
38
  else
37
39
  pass
@@ -53,10 +55,12 @@ module ProxmoxFormHelper
53
55
  options[:form_builder_local] ||= :f
54
56
  options[:form_builder_attrs] ||= {}
55
57
 
56
- content_tag(:div, :class => "#{options[:type]}_#{association}_fields_template form_template", :style => 'display: none;') do
57
- form_builder.fields_for(association, options[:object], :child_index => "new_#{options[:type]}_#{association}") do |f|
58
+ content_tag(:div, :class => "#{options[:type]}_#{association}_fields_template form_template",
59
+ :style => 'display: none;') do
60
+ form_builder.fields_for(association, options[:object],
61
+ :child_index => "new_#{options[:type]}_#{association}") do |f|
58
62
  render(:partial => options[:partial], :layout => options[:layout],
59
- :locals => { options[:form_builder_local] => f }.merge(options[:form_builder_attrs]))
63
+ :locals => { options[:form_builder_local] => f }.merge(options[:form_builder_attrs]))
60
64
  end
61
65
  end
62
66
  end
@@ -66,7 +70,7 @@ module ProxmoxFormHelper
66
70
  opts[:"data-association"] = (type + '_' + association.to_s).to_sym
67
71
  hide = ''
68
72
  hide += '$("[data-association=' + type + '_volumes]").hide();' unless ['hard_disk', 'mp'].include?(type)
69
- link_to_function(name.to_s, 'add_child_node(this);tfm.numFields.initAll();' + hide, opts)
73
+ link_to_function(name.to_s, 'add_child_node(this);' + hide, opts)
70
74
  end
71
75
 
72
76
  def remove_child_link_typed(name, f, type, opts = {})