From a67c6eda221a84e5de7631244f27a6f86b35fa41 Mon Sep 17 00:00:00 2001 From: nimrodshn Date: Wed, 9 Aug 2017 16:29:43 +0300 Subject: [PATCH 1/7] add alerts drop down to provider view Added endpoint prometheus_alerts minor refactoring minor refactoring added some refactoring added some refactoring added authentication fixed cred_type for authentication --- .../ems_common/ems_common_form_controller.js | 49 +++++++++++++-- app/controllers/ems_container_controller.rb | 5 ++ app/controllers/mixins/ems_common_angular.rb | 63 ++++++++++++------- app/views/ems_container/_form.html.haml | 9 +++ .../angular/_multi_auth_credentials.html.haml | 26 ++++++++ 5 files changed, 124 insertions(+), 28 deletions(-) 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 5c65826b5f7..0dd34af0549 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 @@ -51,7 +51,13 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' service_account_auth_status: '', metrics_auth_status: '', ssh_keypair_auth_status: '', - vmware_cloud_api_version: '' + vmware_cloud_api_version: '', + prometheus_alerts_hostname: '', + prometheus_alerts_api_port: '', + prometheus_alerts_tls_ca_certs: '', + prometheus_alerts_auth_status: '', + prometheus_alerts_security_protocol: '', + alerts_selection: '', }; $scope.formId = emsCommonFormId; $scope.afterGet = false; @@ -102,8 +108,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.provider_id = data.provider_id !== undefined ? data.provider_id.toString() : ""; $scope.emsCommonModel.default_api_port = data.default_api_port !== undefined && data.default_api_port !== '' ? data.default_api_port.toString() : $scope.getDefaultApiPort($scope.emsCommonModel.emstype); - $scope.emsCommonModel.metrics_port = data.metrics_port !== undefined && data.metrics_port !== '' ? data.metrics_port.toString() : '443'; $scope.emsCommonModel.amqp_api_port = data.amqp_api_port !== undefined && data.amqp_api_port !== '' ? data.amqp_api_port.toString() : '5672'; + $scope.emsCommonModel.hawkular_api_port = data.hawkular_api_port !== undefined && data.hawkular_api_port !== '' ? data.hawkular_api_port.toString() : '443'; + $scope.emsCommonModel.metrics_api_port = data.metrics_api_port !== undefined && data.metrics_api_port !== '' ? data.metrics_api_port.toString() : ''; $scope.emsCommonModel.metrics_database_name = data.metrics_database_name !== undefined && data.metrics_database_name !== '' ? data.metrics_database_name : data.metrics_default_database_name; $scope.emsCommonModel.api_version = data.api_version; $scope.emsCommonModel.default_security_protocol = data.default_security_protocol; @@ -131,6 +138,8 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.host_default_vnc_port_end = data.host_default_vnc_port_end; $scope.emsCommonModel.event_stream_selection = data.event_stream_selection; + $scope.emsCommonModel.metrics_selection = data.metrics_selection; + $scope.emsCommonModel.metrics_selection_default = data.metrics_selection_default; $scope.emsCommonModel.bearer_token_exists = data.bearer_token_exists; @@ -140,7 +149,12 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.service_account_auth_status = data.service_account_auth_status; $scope.emsCommonModel.metrics_auth_status = data.metrics_auth_status; $scope.emsCommonModel.ssh_keypair_auth_status = data.ssh_keypair_auth_status; - $scope.emsCommonModel.metrics_api_port = data.metrics_api_port !== undefined && data.metrics_api_port !== '' ? data.metrics_api_port.toString() : '' + $scope.emsCommonModel.alerts_selection = data.alerts_selection; + $scope.emsCommonModel.prometheus_alerts_hostname = data.prometheus_alerts_hostname; + $scope.emsCommonModel.prometheus_alerts_api_port = data.prometheus_alerts_api_port !== undefined && data.prometheus_alerts_api_port !== '' ? data.prometheus_alerts_api_port.toString() : '443'; + $scope.emsCommonModel.prometheus_alerts_auth_status = data.prometheus_alerts_auth_status; + $scope.emsCommonModel.prometheus_alerts_security_protocol = data.prometheus_alerts_security_protocol; + $scope.emsCommonModel.prometheus_alerts_tls_ca_certs = data.prometheus_alerts_tls_ca_certs; if ($scope.emsCommonModel.default_userid !== '') { $scope.emsCommonModel.default_password = miqService.storedPasswordPlaceholder; @@ -177,6 +191,12 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.openstack_infra_providers_exist = data.openstack_infra_providers_exist; $scope.emsCommonModel.default_api_port = ''; $scope.emsCommonModel.amqp_api_port = '5672'; + $scope.emsCommonModel.metrics_selection = data.metrics_selection; + $scope.emsCommonModel.alerts_selection = data.alerts_selection; + $scope.emsCommonModel.prometheus_alerts_api_port = '443'; + $scope.emsCommonModel.prometheus_alerts_auth_status = data.prometheus_alerts_auth_status; + $scope.emsCommonModel.prometheus_alerts_security_protocol = data.prometheus_alerts_security_protocol; + $scope.emsCommonModel.prometheus_alerts_tls_ca_certs = data.prometheus_alerts_tls_ca_certs; $scope.emsCommonModel.api_version = 'v2'; $scope.emsCommonModel.ems_controller = data.ems_controller; $scope.emsCommonModel.ems_controller === 'ems_container' ? $scope.emsCommonModel.default_api_port = '8443' : $scope.emsCommonModel.default_api_port = ''; @@ -189,8 +209,8 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.default_auth_status = data.default_auth_status; $scope.emsCommonModel.amqp_auth_status = data.amqp_auth_status; $scope.emsCommonModel.service_account_auth_status = data.service_account_auth_status; + $scope.emsCommonModel.metrics_auth_status = true; $scope.emsCommonModel.ssh_keypair_auth_status = true; - $scope.emsCommonModel.metrics_auth_status = data.metrics_auth_status; $scope.emsCommonModel.vmware_cloud_api_version = '9.0'; miqService.sparkleOff(); @@ -247,7 +267,12 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' ($scope.emsCommonModel.default_hostname != '' && $scope.emsCommonModel.default_api_port) && ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { return true; - } else if(($scope.emsCommonModel.metrics_selection != "disabled" && $scope.emsCommonModel.ems_controller == "ems_container") && + } else if (($scope.currentTab == "alerts" && $scope.emsCommonModel.ems_controller == "ems_container") && + ($scope.emsCommonModel.emstype) && + ($scope.emsCommonModel.prometheus_alerts_hostname != '' && $scope.emsCommonModel.prometheus_alerts_api_port != '') && + ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { + return true; + } else if(($scope.currentTab == "metrics" && $scope.emsCommonModel.ems_controller == "ems_container") && ($scope.emsCommonModel.emstype) && ($scope.emsCommonModel.metrics_hostname != '' && $scope.emsCommonModel.metrics_api_port) && ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { @@ -429,6 +454,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' if ($scope.emsCommonModel.ssh_keypair_auth_status === true) { $scope.postValidationModelRegistry("ssh_keypair"); } + if ($scope.emsCommonModel.prometheus_alerts_auth_status === true) { + $scope.postValidationModelRegistry("prometheus_alerts"); + } }; $scope.postValidationModelRegistry = function(prefix) { @@ -436,7 +464,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.postValidationModel = {default: {}, amqp: {}, metrics: {}, - ssh_keypair: {} + ssh_keypair: {}, + hawkular: {}, + prometheus_alerts: {} } } if (prefix === "default") { @@ -503,6 +533,13 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.postValidationModel['service_account'] = { service_account: $scope.emsCommonModel.service_account } + } else if (prefix == "prometheus_alerts") { + $scope.postValidationModel['prometheus_alerts'] = { + prometheus_alerts_hostname: $scope.emsCommonModel.prometheus_alerts_hostname, + prometheus_alerts_api_port: $scope.emsCommonModel.prometheus_alerts_api_port, + prometheus_alerts_security_protocol: $scope.emsCommonModel.prometheus_alerts_security_protocol, + prometheus_alerts_tls_ca_certs: $scope.emsCommonModel.prometheus_alerts_tls_ca_certs, + } } }; diff --git a/app/controllers/ems_container_controller.rb b/app/controllers/ems_container_controller.rb index d63177acdab..f0756607f6a 100644 --- a/app/controllers/ems_container_controller.rb +++ b/app/controllers/ems_container_controller.rb @@ -101,6 +101,11 @@ def retrieve_metrics_selection end end + def retrieve_alerts_selection + return "disabled" if @ems.connection_configurations.try(:prometheus_alerts).nil? + "prometheus" + end + private def textual_group_list diff --git a/app/controllers/mixins/ems_common_angular.rb b/app/controllers/mixins/ems_common_angular.rb index 0b6ed547ced..4e9e188ef2d 100644 --- a/app/controllers/mixins/ems_common_angular.rb +++ b/app/controllers/mixins/ems_common_angular.rb @@ -143,6 +143,10 @@ def ems_form_fields metrics_security_protocol = security_protocol_default metrics_tls_ca_certs = "" keystone_v3_domain_id = "" + prometheus_alerts_hostname = "" + prometheus_alerts_api_port = "" + prometheus_alerts_security_protocol = security_protocol_default + prometheus_alerts_tls_ca_certs = "" if @ems.connection_configurations.amqp.try(:endpoint) amqp_hostname = @ems.connection_configurations.amqp.endpoint.hostname @@ -190,6 +194,15 @@ def ems_form_fields metrics_tls_ca_certs = connection_configurations_metrics_endpoint.certificate_authority end + if @ems.connection_configurations.prometheus_alerts.try(:endpoint) + prometheus_alerts_hostname = @ems.connection_configurations.prometheus_alerts.endpoint.hostname + prometheus_alerts_api_port = @ems.connection_configurations.prometheus_alerts.endpoint.port + prometheus_alerts_auth_status = @ems.authentication_status_ok?(:alerts) + prometheus_alerts_security_protocol = @ems.connection_configurations.prometheus_alerts.endpoint.security_protocol + prometheus_alerts_security_protocol ||= security_protocol_default + prometheus_alerts_tls_ca_certs = @ems.connection_configurations.prometheus_alerts.endpoint.certificate_authority + end + if @ems.connection_configurations.default.try(:endpoint) default_hostname = @ems.connection_configurations.default.endpoint.hostname default_api_port = @ems.connection_configurations.default.endpoint.port @@ -284,28 +297,34 @@ def ems_form_fields } if controller_name == "ems_infra" if controller_name == "ems_container" - render :json => {:name => @ems.name, - :emstype => @ems.emstype, - :zone => zone, - :hostname => @ems.hostname, - :default_hostname => @ems.connection_configurations.default.endpoint.hostname, - :default_api_port => @ems.connection_configurations.default.endpoint.port, - :metrics_selection => retrieve_metrics_selection, - :metrics_selection_default => @ems.emstype == 'kubernetes' ? 'disabled' : 'enabled', - :metrics_hostname => metrics_hostname, - :metrics_api_port => metrics_port, - :metrics_tls_ca_certs => metrics_tls_ca_certs, - :metrics_security_protocol => metrics_security_protocol, - :api_version => @ems.api_version ? @ems.api_version : "v2", - :default_security_protocol => default_security_protocol, - :default_tls_ca_certs => default_tls_ca_certs, - :provider_region => @ems.provider_region, - :default_userid => @ems.authentication_userid ? @ems.authentication_userid : "", - :service_account => service_account ? service_account : "", - :bearer_token_exists => @ems.authentication_token(:bearer).nil? ? false : true, - :ems_controller => controller_name, - :default_auth_status => default_auth_status, - :metrics_auth_status => metrics_auth_status.nil? ? false : metrics_auth_status} + render :json => {:name => @ems.name, + :emstype => @ems.emstype, + :zone => zone, + :hostname => @ems.hostname, + :default_hostname => @ems.connection_configurations.default.endpoint.hostname, + :default_api_port => @ems.connection_configurations.default.endpoint.port, + :metrics_selection => retrieve_metrics_selection, + :metrics_selection_default => @ems.emstype == 'kubernetes' ? 'disabled' : 'enabled', + :metrics_hostname => metrics_hostname, + :metrics_api_port => metrics_port, + :metrics_tls_ca_certs => metrics_tls_ca_certs, + :metrics_security_protocol => metrics_security_protocol, + :api_version => @ems.api_version ? @ems.api_version : "v2", + :default_security_protocol => default_security_protocol, + :default_tls_ca_certs => default_tls_ca_certs, + :provider_region => @ems.provider_region, + :default_userid => @ems.authentication_userid ? @ems.authentication_userid : "", + :service_account => service_account ? service_account : "", + :bearer_token_exists => @ems.authentication_token(:bearer).nil? ? false : true, + :ems_controller => controller_name, + :default_auth_status => default_auth_status, + :metrics_auth_status => metrics_auth_status.nil? ? false : metrics_auth_status, + :prometheus_alerts_api_port => prometheus_alerts_api_port, + :prometheus_alerts_hostname => prometheus_alerts_hostname, + :prometheus_alerts_security_protocol => prometheus_alerts_security_protocol, + :prometheus_alerts_tls_ca_certs => prometheus_alerts_tls_ca_certs, + :prometheus_alerts_auth_status => prometheus_alerts_auth_status, + :alerts_selection => retrieve_alerts_selection} end if controller_name == "ems_middleware" diff --git a/app/views/ems_container/_form.html.haml b/app/views/ems_container/_form.html.haml index fb29b976080..181c7e17cf0 100644 --- a/app/views/ems_container/_form.html.haml +++ b/app/views/ems_container/_form.html.haml @@ -62,6 +62,15 @@ "checkchange" => "", "required" => "", "selectpicker-for-select-tag" => "") + .form-group{"ng-class" => "{'has-error': angularForm.alerts.$invalid}"} + %label.col-md-2.control-label{"for" => "prov_alerts"} + = _("Alerts") + .col-md-8 + = select_tag('alerts_selection', options_for_select([[_("Disabled"), "disabled"], [_("Prometheus"), "prometheus"]]), + "ng-model" => "emsCommonModel.alerts_selection", + "checkchange" => "", + "required" => "", + "selectpicker-for-select-tag" => "") .form-group{"ng-class" => "{'has-error': angularForm.metrics.$invalid}"} %label.col-md-2.control-label{"for" => "prov_metrics"} diff --git a/app/views/layouts/angular/_multi_auth_credentials.html.haml b/app/views/layouts/angular/_multi_auth_credentials.html.haml index 134c4e8911f..dd99e8798e0 100644 --- a/app/views/layouts/angular/_multi_auth_credentials.html.haml +++ b/app/views/layouts/angular/_multi_auth_credentials.html.haml @@ -22,6 +22,10 @@ %div{"ng-if" => "emsCommonModel.metrics_selection == 'prometheus' || emsCommonModel.metrics_selection == 'hawkular'"} %i{"error-on-tab" => "metrics", :style => "color:#cc0000"} = _("Metrics") + = miq_tab_header('alerts', nil, 'ng-click' => "changeAuthTab('alerts')") do + %div{"ng-if" => "emsCommonModel.alerts_selection == 'prometheus'"} + %i{"error-on-tab" => "alerts", :style => "color:#cc0000"} + = _("Alerts") - elsif controller_name == "host" = miq_tab_header('remote', nil, {'ng-click' => "changeAuthTab('remote')"}) do = _("Remote Login") @@ -298,6 +302,28 @@ .col-md-12 %span{:style => "color:black"} = _("Used to gather Capacity & Utilization metrics.") + = miq_tab_content('alerts', 'default') do + %div{"ng-if" => "emsCommonModel.alerts_selection == 'prometheus'"} + .form-group + .col-md-12 + = render :partial => "layouts/angular-bootstrap/endpoints_angular", + :locals => {:ng_show => true, + :ng_model => ng_model.to_s, + :id => record.id, + :ng_reqd_hostname => "true", + :ng_reqd_api_port => "true", + :prefix => "prometheus_alerts"} + = render :partial => "layouts/angular-bootstrap/auth_credentials_angular_bootstrap", + :locals => {:ng_show => true, + :ng_model => ng_model.to_s, + :main_scope => main_scope, + :ng_show_userid => "false", + :ng_show_password => "false", + :validate_url => validate_url, + :id => record.id, + :prefix => "prometheus_alerts", + :verify_title_off => _("prometheus URL and API port fields are needed to perform validation."), + :basic_info_needed => true} - elsif controller_name == "host" = miq_tab_content('remote', 'default') do .form-group From 66893168546b5c8cd590f50c1d9d90963340437c Mon Sep 17 00:00:00 2001 From: yaacov Date: Thu, 31 Aug 2017 13:53:12 +0300 Subject: [PATCH 2/7] fix merge conflicts --- .../ems_common/ems_common_form_controller.js | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) 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 0dd34af0549..7996c30d9a7 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 @@ -108,9 +108,8 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.provider_id = data.provider_id !== undefined ? data.provider_id.toString() : ""; $scope.emsCommonModel.default_api_port = data.default_api_port !== undefined && data.default_api_port !== '' ? data.default_api_port.toString() : $scope.getDefaultApiPort($scope.emsCommonModel.emstype); + $scope.emsCommonModel.metrics_port = data.metrics_port !== undefined && data.metrics_port !== '' ? data.metrics_port.toString() : '443'; $scope.emsCommonModel.amqp_api_port = data.amqp_api_port !== undefined && data.amqp_api_port !== '' ? data.amqp_api_port.toString() : '5672'; - $scope.emsCommonModel.hawkular_api_port = data.hawkular_api_port !== undefined && data.hawkular_api_port !== '' ? data.hawkular_api_port.toString() : '443'; - $scope.emsCommonModel.metrics_api_port = data.metrics_api_port !== undefined && data.metrics_api_port !== '' ? data.metrics_api_port.toString() : ''; $scope.emsCommonModel.metrics_database_name = data.metrics_database_name !== undefined && data.metrics_database_name !== '' ? data.metrics_database_name : data.metrics_default_database_name; $scope.emsCommonModel.api_version = data.api_version; $scope.emsCommonModel.default_security_protocol = data.default_security_protocol; @@ -138,7 +137,6 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.host_default_vnc_port_end = data.host_default_vnc_port_end; $scope.emsCommonModel.event_stream_selection = data.event_stream_selection; - $scope.emsCommonModel.metrics_selection = data.metrics_selection; $scope.emsCommonModel.metrics_selection_default = data.metrics_selection_default; $scope.emsCommonModel.bearer_token_exists = data.bearer_token_exists; @@ -149,6 +147,7 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.service_account_auth_status = data.service_account_auth_status; $scope.emsCommonModel.metrics_auth_status = data.metrics_auth_status; $scope.emsCommonModel.ssh_keypair_auth_status = data.ssh_keypair_auth_status; + $scope.emsCommonModel.metrics_api_port = data.metrics_api_port !== undefined && data.metrics_api_port !== '' ? data.metrics_api_port.toString() : ''; $scope.emsCommonModel.alerts_selection = data.alerts_selection; $scope.emsCommonModel.prometheus_alerts_hostname = data.prometheus_alerts_hostname; $scope.emsCommonModel.prometheus_alerts_api_port = data.prometheus_alerts_api_port !== undefined && data.prometheus_alerts_api_port !== '' ? data.prometheus_alerts_api_port.toString() : '443'; @@ -191,7 +190,6 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.openstack_infra_providers_exist = data.openstack_infra_providers_exist; $scope.emsCommonModel.default_api_port = ''; $scope.emsCommonModel.amqp_api_port = '5672'; - $scope.emsCommonModel.metrics_selection = data.metrics_selection; $scope.emsCommonModel.alerts_selection = data.alerts_selection; $scope.emsCommonModel.prometheus_alerts_api_port = '443'; $scope.emsCommonModel.prometheus_alerts_auth_status = data.prometheus_alerts_auth_status; @@ -209,8 +207,8 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.default_auth_status = data.default_auth_status; $scope.emsCommonModel.amqp_auth_status = data.amqp_auth_status; $scope.emsCommonModel.service_account_auth_status = data.service_account_auth_status; - $scope.emsCommonModel.metrics_auth_status = true; $scope.emsCommonModel.ssh_keypair_auth_status = true; + $scope.emsCommonModel.metrics_auth_status = data.metrics_auth_status; $scope.emsCommonModel.vmware_cloud_api_version = '9.0'; miqService.sparkleOff(); @@ -268,9 +266,9 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { return true; } else if (($scope.currentTab == "alerts" && $scope.emsCommonModel.ems_controller == "ems_container") && - ($scope.emsCommonModel.emstype) && - ($scope.emsCommonModel.prometheus_alerts_hostname != '' && $scope.emsCommonModel.prometheus_alerts_api_port != '') && - ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { + ($scope.emsCommonModel.emstype) && + ($scope.emsCommonModel.prometheus_alerts_hostname != '' && $scope.emsCommonModel.prometheus_alerts_api_port != '') && + ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { return true; } else if(($scope.currentTab == "metrics" && $scope.emsCommonModel.ems_controller == "ems_container") && ($scope.emsCommonModel.emstype) && @@ -461,12 +459,12 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.postValidationModelRegistry = function(prefix) { if ($scope.postValidationModel === undefined) { - $scope.postValidationModel = {default: {}, - amqp: {}, - metrics: {}, - ssh_keypair: {}, - hawkular: {}, - prometheus_alerts: {} + $scope.postValidationModel = { + default: {}, + amqp: {}, + metrics: {}, + ssh_keypair: {}, + prometheus_alerts: {} } } if (prefix === "default") { From 73060b357719c493627abbb3eacf8ec9fee9ca92 Mon Sep 17 00:00:00 2001 From: yaacov Date: Thu, 31 Aug 2017 16:21:28 +0300 Subject: [PATCH 3/7] remove goast tab when disabled --- .../ems_common/ems_common_form_controller.js | 16 ++++++++++++---- app/views/ems_container/_form.html.haml | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) 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 7996c30d9a7..2c56b5c1350 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 @@ -359,16 +359,24 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' } }; - $scope.metricSelectionChanged = function() { - if ($scope.emsCommonModel.metrics_selection == "disabled") { + $scope.tabSelectionChanged = function(tabSelector, selection) { + if (selection == "disabled") { $scope.changeAuthTab('default'); angular.element('.nav-tabs a[href="#default"]').tab('show'); - angular.element("#metrics_tab").hide(); + angular.element(tabSelector).hide(); } else { - angular.element("#metrics_tab").show(); + angular.element(tabSelector).show(); } }; + $scope.metricSelectionChanged = function() { + $scope.tabSelectionChanged("#metrics_tab", $scope.emsCommonModel.metrics_selection); + }; + + $scope.alertsSelectionChanged = function() { + $scope.tabSelectionChanged("#alerts_tab", $scope.emsCommonModel.alerts_selection); + }; + $scope.providerTypeChanged = function() { if ($scope.emsCommonModel.ems_controller === 'ems_container') { $scope.emsCommonModel.default_api_port = "8443"; // TODO: correct per-type port diff --git a/app/views/ems_container/_form.html.haml b/app/views/ems_container/_form.html.haml index 181c7e17cf0..682616a5d84 100644 --- a/app/views/ems_container/_form.html.haml +++ b/app/views/ems_container/_form.html.haml @@ -68,6 +68,7 @@ .col-md-8 = select_tag('alerts_selection', options_for_select([[_("Disabled"), "disabled"], [_("Prometheus"), "prometheus"]]), "ng-model" => "emsCommonModel.alerts_selection", + "ng-change" => "alertsSelectionChanged()", "checkchange" => "", "required" => "", "selectpicker-for-select-tag" => "") From ac68b9d7a878255ec6cd15f627d6d306197195e9 Mon Sep 17 00:00:00 2001 From: yaacov Date: Thu, 31 Aug 2017 17:36:54 +0300 Subject: [PATCH 4/7] remove alert/metrics dup --- .../ems_common/ems_common_form_controller.js | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) 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 2c56b5c1350..e5fa6c06089 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 @@ -137,7 +137,6 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.emsCommonModel.host_default_vnc_port_end = data.host_default_vnc_port_end; $scope.emsCommonModel.event_stream_selection = data.event_stream_selection; - $scope.emsCommonModel.metrics_selection_default = data.metrics_selection_default; $scope.emsCommonModel.bearer_token_exists = data.bearer_token_exists; @@ -265,15 +264,15 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' ($scope.emsCommonModel.default_hostname != '' && $scope.emsCommonModel.default_api_port) && ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { return true; - } else if (($scope.currentTab == "alerts" && $scope.emsCommonModel.ems_controller == "ems_container") && + } else if(($scope.emsCommonModel.ems_controller == "ems_container") && ($scope.emsCommonModel.emstype) && - ($scope.emsCommonModel.prometheus_alerts_hostname != '' && $scope.emsCommonModel.prometheus_alerts_api_port != '') && - ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { - return true; - } else if(($scope.currentTab == "metrics" && $scope.emsCommonModel.ems_controller == "ems_container") && - ($scope.emsCommonModel.emstype) && - ($scope.emsCommonModel.metrics_hostname != '' && $scope.emsCommonModel.metrics_api_port) && - ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { + ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid) && + (($scope.currentTab == "metrics" && + $scope.emsCommonModel.metrics_hostname != '' && + $scope.emsCommonModel.metrics_api_port) || + ($scope.currentTab == "alerts" && + $scope.emsCommonModel.prometheus_alerts_hostname != '' && + $scope.emsCommonModel.prometheus_alerts_api_port != ''))) { return true; } else if($scope.emsCommonModel.emstype == "gce" && $scope.emsCommonModel.project != '' && ($scope.currentTab == "default" || @@ -540,12 +539,11 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' service_account: $scope.emsCommonModel.service_account } } else if (prefix == "prometheus_alerts") { - $scope.postValidationModel['prometheus_alerts'] = { - prometheus_alerts_hostname: $scope.emsCommonModel.prometheus_alerts_hostname, - prometheus_alerts_api_port: $scope.emsCommonModel.prometheus_alerts_api_port, - prometheus_alerts_security_protocol: $scope.emsCommonModel.prometheus_alerts_security_protocol, - prometheus_alerts_tls_ca_certs: $scope.emsCommonModel.prometheus_alerts_tls_ca_certs, - } + $scope.postValidationModel['prometheus_alerts'] = {}; + ['prometheus_alerts_hostname', 'prometheus_alerts_api_port', 'prometheus_alerts_security_protocol', 'prometheus_alerts_tls_ca_certs'] + .forEach( function(resource) { + $scope.postValidationModel['prometheus_alerts'][resource] = $scope.emsCommonModel[resource]; + }); } }; From 3228bb5aa4cc90b5afac659553338ac7c1405034 Mon Sep 17 00:00:00 2001 From: yaacov Date: Thu, 31 Aug 2017 23:03:15 +0300 Subject: [PATCH 5/7] add the endpoint and authentication for alerts --- app/controllers/mixins/ems_common_angular.rb | 32 ++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/app/controllers/mixins/ems_common_angular.rb b/app/controllers/mixins/ems_common_angular.rb index 4e9e188ef2d..ee6dd6cea0d 100644 --- a/app/controllers/mixins/ems_common_angular.rb +++ b/app/controllers/mixins/ems_common_angular.rb @@ -318,7 +318,7 @@ def ems_form_fields :bearer_token_exists => @ems.authentication_token(:bearer).nil? ? false : true, :ems_controller => controller_name, :default_auth_status => default_auth_status, - :metrics_auth_status => metrics_auth_status.nil? ? false : metrics_auth_status, + :metrics_auth_status => metrics_auth_status.nil? ? false : metrics_auth_status, :prometheus_alerts_api_port => prometheus_alerts_api_port, :prometheus_alerts_hostname => prometheus_alerts_hostname, :prometheus_alerts_security_protocol => prometheus_alerts_security_protocol, @@ -396,6 +396,10 @@ def set_ems_record_vars(ems, mode = nil) metrics_security_protocol = params[:metrics_security_protocol].strip if params[:metrics_security_protocol] metrics_tls_ca_certs = params[:metrics_tls_ca_certs].strip if params[:metrics_tls_ca_certs] default_tls_ca_certs = params[:default_tls_ca_certs].strip if params[:default_tls_ca_certs] + prometheus_alerts_tls_ca_certs = params[:prometheus_alerts_tls_ca_certs].strip if params[:prometheus_alerts_tls_ca_certs] + prometheus_alerts_hostname = params[:prometheus_alerts_hostname].strip if params[:prometheus_alerts_hostname] + prometheus_alerts_api_port = params[:prometheus_alerts_api_port].strip if params[:prometheus_alerts_api_port] + prometheus_alerts_security_protocol = params[:prometheus_alerts_security_protocol].strip if params[:prometheus_alerts_security_protocol] default_endpoint = {} amqp_endpoint = {} ceilometer_endpoint = {} @@ -403,6 +407,7 @@ def set_ems_record_vars(ems, mode = nil) metrics_endpoint = {} hawkular_endpoint = {} prometheus_endpoint = {} + prometheus_alerts_endpoint = {} if ems.kind_of?(ManageIQ::Providers::Openstack::CloudManager) || ems.kind_of?(ManageIQ::Providers::Openstack::InfraManager) default_endpoint = {:role => :default, :hostname => hostname, :port => port, :security_protocol => ems.security_protocol} @@ -475,6 +480,11 @@ def set_ems_record_vars(ems, mode = nil) prometheus_endpoint = {:role => :prometheus, :hostname => metrics_hostname, :port => metrics_port} prometheus_endpoint.merge!(endpoint_security_options(metrics_security_protocol, metrics_tls_ca_certs)) end + if params[:alerts_selection] == 'prometheus' + params[:cred_type] = "prometheus_alerts" + prometheus_alerts_endpoint = {:role => :prometheus_alerts, :hostname => prometheus_alerts_hostname, :port => prometheus_alerts_api_port} + prometheus_alerts_endpoint.merge!(endpoint_security_options(prometheus_alerts_security_protocol, prometheus_alerts_tls_ca_certs)) + end end if ems.kind_of?(ManageIQ::Providers::MiddlewareManager) @@ -495,13 +505,14 @@ def set_ems_record_vars(ems, mode = nil) default_endpoint = {:role => :default, :hostname => hostname, :port => port} end - endpoints = {:default => default_endpoint, - :ceilometer => ceilometer_endpoint, - :amqp => amqp_endpoint, - :ssh_keypair => ssh_keypair_endpoint, - :metrics => metrics_endpoint, - :hawkular => hawkular_endpoint, - :prometheus => prometheus_endpoint} + endpoints = {:default => default_endpoint, + :ceilometer => ceilometer_endpoint, + :amqp => amqp_endpoint, + :ssh_keypair => ssh_keypair_endpoint, + :metrics => metrics_endpoint, + :hawkular => hawkular_endpoint, + :prometheus => prometheus_endpoint, + :prometheus_alerts => prometheus_alerts_endpoint} build_connection(ems, endpoints, mode) end @@ -518,7 +529,7 @@ def build_connection(ems, endpoints, mode) authentications = build_credentials(ems, mode) configurations = [] - [:default, :ceilometer, :amqp, :ssh_keypair, :metrics, :hawkular, :prometheus].each do |role| + [:default, :ceilometer, :amqp, :ssh_keypair, :metrics, :hawkular, :prometheus, :prometheus_alerts].each do |role| configurations << build_configuration(ems, authentications, endpoints, role) end @@ -575,6 +586,9 @@ def build_credentials(ems, mode) elsif params[:metrics_selection] == "prometheus" creds[:prometheus] = {:auth_key => default_key, :save => (mode != :validate)} end + if params[:alerts_selection] == 'prometheus' + creds[:prometheus_alerts] = {:auth_key => default_key, :save => (mode != :validate)} + end creds[:bearer] = {:auth_key => default_key, :save => (mode != :validate)} creds.delete(:default) end From 473c33409e2a880cafd495862d6b08b82b7d93b1 Mon Sep 17 00:00:00 2001 From: yaacov Date: Wed, 6 Sep 2017 21:02:35 +0300 Subject: [PATCH 6/7] fix style issues --- .../ems_common/ems_common_form_controller.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 e5fa6c06089..b40b73ad960 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 @@ -264,15 +264,15 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' ($scope.emsCommonModel.default_hostname != '' && $scope.emsCommonModel.default_api_port) && ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid)) { return true; - } else if(($scope.emsCommonModel.ems_controller == "ems_container") && + } else if (($scope.emsCommonModel.ems_controller === "ems_container") && ($scope.emsCommonModel.emstype) && - ($scope.emsCommonModel.default_password != '' && $scope.angularForm.default_password.$valid) && - (($scope.currentTab == "metrics" && - $scope.emsCommonModel.metrics_hostname != '' && + ($scope.emsCommonModel.default_password !== '' && $scope.angularForm.default_password.$valid) && + (($scope.currentTab === "metrics" && + $scope.emsCommonModel.metrics_hostname !== '' && $scope.emsCommonModel.metrics_api_port) || - ($scope.currentTab == "alerts" && - $scope.emsCommonModel.prometheus_alerts_hostname != '' && - $scope.emsCommonModel.prometheus_alerts_api_port != ''))) { + ($scope.currentTab === "alerts" && + $scope.emsCommonModel.prometheus_alerts_hostname !== '' && + $scope.emsCommonModel.prometheus_alerts_api_port !== ''))) { return true; } else if($scope.emsCommonModel.emstype == "gce" && $scope.emsCommonModel.project != '' && ($scope.currentTab == "default" || @@ -471,7 +471,7 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' amqp: {}, metrics: {}, ssh_keypair: {}, - prometheus_alerts: {} + prometheus_alerts: {}, } } if (prefix === "default") { @@ -538,7 +538,7 @@ ManageIQ.angular.app.controller('emsCommonFormController', ['$http', '$scope', ' $scope.postValidationModel['service_account'] = { service_account: $scope.emsCommonModel.service_account } - } else if (prefix == "prometheus_alerts") { + } else if (prefix === "prometheus_alerts") { $scope.postValidationModel['prometheus_alerts'] = {}; ['prometheus_alerts_hostname', 'prometheus_alerts_api_port', 'prometheus_alerts_security_protocol', 'prometheus_alerts_tls_ca_certs'] .forEach( function(resource) { From 6da318b339b291a142ee1115cdd162ef25f3e779 Mon Sep 17 00:00:00 2001 From: yaacov Date: Wed, 6 Sep 2017 21:30:39 +0300 Subject: [PATCH 7/7] fix missing error sign in the alerts tab --- app/views/layouts/angular/_multi_auth_credentials.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/angular/_multi_auth_credentials.html.haml b/app/views/layouts/angular/_multi_auth_credentials.html.haml index dd99e8798e0..247b5880529 100644 --- a/app/views/layouts/angular/_multi_auth_credentials.html.haml +++ b/app/views/layouts/angular/_multi_auth_credentials.html.haml @@ -24,7 +24,7 @@ = _("Metrics") = miq_tab_header('alerts', nil, 'ng-click' => "changeAuthTab('alerts')") do %div{"ng-if" => "emsCommonModel.alerts_selection == 'prometheus'"} - %i{"error-on-tab" => "alerts", :style => "color:#cc0000"} + %i{"error-on-tab" => "prometheus_alerts", :style => "color:#cc0000"} = _("Alerts") - elsif controller_name == "host" = miq_tab_header('remote', nil, {'ng-click' => "changeAuthTab('remote')"}) do