foreman_puppet 1.0.5 → 2.0.0.alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/foreman_puppet/extensions/api_hostgroups_controller.rb +14 -16
  3. data/app/controllers/concerns/foreman_puppet/{api/import_puppetclasses_common_controller.rb → extensions/api_smart_proxies_controller.rb} +9 -3
  4. data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +23 -1
  5. data/app/controllers/concerns/foreman_puppet/extensions/api_v2_hosts_controller.rb +15 -17
  6. data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +0 -1
  7. data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +32 -41
  8. data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +26 -41
  9. data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +0 -1
  10. data/app/controllers/foreman_puppet/puppetclasses_controller.rb +1 -1
  11. data/app/helpers/foreman_puppet/hosts_and_hostgroups_helper.rb +0 -5
  12. data/app/helpers/foreman_puppet/hosts_helper.rb +6 -10
  13. data/app/models/concerns/foreman_puppet/extensions/host.rb +2 -16
  14. data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +2 -7
  15. data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +7 -12
  16. data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +5 -10
  17. data/app/models/foreman_puppet/host_puppet_facet.rb +1 -1
  18. data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +0 -2
  19. data/app/services/foreman_puppet/puppet_class_importer.rb +0 -6
  20. data/app/views/foreman_puppet/api/v2/host_puppet_facets/host_list.json.rabl +3 -0
  21. data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/base.json.rabl +2 -0
  22. data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_list.json.rabl +3 -0
  23. data/config/api_routes.rb +1 -9
  24. data/config/initializers/api_reroute.rb +73 -5
  25. data/db/migrate/20101121140000_add_environment_to_template_combinations.foreman_puppet.rb +1 -1
  26. data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +2 -0
  27. data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +20 -36
  28. data/db/migrate/20210924103241_remove_katello_id_from_environments.foreman_puppet.rb +5 -0
  29. data/db/migrate_foreman/20090722141107_create_environments.rb +2 -2
  30. data/db/migrate_foreman/20090802062223_create_puppetclasses.rb +28 -0
  31. data/db/migrate_foreman/20090905150132_create_hostgroups_puppetclasses.rb +12 -0
  32. data/db/migrate_foreman/20110412103238_remove_unused_fields_from_puppet_classes.rb +9 -0
  33. data/db/migrate_foreman/20110712070522_create_host_class.rb +11 -0
  34. data/db/migrate_foreman/20120824142048_add_some_indexes.rb +14 -0
  35. data/db/migrate_foreman/20121018152459_create_hostgroup_classes.rb +11 -0
  36. data/db/migrate_foreman/20161205142618_delete_orphaned_smart_class_parameters.rb +1 -1
  37. data/db/migrate_foreman/20180816134832_cast_lookup_key_values.rb +1 -31
  38. data/db/migrate_foreman/20180831115634_add_uniqueness_to_puppetclass_name.rb +24 -0
  39. data/db/migrate_foreman/20181023112532_add_environment_puppetclass_id.rb +1 -1
  40. data/lib/foreman_puppet/engine.rb +4 -36
  41. data/lib/foreman_puppet/register.rb +16 -47
  42. data/lib/foreman_puppet/version.rb +1 -1
  43. data/lib/foreman_puppet.rb +1 -6
  44. data/locale/en/LC_MESSAGES/foreman_puppet.mo +0 -0
  45. data/locale/en/foreman_puppet.edit.po +162 -317
  46. data/locale/en/foreman_puppet.po +62 -8
  47. data/locale/foreman_puppet.pot +215 -133
  48. data/locale/gemspec.rb +1 -1
  49. data/package.json +8 -11
  50. data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +0 -231
  51. data/test/controllers/foreman_puppet/api/v2/smart_proxies_controller_test.rb +255 -0
  52. data/test/controllers/foreman_puppet/environments_controller_test.rb +2 -2
  53. data/test/controllers/foreman_puppet/hosts_controller_test.rb +0 -1
  54. data/test/factories/foreman_puppet_factories.rb +0 -2
  55. data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +31 -70
  56. data/test/integration/foreman_puppet/host_js_test.rb +0 -1
  57. data/test/integration/foreman_puppet/puppetclass_js_test.rb +1 -1
  58. data/test/models/foreman_puppet/host_puppet_facet_test.rb +1 -7
  59. data/test/models/foreman_puppet/host_test.rb +26 -0
  60. data/test/models/foreman_puppet/user_test.rb +1 -5
  61. data/test/unit/foreman_puppet/puppet_class_importer_test.rb +1 -1
  62. metadata +22 -13
  63. data/db/migrate/20211112130803_cleanup_environment_from_core_tables.foreman_puppet.rb +0 -10
  64. data/locale/cs_CZ/foreman_puppet.edit.po +0 -1085
  65. data/locale/cs_CZ/foreman_puppet.po.time_stamp +0 -0
