foreman_puppet 0.0.1
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 +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
|
+
});
|