def __init__(self, config): ''' Args: config (obj): Object of the configuration data ''' # The configuration data passed in will be .kube/config data, so process is accordingly. self.api = KubeBase(config) # Check the API url url = self.api.cluster['server'] if not re.match('(?:http|https)://', url): raise KubeOpenshiftError( "OpenShift API URL does not include HTTP or HTTPS") # Gather what end-points we will be using self.k8s_api = urljoin(url, "api/v1/") self.oc_api = urljoin(url, "oapi/v1/") # Test the connection before proceeding self.api.test_connection(self.k8s_api) self.api.test_connection(self.oc_api) # Gather the resource names which will be used for the 'kind' API calls self.oc_api_resources = self.api.get_resources(self.oc_api) # Gather what API groups are available # TODO: refactor this (create function in kubebase.py) self.k8s_api_resources = {} self.k8s_api_resources['v1'] = self.api.get_resources(self.k8s_api) self.k8s_apis = urljoin(url, "apis/") # Gather the group names from which resource names will be derived self.k8s_api_groups = self.api.get_groups(self.k8s_apis) for (name, versions) in self.k8s_api_groups: for version in versions: api = "%s/%s" % (name, version) url = urljoin(self.k8s_apis, api) self.k8s_api_resources[api] = self.api.get_resources(url)
}], "clusters": [{ "cluster": { "server": "http://localhost:8080" }, "name": "dev" }], "apiVersion": "v1", "users": [{ "name": "default", "user": { "token": "foobar" } }] } kubebase = KubeBase(config) def test_get_resources(httpserver): content = '{"kind":"APIResourceList","groupVersion":"v1","resources":[{"name":"bindings","namespaced":true,"kind":"Binding"},{"name":"componentstatuses","namespaced":false,"kind":"ComponentStatus"}]}' httpserver.serve_content(content, code=200, headers=None) kubebase.get_resources(httpserver.url) def test_get_groups(httpserver): content = '{"kind":"APIGroupList","groups":[{"name":"autoscaling","versions":[{"groupVersion":"autoscaling/v1","version":"v1"}],"preferredVersion":{"groupVersion":"autoscaling/v1","version":"v1"},"serverAddressByClientCIDRs":[{"clientCIDR":"0.0.0.0/0","serverAddress":"192.168.1.156:443"}]},{"name":"batch","versions":[{"groupVersion":"batch/v1","version":"v1"}],"preferredVersion":{"groupVersion":"batch/v1","version":"v1"},"serverAddressByClientCIDRs":[{"clientCIDR":"0.0.0.0/0","serverAddress":"192.168.1.156:443"}]},{"name":"extensions","versions":[{"groupVersion":"extensions/v1beta1","version":"v1beta1"}],"preferredVersion":{"groupVersion":"extensions/v1beta1","version":"v1beta1"},"serverAddressByClientCIDRs":[{"clientCIDR":"0.0.0.0/0","serverAddress":"192.168.1.156:443"}]}]}' httpserver.serve_content(content, code=200, headers=None) kubebase.get_groups(httpserver.url) def test_connection(httpserver):