Merge "UDP_Replay: enable collectd KPIs"
[yardstick.git] / yardstick / common / kubernetes_utils.py
1 ##############################################################################
2 # Copyright (c) 2017 Huawei Technologies Co.,Ltd.
3 #
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 ##############################################################################
9 import logging
10
11 from kubernetes import client
12 from kubernetes import config
13 from kubernetes.client.rest import ApiException
14
15 from yardstick.common import constants as consts
16
17 LOG = logging.getLogger(__name__)
18 LOG.setLevel(logging.DEBUG)
19
20
21 def get_core_api():     # pragma: no cover
22     try:
23         config.load_kube_config(config_file=consts.K8S_CONF_FILE)
24     except IOError:
25         LOG.exception('config file not found')
26         raise
27
28     return client.CoreV1Api()
29
30
31 def create_replication_controller(template,
32                                   namespace='default',
33                                   wait=False,
34                                   **kwargs):    # pragma: no cover
35
36     core_v1_api = get_core_api()
37     try:
38         core_v1_api.create_namespaced_replication_controller(namespace,
39                                                              template,
40                                                              **kwargs)
41     except ApiException:
42         LOG.exception('Create replication controller failed')
43         raise
44
45
46 def delete_replication_controller(name,
47                                   namespace='default',
48                                   wait=False,
49                                   **kwargs):    # pragma: no cover
50
51     core_v1_api = get_core_api()
52     body = kwargs.get('body', client.V1DeleteOptions())
53     kwargs.pop('body', None)
54     try:
55         core_v1_api.delete_namespaced_replication_controller(name,
56                                                              namespace,
57                                                              body,
58                                                              **kwargs)
59     except ApiException:
60         LOG.exception('Delete replication controller failed')
61         raise
62
63
64 def delete_pod(name,
65                namespace='default',
66                wait=False,
67                **kwargs):    # pragma: no cover
68
69     core_v1_api = get_core_api()
70     body = kwargs.get('body', client.V1DeleteOptions())
71     kwargs.pop('body', None)
72     try:
73         core_v1_api.delete_namespaced_pod(name,
74                                           namespace,
75                                           body,
76                                           **kwargs)
77     except ApiException:
78         LOG.exception('Delete pod failed')
79         raise
80
81
82 def read_pod(name,
83              namespace='default',
84              **kwargs):  # pragma: no cover
85     core_v1_api = get_core_api()
86     try:
87         resp = core_v1_api.read_namespaced_pod(name, namespace, **kwargs)
88     except ApiException:
89         LOG.exception('Read pod failed')
90         raise
91     else:
92         return resp
93
94
95 def read_pod_status(name, namespace='default', **kwargs):   # pragma: no cover
96     return read_pod(name).status.phase
97
98
99 def create_config_map(name,
100                       data,
101                       namespace='default',
102                       wait=False,
103                       **kwargs):   # pragma: no cover
104     core_v1_api = get_core_api()
105     metadata = client.V1ObjectMeta(name=name)
106     body = client.V1ConfigMap(data=data, metadata=metadata)
107     try:
108         core_v1_api.create_namespaced_config_map(namespace, body, **kwargs)
109     except ApiException:
110         LOG.exception('Create config map failed')
111         raise
112
113
114 def delete_config_map(name,
115                       namespace='default',
116                       wait=False,
117                       **kwargs):     # pragma: no cover
118     core_v1_api = get_core_api()
119     body = kwargs.get('body', client.V1DeleteOptions())
120     kwargs.pop('body', None)
121     try:
122         core_v1_api.delete_namespaced_config_map(name,
123                                                  namespace,
124                                                  body,
125                                                  **kwargs)
126     except ApiException:
127         LOG.exception('Delete config map failed')
128         raise
129
130
131 def get_pod_list(namespace='default'):      # pragma: no cover
132     core_v1_api = get_core_api()
133     try:
134         return core_v1_api.list_namespaced_pod(namespace=namespace)
135     except ApiException:
136         LOG.exception('Get pod list failed')
137         raise