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


Reply via email to