diff options
-rw-r--r-- | app/controllers/projects/clusters_controller.rb | 40 | ||||
-rw-r--r-- | app/models/ci/cluster.rb | 1 | ||||
-rw-r--r-- | config/routes/project.rb | 3 | ||||
-rw-r--r-- | lib/google_api/cloud_platform/client.rb | 2 |
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' |