summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2017-09-26 17:46:09 +0900
committerShinya Maeda <shinya@gitlab.com>2017-09-26 17:46:09 +0900
commitd65cd0a68066c20250a3b7cbf5f6e3767f359c41 (patch)
tree003953aec64bb03b1dba6141437f27f50c8f3b3c
parentbdc618c289b8c2b996a3ef92b7748966c311d28a (diff)
downloadgitlab-ce-d65cd0a68066c20250a3b7cbf5f6e3767f359c41.tar.gz
Tie KubernetesService
-rw-r--r--app/controllers/projects/clusters_controller.rb40
-rw-r--r--app/models/ci/cluster.rb1
-rw-r--r--config/routes/project.rb3
-rw-r--r--lib/google_api/cloud_platform/client.rb2
4 files changed, 33 insertions, 13 deletions
diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb
index 2aafc6364eb..0d9707a8ff8 100644
--- a/app/controllers/projects/clusters_controller.rb
+++ b/app/controllers/projects/clusters_controller.rb
@@ -32,8 +32,10 @@ class Projects::ClustersController < Projects::ApplicationController
# - If create on GKE, Use Google::Apis::ContainerV1::ContainerService
# - If create manually, save in db (Prob, Project > Setting)
# - Dry up with Service
+ # - Transaction
def create
if params['creation_type'] == 'on_gke'
+ # Create a cluster on GKE
results = api_client.projects_zones_clusters_create(
params['gcp_project_id'],
params['cluster_zone'],
@@ -41,22 +43,24 @@ class Projects::ClustersController < Projects::ApplicationController
params['cluster_size']
)
- # TODO: How to create
- project.kubernetes_service.save(
- end_point: results['end_point'],
- ca_cert: results['ca_cert'],
- token: nil,
- username: results['username'],
- password: results['password'],
- project_namespace: params['project_namespace']
- )
+ # Update service
+ kubernetes_service.attributes = service_params(
+ active: true,
+ api_url: results['end_point'],
+ ca_pem: results['ca_cert'], # TODO: Decode Base64
+ namespace: params['project_namespace'],
+ token: 'aaa' # TODO: username/password
+ )
+ kubernetes_service.save!
+
+ # Save info
project.clusters.create(
creation_type: params['creation_type'],
gcp_project_id: params['gcp_project_id'],
cluster_zone: params['cluster_zone'],
cluster_name: params['cluster_name'],
- kubernetes_service: project.kubernetes_service
+ service: kubernetes_service
)
elsif params['creation_type'] == 'manual'
# TODO: Transaction
@@ -121,7 +125,7 @@ class Projects::ClustersController < Projects::ApplicationController
def cluster
# Each project has only one cluster, for now. In the future iteraiton, we'll support multiple clusters
- @cluster ||= project.clusters.first
+ @cluster ||= project.clusters.last
end
# def cluster_params
@@ -136,4 +140,18 @@ class Projects::ClustersController < Projects::ApplicationController
state: namespace_project_clusters_url.to_s
)
end
+
+ def kubernetes_service
+ @kubernetes_service ||= project.find_or_initialize_service('kubernetes')
+ end
+
+ def service_params(active:, api_url:, ca_pem:, namespace:, token:)
+ {
+ active: active,
+ api_url: api_url,
+ ca_pem: ca_pem,
+ namespace: namespace,
+ token: token
+ }
+ end
end
diff --git a/app/models/ci/cluster.rb b/app/models/ci/cluster.rb
index 2e614a1a373..85dcd3c4f58 100644
--- a/app/models/ci/cluster.rb
+++ b/app/models/ci/cluster.rb
@@ -4,6 +4,7 @@ module Ci
belongs_to :project
belongs_to :owner, class_name: 'User'
+ belongs_to :service
enum creation_type: {
unknown: nil,
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 5a43e2274a6..27160d8c364 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -183,10 +183,11 @@ constraints(ProjectUrlConstrainer.new) do
end
end
- resources :clusters, except: [:show, :destroy] do
+ resources :clusters, except: [:edit, :show, :destroy] do
collection do
get :gcp_projects # TODO: This doesn't belong here. Grape or under user. Hint. Serilizer
get :gke_zones
+ get :edit
end
end
diff --git a/lib/google_api/cloud_platform/client.rb b/lib/google_api/cloud_platform/client.rb
index f2305eab3b7..baaf2e0d0fb 100644
--- a/lib/google_api/cloud_platform/client.rb
+++ b/lib/google_api/cloud_platform/client.rb
@@ -28,7 +28,7 @@ module GoogleApi
# TODO: Debug
{
- 'end_point' => '111.111.111.111',
+ 'end_point' => 'https://111.111.111.111',
'ca_cert' => 'XXXXXXXXXXXXXXXXXX',
'username' => 'AAA',
'password' => 'BBB'