Hello community, here is the log from the commit of package velum for openSUSE:Factory checked in at 2018-02-26 23:27:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/velum (Old) and /work/SRC/openSUSE:Factory/.velum.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "velum" Mon Feb 26 23:27:05 2018 rev:8 rq:580259 version:3.0.0+dev+git_r657_5ff58ad3ec6b1b88d02799820e6e06af020d24b9 Changes: -------- --- /work/SRC/openSUSE:Factory/velum/velum.changes 2018-02-22 15:03:34.463568486 +0100 +++ /work/SRC/openSUSE:Factory/.velum.new/velum.changes 2018-02-26 23:27:20.661603177 +0100 @@ -1,0 +2,36 @@ +Mon Feb 26 14:28:55 UTC 2018 - [email protected] + +- Commit 2115e91 by Maximilian Meister [email protected] + rebase patch + + Signed-off-by: Maximilian Meister <[email protected]> + + +------------------------------------------------------------------- +Mon Feb 26 12:44:01 UTC 2018 - [email protected] + +- Commit 50aa226 by Maximilian Meister [email protected] + add mirrors model + + Signed-off-by: Maximilian Meister <[email protected]> + + Commit d621057 by Maximilian Meister [email protected] + drop docker prefix for registries + + Signed-off-by: Maximilian Meister <[email protected]> + + +------------------------------------------------------------------- +Mon Feb 26 10:52:42 UTC 2018 - [email protected] + +- Commit 6f880cf by Maximilian Meister [email protected] + update a few gems + + we needed to have a new version of net-ldap because of CVE-2017-17718 + + this needed an update for devise_ldap_authenticatable + + Signed-off-by: Maximilian Meister <[email protected]> + + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ velum.spec ++++++ --- /var/tmp/diff_new_pack.0FyXBy/_old 2018-02-26 23:27:23.385505212 +0100 +++ /var/tmp/diff_new_pack.0FyXBy/_new 2018-02-26 23:27:23.385505212 +0100 @@ -23,7 +23,7 @@ # Version: 1.0.0 # %%define branch 1.0.0 -Version: 3.0.0+dev+git_r650_4eb2d26dfbef4dd92b3b4685f1704ed8787d5732 +Version: 3.0.0+dev+git_r657_5ff58ad3ec6b1b88d02799820e6e06af020d24b9 Release: 0 %define branch master Summary: Dashboard for CaasP @@ -96,7 +96,7 @@ %description velum is the dashboard for CaasP to manage and deploy kubernetes clusters on top of MicroOS -This package has been built with commit 4eb2d26dfbef4dd92b3b4685f1704ed8787d5732 from branch master on date Thu, 22 Feb 2018 09:57:53 +0000 +This package has been built with commit 5ff58ad3ec6b1b88d02799820e6e06af020d24b9 from branch master on date Mon, 26 Feb 2018 14:28:11 +0000 %prep %setup -q -n velum-%{branch} ++++++ 0_set_default_salt_events_alter_time_column_value.rpm.patch ++++++ --- /var/tmp/diff_new_pack.0FyXBy/_old 2018-02-26 23:27:23.409504348 +0100 +++ /var/tmp/diff_new_pack.0FyXBy/_new 2018-02-26 23:27:23.413504205 +0100 @@ -1,8 +1,8 @@ diff --git a/db/schema.rb b/db/schema.rb -index a86a539..d571993 100644 +index 80fdb6b..d14f1cb 100644 --- a/db/schema.rb +++ b/db/schema.rb -@@ -82,7 +82,7 @@ ActiveRecord::Schema.define(version: 20180110112210) do +@@ -92,7 +92,7 @@ ActiveRecord::Schema.define(version: 20180221142221) do create_table "salt_events", force: :cascade do |t| t.string "tag", limit: 255, null: false t.text "data", limit: 16777215, null: false @@ -11,7 +11,7 @@ t.string "master_id", limit: 255, null: false t.datetime "taken_at" t.datetime "processed_at" -@@ -100,7 +100,7 @@ ActiveRecord::Schema.define(version: 20180110112210) do +@@ -110,7 +110,7 @@ ActiveRecord::Schema.define(version: 20180221142221) do t.string "id", limit: 255, null: false t.string "success", limit: 10, null: false t.text "full_ret", limit: 16777215, null: false ++++++ master.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/Gemfile.lock new/velum-master/Gemfile.lock --- old/velum-master/Gemfile.lock 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/Gemfile.lock 2018-02-26 15:27:28.000000000 +0100 @@ -65,15 +65,15 @@ safe_yaml (~> 1.0.0) crass (1.0.3) database_cleaner (1.5.3) - devise (4.4.0) + devise (4.4.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0, < 5.2) responders warden (~> 1.2.3) - devise_ldap_authenticatable (0.8.5) + devise_ldap_authenticatable (0.8.6) devise (>= 3.4.1) - net-ldap (>= 0.6.0, <= 0.11) + net-ldap (>= 0.16.0) diff-lcs (1.3) docile (1.1.5) erubis (2.7.0) @@ -92,7 +92,7 @@ gravatar_image_tag (1.2.0) hashdiff (0.3.2) httpclient (2.8.3) - i18n (0.9.1) + i18n (0.9.5) concurrent-ruby (~> 1.0) jbuilder (2.7.0) activesupport (>= 4.2.0) @@ -120,11 +120,11 @@ mime-types-data (3.2016.0521) mini_mime (1.0.0) mini_portile2 (2.3.0) - minitest (5.11.1) + minitest (5.11.3) multi_json (1.12.2) mysql2 (0.4.10) - net-ldap (0.11) - nokogiri (1.8.1) + net-ldap (0.16.1) + nokogiri (1.8.2) mini_portile2 (~> 2.3.0) openid_connect (1.1.3) activemodel @@ -270,7 +270,7 @@ thread_safe (0.3.6) tilt (2.0.8) timecop (0.8.1) - tzinfo (1.2.4) + tzinfo (1.2.5) thread_safe (~> 0.1) uglifier (4.1.5) execjs (>= 0.3.0, < 3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/controllers/internal_api/v1/pillars_controller.rb new/velum-master/app/controllers/internal_api/v1/pillars_controller.rb --- old/velum-master/app/controllers/internal_api/v1/pillars_controller.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/app/controllers/internal_api/v1/pillars_controller.rb 2018-02-26 15:27:28.000000000 +0100 @@ -24,25 +24,20 @@ end def registry_contents - registries = DockerRegistry.is_registry.map do |reg| - { - url: reg.url, - cert: (reg.certificate.present? ? reg.certificate.certificate : nil) - } + registries = Registry.all.map do |reg| + registry = {} + registry[:url] = reg.url + registry[:cert] = reg.certificate.try(:certificate) + reg.registry_mirrors.each do |mirror| + registry[:mirrors] ||= [] + registry[:mirrors].push( + url: mirror.url, + cert: mirror.certificate.try(:certificate) + ) + end + registry end - registry_mirrors = DockerRegistry.is_mirror.group(:mirror).pluck(:mirror) - registry_mirrors.map! do |remote_registry_url| - { - url: remote_registry_url, - mirrors: DockerRegistry.where(mirror: remote_registry_url).map do |reg| - { - url: reg.url, - cert: (reg.certificate.present? ? reg.certificate.certificate : nil) - } - end - } - end - { registries: (registries + registry_mirrors) } + { registries: registries } end def cloud_framework_contents diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/controllers/setup_controller.rb new/velum-master/app/controllers/setup_controller.rb --- old/velum-master/app/controllers/setup_controller.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/app/controllers/setup_controller.rb 2018-02-26 15:27:28.000000000 +0100 @@ -9,14 +9,12 @@ class SetupController < ApplicationController include Discovery - SUSE_REGISTRY_URL = "https://registry.suse.com".freeze - skip_before_action :redirect_to_setup before_action :redirect_to_dashboard before_action :check_empty_settings, only: :configure before_action :check_empty_roles, only: :set_roles - # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity + # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize def welcome @dashboard = Pillar.value(pillar: :dashboard) || request.host @tiller = Pillar.value(pillar: :tiller) == "true" @@ -32,17 +30,19 @@ @services_cidr = Pillar.value(pillar: :services_cidr) || "172.24.0.0/16" @api_cluster_ip = Pillar.value(pillar: :api_cluster_ip) || "172.24.0.1" @dns_cluster_ip = Pillar.value(pillar: :dns_cluster_ip) || "172.24.0.2" - @suse_registry_mirror = DockerRegistry.find_or_initialize_by(mirror: SUSE_REGISTRY_URL) + @suse_registry_mirror = RegistryMirror.find_or_initialize_by( + registry_id: Registry.find_by(name: Registry::SUSE_REGISTRY_NAME).try(:id) + ) @suse_registry_mirror_enabled = @suse_registry_mirror.persisted? @suse_registry_mirror_certificate_enabled = @suse_registry_mirror.certificate.present? end - # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity + # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize def configure res = Pillar.apply(settings_params, required_pillars: required_pillars, unprotected_pillars: unprotected_pillars) - registry_errors = DockerRegistry.apply(suse_registry_mirror_params) + registry_errors = Registry.configure_suse_registry(suse_registry_mirror_params) if res.empty? && registry_errors.empty? redirect_to setup_worker_bootstrap_path @@ -162,10 +162,10 @@ end if params["settings"]["suse_registry_mirror_enabled"] == "enable" - parameters["mirror"] = SUSE_REGISTRY_URL + parameters["mirror_url"] = params["settings"]["suse_registry_mirror"]["url"] end - [parameters] + parameters end def cloud_cluster_params diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/models/docker_registry.rb new/velum-master/app/models/docker_registry.rb --- old/velum-master/app/models/docker_registry.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/app/models/docker_registry.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,63 +0,0 @@ -# model that represents a docker registry -class DockerRegistry < ActiveRecord::Base - has_one :certificate_service, as: :service, dependent: :destroy - has_one :certificate, through: :certificate_service - - validates :url, presence: true, uniqueness: true, url: { schemes: ["https", "http"] } - - scope :is_mirror, -> { where.not(mirror: nil) } - scope :is_registry, -> { where(mirror: nil) } - - class << self - def apply(registries_params) - errors = [] - registries_params.each do |registry| - errors += configure_registry(registry) if registry["url"].present? - end - cleanup registries_params - errors - end - - private - - # create or update DockerRegistry model - def configure_registry(registry) - errors = [] - url = registry["url"] - cert = registry["certificate"] - mirror = registry["mirror"] - - registry = DockerRegistry.find_or_create_by(url: url) do |r| - r.mirror = mirror - end - - unless registry.persisted? - errors << "Registry url #{url} doesn't match a docker registry pattern" - return errors - end - - if cert.present? - certificate = Certificate.find_or_create_by(certificate: cert.strip) - unless certificate.persisted? - errors << "Failed to validate certificate" - return errors - end - - CertificateService.create(service: registry, certificate: certificate) - elsif registry.certificate.present? - registry.certificate_service.destroy - end - - errors - end - - # remove old registries from the db if they were deleted in the UI - def cleanup(registries_params) - passed_registries = registries_params.collect do |r| - r["url"] - end - saved_registries = DockerRegistry.pluck(:url) - DockerRegistry.where(url: saved_registries - passed_registries).destroy_all - end - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/models/registry.rb new/velum-master/app/models/registry.rb --- old/velum-master/app/models/registry.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/app/models/registry.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,56 @@ +# model that represents a registry +class Registry < ActiveRecord::Base + has_many :registry_mirrors, dependent: :destroy + has_one :certificate_service, as: :service, dependent: :destroy + has_one :certificate, through: :certificate_service + + validates :name, presence: true, uniqueness: true + validates :url, presence: true, uniqueness: true, url: { schemes: ["https", "http"] } + + SUSE_REGISTRY_NAME = "SUSE".freeze + SUSE_REGISTRY_URL = "https://registry.suse.com".freeze + + class << self + # create or update suse Registry model + # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize + def configure_suse_registry(suse_registry_mirror_params) + if suse_registry_mirror_params.blank? || + suse_registry_mirror_params["mirror_url"].blank? + RegistryMirror.where(name: SUSE_REGISTRY_NAME).destroy_all + return [] + end + + errors = [] + cert = suse_registry_mirror_params["certificate"] + mirror_url = suse_registry_mirror_params["mirror_url"] + name = suse_registry_mirror_params["name"] || SUSE_REGISTRY_NAME + + registry = Registry.where(name: SUSE_REGISTRY_NAME).first_or_initialize.tap do |r| + r.url = SUSE_REGISTRY_URL + r.save + end + + suse_registry_mirror = RegistryMirror.where(name: name).first_or_initialize.tap do |m| + m.url = mirror_url + m.registry_id = registry.id + m.save + end + + if suse_registry_mirror.errors.present? || !suse_registry_mirror.persisted? + errors << "Registry mirror url #{mirror_url} doesn't match a registry pattern" + return errors + end + + if cert.present? + certificate = Certificate.find_or_create_by(certificate: cert.strip) + + CertificateService.create(service: suse_registry_mirror, certificate: certificate) + elsif suse_registry_mirror.certificate.present? + suse_registry_mirror.certificate_service.destroy + end + + errors + end + # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/models/registry_mirror.rb new/velum-master/app/models/registry_mirror.rb --- old/velum-master/app/models/registry_mirror.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/app/models/registry_mirror.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,10 @@ +# model that represents a registry mirror +class RegistryMirror < ActiveRecord::Base + belongs_to :registry + has_one :certificate_service, as: :service, dependent: :destroy + has_one :certificate, through: :certificate_service + + validates :name, presence: true, uniqueness: true + validates :url, presence: true, uniqueness: true, allow_blank: true, + url: { schemes: ["https", "http"] } +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20171124131432_create_certificate_services.rb new/velum-master/db/migrate/20171124131432_create_certificate_services.rb --- old/velum-master/db/migrate/20171124131432_create_certificate_services.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/db/migrate/20171124131432_create_certificate_services.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,10 @@ +class CreateCertificateServices < ActiveRecord::Migration + def change + create_table :certificate_services do |t| + t.references :certificate + t.references :service, polymorphic: true + t.timestamps + end + add_index :certificate_services, [:certificate_id, :service_id, :service_type], name: "index_certificate_services_on_certificate_id_and_service", unique: true + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20171124131432_create_docker_registries.rb new/velum-master/db/migrate/20171124131432_create_docker_registries.rb --- old/velum-master/db/migrate/20171124131432_create_docker_registries.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/db/migrate/20171124131432_create_docker_registries.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ -class CreateDockerRegistries < ActiveRecord::Migration - def change - create_table :docker_registries do |t| - t.string :url, unique: true - t.string :mirror - t.timestamps - end - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20180110112210_create_certificate_services.rb new/velum-master/db/migrate/20180110112210_create_certificate_services.rb --- old/velum-master/db/migrate/20180110112210_create_certificate_services.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/db/migrate/20180110112210_create_certificate_services.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,10 +0,0 @@ -class CreateCertificateServices < ActiveRecord::Migration - def change - create_table :certificate_services do |t| - t.references :certificate - t.references :service, polymorphic: true - t.timestamps - end - add_index :certificate_services, [:certificate_id, :service_id, :service_type], name: "index_certificate_services_on_certificate_id_and_service", unique: true - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20180208100011_create_registries.rb new/velum-master/db/migrate/20180208100011_create_registries.rb --- old/velum-master/db/migrate/20180208100011_create_registries.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/db/migrate/20180208100011_create_registries.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,9 @@ +class CreateRegistries < ActiveRecord::Migration + def change + create_table :registries do |t| + t.string :name + t.string :url, unique: true + t.timestamps + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20180209100021_create_registry_mirrors.rb new/velum-master/db/migrate/20180209100021_create_registry_mirrors.rb --- old/velum-master/db/migrate/20180209100021_create_registry_mirrors.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/db/migrate/20180209100021_create_registry_mirrors.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,11 @@ +class CreateRegistryMirrors < ActiveRecord::Migration + def change + create_table :registry_mirrors do |t| + t.string :name + t.string :url, unique: true + t.references :registry, index: true + + t.timestamps null: false + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/migrate/20180221142221_migrate_registry_mirror_from_pillar.rb new/velum-master/db/migrate/20180221142221_migrate_registry_mirror_from_pillar.rb --- old/velum-master/db/migrate/20180221142221_migrate_registry_mirror_from_pillar.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/db/migrate/20180221142221_migrate_registry_mirror_from_pillar.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,43 @@ +class MigrateRegistryMirrorFromPillar < ActiveRecord::Migration + def up + url_pillar = Pillar.find_by(pillar: :suse_registry_mirror_url) + cert_pillar = Pillar.find_by(pillar: :suse_registry_mirror_cert) + if url_pillar + registry = Registry.create( + name: Registry::SUSE_REGISTRY_NAME, + url: Registry::SUSE_REGISTRY_URL + ) + mirror = RegistryMirror.create( + url: url_pillar.value, + name: Registry::SUSE_REGISTRY_NAME, + registry_id: registry.id + ) + url_pillar.destroy + end + if cert_pillar + cert = Certificate.create(certificate: cert_pillar.value) + CertificateService.create( + certificate_id: cert.id, + service_id: mirror.id, + service_type: mirror.class.name + ) + cert_pillar.destroy + end + end + + def down + mirror = RegistryMirror.find_by(name: Registry::SUSE_REGISTRY_NAME) + if mirror + Pillar.create(pillar: :suse_registry_mirror_url, value: mirror.url) + cert_service = CertificateService.find_by(service_id: mirror.id) + if cert_service + Pillar.create( + pillar: :suse_registry_mirror_cert, + value: Certificate.find(cert_service.certificate_id).certificate + ) + end + mirror.destroy + Registry.find_by(name: Registry::SUSE_REGISTRY_NAME).destroy + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/schema.rb new/velum-master/db/schema.rb --- old/velum-master/db/schema.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/db/schema.rb 2018-02-26 15:27:28.000000000 +0100 @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180206150021) do +ActiveRecord::Schema.define(version: 20180221142221) do create_table "certificate_services", force: :cascade do |t| t.integer "certificate_id", limit: 4 @@ -29,13 +29,6 @@ t.datetime "updated_at" end - create_table "docker_registries", force: :cascade do |t| - t.string "url", limit: 255 - t.string "mirror", limit: 255 - t.datetime "created_at" - t.datetime "updated_at" - end - create_table "jids", id: false, force: :cascade do |t| t.string "jid", limit: 255, null: false t.text "load", limit: 16777215, null: false @@ -79,6 +72,23 @@ add_index "pillars", ["minion_id"], name: "index_pillars_on_minion_id", using: :btree add_index "pillars", ["pillar"], name: "index_pillars_on_pillar", using: :btree + create_table "registries", force: :cascade do |t| + t.string "name", limit: 255 + t.string "url", limit: 255 + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "registry_mirrors", force: :cascade do |t| + t.string "name", limit: 255 + t.string "url", limit: 255 + t.integer "registry_id", limit: 4 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "registry_mirrors", ["registry_id"], name: "index_registry_mirrors_on_registry_id", using: :btree + create_table "salt_events", force: :cascade do |t| t.string "tag", limit: 255, null: false t.text "data", limit: 16777215, null: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/db/seeds.rb new/velum-master/db/seeds.rb --- old/velum-master/db/seeds.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/db/seeds.rb 2018-02-26 15:27:28.000000000 +0100 @@ -8,15 +8,15 @@ # Character.create(name: 'Luke', movie: movies.first) def seed_development - User.create email: "[email protected]", password: "password" + # nothing yet end def seed_production - # Nothing yet + # nothing yet end case Rails.env -when "development", "test" +when "test", "development" seed_development when "production" seed_production diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/packaging/suse/patches/0_set_default_salt_events_alter_time_column_value.rpm.patch new/velum-master/packaging/suse/patches/0_set_default_salt_events_alter_time_column_value.rpm.patch --- old/velum-master/packaging/suse/patches/0_set_default_salt_events_alter_time_column_value.rpm.patch 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/packaging/suse/patches/0_set_default_salt_events_alter_time_column_value.rpm.patch 2018-02-26 15:27:28.000000000 +0100 @@ -1,8 +1,8 @@ diff --git a/db/schema.rb b/db/schema.rb -index a86a539..d571993 100644 +index 80fdb6b..d14f1cb 100644 --- a/db/schema.rb +++ b/db/schema.rb -@@ -82,7 +82,7 @@ ActiveRecord::Schema.define(version: 20180110112210) do +@@ -92,7 +92,7 @@ ActiveRecord::Schema.define(version: 20180221142221) do create_table "salt_events", force: :cascade do |t| t.string "tag", limit: 255, null: false t.text "data", limit: 16777215, null: false @@ -11,7 +11,7 @@ t.string "master_id", limit: 255, null: false t.datetime "taken_at" t.datetime "processed_at" -@@ -100,7 +100,7 @@ ActiveRecord::Schema.define(version: 20180110112210) do +@@ -110,7 +110,7 @@ ActiveRecord::Schema.define(version: 20180221142221) do t.string "id", limit: 255, null: false t.string "success", limit: 10, null: false t.text "full_ret", limit: 16777215, null: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/controllers/internal_api/v1/pillars_controller_spec.rb new/velum-master/spec/controllers/internal_api/v1/pillars_controller_spec.rb --- old/velum-master/spec/controllers/internal_api/v1/pillars_controller_spec.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/spec/controllers/internal_api/v1/pillars_controller_spec.rb 2018-02-26 15:27:28.000000000 +0100 @@ -5,11 +5,14 @@ render_views - let(:certificate) { Certificate.create certificate: "certificate" } + let(:certificate) { create(:certificate) } let(:expected_flat_pillars_response) do { dashboard: "dashboard.example.com", - registries: [] + registries: [ + url: "https://registry.suse.com", + cert: nil + ] } end @@ -21,6 +24,7 @@ describe "GET /pillar" do before do Pillar.create pillar: "dashboard", value: "dashboard.example.com" + create(:registry) end it "has the expected response status" do @@ -39,15 +43,20 @@ { registries: [ { + url: "https://registry.suse.com", + cert: nil + }, + { url: "https://example.com", - cert: "certificate" + cert: nil }, { url: "https://remote.registry.com", + cert: nil, mirrors: [ { - url: "http://mirror.local.lan", - cert: "certificate" + url: "https://mirror.local.lan", + cert: certificate.certificate }, { url: "http://mirror2.local.lan", @@ -60,13 +69,18 @@ end before do - DockerRegistry.create(url: "https://example.com", certificate: certificate) - DockerRegistry.create( - url: "http://mirror.local.lan", - mirror: "https://remote.registry.com", - certificate: certificate - ) - DockerRegistry.create(url: "http://mirror2.local.lan", mirror: "https://remote.registry.com") + create(:registry) + Registry.create(name: "example", url: "https://example.com") + registry = Registry.create(name: "remote", url: "https://remote.registry.com") + registry_mirror = RegistryMirror.create(url: "https://mirror.local.lan") do |m| + m.name = "suse_testing_mirror" + m.registry_id = registry.id + end + CertificateService.create(service: registry_mirror, certificate: certificate) + RegistryMirror.create(url: "http://mirror2.local.lan") do |m| + m.name = "suse_testing_mirror2" + m.registry_id = registry.id + end end it "has remote registries and respective mirrors" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/controllers/setup_controller_spec.rb new/velum-master/spec/controllers/setup_controller_spec.rb --- old/velum-master/spec/controllers/setup_controller_spec.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/spec/controllers/setup_controller_spec.rb 2018-02-26 15:27:28.000000000 +0100 @@ -2,8 +2,10 @@ # rubocop:disable RSpec/AnyInstance RSpec.describe SetupController, type: :controller do - let(:user) { create(:user) } - let(:minion) { create(:minion) } + let(:user) { create(:user) } + let(:minion) { create(:minion) } + let(:registry) { create(:registry) } + let(:certificate) { create(:certificate) } let(:settings_params) do { dashboard: "dashboard.example.com", @@ -284,7 +286,7 @@ no_registry_mirror_settings.dup.tap do |s| s["suse_registry_mirror"] = { url: "https://local.registry", - certificate: "something" + certificate: "some cert" } end end @@ -296,7 +298,7 @@ it "doesn't store any related data" do put :configure, settings: no_registry_mirror_settings - expect(DockerRegistry.count).to eq(0) + expect(RegistryMirror.count).to eq(0) expect(Certificate.count).to eq(0) end @@ -307,12 +309,14 @@ # the "disable the suse registry mirror certificate" setting must have precedence. put :configure, settings: registry_mirror_disabled_plus_leftovers - expect(DockerRegistry.count).to eq(0) + expect(RegistryMirror.count).to eq(0) expect(Certificate.count).to eq(0) end end - context "when suse registry mirror weren't previously configured" do + context "when suse registry mirror wasn't previously configured" do + let(:registry_mirror) { RegistryMirror.find_by(registry_id: registry.id) } + let(:registry_mirror_enabled) do settings_params.dup.tap do |s| s["dashboard"] = "dashboard" @@ -320,39 +324,45 @@ s["suse_registry_mirror_enabled"] = "enable" s["suse_registry_mirror_certificate_enabled"] = "enable" s["suse_registry_mirror"] = { - url: "https://local.registry" + name: "suse_testing_mirror", + url: "https://local.registry" } end end let(:registry_mirror_enabled_plus_certificate) do registry_mirror_enabled.dup.tap do |s| - s["suse_registry_mirror"]["certificate"] = "something" + s["suse_registry_mirror"]["certificate"] = certificate.certificate end end before do sign_in user + mirror = RegistryMirror.create(url: "https://local.registry") do |m| + m.name = "suse_testing_mirror" + m.registry_id = registry.id + end + CertificateService.create(service: mirror, certificate: certificate) end it "stores registry without certificate" do put :configure, settings: registry_mirror_enabled - registry = DockerRegistry.first - expect(registry.url).to eq("https://local.registry") - expect(registry.certificate).to be_nil + expect(registry_mirror.url).to eq("https://local.registry") + expect(registry_mirror.certificate).to be_nil end it "stores registry and associate with the certificate" do put :configure, settings: registry_mirror_enabled_plus_certificate - registry = DockerRegistry.first - expect(registry.url).to eq("https://local.registry") - expect(registry.certificate.certificate).to eq("something") + expect(registry_mirror.url).to eq("https://local.registry") + expect(registry_mirror.certificate.certificate).to include("BEGIN CERTIFICATE") end end context "when suse registry mirror was previously configured" do + let(:registry_mirror) { RegistryMirror.find_by(registry_id: registry.id) } + let(:pillars) do { dashboard: "dashboard.example.com" @@ -365,7 +375,8 @@ s["suse_registry_mirror_certificate_enabled"] = "disable" s["suse_registry_mirror"] = { url: "https://local.registry", - certificate: "something" + certificate: certificate.certificate, + name: "suse_testing_mirror" } end end @@ -376,18 +387,19 @@ s["suse_registry_mirror_certificate_enabled"] = "enable" s["suse_registry_mirror"] = { url: "https://local2.registry", - certificate: "something" + certificate: certificate.certificate, + name: "suse_testing_mirror" } end end before do - mirror = "https://registry.suse.com" - url = "https://local.registry" - certificate = Certificate.create(certificate: "something") - registry = DockerRegistry.create(url: url, mirror: mirror) - CertificateService.create(service: registry, certificate: certificate) Pillar.apply(pillars, required_pillars: [:dashboard]) + mirror = RegistryMirror.create(url: "https://local.registry") do |m| + m.name = "suse_testing_mirror" + m.registry_id = registry.id + end + CertificateService.create(service: mirror, certificate: certificate) sign_in user @@ -395,14 +407,10 @@ end it "assigns @suse_registry_mirror" do - registry = assigns(:suse_registry_mirror) - - expect(registry.url).to eq("https://local.registry") - expect(registry.certificate.certificate).to eq("something") - end - - it "assigns @suse_registry_mirror_certificate_enabled" do - expect(assigns(:suse_registry_mirror_certificate_enabled)).to eq(true) + registry_from_view = assigns(:suse_registry_mirror) + expect(registry_from_view.url).to eq("https://local.registry") + expect(CertificateService.find_by(service_id: registry_from_view.id) + .certificate.certificate).to include("BEGIN CERTIFICATE") end it "assigns @suse_registry_mirror_enabled" do @@ -412,9 +420,8 @@ it "changes mirror url but keep the certificate" do put :configure, settings: registry_mirror_changed_plus_certificate - registry = DockerRegistry.first - expect(registry.url).to eq("https://local2.registry") - expect(registry.certificate.certificate).to eq("something") + expect(registry_mirror.url).to eq("https://local2.registry") + expect(registry_mirror.certificate.certificate).to include("BEGIN CERTIFICATE") end it "erases certificate field left by the user if field disabled" do @@ -424,12 +431,10 @@ # the "disable the suse registry mirror" setting must have precedence. put :configure, settings: registry_mirror_enabled_plus_certificate_leftover - registry = DockerRegistry.first - expect(registry.url).to eq("https://local.registry") - # this must be set to nil, even though the value specied by the user # was different - expect(registry.certificate).to be_nil + expect(registry_mirror.certificate).to be_nil + expect(CertificateService.find_by(service_id: registry_mirror.id)).to eq(nil) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/factories/certificate_factory.rb new/velum-master/spec/factories/certificate_factory.rb --- old/velum-master/spec/factories/certificate_factory.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/spec/factories/certificate_factory.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,126 @@ +FactoryGirl.define do + factory :certificate do + certificate %( +Certificate: + Data: + Version: 3 (0x2) + Serial Number: + e6:4d:fd:80:de:e5:5e:20 + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd + Validity + Not Before: Jan 15 13:04:33 2018 GMT + Not After : Feb 14 13:04:33 2018 GMT + Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (4096 bit) + Modulus: + 00:d3:f7:39:b9:c4:f6:fb:ff:bf:97:fb:38:42:f3: + 48:da:4b:fa:c6:62:92:27:44:7c:8c:72:a6:11:a8: + e6:d3:1b:d5:c2:68:d7:be:2e:91:c8:c6:67:d1:78: + f9:10:e4:73:0f:f1:43:c3:f2:da:f3:38:9e:7e:4e: + af:aa:bf:40:d6:6e:28:86:0f:f3:5e:b7:b8:09:52: + a9:03:28:b4:f8:64:3b:d2:29:0a:9f:4c:eb:6f:35: + 8a:ec:c9:4f:14:20:73:33:6d:a4:8f:18:fa:46:fd: + 4f:08:3e:42:f0:ce:69:45:b6:ca:bb:0a:82:7f:4c: + f9:c4:28:c8:28:2c:c8:a5:6c:e9:1c:ec:e9:07:84: + fa:62:35:13:11:f0:c6:b3:2f:46:82:d7:cb:7c:23: + 71:e5:8b:2d:11:32:ca:4c:1d:c5:17:57:37:1c:8f: + 76:15:7e:2c:d5:b3:79:6c:cd:c7:b6:11:dd:64:52: + 13:24:69:7f:ad:e8:a3:f6:d5:60:06:16:bd:b8:8d: + e0:4a:ab:d3:2a:e3:e1:41:cb:fa:0b:72:4d:09:f6: + 9d:8e:9e:86:7a:ea:87:1f:7f:49:1f:40:93:ad:a5: + b0:64:33:e4:3a:a6:5d:94:23:3e:9f:2a:0a:e6:97: + df:b6:dc:1b:eb:3b:d0:8b:ab:33:0d:e2:78:83:c4: + ca:f7:9d:d9:9a:dc:33:54:0c:bf:5f:48:35:b1:c3: + df:b6:0f:f2:b4:5b:b0:c3:86:ee:b4:c6:5f:8a:e4: + 8c:f8:83:44:4b:fb:da:3f:06:4c:73:8e:a2:48:fb: + 4e:60:58:d7:84:4d:5e:78:43:db:2e:3e:1d:c5:16: + 63:b1:d6:44:c0:6c:ab:35:66:de:a5:27:f1:25:48: + 43:e9:a9:75:42:ac:f4:3d:4c:f0:7e:84:0e:db:60: + 41:61:26:ca:b1:6f:e9:9e:b1:94:9e:2e:4c:42:85: + 63:9f:14:79:c4:27:78:f7:90:44:49:28:48:7d:d1: + 01:33:90:8a:91:2b:e4:f2:b0:10:b9:af:e4:e4:10: + a0:ad:71:bc:df:75:d5:45:2f:04:0f:f0:65:e5:1f: + df:18:e1:96:34:ba:c0:84:3b:7c:d9:ff:86:8d:d2: + 2e:a4:4b:e6:42:0e:82:5f:36:cd:6e:dd:f4:c6:ba: + 48:51:21:27:00:26:a6:2d:6b:61:0d:a5:43:a5:ca: + 82:0d:a5:3f:fb:b1:04:d2:0f:41:35:49:35:3b:6e: + 9d:ad:e0:2d:81:18:bb:8d:d3:18:64:c5:01:79:16: + 2d:1f:13:75:1a:d6:7d:a7:ba:fd:f4:15:5b:8b:03: + 19:25:1a:7e:49:90:69:07:0d:68:b2:46:1b:5e:ba: + 1f:a2:13 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 6C:B5:66:46:4D:CE:8A:B0:DF:7F:2D:7A:A3:C6:6B:08:37:9D:53:5B + X509v3 Authority Key Identifier: + keyid:6C:B5:66:46:4D:CE:8A:B0:DF:7F:2D:7A:A3:C6:6B:08:37:9D:53:5B + + X509v3 Basic Constraints: + CA:TRUE + Signature Algorithm: sha256WithRSAEncryption + 18:6c:28:a7:c0:2d:fa:14:0a:6f:84:73:ed:3b:a6:10:04:6d: + 88:af:dc:83:c2:8b:7c:a3:99:69:f3:35:b8:26:3c:f3:c5:7c: + 2f:c8:00:f1:83:e4:1e:42:e7:ac:0c:4d:5e:1e:22:b5:a7:9b: + 32:e6:4a:8a:63:28:50:3a:68:80:38:d3:d8:c5:82:92:95:a7: + 30:a8:6e:ba:d8:47:2c:ed:70:16:b9:a9:aa:27:99:08:65:e7: + 2d:24:7b:d6:e8:0f:7e:6b:b9:88:40:3c:18:a1:20:29:75:85: + 15:5e:d7:d7:12:2c:87:ba:17:7c:11:f5:69:40:64:96:0d:e6: + 2b:d8:5b:9d:74:a3:7b:3f:aa:15:fd:7d:b6:fd:54:23:bc:af: + 62:40:11:c9:d5:d5:1c:c7:80:9d:fb:42:ea:a9:15:cc:e2:a2: + 43:55:6d:9a:cb:95:0e:c8:11:3a:1a:e1:15:25:95:ad:e8:9c: + 00:af:04:2c:65:b0:5e:5e:73:c3:84:8a:6a:46:dc:12:c5:dc: + 2f:95:0c:17:70:f1:6b:d8:65:68:f2:a0:1a:b4:16:be:c0:99: + 64:e4:2a:8a:0b:3e:19:4b:97:3b:86:75:c3:cb:3f:90:b6:c1: + 39:7e:69:45:99:57:29:ef:68:3d:48:fd:06:03:aa:87:7a:2b: + 01:c5:8d:89:d6:f5:b8:b5:61:c1:03:54:3a:c4:a3:3e:59:a5: + 86:4f:ee:8c:92:55:93:5a:37:b1:3d:8f:1f:05:cc:bd:5f:0f: + cf:ab:70:0b:14:31:30:74:11:ce:a0:32:8c:10:f0:38:54:92: + 78:88:dd:ca:76:63:f3:ab:22:af:c5:7c:93:2f:b9:21:42:16: + a1:60:54:f6:39:28:e5:ff:84:ac:29:43:4e:5a:ee:d3:f2:fa: + 30:d3:79:05:a2:8d:b6:6f:9a:d6:b0:b8:1e:d6:50:6d:03:59: + 2f:55:86:21:99:c8:d8:d9:d6:24:46:2e:1b:44:9f:a2:0b:8d: + 6a:44:bb:01:96:8b:99:ac:6c:ed:4c:c8:12:e8:9a:5c:eb:1f: + 2c:0f:b7:1d:4c:b5:3f:e8:60:0c:83:a2:fd:c3:d2:02:e3:3f: + 71:72:38:9d:0e:e3:34:ca:7d:19:c6:a1:ac:a5:5e:13:ea:d7: + d4:81:d5:5e:12:2b:23:18:c1:7a:79:c9:01:41:0c:07:59:32: + b9:66:eb:ae:9f:4f:00:7a:95:66:69:d2:6a:d3:fb:05:1d:61: + 01:c6:07:5a:76:85:37:c7:54:0d:5e:bf:47:31:33:d0:dd:52: + ee:1e:8c:61:56:c6:db:9c:ed:62:a9:9f:f7:1e:1e:a8:f7:45: + 5c:f8:18:72:14:3d:5c:58 +-----BEGIN CERTIFICATE----- +MIIFXTCCA0WgAwIBAgIJAOZN/YDe5V4gMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQwHhcNMTgwMTE1MTMwNDMzWhcNMTgwMjE0MTMwNDMzWjBF +MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 +ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEA0/c5ucT2+/+/l/s4QvNI2kv6xmKSJ0R8jHKmEajm0xvVwmjXvi6RyMZn +0Xj5EORzD/FDw/La8ziefk6vqr9A1m4ohg/zXre4CVKpAyi0+GQ70ikKn0zrbzWK +7MlPFCBzM22kjxj6Rv1PCD5C8M5pRbbKuwqCf0z5xCjIKCzIpWzpHOzpB4T6YjUT +EfDGsy9GgtfLfCNx5YstETLKTB3FF1c3HI92FX4s1bN5bM3HthHdZFITJGl/reij +9tVgBha9uI3gSqvTKuPhQcv6C3JNCfadjp6GeuqHH39JH0CTraWwZDPkOqZdlCM+ +nyoK5pffttwb6zvQi6szDeJ4g8TK953ZmtwzVAy/X0g1scPftg/ytFuww4butMZf +iuSM+INES/vaPwZMc46iSPtOYFjXhE1eeEPbLj4dxRZjsdZEwGyrNWbepSfxJUhD +6al1Qqz0PUzwfoQO22BBYSbKsW/pnrGUni5MQoVjnxR5xCd495BESShIfdEBM5CK +kSvk8rAQua/k5BCgrXG833XVRS8ED/Bl5R/fGOGWNLrAhDt82f+GjdIupEvmQg6C +XzbNbt30xrpIUSEnACamLWthDaVDpcqCDaU/+7EE0g9BNUk1O26dreAtgRi7jdMY +ZMUBeRYtHxN1GtZ9p7r99BVbiwMZJRp+SZBpBw1oskYbXrofohMCAwEAAaNQME4w +HQYDVR0OBBYEFGy1ZkZNzoqw338teqPGawg3nVNbMB8GA1UdIwQYMBaAFGy1ZkZN +zoqw338teqPGawg3nVNbMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIB +ABhsKKfALfoUCm+Ec+07phAEbYiv3IPCi3yjmWnzNbgmPPPFfC/IAPGD5B5C56wM +TV4eIrWnmzLmSopjKFA6aIA409jFgpKVpzCobrrYRyztcBa5qaonmQhl5y0ke9bo +D35ruYhAPBihICl1hRVe19cSLIe6F3wR9WlAZJYN5ivYW510o3s/qhX9fbb9VCO8 +r2JAEcnV1RzHgJ37QuqpFcziokNVbZrLlQ7IEToa4RUlla3onACvBCxlsF5ec8OE +impG3BLF3C+VDBdw8WvYZWjyoBq0Fr7AmWTkKooLPhlLlzuGdcPLP5C2wTl+aUWZ +VynvaD1I/QYDqod6KwHFjYnW9bi1YcEDVDrEoz5ZpYZP7oySVZNaN7E9jx8FzL1f +D8+rcAsUMTB0Ec6gMowQ8DhUkniI3cp2Y/OrIq/FfJMvuSFCFqFgVPY5KOX/hKwp +Q05a7tPy+jDTeQWijbZvmtawuB7WUG0DWS9VhiGZyNjZ1iRGLhtEn6ILjWpEuwGW +i5msbO1MyBLomlzrHywPtx1MtT/oYAyDov3D0gLjP3FyOJ0O4zTKfRnGoaylXhPq +19SB1V4SKyMYwXp5yQFBDAdZMrlm666fTwB6lWZp0mrT+wUdYQHGB1p2hTfHVA1e +v0cxM9DdUu4ejGFWxtuc7WKpn/ceHqj3RVz4GHIUPVxY +-----END CERTIFICATE----- +) + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/factories/registry_factory.rb new/velum-master/spec/factories/registry_factory.rb --- old/velum-master/spec/factories/registry_factory.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/spec/factories/registry_factory.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,6 @@ +FactoryGirl.define do + factory :registry do + name "SUSE" + url "https://registry.suse.com" + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/models/docker_registry_spec.rb new/velum-master/spec/models/docker_registry_spec.rb --- old/velum-master/spec/models/docker_registry_spec.rb 2018-02-22 10:57:04.000000000 +0100 +++ new/velum-master/spec/models/docker_registry_spec.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,74 +0,0 @@ -require "rails_helper" - -describe DockerRegistry, type: :model do - let(:settings_params) do - [ - { - "url" => "http://some.reg.example.org:5000", - "certificate" => "CERT", - "mirror" => nil - } - ] - end - - let(:invalid_settings_params) do - [ - { - "url" => "invalid-url", - "certificate" => "CERT", - "mirror" => nil - } - ] - end - - it { is_expected.to validate_presence_of(:url) } - it { is_expected.to validate_uniqueness_of(:url) } - it { is_expected.to have_one(:certificate_service).dependent(:destroy) } - it { is_expected.to have_one(:certificate).through(:certificate_service) } - - # rubocop:disable RSpec/ExampleLength,RSpec/AnyInstance,RSpec/MultipleExpectations - describe "#apply" do - it "creates a certificate and a registry" do - params = settings_params.first - expect(described_class.apply(settings_params)).to be_an Array - expect(described_class.find_by(url: params["url"]).url) - .to eq("http://some.reg.example.org:5000") - expect(Certificate.find_by(certificate: params["certificate"]).certificate) - .to eq("CERT") - end - - it "does not create entries when params are empty" do - expect(described_class.apply([])).to be_an Array - expect(described_class.all.empty?).to be true - expect(Certificate.all.empty?).to be true - end - - it "removes old registries" do - described_class.apply(settings_params) - described_class.apply([]) - expect(described_class.count).to eq 0 - end - - context "when deleting a registry" do - it "keeps the related certificate" do - described_class.apply(settings_params) - described_class.apply([]) - expect(Certificate.count).to eq 1 - end - end - - context "when creating an invalid registry" do - it "returns an error for url" do - expect(described_class.apply(invalid_settings_params)) - .to include(/doesn't match a docker registry pattern/) - end - - it "returns an error for certificate" do - allow_any_instance_of(Certificate).to receive(:persisted?).and_return(false) - expect(described_class.apply(settings_params)) - .to include("Failed to validate certificate") - end - end - end - # rubocop:enable RSpec/ExampleLength,RSpec/AnyInstance,RSpec/MultipleExpectations -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/models/registry_mirror_spec.rb new/velum-master/spec/models/registry_mirror_spec.rb --- old/velum-master/spec/models/registry_mirror_spec.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/spec/models/registry_mirror_spec.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,7 @@ +require "rails_helper" + +describe RegistryMirror do + it { is_expected.to validate_uniqueness_of(:url) } + it { is_expected.to validate_presence_of(:name) } + it { is_expected.to validate_uniqueness_of(:name) } +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/models/registry_spec.rb new/velum-master/spec/models/registry_spec.rb --- old/velum-master/spec/models/registry_spec.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/spec/models/registry_spec.rb 2018-02-26 15:27:28.000000000 +0100 @@ -0,0 +1,60 @@ +require "rails_helper" + +describe Registry, type: :model do + let(:registry) { create(:registry) } + let(:certificate) { create(:certificate) } + + let(:settings_params) do + { + "certificate" => certificate.certificate, + "name" => "suse_testing_mirror", + "mirror_url" => "https://local.registry" + } + end + + let(:invalid_settings_params) { settings_params.dup.tap { |s| s["mirror_url"] = "baz" } } + let(:empty_cert_params) { settings_params.dup.tap { |c| c["certificate"] = nil } } + + before do + CertificateService.create(service: registry, certificate: certificate) + RegistryMirror.create(url: "https://local.registry") do |m| + m.name = "suse_testing_mirror" + m.registry_id = registry.id + end + end + + after do + RegistryMirror.destroy_all + CertificateService.destroy_all + end + + it { is_expected.to validate_presence_of(:url) } + it { is_expected.to validate_uniqueness_of(:url) } + it { is_expected.to validate_presence_of(:name) } + it { is_expected.to validate_uniqueness_of(:name) } + + # rubocop:disable RSpec/MultipleExpectations + describe "#configure_suse_registry" do + it "creates a mirror for the suse registry" do + expect(described_class.configure_suse_registry(settings_params)).to be_an Array + expect(RegistryMirror.find_by(url: settings_params["mirror_url"]).url) + .to eq("https://local.registry") + expect(Certificate.find_by(certificate: settings_params["certificate"]).certificate) + .to include("BEGIN CERTIFICATE") + end + + it "removes old certificate services attached to a registry mirror" do + described_class.configure_suse_registry(settings_params) + described_class.configure_suse_registry(empty_cert_params) + expect(CertificateService.where(service_type: "RegistryMirror").count).to eq 0 + end + + context "when creating an invalid registry" do + it "returns an error for url" do + expect(described_class.configure_suse_registry(invalid_settings_params)) + .to include(/doesn't match a registry pattern/) + end + end + end + # rubocop:enable RSpec/MultipleExpectations +end
