Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
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
Léo-Paul Géneau
slapos.core
Commits
04a8e89d
Commit
04a8e89d
authored
Jun 28, 2013
by
Marco Mariani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
grid: extracted method check_promise()
parent
9c61e87e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
48 additions
and
47 deletions
+48
-47
slapos/grid/slapgrid.py
slapos/grid/slapgrid.py
+48
-47
No files found.
slapos/grid/slapgrid.py
View file @
04a8e89d
...
...
@@ -196,7 +196,7 @@ def create_slapgrid_object(options, logger):
supervisord_configuration_path
=
op
[
'supervisord_configuration_path'
],
buildout
=
op
.
get
(
'buildout'
),
logger
=
logger
,
maximum_periodicity
=
op
.
get
(
'maximum_periodicity'
,
86400
),
maximum_periodicity
=
op
.
get
(
'maximum_periodicity'
,
86400
),
key_file
=
op
.
get
(
'key_file'
),
cert_file
=
op
.
get
(
'cert_file'
),
signature_private_key_file
=
op
.
get
(
'signature_private_key_file'
),
...
...
@@ -375,7 +375,7 @@ class Slapgrid(object):
try
:
return
self
.
computer
.
getComputerPartitionList
()
except
socket
.
error
as
exc
:
self
.
logger
.
fat
al
(
exc
)
self
.
logger
.
critic
al
(
exc
)
raise
def
processSoftwareReleaseList
(
self
):
...
...
@@ -472,56 +472,56 @@ class Slapgrid(object):
self
.
supervisord_configuration_path
,
logger
=
self
.
logger
)
def
_checkPromises
(
self
,
computer_partition
):
self
.
logger
.
info
(
"Checking promises..."
)
instance_path
=
os
.
path
.
join
(
self
.
instance_root
,
computer_partition
.
getId
()
)
def
check_promise
(
self
,
instance_path
,
promise_path
):
promise
=
os
.
path
.
basename
(
promise_path
)
self
.
logger
.
info
(
'Checking promise %r.'
,
promise
)
uid
,
gid
=
None
,
None
stat_info
=
os
.
stat
(
instance_path
)
#stat sys call to get statistics informations
uid
=
stat_info
.
st_uid
gid
=
stat_info
.
st_gid
promise_present
=
False
# Get the list of promises
p
=
subprocess
.
Popen
([
promise_path
],
preexec_fn
=
lambda
:
dropPrivileges
(
uid
,
gid
,
logger
=
self
.
logger
),
cwd
=
instance_path
,
env
=
None
if
sys
.
platform
==
'cygwin'
else
{},
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
stdin
=
subprocess
.
PIPE
)
p
.
stdin
.
flush
()
p
.
stdin
.
close
()
p
.
stdin
=
None
time
.
sleep
(
self
.
promise_timeout
)
if
p
.
poll
()
is
None
:
p
.
terminate
()
raise
Slapgrid
.
PromiseError
(
'The promise %r timed out'
%
promise
)
elif
p
.
poll
()
!=
0
:
stderr
=
p
.
communicate
()[
1
]
if
stderr
is
None
:
message
=
'No error output from %r.'
%
promise
else
:
message
=
'Promise %r:%s'
%
(
promise
,
stderr
)
raise
Slapgrid
.
PromiseError
(
message
)
def
check_all_promises
(
self
,
computer_partition
):
self
.
logger
.
info
(
"Checking promises..."
)
instance_path
=
os
.
path
.
join
(
self
.
instance_root
,
computer_partition
.
getId
())
promise_dir
=
os
.
path
.
join
(
instance_path
,
'etc'
,
'promise'
)
if
os
.
path
.
exists
(
promise_dir
)
and
os
.
path
.
isdir
(
promise_dir
):
# Check whether every promise is kept
for
promise
in
os
.
listdir
(
promise_dir
):
promise_present
=
True
command
=
[
os
.
path
.
join
(
promise_dir
,
promise
)]
promise
=
os
.
path
.
basename
(
command
[
0
])
self
.
logger
.
info
(
"Checking promise %r."
,
promise
)
process_handler
=
subprocess
.
Popen
(
command
,
preexec_fn
=
lambda
:
dropPrivileges
(
uid
,
gid
,
logger
=
self
.
logger
),
cwd
=
instance_path
,
env
=
None
if
sys
.
platform
==
'cygwin'
else
{},
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
stdin
=
subprocess
.
PIPE
)
process_handler
.
stdin
.
flush
()
process_handler
.
stdin
.
close
()
process_handler
.
stdin
=
None
time
.
sleep
(
self
.
promise_timeout
)
if
process_handler
.
poll
()
is
None
:
process_handler
.
terminate
()
raise
Slapgrid
.
PromiseError
(
"The promise %r timed out"
%
promise
)
elif
process_handler
.
poll
()
!=
0
:
stderr
=
process_handler
.
communicate
()[
1
]
if
stderr
is
None
:
stderr
=
'No error output from %r.'
%
promise
else
:
stderr
=
'Promise %r:'
%
promise
+
stderr
raise
Slapgrid
.
PromiseError
(
stderr
)
if
os
.
path
.
isdir
(
promise_dir
):
promises
=
os
.
listdir
(
promise_dir
)
else
:
promises
=
[]
if
not
promise_present
:
self
.
logger
.
info
(
"No promise."
)
if
not
promises
:
self
.
logger
.
info
(
'No promise.'
)
return
for
promise_filename
in
promises
:
promise_path
=
os
.
path
.
join
(
promise_dir
,
promise_filename
)
self
.
check_promise
(
instance_path
,
promise_path
)
def
processComputerPartition
(
self
,
computer_partition
):
"""
...
...
@@ -536,7 +536,7 @@ class Slapgrid(object):
# Check if we defined explicit list of partitions to process.
# If so, if current partition not in this list, skip.
if
len
(
self
.
computer_partition_filter_list
)
>
0
and
\
if
self
.
computer_partition_filter_list
and
\
(
computer_partition_id
not
in
self
.
computer_partition_filter_list
):
return
...
...
@@ -561,6 +561,7 @@ class Slapgrid(object):
# Problem with instance: SR URI not set.
# Try to process it anyway, it may need to be deleted.
software_url
=
None
try
:
software_path
=
os
.
path
.
join
(
self
.
software_root
,
md5digest
(
software_url
))
except
TypeError
:
...
...
@@ -631,7 +632,7 @@ class Slapgrid(object):
local_partition
.
install
()
computer_partition
.
available
()
local_partition
.
start
()
self
.
_checkP
romises
(
computer_partition
)
self
.
check_all_p
romises
(
computer_partition
)
computer_partition
.
started
()
elif
computer_partition_state
==
COMPUTER_PARTITION_STOPPED_STATE
:
try
:
...
...
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