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 - containers-bugowner@suse.de
+
+- Commit 2115e91 by Maximilian Meister mmeister@suse.de
+ rebase patch
+
+ Signed-off-by: Maximilian Meister
+
+
+-------------------------------------------------------------------
+Mon Feb 26 12:44:01 UTC 2018 - containers-bugowner@suse.de
+
+- Commit 50aa226 by Maximilian Meister mmeister@suse.de
+ add mirrors model
+
+ Signed-off-by: Maximilian Meister
+
+ Commit d621057 by Maximilian Meister mmeister@suse.de
+ drop docker prefix for registries
+
+ Signed-off-by: Maximilian Meister
+
+
+-------------------------------------------------------------------
+Mon Feb 26 10:52:42 UTC 2018 - containers-bugowner@suse.de
+
+- Commit 6f880cf by Maximilian Meister mmeister@suse.de
+ 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
+
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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: "test@test.com", 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