foreman_puppet 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +619 -0
- data/README.md +38 -0
- data/Rakefile +31 -0
- data/app/assets/stylesheets/foreman_puppet.scss +117 -0
- data/app/controllers/concerns/foreman_puppet/api/import_puppetclasses_common_controller.rb +139 -0
- data/app/controllers/concerns/foreman_puppet/environments_import.rb +61 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_hostgroups_controller.rb +40 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_template_combinations_controller.rb +23 -0
- data/app/controllers/concerns/foreman_puppet/extensions/api_v2_hosts_controller.rb +48 -0
- data/app/controllers/concerns/foreman_puppet/extensions/hostgroups_controller_extensions.rb +58 -0
- data/app/controllers/concerns/foreman_puppet/extensions/hosts_controller_extensions.rb +228 -0
- data/app/controllers/concerns/foreman_puppet/extensions/operatingsystems_controller.rb +11 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_host.rb +75 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_hostgroup.rb +70 -0
- data/app/controllers/concerns/foreman_puppet/extensions/parameters_template_combination.rb +21 -0
- data/app/controllers/concerns/foreman_puppet/parameters/config_group.rb +17 -0
- data/app/controllers/concerns/foreman_puppet/parameters/environment.rb +21 -0
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass.rb +24 -0
- data/app/controllers/concerns/foreman_puppet/parameters/puppetclass_lookup_key.rb +24 -0
- data/app/controllers/foreman_puppet/api/v2/base_controller.rb +26 -0
- data/app/controllers/foreman_puppet/api/v2/config_groups_controller.rb +57 -0
- data/app/controllers/foreman_puppet/api/v2/environments_controller.rb +91 -0
- data/app/controllers/foreman_puppet/api/v2/host_classes_controller.rb +59 -0
- data/app/controllers/foreman_puppet/api/v2/hostgroup_classes_controller.rb +46 -0
- data/app/controllers/foreman_puppet/api/v2/lookups_common_controller.rb +114 -0
- data/app/controllers/foreman_puppet/api/v2/override_values_controller.rb +99 -0
- data/app/controllers/foreman_puppet/api/v2/puppetclasses_controller.rb +99 -0
- data/app/controllers/foreman_puppet/api/v2/smart_class_parameters_controller.rb +76 -0
- data/app/controllers/foreman_puppet/config_groups_controller.rb +46 -0
- data/app/controllers/foreman_puppet/environments_controller.rb +51 -0
- data/app/controllers/foreman_puppet/puppet_smart_proxies_controller.rb +39 -0
- data/app/controllers/foreman_puppet/puppetclass_lookup_keys_controller.rb +33 -0
- data/app/controllers/foreman_puppet/puppetclasses_controller.rb +113 -0
- data/app/controllers/foreman_puppet/react_controller.rb +19 -0
- data/app/helpers/concerns/foreman_puppet/template_renderer_scope.rb +14 -0
- data/app/helpers/foreman_puppet/environments_helper.rb +17 -0
- data/app/helpers/foreman_puppet/hosts_and_hostgroups_helper.rb +96 -0
- data/app/helpers/foreman_puppet/hosts_helper.rb +32 -0
- data/app/helpers/foreman_puppet/puppet_smart_proxies_helper.rb +8 -0
- data/app/helpers/foreman_puppet/puppetclass_lookup_keys_helper.rb +135 -0
- data/app/helpers/foreman_puppet/puppetclasses_and_environments_helper.rb +55 -0
- data/app/helpers/foreman_puppet/puppetclasses_helper.rb +59 -0
- data/app/helpers/foreman_puppet/template_combinations_helper.rb +33 -0
- data/app/models/concerns/foreman_puppet/extensions/host.rb +88 -0
- data/app/models/concerns/foreman_puppet/extensions/hostgroup.rb +40 -0
- data/app/models/concerns/foreman_puppet/extensions/nic_managed.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/operatingsystem.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/provisioning_template.rb +64 -0
- data/app/models/concerns/foreman_puppet/extensions/report.rb +11 -0
- data/app/models/concerns/foreman_puppet/extensions/taxonomy.rb +19 -0
- data/app/models/concerns/foreman_puppet/extensions/template_combination.rb +23 -0
- data/app/models/concerns/foreman_puppet/extensions/user.rb +22 -0
- data/app/models/concerns/foreman_puppet/host_common.rb +90 -0
- data/app/models/concerns/foreman_puppet/puppet_lookup_value_extensions.rb +13 -0
- data/app/models/foreman_puppet/config_group.rb +45 -0
- data/app/models/foreman_puppet/config_group_class.rb +19 -0
- data/app/models/foreman_puppet/environment.rb +63 -0
- data/app/models/foreman_puppet/environment_class.rb +40 -0
- data/app/models/foreman_puppet/host_class.rb +23 -0
- data/app/models/foreman_puppet/host_config_group.rb +15 -0
- data/app/models/foreman_puppet/host_puppet_facet.rb +130 -0
- data/app/models/foreman_puppet/hostgroup_class.rb +23 -0
- data/app/models/foreman_puppet/hostgroup_puppet_facet.rb +98 -0
- data/app/models/foreman_puppet/puppetclass.rb +132 -0
- data/app/models/foreman_puppet/puppetclass_lookup_key.rb +58 -0
- data/app/services/foreman_puppet/host_info_providers/config_groups_info.rb +10 -0
- data/app/services/foreman_puppet/host_info_providers/puppet_info.rb +92 -0
- data/app/services/foreman_puppet/input_type/puppet_parameter_input.rb +35 -0
- data/app/services/foreman_puppet/proxy_status/puppet.rb +17 -0
- data/app/services/foreman_puppet/puppet_class_importer.rb +355 -0
- data/app/views/api/v2/template_combinations/base.json.erb +9 -0
- data/app/views/foreman_puppet/api/v2/config_groups/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/main.json.rabl +8 -0
- data/app/views/foreman_puppet/api/v2/config_groups/show.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/config_groups/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/environments/main.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/environments/show.json.rabl +15 -0
- data/app/views/foreman_puppet/api/v2/environments/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/base.json.rabl +1 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/host_single.json.rabl +17 -0
- data/app/views/foreman_puppet/api/v2/host_puppet_facets/show.json.rabl +11 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/base.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/hostgroup_single.json.rabl +16 -0
- data/app/views/foreman_puppet/api/v2/hostgroup_puppet_facets/show.json.rabl +11 -0
- data/app/views/foreman_puppet/api/v2/import_puppetclasses/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/import_puppetclasses/show.json.rabl +36 -0
- data/app/views/foreman_puppet/api/v2/override_values/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/show.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/override_values/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/base.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/index.json.rabl +4 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/list.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/main.json.rabl +5 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/show.json.rabl +15 -0
- data/app/views/foreman_puppet/api/v2/puppetclasses/update.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/base.json.rabl +4 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/create.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/destroy.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/index.json.rabl +3 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/main.json.rabl +23 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/show.json.rabl +19 -0
- data/app/views/foreman_puppet/api/v2/smart_class_parameters/update.json.rabl +3 -0
- data/app/views/foreman_puppet/config_groups/_config_group.html.erb +34 -0
- data/app/views/foreman_puppet/config_groups/_config_groups_selection.html.erb +36 -0
- data/app/views/foreman_puppet/config_groups/_form.html.erb +9 -0
- data/app/views/foreman_puppet/config_groups/edit.html.erb +3 -0
- data/app/views/foreman_puppet/config_groups/index.html.erb +31 -0
- data/app/views/foreman_puppet/config_groups/new.html.erb +3 -0
- data/app/views/foreman_puppet/config_groups/welcome.html.erb +12 -0
- data/app/views/foreman_puppet/environments/_form.html.erb +20 -0
- data/app/views/foreman_puppet/environments/edit.html.erb +8 -0
- data/app/views/foreman_puppet/environments/index.html.erb +32 -0
- data/app/views/foreman_puppet/environments/new.html.erb +7 -0
- data/app/views/foreman_puppet/environments/welcome.html.erb +16 -0
- data/app/views/foreman_puppet/layouts/application_react.html.erb +15 -0
- data/app/views/foreman_puppet/puppet_smart_proxies/_dashboard.html.erb +9 -0
- data/app/views/foreman_puppet/puppet_smart_proxies/_environments.html.erb +30 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/edit.html.erb +3 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/index.html.erb +22 -0
- data/app/views/foreman_puppet/puppetclass_lookup_keys/welcome.html.erb +9 -0
- data/app/views/foreman_puppet/puppetclasses/_class_parameters.html.erb +37 -0
- data/app/views/foreman_puppet/puppetclasses/_class_selection.html.erb +70 -0
- data/app/views/foreman_puppet/puppetclasses/_classes.html.erb +22 -0
- data/app/views/foreman_puppet/puppetclasses/_classes_in_groups.html.erb +5 -0
- data/app/views/foreman_puppet/puppetclasses/_classes_parameters.html.erb +16 -0
- data/app/views/foreman_puppet/puppetclasses/_form.html.erb +62 -0
- data/app/views/foreman_puppet/puppetclasses/_selected_classes.html.erb +4 -0
- data/app/views/foreman_puppet/puppetclasses/edit.html.erb +4 -0
- data/app/views/foreman_puppet/puppetclasses/index.html.erb +47 -0
- data/app/views/hosts/_form_puppet_enc_tab.html.erb +24 -0
- data/app/views/hosts/foreman_puppet/_form_main_tab_fields.html.erb +1 -0
- data/app/views/hosts/select_multiple_environment.html.erb +8 -0
- data/app/views/provisioning_templates/_combination.html.erb +5 -0
- data/app/views/provisioning_templates/_combinations.html.erb +6 -0
- data/app/views/smart_proxies/plugins/_puppet.html.erb +24 -0
- data/config/api_routes.rb +81 -0
- data/config/routes.rb +89 -0
- data/db/migrate/20101121140000_add_environment_to_template_combinations.foreman_puppet.rb +9 -0
- data/db/migrate/20200720123005_migrate_puppet_core_types.foreman_puppet.rb +19 -0
- data/db/migrate/20200722171017_create_host_puppet_facet.foreman_puppet.rb +10 -0
- data/db/migrate/20200803113531_create_hostgroup_puppet_facet.foreman_puppet.rb +10 -0
- data/db/migrate/20200803113803_migrate_environment_to_puppet_facet.foreman_puppet.rb +22 -0
- data/db/migrate/20200803113903_migrate_host_type_in_host_config_groups.foreman_puppet.rb +29 -0
- data/db/migrate/20201125113903_migrate_puppetclasses_to_facets.foreman_puppet.rb +47 -0
- data/db/migrate_foreman/20090722141107_create_environments.rb +17 -0
- data/db/migrate_foreman/20120905095532_create_environment_classes.rb +15 -0
- data/db/migrate_foreman/20140407161817_create_config_groups.rb +9 -0
- data/db/migrate_foreman/20140407162007_create_config_group_classes.rb +10 -0
- data/db/migrate_foreman/20140407162059_create_host_config_groups.rb +11 -0
- data/db/migrate_foreman/20161205142618_delete_orphaned_smart_class_parameters.rb +10 -0
- data/db/migrate_foreman/20170109115157_fix_lookup_key_auditable_type.rb +15 -0
- data/db/migrate_foreman/20180816134832_cast_lookup_key_values.rb +35 -0
- data/db/migrate_foreman/20181023112532_add_environment_puppetclass_id.rb +7 -0
- data/db/migrate_foreman/20181224174419_add_index_to_environment_class_by_lookup_key_and_puppetclass.rb +6 -0
- data/db/seeds.d/111_puppet_proxy_feature.rb +8 -0
- data/lib/foreman_puppet.rb +10 -0
- data/lib/foreman_puppet/engine.rb +82 -0
- data/lib/foreman_puppet/register.rb +218 -0
- data/lib/foreman_puppet/version.rb +3 -0
- data/lib/tasks/foreman_puppet_tasks.rake +31 -0
- data/locale/Makefile +60 -0
- data/locale/action_names.rb +5 -0
- data/locale/en/foreman_puppet.edit.po +911 -0
- data/locale/en/foreman_puppet.po +690 -0
- data/locale/en/foreman_puppet.po.time_stamp +0 -0
- data/locale/foreman_puppet.pot +1076 -0
- data/locale/gemspec.rb +2 -0
- data/test/controllers/foreman_puppet/api/v2/config_groups_controller_test.rb +28 -0
- data/test/controllers/foreman_puppet/api/v2/environments_controller_test.rb +346 -0
- data/test/controllers/foreman_puppet/api/v2/host_classes_controller_test.rb +48 -0
- data/test/controllers/foreman_puppet/api/v2/hostgroup_classes_controller_test.rb +41 -0
- data/test/controllers/foreman_puppet/api/v2/hostgroups_controller_test.rb +79 -0
- data/test/controllers/foreman_puppet/api/v2/hosts_controller_test.rb +101 -0
- data/test/controllers/foreman_puppet/api/v2/lookups_common_controller_test.rb +29 -0
- data/test/controllers/foreman_puppet/api/v2/override_values_controller_test.rb +169 -0
- data/test/controllers/foreman_puppet/api/v2/puppetclasses_controller_test.rb +144 -0
- data/test/controllers/foreman_puppet/api/v2/smart_class_parameters_controller_test.rb +557 -0
- data/test/controllers/foreman_puppet/api/v2/template_combinations_controller_test.rb +81 -0
- data/test/controllers/foreman_puppet/config_groups_controller_test.rb +47 -0
- data/test/controllers/foreman_puppet/environments_controller_test.rb +230 -0
- data/test/controllers/foreman_puppet/hostgroups_controller_test.rb +72 -0
- data/test/controllers/foreman_puppet/hosts_controller_test.rb +346 -0
- data/test/controllers/foreman_puppet/puppet_smart_proxies_controller_test.rb +29 -0
- data/test/controllers/foreman_puppet/puppetclass_lookup_keys_controller_test.rb +59 -0
- data/test/controllers/foreman_puppet/puppetclasses_controller_test.rb +235 -0
- data/test/controllers/provisioning_templates_controller_test.rb +70 -0
- data/test/factories/foreman_puppet_factories.rb +134 -0
- data/test/factories/host_puppet_enhancements.rb +61 -0
- data/test/factories/proxy_puppet_enhancements.rb +33 -0
- data/test/helpers/foreman_puppet/hosts_and_hostgroups_helper_test.rb +65 -0
- data/test/helpers/foreman_puppet/puppetclasses_helper_test.rb +33 -0
- data/test/integration/foreman_puppet/environment_js_test.rb +27 -0
- data/test/integration/foreman_puppet/host_js_test.rb +371 -0
- data/test/integration/foreman_puppet/hostgroup_js_test.rb +100 -0
- data/test/integration/foreman_puppet/puppetclass_js_test.rb +37 -0
- data/test/integration/foreman_puppet/smartclass_parameter_js_test.rb +84 -0
- data/test/models/foreman_puppet/config_group_class_test.rb +9 -0
- data/test/models/foreman_puppet/config_group_test.rb +8 -0
- data/test/models/foreman_puppet/environment_test.rb +92 -0
- data/test/models/foreman_puppet/host_config_group_test.rb +39 -0
- data/test/models/foreman_puppet/host_puppet_facet_test.rb +116 -0
- data/test/models/foreman_puppet/host_test.rb +288 -0
- data/test/models/foreman_puppet/hostgroup_puppet_facet_test.rb +200 -0
- data/test/models/foreman_puppet/hostgroup_test.rb +14 -0
- data/test/models/foreman_puppet/lookup_value_test.rb +69 -0
- data/test/models/foreman_puppet/provisioning_template_test.rb +124 -0
- data/test/models/foreman_puppet/puppetclass_lookup_key_test.rb +81 -0
- data/test/models/foreman_puppet/puppetclass_test.rb +144 -0
- data/test/models/foreman_puppet/smart_proxy_test.rb +28 -0
- data/test/qraphql/queries/host_puppet_query_test.rb +36 -0
- data/test/qraphql/queries/hostgroup_puppet_query_test.rb +36 -0
- data/test/services/foreman_puppet/host_info_providers/puppet_info_test.rb +791 -0
- data/test/services/foreman_puppet/input_type/puppet_parameter_input_test.rb +14 -0
- data/test/test_puppet_helper.rb +30 -0
- data/test/unit/foreman_puppet/access_permissions_test.rb +16 -0
- data/test/unit/foreman_puppet/puppet_class_importer_test.rb +247 -0
- data/test/unit/foreman_puppet/template_rendering_test.rb +20 -0
- data/test/unit/foreman_puppet_test.rb +11 -0
- data/webpack/__mocks__/foremanReact/common/I18n.js +7 -0
- data/webpack/__mocks__/foremanReact/components/Layout/LayoutActions.js +2 -0
- data/webpack/__mocks__/foremanReact/readme.md +11 -0
- data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +10 -0
- data/webpack/__mocks__/foremanReact/redux/API/index.js +10 -0
- data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
- data/webpack/__mocks__/foremanReact/redux/index.js +1 -0
- data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +5 -0
- data/webpack/fills_index.js +30 -0
- data/webpack/index.js +18 -0
- data/webpack/src/ForemanPuppet.js +11 -0
- data/webpack/src/Router/__snapshots__/routes.test.js.snap +3 -0
- data/webpack/src/Router/index.js +14 -0
- data/webpack/src/Router/routes.js +3 -0
- data/webpack/src/Router/routes.test.js +16 -0
- data/webpack/src/foreman_class_edit.js +224 -0
- data/webpack/src/foreman_puppet_host_form.js +140 -0
- data/webpack/src/foreman_puppet_host_form.test.js +65 -0
- data/webpack/src/index.js +1 -0
- data/webpack/src/reducers.js +7 -0
- metadata +340 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_puppet_helper'
|
2
|
+
|
3
|
+
module ForemanPuppet
|
4
|
+
module InputType
|
5
|
+
class PuppetParameterInputTest < ActiveSupport::TestCase
|
6
|
+
let(:template_input) { FactoryBot.build(:template_input) }
|
7
|
+
|
8
|
+
context 'puppet parameter input' do
|
9
|
+
before { template_input.input_type = 'puppet_parameter' }
|
10
|
+
it { assert_equal template_input.input_type_instance.class.humanized_name, _('Puppet parameter') }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# This calls the main test_helper in Foreman-core
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
# Add plugin to FactoryBot's paths
|
5
|
+
FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
|
6
|
+
FactoryBot.reload
|
7
|
+
|
8
|
+
# rubocop:disable Style/ClassAndModuleChildren
|
9
|
+
class ActionController::TestCase
|
10
|
+
# used in basic_rest_response_test and is undefined with our paths
|
11
|
+
def root_url
|
12
|
+
'/'
|
13
|
+
end
|
14
|
+
|
15
|
+
def json_response
|
16
|
+
ActiveSupport::JSON.decode(@response.body)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
# rubocop:enable Style/ClassAndModuleChildren
|
20
|
+
|
21
|
+
module ForemanPuppet
|
22
|
+
module StubPuppetProxyFeature
|
23
|
+
def stub_smart_proxy_v2_features_and_statuses
|
24
|
+
super
|
25
|
+
ForemanPuppet::ProxyStatus::Puppet.any_instance.stubs(:environment_stats).returns({})
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
ActiveSupport::TestCase.prepend(ForemanPuppet::StubPuppetProxyFeature)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_puppet_helper'
|
2
|
+
require 'unit/shared/access_permissions_test_base'
|
3
|
+
|
4
|
+
# Permissions are added in AccessPermissions with lists of controllers and
|
5
|
+
# actions that they enable access to. For non-admin users, we need to test
|
6
|
+
# that there are permissions available that cover every controller action, else
|
7
|
+
# it can't be delegated and this will lead to parts of the application that
|
8
|
+
# aren't functional for non-admin users.
|
9
|
+
#
|
10
|
+
# In particular, it's important that actions for AJAX requests are added to
|
11
|
+
# an appropriate permission so views using those requests function.
|
12
|
+
class AccessPermissionsTest < ActiveSupport::TestCase
|
13
|
+
include AccessPermissionsTestBase
|
14
|
+
|
15
|
+
check_routes(ForemanPuppet::Engine.routes, [])
|
16
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
require 'test_puppet_helper'
|
2
|
+
|
3
|
+
module ForemanPuppet
|
4
|
+
class PuppetClassImporterTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(%w[foreman-testing foreman-testing-1])
|
7
|
+
ProxyAPI::Puppet.any_instance.stubs(:classes).returns(mocked_classes)
|
8
|
+
User.current = users(:admin)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:proxy) { FactoryBot.create(:puppet_smart_proxy) }
|
12
|
+
let(:importer) { PuppetClassImporter.new(url: proxy.url) }
|
13
|
+
let(:importer_with_proxy_api) do
|
14
|
+
classes = {
|
15
|
+
'ignored-class' => {},
|
16
|
+
'not-ignored-class' => {},
|
17
|
+
}
|
18
|
+
proxy_api = ProxyAPI::Puppet.new(url: proxy.url)
|
19
|
+
proxy_api.stubs(:classes).returns(classes)
|
20
|
+
PuppetClassImporter.new(proxy: proxy_api)
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'should support providing proxy' do
|
24
|
+
klass = PuppetClassImporter.new(proxy: ProxyAPI::Puppet.new(url: proxy.url))
|
25
|
+
assert_kind_of ProxyAPI::Puppet, klass.send(:proxy)
|
26
|
+
end
|
27
|
+
|
28
|
+
test 'should support providing url' do
|
29
|
+
klass = PuppetClassImporter.new(url: proxy.url)
|
30
|
+
assert_kind_of ProxyAPI::Puppet, klass.send(:proxy)
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#changes' do
|
34
|
+
context 'a sepecific environment is set' do
|
35
|
+
let(:importer) { PuppetClassImporter.new(url: proxy.url, env: 'foreman-testing') }
|
36
|
+
|
37
|
+
test 'should contain only the specified environment in changes' do
|
38
|
+
changes = importer.changes['new']
|
39
|
+
|
40
|
+
assert_includes changes, 'foreman-testing'
|
41
|
+
assert_not_includes changes, 'foreman-testing-1'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'has ignored environments' do
|
46
|
+
test 'it returns them' do
|
47
|
+
importer.stubs(:ignored_environments).returns(['ignored-env'])
|
48
|
+
|
49
|
+
assert_not_nil importer.changes['ignored']
|
50
|
+
assert_not_nil importer.changes['ignored']['ignored-env']
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#changes_for_environment' do
|
56
|
+
test 'it calls for new, updated, obsolete and ignored classes' do
|
57
|
+
environment_name = 'foreman-testing'
|
58
|
+
changes = { 'new' => {}, 'obsolete' => {}, 'updated' => {}, 'ignored' => {} }
|
59
|
+
|
60
|
+
importer.expects(:updated_classes_for).with(environment_name).once.returns({})
|
61
|
+
importer.expects(:new_classes_for).with(environment_name).once.returns({})
|
62
|
+
importer.expects(:removed_classes_for).with(environment_name).once.returns({})
|
63
|
+
importer.expects(:ignored_classes_for).with(environment_name).once.returns({})
|
64
|
+
|
65
|
+
importer.changes_for_environment(environment_name, changes)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#ignored_classes_for' do
|
70
|
+
test 'returns an array of classes' do
|
71
|
+
environment = 'foreman-testing'
|
72
|
+
importer_with_proxy_api.stubs(:ignored_classes).returns([Regexp.new(/^ignored-class$/)])
|
73
|
+
assert_equal ['ignored-class'], importer_with_proxy_api.ignored_classes_for(environment)
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'has ignored environments' do
|
77
|
+
test 'it returns them' do
|
78
|
+
importer.stubs(:ignored_environments).returns(['ignored-env'])
|
79
|
+
|
80
|
+
assert_not_nil importer.changes['ignored']
|
81
|
+
assert_not_nil importer.changes['ignored']['ignored-env']
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#changes_for_environment' do
|
87
|
+
test 'it calls for new, updated, obsolete and ignored classes' do
|
88
|
+
environment_name = 'foreman-testing'
|
89
|
+
changes = { 'new' => {}, 'obsolete' => {}, 'updated' => {}, 'ignored' => {} }
|
90
|
+
|
91
|
+
importer.expects(:updated_classes_for).with(environment_name).once.returns({})
|
92
|
+
importer.expects(:new_classes_for).with(environment_name).once.returns({})
|
93
|
+
importer.expects(:removed_classes_for).with(environment_name).once.returns({})
|
94
|
+
importer.expects(:ignored_classes_for).with(environment_name).once.returns({})
|
95
|
+
|
96
|
+
importer.changes_for_environment(environment_name, changes)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#ignored_boolean_environment_names?' do
|
101
|
+
test 'is true when an environment name is resulting in "true"' do
|
102
|
+
importer_with_proxy_api.stubs(:ignored_environments).returns([true, 'test', 'another'])
|
103
|
+
assert importer_with_proxy_api.ignored_boolean_environment_names?
|
104
|
+
end
|
105
|
+
|
106
|
+
test 'is true when an environment name is resulting in "false"' do
|
107
|
+
importer_with_proxy_api.stubs(:ignored_environments).returns([false, 'test'])
|
108
|
+
assert importer_with_proxy_api.ignored_boolean_environment_names?
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
test 'should return list of envs' do
|
113
|
+
assert_kind_of Array, importer.db_environments
|
114
|
+
end
|
115
|
+
|
116
|
+
test 'should return list of actual puppet envs' do
|
117
|
+
assert_kind_of Array, importer.actual_environments
|
118
|
+
end
|
119
|
+
|
120
|
+
test 'should return list of classes' do
|
121
|
+
assert_kind_of ActiveRecord::Relation, importer.db_classes(importer.db_environments.first)
|
122
|
+
end
|
123
|
+
|
124
|
+
test 'should return list of actual puppet classes' do
|
125
|
+
assert_kind_of Hash, importer.actual_classes(importer.actual_environments.first)
|
126
|
+
end
|
127
|
+
|
128
|
+
test 'should obey config/ignored_environments.yml' do
|
129
|
+
as_admin do
|
130
|
+
hostgroups(:inherited).destroy # needs to be deleted first, since it has ancestry
|
131
|
+
Hostgroup.destroy_all # to satisfy FK contraints when deleting Environments
|
132
|
+
Environment.destroy_all
|
133
|
+
end
|
134
|
+
|
135
|
+
importer.stubs(:ignored_environments).returns(['foreman-testing'])
|
136
|
+
assert_not importer.actual_environments.include?('foreman-testing')
|
137
|
+
end
|
138
|
+
|
139
|
+
test 'should save parameter when importing with a different default_value' do
|
140
|
+
env = FactoryBot.build(:environment)
|
141
|
+
pc = FactoryBot.build(:puppetclass, environments: [env])
|
142
|
+
lk = FactoryBot.build(:puppetclass_lookup_key, default_value: 'first', puppetclass: pc)
|
143
|
+
|
144
|
+
updated = importer.send(:update_classes_in_foreman, env.name,
|
145
|
+
{ pc.name => { 'updated' => [lk.key] } })
|
146
|
+
assert_not_nil updated
|
147
|
+
end
|
148
|
+
|
149
|
+
test 'should not override parameter when default_value is empty' do
|
150
|
+
env = FactoryBot.create(:environment)
|
151
|
+
pc = FactoryBot.create(:puppetclass, environments: [env])
|
152
|
+
|
153
|
+
importer.send(:update_classes_in_foreman, env.name,
|
154
|
+
{ pc.name => { 'new' => { 'test_nil_param' => nil } } })
|
155
|
+
lk = PuppetclassLookupKey.where(key: 'test_nil_param').first
|
156
|
+
assert_not lk.override
|
157
|
+
assert_not lk.required
|
158
|
+
end
|
159
|
+
|
160
|
+
test 'should change default_value when importing from 2 environments' do
|
161
|
+
envs = FactoryBot.create_list(:environment, 2)
|
162
|
+
pc = FactoryBot.create(:puppetclass, environments: envs)
|
163
|
+
|
164
|
+
importer.send(:update_classes_in_foreman, envs.first.name,
|
165
|
+
{ pc.name => { 'new' => { '2_env_param' => 'first' } } })
|
166
|
+
assert_equal 'first', PuppetclassLookupKey.where(key: '2_env_param').first.default_value
|
167
|
+
|
168
|
+
importer.send(:update_classes_in_foreman, envs.last.name,
|
169
|
+
{ pc.name => { 'updated' => { '2_env_param' => 'last' } } })
|
170
|
+
assert_equal 'last', PuppetclassLookupKey.where(key: '2_env_param').first.default_value
|
171
|
+
end
|
172
|
+
|
173
|
+
context '#update_classes_in_foreman removes parameters' do
|
174
|
+
let(:environments) { FactoryBot.create_list(:environment, 2) }
|
175
|
+
let(:puppetclass) { FactoryBot.create(:puppetclass, environments: environments) }
|
176
|
+
|
177
|
+
test 'from one environment' do
|
178
|
+
lks = FactoryBot.create_list(:puppetclass_lookup_key, 2, puppetclass: puppetclass)
|
179
|
+
importer.send(:update_classes_in_foreman, environments.first.name,
|
180
|
+
{ puppetclass.name => { 'obsolete' => [lks.first.key] } })
|
181
|
+
assert_equal [environments.last], lks.first.environments
|
182
|
+
assert_equal environments.to_a.sort, lks.last.environments.to_a.sort
|
183
|
+
end
|
184
|
+
|
185
|
+
test 'when overridden' do
|
186
|
+
lks = FactoryBot.create_list(:puppetclass_lookup_key, 2, :with_override, puppetclass: puppetclass)
|
187
|
+
importer.send(:update_classes_in_foreman, environments.first.name,
|
188
|
+
{ puppetclass.name => { 'obsolete' => [lks.first.key] } })
|
189
|
+
assert_equal [environments.last], lks.first.environments
|
190
|
+
assert_equal environments.to_a.sort, lks.last.environments.sort
|
191
|
+
end
|
192
|
+
|
193
|
+
test 'deletes the key from all environments' do
|
194
|
+
lks = FactoryBot.create_list(:puppetclass_lookup_key, 2, :with_override, puppetclass: puppetclass)
|
195
|
+
lval = lks.first.lookup_values.first
|
196
|
+
importer.send(:update_classes_in_foreman, environments.first.name,
|
197
|
+
{ puppetclass.name => { 'obsolete' => [lks.first.key] } })
|
198
|
+
importer.send(:update_classes_in_foreman, environments.last.name,
|
199
|
+
{ puppetclass.name => { 'obsolete' => [lks.first.key] } })
|
200
|
+
assert_not PuppetclassLookupKey.find_by(id: lks.first.id)
|
201
|
+
assert_not LookupValue.find_by(id: lval.id)
|
202
|
+
assert_equal environments.to_a.sort, lks.last.environments.to_a.sort
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
test 'should detect correct environments for import' do
|
207
|
+
org_a = FactoryBot.create(:organization, name: 'OrgA')
|
208
|
+
loc_a = FactoryBot.create(:location, name: 'LocA')
|
209
|
+
org_b = FactoryBot.create(:organization, name: 'OrgB')
|
210
|
+
loc_b = FactoryBot.create(:location, name: 'LocB')
|
211
|
+
b_role = roles(:manager).clone name: 'b_role'
|
212
|
+
b_role.add_permissions! %i[destroy_external_parameters edit_external_parameters create_external_parameters view_external_parameters]
|
213
|
+
a_user = FactoryBot.create(:user, organizations: [org_a], locations: [loc_a], roles: [roles(:manager)], login: 'a_user')
|
214
|
+
b_user = FactoryBot.create(:user, organizations: [org_b], locations: [loc_b], roles: [b_role], login: 'b_user')
|
215
|
+
proxy = FactoryBot.build(:puppet_smart_proxy, organizations: [org_a, org_b], locations: [loc_a, loc_b])
|
216
|
+
importer = PuppetClassImporter.new(url: proxy.url)
|
217
|
+
FactoryBot.create(:environment, name: 'env_a', organizations: [org_a], locations: [loc_a])
|
218
|
+
ProxyAPI::Puppet.any_instance.stubs(:environments).returns(%w[env_a b_env_new])
|
219
|
+
User.current = b_user
|
220
|
+
changes = importer.changes
|
221
|
+
|
222
|
+
assert changes['new']['b_env_new']
|
223
|
+
assert_not changes['new']['env_a']
|
224
|
+
assert_not changes['updated']['env_a']
|
225
|
+
|
226
|
+
changes['new']['b_env_new'] = changes['new']['b_env_new'].to_json
|
227
|
+
|
228
|
+
importer.obsolete_and_new(changes)
|
229
|
+
assert Environment.find_by(name: 'b_env_new')
|
230
|
+
User.current = a_user
|
231
|
+
assert_not Environment.find_by(name: 'b_env_new')
|
232
|
+
end
|
233
|
+
|
234
|
+
private
|
235
|
+
|
236
|
+
def mocked_classes
|
237
|
+
pcs = [{
|
238
|
+
'apache::service' => {
|
239
|
+
'name' => 'service',
|
240
|
+
'params' => { 'port' => '80', 'version' => '2.0' },
|
241
|
+
'module' => 'apache',
|
242
|
+
},
|
243
|
+
}]
|
244
|
+
Hash[pcs.map { |k| [k.keys.first, Foreman::ImporterPuppetclass.new(k.values.first)] }]
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_puppet_helper'
|
2
|
+
|
3
|
+
module ForemanPuppet
|
4
|
+
class TemplateRenderingTest < ActiveSupport::TestCase
|
5
|
+
let(:host) { FactoryBot.build_stubbed(:host, :with_puppet_enc) }
|
6
|
+
let(:template) { OpenStruct.new(name: 'Test', template: 'Test') }
|
7
|
+
let(:source) { Foreman::Renderer::Source::Database.new(template) }
|
8
|
+
let(:scope) do
|
9
|
+
Class.new(Foreman::Renderer::Scope::Base) do
|
10
|
+
include Foreman::Renderer::Scope::Macros::HostTemplate
|
11
|
+
end.send(:new, host: host, source: source)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#host_puppet_classes' do
|
15
|
+
test 'should render puppetclasses using host_puppetclasses helper' do
|
16
|
+
assert_equal host.puppet.puppetclasses.pluck(:id), scope.host_puppet_classes.map(&:id)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
For testing components which have imported foreman-core components,
|
2
|
+
a mock file is required in this folder.
|
3
|
+
|
4
|
+
### Example: Mocking ForemanModal component
|
5
|
+
```js
|
6
|
+
// __mocks__/foremanReact/components/ForemanModal/index.js
|
7
|
+
const ForemanModal = () => jest.fn();
|
8
|
+
ForemanModal.Header = () => jest.fn();
|
9
|
+
ForemanModal.Footer = () => jest.fn();
|
10
|
+
export default ForemanModal;
|
11
|
+
```
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export const selectAPIResponse = (state, key) => ({
|
2
|
+
data: {
|
3
|
+
text: 'some-data',
|
4
|
+
key,
|
5
|
+
},
|
6
|
+
});
|
7
|
+
|
8
|
+
export const selectAPIStatus = (state, key) => 'PENDING';
|
9
|
+
export const selectAPIByKey = (state, key) => state[key];
|
10
|
+
export const selectAPIError = (state, key) => ({ error: `${key} ERRROR` });
|
@@ -0,0 +1 @@
|
|
1
|
+
export const store = { dispatch: jest.fn() };
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import $ from 'jquery';
|
2
|
+
|
3
|
+
import * as classEditor from './src/foreman_class_edit';
|
4
|
+
import * as hostForm from './src/foreman_puppet_host_form';
|
5
|
+
|
6
|
+
window.tfm = Object.assign(window.tfm || {}, {
|
7
|
+
classEditor,
|
8
|
+
puppetEnc: {
|
9
|
+
hostForm,
|
10
|
+
},
|
11
|
+
});
|
12
|
+
|
13
|
+
// TODO: the checkForUnavailablePuppetclasses is very nasty
|
14
|
+
$(document)
|
15
|
+
.on('change', '.hostgroup-select', evt => {
|
16
|
+
const form = $('form.host-form')[0];
|
17
|
+
if (form && form.dataset.id) hostForm.updatePuppetclasses(evt.target);
|
18
|
+
})
|
19
|
+
.on('change', '.interface_domain', evt => {
|
20
|
+
hostForm.reloadPuppetclassParams();
|
21
|
+
})
|
22
|
+
.on('change', '.host-architecture-os-select', evt => {
|
23
|
+
hostForm.reloadPuppetclassParams();
|
24
|
+
})
|
25
|
+
.on('ContentLoad', evt => {
|
26
|
+
hostForm.checkForUnavailablePuppetclasses();
|
27
|
+
});
|
28
|
+
$(window).on('load', evt => {
|
29
|
+
hostForm.checkForUnavailablePuppetclasses();
|
30
|
+
});
|