@@ -1,13 +1,81 @@
1
1
  Foreman::Application.routes.prepend do
2
2
  namespace :api, defaults: { format: 'json' } do
3
3
  scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v2/, constraints: ApiConstraints.new(version: 2, default: true) do
4
- resources :puppetclasses, controller: '/foreman_puppet/api/v2/puppetclasses', except: %i[new edit]
5
- resources :environments, controller: '/foreman_puppet/api/v2/environments', except: %i[new edit]
6
- resources :hosts, controller: '/foreman_puppet/api/v2/hosts', only: []
7
- resources :hostgroups, controller: '/foreman_puppet/api/v2/hostgroups', only: %i[]
4
+ resources :smart_proxies, only: [] do
5
+ post :import_puppetclasses, on: :member
6
+ resources :environments, only: [] do
7
+ post :import_puppetclasses, on: :member, controller: '/api/v2/smart_proxies'
8
+ end
9
+ end
10
+
8
11
  resources :config_groups, controller: '/foreman_puppet/api/v2/config_groups', except: %i[new edit]
9
- resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit]
12
+
13
+ resources :hosts, only: [] do
14
+ resources :puppetclasses, controller: '/foreman_puppet/api/v2/puppetclasses', except: %i[new edit]
15
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
16
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
17
+ end
18
+ resources :host_classes, path: :puppetclass_ids, controller: '/foreman_puppet/api/v2/host_classes', only: %i[index create destroy]
19
+ end
20
+
21
+ resources :hostgroups, only: [] do
22
+ resources :puppetclasses, controller: '/foreman_puppet/api/v2/puppetclasses', except: %i[new edit]
23
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
24
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
25
+ end
26
+ resources :hostgroup_classes, path: :puppetclass_ids, controller: '/foreman_puppet/api/v2/hostgroup_classes', only: %i[index create destroy]
27
+ end
28
+
29
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', except: %i[new edit] do
30
+ resources :locations, only: %i[index show]
31
+ resources :organizations, only: %i[index show]
32
+ resources :smart_proxies, only: [] do
33
+ post :import_puppetclasses, on: :member
34
+ end
35
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
36
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
37
+ end
38
+ resources :puppetclasses, controller: '/foreman_puppet/api/v2/puppetclasses', except: %i[new edit] do
39
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
40
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit destroy]
41
+ end
42
+ end
43
+ resources :hosts, only: %i[index show]
44
+ resources :template_combinations, only: %i[index show create update]
45
+ end
46
+
47
+ resources :puppetclasses, controller: '/foreman_puppet/api/v2/puppetclasses', except: %i[new edit] do
48
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
49
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
50
+ end
51
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', only: %i[index show] do
52
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create] do
53
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
54
+ end
55
+ end
56
+ end
57
+
58
+ resources :smart_class_parameters, controller: '/foreman_puppet/api/v2/smart_class_parameters', except: %i[new edit create destroy] do
59
+ resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
60
+ end
61
+
10
62
  resources :override_values, controller: '/foreman_puppet/api/v2/override_values', except: %i[new edit]
