foreman_m2 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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +48 -0
  4. data/Rakefile +47 -0
  5. data/app/controllers/foreman_m2/hosts_controller.rb +19 -0
  6. data/app/helpers/concerns/foreman_m2/hosts_helper_extensions.rb +12 -0
  7. data/app/helpers/concerns/foreman_m2/images_helper_extensions.rb +24 -0
  8. data/app/lib/proxy_api/m2.rb +35 -0
  9. data/app/models/concerns/foreman_m2/compute_resource_extensions.rb +23 -0
  10. data/app/models/concerns/foreman_m2/host_extensions.rb +110 -0
  11. data/app/models/concerns/foreman_m2/host_orchestration_extensions.rb +52 -0
  12. data/app/models/concerns/foreman_m2/nic_extensions.rb +17 -0
  13. data/app/models/concerns/foreman_m2/nic_orchestration_extensions.rb +75 -0
  14. data/app/models/foreman_m2/m2.rb +20 -0
  15. data/app/overrides/give_ids.rb +14 -0
  16. data/app/overrides/hybrid_js.rb +4 -0
  17. data/app/overrides/update_media_selection.rb +6 -0
  18. data/app/views/compute_resources/edit/_m2.html.erb +0 -0
  19. data/app/views/compute_resources/form/_m2.html.erb +1 -0
  20. data/app/views/compute_resources/show/_m2.html.erb +0 -0
  21. data/app/views/compute_resources_vms/form/m2/_base.html.erb +16 -0
  22. data/app/views/dashboard/_foreman_m2_widget.erb +2 -0
  23. data/app/views/foreman_m2/hosts/hosts/new_action.html.erb +1 -0
  24. data/app/views/foreman_m2/hosts/new_action.html.erb +15 -0
  25. data/app/views/foreman_m2/layouts/layouts/new_layout.html.erb +0 -0
  26. data/app/views/foreman_m2/layouts/new_layout.html.erb +0 -0
  27. data/app/views/hosts/provisioning_method/hybrid/_form.html.erb +6 -0
  28. data/app/views/images/form/_m2.html.erb +6 -0
  29. data/app/views/overrides/host_creation/_add_bm_div.html.erb +12 -0
  30. data/app/views/overrides/host_creation/_add_hybrid_js.html.erb +85 -0
  31. data/app/views/overrides/host_creation/_add_ptable_div.html.erb +4 -0
  32. data/app/views/overrides/image_selection/_host_media_type_select.html.erb +28 -0
  33. data/app/views/unattended/provisioning_templates/PXELinux/m2_default_pxelinux.erb +18 -0
  34. data/app/views/unattended/provisioning_templates/iPXE/m2_default_ipxe.erb +22 -0
  35. data/config/routes.rb +3 -0
  36. data/db/seeds.d/071-m2_prov_templates.rb +59 -0
  37. data/db/seeds.d/111-m2_sp_features.rb +6 -0
  38. data/lib/foreman_m2/engine.rb +80 -0
  39. data/lib/foreman_m2/version.rb +3 -0
  40. data/lib/foreman_m2.rb +5 -0
  41. data/lib/tasks/foreman_m2_tasks.rake +47 -0
  42. data/locale/Makefile +60 -0
  43. data/locale/en/foreman_m2.po +19 -0
  44. data/locale/foreman_m2.pot +19 -0
  45. data/locale/gemspec.rb +2 -0
  46. data/test/factories/foreman_m2_factories.rb +2 -0
  47. data/test/test_plugin_helper.rb +7 -0
  48. data/test/unit/foreman_m2_test.rb +11 -0
  49. metadata +136 -0
