diff --git a/app/assets/javascripts/controllers/ems_common/ems_common_form_controller.js b/app/assets/javascripts/controllers/ems_common/ems_common_form_controller.js index 13b17abb02b..99f1b02eb3e 100644 --- a/app/assets/javascripts/controllers/ems_common/ems_common_form_controller.js +++ b/app/assets/javascripts/controllers/ems_common/ems_common_form_controller.js @@ -31,6 +31,8 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' default_password: '', amqp_userid: '', amqp_password: '', + smartstate_docker_userid: '', + smartstate_docker_password: '', metrics_userid: '', metrics_password: '', metrics_database_name: '', @@ -131,6 +133,7 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.default_userid = data.default_userid; $scope.emsCommonModel.amqp_userid = data.amqp_userid; $scope.emsCommonModel.metrics_userid = data.metrics_userid; + $scope.emsCommonModel.smartstate_docker_userid = data.smartstate_docker_userid; $scope.emsCommonModel.vmware_cloud_api_version = data.api_version; $scope.emsCommonModel.ssh_keypair_userid = data.ssh_keypair_userid; @@ -170,6 +173,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' if ($scope.emsCommonModel.metrics_userid !== '') { $scope.emsCommonModel.metrics_password = miqService.storedPasswordPlaceholder; } + if ($scope.emsCommonModel.smartstate_docker_userid !== '') { + $scope.emsCommonModel.smartstate_docker_password = miqService.storedPasswordPlaceholder; + } if ($scope.emsCommonModel.ssh_keypair_userid !== '') { $scope.emsCommonModel.ssh_keypair_password = miqService.storedPasswordPlaceholder; } @@ -253,6 +259,10 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' ($scope.emsCommonModel.amqp_userid != '' && $scope.angularForm.amqp_userid !== undefined && $scope.angularForm.amqp_userid.$valid && $scope.emsCommonModel.amqp_password != '' && $scope.angularForm.amqp_password !== undefined && $scope.angularForm.amqp_password.$valid)) { return true; + } else if(($scope.currentTab == "smartstate_docker") && + ($scope.emsCommonModel.smartstate_docker_userid != '' && $scope.angularForm.smartstate_docker_userid !== undefined && + $scope.emsCommonModel.smartstate_docker_password != '' && $scope.angularForm.smartstate_docker_password !== undefined)) { + return true; } else if(($scope.currentTab == "default" && $scope.emsCommonModel.emstype == "azure") && ($scope.emsCommonModel.azure_tenant_id != '' && $scope.angularForm.azure_tenant_id.$valid) && ($scope.emsCommonModel.default_userid != '' && $scope.angularForm.default_userid.$valid && @@ -470,6 +480,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' if ($scope.emsCommonModel.amqp_auth_status === true) { $scope.postValidationModelRegistry("amqp"); } + if ($scope.emsCommonModel.smartstate_docker_auth_status === true) { + $scope.postValidationModelRegistry("smartstate_docker"); + } if ($scope.emsCommonModel.service_account_auth_status === true) { $scope.postValidationModelRegistry("service_account"); } @@ -489,6 +502,7 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.postValidationModel = { default: {}, amqp: {}, + smartstate_docker: {}, metrics: {}, ssh_keypair: {}, prometheus_alerts: {}, @@ -526,6 +540,16 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' amqp_userid: $scope.emsCommonModel.amqp_userid, amqp_password: amqp_password, }; + } else if (prefix === "smartstate_docker") { + if ($scope.newRecord) { + var smartstate_docker_password = $scope.emsCommonModel.smartstate_docker_password; + } else { + var smartstate_docker_password = $scope.emsCommonModel.smartstate_docker_password === "" ? "" : miqService.storedPasswordPlaceholder; + } + $scope.postValidationModel.smartstate_docker = { + smartstate_docker_userid: $scope.emsCommonModel.smartstate_docker_userid, + smartstate_docker_password: smartstate_docker_password, + }; } else if (prefix === "metrics") { var metricsValidationModel = { metrics_hostname: $scope.emsCommonModel.metrics_hostname, diff --git a/app/controllers/mixins/ems_common_angular.rb b/app/controllers/mixins/ems_common_angular.rb index 5fdd4918145..b9af1135a7d 100644 --- a/app/controllers/mixins/ems_common_angular.rb +++ b/app/controllers/mixins/ems_common_angular.rb @@ -181,6 +181,7 @@ def ems_form_fields amqp_hostname = "" amqp_port = "" amqp_security_protocol = "" + smartstate_docker_userid = "" ssh_keypair_userid = "" metrics_userid = "" metrics_hostname = "" @@ -206,6 +207,11 @@ def ems_form_fields amqp_auth_status = @ems.authentication_status_ok?(:amqp) end + if @ems.has_authentication_type?(:smartstate_docker) + smartstate_docker_userid = @ems.has_authentication_type?(:smartstate_docker) ? @ems.authentication_userid(:smartstate_docker).to_s : "" + smartstate_docker_auth_status = true + end + if @ems.has_authentication_type?(:ssh_keypair) ssh_keypair_userid = @ems.has_authentication_type?(:ssh_keypair) ? @ems.authentication_userid(:ssh_keypair).to_s : "" ssh_keypair_auth_status = @ems.authentication_status_ok?(:ssh_keypair) @@ -296,6 +302,7 @@ def ems_form_fields :openstack_infra_providers_exist => retrieve_openstack_infra_providers.length > 0, :default_userid => @ems.authentication_userid ? @ems.authentication_userid : "", :amqp_userid => amqp_userid, + :smartstate_docker_userid => smartstate_docker_userid, :service_account => service_account ? service_account : "", :azure_tenant_id => azure_tenant_id ? azure_tenant_id : "", :keystone_v3_domain_id => keystone_v3_domain_id, @@ -308,6 +315,7 @@ def ems_form_fields :ems_controller => controller_name, :default_auth_status => default_auth_status, :amqp_auth_status => amqp_auth_status, + :smartstate_docker_auth_status => smartstate_docker_auth_status, :service_account_auth_status => service_account_auth_status } if controller_name == "ems_cloud" || controller_name == "ems_network" @@ -573,6 +581,7 @@ def set_ems_record_vars(ems, mode = nil) endpoints = {:default => default_endpoint, :ceilometer => ceilometer_endpoint, :amqp => amqp_endpoint, + :smartstate_docker => default_endpoint, :ssh_keypair => ssh_keypair_endpoint, :metrics => metrics_endpoint, :hawkular => hawkular_endpoint, @@ -594,7 +603,7 @@ def build_connection(ems, endpoints, mode) authentications = build_credentials(ems, mode) configurations = [] - [:default, :ceilometer, :amqp, :ssh_keypair, :metrics, :hawkular, :prometheus, :prometheus_alerts].each do |role| + [:default, :ceilometer, :amqp, :smartstate_docker, :ssh_keypair, :metrics, :hawkular, :prometheus, :prometheus_alerts].each do |role| configurations << build_configuration(ems, authentications, endpoints, role) end @@ -621,6 +630,11 @@ def build_credentials(ems, mode) amqp_password = params[:amqp_password] ? params[:amqp_password] : ems.authentication_password(:amqp) creds[:amqp] = {:userid => params[:amqp_userid], :password => amqp_password, :save => (mode != :validate)} end + if ems.kind_of?(ManageIQ::Providers::Amazon::CloudManager) && + ems.supports_authentication?(:smartstate_docker) && params[:smartstate_docker_userid] + smartstate_docker_password = params[:smartstate_docker_password] ? params[:smartstate_docker_password] : ems.authentication_password(:smartstate_docker) + creds[:smartstate_docker] = {:userid => params[:smartstate_docker_userid], :password => smartstate_docker_password, :save => true} + end if ems.kind_of?(ManageIQ::Providers::Openstack::InfraManager) && ems.supports_authentication?(:ssh_keypair) && params[:ssh_keypair_userid] ssh_keypair_password = params[:ssh_keypair_password] ? params[:ssh_keypair_password].gsub(/\r\n/, "\n") : ems.authentication_key(:ssh_keypair) diff --git a/app/helpers/textual_summary_helper.rb b/app/helpers/textual_summary_helper.rb index 2c38c69245d..d424e7fde9f 100644 --- a/app/helpers/textual_summary_helper.rb +++ b/app/helpers/textual_summary_helper.rb @@ -183,14 +183,15 @@ def textual_authentications(authentications) authentications.collect do |auth| label = case auth[:authtype] - when "default" then _("Default") - when "metrics" then _("C & U Database") - when "amqp" then _("AMQP") - when "ipmi" then _("IPMI") - when "remote" then _("Remote Login") - when "ws" then _("Web Services") - when "ssh_keypair" then _("SSH Key Pair") - else; _("") + when "default" then _("Default") + when "metrics" then _("C & U Database") + when "amqp" then _("AMQP") + when "ipmi" then _("IPMI") + when "remote" then _("Remote Login") + when "smartstate_docker" then _("SmartState Docker") + when "ws" then _("Web Services") + when "ssh_keypair" then _("SSH Key Pair") + else; _("") end {:label => _("%{label} Credentials") % {:label => label}, diff --git a/app/views/layouts/angular/_form_buttons_verify_angular.html.haml b/app/views/layouts/angular/_form_buttons_verify_angular.html.haml index c220cf4e757..6b7144c435f 100644 --- a/app/views/layouts/angular/_form_buttons_verify_angular.html.haml +++ b/app/views/layouts/angular/_form_buttons_verify_angular.html.haml @@ -9,7 +9,7 @@ - validate = "#{main_scope}.validateClicked({target: '.validate_button:visible'}, '#{valtype}', true, angularForm, '#{url_for_only_path(:action => validate_url, :id => id, :type => valtype, :button => "validate")}')" - else - validate = "#{main_scope}.validateClicked('#{url_for_only_path(:action => validate_url, :id => id, :type => valtype, :button => "validate")}')" -%div{"ng-show" => ng_show} +%div{"ng-if" => "#{main_scope}.currentTab != 'smartstate_docker'"} %miq-button{:class => 'validate_button', :name => _("Validate"), "disabled-title" => verify_title_off, diff --git a/app/views/layouts/angular/_multi_auth_credentials.html.haml b/app/views/layouts/angular/_multi_auth_credentials.html.haml index 20611cc9591..20d00063de1 100644 --- a/app/views/layouts/angular/_multi_auth_credentials.html.haml +++ b/app/views/layouts/angular/_multi_auth_credentials.html.haml @@ -21,6 +21,9 @@ = miq_tab_header('ssh_keypair', nil, {'ng-click' => "changeAuthTab('ssh_keypair')"}) do %i{"error-on-tab" => "ssh_keypair", :style => "color:#cc0000"} = _("RSA key pair") + = miq_tab_header('smartstate_docker', nil, {'ng-click' => "changeAuthTab('smartstate_docker')"}) do + %i{"error-on-tab" => "smartstate_docker", :style => "color:#cc0000"} + = _("SmartState Docker") - elsif controller_name == "ems_container" = miq_tab_header('metrics', nil, 'ng-click' => "changeAuthTab('metrics')") do %div{"ng-if" => "emsCommonModel.metrics_selection == 'prometheus' || emsCommonModel.metrics_selection == 'hawkular'"} @@ -149,6 +152,32 @@ %span{:style => "color:black"} = _("Required. Used to gather Utilization data.") + - if %w(ems_cloud).include?(params[:controller]) + = miq_tab_content('smartstate_docker', 'default') do + .form-group + .col-md-12{"ng-if" => "#{ng_model}" == "emsCommonModel" && "#{ng_model}.emstype == 'ec2'"} + = render :partial => "layouts/angular-bootstrap/auth_credentials_angular_bootstrap", + :locals => {:ng_show => true, + :ng_model => "#{ng_model}", + :ng_reqd_userid => false, + :ng_reqd_password => false, + :ng_show_userid => "true", + :ng_show_password => "true", + :validate_url => validate_url, + :id => record.id, + :prefix => "smartstate_docker", + :userid_label => _("SmartState Docker User Name"), + :password_label => _("SmartState Docker Password"), + :verify_label => _("Confirm SmartState Password"), + :passwd_mismatch => _("SmartState Docker Passwords do not match"), + :change_stored_password => _("Change stored SmartState Docker password"), + :cancel_password_change => _("Cancel SmartState Docker password change"), + :verify_title_off => _("Docker Registry User Name and Password for SmartState Analysis on AWS"), + :basic_info_needed => true} + .form-group + .col-md-12 + %span{:style => "color:black"} + = _("Used for Docker Registry credentials required to perform SmartState Analysis on AWS.") - if %w(ems_cloud ems_infra ems_network).include?(params[:controller]) = miq_tab_content('metrics', 'default') do .form-group @@ -387,8 +416,7 @@ %div{"ng-if" => "#{ng_model}.emstype == ''"} :javascript $('#auth_tabs').hide(); -%div{"ng-if" => "#{ng_model}.emstype == 'ec2' || " + | - "#{ng_model}.emstype == 'gce' || " + | +%div{"ng-if" => "#{ng_model}.emstype == 'gce' || " + | "#{ng_model}.emstype == 'scvmm' || " + | "#{ng_model}.emstype == 'vmwarews' || " + | "#{ng_model}.emstype == 'lenovo_ph_infra' || " + | @@ -398,6 +426,15 @@ miq_tabs_show_hide("#amqp_tab", false); miq_tabs_show_hide("#metrics_tab", false); miq_tabs_show_hide("#ssh_keypair_tab", false); + miq_tabs_show_hide("#smartstate_docker_tab", false); + miq_tabs_init('#auth_tabs'); + $('#auth_tabs').show(); +%div{"ng-if" => "#{ng_model}.emstype == 'ec2'"} + :javascript + miq_tabs_show_hide("#amqp_tab", false); + miq_tabs_show_hide("#metrics_tab", false); + miq_tabs_show_hide("#ssh_keypair_tab", false); + miq_tabs_show_hide("#smartstate_docker_tab", true); miq_tabs_init('#auth_tabs'); $('#auth_tabs').show(); %div{"ng-if" => "#{ng_model}.emstype == 'rhevm'"} @@ -405,6 +442,7 @@ miq_tabs_show_hide("#amqp_tab", false); miq_tabs_show_hide("#metrics_tab", true); miq_tabs_show_hide("#ssh_keypair_tab", false); + miq_tabs_show_hide("#smartstate_docker_tab", false); miq_tabs_init('#auth_tabs'); $('#auth_tabs').show(); %div{"ng-if" => "#{ng_model}.emstype == 'openstack' || #{ng_model}.emstype == 'vmware_cloud'"} @@ -412,6 +450,7 @@ miq_tabs_show_hide("#amqp_tab", true); miq_tabs_show_hide("#metrics_tab", false); miq_tabs_show_hide("#ssh_keypair_tab", false); + miq_tabs_show_hide("#smartstate_docker_tab", false); miq_tabs_init('#auth_tabs'); $('#auth_tabs').show(); %div{"ng-if" => "#{ng_model}.emstype == 'openstack_infra'"} @@ -419,6 +458,7 @@ miq_tabs_show_hide("#amqp_tab", true); miq_tabs_show_hide("#metrics_tab", false); miq_tabs_show_hide("#ssh_keypair_tab", true); + miq_tabs_show_hide("#smartstate_docker_tab", false); miq_tabs_init('#auth_tabs'); $('#auth_tabs').show(); %div{"ng-if" => "#{ng_model}.emstype == 'nuage_network'"}