add k8s_dashboard_access part_6 setup done

setup steps for the dashboard are done:
-setup files are copied to lab
-the yaml files are applied and the HTTPS certificate is created for the
dashboard URL
-URL is working and it's reachable

Change-Id: Id249786c31d46348c2160ec8d627bb22320aa9cf
Signed-off-by: Gabriel Calixto de Paula <gabrielcalixto9@gmail.com>
This commit is contained in:
Gabriel Calixto de Paula
2025-03-06 12:20:58 -05:00
parent a577ea8202
commit f6df9c2d6e
5 changed files with 58 additions and 27 deletions

View File

@@ -1,4 +1,5 @@
{ {
// KUBECONFIG environment variable on the cloud_platform system. // KUBECONFIG environment variable on the cloud_platform system.
"kubeconfig": "/etc/kubernetes/admin.conf", "kubeconfig": "/etc/kubernetes/admin.conf",
"dashboard_port": "8443"
} }

View File

@@ -15,10 +15,17 @@ class K8sConfig:
raise raise
k8s_dict = json5.load(json_data) k8s_dict = json5.load(json_data)
self.kubeconfig = k8s_dict['kubeconfig'] self.kubeconfig = k8s_dict["kubeconfig"]
self.dashboard_port = k8s_dict["dashboard_port"]
def get_kubeconfig(self) -> str: def get_kubeconfig(self) -> str:
""" """
Getter for the KUBECONFIG environment variable on the lab where we want to run. Getter for the KUBECONFIG environment variable on the lab where we want to run.
""" """
return self.kubeconfig return self.kubeconfig
def get_dashboard_port(self) -> str:
"""
Getter for the port on which the K8s dashboard is running.
"""
return self.dashboard_port

View File

@@ -1,3 +1,4 @@
from config.configuration_manager import ConfigurationManager
from framework.ssh.ssh_connection import SSHConnection from framework.ssh.ssh_connection import SSHConnection
from keywords.base_keyword import BaseKeyword from keywords.base_keyword import BaseKeyword
from keywords.cloud_platform.command_wrappers import source_openrc from keywords.cloud_platform.command_wrappers import source_openrc
@@ -15,11 +16,21 @@ class OpenStackEndpointListKeywords(BaseKeyword):
def endpoint_list(self): def endpoint_list(self):
""" """
Keyword for openstack endpoint list Keyword for openstack endpoint list
Returns:
Returns:
OpenStackEndpointListOutput object
""" """
output = self.ssh_connection.send(source_openrc('openstack endpoint list')) output = self.ssh_connection.send(source_openrc("openstack endpoint list"))
self.validate_success_return_code(self.ssh_connection) self.validate_success_return_code(self.ssh_connection)
openstack_endpoint_list_output = OpenStackEndpointListOutput(output) openstack_endpoint_list_output = OpenStackEndpointListOutput(output)
return openstack_endpoint_list_output return openstack_endpoint_list_output
def get_k8s_dashboard_url(self) -> str:
"""
Getter for the URL of the K8s dashboard.
"""
endpoint_output = self.endpoint_list()
url = endpoint_output.get_endpoint("keystone", "public").get_url().rsplit(":", 1)[0]
end_point = f"{url}:{ConfigurationManager.get_k8s_config().get_dashboard_port()}"
return end_point

View File

@@ -1,3 +1,5 @@
from framework.logging.automation_logger import get_logger
from framework.ssh.ssh_connection import SSHConnection
from keywords.base_keyword import BaseKeyword from keywords.base_keyword import BaseKeyword
from keywords.k8s.k8s_command_wrapper import export_k8s_config from keywords.k8s.k8s_command_wrapper import export_k8s_config
@@ -7,24 +9,44 @@ class KubectlDeleteSecretsKeywords(BaseKeyword):
Keywords for delete secrets Keywords for delete secrets
""" """
def __init__(self, ssh_connection): def __init__(self, ssh_connection: SSHConnection):
""" """
Constructor Constructor
Args: Args:
ssh_connection: ssh_connection (SSHConnection): The SSH connection object
""" """
self.ssh_connection = ssh_connection self.ssh_connection = ssh_connection
def delete_secret(self, secret_name: str, namespace: str) -> str: def delete_secret(self, secret_name: str, namespace: str) -> str:
""" """
Deletes the secret Deletes the specified Kubernetes secret in the given namespace.
Args: Args:
secret_name (): the secret secret_name (str): The name of the secret to delete.
namespace (str): The namespace where the secret is located.
Returns: the output
Returns:
str: The output from the kubectl delete command.
""" """
output = self.ssh_connection.send(export_k8s_config(f"kubectl delete -n {namespace} secret {secret_name}")) output = self.ssh_connection.send(export_k8s_config(f"kubectl delete -n {namespace} secret {secret_name}"))
self.validate_success_return_code(self.ssh_connection) self.validate_success_return_code(self.ssh_connection)
return output return output
def cleanup_secret(self, secret_name: str, namespace: str) -> str:
"""
This method is intended for use in cleanup operations as it doesn't automatically fail the test.
Args:
secret_name (str): The name of the secret to delete.
namespace (str): The namespace where the secret is located.
Returns:
str: The output of the delete operation.
"""
self.ssh_connection.send(export_k8s_config(f"kubectl delete -n {namespace} secret {secret_name}"))
rc = self.ssh_connection.get_return_code()
if rc != 0:
get_logger().log_error(f"Secret {secret_name} failed to delete")
return rc