63
+
64
+ resources :locations, only: [] do
65
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', only: %i[index show]
66
+
67
+ resources :organizations, only: [] do
68
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', only: %i[index show]
69
+ end
70
+ end
71
+
72
+ resources :organizations, only: [] do
73
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', only: %i[index show]
74
+
75
+ resources :locations, only: [] do
76
+ resources :environments, controller: '/foreman_puppet/api/v2/environments', only: %i[index show]
77
+ end
78
+ end
11
79
  end
12
80
  end
13
81
  end
@@ -4,6 +4,6 @@ class AddEnvironmentToTemplateCombinations < ActiveRecord::Migration[4.2]
4
4
  end
5
5
 
6
6
  def down
7
- remove_reference :template_combinations, :environment, foreign_key: true if ForemanPuppet.extracted_from_core?
7
+ remove_reference :template_combinations, :environment, foreign_key: true
8
8
  end
9
9
  end
@@ -1,5 +1,6 @@
1
1
  class MigrateEnvironmentToPuppetFacet < ActiveRecord::Migration[6.0]
2
2
  def up
3
+ return true unless column_exists?(:hosts, :environment_id)
3
4
  puppet_hostgroups = ::Hostgroup.unscoped.where.not(environment_id: nil).pluck(:id, :environment_id)
4
5
  puppet_hostgroups.map! { |hg_id, env_id| { hostgroup_id: hg_id, environment_id: env_id } }
5
6
  ForemanPuppet::HostgroupPuppetFacet.insert_all!(puppet_hostgroups) if puppet_hostgroups.any?
@@ -10,6 +11,7 @@ class MigrateEnvironmentToPuppetFacet < ActiveRecord::Migration[6.0]
10
11
  end
11
12
 
12
13
  def down
14
+ return true unless column_exists?(:hosts, :environment_id)
13
15
  hostgroup_facet_ids = ForemanPuppet::HostgroupPuppetFacet.all.pluck(:hostgroup_id, :environment_id)
14
16
  hostgroup_facet_ids.each do |hostgroup_id, env_id|
15
17
  ::Hostgroup.unscoped.where(id: hostgroup_id).update_all(environment_id: env_id)
@@ -13,8 +13,26 @@ class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
13
13
  end
14
14
 
15
15
  def up
16
- migrate_host_data_to_facets
17
- migrate_hostgroup_data_to_facets
16
+ host_config_group_ids = FakeHostConfigGroup.for_host.pluck(:host_id).uniq
17
+ host_config_group_ids.each do |host_id|
18
+ host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
19
+ host_groups = FakeHostConfigGroup.for_host.where(host_id: host_id)
20
+ if host_facet_id
21
+ host_groups.update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_id)
22
+ else
23
+ deleted_groups = FakeConfigGroup.where(id: host_groups.pluck(:config_group_id)).pluck(:name)
24
+ say "deleting groups #{deleted_groups.join(', ')} from Host (id=#{host_id}) because it has no environment"
25
+ host_groups.delete_all
26
+ end
27
+ end
28
+ hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup.pluck(:host_id).uniq
29
+ hostgroup_config_group_ids.each do |hostgroup_id|
30
+ hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
31
+ hostgroup_facet_id ||= ForemanPuppet::HostgroupPuppetFacet.create!(hostgroup: Hostgroup.unscoped.find(hostgroup_id)).id
32
+ FakeHostConfigGroup.for_hostgroup
33
+ .where(host_id: hostgroup_id)
34
+ .update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
35
+ end
18
36
  end
19
37
 
20
38
  def down
@@ -33,38 +51,4 @@ class MigrateHostTypeInHostConfigGroups < ActiveRecord::Migration[6.0]
33
51
  .update_all(host_type: 'Hostgroup', host_id: hostgroup_facet_ids[hostgroup_facet_id])
34
52
  end
35
53
  end
