Exemple #1
0
    def _RequestUrl(self, url, verb, data=None):
        '''Request a url.
		
			Args:
			 url:
			 	The web location we want to retrieve.
			 verb:
			 	POST, GET, PUT, DELETE.
			 data:
			 	a dict of (str, unicode) key/value pairs.

			Returns:
			 A JSON object.
		'''
        if verb == 'POST':
            try:
                return requests.post(url,
                                     data=data,
                                     auth=self.__auth,
                                     timeout=self._timeout,
                                     verify=False)
            except requests.RequestException as e:
                raise KubernetesError(str(e))
        if verb == 'GET':
            try:
                return requests.get(url,
                                    auth=self.__auth,
                                    timeout=self._timeout,
                                    verify=False)
            except requests.RequestException as e:
                raise KubernetesError(str(e))
        if verb == 'PUT':
            try:
                return requests.put(url,
                                    data=data,
                                    auth=self.__auth,
                                    timeout=self._timeout,
                                    verify=False)
            except requests.RequestException as e:
                raise KubernetesError(str(e))
        if verb == 'DELETE':
            try:
                return requests.get(url,
                                    auth=self.__auth,
                                    timeout=self._timeout,
                                    verify=False)
            except requests.RequestException as e:
                raise KubernetesError(str(e))
        return 0
    def DeletePods(self, name, namespace='default'):
        '''Delete a new Pod'''

        url = ('%(base_url)s/namespaces/%(ns)s/pods/%(name)s' % {
            "base_url": self.base_url,
            "ns": namespace,
            "name": name
        })
        json = self._RequestUrl(url, 'DELETE')
        if json.status_code not in [200, 404]:
            raise KubernetesError({
                'message':
                'parsing error [' + simplejson.dumps(json.content) + ']'
            })
        if json.status_code == 404:
            raise KubernetesError({
                'message':
                'can not find the pod <{0}> in namespace <{1}>'.format(
                    name, namespace)
            })
    def CreateReplicationController(self, data, namespace='default'):
        '''Create a new ReplicationController'''

        url = ('%(base_url)s/namespaces/%(ns)s/replicationcontrollers' % {
            "base_url": self.base_url,
            "ns": namespace
        })
        json = self._RequestUrl(url, 'POST', data)
        if json.status_code is not 201:
            raise KubernetesError(json.json()['message'], json.status_code)
        result = self._ParseAndCheckKubernetes(json.content)
        return ReplicationController.NewFromJsonDict(result)
Exemple #4
0
    def DeleteService(self, name, namespace='default'):
        '''Delete a new Service'''

        url = ('%(base_url)s/namespaces/%(ns)s/services/%(name)s' % {
            "base_url": self.base_url,
            "ns": namespace,
            "name": name
        })
        json = self._RequestUrl(url, 'DELETE')
        if json.status_code not in [200, 404]:
            raise KubernetesError({
                'message':
                'parsing error [' + simplejson.dumps(json.content) + ']'
            })
    def CreatePod(self, data, namespace='default'):
        '''Create a new Pod'''

        url = ('%(base_url)s/namespaces/%(ns)s/pods' % {
            "base_url": self.base_url,
            "ns": namespace
        })
        json = self._RequestUrl(url, 'PUT', data)
        if json.status_code is not 201:
            raise KubernetesError({
                'message':
                'parsing error [' + simplejson.dumps(json.content) + ']'
            })
        result = self._ParseAndCheckKubernetes(json.content)
        return Pod.NewFromJsonDict(result)
    def SetNodeSchedulable(self, node_name, is_scheduable=True):
        ''' Make the node as unscheduable '''

        # Make and send requests
        url = ('%(base_url)s/nodes/%(node_name)s' % {
            "base_url": self.base_url,
            "node_name": node_name
        })

        if is_scheduable:
            data = '{"spec":{"unschedulable":false}}'
        else:
            data = '{"spec":{"unschedulable":true}}'

        json = self._RequestUrl(url, 'PATCH', data)
        if json.status_code is not 200:
            raise KubernetesError({
                'message':
                'parsing error [' + simplejson.dumps(json.content) + ']'
            })
        result = self._ParseAndCheckKubernetes(json.content)
        return Pod.NewFromJsonDict(result)
Exemple #7
0
    def __init__(self,
                 user_id=None,
                 user_password=None,
                 input_encoding=None,
                 request_headers=None,
                 cache=DEFAULT_CACHE,
                 base_url=None,
                 debugHTTP=None,
                 timeout=None):
        '''Instantiate a new kubernetes.Api object

		Args:
		  user_id:
		    Your agent user id
		  user_password
		    Your agent user password
		  input_encoding:
		  	The encoding used to encode input strings. [Optional]
		  request_headers
		  	A dictionary of additional HTTP request headers. [Optional]
		  cache:
		  	The cache instance to use. Defaults to DEFAULT_CACHE.
		  	Use None to disable caching. [Optional]
		  base_url:
		    The base URL to use to contact the kubernetes API.
		    Defaults to https://10.245.1.2/api/v1beta2
		  debugHTTP:
		  	Set to True to enable debug output from urllib2 when performing
			any HTTP requests.  Defaults to False. [Optional]
		  timeout:
			Set timeout (in seconds) of the http/https requests. If None the
			requests lib default will be used.  Defaults to None. [Optional]
		'''
        self.SetCache(cache)
        self._urllib = urllib2
        self._input_encoding = input_encoding
        self._debugHTTP = debugHTTP
        self._timeout = timeout

        self._InitializeRequestHeaders(request_headers)
        self._InitializeUserAgent()
        self._InitializeDefaultParameters()

        if base_url is None:
            self.base_url = 'https://10.245.1.2/api/v1beta2'
        else:
            self.base_url = base_url

        if user_id is None or user_password is None:
            print >> sys.stderr, 'Kubernetes requires user_id, user_password.'

            raise KubernetesError(
                {'message': "Kubernetes requires user_id and user_password"})

        self.SetCredentials(user_id, user_password)

        if debugHTTP:
            import logging
            import httplib
            httplib.HTTPConnection.debuglevel = 1

            logging.basicConfig()
            logging.getLogger().setLevel(logging.DEBUG)
            requests_log = logging.getLogger("requests.packages.urllib3")
            requests_log.setLevel(logging.DEBUG)
            requests_log.propagate = True