Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kwabena Antwi-Boasiako
slapos
Commits
65136309
Commit
65136309
authored
Jun 15, 2017
by
Tomas Peterka
Committed by
Tomáš Peterka
Jun 20, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[recipe.service] Add recipe for fine-controlled supervisord service
parent
04c27ca1
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
96 additions
and
0 deletions
+96
-0
setup.py
setup.py
+2
-0
slapos/recipe/service.py
slapos/recipe/service.py
+94
-0
No files found.
setup.py
View file @
65136309
...
@@ -173,6 +173,8 @@ setup(name=name,
...
@@ -173,6 +173,8 @@ setup(name=name,
're6stnet.registry = slapos.recipe.re6stnet:Recipe'
,
're6stnet.registry = slapos.recipe.re6stnet:Recipe'
,
'reverseproxy.nginx = slapos.recipe.reverse_proxy_nginx:Recipe'
,
'reverseproxy.nginx = slapos.recipe.reverse_proxy_nginx:Recipe'
,
'seleniumrunner = slapos.recipe.seleniumrunner:Recipe'
,
'seleniumrunner = slapos.recipe.seleniumrunner:Recipe'
,
'service = slapos.recipe.service:Recipe'
,
'service-group = slapos.recipe.service:GroupRecipe'
,
'sheepdogtestbed = slapos.recipe.sheepdogtestbed:SheepDogTestBed'
,
'sheepdogtestbed = slapos.recipe.sheepdogtestbed:SheepDogTestBed'
,
'shell = slapos.recipe.shell:Recipe'
,
'shell = slapos.recipe.shell:Recipe'
,
'shellinabox = slapos.recipe.shellinabox:Recipe'
,
'shellinabox = slapos.recipe.shellinabox:Recipe'
,
...
...
slapos/recipe/service.py
0 → 100644
View file @
65136309
##############################################################################
#
# Copyright (c) 2017 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
"""
Recipe to create a service with more fine-grained control than creating a
wrapper in etc/service.
"""
import
textwrap
import
os
import
os.path
from
slapos.recipe.wrapper
import
Recipe
as
Wrapper
from
slapos.recipe.librecipe
import
GenericBaseRecipe
class
Recipe
(
Wrapper
):
"""Create group and program inside etc/supervisor.d directory."""
def
install
(
self
):
"""Create wrapper but fine-control its execution."""
if
"etc/run"
in
self
.
options
[
'wrapper-path'
]:
raise
ValueError
(
"Service should not be placed into etc/run"
)
if
"etc/service"
in
self
.
options
[
'wrapper-path'
]:
raise
ValueError
(
"Service should not be placed into etc/service"
)
scripts
=
super
(
Recipe
,
self
).
install
()
executable
=
scripts
[
-
1
]
# name was set by the contructor into self.name
priority
=
int
(
self
.
options
.
get
(
"priority"
,
100
))
supervisor_d
=
self
.
options
.
get
(
"supervisor.d"
)
or
os
.
path
.
join
(
self
.
buildout
[
'buildout'
][
'directory'
],
".."
,
"etc"
,
"supervisord.conf.d"
)
if
":"
in
self
.
name
:
raise
ValueError
(
"Service.name must not contain colon!"
)
return
scripts
+
[
self
.
createFile
(
os
.
path
.
join
(
supervisor_d
,
"{}.conf"
.
format
(
self
.
name
)),
textwrap
.
dedent
(
"""
[program:{}]
command = {}
priority = {:d}
"""
.
format
(
self
.
name
,
executable
,
priority
)))]
class
GroupRecipe
(
GenericBaseRecipe
):
"""Create a supervisors' group for programs."""
def
install
(
self
):
"""Create file representing group.
programs must be a string with comma-separated values.
More info: http://supervisord.org/configuration.html#group-x-section-settings
"""
programs
=
self
.
options
[
'programs'
].
replace
(
","
,
" "
).
split
()
priority
=
int
(
self
.
options
.
get
(
'priority'
,
100
))
supervisor_d
=
self
.
options
.
get
(
"supervisor.d"
)
or
os
.
path
.
join
(
self
.
buildout
[
'buildout'
][
'directory'
],
".."
,
"etc"
,
"supervisord.conf.d"
)
return
[
self
.
createFile
(
os
.
path
.
join
(
supervisor_d
,
"{}.conf"
.
format
(
self
.
name
)),
textwrap
.
dedent
(
"""
[group:{}]
programs = {}
priority = {:d}
"""
.
format
(
self
.
name
,
","
.
join
(
programs
),
priority
))
)]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment