From 4c6f30bfaa69024c60ba1f773289c975f691b4eb Mon Sep 17 00:00:00 2001
From: Alexander Olofsson <alexander.olofsson@liu.se>
Date: Wed, 2 Nov 2022 15:14:43 +0100
Subject: [PATCH] Clean up code and add vTPM keys from configuration

---
 .gitignore                                    |   3 +
 .gitlab-ci.yml                                | 101 ++++++++++++++++++
 .rubocop.yml                                  |  13 +++
 .travis.yml                                   |   5 -
 .../vmware_extensions.rb                      |  13 ++-
 foreman_vmware_advanced.gemspec               |  20 ++--
 test/foreman_vmware_advanced_test.rb          |  11 --
 test/test_helper.rb                           |   4 -
 8 files changed, 133 insertions(+), 37 deletions(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 .rubocop.yml
 delete mode 100644 .travis.yml
 delete mode 100644 test/foreman_vmware_advanced_test.rb
 delete mode 100644 test/test_helper.rb

diff --git a/.gitignore b/.gitignore
index 0cb6eeb..272689d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 /.bundle/
+/vendor/
 /.yardoc
 /Gemfile.lock
 /_yardoc/
@@ -7,3 +8,5 @@
 /pkg/
 /spec/reports/
 /tmp/
+/public/
+/*.gem
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..5346fb6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,101 @@
+---
+variables:
+  CI_FOREMAN_PLUGIN: foreman_vmware_advanced
+  # CI_FOREMAN_WEB: true
+
+  POSTGRES_DB: test
+  POSTGRES_USER: postgres
+  POSTGRES_PASSWORD: postgres
+
+services:
+  - name: postgres:13-alpine
+    alias: db
+
+image: ruby:2.7
+
+lint:
+  cache:
+    paths:
+      - vendor/ruby
+    when: always
+
+  script:
+    - gem install bundler -N
+    - bundle config set path vendor
+    - bundle install -j $(nproc) --retry=3
+    - bundle exec rubocop app/ lib/
+
+test:
+  parallel:
+    matrix:
+      - FOREMAN_VERSION:
+          # - 2.5-stable
+          - 3.0-stable
+          # - 3.1-stable
+          # - 3.2-stable
+          # - 3.3-stable
+          - 3.4-stable
+
+  cache:
+    key: foreman-$FOREMAN_VERSION
+    paths:
+      - vendor/ruby
+      - node_modules
+    when: always
+
+  variables:
+    RAILS_ENV: test
+    DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@db/$POSTGRES_DB
+    DATABASE_CLEANER_ALLOW_REMOTE_DATABASE_URL: "true"
+
+  before_script:
+    # Set up Ruby build dependencies
+    - apt-get update -yqq
+    - apt-get install -yqq build-essential libcurl4-openssl-dev postgresql-client-13 zlib1g-dev libpq-dev
+    - apt-get install -yqq --no-install-recommends npm
+    - gem install bundler -N
+
+    # Install foreman
+    - FOREMAN_DIR="$(dirname "$CI_PROJECT_DIR")/foreman"
+    - git clone -b "$FOREMAN_VERSION" --depth=1 -- https://github.com/theforeman/foreman "$FOREMAN_DIR"
+    - cd "$FOREMAN_DIR"
+    - bundle config set path "$CI_PROJECT_DIR/vendor"
+    - bundle config set without console development ec2 gce journald libvirt openstack ovirt sqlite vmware
+    - bundle install -j $(nproc) --retry=3
+
+    # Configure database
+    - bundle exec rake db:create
+    - bundle exec rake db:migrate
+
+    # Install plugin
+    - "echo \"gem '$CI_FOREMAN_PLUGIN', path: '$CI_PROJECT_DIR'\" > bundler.d/local.rb"
+    - bundle install -j $(nproc) --retry=3
+    - bundle exec rake db:migrate
+
+    - |
+      if [ -n "$CI_FOREMAN_WEB" ]; then
+        mkdir -p "$CI_PROJECT_DIR/node_modules"
+        ln -s "$CI_PROJECT_DIR/node_modules" node_modules
+        npm install --legacy-peer-deps
+        bundle exec rake webpack:compile
+      fi
+  script:
+    # Foreman-side tasks
+    - cd "$FOREMAN_DIR"
+    - |
+      if [ -d "$CI_PROJECT_DIR/test" ]; then
+      bundle exec rake "test:$CI_FOREMAN_PLUGIN"
+      [ -d 'jenkins/reports' ] && mv jenkins/reports "$CI_PROJECT_DIR"
+      fi
+    - '[ -d "$CI_PROJECT_DIR/app/assets" ] && RAILS_ENV=production bundle exec rake "plugin:assets:precompile[$CI_FOREMAN_PLUGIN]"'
+
+    # Plugin-side tasks
+    - cd "$CI_PROJECT_DIR"
+    - gem build $CI_FOREMAN_PLUGIN.gemspec
+
+  artifacts:
+    paths:
+      - '*.gem'
+      - 'public'
+    reports:
+      junit: reports/unit/*.xml
diff --git a/.rubocop.yml b/.rubocop.yml
new file mode 100644
index 0000000..a420c76
--- /dev/null
+++ b/.rubocop.yml
@@ -0,0 +1,13 @@
+---
+AllCops:
+  NewCops: enable
+
+Style/Documentation:
+  Enabled: false
+
+Metrics/AbcSize:
+  Enabled: false
+Metrics/CyclomaticComplexity:
+  Enabled: false
+Metrics/PerceivedComplexity:
+  Enabled: false
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b1ed4e9..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-sudo: false
-language: ruby
-rvm:
-  - 2.1.9
-before_install: gem install bundler -v 1.13.7
diff --git a/app/models/concerns/foreman_vmware_advanced/vmware_extensions.rb b/app/models/concerns/foreman_vmware_advanced/vmware_extensions.rb
index 0e95156..78eb451 100644
--- a/app/models/concerns/foreman_vmware_advanced/vmware_extensions.rb
+++ b/app/models/concerns/foreman_vmware_advanced/vmware_extensions.rb
@@ -6,15 +6,18 @@ module ForemanVmwareAdvanced
       args = super(inp_args)
 
       args[:extra_config] = (args[:extra_config] || {}).merge(
-        'bios.bootOrder'.to_sym => 'ethernet0',
-        'svga.autodetect'.to_sym => 'TRUE'
+        'bios.bootOrder': 'ethernet0',
+        'svga.autodetect': 'TRUE'
       )
 
-      if args[:guest_id]&.start_with?('win')
-        args[:extra_config]['disk.EnableUUID'.to_sym] = 'TRUE'
-        args[:extra_config]['vtpm.present'.to_sym] = 'TRUE'
+      if SETTINGS[:vtpm_csr] && SETTINGS[:vtpm_crt]
+        args[:extra_config][:'vtpm.present'] = 'TRUE'
+        args[:extra_config][:'vtpm.ekCSR'] = SETTINGS[:vtpm_csr]
+        args[:extra_config][:'vtpm.ekCRT'] = SETTINGS[:vtpm_crt]
       end
 
+      args[:extra_config][:'disk.EnableUUID'] = 'TRUE' if args[:guest_id]&.start_with?('win')
+
       args
     end
   end
diff --git a/foreman_vmware_advanced.gemspec b/foreman_vmware_advanced.gemspec
index 3266c95..354a3c8 100644
--- a/foreman_vmware_advanced.gemspec
+++ b/foreman_vmware_advanced.gemspec
@@ -1,8 +1,6 @@
-# coding: utf-8
+# frozen_string_literal: true
 
-lib = File.expand_path('../lib', __FILE__)
-$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
-require 'foreman_vmware_advanced/version'
+require_relative 'foreman_vmware_advanced/version'
 
 Gem::Specification.new do |spec|
   spec.name          = 'foreman_vmware_advanced'
@@ -13,14 +11,12 @@ Gem::Specification.new do |spec|
   spec.summary       = 'Adds advanced values to the VMWare vmx config'
   spec.description   = spec.summary
   spec.homepage      = 'https://github.com/ananace/foreman_vmware_advanced'
-  spec.license       = 'MIT'
+  spec.license       = 'GPL-3.0'
 
-  spec.files         = `git ls-files -z`.split("\x0").reject do |f|
-    f.match(%r{^(test|spec|features)/})
-  end
-  spec.require_paths = ['lib']
+  spec.files         = Dir['{app,lib}/**/*.{rake,rb}'] + %w[LICENSE.txt Rakefile README.md]
 
-  spec.add_development_dependency 'bundler', '~> 1.13'
-  spec.add_development_dependency 'minitest', '~> 5.0'
-  spec.add_development_dependency 'rake', '~> 10.0'
+  spec.add_development_dependency 'rubocop'
+  spec.add_development_dependency 'rubocop-minitest'
+  spec.add_development_dependency 'rubocop-performance'
+  spec.add_development_dependency 'rubocop-rails'
 end
diff --git a/test/foreman_vmware_advanced_test.rb b/test/foreman_vmware_advanced_test.rb
deleted file mode 100644
index 83fde9f..0000000
--- a/test/foreman_vmware_advanced_test.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'test_helper'
-
-class ForemanVmwareAdvancedTest < Minitest::Test
-  def test_that_it_has_a_version_number
-    refute_nil ::ForemanVmwareAdvanced::VERSION
-  end
-
-  def test_it_does_something_useful
-    assert false
-  end
-end
diff --git a/test/test_helper.rb b/test/test_helper.rb
deleted file mode 100644
index 02729c5..0000000
--- a/test/test_helper.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
-require 'foreman_vmware_advanced'
-
-require 'minitest/autorun'
-- 
GitLab