From 55ac72e56e0cdf6faf2fcd93939d0dd77048a8ee Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 26 Sep 2017 20:34:49 +0900 Subject: [PATCH] Create cluster --- .../projects/clusters_controller.rb | 17 +++++-- app/views/projects/clusters/_form.html.haml | 9 ++++ app/views/projects/clusters/_login.html.haml | 2 + app/views/projects/clusters/edit.html.haml | 6 ++- app/views/projects/clusters/new.html.haml | 17 +------ lib/google_api/cloud_platform/client.rb | 49 ++++++++++++------- 6 files changed, 61 insertions(+), 39 deletions(-) create mode 100644 app/views/projects/clusters/_form.html.haml create mode 100644 app/views/projects/clusters/_login.html.haml diff --git a/app/controllers/projects/clusters_controller.rb b/app/controllers/projects/clusters_controller.rb index 0d9707a8ff8..bc7e23bae59 100644 --- a/app/controllers/projects/clusters_controller.rb +++ b/app/controllers/projects/clusters_controller.rb @@ -37,10 +37,11 @@ class Projects::ClustersController < Projects::ApplicationController 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'], - params['cluster_name'], - params['cluster_size'] + project_id: params['gcp_project_id'], + zone: params['cluster_zone'], + cluster_name: params['cluster_name'], + cluster_size: params['cluster_size'], + machine_type: params['machine_type'] ) # Update service @@ -90,7 +91,15 @@ class Projects::ClustersController < Projects::ApplicationController def edit unless session[GoogleApi::CloudPlatform::Client.token_in_session] @authorize_url = api_client.authorize_url + render :edit end + + # Get cluster information + api_client.projects_zones_clusters_get( + project_id: cluster.gcp_project_id, + zone: cluster.cluster_zone, + cluster_id: cluster.cluster_name + ) end def update diff --git a/app/views/projects/clusters/_form.html.haml b/app/views/projects/clusters/_form.html.haml new file mode 100644 index 00000000000..0718fb97df2 --- /dev/null +++ b/app/views/projects/clusters/_form.html.haml @@ -0,0 +1,9 @@ +Create a new cluster +%br +Avaiable GCP project lists +%br +Avaiable zones +%br += link_to "Create on Google Container Engine", namespace_project_clusters_path(@project.namespace, @project, creation_type: 'on_gke', cluster_name: 'gke-test-creation', gcp_project_id: 'gitlab-internal-153318', cluster_zone: 'us-central1-a', cluster_size: '1', project_namespace: 'aaa', machine_type: '???'), method: :post +%br += link_to "Use existing kubernets cluster", namespace_project_clusters_path(@project.namespace, @project, creation_type: 'manual', end_point: 'xxx.xxx.xxx.xxx', ca_cert: 'xxx...xxx', token: 'xxx', project_namespace: 'aaa'), method: :post diff --git a/app/views/projects/clusters/_login.html.haml b/app/views/projects/clusters/_login.html.haml new file mode 100644 index 00000000000..ccb5d68ac4c --- /dev/null +++ b/app/views/projects/clusters/_login.html.haml @@ -0,0 +1,2 @@ +Login +%p= link_to("authenticate from here", @authorize_url) diff --git a/app/views/projects/clusters/edit.html.haml b/app/views/projects/clusters/edit.html.haml index 6445b3ee75d..83c6ad7dae6 100644 --- a/app/views/projects/clusters/edit.html.haml +++ b/app/views/projects/clusters/edit.html.haml @@ -1,2 +1,6 @@ edit/show cluster -= @cluster.inspect + +- if @authorize_url + = render "login" +- else + = @cluster.inspect \ No newline at end of file diff --git a/app/views/projects/clusters/new.html.haml b/app/views/projects/clusters/new.html.haml index b716cc51c20..6ab22a5d351 100644 --- a/app/views/projects/clusters/new.html.haml +++ b/app/views/projects/clusters/new.html.haml @@ -1,17 +1,4 @@ -Create a new cluster - -%br - - if @authorize_url - I have not authenticated yet. I can authenticate from - = link_to("authenticate from here", @authorize_url) + = render "login" - else - I have already authenticated. - %br - Avaiable GCP project lists - %br - Avaiable zones - %br - = link_to "Create on Google Container Engine", namespace_project_clusters_path(@project.namespace, @project, creation_type: 'on_gke', cluster_name: 'new-cluster-shinya', gcp_project_id: 'gitlab-internal', cluster_zone: 'gitlab-internal', cluster_size: 'gitlab-internal', project_namespace: 'aaa'), method: :post - %br - = link_to "Use existing kubernets cluster", namespace_project_clusters_path(@project.namespace, @project, creation_type: 'manual', end_point: 'xxx.xxx.xxx.xxx', ca_cert: 'xxx...xxx', token: 'xxx', project_namespace: 'aaa'), method: :post + = render "form" diff --git a/lib/google_api/cloud_platform/client.rb b/lib/google_api/cloud_platform/client.rb index baaf2e0d0fb..301b4824bb0 100644 --- a/lib/google_api/cloud_platform/client.rb +++ b/lib/google_api/cloud_platform/client.rb @@ -1,8 +1,8 @@ +require 'google/apis/container_v1' + module GoogleApi module CloudPlatform class Client < GoogleApi::Authentication - # Google::Apis::ContainerV1::ContainerService.new - class << self def token_in_session :cloud_platform_access_token @@ -13,26 +13,37 @@ module GoogleApi 'https://www.googleapis.com/auth/cloud-platform' end - def projects_zones_clusters_get - # TODO: - # service = Google::Apis::ContainerV1::ContainerService.new - # service.authorization = access_token - # project_id = params['project_id'] - # ... - # response = service.list_zone_clusters(project_id, zone) - response + def projects_zones_clusters_get(project_id:, zone:, cluster_id:) + service = Google::Apis::ContainerV1::ContainerService.new + service.authorization = access_token + + response = service.get_zone_cluster(project_id, zone, cluster_id) + response.to_json end - def projects_zones_clusters_create(gcp_project_id, cluster_zone, cluster_name, cluster_size) - # TODO: Google::Apis::ContainerV1::ContainerService.new + # Responce exmaple + # {"name":"operation-1506424047439-0293f57c","operationType":"CREATE_CLUSTER","selfLink":"https://container.googleapis.com/v1/projects/696404988091/zones/us-central1-a/operations/operation-1506424047439-0293f57c","startTime":"2017-09-26T11:07:27.439033158Z","status":"RUNNING","targetLink":"https://container.googleapis.com/v1/projects/696404988091/zones/us-central1-a/clusters/gke-test-creation","zone":"us-central1-a"} + def projects_zones_clusters_create(project_id:, zone:, cluster_name:, cluster_size:, machine_type:) + service = Google::Apis::ContainerV1::ContainerService.new + service.authorization = access_token + + request_body = Google::Apis::ContainerV1::CreateClusterRequest.new( + { + "cluster": { + "name": cluster_name, + "initial_node_count": cluster_size + } + } + ) + + # TODO: machine_type : Defailt 3.75 GB + response = service.create_cluster(project_id, zone, request_body) + puts response.to_json + response.to_json + end - # TODO: Debug - { - 'end_point' => 'https://111.111.111.111', - 'ca_cert' => 'XXXXXXXXXXXXXXXXXX', - 'username' => 'AAA', - 'password' => 'BBB' - } + def get_status(project_id:, zone:, cluster_name:, cluster_size:, machine_type:) + # Observe end end end -- GitLab