Nagios: Add Selenium tests via helm test pod
This adds selenium tests for the Nagios chart via a helm test pod to help ensure the Nagios deployment is functional and accessible Change-Id: I44f30fbac274546abadba0290de029ed2b9d1958 Signed-off-by: Steve Wilkerson <sw5822@att.com>
This commit is contained in:
parent
d23e847e1f
commit
40769d5a60
141
nagios/templates/bin/_selenium-tests.py.tpl
Normal file
141
nagios/templates/bin/_selenium-tests.py.tpl
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Copyright 2019 The Openstack-Helm Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
|
from selenium.webdriver.chrome.options import Options
|
||||||
|
|
||||||
|
# Create logger, console handler and formatter
|
||||||
|
logger = logging.getLogger('Nagios Selenium Tests')
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
ch = logging.StreamHandler()
|
||||||
|
ch.setLevel(logging.DEBUG)
|
||||||
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||||
|
|
||||||
|
# Set the formatter and add the handler
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
|
if "NAGIOS_USER" in os.environ:
|
||||||
|
nagios_user = os.environ['NAGIOS_USER']
|
||||||
|
logger.info('Found Nagios username')
|
||||||
|
else:
|
||||||
|
logger.critical('Nagios username environment variable not set')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if "NAGIOS_PASSWORD" in os.environ:
|
||||||
|
nagios_password = os.environ['NAGIOS_PASSWORD']
|
||||||
|
logger.info('Found Nagios password')
|
||||||
|
else:
|
||||||
|
logger.critical('Nagios password environment variable not set')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if "NAGIOS_URI" in os.environ:
|
||||||
|
nagios_uri = os.environ['NAGIOS_URI']
|
||||||
|
logger.info('Found Nagios URI')
|
||||||
|
else:
|
||||||
|
logger.critical('Nagios URI environment variable not set')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
options = Options()
|
||||||
|
options.add_argument('--headless')
|
||||||
|
options.add_argument('--no-sandbox')
|
||||||
|
options.add_argument('--window-size=1920x1080')
|
||||||
|
|
||||||
|
logger.info("Attempting to open Chrome webdriver")
|
||||||
|
try:
|
||||||
|
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
|
||||||
|
logger.info("Successfully opened Chrome webdriver")
|
||||||
|
except:
|
||||||
|
logger.error("Unable to open Chrome webdriver")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
logger.info("Attempting to login to Nagios dashboard")
|
||||||
|
try:
|
||||||
|
browser.get('http://'+nagios_user+':'+nagios_password+'@'+nagios_uri)
|
||||||
|
logger.info("Successfully logged in to Nagios dashboard")
|
||||||
|
sideFrame = browser.switch_to.frame('side')
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to access Nagios services link")
|
||||||
|
services = browser.find_element_by_link_text('Services')
|
||||||
|
services.click()
|
||||||
|
logger.info("Successfully accessed Nagios services link")
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to capture Nagios services screen")
|
||||||
|
el = WebDriverWait(browser, 15)
|
||||||
|
browser.save_screenshot('/tmp/artifacts/Nagios_Services.png')
|
||||||
|
logger.info("Successfully captured Nagios services screen")
|
||||||
|
except:
|
||||||
|
logger.error("Unable to capture Nagios services screen")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
except:
|
||||||
|
logger.error("Unable to access Nagios services link")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to access Nagios host groups link")
|
||||||
|
host_groups = browser.find_element_by_link_text('Host Groups')
|
||||||
|
host_groups.click()
|
||||||
|
logger.info("Successfully accessed Nagios host groups link")
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to capture Nagios host groups screen")
|
||||||
|
el = WebDriverWait(browser, 15)
|
||||||
|
browser.save_screenshot('/tmp/artifacts/Nagios_Host_Groups.png')
|
||||||
|
logger.info("Successfully captured Nagios host groups screen")
|
||||||
|
except:
|
||||||
|
logger.error("Unable to capture Nagios host groups screen")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
except:
|
||||||
|
logger.error("Unable to access Nagios host groups link")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to access Nagios hosts link")
|
||||||
|
hosts = browser.find_element_by_link_text('Hosts')
|
||||||
|
hosts.click()
|
||||||
|
logger.info("Successfully accessed Nagios hosts link")
|
||||||
|
try:
|
||||||
|
logger.info("Attempting to capture Nagios hosts screen")
|
||||||
|
el = WebDriverWait(browser, 15)
|
||||||
|
browser.save_screenshot('/tmp/artifacts/Nagios_Hosts.png')
|
||||||
|
logger.info("Successfully captured Nagios hosts screen")
|
||||||
|
except:
|
||||||
|
logger.error("Unable to capture Nagios hosts screen")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
except:
|
||||||
|
logger.error("Unable to access Nagios hosts link")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
||||||
|
browser.close()
|
||||||
|
logger.info("The following screenshots were captured:")
|
||||||
|
for root, dirs, files in os.walk("/tmp/artifacts/"):
|
||||||
|
for name in files:
|
||||||
|
logger.info(os.path.join(root, name))
|
||||||
|
except:
|
||||||
|
logger.error("Unable to log in to Nagios dashbaord")
|
||||||
|
browser.close()
|
||||||
|
sys.exit(1)
|
@ -26,6 +26,8 @@ data:
|
|||||||
{{ tuple "bin/_apache.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
|
{{ tuple "bin/_apache.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
|
||||||
nagios-readiness.sh: |
|
nagios-readiness.sh: |
|
||||||
{{ tuple "bin/_nagios-readiness.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
|
{{ tuple "bin/_nagios-readiness.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
|
||||||
|
selenium-tests.py: |
|
||||||
|
{{ tuple "bin/_selenium-tests.py.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
|
||||||
image-repo-sync.sh: |+
|
image-repo-sync.sh: |+
|
||||||
{{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }}
|
{{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
80
nagios/templates/pod-helm-tests.yaml
Normal file
80
nagios/templates/pod-helm-tests.yaml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
{{/*
|
||||||
|
Copyright 2017 The Openstack-Helm Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- if .Values.manifests.pod_helm_test }}
|
||||||
|
{{- $envAll := . }}
|
||||||
|
|
||||||
|
{{- $nagiosUserSecret := .Values.secrets.nagios.admin }}
|
||||||
|
|
||||||
|
{{- $serviceAccountName := print .Release.Name "-test" }}
|
||||||
|
{{ tuple $envAll "tests" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: "{{.Release.Name}}-test"
|
||||||
|
labels:
|
||||||
|
{{ tuple $envAll "nagios" "test" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
{{ tuple $envAll | include "helm-toolkit.snippets.release_uuid" }}
|
||||||
|
spec:
|
||||||
|
{{ dict "envAll" $envAll "application" "monitoring" | include "helm-toolkit.snippets.kubernetes_pod_security_context" | indent 2 }}
|
||||||
|
serviceAccountName: {{ $serviceAccountName }}
|
||||||
|
nodeSelector:
|
||||||
|
{{ .Values.labels.test.node_selector_key }}: {{ .Values.labels.test.node_selector_value }}
|
||||||
|
restartPolicy: Never
|
||||||
|
initContainers:
|
||||||
|
{{ tuple $envAll "tests" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 4 }}
|
||||||
|
containers:
|
||||||
|
- name: {{.Release.Name}}-helm-tests
|
||||||
|
{{ tuple $envAll "selenium_tests" | include "helm-toolkit.snippets.image" | indent 6 }}
|
||||||
|
{{ tuple $envAll $envAll.Values.pod.resources.jobs.tests | include "helm-toolkit.snippets.kubernetes_resources" | indent 6 }}
|
||||||
|
{{ dict "envAll" $envAll "application" "monitoring" "container" "helm_tests" | include "helm-toolkit.snippets.kubernetes_container_security_context" | indent 6 }}
|
||||||
|
command:
|
||||||
|
- /tmp/selenium-tests.py
|
||||||
|
env:
|
||||||
|
- name: NAGIOS_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ $nagiosUserSecret }}
|
||||||
|
key: NAGIOSADMIN_USER
|
||||||
|
- name: NAGIOS_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: {{ $nagiosUserSecret }}
|
||||||
|
key: NAGIOSADMIN_PASS
|
||||||
|
- name: NAGIOS_URI
|
||||||
|
value: {{ tuple "nagios" "pubic" "http" . | include "helm-toolkit.endpoints.host_and_port_endpoint_uri_lookup" }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: pod-tmp
|
||||||
|
mountPath: /tmp
|
||||||
|
- name: artifacts
|
||||||
|
mountPath: /tmp/artifacts
|
||||||
|
- name: nagios-bin
|
||||||
|
mountPath: /tmp/selenium-tests.py
|
||||||
|
subPath: selenium-tests.py
|
||||||
|
readOnly: true
|
||||||
|
volumes:
|
||||||
|
- name: pod-tmp
|
||||||
|
emptyDir: {}
|
||||||
|
- name: artifacts
|
||||||
|
emptyDir: {}
|
||||||
|
- name: nagios-bin
|
||||||
|
configMap:
|
||||||
|
name: nagios-bin
|
||||||
|
defaultMode: 0555
|
||||||
|
{{- end }}
|
@ -21,6 +21,7 @@ images:
|
|||||||
apache_proxy: docker.io/httpd:2.4
|
apache_proxy: docker.io/httpd:2.4
|
||||||
nagios: quay.io/attcomdev/nagios:410fcb08d2586e98e18ced317dab4157eb27456e
|
nagios: quay.io/attcomdev/nagios:410fcb08d2586e98e18ced317dab4157eb27456e
|
||||||
dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1
|
dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1
|
||||||
|
selenium_tests: docker.io/openstackhelm/osh-selenium:latest-ubuntu_xenial
|
||||||
image_repo_sync: docker.io/docker:17.07.0
|
image_repo_sync: docker.io/docker:17.07.0
|
||||||
pull_policy: IfNotPresent
|
pull_policy: IfNotPresent
|
||||||
local_registry:
|
local_registry:
|
||||||
@ -36,6 +37,9 @@ labels:
|
|||||||
job:
|
job:
|
||||||
node_selector_key: openstack-control-plane
|
node_selector_key: openstack-control-plane
|
||||||
node_selector_value: enabled
|
node_selector_value: enabled
|
||||||
|
test:
|
||||||
|
node_selector_key: openstack-control-plane
|
||||||
|
node_selector_value: enabled
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
dynamic:
|
dynamic:
|
||||||
@ -52,6 +56,10 @@ dependencies:
|
|||||||
endpoint: internal
|
endpoint: internal
|
||||||
nagios:
|
nagios:
|
||||||
services: null
|
services: null
|
||||||
|
tests:
|
||||||
|
services:
|
||||||
|
- service: nagios
|
||||||
|
endpoint: internal
|
||||||
|
|
||||||
secrets:
|
secrets:
|
||||||
nagios:
|
nagios:
|
||||||
@ -204,6 +212,8 @@ pod:
|
|||||||
readOnlyRootFilesystem: false
|
readOnlyRootFilesystem: false
|
||||||
nagios:
|
nagios:
|
||||||
readOnlyRootFilesystem: false
|
readOnlyRootFilesystem: false
|
||||||
|
helm_tests:
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
lifecycle:
|
lifecycle:
|
||||||
upgrades:
|
upgrades:
|
||||||
revision_history: 3
|
revision_history: 3
|
||||||
@ -240,6 +250,13 @@ pod:
|
|||||||
requests:
|
requests:
|
||||||
memory: "128Mi"
|
memory: "128Mi"
|
||||||
cpu: "100m"
|
cpu: "100m"
|
||||||
|
tests:
|
||||||
|
limits:
|
||||||
|
memory: "1024Mi"
|
||||||
|
cpu: "2000m"
|
||||||
|
requests:
|
||||||
|
memory: "128Mi"
|
||||||
|
cpu: "100m"
|
||||||
|
|
||||||
manifests:
|
manifests:
|
||||||
configmap_bin: true
|
configmap_bin: true
|
||||||
@ -248,6 +265,7 @@ manifests:
|
|||||||
ingress: true
|
ingress: true
|
||||||
job_image_repo_sync: true
|
job_image_repo_sync: true
|
||||||
network_policy: false
|
network_policy: false
|
||||||
|
pod_helm_test: true
|
||||||
secret_nagios: true
|
secret_nagios: true
|
||||||
secret_ingress_tls: true
|
secret_ingress_tls: true
|
||||||
service: true
|
service: true
|
||||||
|
@ -28,3 +28,5 @@ helm upgrade --install nagios ./nagios \
|
|||||||
|
|
||||||
#NOTE: Validate Deployment info
|
#NOTE: Validate Deployment info
|
||||||
helm status nagios
|
helm status nagios
|
||||||
|
|
||||||
|
helm test nagios
|
||||||
|
Loading…
Reference in New Issue
Block a user