in build/common/installer/scripts/tomlparser-prom-customconfig.rb [141:407]
def populateSettingValuesFromConfigMap(parsedConfig)
if !@controller.nil?
if !parsedConfig.nil? && !parsedConfig[:prometheus_data_collection_settings].nil?
if @controller.casecmp(@replicaset) == 0 && !parsedConfig[:prometheus_data_collection_settings][:cluster].nil?
begin
interval = parsedConfig[:prometheus_data_collection_settings][:cluster][:interval]
fieldPass = parsedConfig[:prometheus_data_collection_settings][:cluster][:fieldpass]
fieldDrop = parsedConfig[:prometheus_data_collection_settings][:cluster][:fielddrop]
urls = parsedConfig[:prometheus_data_collection_settings][:cluster][:urls]
kubernetesServices = parsedConfig[:prometheus_data_collection_settings][:cluster][:kubernetes_services]
monitorKubernetesPods = parsedConfig[:prometheus_data_collection_settings][:cluster][:monitor_kubernetes_pods]
monitorKubernetesPodsNamespaces = parsedConfig[:prometheus_data_collection_settings][:cluster][:monitor_kubernetes_pods_namespaces]
kubernetesLabelSelectors = parsedConfig[:prometheus_data_collection_settings][:cluster][:kubernetes_label_selector]
kubernetesFieldSelectors = parsedConfig[:prometheus_data_collection_settings][:cluster][:kubernetes_field_selector]
if checkForType(interval, String) &&
checkForTypeArray(fieldPass, String) &&
checkForTypeArray(fieldDrop, String) &&
checkForTypeArray(kubernetesServices, String) &&
checkForTypeArray(urls, String) &&
checkForType(kubernetesLabelSelectors, String) &&
checkForType(kubernetesFieldSelectors, String) &&
(monitorKubernetesPods.nil? || (!monitorKubernetesPods.nil? && (!!monitorKubernetesPods == monitorKubernetesPods)))
puts "config::Successfully passed typecheck for config settings for replicaset"
interval = (interval.nil?) ? @defaultRsInterval : interval
fieldPass = (fieldPass.nil?) ? @defaultRsFieldPass : fieldPass
fieldDrop = (fieldDrop.nil?) ? @defaultRsFieldDrop : fieldDrop
kubernetesServices = (kubernetesServices.nil?) ? @defaultRsK8sServices : kubernetesServices
urls = (urls.nil?) ? @defaultRsPromUrls : urls
monitorKubernetesPods = (monitorKubernetesPods.nil?) ? @defaultRsMonitorPods : monitorKubernetesPods
kubernetesLabelSelectors = (kubernetesLabelSelectors.nil?) ? @defaultCustomPrometheusLabelSelectors : kubernetesLabelSelectors
kubernetesFieldSelectors = (kubernetesFieldSelectors.nil?) ? @defaultCustomPrometheusFieldSelectors : kubernetesFieldSelectors
file_name = "/opt/telegraf-test-rs.conf"
FileUtils.cp("/etc/opt/microsoft/docker-cimprov/telegraf-rs.conf", file_name)
puts "config::Starting to substitute the placeholders in telegraf conf copy file for replicaset"
text = File.read(file_name)
new_contents = text.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_INTERVAL", interval)
fieldPassSetting = (fieldPass.length > 0) ? ("[\"" + fieldPass.join("\",\"") + "\"]") : "[]"
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_FIELDPASS", fieldPassSetting)
fieldDropSetting = (fieldDrop.length > 0) ? ("[\"" + fieldDrop.join("\",\"") + "\"]") : "[]"
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_FIELDDROP", fieldDropSetting)
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_URLS", ((urls.length > 0) ? ("[\"" + urls.join("\",\"") + "\"]") : "[]"))
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_K8S_SERVICES", ((kubernetesServices.length > 0) ? ("[\"" + kubernetesServices.join("\",\"") + "\"]") : "[]"))
if (@sidecarScrapingEnabled.nil? || (!@sidecarScrapingEnabled.nil? && (@sidecarScrapingEnabled.casecmp("false") == 0)))
monitorKubernetesPodsNSConfig = []
if monitorKubernetesPods && !monitorKubernetesPodsNamespaces.nil? && checkForTypeArray(monitorKubernetesPodsNamespaces, String)
if (monitorKubernetesPodsNamespaces.length > 0)
new_contents = createPrometheusPluginsWithNamespaceSetting(monitorKubernetesPods, monitorKubernetesPodsNamespaces, new_contents, interval, fieldPassSetting, fieldDropSetting, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = monitorKubernetesPodsNamespaces.length
monitorKubernetesPodsNSConfig = monitorKubernetesPodsNamespaces
else
new_contents = replaceDefaultMonitorPodSettings(new_contents, monitorKubernetesPods, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = 0
end
else
new_contents = replaceDefaultMonitorPodSettings(new_contents, monitorKubernetesPods, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = 0
end
kubernetesLabelSelectorsLength = kubernetesLabelSelectors.split(/,\s*(?=[^()]*(?:\(|$))/).length
kubernetesFieldSelectorsLength = kubernetesFieldSelectors.split(",").length
end
File.open(file_name, "w") { |file| file.puts new_contents }
puts "config::Successfully substituted the placeholders in telegraf conf file for replicaset"
file = File.open("telemetry_prom_config_env_var", "w")
if !file.nil?
file.write("export TELEMETRY_RS_PROM_INTERVAL=\"#{interval}\"\n")
file.write("export TELEMETRY_RS_PROM_FIELDPASS_LENGTH=\"#{fieldPass.length}\"\n")
file.write("export TELEMETRY_RS_PROM_FIELDDROP_LENGTH=\"#{fieldDrop.length}\"\n")
file.write("export TELEMETRY_RS_PROM_K8S_SERVICES_LENGTH=#{kubernetesServices.length}\n")
file.write("export TELEMETRY_RS_PROM_URLS_LENGTH=#{urls.length}\n")
if (@sidecarScrapingEnabled.nil? || (!@sidecarScrapingEnabled.nil? && (@sidecarScrapingEnabled.casecmp("false") == 0)))
file.write("export TELEMETRY_RS_PROM_MONITOR_PODS=\"#{monitorKubernetesPods}\"\n")
file.write("export TELEMETRY_RS_PROM_MONITOR_PODS_NS_LENGTH=\"#{monitorKubernetesPodsNamespacesLength}\"\n")
file.write("export TELEMETRY_RS_PROM_LABEL_SELECTOR_LENGTH=\"#{kubernetesLabelSelectorsLength}\"\n")
file.write("export TELEMETRY_RS_PROM_FIELD_SELECTOR_LENGTH=\"#{kubernetesFieldSelectorsLength}\"\n")
end
file.close
puts "config::Successfully created telemetry file for replicaset"
end
else
ConfigParseErrorLogger.logError("Typecheck failed for prometheus config settings for replicaset, using defaults, please use right types for all settings")
end
rescue => errorStr
ConfigParseErrorLogger.logError("Exception while parsing config file for prometheus config for replicaset: #{errorStr}, using defaults")
setRsPromDefaults
puts "****************End Prometheus Config Processing********************"
end
elsif @controller.casecmp(@daemonset) == 0 &&
((!@containerType.nil? && @containerType.casecmp(@promSideCar) == 0) ||
(!@os_type.nil? && !@os_type.empty? && @os_type.strip.casecmp("windows") == 0) && @sidecarScrapingEnabled.strip.casecmp("true") == 0) &&
!parsedConfig[:prometheus_data_collection_settings][:cluster].nil?
begin
interval = parsedConfig[:prometheus_data_collection_settings][:cluster][:interval]
fieldPass = parsedConfig[:prometheus_data_collection_settings][:cluster][:fieldpass]
fieldDrop = parsedConfig[:prometheus_data_collection_settings][:cluster][:fielddrop]
monitorKubernetesPods = parsedConfig[:prometheus_data_collection_settings][:cluster][:monitor_kubernetes_pods]
monitorKubernetesPodsNamespaces = parsedConfig[:prometheus_data_collection_settings][:cluster][:monitor_kubernetes_pods_namespaces]
kubernetesLabelSelectors = parsedConfig[:prometheus_data_collection_settings][:cluster][:kubernetes_label_selector]
kubernetesFieldSelectors = parsedConfig[:prometheus_data_collection_settings][:cluster][:kubernetes_field_selector]
if checkForType(interval, String) &&
checkForType(kubernetesLabelSelectors, String) &&
checkForType(kubernetesFieldSelectors, String) &&
checkForTypeArray(fieldPass, String) &&
checkForTypeArray(fieldDrop, String) &&
(monitorKubernetesPods.nil? || (!monitorKubernetesPods.nil? && (!!monitorKubernetesPods == monitorKubernetesPods)))
puts "config::Successfully passed typecheck for config settings for custom prometheus scraping"
interval = (interval.nil?) ? @defaultCustomPrometheusInterval : interval
fieldPass = (fieldPass.nil?) ? @defaultCustomPrometheusFieldPass : fieldPass
fieldDrop = (fieldDrop.nil?) ? @defaultCustomPrometheusFieldDrop : fieldDrop
monitorKubernetesPods = (monitorKubernetesPods.nil?) ? @defaultCustomPrometheusMonitorPods : monitorKubernetesPods
kubernetesLabelSelectors = (kubernetesLabelSelectors.nil?) ? @defaultCustomPrometheusLabelSelectors : kubernetesLabelSelectors
kubernetesFieldSelectors = (kubernetesFieldSelectors.nil?) ? @defaultCustomPrometheusFieldSelectors : kubernetesFieldSelectors
if !@os_type.nil? && !@os_type.empty? && @os_type.strip.casecmp("windows") == 0
file_name = "/etc/telegraf/telegraf.conf"
else
file_name = "/opt/telegraf-test-prom-side-car.conf"
FileUtils.cp("/etc/opt/microsoft/docker-cimprov/telegraf-prom-side-car.conf", file_name)
end
puts "config::Starting to substitute the placeholders in telegraf conf copy file for linux or conf file for windows for custom prometheus scraping"
text = File.read(file_name)
new_contents = text.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_INTERVAL", interval)
fieldPassSetting = (fieldPass.length > 0) ? ("[\"" + fieldPass.join("\",\"") + "\"]") : "[]"
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_FIELDPASS", fieldPassSetting)
fieldDropSetting = (fieldDrop.length > 0) ? ("[\"" + fieldDrop.join("\",\"") + "\"]") : "[]"
new_contents = new_contents.gsub("$AZMON_TELEGRAF_CUSTOM_PROM_FIELDDROP", fieldDropSetting)
monitorKubernetesPodsNSConfig = []
if monitorKubernetesPods && !monitorKubernetesPodsNamespaces.nil? && checkForTypeArray(monitorKubernetesPodsNamespaces, String)
if (monitorKubernetesPodsNamespaces.length > 0)
new_contents = createPrometheusPluginsWithNamespaceSetting(monitorKubernetesPods, monitorKubernetesPodsNamespaces, new_contents, interval, fieldPassSetting, fieldDropSetting, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = monitorKubernetesPodsNamespaces.length
monitorKubernetesPodsNSConfig = monitorKubernetesPodsNamespaces
else
new_contents = replaceDefaultMonitorPodSettings(new_contents, monitorKubernetesPods, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = 0
end
else
new_contents = replaceDefaultMonitorPodSettings(new_contents, monitorKubernetesPods, kubernetesLabelSelectors, kubernetesFieldSelectors)
monitorKubernetesPodsNamespacesLength = 0
end
kubernetesLabelSelectorsLength = kubernetesLabelSelectors.split(/,\s*(?=[^()]*(?:\(|$))/).length
kubernetesFieldSelectorsLength = kubernetesFieldSelectors.split(",").length
File.open(file_name, "w") { |file| file.puts new_contents }
puts "config::Successfully substituted the placeholders in telegraf conf file for custom prometheus scraping"
if (!@containerType.nil? && @containerType.casecmp(@promSideCar) == 0)
file = File.open("telemetry_prom_config_env_var", "w")
if !file.nil?
file.write("export TELEMETRY_CUSTOM_PROM_MONITOR_PODS=\"#{monitorKubernetesPods}\"\n")
file.write("export TELEMETRY_CUSTOM_PROM_MONITOR_PODS_NS_LENGTH=\"#{monitorKubernetesPodsNamespacesLength}\"\n")
file.write("export TELEMETRY_CUSTOM_PROM_LABEL_SELECTOR_LENGTH=\"#{kubernetesLabelSelectorsLength}\"\n")
file.write("export TELEMETRY_CUSTOM_PROM_FIELD_SELECTOR_LENGTH=\"#{kubernetesFieldSelectorsLength}\"\n")
file.close
puts "config::Successfully created telemetry file for prometheus sidecar"
end
end
else
ConfigParseErrorLogger.logError("Typecheck failed for prometheus config settings for prometheus side car, using defaults, please use right types for all settings")
end
rescue => errorStr
ConfigParseErrorLogger.logError("Exception while parsing config file for prometheus config for promethues side car: #{errorStr}, using defaults")
puts "****************End Prometheus Config Processing********************"
end
elsif @controller.casecmp(@daemonset) == 0 && !parsedConfig[:prometheus_data_collection_settings][:node].nil?
begin
interval = parsedConfig[:prometheus_data_collection_settings][:node][:interval]
fieldPass = parsedConfig[:prometheus_data_collection_settings][:node][:fieldpass]
fieldDrop = parsedConfig[:prometheus_data_collection_settings][:node][:fielddrop]
urls = parsedConfig[:prometheus_data_collection_settings][:node][:urls]
if checkForType(interval, String) &&
checkForTypeArray(fieldPass, String) &&
checkForTypeArray(fieldDrop, String) &&
checkForTypeArray(urls, String)
puts "config::Successfully passed typecheck for config settings for daemonset"
interval = (interval.nil?) ? @defaultDsInterval : interval
fieldPass = (fieldPass.nil?) ? @defaultDsFieldPass : fieldPass
fieldDrop = (fieldDrop.nil?) ? @defaultDsFieldDrop : fieldDrop
urls = (urls.nil?) ? @defaultDsPromUrls : urls
file_name = "/opt/telegraf-test.conf"
FileUtils.cp("/etc/opt/microsoft/docker-cimprov/telegraf.conf", file_name)
puts "config::Starting to substitute the placeholders in telegraf conf copy file for daemonset"
text = File.read(file_name)
new_contents = text.gsub("$AZMON_DS_PROM_INTERVAL", interval)
new_contents = new_contents.gsub("$AZMON_DS_PROM_FIELDPASS", ((fieldPass.length > 0) ? ("[\"" + fieldPass.join("\",\"") + "\"]") : "[]"))
new_contents = new_contents.gsub("$AZMON_DS_PROM_FIELDDROP", ((fieldDrop.length > 0) ? ("[\"" + fieldDrop.join("\",\"") + "\"]") : "[]"))
new_contents = new_contents.gsub("$AZMON_DS_PROM_URLS", ((urls.length > 0) ? ("[\"" + urls.join("\",\"") + "\"]") : "[]"))
File.open(file_name, "w") { |file| file.puts new_contents }
puts "config::Successfully substituted the placeholders in telegraf conf file for daemonset"
file = File.open("telemetry_prom_config_env_var", "w")
if !file.nil?
file.write("export TELEMETRY_DS_PROM_INTERVAL=\"#{interval}\"\n")
file.write("export TELEMETRY_DS_PROM_FIELDPASS_LENGTH=\"#{fieldPass.length}\"\n")
file.write("export TELEMETRY_DS_PROM_FIELDDROP_LENGTH=\"#{fieldDrop.length}\"\n")
file.write("export TELEMETRY_DS_PROM_URLS_LENGTH=#{urls.length}\n")
file.close
puts "config::Successfully created telemetry file for daemonset"
end
else
ConfigParseErrorLogger.logError("Typecheck failed for prometheus config settings for daemonset, using defaults, please use right types for all settings")
end
rescue => errorStr
ConfigParseErrorLogger.logError("Exception while parsing config file for prometheus config for daemonset: #{errorStr}, using defaults, please check correctness of configmap")
puts "****************End Prometheus Config Processing********************"
end
end
end
else
ConfigParseErrorLogger.logError("Controller undefined while processing prometheus config, using defaults")
end
end