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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aurel
slapos
Commits
64dbfa41
Commit
64dbfa41
authored
Apr 26, 2012
by
Cédric de Saint Martin
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'kvm'
parents
55cbfd35
5479d22f
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
176 additions
and
12 deletions
+176
-12
setup.py
setup.py
+2
-0
slapos/recipe/check_url_available/__init__.py
slapos/recipe/check_url_available/__init__.py
+47
-0
slapos/recipe/check_url_available/template/check_url.in
slapos/recipe/check_url_available/template/check_url.in
+16
-0
slapos/recipe/generate_output_if_input_not_null.py
slapos/recipe/generate_output_if_input_not_null.py
+71
-0
slapos/recipe/request.py
slapos/recipe/request.py
+2
-2
software/kvm/instance-kvm.cfg
software/kvm/instance-kvm.cfg
+25
-7
software/kvm/software.cfg
software/kvm/software.cfg
+2
-2
stack/slapos.cfg
stack/slapos.cfg
+11
-1
No files found.
setup.py
View file @
64dbfa41
...
@@ -48,6 +48,7 @@ setup(name=name,
...
@@ -48,6 +48,7 @@ setup(name=name,
'certificate_authority = slapos.recipe.certificate_authority:Recipe'
,
'certificate_authority = slapos.recipe.certificate_authority:Recipe'
,
'certificate_authority.request = slapos.recipe.certificate_authority:Request'
,
'certificate_authority.request = slapos.recipe.certificate_authority:Request'
,
'check_port_listening = slapos.recipe.check_port_listening:Recipe'
,
'check_port_listening = slapos.recipe.check_port_listening:Recipe'
,
'check_url_available = slapos.recipe.check_url_available:Recipe'
,
'cron = slapos.recipe.dcron:Recipe'
,
'cron = slapos.recipe.dcron:Recipe'
,
'cron.d = slapos.recipe.dcron:Part'
,
'cron.d = slapos.recipe.dcron:Part'
,
'davstorage = slapos.recipe.davstorage:Recipe'
,
'davstorage = slapos.recipe.davstorage:Recipe'
,
...
@@ -58,6 +59,7 @@ setup(name=name,
...
@@ -58,6 +59,7 @@ setup(name=name,
'erp5scalabilitytestbed = slapos.recipe.erp5scalabilitytestbed:Recipe'
,
'erp5scalabilitytestbed = slapos.recipe.erp5scalabilitytestbed:Recipe'
,
'equeue = slapos.recipe.equeue:Recipe'
,
'equeue = slapos.recipe.equeue:Recipe'
,
'erp5testnode = slapos.recipe.erp5testnode:Recipe'
,
'erp5testnode = slapos.recipe.erp5testnode:Recipe'
,
'generate_output_if_input_not_null = slapos.recipe.generate_output_if_input_not_null:Recipe'
,
'generate.mac = slapos.recipe.generatemac:Recipe'
,
'generate.mac = slapos.recipe.generatemac:Recipe'
,
'nbdserver = slapos.recipe.nbdserver:Recipe'
,
'nbdserver = slapos.recipe.nbdserver:Recipe'
,
'generic.onetimeupload = slapos.recipe.generic_onetimeupload:Recipe'
,
'generic.onetimeupload = slapos.recipe.generic_onetimeupload:Recipe'
,
...
...
slapos/recipe/check_url_available/__init__.py
0 → 100644
View file @
64dbfa41
##############################################################################
#
# Copyright (c) 2011 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.
#
##############################################################################
from
slapos.recipe.librecipe
import
GenericBaseRecipe
import
sys
class
Recipe
(
GenericBaseRecipe
):
"""
Create script that will check if "url" is available (e.g page answers 200 OK).
"""
def
install
(
self
):
config
=
{
'url'
:
self
.
options
[
'url'
],
'shell_path'
:
self
.
options
[
'dash_path'
],
}
# XXX-Cedric in this script, curl won't check certificate
promise
=
self
.
createExecutable
(
self
.
options
[
'path'
],
self
.
substituteTemplate
(
self
.
getTemplateFilename
(
'check_url.in'
),
config
)
)
return
[
promise
]
slapos/recipe/check_url_available/template/check_url.in
0 → 100644
View file @
64dbfa41
#!%(shell_path)s
# BEWARE: This file is operated by slapgrid
# BEWARE: It will be overwritten automatically
URL="%(url)s"
CODE=$(curl -k -sL $URL -w %%{http_code} -o /dev/null)
if [ $CODE -eq 000 ]; then
echo "$URL is not available (server not reachable)" >&2
exit 1
fi
if ! [ $CODE -eq 200 ]; then
echo "$URL is not available (returned $CODE)" >&2
exit 2
fi
slapos/recipe/generate_output_if_input_not_null.py
0 → 100644
View file @
64dbfa41
##############################################################################
#
# Copyright (c) 2010 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.
#
##############################################################################
from
slapos.recipe.librecipe
import
GenericBaseRecipe
class
Recipe
(
GenericBaseRecipe
):
"""Generate an output from one or several input and a template.
Take "input-list" buildout parameter as input.
Each input of the list is separated by
\
n
Each input contains :
1/ The parameter to use (like mybuildoutpart:myparameter)
2/ The name of the input to use as key.
If all parameters in input are found, create an "output" parameter from a
"template" parameter. The "template" parameter is just a string containing
python parameters (like %(mykey)s).
Will produce nothing if one element of "input_list" doesn't exist.
Will raise if any input reference non-existent buildout part.
Example :
[get-output]
recipe = slapos.cookbook:generate_output_if_input_not_null
input-list =
firstkey mybuildoutpart:myparameter
otherkey myotherbuildoutpart:myotherparameter
template = I want to get %(key)s and %(otherkey)s
This example will produce an "output" parameter if myparameter and
myotherparameter are defined.
"""
def
__init__
(
self
,
buildout
,
name
,
options
):
# Get all inputs
input_dict
=
{}
for
line
in
options
[
'input-list'
].
strip
().
split
(
'
\
n
'
):
key
,
buildout_parameter
=
line
.
split
(
' '
)
buildout_part
,
parameter_name
=
buildout_parameter
.
split
(
':'
)
parameter_value
=
buildout
[
buildout_part
].
get
(
parameter_name
)
# If any parameter is not defined, don't do anything
if
not
parameter_value
:
return
input_dict
[
key
]
=
parameter_value
# Generate output
options
[
'output'
]
=
options
[
'template'
]
%
input_dict
def
install
(
self
):
return
[]
slapos/recipe/request.py
View file @
64dbfa41
...
@@ -73,7 +73,7 @@ class Recipe(object):
...
@@ -73,7 +73,7 @@ class Recipe(object):
options
[
'config-%s'
%
config_parameter
]
options
[
'config-%s'
%
config_parameter
]
self
.
instance
=
self
.
request
(
options
[
'software-url'
],
software_type
,
self
.
instance
=
self
.
request
(
options
[
'software-url'
],
software_type
,
options
.
get
(
'name'
,
name
)
,
partition_parameter_kw
=
partition_parameter_kw
,
options
[
'name'
]
,
partition_parameter_kw
=
partition_parameter_kw
,
filter_kw
=
filter_kw
,
shared
=
self
.
isSlave
)
filter_kw
=
filter_kw
,
shared
=
self
.
isSlave
)
self
.
failed
=
None
self
.
failed
=
None
...
@@ -96,7 +96,7 @@ class Recipe(object):
...
@@ -96,7 +96,7 @@ class Recipe(object):
# XXX-Cedric : currently raise an error. So swallow it...
# XXX-Cedric : currently raise an error. So swallow it...
except
AttributeError
:
except
AttributeError
:
status
=
"unknown"
status
=
"unknown"
raise
KeyE
rror
(
"Connection parameter %s not found. "
self
.
logger
.
e
rror
(
"Connection parameter %s not found. "
"Status of requested instance is : %s."
%
(
self
.
failed
,
status
))
"Status of requested instance is : %s."
%
(
self
.
failed
,
status
))
return
[]
return
[]
...
...
software/kvm/instance-kvm.cfg
View file @
64dbfa41
...
@@ -9,6 +9,7 @@ parts =
...
@@ -9,6 +9,7 @@ parts =
certificate-authority
certificate-authority
kvm-promise
kvm-promise
novnc-promise
novnc-promise
frontend-promise
publish-kvm-connection-information
publish-kvm-connection-information
eggs-directory = ${buildout:eggs-directory}
eggs-directory = ${buildout:eggs-directory}
...
@@ -59,6 +60,7 @@ path = $${basedirectory:promises}/vnc_promise
...
@@ -59,6 +60,7 @@ path = $${basedirectory:promises}/vnc_promise
hostname = $${kvm-instance:vnc-ip}
hostname = $${kvm-instance:vnc-ip}
port = $${kvm-instance:vnc-port}
port = $${kvm-instance:vnc-port}
[novnc-instance]
[novnc-instance]
recipe = slapos.cookbook:novnc
recipe = slapos.cookbook:novnc
path = $${ca-novnc:executable}
path = $${ca-novnc:executable}
...
@@ -104,23 +106,20 @@ path = $${basedirectory:promises}/novnc_promise
...
@@ -104,23 +106,20 @@ path = $${basedirectory:promises}/novnc_promise
hostname = $${novnc-instance:ip}
hostname = $${novnc-instance:ip}
port = $${novnc-instance:port}
port = $${novnc-instance:port}
[kvm-monitor]
[kvm-monitor]
recipe = slapos.cookbook:generic.slapmonitor
recipe = slapos.cookbook:generic.slapmonitor
db-path = $${rootdirectory:srv}/slapmonitor_database
db-path = $${rootdirectory:srv}/slapmonitor_database
[request-common]
[request-slave-frontend]
recipe = slapos.cookbook:request
recipe = slapos.cookbook:request
software-url = $${slap-connection:software-release-url}
software-url = $${slap-connection:software-release-url}
sla = computer_guid
sla-computer_guid = $${slap-connection:computer-id}
server-url = $${slap-connection:server-url}
server-url = $${slap-connection:server-url}
key-file = $${slap-connection:key-file}
key-file = $${slap-connection:key-file}
cert-file = $${slap-connection:cert-file}
cert-file = $${slap-connection:cert-file}
computer-id = $${slap-connection:computer-id}
computer-id = $${slap-connection:computer-id}
partition-id = $${slap-connection:partition-id}
partition-id = $${slap-connection:partition-id}
[request-slave-frontend]
<=request-common
name = SlaveFrontend
name = SlaveFrontend
software-type = frontend
software-type = frontend
slave = true
slave = true
...
@@ -129,8 +128,27 @@ config-host = $${novnc-instance:ip}
...
@@ -129,8 +128,27 @@ config-host = $${novnc-instance:ip}
config-port = $${novnc-instance:port}
config-port = $${novnc-instance:port}
return = url resource port domainname
return = url resource port domainname
# Will generate, if existing, URL to reach KVM using frontend
[get-slave-connection-url]
recipe = slapos.cookbook:generate_output_if_input_not_null
input-list =
frontend-url request-slave-frontend:connection-url
frontend-port request-slave-frontend:connection-port
frontend-resource request-slave-frontend:connection-resource
frontend-domainname request-slave-frontend:connection-domainname
template = %(frontend-url)s/vnc_auto.html?host=%(frontend-domainname)s&port=%(frontend-port)s&encrypt=1&path=%(frontend-resource)s
# This is default output, if slave is not ready yet
output = Not ready yet. Please use backend URL if possible or wait a few minutes.
[frontend-promise]
recipe = slapos.cookbook:check_url_available
path = $${basedirectory:promises}/frontend_promise
url = $${get-slave-connection-url:output}
dash_path = ${dash:location}/bin/dash
[publish-kvm-connection-information]
[publish-kvm-connection-information]
recipe = slapos.cookbook:publish
recipe = slapos.cookbook:publish
backend_url = https://[$${novnc-instance:ip}]:$${novnc-instance:port}/vnc_auto.html?host=[$${novnc-instance:ip}]&port=$${novnc-instance:port}&encrypt=1
backend_url = https://[$${novnc-instance:ip}]:$${novnc-instance:port}/vnc_auto.html?host=[$${novnc-instance:ip}]&port=$${novnc-instance:port}&encrypt=1
url = $${
request-slave-frontend:connection-url}/vnc_auto.html?host=$${request-slave-frontend:connection-domainname}&port=$${request-slave-frontend:connection-port}&encrypt=1&path=$${request-slave-frontend:connection-resource
}
url = $${
get-slave-connection-url:output
}
password = $${kvm-instance:passwd}
password = $${kvm-instance:passwd}
software/kvm/software.cfg
View file @
64dbfa41
...
@@ -132,7 +132,7 @@ command =
...
@@ -132,7 +132,7 @@ command =
[template-kvm]
[template-kvm]
recipe = slapos.recipe.template
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance-kvm.cfg
url = ${:_profile_base_location_}/instance-kvm.cfg
md5sum =
b6572c018e44d4676e76805116bcade0
md5sum =
8d67a6cabe4fbce2bd44aa006a0d0cf8
output = ${buildout:directory}/template-kvm.cfg
output = ${buildout:directory}/template-kvm.cfg
mode = 0644
mode = 0644
...
...
stack/slapos.cfg
View file @
64dbfa41
...
@@ -6,9 +6,10 @@
...
@@ -6,9 +6,10 @@
extensions +=
extensions +=
buildout-versions
buildout-versions
# Use shacache
# Use shacache
and lxml
extends =
extends =
shacache-client.cfg
shacache-client.cfg
../component/lxml-python/buildout.cfg
# Separate from site eggs
# Separate from site eggs
allowed-eggs-from-site-packages =
allowed-eggs-from-site-packages =
...
@@ -40,8 +41,17 @@ allow-hosts +=
...
@@ -40,8 +41,17 @@ allow-hosts +=
# development / fast switching environment for whole software
# development / fast switching environment for whole software
unzip = true
unzip = true
parts += slapos-cookbook
versions = versions
versions = versions
# Install slapos.cookbook containing all officials recipes
[slapos-cookbook]
recipe = zc.recipe.egg
eggs =
${lxml-python:egg}
slapos.cookbook
[versions]
[versions]
# Use patched hexagonit.recipe.download from
# Use patched hexagonit.recipe.download from
# https://github.com/SlapOS/hexagonit.recipe.download
# https://github.com/SlapOS/hexagonit.recipe.download
...
...
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