36
-
37
- private
38
-
39
- def migrate_host_data_to_facets
40
- host_config_group_ids = FakeHostConfigGroup.for_host.pluck(:host_id).uniq
41
- host_config_group_ids.each do |host_id|
42
- host_facet_id = ForemanPuppet::HostPuppetFacet.where(host_id: host_id).pick(:id)
43
- host_groups = FakeHostConfigGroup.for_host.where(host_id: host_id)
44
- if host_facet_id
45
- host_groups.update_all(host_type: 'ForemanPuppet::HostPuppetFacet', host_id: host_facet_id)
46
- else
47
- deleted_groups = FakeConfigGroup.where(id: host_groups.pluck(:config_group_id)).pluck(:name)
48
- say "Deleting Config groups #{deleted_groups.join(', ')} from Host (id=#{host_id}) because the Host doesn't exist or has no environment"
49
- host_groups.delete_all
50
- end
51
- end
52
- end
53
-
54
- def migrate_hostgroup_data_to_facets
55
- hostgroup_config_group_ids = FakeHostConfigGroup.for_hostgroup.pluck(:host_id).uniq
56
- hostgroup_config_group_ids.each do |hostgroup_id|
57
- hostgroup = Hostgroup.unscoped.find_by(id: hostgroup_id)
58
- hostgroup_groups = FakeHostConfigGroup.for_hostgroup.where(host_id: hostgroup_id)
59
- if hostgroup
60
- hostgroup_facet_id = ForemanPuppet::HostgroupPuppetFacet.where(hostgroup_id: hostgroup_id).pick(:id)
61
- hostgroup_facet_id ||= ForemanPuppet::HostgroupPuppetFacet.create!(hostgroup: hostgroup).id
62
- hostgroup_groups.update_all(host_type: 'ForemanPuppet::HostgroupPuppetFacet', host_id: hostgroup_facet_id)
63
- else
64
- deleted_groups = FakeConfigGroup.where(id: hostgroup_groups.pluck(:config_group_id)).pluck(:name)
65
- say "Deleting Config groups #{deleted_groups.join(', ')} from Hostgroup (id=#{hostgroup_id}) because Hostgroup doesn't exist"
66
- hostgroup_groups.delete_all
67
- end
68
- end
69
- end
70
54
  end
@@ -0,0 +1,5 @@
1
+ class RemoveKatelloIdFromEnvironments < ActiveRecord::Migration[6.0]
2
+ def up
3
+ remove_column :environments, :katello_id if column_exists?(:environments, :katello_id)
4
+ end
5
+ end
@@ -1,11 +1,11 @@
1
- class CreateEnvironments < ActiveRecord::Migration[5.0]
1
+ class CreateEnvironments < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  create_table :environments do |t|
4
4
  t.string :name, null: false, limit: 255
5
5
  t.timestamps null: true
6
6
  end
7
7
  create_table :environments_puppetclasses do |t|
8
- t.references :puppetclass, foreign_key: true
8
+ t.references :puppetclass, null: false
9
9
  t.references :environment, foreign_key: true
10
10
  end
11
11
  end
@@ -0,0 +1,28 @@
1
+ class CreatePuppetclasses < ActiveRecord::Migration[4.2]
2
+ def up
3
+ create_table :puppetclasses do |t|
4
+ t.string :name, limit: 255
5
+ t.string :nameindicator, limit: 255
6
+ t.integer :operatingsystem_id
7
+
8
+ t.timestamps null: true
9
+ end
10
+ add_foreign_key(:environments_puppetclasses, :puppetclasses)
11
+
12
+ create_table :hosts_puppetclasses, id: false do |t|
13
+ t.references :puppetclass, null: false
14
+ t.references :host, null: false
15
+ end
16
+
17
+ create_table :operatingsystems_puppetclasses, id: false do |t|
18
+ t.references :puppetclass, null: false
19
+ t.references :operatingsystem, null: false
20
+ end
21
+ end
22
+
23
+ def down
24
+ drop_table :puppetclasses
25
+ drop_table :hosts_puppetclasses
26
+ drop_table :operatingsystems_puppetclasses
27
+ end
28
+ end
@@ -0,0 +1,12 @@
1
+ class CreateHostgroupsPuppetclasses < ActiveRecord::Migration[6.0]
2
+ def up
3
+ create_table :hostgroups_puppetclasses, id: false, if_not_exists: true do |t|
4
+ t.references :hostgroup, foreign_key: true, null: false
5
+ t.references :puppetclass, foreign_key: true, null: false
6
+ end
7
+ end
8
+
9
+ def down
10
+ drop_table :hostgroups_puppetclasses
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveUnusedFieldsFromPuppetClasses < ActiveRecord::Migration[4.2]
2
+ def up
3
+ remove_column :puppetclasses, :nameindicator
4
+ remove_column :puppetclasses, :operatingsystem_id
5
+ end
6
+
7
+ def down
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ class CreateHostClass < ActiveRecord::Migration[4.2]
2
+ def up
3
+ rename_table :hosts_puppetclasses, :host_classes
4
+ add_column :host_classes, :id, :primary_key
5
+ end
6
+
7
+ def down
8
+ remove_column :host_classes, :id
9
+ rename_table :host_classes, :hosts_puppetclasses
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ class AddSomeIndexes < ActiveRecord::Migration[4.2]
2
+ def change
3
+ # puppetclasses
4
+ add_index :puppetclasses, :name
5
+
6
+ # turn off Foreign Key checks
7
+ execute 'SET CONSTRAINTS ALL DEFERRED;' if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
8
+
9
+ add_foreign_key 'host_classes', 'hosts', name: 'host_classes_host_id_fk'
10
+ add_foreign_key 'host_classes', 'puppetclasses', name: 'host_classes_puppetclass_id_fk'
11
+ add_foreign_key 'operatingsystems_puppetclasses', 'operatingsystems', name: 'operatingsystems_puppetclasses_operatingsystem_id_fk'
12
+ add_foreign_key 'operatingsystems_puppetclasses', 'puppetclasses', name: 'operatingsystems_puppetclasses_puppetclass_id_fk'
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class CreateHostgroupClasses < ActiveRecord::Migration[4.2]
2
+ def up
3
+ rename_table :hostgroups_puppetclasses, :hostgroup_classes
4
+ add_column :hostgroup_classes, :id, :primary_key
5
+ end
6
+
7
+ def down
8
+ remove_column :hostgroup_classes, :id
9
+ rename_table :hostgroup_classes, :hostgroups_puppetclasses
10
+ end
11
+ end
@@ -2,7 +2,7 @@ class DeleteOrphanedSmartClassParameters < ActiveRecord::Migration[4.2]
2
2
  def up
3
3
  condition = 'NOT EXISTS (SELECT 1 FROM environment_classes WHERE environment_classes.puppetclass_lookup_key_id = lookup_keys.id)'
4
4
  LookupValue.joins(:lookup_key).where(condition).where("lookup_keys.type = 'PuppetclassLookupKey'").delete_all
5
- PuppetclassLookupKey.where(condition).delete_all
5
+ LookupKey.where(condition).where(type: 'PuppetclassLookupKey').delete_all
6
6
  end
7
7
 
8
8
  def down
@@ -1,35 +1,5 @@
1
1
  class CastLookupKeyValues < ActiveRecord::Migration[5.1]
2
2
  def up
3
- # Different LookupKey types handle casting a bit differently
4
- PuppetclassLookupKey.unscoped.preload(:lookup_values).where(override: true).where.not(key_type: 'string').find_each do |key|
5
- cast_key_and_values(key)
6
- end
7
- end
8
-
9
- private
10
-
11
- def cast_key_and_values(key)
12
- fix_value(key, :default_value)
13
- key.lookup_values.each do |lv|
14
- fix_value(lv, :value)
15
- end
16
- end
17
-
18
- def safemode_box
19
- @safemode_box ||= Safemode::Box.new
20
- end
21
-
22
- def fix_value(obj, attribute)
23
- return if obj.omit && !obj.try(:merge_default)
24
- value = obj.send(attribute)
25
- return unless value.is_a? String
26
- return if value.contains_erb?
27
- fixed = safemode_box.eval(value)
28
- obj.update_column(attribute, fixed)
29
- rescue StandardError => e
30
- say "Failed to cast #{attribute} for #{obj.inspect}:"
31
- say "Value: #{value}", subitem: true
32
- say "Error: #{e.message}", subitem: true
33
- say 'Perhaps it is invalid? Casting skipped, manual action may be needed.', subitem: true
3
+ # Do nothing, if this is upgrade from too old version, we are not supporting it.
34
4
  end
