Skip to content

Commit 861c2db

Browse files
committed
Allow passing kwargs and fix broken tests
1 parent 5237722 commit 861c2db

File tree

3 files changed

+89
-49
lines changed

3 files changed

+89
-49
lines changed

examples/create_deployment_from_yaml.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ def main():
2424
# utility. If no argument provided, the config will be loaded from
2525
# default location.
2626
config.load_kube_config()
27-
k8s_client = utils.create_from_yaml("nginx-deployment.yaml")
28-
k8s_client
27+
k8s_api = utils.create_from_yaml("nginx-deployment.yaml")
2928

3029
if __name__ == '__main__':
3130
main()

kubernetes/e2e_test/test_utils.py

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,55 +24,63 @@ def setUpClass(cls):
2424
cls.config = base.get_e2e_configuration()
2525

2626
def test_app_yaml(self):
27-
k8s_client = utils.create_from_yaml("test_yaml/app.yaml")
27+
k8s_api = utils.create_from_yaml(
28+
"kubernetes/e2e_test/test_yaml/app.yaml",
29+
configuration=self.config)
2830
self.assertEqual("apps/v1",
29-
k8s_client.get_api_resources().group_version)
30-
deployments = k8s_client.get_namespaced_deployment(
31+
k8s_api.get_api_resources().group_version)
32+
deployments = k8s_api.list_namespaced_deployment(
3133
namespace="default").items
32-
deployment_name = deployments[0].metadata.name
33-
self.assertEqual("nginx-deployment-app", deployment_name)
34-
resp = k8s_client.delete_namespaced_deployment(
35-
name=deployment_name, namespace="default",
36-
body=client.V1DeleteOptions(
37-
propagation_policy="Foreground",
38-
grace_period_seconds=1))
34+
deployment_name = []
35+
for item in deployments:
36+
deployment_name.append(item.metadata.name)
37+
self.assertIn("nginx-deployment-app", deployment_name)
38+
resp = k8s_api.delete_namespaced_deployment(
39+
name="nginx-deployment-app", namespace="default",
40+
body={})
3941

4042
def test_extension_yaml(self):
41-
k8s_client = utils.create_from_yaml("test_yaml/extension.yaml")
43+
k8s_api = utils.create_from_yaml(
44+
"kubernetes/e2e_test/test_yaml/extension.yaml",
45+
configuration=self.config)
4246
self.assertEqual("extensions/v1beta1",
43-
k8s_client.get_api_resources().group_version)
44-
deployments = k8s_client.get_namespaced_deployment(
47+
k8s_api.get_api_resources().group_version)
48+
deployments = k8s_api.list_namespaced_deployment(
4549
namespace="default").items
46-
deployment_name = deployments[0].metadata.name
47-
self.assertEqual("nginx-deployment", deployment_name)
48-
resp = k8s_client.delete_namespaced_deployment(
49-
name=deployment_name, namespace="default",
50-
body=client.V1DeleteOptions(
51-
propagation_policy="Foreground",
52-
grace_period_seconds=1))
50+
deployment_name = []
51+
for item in deployments:
52+
deployment_name.append(item.metadata.name)
53+
self.assertIn("nginx-deployment", deployment_name)
54+
resp = k8s_api.delete_namespaced_deployment(
55+
name="nginx-deployment", namespace="default",
56+
body={})
5357

5458
def test_core_pod_yaml(self):
55-
k8s_client = utils.create_from_yaml("test_yaml/core-pod.yaml")
59+
k8s_api = utils.create_from_yaml(
60+
"kubernetes/e2e_test/test_yaml/core-pod.yaml",
61+
configuration=self.config)
5662
self.assertEqual("v1",
57-
k8s_client.get_api_resources().group_version)
58-
pods = k8s_client.list_namespaced_pod(namespace="default").items
59-
pod_name = pods[0].metadata.name
60-
self.assertEqual("myapp-pod", pod_name)
61-
resp = k8s_client.delete_namespaced_pod(
62-
name=pod_name, namespace="default",
63-
body=client.V1DeleteOptions(
64-
propagation_policy="Foreground",
65-
grace_period_seconds=1))
63+
k8s_api.get_api_resources().group_version)
64+
pods = k8s_api.list_namespaced_pod(namespace="default").items
65+
pod_name = []
66+
for item in pods:
67+
pod_name.append(item.metadata.name)
68+
self.assertIn("myapp-pod", pod_name)
69+
resp = k8s_api.delete_namespaced_pod(
70+
name="myapp-pod", namespace="default",
71+
body={})
6672

