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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/foreman_puppet/extensions/api_hostgroups_controller.rb +14 -16
- data/app/controllers/concerns/foreman_puppet/{api/import_puppetclasses_common_controller.rb → extensions/api_smart_proxies_controller.rb} +9 -3
- data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +23 -1
- data/app/controllers/concerns/foreman_puppet/extensions/api_v2_hosts_controller.rb +15 -17
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +0 -1
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +32 -41
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +26 -41
- data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +0 -1
- data/app/controllers/foreman_puppet/puppetclasses_controller.rb +1 -1
- data/app/helpers/foreman_puppet/hosts_and_hostgroups_helper.rb +0 -5
- data/app/helpers/foreman_puppet/hosts_helper.rb +6 -10
- data/app/models/concerns/foreman_puppet/extensions/host.rb +2 -16
- data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +2 -7
- data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +7 -12
- data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +5 -10
- data/app/models/foreman_puppet/host_puppet_facet.rb +1 -1
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +0 -2
- data/app/services/foreman_puppet/puppet_class_importer.rb +0 -6
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/host_list.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/base.json.rabl +2 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_list.json.rabl +3 -0
- data/config/api_routes.rb +1 -9
- data/config/initializers/api_reroute.rb +73 -5
- data/db/migrate/20101121140000_add_environment_to_template_combinations.foreman_puppet.rb +1 -1
- data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +2 -0
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +20 -36
- data/db/migrate/20210924103241_remove_katello_id_from_environments.foreman_puppet.rb +5 -0
- data/db/migrate_foreman/20090722141107_create_environments.rb +2 -2
- data/db/migrate_foreman/20090802062223_create_puppetclasses.rb +28 -0
- data/db/migrate_foreman/20090905150132_create_hostgroups_puppetclasses.rb +12 -0
- data/db/migrate_foreman/20110412103238_remove_unused_fields_from_puppet_classes.rb +9 -0
- data/db/migrate_foreman/20110712070522_create_host_class.rb +11 -0
- data/db/migrate_foreman/20120824142048_add_some_indexes.rb +14 -0
- data/db/migrate_foreman/20121018152459_create_hostgroup_classes.rb +11 -0
- data/db/migrate_foreman/20161205142618_delete_orphaned_smart_class_parameters.rb +1 -1
- data/db/migrate_foreman/20180816134832_cast_lookup_key_values.rb +1 -31
- data/db/migrate_foreman/20180831115634_add_uniqueness_to_puppetclass_name.rb +24 -0
- data/db/migrate_foreman/20181023112532_add_environment_puppetclass_id.rb +1 -1
- data/lib/foreman_puppet/engine.rb +4 -36
- data/lib/foreman_puppet/register.rb +16 -47
- data/lib/foreman_puppet/version.rb +1 -1
- data/lib/foreman_puppet.rb +1 -6
- data/locale/en/LC_MESSAGES/foreman_puppet.mo +0 -0
- data/locale/en/foreman_puppet.edit.po +162 -317
- data/locale/en/foreman_puppet.po +62 -8
- data/locale/foreman_puppet.pot +215 -133
- data/locale/gemspec.rb +1 -1
- data/package.json +8 -11
- data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +0 -231
- data/test/controllers/foreman_puppet/api/v2/smart_proxies_controller_test.rb +255 -0
- data/test/controllers/foreman_puppet/environments_controller_test.rb +2 -2
- data/test/controllers/foreman_puppet/hosts_controller_test.rb +0 -1
- data/test/factories/foreman_puppet_factories.rb +0 -2
- data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +31 -70
- data/test/integration/foreman_puppet/host_js_test.rb +0 -1
- data/test/integration/foreman_puppet/puppetclass_js_test.rb +1 -1
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +1 -7
- data/test/models/foreman_puppet/host_test.rb +26 -0
- data/test/models/foreman_puppet/user_test.rb +1 -5
- data/test/unit/foreman_puppet/puppet_class_importer_test.rb +1 -1
- metadata +22 -13
- data/db/migrate/20211112130803_cleanup_environment_from_core_tables.foreman_puppet.rb +0 -10
- data/locale/cs_CZ/foreman_puppet.edit.po +0 -1085
- 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 :
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
-
|
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
|
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
|
-
|
17
|
-
|
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
|
@@ -1,11 +1,11 @@
|
|
1
|
-
class CreateEnvironments < ActiveRecord::Migration[
|
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,
|
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,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
|
-
|
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
|
-
#
|
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
|
+
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
|
-
|
29
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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/
|
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/
|
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
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
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
|
data/lib/foreman_puppet.rb
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
module ForemanPuppet
|
2
|
-
|
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'
|
Binary file
|