Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
snf-ganeti
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
itminedu
snf-ganeti
Commits
1672a0d1
Commit
1672a0d1
authored
17 years ago
by
Michael Hanselmann
Browse files
Options
Downloads
Patches
Plain Diff
Implement hooks infrastructure.
Reviewed-by: schreiberal
parent
0834c866
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
qa/ganeti-qa.py
+2
-0
2 additions, 0 deletions
qa/ganeti-qa.py
qa/qa-sample.yaml
+3
-0
3 additions, 0 deletions
qa/qa-sample.yaml
qa/qa_utils.py
+82
-0
82 additions, 0 deletions
qa/qa_utils.py
with
87 additions
and
0 deletions
qa/ganeti-qa.py
+
2
−
0
View file @
1672a0d1
...
@@ -40,6 +40,7 @@ import qa_node
...
@@ -40,6 +40,7 @@ import qa_node
import
qa_os
import
qa_os
import
qa_other
import
qa_other
import
qa_tags
import
qa_tags
import
qa_utils
def
RunTest
(
fn
,
*
args
):
def
RunTest
(
fn
,
*
args
):
...
@@ -236,6 +237,7 @@ def main():
...
@@ -236,6 +237,7 @@ def main():
sys
.
exit
(
1
)
sys
.
exit
(
1
)
qa_config
.
Load
(
config_file
)
qa_config
.
Load
(
config_file
)
qa_utils
.
LoadHooks
()
RunTest
(
qa_other
.
UploadKnownHostsFile
,
known_hosts_file
)
RunTest
(
qa_other
.
UploadKnownHostsFile
,
known_hosts_file
)
...
...
This diff is collapsed.
Click to expand it.
qa/qa-sample.yaml
+
3
−
0
View file @
1672a0d1
...
@@ -70,3 +70,6 @@ tests:
...
@@ -70,3 +70,6 @@ tests:
# Other settings
# Other settings
options
:
options
:
burnin-instances
:
2
burnin-instances
:
2
# Directory containing QA hooks
#hooks-dir: hooks/
This diff is collapsed.
Click to expand it.
qa/qa_utils.py
+
82
−
0
View file @
1672a0d1
...
@@ -36,6 +36,10 @@ _ERROR_SEQ = None
...
@@ -36,6 +36,10 @@ _ERROR_SEQ = None
_RESET_SEQ
=
None
_RESET_SEQ
=
None
# List of all hooks
_hooks
=
[]
def
_SetupColours
():
def
_SetupColours
():
"""
Initializes the colour constants.
"""
Initializes the colour constants.
...
@@ -214,3 +218,81 @@ def _FormatWithColor(text, seq):
...
@@ -214,3 +218,81 @@ def _FormatWithColor(text, seq):
FormatWarning
=
lambda
text
:
_FormatWithColor
(
text
,
_WARNING_SEQ
)
FormatWarning
=
lambda
text
:
_FormatWithColor
(
text
,
_WARNING_SEQ
)
FormatError
=
lambda
text
:
_FormatWithColor
(
text
,
_ERROR_SEQ
)
FormatError
=
lambda
text
:
_FormatWithColor
(
text
,
_ERROR_SEQ
)
FormatInfo
=
lambda
text
:
_FormatWithColor
(
text
,
_INFO_SEQ
)
FormatInfo
=
lambda
text
:
_FormatWithColor
(
text
,
_INFO_SEQ
)
def
LoadHooks
():
"""
Load all QA hooks.
"""
hooks_dir
=
qa_config
.
get
(
'
options
'
,
{}).
get
(
'
hooks-dir
'
,
None
)
if
not
hooks_dir
:
return
if
hooks_dir
not
in
sys
.
path
:
sys
.
path
.
insert
(
0
,
hooks_dir
)
for
name
in
utils
.
ListVisibleFiles
(
hooks_dir
):
if
name
.
endswith
(
'
.py
'
):
# Load and instanciate hook
_hooks
.
append
(
__import__
(
name
[:
-
3
],
None
,
None
,
[
''
]).
hook
())
class
QaHookContext
:
name
=
None
phase
=
None
success
=
None
args
=
None
kwargs
=
None
def
_CallHooks
(
ctx
):
"""
Calls all hooks with the given context.
"""
if
not
_hooks
:
return
name
=
"
%s-%s
"
%
(
ctx
.
phase
,
ctx
.
name
)
if
ctx
.
success
is
not
None
:
msg
=
"
%s (success=%s)
"
%
(
name
,
ctx
.
success
)
else
:
msg
=
name
print
FormatInfo
(
"
Begin %s
"
%
msg
)
for
hook
in
_hooks
:
hook
.
run
(
ctx
)
print
FormatInfo
(
"
End %s
"
%
name
)
def
DefineHook
(
name
):
"""
Wraps a function with calls to hooks.
Usage: prefix function with @qa_utils.DefineHook(...)
"""
def
wrapper
(
fn
):
def
new_f
(
*
args
,
**
kwargs
):
# Create context
ctx
=
QaHookContext
()
ctx
.
name
=
name
ctx
.
phase
=
'
pre
'
ctx
.
args
=
args
ctx
.
kwargs
=
kwargs
_CallHooks
(
ctx
)
try
:
ctx
.
phase
=
'
post
'
ctx
.
success
=
True
try
:
# Call real function
return
fn
(
*
args
,
**
kwargs
)
except
:
ctx
.
success
=
False
raise
finally
:
_CallHooks
(
ctx
)
# Override function metadata
new_f
.
func_name
=
fn
.
func_name
new_f
.
func_doc
=
fn
.
func_doc
return
new_f
return
wrapper
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment