Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThong Kuah <tkuah@gitlab.com>2019-03-25 06:42:28 +0300
committerThong Kuah <tkuah@gitlab.com>2019-03-27 09:54:10 +0300
commitaf049cb96835e8ed037c3afabc7ec3518fcb8365 (patch)
tree9abee3b330237d163362d186ad676c8f0f5293a1
parent386e4d677bc5aa3532a08a4eff376b63ab6fb00c (diff)
Add Paas::Service model
This models a Knative Service for a namespace/project. We can have multiple Services for a namespace/project
-rw-r--r--app/models/paas/service.rb15
-rw-r--r--db/migrate/20190325032617_create_paas_services.rb15
-rw-r--r--db/schema.rb11
-rw-r--r--spec/models/paas/service_spec.rb12
4 files changed, 52 insertions, 1 deletions
diff --git a/app/models/paas/service.rb b/app/models/paas/service.rb
new file mode 100644
index 00000000000..2556e4b26c8
--- /dev/null
+++ b/app/models/paas/service.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Paas
+ class Service < ApplicationRecord
+ self.table_name = 'paas_services'
+
+ belongs_to :namespace, class_name: 'Paas::Namespace'
+
+ delegate :project, to: :namespace
+
+ validates :name, presence: true
+ validates :image, presence: true
+ validates :domain, hostname: { allow_numeric_hostname: true }
+ end
+end
diff --git a/db/migrate/20190325032617_create_paas_services.rb b/db/migrate/20190325032617_create_paas_services.rb
new file mode 100644
index 00000000000..0be554fce5d
--- /dev/null
+++ b/db/migrate/20190325032617_create_paas_services.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class CreatePaasServices < ActiveRecord::Migration[5.0]
+ DOWNTIME = false
+
+ def change
+ create_table :paas_services, id: :bigserial do |t|
+ t.string :name, null: false
+ t.text :image, null: false
+ t.string :domain
+
+ t.references :namespace, null: false, index: true, foreign_key: { to_table: :paas_clusters, on_delete: :cascade }
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index a589cbea0f4..971e0cc5aa4 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20190325021602) do
+ActiveRecord::Schema.define(version: 20190325032617) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -1532,6 +1532,14 @@ ActiveRecord::Schema.define(version: 20190325021602) do
t.index ["project_id"], name: "index_paas_namespaces_on_project_id", using: :btree
end
+ create_table "paas_services", id: :bigserial, force: :cascade do |t|
+ t.string "name", null: false
+ t.text "image", null: false
+ t.string "domain"
+ t.integer "namespace_id", null: false
+ t.index ["namespace_id"], name: "index_paas_services_on_namespace_id", using: :btree
+ end
+
create_table "pages_domains", force: :cascade do |t|
t.integer "project_id"
t.text "certificate"
@@ -2500,6 +2508,7 @@ ActiveRecord::Schema.define(version: 20190325021602) do
add_foreign_key "oauth_openid_requests", "oauth_access_grants", column: "access_grant_id", name: "fk_oauth_openid_requests_oauth_access_grants_access_grant_id"
add_foreign_key "paas_namespaces", "clusters", on_delete: :cascade
add_foreign_key "paas_namespaces", "projects", on_delete: :nullify
+ add_foreign_key "paas_services", "paas_clusters", column: "namespace_id", on_delete: :cascade
add_foreign_key "pages_domains", "projects", name: "fk_ea2f6dfc6f", on_delete: :cascade
add_foreign_key "personal_access_tokens", "users"
add_foreign_key "pool_repositories", "projects", column: "source_project_id", on_delete: :nullify
diff --git a/spec/models/paas/service_spec.rb b/spec/models/paas/service_spec.rb
new file mode 100644
index 00000000000..d4b412de8ec
--- /dev/null
+++ b/spec/models/paas/service_spec.rb
@@ -0,0 +1,12 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Paas::Service, type: :model do
+ it { is_expected.to belong_to(:namespace).class_name('Paas::Namespace') }
+
+ it { is_expected.to delegate_method(:project).to(:namespace) }
+
+ it { is_expected.to validate_presence_of(:name) }
+ it { is_expected.to validate_presence_of(:image) }
+end