@@ -0,0 +1,28 @@
1
+ <% media_selection = using_hostgroups_page? ? use_install_media(@hostgroup) : use_install_media(@host, :selected_host_group => @hostgroup)
2
+ install_media_radio = media_selection ? 'checked="checked"':''
3
+ synced_content_radio = media_selection ? '' : 'checked="checked"'
4
+ install_media_disabled = os_media.empty? ? 'disabled = true' : ''
5
+ kickstart_options = using_hostgroups_page? ? kickstart_repository_options(@hostgroup) : kickstart_repository_options(@host, :selected_host_group => @hostgroup)
6
+ synced_content_disabled = kickstart_options.empty? ? 'disabled = true' : ''
7
+ %>
8
+
9
+ <div class="clear-fix" id="media_selection_section">
10
+ <div class="form-group ">
11
+ <label class="col-md-2 control-label" for="use_install_media">Media Selection</label>
12
+ <div class="col-md-4">
13
+ <label class="radio-inline">
14
+ <input data-media-selector="true" id="host_use_synced_content" name="media_selector" value="synced_content" type="radio" <%= synced_content_radio %> <%= synced_content_disabled %>/> <%= _('Synced Content') %>
15
+ </label>
16
+ <label class="radio-inline">
17
+ <input data-media-selector="true" id="host_use_install_media" name="media_selector" value="install_media" type="radio" <%= install_media_radio %> <%= install_media_disabled %>/> <%= _('All Media') %>
18
+ </label>
19
+ <label class="radio-inline">
20
+ <input data-media-selector="true" id="host_use_m2_media" name="media_selector" value="m2_media" type="radio" <%= synced_content_radio %> <%= synced_content_disabled %>/> <%= _('M2 Media') %>
21
+ </label>
22
+ <span class="help-block">
23
+ <%= _("Select the installation media that will be used to provision this host. Choose 'Synced Content' for Synced Kickstart Repositories or 'All Media' for other media.") %>
24
+ </span>
25
+ </div>
26
+ <span class="help-block help-inline"></span>
27
+ </div>
28
+ </div>
@@ -0,0 +1,18 @@
1
+ <%#
2
+ kind: PXELinux
3
+ name: M2 default PXELinux
4
+ model: ProvisioningTemplate
5
+ %>
6
+ <%#
7
+ Chainboots iPXE/gPXE from PXELinux. Make sure the OS has iPXE template
8
+ associated and file ipxe.lkrn was copied in the TFTP directory (e.g. from
9
+ /usr/share/ipxe/ipxe.lkrn or iPXE project web site).
10
+
11
+ For more info visit:
12
+ http://projects.theforeman.org/projects/foreman/wiki/Fetch_boot_files_via_http_instead_of_TFTP
13
+ %>
14
+ DEFAULT linux
15
+ LABEL linux
16
+ KERNEL ipxe.lkrn
17
+ APPEND sleep 23 && dhcp && chain <%= foreman_url('iPXE') %>
18
+ IPAPPEND 2
@@ -0,0 +1,22 @@
1
+ #!gpxe
2
+ <%#
3
+ kind: iPXE
4
+ name: M2 default iPXE
5
+ model: ProvisioningTemplate
6
+ oses:
7
+ -All
8
+ %>
9
+ <% subnet = @host.subnet -%>
10
+ <% if subnet.respond_to?(:dhcp_boot_mode?) && subnet.dhcp_boot_mode? -%>
11
+ <% static = '' -%>
12
+ <% else -%>
13
+ <% static_arg = 'static=yes' -%>
14
+ <% static = (@host.token.nil? ? '?' : '&') + static_arg -%>
15
+ <% end -%>
16
+
17
+ # Assuming we're using the M2 PXELinux BIOS template...
18
+
19
+ #sleep 23
20
+ set keep-san 1
21
+ sanboot --keep <%= @host.iscsi_target %> || shell
22
+ boot
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ get 'new_action', to: 'foreman_m2/hosts#new_action'
3
+ end
@@ -0,0 +1,59 @@
1
+ # Provisioning templates
2
+ pxelinux_kind = TemplateKind.unscoped.where(:name => 'PXELinux').first_or_create
3
+ ipxe_kind = TemplateKind.unscoped.where(:name => 'iPXE').first_or_create
4
+ organizations = Organization.unscoped.all
5
+ locations = Location.unscoped.all
6
+ created = []
7
+
8
+ ProvisioningTemplate.without_auditing do
9
+ contents_pxelinux = File.read(File.join(ForemanM2::Engine.root, 'app',
10
+ 'views', 'unattended',
11
+ 'provisioning_templates', 'PXELinux',
12
+ 'm2_default_pxelinux.erb'))
13
+ created << 'M2 default PXELinux' unless
14
+ ProvisioningTemplate.find_by(name: 'M2 default PXELinux')
15
+ temp_pxelinux = ProvisioningTemplate.unscoped
16
+ .where(:name => 'M2 default PXELinux')
17
+ .first_or_create do |template|
18
+ template.attributes = {
19
+ :template_kind_id => pxelinux_kind.id,
20
+ :snippet => false,
21
+ :template => contents_pxelinux
22
+ }
23
+ end
24
+ temp_pxelinux.attributes = {
25
+ :template => contents_pxelinux,
26
+ :default => true,
27
+ :vendor => 'Foreman M2'
28
+ }
29
+ temp_pxelinux.locked = true
30
+ temp_pxelinux.save!(:validate => false) if temp_pxelinux.changes.present?
31
+
32
+ contents_ipxe = File.read(File.join(ForemanM2::Engine.root, 'app',
33
+ 'views', 'unattended',
34
+ 'provisioning_templates', 'iPXE',
35
+ 'm2_default_ipxe.erb'))
36
+ created << 'M2 default iPXE' unless
37
+ ProvisioningTemplate.find_by(name: 'M2 default iPXE')
38
+ temp_ipxe = ProvisioningTemplate.unscoped.where(:name => 'M2 default iPXE')
39
+ .first_or_create do |template|
40
+ template.attributes = {
41
+ :template_kind_id => ipxe_kind.id,
42
+ :snippet => false,
43
+ :template => contents_ipxe
44
+ }
45
+ end
46
+ temp_ipxe.attributes = {
47
+ :template => contents_ipxe,
48
+ :default => true,
49
+ :vendor => 'Foreman M2'
50
+ }
51
+ temp_ipxe.locked = true
52
+ temp_ipxe.save!(:validate => false) if temp_ipxe.changes.present?
53
+
54
+ ProvisioningTemplate.unscoped.where(:name => created,
55
+ :default => true).each do |template|
56
+ template.organizations = organizations if SETTINGS[:organizations_enabled]
57
+ template.locations = locations if SETTINGS[:locations_enabled]
58
+ end
59
+ end
@@ -0,0 +1,6 @@
1
+ # Proxy features
2
+ ['M2'].each do |input|
3
+ f = Feature.where(:name => input).first_or_create
4
+ raise "Unable to create proxy feature: #{format_errors f}" \
5
+ if f.nil? || f.errors.any?
6
+ end
@@ -0,0 +1,80 @@
1
+ module ForemanM2
2
+ # class BareMetalM2 < ComputeResource
3
+ # end
4
+
5
+ class Engine < ::Rails::Engine
6
+ engine_name 'foreman_m2'
7
+
8
+ config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
9
+ config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
10
+ config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
11
+ config.autoload_paths += Dir["#{config.root}/app/models/foreman_m2"]
12
+ config.autoload_paths += Dir["#{config.root}/app/overrides"]
13
+
14
+ # Add any db migrations
15
+ initializer 'foreman_m2.load_app_instance_data' do |app|
16
+ ForemanM2::Engine.paths['db/migrate'].existent.each do |path|
17
+ app.config.paths['db/migrate'] << path
18
+ end
19
+ end
20
+
21
+ initializer 'foreman_m2.register_plugin',
22
+ :before => :finisher_hook do |_app|
23
+ Foreman::Plugin.register :foreman_m2 do
24
+ requires_foreman '>= 1.16'
25
+
26
+ compute_resource M2
27
+ parameter_filter ComputeResource, :url, :user, :password
28
+
29
+ # Add permissions
30
+ security_block :foreman_m2 do
31
+ permission :view_foreman_m2, :'foreman_m2/hosts' => [:new_action]
32
+ end
33
+
34
+ # Add a new role called 'Discovery' if it doesn't exist
35
+ role 'ForemanM2', [:view_foreman_m2]
36
+
37
+ # add menu entry
38
+ menu :top_menu, :template,
39
+ url_hash: { controller: :'foreman_m2/hosts', action: :new_action },
40
+ caption: 'ForemanM2',
41
+ parent: :hosts_menu,
42
+ after: :hosts
43
+
44
+ # add dashboard widget
45
+ widget 'foreman_m2_widget', name: N_('Foreman plugin template widget'),
46
+ sizex: 4, sizey: 1
47
+
48
+ provision_method 'hybrid', 'Network & Image Based'
49
+ end
50
+ end
51
+
52
+ # Include concerns in this config.to_prepare block
53
+ config.to_prepare do
54
+ begin
55
+ ComputeResource.send(:prepend, ForemanM2::ComputeResourceExtensions)
56
+ Host::Managed.send(:prepend, ForemanM2::HostExtensions)
57
+ Nic::Managed.send(:prepend, ForemanM2::NicOrchestrationExtensions)
58
+ Nic::Managed.send(:prepend, ForemanM2::NicExtensions)
59
+ Host::Managed.send(:prepend, ForemanM2::HostOrchestrationExtensions)
60
+ HostsHelper.send(:include, ForemanM2::HostsHelperExtensions)
61
+ ImagesHelper.send(:prepend, ForemanM2::ImagesHelperExtensions)
62
+ rescue StandardError => e
63
+ Rails.logger.warn "ForemanM2: skipping engine hook (#{e})"
64
+ end
65
+ end
66
+
67
+ rake_tasks do
68
+ Rake::Task['db:seed'].enhance do
69
+ ForemanM2::Engine.load_seed
70
+ end
71
+ end
72
+
73
+ initializer 'foreman_m2.register_gettext',
74
+ after: :load_config_initializers do |_app|
75
+ locale_dir = File.join(File.expand_path('../..', __dir__), 'locale')
76
+ locale_domain = 'foreman_m2'
77
+ Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,3 @@
1
+ module ForemanM2
2
+ VERSION = '0.0.1'.freeze
3
+ end
data/lib/foreman_m2.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'foreman_m2/engine'
2
+ require 'deface'
3
+
4
+ module ForemanM2
5
+ end
@@ -0,0 +1,47 @@
1
+ require 'rake/testtask'
2
+
3
+ # Tasks
4
+ namespace :foreman_m2 do
5
+ namespace :example do
6
+ desc 'Example Task'
7
+ task task: :environment do
8
+ # Task goes here
9
+ end
10
+ end
11
+ end
12
+
13
+ # Tests
14
+ namespace :test do
15
+ desc 'Test ForemanM2'
16
+ Rake::TestTask.new(:foreman_m2) do |t|
17
+ test_dir = File.join(File.dirname(__FILE__), '../..', 'test')
18
+ t.libs << ['test', test_dir]
19
+ t.pattern = "#{test_dir}/**/*_test.rb"
20
+ t.verbose = true
21
+ t.warning = false
22
+ end
23
+ end
24
+
25
+ namespace :foreman_m2 do
26
+ task :rubocop do
27
+ begin
28
+ require 'rubocop/rake_task'
29
+ RuboCop::RakeTask.new(:rubocop_foreman_m2) do |task|
30
+ task.patterns = ["#{ForemanM2::Engine.root}/app/**/*.rb",
31
+ "#{ForemanM2::Engine.root}/lib/**/*.rb",
32
+ "#{ForemanM2::Engine.root}/test/**/*.rb"]
33
+ end
34
+ rescue StandardError
35
+ puts 'Rubocop not loaded.'
36
+ end
37
+
38
+ Rake::Task['rubocop_foreman_m2'].invoke
39
+ end
40
+ end
41
+
42
+ Rake::Task[:test].enhance ['test:foreman_m2']
43
+
44
+ load 'tasks/jenkins.rake'
45
+ if Rake::Task.task_defined?(:'jenkins:unit')
46
+ Rake::Task['jenkins:unit'].enhance ['test:foreman_m2', 'foreman_m2:rubocop']
47
+ end
data/locale/Makefile ADDED
@@ -0,0 +1,60 @@
1
+ #
2
+ # Makefile for PO merging and MO generation. More info in the README.
3
+ #
4
+ # make all-mo (default) - generate MO files
5
+ # make check - check translations using translate-tool
6
+ # make tx-update - download and merge translations from Transifex
7
+ # make clean - clean everything
8
+ #
9
+ DOMAIN = foreman_m2
10
+ VERSION = $(shell ruby -e 'require "rubygems";spec = Gem::Specification::load(Dir.glob("../*.gemspec")[0]);puts spec.version')
11
+ POTFILE = $(DOMAIN).pot
12
+ MOFILE = $(DOMAIN).mo
13
+ POFILES = $(shell find . -name '$(DOMAIN).po')
14
+ MOFILES = $(patsubst %.po,%.mo,$(POFILES))
15
+ POXFILES = $(patsubst %.po,%.pox,$(POFILES))
16
+ EDITFILES = $(patsubst %.po,%.edit.po,$(POFILES))
17
+
18
+ %.mo: %.po
19
+ mkdir -p $(shell dirname $@)/LC_MESSAGES
20
+ msgfmt -o $(shell dirname $@)/LC_MESSAGES/$(MOFILE) $<
21
+
22
+ # Generate MO files from PO files
23
+ all-mo: $(MOFILES)
24
+
25
+ # Check for malformed strings
26
+ %.pox: %.po
27
+ msgfmt -c $<
28
+ pofilter --nofuzzy -t variables -t blank -t urls -t emails -t long -t newlines \
29
+ -t endwhitespace -t endpunc -t puncspacing -t options -t printf -t validchars --gnome $< > $@
30
+ cat $@
31
+ ! grep -q msgid $@
32
+
33
+ %.edit.po:
34
+ touch $@
35
+
36
+ check: $(POXFILES)
37
+
38
+ # Unify duplicate translations
39
+ uniq-po:
40
+ for f in $(shell find ./ -name "*.po") ; do \
41
+ msguniq $$f -o $$f ; \
42
+ done
43
+
44
+ tx-pull: $(EDITFILES)
45
+ tx pull -f
46
+ for f in $(EDITFILES) ; do \
47
+ sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
48
+ done
49
+
50
+ tx-update: tx-pull
51
+ @echo
52
+ @echo Run rake plugin:gettext[$(DOMAIN)] from the Foreman installation, then make -C locale mo-files to finish
53
+ @echo
54
+
55
+ mo-files: $(MOFILES)
56
+ git add $(POFILES) $(POTFILE) ../locale/*/LC_MESSAGES
57
+ git commit -m "i18n - pulling from tx"
58
+ @echo
59
+ @echo Changes commited!
60
+ @echo
@@ -0,0 +1,19 @@
1
+ # foreman_m2
2
+ #
3
+ # This file is distributed under the same license as foreman_m2.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: version 0.0.1\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2014-08-20 08:46+0100\n"
11
+ "PO-Revision-Date: 2014-08-20 08:54+0100\n"
12
+ "Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
13
+ "Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
14
+ "Language: \n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+
@@ -0,0 +1,19 @@
1
+ # foreman_m2
2
+ #
3
+ # This file is distributed under the same license as foreman_m2.
4
+ #
5
+ #, fuzzy
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: version 0.0.1\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2014-08-20 08:46+0100\n"
11
+ "PO-Revision-Date: 2014-08-20 08:46+0100\n"
12
+ "Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
13
+ "Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
14
+ "Language: \n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
19
+
data/locale/gemspec.rb ADDED
@@ -0,0 +1,2 @@
1
+ # Matches foreman_m2.gemspec
2
+ _('TODO: Description of ForemanM2.')
@@ -0,0 +1,2 @@
1
+ FactoryBot.define do
2
+ end
@@ -0,0 +1,7 @@
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 <<
6
+ File.join(File.dirname(__FILE__), 'factories')
7
+ FactoryBot.reload
@@ -0,0 +1,11 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class ForemanM2Test < ActiveSupport::TestCase
4
+ setup do
5
+ User.current = User.find_by login: 'admin'
6
+ end
7
+
8
+ test 'the truth' do
9
+ assert true
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_m2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ian Ballou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rdoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: deface
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: M2 bare metal provisioning plugin for Foreman
56
+ email:
57
+ - iballou@redhat.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - README.md
64
+ - Rakefile
65
+ - app/controllers/foreman_m2/hosts_controller.rb
66
+ - app/helpers/concerns/foreman_m2/hosts_helper_extensions.rb
67
+ - app/helpers/concerns/foreman_m2/images_helper_extensions.rb
68
+ - app/lib/proxy_api/m2.rb
69
+ - app/models/concerns/foreman_m2/compute_resource_extensions.rb
70
+ - app/models/concerns/foreman_m2/host_extensions.rb
71
+ - app/models/concerns/foreman_m2/host_orchestration_extensions.rb
72
+ - app/models/concerns/foreman_m2/nic_extensions.rb
73
+ - app/models/concerns/foreman_m2/nic_orchestration_extensions.rb
74
+ - app/models/foreman_m2/m2.rb
75
+ - app/overrides/give_ids.rb
76
+ - app/overrides/hybrid_js.rb
77
+ - app/overrides/update_media_selection.rb
78
+ - app/views/compute_resources/edit/_m2.html.erb
79
+ - app/views/compute_resources/form/_m2.html.erb
80
+ - app/views/compute_resources/show/_m2.html.erb
81
+ - app/views/compute_resources_vms/form/m2/_base.html.erb
82
+ - app/views/dashboard/_foreman_m2_widget.erb
83
+ - app/views/foreman_m2/hosts/hosts/new_action.html.erb
84
+ - app/views/foreman_m2/hosts/new_action.html.erb
85
+ - app/views/foreman_m2/layouts/layouts/new_layout.html.erb
86
+ - app/views/foreman_m2/layouts/new_layout.html.erb
87
+ - app/views/hosts/provisioning_method/hybrid/_form.html.erb
88
+ - app/views/images/form/_m2.html.erb
89
+ - app/views/overrides/host_creation/_add_bm_div.html.erb
90
+ - app/views/overrides/host_creation/_add_hybrid_js.html.erb
91
+ - app/views/overrides/host_creation/_add_ptable_div.html.erb
92
+ - app/views/overrides/image_selection/_host_media_type_select.html.erb
93
+ - app/views/unattended/provisioning_templates/PXELinux/m2_default_pxelinux.erb
94
+ - app/views/unattended/provisioning_templates/iPXE/m2_default_ipxe.erb
95
+ - config/routes.rb
96
+ - db/seeds.d/071-m2_prov_templates.rb
97
+ - db/seeds.d/111-m2_sp_features.rb
98
+ - lib/foreman_m2.rb
99
+ - lib/foreman_m2/engine.rb
100
+ - lib/foreman_m2/version.rb
101
+ - lib/tasks/foreman_m2_tasks.rake
102
+ - locale/Makefile
103
+ - locale/en/foreman_m2.po
104
+ - locale/foreman_m2.pot
105
+ - locale/gemspec.rb
106
+ - test/factories/foreman_m2_factories.rb
107
+ - test/test_plugin_helper.rb
108
+ - test/unit/foreman_m2_test.rb
109
+ homepage: https://github.com/ianballou/foreman_m2
110
+ licenses:
111
+ - GPL-3.0
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.6.14
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: M2 bare metal provisioning plugin for Foreman
133
+ test_files:
134
+ - test/test_plugin_helper.rb
135
+ - test/unit/foreman_m2_test.rb
136
+ - test/factories/foreman_m2_factories.rb