35
5
  end
@@ -0,0 +1,24 @@
1
+ class AddUniquenessToPuppetclassName < ActiveRecord::Migration[5.1]
2
+ class FakePuppetclass < ApplicationRecord
3
+ self.table_name = 'puppetclasses'
4
+ end
5
+
6
+ def up
7
+ names = FakePuppetclass.group(:name).count.select { |_key, value| value > 1 }.keys
8
+ unless names.empty?
9
+ names.each do |name|
10
+ classes = FakePuppetclass.where name: name
11
+ say "#{classes.count} Puppet classes with duplicate name detected: #{name}"
12
+ end
13
+ raise 'Please make sure there are no duplicate Puppet classes before continuing.'
14
+ end
15
+
16
+ remove_index :puppetclasses, :name
17
+ add_index :puppetclasses, :name, unique: true
18
+ end
19
+
20
+ def down
21
+ remove_index :puppetclasses, :name
22
+ add_index :puppetclasses, :name
23
+ end
24
+ end
@@ -2,6 +2,6 @@
2
2
  class AddEnvironmentPuppetclassId < ActiveRecord::Migration[5.2]
3
3
  def change
4
4
  add_index :environment_classes, %i[environment_id puppetclass_id]
5
- remove_index :environment_classes, :environment_id
5
+ remove_index(:environment_classes, :environment_id) if index_exists?(:environment_classes, :environment_id)
6
6
  end
7
7
  end
@@ -1,38 +1,9 @@
1
1
  module ForemanPuppet
2
2
  class Engine < ::Rails::Engine
3
- config.before_configuration do
4
- unless ForemanPuppet.extracted_from_core?
5
- require 'graphql'
6
-
7
- module BaseObjectClassMethodPath
8
- def field(*args, **kwargs, &block)
9
- return if args.first == :environment && args.second.to_s == 'Types::Environment'
10
- return if args.first == :environments && args.second.node_type.to_s == 'Types::Environment'
11
- return if args.first == :puppetclass && args.second.to_s == 'Types::Puppetclass'
12
- return if args.first == :puppetclasses && args.second.node_type.to_s == 'Types::Puppetclass'
13
-
14
- super
15
- end
16
- end
17
-
18
- module RelayClassicMutationClassMethodPath
19
- # rubocop:disable Metrics/ParameterLists
20
- def argument(name, type, *rest, loads: nil, **kwargs, &block)
21
- # rubocop:enable Metrics/ParameterLists
22
- return if [::Types::Environment, ::Types::Puppetclass].include?(loads)
23
-
24
- super
25
- end
26
- end
27
-
28
- GraphQL::Types::Relay::BaseObject.extend(BaseObjectClassMethodPath)
29
- GraphQL::Schema::RelayClassicMutation.extend(RelayClassicMutationClassMethodPath)
30
- end
31
- end
32
-
33
3
  engine_name 'foreman_puppet'
34
4
  isolate_namespace ForemanPuppet
35
5
 
6
+ config.paths['db/migrate'] << 'db/migrate_foreman' if Gem::Dependency.new('', ">= #{ForemanPuppet::FOREMAN_DROP_MIGRATIONS_VERSION}").match?('', SETTINGS[:version].notag)
36
7
  config.paths['config/routes.rb'].unshift('config/api_routes.rb')
37
8
 
38
9
  initializer 'foreman_puppet.register_plugin', before: :finisher_hook do |_app|
@@ -95,15 +66,12 @@ module ForemanPuppet
95
66
 
96
67
  ::SmartProxiesHelper::TABBED_FEATURES << 'Puppet'
97
68
 
