72 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook outposts app config"""
 | |
| from importlib import import_module
 | |
| from os import R_OK, access
 | |
| from os.path import expanduser
 | |
| from pathlib import Path
 | |
| from socket import gethostname
 | |
| from urllib.parse import urlparse
 | |
| 
 | |
| from django.apps import AppConfig
 | |
| from django.db import ProgrammingError
 | |
| from docker.constants import DEFAULT_UNIX_SOCKET
 | |
| from kubernetes.config.incluster_config import SERVICE_TOKEN_FILENAME
 | |
| from kubernetes.config.kube_config import KUBE_CONFIG_DEFAULT_LOCATION
 | |
| from structlog import get_logger
 | |
| 
 | |
| LOGGER = get_logger()
 | |
| 
 | |
| 
 | |
| class PassbookOutpostConfig(AppConfig):
 | |
|     """passbook outposts app config"""
 | |
| 
 | |
|     name = "passbook.outposts"
 | |
|     label = "passbook_outposts"
 | |
|     mountpoint = "outposts/"
 | |
|     verbose_name = "passbook Outpost"
 | |
| 
 | |
|     def ready(self):
 | |
|         import_module("passbook.outposts.signals")
 | |
|         try:
 | |
|             self.init_local_connection()
 | |
|         except (ProgrammingError):
 | |
|             pass
 | |
| 
 | |
|     def init_local_connection(self):
 | |
|         # Check if local kubernetes or docker connections should be created
 | |
|         from passbook.outposts.models import (
 | |
|             KubernetesServiceConnection,
 | |
|             DockerServiceConnection,
 | |
|         )
 | |
| 
 | |
|         if Path(SERVICE_TOKEN_FILENAME).exists():
 | |
|             LOGGER.debug("Detected in-cluster Kubernetes Config")
 | |
|             if not KubernetesServiceConnection.objects.filter(local=True).exists():
 | |
|                 LOGGER.debug("Created Service Connection for in-cluster")
 | |
|                 KubernetesServiceConnection.objects.create(
 | |
|                     name="Local Kubernetes Cluster", local=True, config={}
 | |
|                 )
 | |
|         # For development, check for the existence of a kubeconfig file
 | |
|         kubeconfig_path = expanduser(KUBE_CONFIG_DEFAULT_LOCATION)
 | |
|         if Path(kubeconfig_path).exists():
 | |
|             LOGGER.debug("Detected kubeconfig")
 | |
|             if not KubernetesServiceConnection.objects.filter(
 | |
|                 name=gethostname()
 | |
|             ).exists():
 | |
|                 LOGGER.debug("Creating kubeconfig Service Connection")
 | |
|                 with open(kubeconfig_path, "r") as _kubeconfig:
 | |
|                     KubernetesServiceConnection.objects.create(
 | |
|                         name=gethostname(), config=_kubeconfig.read()
 | |
|                     )
 | |
|         unix_socket_path = urlparse(DEFAULT_UNIX_SOCKET).path
 | |
|         socket = Path(unix_socket_path)
 | |
|         if socket.exists() and access(socket, R_OK):
 | |
|             LOGGER.debug("Detected local docker socket")
 | |
|             if not DockerServiceConnection.objects.filter(local=True).exists():
 | |
|                 LOGGER.debug("Created Service Connection for docker")
 | |
|                 DockerServiceConnection.objects.create(
 | |
|                     name="Local Docker connection",
 | |
|                     local=True,
 | |
|                     url=unix_socket_path,
 | |
|                     tls=True,
 | |
|                 )
 | 
