diff --git a/.rubocop.yml b/.rubocop.yml index 5be1f9fa994085890c3fe9db117a937b8928f8cb..21b82b99b8ed1e2fb1ae4fc9a08d9aeb91054a33 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,6 +3,7 @@ require: - rubocop-performance - rubocop-rspec AllCops: + NewCops: enable DisplayCopNames: true TargetRubyVersion: '2.6' Include: @@ -527,6 +528,8 @@ Lint/DuplicateBranch: Enabled: false Lint/DuplicateMagicComment: Enabled: false +Lint/DuplicateMatchPattern: + Enabled: false Lint/DuplicateRegexpCharacterClassElement: Enabled: false Lint/EmptyBlock: @@ -643,6 +646,8 @@ Style/ComparableClamp: Enabled: false Style/ConcatArrayLiterals: Enabled: false +Style/DataInheritance: + Enabled: false Style/DirEmpty: Enabled: false Style/DocumentDynamicEvalDefinition: @@ -711,6 +716,8 @@ Style/RedundantHeredocDelimiterQuotes: Enabled: false Style/RedundantInitialize: Enabled: false +Style/RedundantLineContinuation: + Enabled: false Style/RedundantSelfAssignmentBranch: Enabled: false Style/RedundantStringEscape: diff --git a/.vscode/extensions.json b/.vscode/extensions.json index a5f6a2b80eb07663d44f5e705340b4e116bb0b67..902e5f8b8d95d3c0c2c4db3579ce41dd628eb230 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,5 +5,6 @@ "ms-vscode.powershell", "EditorConfig.EditorConfig", "glenbuktenica.unicode-substitutions" + "Shopify.ruby-lsp" ] } diff --git a/Gemfile b/Gemfile index ca0e773ecda0523822c56f423572a35d57d7ed83..7a9ef2e664e8fe5846f594d2c6018c05e8e02920 100644 --- a/Gemfile +++ b/Gemfile @@ -20,30 +20,29 @@ group :development do gem "json", '= 2.6.1', require: false if Gem::Requirement.create(['>= 3.1.0', '< 3.1.3']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup)) gem "json", '= 2.6.3', require: false if Gem::Requirement.create(['>= 3.2.0', '< 4.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup)) gem "racc", '~> 1.4.0', require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup)) + gem "deep_merge", '~> 1.0', require: false gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false gem "facterdb", '~> 1.18', require: false - gem "metadata-json-lint", '~> 3.0', require: false - gem "puppetlabs_spec_helper", '~> 6.0', require: false - gem "rspec-puppet-facts", '~> 2.0', require: false - gem "codecov", '~> 0.2', require: false + gem "metadata-json-lint", '~> 4.0', require: false + gem "rspec-puppet-facts", '~> 3.0', require: false gem "dependency_checker", '~> 1.0.0', require: false gem "parallel_tests", '= 3.12.1', require: false gem "pry", '~> 0.10', require: false - gem "simplecov-console", '~> 0.5', require: false + gem "simplecov-console", '~> 0.9', require: false gem "puppet-debugger", '~> 1.0', require: false - gem "rubocop", '= 1.48.1', require: false + gem "rubocop", '~> 1.50.0', require: false gem "rubocop-performance", '= 1.16.0', require: false gem "rubocop-rspec", '= 2.19.0', require: false - gem "puppet-strings", '~> 4.0', require: false gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw] end -group :system_tests do - gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw] - gem "serverspec", '~> 2.41', require: false -end -group :release_prep do +group :development, :release_prep do gem "puppet-strings", '~> 4.0', require: false - gem "puppetlabs_spec_helper", '~> 6.0', require: false + gem "puppetlabs_spec_helper", '~> 7.0', require: false +end +group :system_tests do + gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw] + gem "CFPropertyList", '< 3.0.7', require: false, platforms: [:mswin, :mingw, :x64_mingw] + gem "serverspec", '~> 2.41', require: false end puppet_version = ENV['PUPPET_GEM_VERSION'] diff --git a/README.md b/README.md index f7f5a68cf181804086b2946343c9398c11d5697b..0ae7226ec94b82df21d60dd585e2e73fe8cd5c54 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,25 @@ -# folioscripts +# ub_folio -## Documentation ideas +## encrypt configuration data -For more ideas about what to document here see the [pdk template -readme](https://github.com/puppetlabs/pdk-templates/blob/main/moduleroot_init/README.md.erb). +You need https://github.com/voxpupuli/hiera-eyaml +If you have ruby installed you can do 'gem install hiera-eyaml' -For how to do it: -https://puppet.com/docs/puppet/latest/puppet_strings.html -https://puppet.com/docs/puppet/latest/puppet_strings_style.html +In the 'encrypt' director is a small script to help you. + +./encrypt/eyaml-encrypt.sh --stdin (ctrl-d once or twice to end the inputing) +./encrypt/eyaml-encrypt.sh --password (for encryption of singleline data) + +paste the block output into a 'FQDN.yaml' in data/nodes/ + + + + +## +utgå från .env i /opt/liu/foliofront/foliofront-node-root på någon maskin med foliofront +ändra datat och kryptera filen, och lägg in i data/nodes/*.yaml +add, commit and push +kolla att puppetmodulen gick igenom CI-kedjan +vänta ett tag +kör puppet på folioservices01.test.it.liu.se +se att ändringen skett i .env diff --git a/Rakefile b/Rakefile index 74415a96f53d00b92550f6c697bb02093faecf76..77590fe6f84e2a49cabfb16175ff7ef3706dcd74 100644 --- a/Rakefile +++ b/Rakefile @@ -4,85 +4,6 @@ require 'bundler' require 'puppet_litmus/rake_tasks' if Gem.loaded_specs.key? 'puppet_litmus' require 'puppetlabs_spec_helper/rake_tasks' require 'puppet-syntax/tasks/puppet-syntax' -require 'github_changelog_generator/task' if Gem.loaded_specs.key? 'github_changelog_generator' require 'puppet-strings/tasks' if Gem.loaded_specs.key? 'puppet-strings' -def changelog_user - return unless Rake.application.top_level_tasks.include? "changelog" - returnVal = nil || JSON.load(File.read('metadata.json'))['author'] - raise "unable to find the changelog_user in .sync.yml, or the author in metadata.json" if returnVal.nil? - puts "GitHubChangelogGenerator user:#{returnVal}" - returnVal -end - -def changelog_project - return unless Rake.application.top_level_tasks.include? "changelog" - - returnVal = nil - returnVal ||= begin - metadata_source = JSON.load(File.read('metadata.json'))['source'] - metadata_source_match = metadata_source && metadata_source.match(%r{.*\/([^\/]*?)(?:\.git)?\Z}) - - metadata_source_match && metadata_source_match[1] - end - - raise "unable to find the changelog_project in .sync.yml or calculate it from the source in metadata.json" if returnVal.nil? - - puts "GitHubChangelogGenerator project:#{returnVal}" - returnVal -end - -def changelog_future_release - return unless Rake.application.top_level_tasks.include? "changelog" - returnVal = "v%s" % JSON.load(File.read('metadata.json'))['version'] - raise "unable to find the future_release (version) in metadata.json" if returnVal.nil? - puts "GitHubChangelogGenerator future_release:#{returnVal}" - returnVal -end - PuppetLint.configuration.send('disable_relative') - - -if Gem.loaded_specs.key? 'github_changelog_generator' - GitHubChangelogGenerator::RakeTask.new :changelog do |config| - raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil? - config.user = "#{changelog_user}" - config.project = "#{changelog_project}" - config.future_release = "#{changelog_future_release}" - config.exclude_labels = ['maintenance'] - config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)." - config.add_pr_wo_labels = true - config.issues = false - config.merge_prefix = "### UNCATEGORIZED PRS; LABEL THEM ON GITHUB" - config.configure_sections = { - "Changed" => { - "prefix" => "### Changed", - "labels" => ["backwards-incompatible"], - }, - "Added" => { - "prefix" => "### Added", - "labels" => ["enhancement", "feature"], - }, - "Fixed" => { - "prefix" => "### Fixed", - "labels" => ["bug", "documentation", "bugfix"], - }, - } - end -else - desc 'Generate a Changelog from GitHub' - task :changelog do - raise <<EOM -The changelog tasks depends on recent features of the github_changelog_generator gem. -Please manually add it to your .sync.yml for now, and run `pdk update`: ---- -Gemfile: - optional: - ':development': - - gem: 'github_changelog_generator' - version: '~> 1.15' - condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')" -EOM - end -end - diff --git a/data/nodes/folioservices01.test.it.liu.se.yaml b/data/nodes/folioservices01.test.it.liu.se.yaml new file mode 100644 index 0000000000000000000000000000000000000000..25419550b1a4cbd2306608608acb0cbeca1cc651 --- /dev/null +++ b/data/nodes/folioservices01.test.it.liu.se.yaml @@ -0,0 +1,88 @@ +--- +ub_folio::foliofront: + env: > + ENC[PKCS7,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] diff --git a/encrypt/eyaml-encrypt.sh b/encrypt/eyaml-encrypt.sh new file mode 100755 index 0000000000000000000000000000000000000000..29234cca011dd55b78736a87c4ab991e83cbb0e3 --- /dev/null +++ b/encrypt/eyaml-encrypt.sh @@ -0,0 +1,6 @@ +#! /bin/sh -eu + +encryptdir="$(dirname "$0")" +encryptdir="$(cd "${encryptdir}"&& pwd)" + +exec eyaml encrypt --pkcs7-public-key "${encryptdir}/public-key.pkcs7.pem" "$@" diff --git a/encrypt/public-key.pkcs7.pem b/encrypt/public-key.pkcs7.pem new file mode 100644 index 0000000000000000000000000000000000000000..48e5ee496c78f2b6eb2b56c999578d5129f42041 --- /dev/null +++ b/encrypt/public-key.pkcs7.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC2TCCAcGgAwIBAgIBATANBgkqhkiG9w0BAQUFADAAMCAXDTE1MDYwMzA5MDUx +MloYDzIwNjUwNTIxMDkwNTEyWjAAMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAwh8REuonjpax1B3egJEHQ6FnrVPEhS8P1PftDVFlYrlpiualq2RX8ynz +ZRigwRYqrFFpPJNooK1gXaFttpAMffUM7mFVPdXC3Tg4nihYncOOxGT3GqrbC7Oa +GfXeUoEI7PIbRJhmcH/fJLLcsYrdIYyqferTgBGlVKbK2dSpqL9FGQCigcrmbalh +3ZpIKKfmejZELNHY/7Mun1Gseoin5yuYMTGzI9xEmxBIEQzKpIJWrgvyfPs80ch3 +WTjufePl0PqlaVLKR8qk6H23LQMw0DcBjN+Dm1wG7kWIBK4CxHN7TSHPebiEwutH +UG56w+2HKuf0J/loYRSQklcmlogNJQIDAQABo1wwWjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBTvBDJEU5YW0kgqu2YI0HVwNchshDAoBgNVHSMEITAfgBTvBDJE +U5YW0kgqu2YI0HVwNchshKEEpAIwAIIBATANBgkqhkiG9w0BAQUFAAOCAQEAdA8j +RGF2rFXrGeOzurP6/1G1Yvi3adN9Adxnhe0ZKCYfsCzd+Ttuli11IGUWDeOsxTgf +QkezGo6FPsyhv79yGMP5IOkToIXVyOeeGjQRDytRVAq2Q3dQa3/9xhabA88NfzdR +S+VChWUWLgIKKtrrShiusGdvewpmo5lKvYNGTvmJchXPED9kXNJC8nmxBwcqk9fJ +eUVmXyiMdvEcwHzzjZN8n0F9vRNAA9r0w2GeP5Bg5Ggxqldfnyt4TpBbcacdJLLt +DWKsYYuI7wLPTTmXvMdAm/eC7zvrCLP9wMw1wN6Sh/SpG+CLiStJNTFigqu9vkmO +4qJa9Cmm6QrZ6aGieQ== +-----END CERTIFICATE----- diff --git a/files/folio-cron b/files/folio-cron new file mode 100644 index 0000000000000000000000000000000000000000..b3372e3574d05108a39a9b11657b4ac7950a20de --- /dev/null +++ b/files/folio-cron @@ -0,0 +1,5 @@ +magto94 ALL=(folio-cron) ALL +andfa93 ALL=(folio-cron) ALL +thotr29 ALL=(folio-cron) ALL +hakan95 ALL=(folio-cron) ALL +hakjo91 ALL=(folio-cron) ALL \ No newline at end of file diff --git a/hiera.yaml b/hiera.yaml index 93930acac3d62152f6b9fb621a2dca41adeab5c9..8871b87af854dadf00f4da58e78e8081ab457bd1 100644 --- a/hiera.yaml +++ b/hiera.yaml @@ -9,6 +9,9 @@ defaults: # Used for any hierarchy level that omits these keys. pkcs7_public_key: /etc/puppetlabs/puppet/keys/public_key.pkcs7.pem hierarchy: + - name: "Node data" + path: "nodes/%{trusted.certname}.yaml" + - name: "Environment" path: "environment/%{::environment}.yaml" diff --git a/manifests/foliofront.pp b/manifests/foliofront.pp index a3aecff6e68e7a7c1668cfa5a62316e6d6c31b3d..e5881714ecb39d81812c1b7f93cdfe52cbc28e1e 100644 --- a/manifests/foliofront.pp +++ b/manifests/foliofront.pp @@ -1,10 +1,23 @@ # @summary Setup a front facing node for folio -class folioscripts::foliofront { +class ub_folio::foliofront { include profiles::letsencrypt include apache include apache::mod::proxy - package { 'nodejs': + $basedir='/opt/liu/foliofront' + + exec { 'create private key for': + creates => "${$basedir}/privatekey.pem", + command => "/bin/openssl genrsa -out ${$basedir}/privatekey.pem 2048", + } + + exec { 'create cert for': + creates => "${$basedir}/saml-cert.pem", + command => "/bin/openssl req -new -x509 -key ${$basedir}/privatekey.pem -out ${$basedir}/saml-cert.pem -days 3650 -subj '/C=SE/ST=Östergotland/L=Linköping/O=library.liu/OU=library/CN=saml.${$trusted['certname']}'", + require => [Exec['create private key for'],], + } + + package { ['nodejs','nano']: ensure => 'installed', } @@ -20,12 +33,6 @@ class folioscripts::foliofront { require => Exec['n-from-npm']; } - file { '/usr/bin/node': - ensure => 'link', - source => '/usr/local/bin/node', # lint:ignore:source_without_rights - require => Exec['nodejs-lts'], - } - exec { 'install pm2': command => '/bin/npm install pm2 -g', unless => '/bin/test -d /usr/local/lib/node_modules/pm2', @@ -33,10 +40,12 @@ class folioscripts::foliofront { } user { 'pm2runner': - ensure => 'present', - comment => 'pm2 owner', - system => 'yes', + ensure => 'present', + comment => 'pm2 owner', + system => 'yes', + managehome => 'yes', } + group { default: ensure => 'present'; @@ -48,17 +57,24 @@ class folioscripts::foliofront { Group <| title == 'ssl-cert' |> { members +> ['andfa93', 'pm2runner', 'hakan95', 'hakjo91'] } - file { '/opt/liu/foliofront': - ensure => directory, - owner => 'andfa93', - group => 'api', - mode => '0775', + file { + [ + $basedir, + "${$basedir}/data", + "${$basedir}/data/logs", + "${$basedir}/data/resetpintokens", + ]: + ensure => directory, + owner => 'andfa93', + group => 'api', + mode => '0775', } vcsrepo { '/opt/liu/foliofront/foliofront-node-root': ensure => latest, provider => git, source => 'https://git:glpat-F5y74GSXSm6FrQBD5wM5@gitlab.liu.se/ub-utveckling/webb/folio-projekt/foliofront-node-root.git', + revision => 'develop', notify => [Exec['do npm install of foliofront'],], } @@ -75,15 +91,36 @@ class folioscripts::foliofront { require => [Vcsrepo['/opt/liu/foliofront/foliofront-node-root'],], } + file { '/opt/liu/foliofront/foliofront-node-root/.env': + ensure => file, + group => 'api', + mode => '0750', + content => lookup('ub_folio::foliofront.env',undef,undef,'"env" key not found in hiera data'), + require => [Vcsrepo['/opt/liu/foliofront/foliofront-node-root'],], + } + systemd::manage_unit { 'foliofront.service': unit_entry => { 'Description' => 'Run the foliofront node application', }, service_entry => { - 'Type' => 'simple', - 'ExecStart' => '', - 'User' => 'postgres', + 'Type' => 'simple', + 'User' => 'pm2runner', + 'ExecStart' => 'npm run start development', + 'WorkingDirectory' => '/opt/liu/foliofront/foliofront-node-root', }, + install_entry => { + 'WantedBy' => 'multi-user.target', + }, + enable => true, + active => true, + require => [Vcsrepo['/opt/liu/foliofront/foliofront-node-root'],], + } + + service { 'foliofront': + ensure => 'running', + enable => true, + require => [Systemd::Manage_unit['foliofront.service'],], } user { 'folio-cron': @@ -143,50 +180,38 @@ class folioscripts::foliofront { # lint:endignore } - if fact('server_firewall_provider') == 'firewalld' { - server_firewall::address_set { 'vpn': - addresses => [ - '130.236.110.0/24', - '10.240.0.0/12', - ], - } - - firewalld_rich_rule { 'Access ssh from VPN': - service => 'ssh', - family => 'ipv4', - zone => 'liu', - action => 'accept', - source => { 'ipset' => 'vpn_v4', }, - } - - firewalld_service { - default: - ensure => present, - zone => 'public'; - 'Apache web http public access': - service => 'http'; - 'Apache web https public access': - service => 'https'; - } - - firewalld_service { - default: - ensure => present, - zone => 'liu'; - 'Apache web http liu access': - service => 'http'; - 'Apache web https liu access': - service => 'https'; - } - } else { - server_firewall::rules_file { '59-permit_vpn_ssh.rules': - content => file("${module_name}/permit_vpn_ssh.rules"), - } - server_firewall::rules_file { '58-permit_api.rules': - content => file("${module_name}/permit_api.rules"), - } - server_firewall::rules_file { '57-permit_www.rules': - content => file("${module_name}/permit_www.rules"), - } + server_firewall::address_set { 'vpn': + addresses => [ + '130.236.110.0/24', + '10.240.0.0/12', + ], + } + + firewalld_rich_rule { 'Access ssh from VPN': + service => 'ssh', + family => 'ipv4', + zone => 'liu', + action => 'accept', + source => { 'ipset' => 'vpn_v4', }, + } + + firewalld_service { + default: + ensure => present, + zone => 'public'; + 'Apache web http public access': + service => 'http'; + 'Apache web https public access': + service => 'https'; + } + + firewalld_service { + default: + ensure => present, + zone => 'liu'; + 'Apache web http liu access': + service => 'http'; + 'Apache web https liu access': + service => 'https'; } } diff --git a/metadata.json b/metadata.json index 7eef7b3e52fed3ce871163f7f7fa2bf0d26f8d49..1edebc2a7cb9cee9910066ae0c45a09cbd37922a 100644 --- a/metadata.json +++ b/metadata.json @@ -1,5 +1,5 @@ { - "name": "liuit-folioscripts", + "name": "liuit-ub_folio", "version": "0.1.0", "author": "LiU-IT", "summary": "", @@ -47,7 +47,7 @@ "version_requirement": ">= 7.24 < 9.0.0" } ], - "pdk-version": "3.0.1", + "pdk-version": "3.2.0", "template-url": "https://gitlab.it.liu.se/puppet-infra/pdk-templates.git#liu", - "template-ref": "heads/liu-0-g522eb00" + "template-ref": "heads/liu-0-g4d4e981" } diff --git a/spec/classes/foliofront_spec.rb b/spec/classes/foliofront_spec.rb index ecf888ca133a3943ddf9e1e8fa9a0be92df31858..705baffe10e23e0a39cde5db8eadd91831db06c1 100644 --- a/spec/classes/foliofront_spec.rb +++ b/spec/classes/foliofront_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'folioscripts::foliofront' do +describe 'ub_folio::foliofront' do on_supported_os.each do |os, os_facts| context "on #{os}" do let(:facts) { os_facts } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3f9a6c717863bd2eb4bdd13cf9c6b0399fe09129..85b88af530645da8727b70e7687ed73088309393 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -28,7 +28,8 @@ default_fact_files.each do |f| next unless File.exist?(f) && File.readable?(f) && File.size?(f) begin - default_facts.merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true)) + require 'deep_merge' + default_facts.deep_merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true)) rescue StandardError => e RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}" end @@ -36,7 +37,7 @@ end # read default_facts and merge them over what is provided by facterdb default_facts.each do |fact, value| - add_custom_fact fact, value + add_custom_fact fact, value, merge_facts: true end RSpec.configure do |c| diff --git a/templates/env.epp b/templates/env.epp new file mode 100644 index 0000000000000000000000000000000000000000..de7ed483792375951cbccce7eecea93e1d4ec18f --- /dev/null +++ b/templates/env.epp @@ -0,0 +1,12 @@ +<%- | + Stdlib::Absolutepath $basedirectory, + String[1] $username, + Sensitive[String[1]] $password, + | -%> +X_OKAPI_TENANT=liuaf +SESSION_SECRET=session_secret +admin_user=<%= $username %> +admin_pwd=<%= $password %> +ROOT_FOLDER="<%= $basedirectory %>" +LOGS_FOLDER="data/logs/" +TOKEN_FOLDER="data/resetpintokens/"