98
- unless ForemanPuppet.extracted_from_core?
99
- ::HostInfo.local_entries.delete('HostInfoProviders::PuppetInfo'.safe_constantize)
100
- ::HostInfo.local_entries.delete('HostInfoProviders::ConfigGroupsInfo'.safe_constantize)
101
- ::ProxyStatus.status_registry.delete('ProxyStatus::Puppet'.safe_constantize)
102
- Foreman.input_types_registry.input_types.delete('puppet_parameter')
103
- end
104
69
  Foreman.input_types_registry.register(ForemanPuppet::InputType::PuppetParameterInput)
105
70
  ::ProxyStatus.status_registry.add(ForemanPuppet::ProxyStatus::Puppet)
106
71
 
72
+ # Extend smart_proxies API functionality
73
+ ::Api::V2::SmartProxiesController.include ForemanPuppet::Extensions::ApiSmartProxiesController
74
+
107
75
  # GraphQL
108
76
  ::Types::Host.include(ForemanPuppet::Types::HostExtensions)
109
77
  ::Types::Hostgroup.include(ForemanPuppet::Types::HostgroupExtensions)
@@ -1,34 +1,15 @@
1
1
  Foreman::Plugin.register :foreman_puppet do
2
- requires_foreman '>= 2.0.0'
2
+ requires_foreman '>= 3.0.0'
3
3
  # Add Global JS file for extending foreman-core components and routes
4
4
  register_global_js_file 'fills'
5
5
 
6
6
  apipie_documented_controllers(["#{ForemanPuppet::Engine.root}/app/controllers/foreman_puppet/api/v2/*.rb"])
7
7
 
8
- unless ForemanPuppet.extracted_from_core?
9
- # Remove core permissions
10
- cfgs = %i[view_config_groups create_config_groups edit_config_groups destroy_config_groups]
11
- plks = %i[view_external_parameters create_external_parameters edit_external_parameters
12
- destroy_external_parameters]
13
- pcls = %i[view_puppetclasses create_puppetclasses edit_puppetclasses destroy_puppetclasses import_puppetclasses]
14
- (cfgs | plks | pcls).each do |perm_name|
15
- p = Foreman::AccessControl.permission(perm_name)
16
- Foreman::AccessControl.remove_permission(p)
17
- end
18
-
19
- delete_menu_item(:top_menu, :puppetclasses)
20
- delete_menu_item(:top_menu, :config_groups)
21
- delete_menu_item(:top_menu, :puppetclass_lookup_keys)
22
- delete_menu_item(:top_menu, :environments)
23
- end
24
-
25
8
  # TODO: maybe this would not be necessary if we rething the form
26
9
  %i[create_hostgroups edit_hostgroups].each do |perm|
27
10
  p = Foreman::AccessControl.permission(perm)
28
- if ForemanPuppet.extracted_from_core?
29
- p.actions << 'hostgroups/environment_selected'
30
- p.actions << 'hostgroups/puppetclass_parameters'
31
- end
11
+ p.actions << 'hostgroups/environment_selected'
12
+ p.actions << 'hostgroups/puppetclass_parameters'
32
13
  p.actions << 'foreman_puppet/puppetclasses/parameters'
33
14
  end
34
15
  p = Foreman::AccessControl.permission(:edit_hostgroups)
@@ -37,15 +18,13 @@ Foreman::Plugin.register :foreman_puppet do
37
18
  end
38
19
  %i[create_hosts edit_hosts].each do |perm|
39
20
  p = Foreman::AccessControl.permission(perm)
40
- if ForemanPuppet.extracted_from_core?
41
- p.actions << 'hosts/hostgroup_or_environment_selected'
42
- p.actions << 'hosts/puppetclass_parameters'
43
- if perm == :edit_hosts
44
- p.actions << 'hosts/select_multiple_environment'
45
- p.actions << 'hosts/update_multiple_environment'
46
- p.actions << 'hosts/select_multiple_puppet_proxy'
47
- p.actions << 'hosts/update_multiple_puppet_proxy'
48
- end
21
+ p.actions << 'hosts/hostgroup_or_environment_selected'
22
+ p.actions << 'hosts/puppetclass_parameters'
23
+ if perm == :edit_hosts
24
+ p.actions << 'hosts/select_multiple_environment'
25
+ p.actions << 'hosts/update_multiple_environment'
26
+ p.actions << 'hosts/select_multiple_puppet_proxy'
27
+ p.actions << 'hosts/update_multiple_puppet_proxy'
49
28
  end