6773
def test_core_service_yaml(self):
68-
k8s_client = utils.create_from_yaml("test_yaml/core-service.yaml")
74+
k8s_api = utils.create_from_yaml(
75+
"kubernetes/e2e_test/test_yaml/core-service.yaml",
76+
configuration=self.config)
6977
self.assertEqual("v1",
70-
k8s_client.get_api_resources().group_version)
71-
svcs = k8s_client.list_namespaced_service(namespace="default").items
72-
svc_name = svcs[1].metadata.name
73-
self.assertEqual("my-service", svc_name)
74-
resp = k8s_client.delete_namespaced_pod(
75-
name=svc_name, namespace="default",
76-
body=client.V1DeleteOptions(
77-
propagation_policy="Foreground",
78-
grace_period_seconds=1))
78+
k8s_api.get_api_resources().group_version)
79+
svcs = k8s_api.list_namespaced_service(namespace="default").items
80+
svc_name = []
81+
for item in svcs:
82+
svc_name.append(item.metadata.name)
83+
self.assertIn("my-service", svc_name)
84+
resp = k8s_api.delete_namespaced_service(
85+
name="my-service", namespace="default",
86+
body={})

kubernetes/utils/create_from_yaml.py

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,59 @@
1515
from os import path
1616
import sys
1717

18+
from six import iteritems
19+
1820
import yaml
1921

2022
from kubernetes import client
2123

22-
def create_from_yaml(yaml_file):
24+
def create_from_yaml(yaml_file, verbose=0, **kwargs):
25+
"""
26+
Perform an action from a yaml file.
27+
28+
Available parameters for generating the client:
29+
:param configuration: Configuration for the client.
30+
:param host: The base path for the server to call.
31+
:param header_name: a header to pass when making calls to the API.
32+
:param header_value: a header value to pass when making calls to the API.
33+
34+
Available parameters for performing the subsequent action:
35+
:param async_req bool
36+
:param bool include_uninitialized: If true, partially initialized resources are included in the response.
37+
:param str pretty: If 'true', then the output is pretty printed.
38+
:param str dry_run: When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed
39+
"""
40+
41+
client_params = ["configuration", "host", "header_name", "header_value"]
42+
action_params = ["async_req", "include_unitialized", "pretty", "dry_run",
43+
'_return_http_data_only', '_preload_content', '_request_timeout']
44+
client_args = {}
45+
action_args = {}
46+
params = locals()
47+
for key, val in iteritems(params["kwargs"]):
48+
if key in client_params:
49+
client_args[key] = val
50+
elif key in action_params:
51+
action_args[key] = val
52+
53+
k8s_client = client.api_client.ApiClient(**client_args)
2354
with open(path.abspath(yaml_file)) as f:
2455
dep = yaml.load(f)
2556
api_type, _, api_version = dep["apiVersion"].partition("/")
2657
if api_version == "":
2758
api_version = api_type
2859
api_type = "core"
29-
k8s_client = getattr(client, "%s%sApi" % (
30-
api_type.capitalize(), api_version.capitalize()))()
60+
k8s_api = getattr(client, "%s%sApi" % (
61+
api_type.capitalize(), api_version.capitalize()))(
62+
k8s_client)
3163
action_type = dep["kind"]
3264
if "namespace" in dep["metadata"]:
3365
dep_namespace = dep["metadata"]["namespace"]
3466
else:
3567
dep_namespace = "default"
36-
resp = getattr(k8s_client, "create_namespaced_%s" % action_type.lower())(
37-
body=dep, namespace=dep_namespace)
38-
print("Deployment created. status='%s'" % str(resp.status))
39-
return k8s_client
68+
resp = getattr(k8s_api, "create_namespaced_%s" % action_type.lower())(
69+
body=dep, namespace=dep_namespace, **action_args)
70+
if verbose:
71+
print("Deployment created. status='%s'" % str(resp.status))
72+
return k8s_api
4073

0 commit comments

Comments
 (0)