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
a6dacf46
Commit
a6dacf46
authored
Jun 25, 2013
by
Marco Mariani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cli: moved the rest of cache.py under cli/, do not pass configp around
parent
204b6a99
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
66 additions
and
69 deletions
+66
-69
slapos/cache.py
slapos/cache.py
+0
-67
slapos/cli/cache.py
slapos/cli/cache.py
+66
-2
No files found.
slapos/cache.py
deleted
100644 → 0
View file @
204b6a99
# -*- coding: utf-8 -*-
import
ast
import
hashlib
import
json
import
re
import
requests
import
sys
import
prettytable
from
slapos.grid
import
networkcache
from
slapos.grid.distribution
import
patched_linux_distribution
def
looks_like_md5
(
s
):
"""
Return True if the parameter looks like an hashed value.
Not 100% precise, but we're actually more interested in filtering out URLs and pathnames.
"""
return
re
.
match
(
'[0-9a-f]{32}'
,
s
)
def
do_lookup
(
logger
,
configp
,
software_url
):
cache_dir
=
configp
.
get
(
'networkcache'
,
'download-binary-dir-url'
)
if
looks_like_md5
(
software_url
):
md5
=
software_url
else
:
md5
=
hashlib
.
md5
(
software_url
).
hexdigest
()
try
:
url
=
'%s/%s'
%
(
cache_dir
,
md5
)
logger
.
debug
(
'Connecting to %s'
,
url
)
req
=
requests
.
get
(
url
,
timeout
=
5
)
except
(
requests
.
Timeout
,
requests
.
ConnectionError
):
logger
.
critical
(
'Cannot connect to cache server at %s'
,
url
)
sys
.
exit
(
10
)
if
not
req
.
ok
:
if
req
.
status_code
==
404
:
logger
.
critical
(
'Object not in cache: %s'
,
software_url
)
else
:
logger
.
critical
(
'Error while looking object %s: %s'
,
software_url
,
req
.
reason
)
sys
.
exit
(
10
)
entries
=
req
.
json
()
if
not
entries
:
logger
.
info
(
'Object found in cache, but has no binary entries.'
)
return
ostable
=
sorted
(
ast
.
literal_eval
(
json
.
loads
(
entry
[
0
])[
'os'
])
for
entry
in
entries
)
pt
=
prettytable
.
PrettyTable
([
'distribution'
,
'version'
,
'id'
,
'compatible?'
])
linux_distribution
=
patched_linux_distribution
()
for
os
in
ostable
:
compatible
=
'yes'
if
networkcache
.
os_matches
(
os
,
linux_distribution
)
else
'no'
pt
.
add_row
([
os
[
0
],
os
[
1
],
os
[
2
],
compatible
])
meta
=
json
.
loads
(
entries
[
0
][
0
])
logger
.
info
(
'Software URL: %s'
,
meta
[
'software_url'
])
logger
.
info
(
'MD5: %s'
,
md5
)
for
line
in
pt
.
get_string
(
border
=
True
,
padding_width
=
0
,
vrules
=
prettytable
.
NONE
).
split
(
'
\
n
'
):
logger
.
info
(
line
)
slapos/cli/cache.py
View file @
a6dacf46
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import
ast
import
hashlib
import
json
import
re
import
requests
import
sys
import
prettytable
from
slapos.grid
import
networkcache
from
slapos.grid.distribution
import
patched_linux_distribution
from
slapos.cli.config
import
ConfigCommand
from
slapos.cli.config
import
ConfigCommand
from
slapos.cache
import
do_lookup
class
CacheLookupCommand
(
ConfigCommand
):
class
CacheLookupCommand
(
ConfigCommand
):
...
@@ -23,4 +33,58 @@ class CacheLookupCommand(ConfigCommand):
...
@@ -23,4 +33,58 @@ class CacheLookupCommand(ConfigCommand):
def
take_action
(
self
,
args
):
def
take_action
(
self
,
args
):
configp
=
self
.
fetch_config
(
args
)
configp
=
self
.
fetch_config
(
args
)
do_lookup
(
self
.
app
.
log
,
configp
,
args
.
software_url
)
cache_dir
=
configp
.
get
(
'networkcache'
,
'download-binary-dir-url'
)
do_lookup
(
self
.
app
.
log
,
cache_dir
,
args
.
software_url
)
def
looks_like_md5
(
s
):
"""
Return True if the parameter looks like an hashed value.
Not 100% precise, but we're actually more interested in filtering out URLs and pathnames.
"""
return
re
.
match
(
'[0-9a-f]{32}'
,
s
)
def
do_lookup
(
logger
,
cache_dir
,
software_url
):
if
looks_like_md5
(
software_url
):
md5
=
software_url
else
:
md5
=
hashlib
.
md5
(
software_url
).
hexdigest
()
try
:
url
=
'%s/%s'
%
(
cache_dir
,
md5
)
logger
.
debug
(
'Connecting to %s'
,
url
)
req
=
requests
.
get
(
url
,
timeout
=
5
)
except
(
requests
.
Timeout
,
requests
.
ConnectionError
):
logger
.
critical
(
'Cannot connect to cache server at %s'
,
url
)
sys
.
exit
(
10
)
if
not
req
.
ok
:
if
req
.
status_code
==
404
:
logger
.
critical
(
'Object not in cache: %s'
,
software_url
)
else
:
logger
.
critical
(
'Error while looking object %s: %s'
,
software_url
,
req
.
reason
)
sys
.
exit
(
10
)
entries
=
req
.
json
()
if
not
entries
:
logger
.
info
(
'Object found in cache, but has no binary entries.'
)
return
ostable
=
sorted
(
ast
.
literal_eval
(
json
.
loads
(
entry
[
0
])[
'os'
])
for
entry
in
entries
)
pt
=
prettytable
.
PrettyTable
([
'distribution'
,
'version'
,
'id'
,
'compatible?'
])
linux_distribution
=
patched_linux_distribution
()
for
os
in
ostable
:
compatible
=
'yes'
if
networkcache
.
os_matches
(
os
,
linux_distribution
)
else
'no'
pt
.
add_row
([
os
[
0
],
os
[
1
],
os
[
2
],
compatible
])
meta
=
json
.
loads
(
entries
[
0
][
0
])
logger
.
info
(
'Software URL: %s'
,
meta
[
'software_url'
])
logger
.
info
(
'MD5: %s'
,
md5
)
for
line
in
pt
.
get_string
(
border
=
True
,
padding_width
=
0
,
vrules
=
prettytable
.
NONE
).
split
(
'
\
n
'
):
logger
.
info
(
line
)
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