50
29
  p.actions << 'foreman_puppet/puppetclasses/parameters'
51
30
  end
@@ -168,13 +147,13 @@ Foreman::Plugin.register :foreman_puppet do
168
147
  register_facet ForemanPuppet::HostPuppetFacet, :puppet do
169
148
  configure_host do
170
149
  # extend_model ForemanPuppet::Extensions::Host
171
- api_view list: 'foreman_puppet/api/v2/host_puppet_facets/base',
150
+ api_view list: 'foreman_puppet/api/v2/host_puppet_facets/host_list',
172
151
  single: 'foreman_puppet/api/v2/host_puppet_facets/host_single'
173
152
  template_compatibility_properties :environment, :environment_id, :environment_name
174
153
  set_dependent_action :destroy
175
154
  end
176
155
  configure_hostgroup(ForemanPuppet::HostgroupPuppetFacet) do
177
- api_view list: 'foreman_puppet/api/v2/hostgroup_puppet_facets/base',
156
+ api_view list: 'foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_list',
178
157
  single: 'foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_single'
179
158
  template_compatibility_properties :environment, :environment_id, :environment_name
180
159
  set_dependent_action :destroy
@@ -185,14 +164,6 @@ Foreman::Plugin.register :foreman_puppet do
185
164
  base_scope.preload(puppet: :environment)
186
165
  end
187
166
 
188
- unless ForemanPuppet.extracted_from_core?
189
- Rails.application.config.after_initialize do
190
- list = Pagelets::Manager.instance.instance_variable_get(:@pagelets)['hosts/_form'][:main_tabs]
191
- core_pagelet = list.detect { |pagelet| pagelet.opts[:id] == :puppet_klasses }
192
- list.delete(core_pagelet)
193
- end
194
- end
195
-
196
167
  register_graphql_query_field :environment, 'ForemanPuppet::Types::Environment', :record_field
197
168
  register_graphql_query_field :environments, 'ForemanPuppet::Types::Environment', :collection_field
198
169
  register_graphql_query_field :puppetclass, 'ForemanPuppet::Types::Puppetclass', :record_field
@@ -212,12 +183,10 @@ Foreman::Plugin.register :foreman_puppet do
212
183
  priority: 100,
213
184
  onlyif: (host_onlyif if resource_type == :host)
214
185
 
215
- if ForemanPuppet.extracted_from_core?
216
- context.add_pagelet :main_tab_fields,
217
- partial: 'hosts/foreman_puppet/form_main_tab_fields',
218
- resource_type: resource_type,
219
- priority: 100
220
- end
186
+ context.add_pagelet :main_tab_fields,
187
+ partial: 'hosts/foreman_puppet/form_main_tab_fields',
188
+ resource_type: resource_type,
189
+ priority: 100
221
190
  end
222
191
  end
223
192
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanPuppet
2
- VERSION = '1.0.5'.freeze
2
+ VERSION = '2.0.0.alpha.2'.freeze
3
3
  end
@@ -1,10 +1,5 @@
1
1
  module ForemanPuppet
2
- FOREMAN_EXTRACTION_VERSION = '3.0'.freeze
3
-
4
- def self.extracted_from_core?
5
- ENV['PUPPET_EXTRACTED'].to_s == '1' ||
6
- Gem::Dependency.new('', ">= #{FOREMAN_EXTRACTION_VERSION}").match?('', SETTINGS[:version].notag)
7
- end
2
+ FOREMAN_DROP_MIGRATIONS_VERSION = '3.1'.freeze
8
3
  end
9
4
 
10
5
  require 'foreman_puppet/engine'