Skip to content

Commit 6eb11fd

Browse files
author
Gauvain Pocentek
committed
Implement runners global API
1 parent 52c8825 commit 6eb11fd

File tree

5 files changed

+99
-0
lines changed

5 files changed

+99
-0
lines changed

docs/api-objects.rst

+1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ API objects manipulation
66

77
gl_objects/branches
88
gl_objects/projects
9+
gl_objects/runners
910
gl_objects/users

docs/gl_objects/runners.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# list
2+
# List owned runners
3+
runners = gl.runners.list()
4+
# List all runners, using a filter
5+
runners = gl.runners.all(scope='paused')
6+
# end list
7+
8+
# get
9+
runner = gl.runners.get(runner_id)
10+
# end get
11+
12+
# update
13+
runner = gl.runners.get(runner_id)
14+
runner.tag_list.append('new_tag')
15+
runner.save()
16+
# end update
17+
18+
# delete
19+
gl.runners.delete(runner_id)
20+
# or
21+
runner.delete()
22+
# end delete

docs/gl_objects/runners.rst

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#######
2+
Runners
3+
#######
4+
5+
Global runners
6+
==============
7+
8+
Use :class:`~gitlab.objects.Runner` objects to manipulate runners. The
9+
:attr:`gitlab.Gitlab.runners` manager object provides helper functions.
10+
11+
Examples
12+
--------
13+
14+
Use the ``list()`` and ``all()`` methods to list runners.
15+
16+
The ``all()`` method accepts a ``scope`` parameter to filter the list. Allowed
17+
values for this parameter are ``specific``, ``shared``, ``active``, ``paused``
18+
and ``online``.
19+
20+
.. note::
21+
22+
The returned objects hold minimal information about the runners. Use the
23+
``get()`` method to retrieve detail about a runner.
24+
25+
.. literalinclude:: runners.py
26+
:start-after: # list
27+
:end-before: # end list
28+
29+
Get a runner's detail:
30+
31+
.. literalinclude:: runners.py
32+
:start-after: # get
33+
:end-before: # end get
34+
35+
Update a runner:
36+
37+
.. literalinclude:: runners.py
38+
:start-after: # update
39+
:end-before: # end update
40+
41+
Remove a runner:
42+
43+
.. literalinclude:: runners.py
44+
:start-after: # delete
45+
:end-before: # end delete

gitlab/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class Gitlab(object):
109109
snippets
110110
user_projects (UserProjectManager): Manager for GitLab projects users
111111
projects (ProjectManager): Manager for GitLab projects
112+
runners (RunnerManager): Manager for the CI runners
112113
settings (ApplicationSettingsManager): manager for the Gitlab settings
113114
team_members (TeamMemberManager): Manager for GitLab teams members
114115
team_projects (TeamProjectManager): Manager for GitLab teams projects
@@ -169,6 +170,7 @@ def __init__(self, url, private_token=None, email=None, password=None,
169170
self.project_snippets = ProjectSnippetManager(self)
170171
self.user_projects = UserProjectManager(self)
171172
self.projects = ProjectManager(self)
173+
self.runners = RunnerManager(self)
172174
self.team_members = TeamMemberManager(self)
173175
self.team_projects = TeamProjectManager(self)
174176
self.teams = TeamManager(self)

gitlab/objects.py

+29
Original file line numberDiff line numberDiff line change
@@ -1965,6 +1965,35 @@ def share(self, group_id, group_access, **kwargs):
19651965
raise_error_from_response(r, GitlabCreateError, 201)
19661966

19671967

1968+
class Runner(GitlabObject):
1969+
_url = '/runners'
1970+
canCreate = False
1971+
optionalUpdateAttrs = ['description', 'active', 'tag_list']
1972+
1973+
1974+
class RunnerManager(BaseManager):
1975+
obj_cls = Runner
1976+
1977+
def all(self, scope=None, **kwargs):
1978+
"""List all the runners.
1979+
1980+
Args:
1981+
scope (str): The scope of runners to show, one of: specific,
1982+
shared, active, paused, online
1983+
1984+
Returns:
1985+
list(Runner): a list of runners matching the scope.
1986+
1987+
Raises:
1988+
GitlabConnectionError: If the server cannot be reached.
1989+
GitlabListError; If the resource cannot be found
1990+
"""
1991+
url = '/runners/all'
1992+
if scope is not None:
1993+
url += '?scope=' + scope
1994+
return self.gitlab._raw_list(url, self.obj_cls, **kwargs)
1995+
1996+
19681997
class TeamMember(GitlabObject):
19691998
_url = '/user_teams/%(team_id)s/members'
19701999
canUpdate = False

0 commit comments

Comments
 (0)