예제 #1
0
    def create_node(self,
                    name,
                    num_executors=2,
                    node_description=None,
                    remote_fs='/var/lib/jenkins',
                    labels=None,
                    exclusive=False):
        """
        Create a new slave node by name.

        :param name: fqdn of slave, str
        :param num_executors: number of executors, int
        :param node_description: a freetext field describing the node
        :param remote_fs: jenkins path, str
        :param labels: labels to associate with slave, str
        :param exclusive: tied to specific job, boolean
        :return: node obj
        """
        NODE_TYPE = 'hudson.slaves.DumbSlave$DescriptorImpl'
        MODE = 'NORMAL'
        if self.has_node(name):
            return Node(nodename=name,
                        baseurl=self.get_node_url(nodename=name),
                        jenkins_obj=self)
        if exclusive:
            MODE = 'EXCLUSIVE'
        params = {
            'name':
            name,
            'type':
            NODE_TYPE,
            'json':
            json.dumps({
                'name': name,
                'nodeDescription': node_description,
                'numExecutors': num_executors,
                'remoteFS': remote_fs,
                'labelString': labels,
                'mode': MODE,
                'type': NODE_TYPE,
                'retentionStrategy': {
                    'stapler-class': 'hudson.slaves.RetentionStrategy$Always'
                },
                'nodeProperties': {
                    'stapler-class-bag': 'true'
                },
                'launcher': {
                    'stapler-class': 'hudson.slaves.JNLPLauncher'
                }
            })
        }
        url = self.get_node_url(
        ) + "doCreateItem?%s" % urllib.urlencode(params)
        self.requester.get_and_confirm_status(url)

        return Node(nodename=name,
                    baseurl=self.get_node_url(nodename=name),
                    jenkins_obj=self)
예제 #2
0
    def setUp(self, _poll):
        _poll.return_value = self.DATA

        # def __init__(self, baseurl, nodename, jenkins_obj):

        self.J = mock.MagicMock()  # Jenkins object
        self.n = Node('http://', 'bobnit', self.J)
예제 #3
0
파일: nodes.py 프로젝트: yori89/jenkinsapi
 def iteritems(self):
     for item in self._data['computer']:
         nodename = item['displayName']
         if nodename.lower() == 'master':
             nodeurl = '%s/(%s)' % (self.baseurl, nodename)
         else:
             nodeurl = '%s/%s' % (self.baseurl, nodename)
         yield item['displayName'], Node(nodeurl, nodename, self.jenkins)
예제 #4
0
def node(monkeypatch, mocker):
    def fake_poll(cls, tree=None):  # pylint: disable=unused-argument
        return DATA

    monkeypatch.setattr(Node, '_poll', fake_poll)
    jenkins = mocker.MagicMock()

    return Node(jenkins, 'http://foo:8080', 'bobnit', {})
예제 #5
0
    def __getitem__(self, nodename):
        if nodename in self:
            if nodename.lower() == 'master':
                nodeurl = '%s/(%s)' % (self.baseurl, nodename)
            else:
                nodeurl = '%s/%s' % (self.baseurl, nodename)
            return Node(self.jenkins, nodeurl, nodename, node_dict={})

        raise UnknownNode(nodename)
예제 #6
0
 def _make_node(self, nodename):
     """
     Creates an instance of Node for the given nodename.
     This function assumes the returned node exists.
     """
     if nodename.lower() == 'master':
         nodeurl = '%s/(%s)' % (self.baseurl, nodename)
     else:
         nodeurl = '%s/%s' % (self.baseurl, nodename)
     return Node(self.jenkins, nodeurl, nodename, node_dict={})
예제 #7
0
 def iteritems(self):
     for item in self._data['computer']:
         nodename = item['displayName']
         if nodename.lower() == 'master':
             nodeurl = '%s/(%s)' % (self.baseurl, nodename)
         else:
             nodeurl = '%s/%s' % (self.baseurl, nodename)
         try:
             yield item['displayName'], Node(self.jenkins, nodeurl,
                                             nodename, node_dict={})
         except Exception:
             raise JenkinsAPIException('Unable to iterate nodes')
