Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.toolbox
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
Boxiang Sun
slapos.toolbox
Commits
d4ccd3a8
Commit
d4ccd3a8
authored
Aug 16, 2012
by
Alain Takoudjou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moving sensitive files from runner/ to etc/
parent
6701e746
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
45 additions
and
72 deletions
+45
-72
slapos/runner/utils.py
slapos/runner/utils.py
+32
-47
slapos/runner/views.py
slapos/runner/views.py
+13
-25
No files found.
slapos/runner/utils.py
View file @
d4ccd3a8
...
...
@@ -102,7 +102,7 @@ def updateProxy(config):
slap
=
slapos
.
slap
.
slap
()
#Get current software release profile
try
:
software_folder
=
open
(
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
software_folder
=
open
(
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".project"
)).
read
()
profile
=
realpath
(
config
,
os
.
path
.
join
(
software_folder
,
config
[
'software_profile'
]))
...
...
@@ -136,7 +136,7 @@ def updateProxy(config):
'tap'
:
{
'name'
:
partition_reference
},
})
#get instance parameter
param_path
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
".parameter.xml"
)
param_path
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".parameter.xml"
)
xml_result
=
readParameters
(
param_path
)
partition_parameter_kw
=
None
if
type
(
xml_result
)
!=
type
(
''
)
and
xml_result
.
has_key
(
'instance'
):
...
...
@@ -174,14 +174,14 @@ def updateInstanceParameter(config, software_type=None):
slap
.
initializeConnection
(
config
[
'master_url'
])
#Get current software release profile
try
:
software_folder
=
open
(
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
software_folder
=
open
(
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".project"
)).
read
()
profile
=
realpath
(
config
,
os
.
path
.
join
(
software_folder
,
config
[
'software_profile'
]))
except
:
raise
Exception
(
"Software Release profile not found"
)
#get instance parameter
param_path
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
".parameter.xml"
)
param_path
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".parameter.xml"
)
xml_result
=
readParameters
(
param_path
)
partition_parameter_kw
=
None
if
type
(
xml_result
)
!=
type
(
''
)
and
xml_result
.
has_key
(
'instance'
):
...
...
@@ -192,7 +192,7 @@ def updateInstanceParameter(config, software_type=None):
def
startProxy
(
config
):
"""Start Slapproxy server"""
proxy_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'proxy.pid'
)
proxy_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'proxy.pid'
)
pid
=
readPid
(
proxy_pid
)
running
=
False
if
pid
:
...
...
@@ -204,14 +204,14 @@ def startProxy(config):
running
=
True
if
not
running
:
proxy
=
Popen
([
config
[
'slapproxy'
],
config
[
'configuration_file_path'
]])
proxy_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'proxy.pid'
)
proxy_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'proxy.pid'
)
writePid
(
proxy_pid
,
proxy
.
pid
)
time
.
sleep
(
5
)
def
stopProxy
(
config
):
"""Stop Slapproxy server"""
pid
=
readPid
(
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'proxy.pid'
))
pid
=
readPid
(
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'proxy.pid'
))
if
pid
:
try
:
os
.
kill
(
pid
)
...
...
@@ -229,7 +229,7 @@ def isSoftwareRunning(config):
"""
Return True if slapgrid-sr is still running and false if slapgrid if not
"""
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'slapgrid-sr.pid'
)
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'slapgrid-sr.pid'
)
pid
=
readPid
(
slapgrid_pid
)
if
pid
:
try
:
...
...
@@ -248,7 +248,7 @@ def runSoftwareWithLock(config):
Use Slapgrid to compile current Software Release and wait until
compilation is done
"""
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'slapgrid-sr.pid'
)
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'slapgrid-sr.pid'
)
if
not
isSoftwareRunning
(
config
):
if
not
os
.
path
.
exists
(
config
[
'software_root'
]):
os
.
mkdir
(
config
[
'software_root'
])
...
...
@@ -268,20 +268,20 @@ def runSoftwareWithLock(config):
slapgrid
.
wait
()
#Saves the current compile software for re-use
#This uses the new folder create by slapgrid (if not exits yet)
data
=
loadSoftwareData
(
config
[
'
runner_work
dir'
])
data
=
loadSoftwareData
(
config
[
'
etc_
dir'
])
md5
=
""
for
path
in
os
.
listdir
(
config
[
'software_root'
]):
exist
=
False
for
val
in
data
:
if
val
[
'md5'
]
==
path
:
exist
=
True
conf
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
".project"
)
conf
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".project"
)
if
not
exist
:
#save this compile software folder
if
os
.
path
.
exists
(
conf
):
data
.
append
({
"title"
:
getProjectTitle
(
config
),
"md5"
:
path
,
"path"
:
open
(
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
"path"
:
open
(
os
.
path
.
join
(
config
[
'
etc_
dir'
],
".project"
),
'r'
).
read
()})
writeSoftwareData
(
config
[
'
runner_work
dir'
],
data
)
writeSoftwareData
(
config
[
'
etc_
dir'
],
data
)
else
:
shutil
.
rmtree
(
os
.
path
.
join
(
config
[
'software_root'
],
path
))
break
...
...
@@ -293,7 +293,7 @@ def isInstanceRunning(config):
"""
Return True if slapgrid-cp is still running and false if slapgrid if not
"""
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'slapgrid-cp.pid'
)
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'slapgrid-cp.pid'
)
pid
=
readPid
(
slapgrid_pid
)
if
pid
:
try
:
...
...
@@ -308,7 +308,7 @@ def isInstanceRunning(config):
def
killRunningSlapgrid
(
config
,
ptype
):
"""Kill slapgrid process and all running children process"""
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
ptype
)
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
ptype
)
pid
=
readPid
(
slapgrid_pid
)
if
pid
:
recursifKill
([
pid
])
...
...
@@ -340,7 +340,7 @@ def runInstanceWithLock(config):
Use Slapgrid to deploy current Software Release and wait until
deployment is done.
"""
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
runner_work
dir'
],
'slapgrid-cp.pid'
)
slapgrid_pid
=
os
.
path
.
join
(
config
[
'
etc_
dir'
],
'slapgrid-cp.pid'
)
if
not
isInstanceRunning
(
config
):
startProxy
(
config
)
logfile
=
open
(
config
[
'instance_log'
],
'w'
)
...
...
@@ -390,18 +390,6 @@ def getSlapStatus(config):
partition_list
.
append
((
slappart_id
,
[]))
return
partition_list
def
runBuildoutAnnotate
(
config
):
slapgrid_pid
=
os
.
path
.
join
(
config
[
'runner_workdir'
],
'slapgrid-sr.pid'
)
if
not
isSoftwareRunning
(
config
):
bin_buildout
=
os
.
path
.
join
(
config
[
'software_root'
],
"bin/buildout"
)
if
os
.
path
.
exists
(
bin_buildout
):
logfile
=
open
(
config
[
'annotate_log'
],
'w'
)
buildout
=
Popen
([
bin_buildout
,
'-vc'
,
config
[
'configuration_file_path'
],
"annotate"
],
stdout
=
logfile
)
buildout
.
wait
()
return
True
return
False
def
svcStopAll
(
config
):
"""Stop all Instance process on this computer"""
return
Popen
([
config
[
'supervisor'
],
config
[
'configuration_file_path'
],
...
...
@@ -561,10 +549,10 @@ def configNewSR(config, projectpath):
removeProxyDb(config)
startProxy(config)
removeInstanceRoot(config)
param_path = os.path.join(config['
runner_work
dir
'], ".parameter.xml")
param_path = os.path.join(config['
etc_
dir
'], ".parameter.xml")
if os.path.exists(param_path):
os.remove(param_path)
open(os.path.join(config['
runner_work
dir
'], ".project"), '
w
').write(projectpath)
open(os.path.join(config['
etc_
dir
'], ".project"), '
w
').write(projectpath)
return True
else:
return False
...
...
@@ -579,25 +567,22 @@ def newSoftware(folder, config, session):
session: Flask session directory"""
json = ""
code = 0
runner_dir = config['
runner_work
dir
']
basedir = config['
etc_
dir
']
try:
folderPath = realpath(config, folder, check_exist=False)
if folderPath and not os.path.exists(folderPath):
os.mkdir(folderPath)
#load software.cfg and instance.cfg from http://git.erp5.org
software = "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/lamp-template/software.cfg"
instance = "http://git.erp5.org/gitweb/slapos.git/blob_plain/HEAD:/software/lamp-template/instance.cfg"
softwareContent = ""
instanceContent = ""
try:
softwareContent = urllib.urlopen(software).read()
instanceContent = urllib.urlopen(instance).read()
except:
#Software.cfg and instance.cfg content will be empty
pass
open(os.path.join(folderPath, config['
software_profile
']), '
w
').write(softwareContent)
open(os.path.join(folderPath, config['
instance_profile
']), '
w
').write(
instanceContent
)
open(os.path.join(
runner_
dir, ".project"), '
w
').write(folder + "/")
open(os.path.join(folderPath, config['
instance_profile
']), '
w
').write(
""
)
open(os.path.join(
base
dir, ".project"), '
w
').write(folder + "/")
session['
title
'] = getProjectTitle(config)
code = 1
else:
...
...
@@ -618,7 +603,7 @@ def checkSoftwareFolder(path, config):
def getProjectTitle(config):
"""Generate the name of the current software Release (for slaprunner UI)"""
conf = os.path.join(config['
runner_work
dir
'], ".project")
conf = os.path.join(config['
etc_
dir
'], ".project")
if os.path.exists(conf):
project = open(conf, "r").read().split("/")
software = project[len(project) - 2]
...
...
@@ -627,22 +612,22 @@ def getProjectTitle(config):
def getSoftwareReleaseName(config):
"""Get the name of the current Software Release"""
sr_profile = os.path.join(config['
runner_work
dir
'], ".project")
sr_profile = os.path.join(config['
etc_
dir
'], ".project")
if os.path.exists(sr_profile):
project = open(sr_profile, "r").read().split("/")
software = project[len(project) - 2]
return software.replace('
', '
_
')
return "No_name"
def loadSoftwareData(
runner_
dir):
def loadSoftwareData(
base
dir):
"""Get All Compiled Softwares Releases name and directory
Agrs:
runner_
dir: base directory of slapos web runner.
base
dir: base directory of slapos web runner.
Returns:
a dictionnary that contains all compiled Software Release with path"""
import pickle
file_path = os.path.join(
runner_
dir, '
.
softdata
')
file_path = os.path.join(
base
dir, '
.
softdata
')
if not os.path.exists(file_path):
return []
pkl_file = open(file_path, 'rb')
...
...
@@ -650,15 +635,15 @@ def loadSoftwareData(runner_dir):
pkl_file.close()
return data
def writeSoftwareData(
runner_
dir, data):
def writeSoftwareData(
base
dir, data):
"""Save the list of compiled Software Release into a file
Args:
runner_
dir: base directory of slapos web runner.
base
dir: base directory of slapos web runner.
data: dictionnary data about real name and directory of each software release
"""
import pickle
file_path = os.path.join(
runner_
dir, '
.
softdata
')
file_path = os.path.join(
base
dir, '
.
softdata
')
pkl_file = open(file_path, '
wb
')
# Pickle dictionary using protocol 0.
pickle.dump(data, pkl_file)
...
...
@@ -678,12 +663,12 @@ def removeSoftwareByName(config, folderName):
svcStopAll(config)
shutil.rmtree(path)
#update compiled software list
data = loadSoftwareData(config['
runner_work
dir
'])
data = loadSoftwareData(config['
etc_
dir
'])
i = 0
for p in data:
if p['
md5
'] == folderName:
del data[i]
writeSoftwareData(config['
runner_work
dir
'], data)
writeSoftwareData(config['
etc_
dir
'], data)
break
i = i+1
return data
...
...
slapos/runner/views.py
View file @
d4ccd3a8
...
...
@@ -79,7 +79,7 @@ def doLogin():
# software views
@
login_required
()
def
editSoftwareProfile
():
profile
=
getProfilePath
(
app
.
config
[
'
runner_work
dir'
],
app
.
config
[
'software_profile'
])
profile
=
getProfilePath
(
app
.
config
[
'
etc_
dir'
],
app
.
config
[
'software_profile'
])
if
profile
==
""
:
flash
(
'Error: can not open profile, please select your project first'
)
return
render_template
(
'updateSoftwareProfile.html'
,
workDir
=
'workspace'
,
...
...
@@ -92,18 +92,18 @@ def inspectSoftware():
else
:
result
=
app
.
config
[
'software_root'
]
return
render_template
(
'runResult.html'
,
softwareRoot
=
'software_root'
,
softwares
=
loadSoftwareData
(
app
.
config
[
'
runner_work
dir'
]))
softwares
=
loadSoftwareData
(
app
.
config
[
'
etc_
dir'
]))
#remove content of compiled software release
@
login_required
()
def
removeSoftware
():
file_config
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".softdata"
)
file_config
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".softdata"
)
if
isSoftwareRunning
(
app
.
config
)
or
isInstanceRunning
(
app
.
config
):
flash
(
'Software installation or instantiation in progress, cannot remove'
)
elif
os
.
path
.
exists
(
file_config
):
svcStopAll
(
app
.
config
)
shutil
.
rmtree
(
app
.
config
[
'software_root'
])
os
.
remove
(
os
.
path
.
join
(
app
.
config
[
'runner_workdir'
],
".softdata"
)
)
os
.
remove
(
file_config
)
flash
(
'Software removed'
)
return
redirect
(
url_for
(
'inspectSoftware'
))
...
...
@@ -121,12 +121,12 @@ def viewSoftwareLog():
else
:
result
=
'Not found yet'
return
render_template
(
'viewLog.html'
,
type
=
'software'
,
result
=
result
)
result
=
result
.
encode
(
"utf-8"
)
)
# instance views
@
login_required
()
def
editInstanceProfile
():
profile
=
getProfilePath
(
app
.
config
[
'
runner_work
dir'
],
app
.
config
[
'instance_profile'
])
profile
=
getProfilePath
(
app
.
config
[
'
etc_
dir'
],
app
.
config
[
'instance_profile'
])
if
profile
==
""
:
flash
(
'Error: can not open instance profile for this Software Release'
)
return
render_template
(
'updateInstanceProfile.html'
,
workDir
=
'workspace'
,
...
...
@@ -171,7 +171,7 @@ def removeInstance():
removeProxyDb
(
app
.
config
)
startProxy
(
app
.
config
)
removeInstanceRoot
(
app
.
config
)
param_path
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".parameter.xml"
)
param_path
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".parameter.xml"
)
if
os
.
path
.
exists
(
param_path
):
os
.
remove
(
param_path
)
flash
(
'Instance removed'
)
...
...
@@ -193,7 +193,7 @@ def viewInstanceLog():
else
:
result
=
'Not found yet'
return
render_template
(
'viewLog.html'
,
type
=
'instance'
,
result
=
result
)
result
=
result
.
encode
(
"utf-8"
)
)
@
login_required
()
def
stopAllPartition
():
...
...
@@ -210,15 +210,6 @@ def startStopProccess(process, action):
svcStartStopProcess
(
app
.
config
,
process
,
action
)
return
redirect
(
url_for
(
'inspectInstance'
))
@
login_required
()
def
viewBuildoudAnnotate
():
if
os
.
path
.
exists
(
app
.
config
[
'annotate_log'
]):
result
=
open
(
app
.
config
[
'annotate_log'
],
'r'
).
read
()
else
:
result
=
'Not found yet'
return
render_template
(
'viewLog.html'
,
type
=
'Instance'
,
result
=
result
,
running
=
isInstanceRunning
(
app
.
config
))
@
login_required
(
login_redirect
)
def
openProject
(
method
):
return
render_template
(
'projectFolder.html'
,
method
=
method
,
...
...
@@ -271,7 +262,7 @@ def getProjectStatus():
#view for current software release files
@
login_required
()
def
editCurrentProject
():
project
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".project"
)
project
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".project"
)
if
os
.
path
.
exists
(
project
):
return
render_template
(
'softwareFolder.html'
,
workDir
=
'workspace'
,
project
=
open
(
project
).
read
(),
...
...
@@ -438,11 +429,11 @@ def getPath():
#update instance parameter into a local xml file
@
login_required
()
def
saveParameterXml
():
project
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".project"
)
project
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".project"
)
if
not
os
.
path
.
exists
(
project
):
return
jsonify
(
code
=
0
,
result
=
"Please first open a Software Release"
)
content
=
request
.
form
[
'parameter'
].
encode
(
"utf-8"
)
param_path
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".parameter.xml"
)
param_path
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".parameter.xml"
)
try
:
f
=
open
(
param_path
,
'w'
)
f
.
write
(
content
)
...
...
@@ -465,7 +456,7 @@ def saveParameterXml():
#read instance parameters into the local xml file and return a dict
@
login_required
()
def
getParameterXml
(
request
):
param_path
=
os
.
path
.
join
(
app
.
config
[
'
runner_work
dir'
],
".parameter.xml"
)
param_path
=
os
.
path
.
join
(
app
.
config
[
'
etc_
dir'
],
".parameter.xml"
)
if
not
os
.
path
.
exists
(
param_path
):
default
=
'<?xml version="1.0" encoding="utf-8"?>
\
n
'
default
+=
'<instance>
\
n
</instance>'
...
...
@@ -483,7 +474,6 @@ def getParameterXml(request):
@
login_required
()
def
updateAccount
():
account
=
[]
user
=
os
.
path
.
join
(
app
.
config
[
'runner_workdir'
],
'.users'
)
account
.
append
(
request
.
form
[
'username'
].
strip
())
account
.
append
(
request
.
form
[
'password'
].
strip
())
account
.
append
(
request
.
form
[
'email'
].
strip
())
...
...
@@ -504,7 +494,6 @@ def configAccount():
last_account
=
getSession
(
app
.
config
)
if
not
last_account
:
account
=
[]
user
=
os
.
path
.
join
(
app
.
config
[
'runner_workdir'
],
'.users'
)
account
.
append
(
request
.
form
[
'username'
].
strip
())
account
.
append
(
request
.
form
[
'password'
].
strip
())
account
.
append
(
request
.
form
[
'email'
].
strip
())
...
...
@@ -536,7 +525,6 @@ app.add_url_rule('/viewInstanceLog', 'viewInstanceLog', viewInstanceLog, methods
app
.
add_url_rule
(
'/stopAllPartition'
,
'stopAllPartition'
,
stopAllPartition
,
methods
=
[
'GET'
])
app
.
add_url_rule
(
'/tailProcess/name/<process>'
,
'tailProcess'
,
tailProcess
,
methods
=
[
'GET'
])
app
.
add_url_rule
(
'/startStopProccess/name/<process>/cmd/<action>'
,
'startStopProccess'
,
startStopProccess
,
methods
=
[
'GET'
])
app
.
add_url_rule
(
'/viewBuildoudAnnotate'
,
'viewBuildoudAnnotate'
,
viewBuildoudAnnotate
,
methods
=
[
'GET'
])
app
.
add_url_rule
(
"/getParameterXml/<request>"
,
'getParameterXml'
,
getParameterXml
,
methods
=
[
'GET'
])
app
.
add_url_rule
(
"/stopSlapgrid"
,
'stopSlapgrid'
,
stopSlapgrid
,
methods
=
[
'POST'
])
app
.
add_url_rule
(
"/slapgridResult"
,
'slapgridResult'
,
slapgridResult
,
methods
=
[
'POST'
])
...
...
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