From 8ada177fc4c093acc5028a4134f77dcef8ee9837 Mon Sep 17 00:00:00 2001 From: Jack Lucas Date: Tue, 17 Apr 2018 13:15:46 +0000 Subject: Support for /var/run/secrets/kubernetes.io Change-Id: If259892dd332981654bcad6b1e07037afbf31c7d Issue-ID: DCAEGEN2-447 Signed-off-by: Jack Lucas --- k8s/k8s-node-type.yaml | 2 +- k8s/k8sclient/k8sclient.py | 23 +++++++++++++++++++++-- k8s/pom.xml | 2 +- k8s/setup.py | 2 +- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/k8s/k8s-node-type.yaml b/k8s/k8s-node-type.yaml index 31d4248..7086701 100644 --- a/k8s/k8s-node-type.yaml +++ b/k8s/k8s-node-type.yaml @@ -25,7 +25,7 @@ plugins: k8s: executor: 'central_deployment_agent' package_name: k8splugin - package_version: 1.0.1 + package_version: 1.1.0 data_types: diff --git a/k8s/k8sclient/k8sclient.py b/k8s/k8sclient/k8sclient.py index a61fafa..017dd36 100644 --- a/k8s/k8sclient/k8sclient.py +++ b/k8s/k8sclient/k8sclient.py @@ -32,8 +32,27 @@ def _create_exposed_service_name(component_name): return ("x{0}".format(component_name))[:63] def _configure_api(): - #TODO: real configuration - config.load_kube_config(os.path.join(os.environ["HOME"], '.kube/config')) + # Look for a kubernetes config file in ~/.kube/config + kubepath = os.path.join(os.environ["HOME"], '.kube/config') + if os.path.exists(kubepath): + config.load_kube_config(kubepath) + else: + # Maybe we're running in a k8s container and we can use info provided by k8s + # We would like to use: + # config.load_incluster_config() + # but this looks into os.environ for kubernetes host and port, and from + # the plugin those aren't visible. So we use the InClusterConfigLoader class, + # where we can set the environment to what we like. + # This is probably brittle! Maybe there's a better alternative. + localenv = { + config.incluster_config.SERVICE_HOST_ENV_NAME : "kubernetes.default.svc.cluster.local", + config.incluster_config.SERVICE_PORT_ENV_NAME : "443" + } + config.incluster_config.InClusterConfigLoader( + token_filename=config.incluster_config.SERVICE_TOKEN_FILENAME, + cert_filename=config.incluster_config.SERVICE_CERT_FILENAME, + environ=localenv + ).load_and_set() def _create_container_object(name, image, always_pull, env={}, container_ports=[], volume_mounts = []): # Set up environment variables diff --git a/k8s/pom.xml b/k8s/pom.xml index ededd75..afcf45a 100644 --- a/k8s/pom.xml +++ b/k8s/pom.xml @@ -28,7 +28,7 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property. org.onap.dcaegen2.platform.plugins k8s k8s-plugin - 1.0.1-SNAPSHOT + 1.1.0-SNAPSHOT http://maven.apache.org UTF-8 diff --git a/k8s/setup.py b/k8s/setup.py index 2d17dc4..1d15ff5 100644 --- a/k8s/setup.py +++ b/k8s/setup.py @@ -23,7 +23,7 @@ from setuptools import setup setup( name='k8splugin', description='Cloudify plugin for containerized components deployed using Kubernetes', - version="1.0.1", + version="1.1.0", author='J. F. Lucas, Michael Hwang, Tommy Carpenter', packages=['k8splugin','k8sclient','msb','configure'], zip_safe=False, -- cgit 1.2.3-korg