예제 #8
0
 def iteritems(self):
     for item in self._data['computer']:
         nodename = item['displayName']
         if nodename.lower() == 'master':
             nodeurl = '%s/(%s)' % (self.baseurl, nodename)
         else:
             nodeurl = '%s/%s' % (self.baseurl, nodename)
         try:
             yield item['displayName'], Node(nodeurl, nodename,
                                             self.jenkins)
         except Exception:
             import ipdb
             ipdb.set_trace()
예제 #9
0
    def create_node(self, name, node_dict):
        """
        Create a new slave node

        :param str name: name of slave
        :param dict node_dict: node dict (See Node class)
        :return: node obj
        """
        if name in self:
            return self[name]

        node = Node(jenkins_obj=self.jenkins, baseurl=None, nodename=name,
                    node_dict=node_dict, poll=False)

        url = ('%s/computer/doCreateItem?%s'
               % (self.jenkins.baseurl,
                  urlencode(node.get_node_attributes())))
        data = {'json': urlencode(node.get_node_attributes())}
        self.jenkins.requester.post_and_confirm_status(url, data=data)
        self.poll()
        return self[name]
예제 #10
0
    def create_node(self,
                    name,
                    num_executors=2,
                    node_description=None,
                    remote_fs='/var/lib/jenkins',
                    labels=None,
                    exclusive=False):
        """
        Create a new slave node by name.

        :param name: fqdn of slave, str
        :param num_executors: number of executors, int
        :param node_description: a freetext field describing the node
        :param remote_fs: jenkins path, str
        :param labels: labels to associate with slave, str
        :param exclusive: tied to specific job, boolean
        :return: node obj
        """
        NODE_TYPE = 'jenkins.slaves.DumbSlave$DescriptorImpl'
        MODE = 'NORMAL'
        if self.has_node(name):
            return Node(nodename=name,
                        baseurl=self.get_node_url(nodename=name),
                        jenkins_obj=self)
        if exclusive:
            MODE = 'EXCLUSIVE'
        params = {
            'name':
            name,
            'type':
            NODE_TYPE,
            'json':
            json.dumps({
                'name': name,
                'nodeDescription': node_description,
                'numExecutors': num_executors,
                'remoteFS': remote_fs,
                'labelString': labels,
                'mode': MODE,
                'type': NODE_TYPE,
                'retentionStrategy': {
                    'stapler-class': 'jenkins.slaves.RetentionStrategy$Always'
                },
                'nodeProperties': {
                    'stapler-class-bag': 'true'
                },
                'launcher': {
                    'stapler-class': 'jenkins.slaves.JNLPLauncher'
                }
            })
        }
        url = "%(nodeurl)s/doCreateItem?%(params)s" % {
            'nodeurl': self.get_node_url(),
            'params': urllib.urlencode(params)
        }
        print url
        fn_urlopen = self.get_jenkins_obj().get_opener()
        try:
            fn_urlopen(url).read()
        except urllib2.HTTPError, e:
            log.debug("Error reading %s" % url)
            log.exception(e)
            raise
예제 #11
0
 def get_node(self, nodename):
     """Get a node object for a specific node"""
     node_url = self.python_api_url(self.get_node_url(nodename))
     return Node(node_url, nodename, jenkins_obj=self)
예제 #12
0
                'remoteFS': remote_fs,
                'labelString': labels,
                'mode': MODE,
                'type': NODE_TYPE,
                'retentionStrategy': {
                    'stapler-class': 'jenkins.slaves.RetentionStrategy$Always'
                },
                'nodeProperties': {
                    'stapler-class-bag': 'true'
                },
                'launcher': {
                    'stapler-class': 'jenkins.slaves.JNLPLauncher'
                }
            })
        }
        url = "%(nodeurl)s/doCreateItem?%(params)s" % {
            'nodeurl': self.get_node_url(),
            'params': urllib.urlencode(params)
        }
        print url
        fn_urlopen = self.get_jenkins_obj().get_opener()
        try:
            fn_urlopen(url).read()
        except urllib2.HTTPError, e:
            log.debug("Error reading %s" % url)
            log.exception(e)
            raise
        return Node(nodename=name,
                    baseurl=self.get_node_url(nodename=name),
                    jenkins_obj=self)