Hello community, here is the log from the commit of package velum for openSUSE:Factory checked in at 2018-03-14 19:40:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/velum (Old) and /work/SRC/openSUSE:Factory/.velum.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "velum" Wed Mar 14 19:40:41 2018 rev:13 rq:586793 version:3.0.0+dev+git_r672_9f7ffab6f82eadc94ec36a8a32e1e70e5aa94bcc Changes: -------- --- /work/SRC/openSUSE:Factory/velum/velum.changes 2018-03-13 10:24:15.741289282 +0100 +++ /work/SRC/openSUSE:Factory/.velum.new/velum.changes 2018-03-14 19:41:02.760922163 +0100 @@ -1,0 +2,13 @@ +Wed Mar 14 13:56:37 UTC 2018 - containers-bugow...@suse.de + +- Commit 943655d by Vítor Avelino vavel...@suse.com + Added CPI configuration + + During the boostrap configuration it's now possible to enable cloud provider + integration. + + Co-authored-by: Maximilian Meister <mmeis...@suse.de> Signed-off-by: Vítor + Avelino <vavel...@suse.com> + + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ velum.spec ++++++ --- /var/tmp/diff_new_pack.kXNm2X/_old 2018-03-14 19:41:03.784885789 +0100 +++ /var/tmp/diff_new_pack.kXNm2X/_new 2018-03-14 19:41:03.788885647 +0100 @@ -23,7 +23,7 @@ # Version: 1.0.0 # %%define branch 1.0.0 -Version: 3.0.0+dev+git_r670_a808a80f6484c097cb87f9e380fdf0b646981986 +Version: 3.0.0+dev+git_r672_9f7ffab6f82eadc94ec36a8a32e1e70e5aa94bcc 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 a808a80f6484c097cb87f9e380fdf0b646981986 from branch master on date Mon, 12 Mar 2018 12:43:27 +0000 +This package has been built with commit 9f7ffab6f82eadc94ec36a8a32e1e70e5aa94bcc from branch master on date Wed, 14 Mar 2018 13:55:57 +0000 %prep %setup -q -n velum-%{branch} ++++++ master.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/assets/javascripts/setup/setup.js new/velum-master/app/assets/javascripts/setup/setup.js --- old/velum-master/app/assets/javascripts/setup/setup.js 2018-03-12 13:43:41.000000000 +0100 +++ new/velum-master/app/assets/javascripts/setup/setup.js 2018-03-14 14:55:30.000000000 +0100 @@ -21,5 +21,21 @@ } }); + $(document).on('change', '.cloud-provider-select', function () { + var isOpenStack = $(this).val() === 'openstack'; + + $('.openstack-settings').toggleClass('hidden', !isOpenStack); + }); + + $(document).on('change', '.enable-cloud', function () { + var isOpenStack = $('.cloud-provider-select').val() === 'openstack'; + + $('.openstack-settings').toggleClass('hidden', !isOpenStack); + }); + + $(document).on('change', '.disable-cloud', function () { + $('.openstack-settings').addClass('hidden'); + }); + new SUSERegistryMirrorPanel('.suse-mirror-panel-body'); }); \ No newline at end of file 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-03-12 13:43:41.000000000 +0100 +++ new/velum-master/app/controllers/internal_api/v1/pillars_controller.rb 2018-03-14 14:55:30.000000000 +0100 @@ -1,10 +1,13 @@ # Serve the pillar information +# rubocop:disable Metrics/ClassLength class InternalApi::V1::PillarsController < InternalApiController def show ok content: pillar_contents.merge( registry_contents ).merge( cloud_framework_contents + ).merge( + cloud_provider_contents ) end @@ -51,6 +54,15 @@ end end + def cloud_provider_contents + case Pillar.value(pillar: :cloud_provider) + when "openstack" + openstack_cloud_contents + else + {} + end + end + def ec2_cloud_contents { cloud: { @@ -96,4 +108,24 @@ } } end + + def openstack_cloud_contents + { + cloud: { + openstack: { + auth_url: Pillar.value(pillar: :cloud_openstack_auth_url), + username: Pillar.value(pillar: :cloud_openstack_username), + password: Pillar.value(pillar: :cloud_openstack_password), + domain: Pillar.value(pillar: :cloud_openstack_domain), + project: Pillar.value(pillar: :cloud_openstack_project), + region: Pillar.value(pillar: :cloud_openstack_region), + floating: Pillar.value(pillar: :cloud_openstack_floating), + subnet: Pillar.value(pillar: :cloud_openstack_subnet), + bs_version: Pillar.value(pillar: :cloud_openstack_bs_version), + lb_mon_retries: Pillar.value(pillar: :cloud_openstack_lb_mon_retries) + } + } + } + end end +# rubocop:enable Metrics/ClassLength 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-03-12 13:43:41.000000000 +0100 +++ new/velum-master/app/controllers/setup_controller.rb 2018-03-14 14:55:30.000000000 +0100 @@ -35,6 +35,20 @@ ) @suse_registry_mirror_enabled = @suse_registry_mirror.persisted? @suse_registry_mirror_certificate_enabled = @suse_registry_mirror.certificate.present? + + # cloud settings + @cloud_provider = Pillar.value(pillar: :cloud_provider) + @cloud_openstack_auth_url = Pillar.value(pillar: :cloud_openstack_auth_url) + @cloud_openstack_domain = Pillar.value(pillar: :cloud_openstack_domain) + @cloud_openstack_project = Pillar.value(pillar: :cloud_openstack_project) + @cloud_openstack_region = Pillar.value(pillar: :cloud_openstack_region) + @cloud_openstack_username = Pillar.value(pillar: :cloud_openstack_username) + @cloud_openstack_password = Pillar.value(pillar: :cloud_openstack_password) + @cloud_openstack_subnet = Pillar.value(pillar: :cloud_openstack_subnet) + @cloud_openstack_floating = Pillar.value(pillar: :cloud_openstack_floating) + @cloud_openstack_lb_mon_retries = Pillar.value(pillar: :cloud_openstack_lb_mon_retries) || "3" + @cloud_openstack_bs_version = Pillar.value(pillar: :cloud_openstack_bs_version) || "v2" + @cloud_enabled = @cloud_provider.present? end # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize @@ -146,6 +160,14 @@ settings["dex_client_secrets_velum"] = Pillar.value(pillar: :dex_client_secrets_velum) \ || SecureRandom.uuid + if params["settings"]["cloud_enabled"] == "disable" + settings["cloud_provider"] = nil + + Pillar.cloud_pillars.each_key do |k| + settings[k.to_s] = nil if k.to_s.starts_with?("cloud_openstack") + end + end + Velum::LDAP.ldap_pillar_settings!(settings) end @@ -225,7 +247,8 @@ :proxy_systemwide, :http_proxy, :https_proxy, - :no_proxy + :no_proxy, + :cloud_provider ] when "do_bootstrap" [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/helpers/setup_helper.rb new/velum-master/app/helpers/setup_helper.rb --- old/velum-master/app/helpers/setup_helper.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/app/helpers/setup_helper.rb 2018-03-14 14:55:30.000000000 +0100 @@ -0,0 +1,12 @@ +# SetupHelper contains all the view helpers for the setup process. +module SetupHelper + def cloud_provider_options + [ + ["OpenStack", :openstack] + ] + end + + def cloud_providers_options_for_select + options_for_select(cloud_provider_options, selected: @cloud_provider) + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/models/pillar.rb new/velum-master/app/models/pillar.rb --- old/velum-master/app/models/pillar.rb 2018-03-12 13:43:41.000000000 +0100 +++ new/velum-master/app/models/pillar.rb 2018-03-14 14:55:30.000000000 +0100 @@ -1,4 +1,5 @@ # Pillar represents a pillar value on Salt. +# rubocop:disable Metrics/ClassLength class Pillar < ApplicationRecord validates :pillar, presence: true validates :value, presence: true @@ -45,7 +46,6 @@ ldap_admin_group_name: "ldap:admin_group_name", ldap_tls_method: "ldap:tls_method", ldap_mail_attribute: "ldap:mail_attribute", - cloud_framework: "cloud:framework", dex_client_secrets_kubernetes: "dex:client_secrets:kubernetes", dex_client_secrets_velum: "dex:client_secrets:velum" } @@ -62,6 +62,8 @@ "cloud:providers:azure:client_id", azure_secret: "cloud:providers:azure:secret", + cloud_framework: + "cloud:framework", cloud_worker_type: "cloud:profiles:cluster_node:size", cloud_worker_subnet: @@ -71,7 +73,30 @@ cloud_worker_net: "cloud:profiles:cluster_node:network", cloud_worker_resourcegroup: - "cloud:profiles:cluster_node:resourcegroup" + "cloud:profiles:cluster_node:resourcegroup", + # CPI + cloud_provider: + "cloud:provider", + cloud_openstack_auth_url: + "cloud:openstack:auth_url", + cloud_openstack_domain: + "cloud:openstack:domain", + cloud_openstack_project: + "cloud:openstack:project", + cloud_openstack_region: + "cloud:openstack:region", + cloud_openstack_username: + "cloud:openstack:username", + cloud_openstack_password: + "cloud:openstack:password", + cloud_openstack_subnet: + "cloud:openstack:subnet", + cloud_openstack_floating: + "cloud:openstack:floating", + cloud_openstack_lb_mon_retries: + "cloud:openstack:lb_mon_retries", + cloud_openstack_bs_version: + "cloud:openstack:bs_version" } end # rubocop:enable Layout/AlignHash @@ -109,3 +134,4 @@ end end end +# rubocop:enable Metrics/ClassLength diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/views/setup/cloud/_openstack_configuration.html.slim new/velum-master/app/views/setup/cloud/_openstack_configuration.html.slim --- old/velum-master/app/views/setup/cloud/_openstack_configuration.html.slim 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/app/views/setup/cloud/_openstack_configuration.html.slim 2018-03-14 14:55:30.000000000 +0100 @@ -0,0 +1,31 @@ +.openstack-settings class="#{'hidden' if @cloud_provider != 'openstack'}" + .form-group + = f.label :cloud_openstack_auth_url, "Keystone API URL" + = f.text_field :cloud_openstack_auth_url, value: @cloud_openstack_auth_url, class: "form-control" + .form-group + = f.label :cloud_openstack_domain, "Domain name" + = f.text_field :cloud_openstack_domain, value: @cloud_openstack_domain, class: "form-control" + .form-group + = f.label :cloud_openstack_project, "Project name" + = f.text_field :cloud_openstack_project, value: @cloud_openstack_project, class: "form-control" + .form-group + = f.label :cloud_openstack_region, "Region name" + = f.text_field :cloud_openstack_region, value: @cloud_openstack_region, class: "form-control" + .form-group + = f.label :cloud_openstack_username, "Username" + = f.text_field :cloud_openstack_username, value: @cloud_openstack_username, class: "form-control" + .form-group + = f.label :cloud_openstack_password, "Password" + = f.password_field :cloud_openstack_password, value: @cloud_openstack_password, class: "form-control" + .form-group + = f.label :cloud_openstack_subnet, "Subnet UUID for the CaaS Platform private network" + = f.text_field :cloud_openstack_subnet, value: @cloud_openstack_subnet, class: "form-control" + .form-group + = f.label :cloud_openstack_floating, "Floating network UUID" + = f.text_field :cloud_openstack_floating, value: @cloud_openstack_floating, class: "form-control" + .form-group + = f.label :cloud_openstack_lb_mon_retries, "Load balancer monitor max retries" + = f.text_field :cloud_openstack_lb_mon_retries, value: @cloud_openstack_lb_mon_retries, class: "form-control" + .form-group + = f.label :cloud_openstack_bs_version, "Cinder Block Storage API version" + = f.text_field :cloud_openstack_bs_version, value: @cloud_openstack_bs_version, class: "form-control" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/views/setup/cloud/_settings.html.slim new/velum-master/app/views/setup/cloud/_settings.html.slim --- old/velum-master/app/views/setup/cloud/_settings.html.slim 1970-01-01 01:00:00.000000000 +0100 +++ new/velum-master/app/views/setup/cloud/_settings.html.slim 2018-03-14 14:55:30.000000000 +0100 @@ -0,0 +1,19 @@ +.cloud-settings-wrapper + .cloud-settings-panel.panel.panel-default + .panel-heading.clearfix + h3.panel-title Cloud provider integration + .btn-group.btn-group-sm.btn-group-toggle.pull-right data-toggle="buttons" + = label_tag :cloud_toggle, nil, class: "enable-cloud btn btn-default #{'btn-primary active' if @cloud_enabled}", data: {toggle: "collapse", target: ".cloud-settings-panel-body"} + = f.radio_button :cloud_enabled, "enable", checked: @cloud_enabled + | Enable + = label_tag :cloud_toggle, nil, class: "disable-cloud btn btn-default #{'btn-primary active' unless @cloud_enabled}", data: {toggle: "collapse", target: ".cloud-settings-panel-body"} + = f.radio_button :cloud_enabled, "disable", checked: !@cloud_enabled + | Disable + + .cloud-settings-panel-body.panel-collapse.collapse class="#{'in' if @cloud_enabled}" + .panel-body + .form-group.mirror-url-group + = f.label :url, "Choose the driver" + = f.select :cloud_provider, cloud_providers_options_for_select, { include_blank: true }, class: "form-control cloud-provider-select" + + = render partial: 'setup/cloud/openstack_configuration', locals: { f: f } \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/app/views/setup/welcome.html.slim new/velum-master/app/views/setup/welcome.html.slim --- old/velum-master/app/views/setup/welcome.html.slim 2018-03-12 13:43:41.000000000 +0100 +++ new/velum-master/app/views/setup/welcome.html.slim 2018-03-14 14:55:30.000000000 +0100 @@ -135,6 +135,7 @@ | Entire node = render partial: 'setup/settings/mirror', locals: { form: f } + = render partial: 'setup/cloud/settings', locals: { f: f } .clearfix.steps-container = submit_tag "Next", class: "btn btn-primary pull-right" 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-03-12 13:43:41.000000000 +0100 +++ new/velum-master/spec/controllers/internal_api/v1/pillars_controller_spec.rb 2018-03-14 14:55:30.000000000 +0100 @@ -231,4 +231,42 @@ expect(json).to eq(expected_response) end end + + context "with Openstack provider" do + let(:expected_response) do + { + registries: [], + cloud: { + openstack: { + auth_url: "http://keystone-test-host:5000/v3", + username: "testuser", + password: "pass", + domain: "test", + project: "prj", + region: "rspec", + floating: "9bc3e819-a6ca-648b-b5e3-c26c9e6c5e57", + subnet: "4b64b38d-0b38-40d0-a69f-ade7299ef4ab", + bs_version: "v2", + lb_mon_retries: "3" + } + } + } + end + + before do + create(:openstack_pillar) + expected_response[:cloud][:openstack].each do |k, v| + create( + :pillar, + pillar: "cloud:openstack:#{k}", + value: v + ) + end + end + + it "has cloud configuration" do + get :show + expect(json).to eq(expected_response) + end + end end 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-03-12 13:43:41.000000000 +0100 +++ new/velum-master/spec/controllers/setup_controller_spec.rb 2018-03-14 14:55:30.000000000 +0100 @@ -108,6 +108,17 @@ end end + context "when in OpenStack framework" do + before do + create(:openstack_pillar) + get :worker_bootstrap + end + + it "renders normal view" do + expect(response).to render_template(:worker_bootstrap) + end + end + context "when in Azure framework" do before do create(:azure_pillar) @@ -598,6 +609,54 @@ expect(response.redirect_url).to eq setup_url end end + + context "when cloud settings is enabled" do + let(:cloud_settings) do + settings_params.dup.tap do |s| + s["cloud_enabled"] = "enable" + s["cloud_provider"] = "openstack" + s["cloud_openstack_domain"] = "local.lan" + end + end + + before do + sign_in user + put :configure, settings: cloud_settings + end + + it "saves cloud provider pillar" do + expect(Pillar.value(pillar: :cloud_provider)).to eq("openstack") + expect(Pillar.value(pillar: :cloud_openstack_domain)).to eq("local.lan") + end + + it "redirects to worker bootstrap page" do + expect(response.redirect_url).to eq setup_worker_bootstrap_url + end + end + + context "when cloud settings is disabled" do + let(:cloud_settings) do + settings_params.dup.tap do |s| + s["cloud_enabled"] = "disable" + s["cloud_provider"] = "openstack" + s["cloud_openstack_domain"] = "local.lan" + end + end + + before do + sign_in user + put :configure, settings: cloud_settings + end + + it "redirects to worker bootstrap page" do + expect(response.redirect_url).to eq setup_worker_bootstrap_url + end + + it "erases fields left by the user" do + expect(Pillar.value(pillar: :cloud_provider)).to be_nil + expect(Pillar.value(pillar: :cloud_openstack_domain)).to be_nil + end + end end describe "GET /setup/discovery" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/factories/pillar_factory.rb new/velum-master/spec/factories/pillar_factory.rb --- old/velum-master/spec/factories/pillar_factory.rb 2018-03-12 13:43:41.000000000 +0100 +++ new/velum-master/spec/factories/pillar_factory.rb 2018-03-14 14:55:30.000000000 +0100 @@ -11,6 +11,10 @@ pillar { Pillar.all_pillars[:cloud_framework] } value "ec2" end + factory :openstack_pillar, parent: :pillar do + pillar { Pillar.all_pillars[:cloud_provider] } + value "openstack" + end factory :azure_pillar, parent: :pillar do pillar { Pillar.all_pillars[:cloud_framework] } value "azure" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/velum-master/spec/features/bootstrap_settings_feature_spec.rb new/velum-master/spec/features/bootstrap_settings_feature_spec.rb --- old/velum-master/spec/features/bootstrap_settings_feature_spec.rb 2018-03-12 13:43:41.000000000 +0100 +++ new/velum-master/spec/features/bootstrap_settings_feature_spec.rb 2018-03-14 14:55:30.000000000 +0100 @@ -48,4 +48,27 @@ expect(page).to have_css("#settings_suse_registry_mirror_certificate", visible: false) end end + + context "CPI configuration", js: true do + it "shows panel settings" do + expect(page).to have_content("Cloud provider integration") + end + + it "toggles settings when enabling/disabling it" do + find(".enable-cloud").click + expect(page).to have_css(".cloud-settings-panel-body.in") + expect(page).to have_content("Choose the driver") + + find(".disable-cloud").click + expect(page).not_to have_content("Choose the driver") + end + + it "shows custom settings for openstack" do + find(".enable-cloud").click + expect(page).to have_css(".cloud-settings-panel-body.in") + + select "OpenStack", from: "settings_cloud_provider" + expect(page).to have_content("Keystone API URL") + end + end end