View File

@@ -9,26 +9,17 @@ from framework.logging.automation_logger import get_logger
from framework.resources.resource_finder import get_stx_resource_path from framework.resources.resource_finder import get_stx_resource_path
from framework.rest.rest_client import RestClient from framework.rest.rest_client import RestClient
from framework.ssh.ssh_connection import SSHConnection from framework.ssh.ssh_connection import SSHConnection
from keywords.cloud_platform.openstack.endpoint.openstack_endpoint_list_keywords import OpenStackEndpointListKeywords
from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords
from keywords.files.file_keywords import FileKeywords from keywords.files.file_keywords import FileKeywords
from keywords.k8s.files.kubectl_file_apply_keywords import KubectlFileApplyKeywords from keywords.k8s.files.kubectl_file_apply_keywords import KubectlFileApplyKeywords
from keywords.k8s.files.kubectl_file_delete_keywords import KubectlFileDeleteKeywords from keywords.k8s.files.kubectl_file_delete_keywords import KubectlFileDeleteKeywords
from keywords.k8s.namespace.kubectl_create_namespace_keywords import ( from keywords.k8s.namespace.kubectl_create_namespace_keywords import KubectlCreateNamespacesKeywords
KubectlCreateNamespacesKeywords, from keywords.k8s.namespace.kubectl_delete_namespace_keywords import KubectlDeleteNamespaceKeywords
) from keywords.k8s.namespace.kubectl_get_namespaces_keywords import KubectlGetNamespacesKeywords
from keywords.k8s.namespace.kubectl_delete_namespace_keywords import (
KubectlDeleteNamespaceKeywords,
)
from keywords.k8s.namespace.kubectl_get_namespaces_keywords import (
KubectlGetNamespacesKeywords,
)
from keywords.k8s.patch.kubectl_apply_patch_keywords import KubectlApplyPatchKeywords from keywords.k8s.patch.kubectl_apply_patch_keywords import KubectlApplyPatchKeywords
from keywords.k8s.secret.kubectl_create_secret_keywords import ( from keywords.k8s.secret.kubectl_create_secret_keywords import KubectlCreateSecretsKeywords
KubectlCreateSecretsKeywords, from keywords.k8s.secret.kubectl_delete_secret_keywords import KubectlDeleteSecretsKeywords
)
from keywords.k8s.secret.kubectl_delete_secret_keywords import (
KubectlDeleteSecretsKeywords,
)
from keywords.openssl.openssl_keywords import OpenSSLKeywords from keywords.openssl.openssl_keywords import OpenSSLKeywords
@@ -105,7 +96,7 @@ def create_k8s_dashboard(request: fixture, namespace: str, con_ssh: SSHConnectio
def teardown(): def teardown():
KubectlFileDeleteKeywords(ssh_connection=con_ssh).delete_resources(k8s_dashboard_file_path) KubectlFileDeleteKeywords(ssh_connection=con_ssh).delete_resources(k8s_dashboard_file_path)
# delete created dashboard secret # delete created dashboard secret
KubectlDeleteSecretsKeywords(con_ssh).delete_secret(namespace=namespace, secret_name=secrets_name) KubectlDeleteSecretsKeywords(con_ssh).cleanup_secret(namespace=namespace, secret_name=secrets_name)
get_logger().log_info("Deleting k8s_dashboard directory") get_logger().log_info("Deleting k8s_dashboard directory")
con_ssh.send(f"rm -rf {home_k8s}") con_ssh.send(f"rm -rf {home_k8s}")
@@ -118,8 +109,7 @@ def create_k8s_dashboard(request: fixture, namespace: str, con_ssh: SSHConnectio
time.sleep(30) time.sleep(30)
get_logger().log_info(f"Verify that {name} is working") get_logger().log_info(f"Verify that {name} is working")
end_point = "https://{}:{}".format(sys_domain_name, port) end_point = OpenStackEndpointListKeywords(ssh_connection=con_ssh).get_k8s_dashboard_url()
status_code, _ = check_url_access(end_point) status_code, _ = check_url_access(end_point)
if not status_code == 200: if not status_code == 200:
raise KeywordException(detailed_message=f"Kubernetes dashboard returned status code {status_code}") raise KeywordException(detailed_message=f"Kubernetes dashboard returned status code {status_code}")