1 ##############################################################################
2 # Copyright (c) 2017 Huawei Technologies Co.,Ltd.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
11 from kubernetes import client
12 from kubernetes import config
13 from kubernetes.client.rest import ApiException
15 from yardstick.common import constants as consts
17 LOG = logging.getLogger(__name__)
18 LOG.setLevel(logging.DEBUG)
21 def get_core_api(): # pragma: no cover
23 config.load_kube_config(config_file=consts.K8S_CONF_FILE)
25 LOG.exception('config file not found')
28 return client.CoreV1Api()
31 def get_node_list(**kwargs): # pragma: no cover
32 core_v1_api = get_core_api()
34 return core_v1_api.list_node(**kwargs)
36 LOG.exception('Get node list failed')
40 def create_service(template,
43 **kwargs): # pragma: no cover
44 core_v1_api = get_core_api()
45 metadata = client.V1ObjectMeta(**template.get('metadata', {}))
47 ports = [client.V1ServicePort(**port) for port in
48 template.get('spec', {}).get('ports', [])]
49 template['spec']['ports'] = ports
50 spec = client.V1ServiceSpec(**template.get('spec', {}))
52 service = client.V1Service(metadata=metadata, spec=spec)
55 core_v1_api.create_namespaced_service('default', service)
57 LOG.exception('Create Service failed')
61 def delete_service(name,
63 **kwargs): # pragma: no cover
64 core_v1_api = get_core_api()
66 core_v1_api.delete_namespaced_service(name, namespace, **kwargs)
68 LOG.exception('Delete Service failed')
71 def get_service_list(namespace='default', **kwargs):
72 core_v1_api = get_core_api()
74 return core_v1_api.list_namespaced_service(namespace, **kwargs)
76 LOG.exception('Get Service list failed')
80 def get_service_by_name(name): # pragma: no cover
81 service_list = get_service_list()
82 return next((s.spec for s in service_list.items if s.metadata.name == name), None)
85 def create_replication_controller(template,
88 **kwargs): # pragma: no cover
90 core_v1_api = get_core_api()
92 core_v1_api.create_namespaced_replication_controller(namespace,
96 LOG.exception('Create replication controller failed')
100 def delete_replication_controller(name,
103 **kwargs): # pragma: no cover
105 core_v1_api = get_core_api()
106 body = kwargs.get('body', client.V1DeleteOptions())
107 kwargs.pop('body', None)
109 core_v1_api.delete_namespaced_replication_controller(name,
114 LOG.exception('Delete replication controller failed')
121 **kwargs): # pragma: no cover
123 core_v1_api = get_core_api()
124 body = kwargs.get('body', client.V1DeleteOptions())
125 kwargs.pop('body', None)
127 core_v1_api.delete_namespaced_pod(name,
132 LOG.exception('Delete pod failed')
138 **kwargs): # pragma: no cover
139 core_v1_api = get_core_api()
141 resp = core_v1_api.read_namespaced_pod(name, namespace, **kwargs)
143 LOG.exception('Read pod failed')
149 def read_pod_status(name, namespace='default', **kwargs): # pragma: no cover
150 return read_pod(name).status.phase
153 def create_config_map(name,
157 **kwargs): # pragma: no cover
158 core_v1_api = get_core_api()
159 metadata = client.V1ObjectMeta(name=name)
160 body = client.V1ConfigMap(data=data, metadata=metadata)
162 core_v1_api.create_namespaced_config_map(namespace, body, **kwargs)
164 LOG.exception('Create config map failed')
168 def delete_config_map(name,
171 **kwargs): # pragma: no cover
172 core_v1_api = get_core_api()
173 body = kwargs.get('body', client.V1DeleteOptions())
174 kwargs.pop('body', None)
176 core_v1_api.delete_namespaced_config_map(name,
181 LOG.exception('Delete config map failed')
185 def get_pod_list(namespace='default'): # pragma: no cover
186 core_v1_api = get_core_api()
188 return core_v1_api.list_namespaced_pod(namespace=namespace)
190 LOG.exception('Get pod list failed')
194 def get_pod_by_name(name): # pragma: no cover
195 pod_list = get_pod_list()
196 return next((n for n in pod_list.items if n.metadata.name.startswith(name)), None)