From 87061f3fc1cc9aa38fe0114ec6c71265a8fba830 Mon Sep 17 00:00:00 2001 From: Henning Jacobs Date: Sun, 3 Mar 2019 18:17:10 +0100 Subject: [PATCH] #9 add PodDisruptionBudget --- pykube/__init__.py | 1 + pykube/config.py | 4 +++- pykube/objects.py | 7 +++++++ tests/test_config.py | 31 +++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pykube/__init__.py b/pykube/__init__.py index 9cb3d47..800f413 100644 --- a/pykube/__init__.py +++ b/pykube/__init__.py @@ -24,6 +24,7 @@ PersistentVolume, PersistentVolumeClaim, Pod, + PodDisruptionBudget, PodSecurityPolicy, ReplicationController, ReplicaSet, diff --git a/pykube/config.py b/pykube/config.py index ad17355..ab1fc1b 100644 --- a/pykube/config.py +++ b/pykube/config.py @@ -60,13 +60,15 @@ def from_service_account(cls, path="/var/run/secrets/kubernetes.io/serviceaccoun return self @classmethod - def from_file(cls, filename, **kwargs): + def from_file(cls, filename=None, **kwargs): """ Creates an instance of the KubeConfig class from a kubeconfig file. :Parameters: - `filename`: The full path to the configuration file """ + if not filename: + filename = os.getenv('KUBECONFIG', '~/.kube/config') filename = os.path.expanduser(filename) if not os.path.isfile(filename): raise exceptions.PyKubeError("Configuration file {} not found".format(filename)) diff --git a/pykube/objects.py b/pykube/objects.py index f977b63..ca2a121 100644 --- a/pykube/objects.py +++ b/pykube/objects.py @@ -464,3 +464,10 @@ class PodSecurityPolicy(APIObject): version = "extensions/v1beta1" endpoint = "podsecuritypolicies" kind = "PodSecurityPolicy" + + +class PodDisruptionBudget(APIObject): + + version = "policy/v1beta1" + endpoint = "poddisruptionbudgets" + kind = "PodDisruptionBudget" diff --git a/tests/test_config.py b/tests/test_config.py index f5b9f0a..c628329 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -6,6 +6,7 @@ import pytest from pathlib import Path +from unittest.mock import MagicMock from pykube import config, exceptions @@ -46,6 +47,36 @@ def test_from_url(): assert 'users' not in cfg.doc +@pytest.fixture +def kubeconfig(tmpdir): + kubeconfig = tmpdir.join('kubeconfig') + kubeconfig.write(''' +apiVersion: v1 +clusters: +- cluster: {server: 'https://localhost:9443'} + name: test +contexts: +- context: {cluster: test, user: test} + name: test +current-context: test +kind: Config +preferences: {} +users: +- name: test + user: {token: testtoken} + ''') + return kubeconfig + + +def test_from_default_kubeconfig(monkeypatch, kubeconfig): + mock = MagicMock() + mock.return_value = str(kubeconfig) + monkeypatch.setattr('os.path.expanduser', mock) + cfg = config.KubeConfig.from_file() + mock.assert_called_with('~/.kube/config') + assert cfg.doc['clusters'][0]['cluster'] == {'server': 'https://localhost:9443'} + + class TestConfig(TestCase): def setUp(self):