Commit 5b66d7ad authored by Rafael Monnerat's avatar Rafael Monnerat

Small Improvements

* revive tests (only what was already there)
* `upload` command supports python3
* better log message
* temporary files are removed

See merge request !3
parents 7e9c09f2 b07b373b
...@@ -87,14 +87,14 @@ class NetworkCache: ...@@ -87,14 +87,14 @@ class NetworkCache:
else: else:
key = self.directory_key key = self.directory_key
file_descriptor = open(path, 'r') file_descriptor = open(path, 'rb')
if not (self.dir_url and self.cache_url): if not (self.dir_url and self.cache_url):
raise ValueError("upload-dir-url and/or upload-cache-url is not defined") raise ValueError("upload-dir-url and/or upload-cache-url is not defined")
# backward compatibility # backward compatibility
metadata_dict.setdefault('file', 'notused') metadata_dict.setdefault('file', 'notused')
metadata_dict.setdefault('urlmd5', 'notused') metadata_dict.setdefault('urlmd5', 'notused')
# convert '' into None in order to call nc nicely # convert '' into None in order to call nc nicely
with NetworkcacheClient(self.cache_url, self.dir_url, with NetworkcacheClient(self.cache_url, self.dir_url,
signature_private_key_file=self.signature_private_key_file or None, signature_private_key_file=self.signature_private_key_file or None,
...@@ -157,9 +157,11 @@ class Signature: ...@@ -157,9 +157,11 @@ class Signature:
self.config = config self.config = config
self.logger = logger self.logger = logger
def log(self, message): def log(self, message, *args):
if self.logger is not None: if self.logger is not None:
self.logger.debug(message) self.logger.debug(message, *args)
elif args:
print(message % args)
else: else:
print(message) print(message)
...@@ -179,7 +181,6 @@ class Signature: ...@@ -179,7 +181,6 @@ class Signature:
""" """
Download a tar of the repository from cache, and untar it. Download a tar of the repository from cache, and untar it.
""" """
info, sha256path = tempfile.mkstemp()
shacache = NetworkCache(self.config.slapos_configuration) shacache = NetworkCache(self.config.slapos_configuration)
if shacache.signature_certificate_list is None: if shacache.signature_certificate_list is None:
...@@ -189,27 +190,34 @@ class Signature: ...@@ -189,27 +190,34 @@ class Signature:
required_key_list=['timestamp'], strategy=strategy) required_key_list=['timestamp'], strategy=strategy)
if download_metadata_dict: if download_metadata_dict:
self.log('File downloaded on temp %s' % path) self.log('File downloaded in %s', path)
current_sha256 = self.get_file_hash(path) current_sha256 = self.get_file_hash(path)
if shacache.download(path=sha256path, required_key_list=['timestamp'], with tempfile.NamedTemporaryFile() as f_256:
strategy=strategy, is_sha256file=True): sha256path = f_256.name
self.log('File downloaded on temp. %s' % sha256path) if shacache.download(path=sha256path, required_key_list=['timestamp'],
with open(sha256path, 'rb') as f: strategy=strategy, is_sha256file=True):
expected_sha256 = f.read() self.log('sha 256 downloaded in %s', sha256path)
expected_sha256 = f_256.read()
if current_sha256 == expected_sha256:
return True if current_sha256 == expected_sha256:
else: return True
raise ValueError("%s != %s" % (current_sha256, expected_sha256)) else:
raise ValueError("%s != %s" % (current_sha256, expected_sha256))
def download(self): def download(self):
""" """
Get status information and return its path Get status information and return its path
""" """
info, path = tempfile.mkstemp() info, path = tempfile.mkstemp()
if not self._download(path) == False: if self._download(path):
shutil.move(path, self.config.destination) try:
shutil.move(path, self.config.destination)
except Exception as e:
self.log(e)
self.log('Fail to move %s to %s, maybe permission problem?', path, self.config.destination)
os.remove(path)
else: else:
os.remove(path)
raise ValueError("No result from shacache") raise ValueError("No result from shacache")
def _upload(self, path): def _upload(self, path):
...@@ -230,16 +238,16 @@ class Signature: ...@@ -230,16 +238,16 @@ class Signature:
try: try:
if shacache.upload(path=path, if shacache.upload(path=path,
metadata_dict=metadata_dict): metadata_dict=metadata_dict):
self.log('Uploaded upload file to cache.') self.log('Uploaded %s to cache (using %s key).', path, shacache.directory_key)
if shacache.upload(path=sha256path, if shacache.upload(path=sha256path,
metadata_dict=metadata_dict, is_sha256file=True): metadata_dict=metadata_dict, is_sha256file=True):
self.log('Uploaded sha256file file to cache.') self.log('Uploaded %s to cache (using %s key).', sha256path, shacache.directory_key)
else: else:
self.log('Fail to upload sha256file file to cache.') self.log('Fail to upload sha256file file to cache.')
else: else:
self.log('Fail to upload file to cache.') self.log('Fail to upload %s to cache.', path)
except Exception: except Exception:
self.log('Unable to upload to cache:\n%s.' % traceback.format_exc()) self.log('Unable to upload to cache:\n%s.', traceback.format_exc())
return return
def upload(self): def upload(self):
......
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2012-2014 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 advised 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.
#
##############################################################################
def _fake_call(self, *args, **kw):
self.last_call = (args, kw)
CONFIGURATION_FILE = """
[networkcache]
download-binary-cache-url = http://www.shacache.org/shacache
download-cache-url = https://www.shacache.org/shacache
download-binary-dir-url = http://www.shacache.org/shadir
signature-certificate-list =
-----BEGIN CERTIFICATE-----
MIIB8DCCAVmgAwIBAgIJAPFf61p8y809MA0GCSqGSIb3DQEBBQUAMBAxDjAMBgNV
BAMMBUNPTVAtMCAXDTE0MDIxNzE2NDgxN1oYDzIxMTQwMTI0MTY0ODE3WjAQMQ4w
DAYDVQQDDAVDT01QLTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsiqCyuv1
HO9FmtwnMbEa1/u8Dn7T0k7hVKYXVQYof+59Ltbb3cA3nLjFSJDr/wQT6N89MccS
PneRzkWqZKL06Kmj+N+XJfRyVaTz1qQtNzjdbYkO6RgQq+fvq2CO0+PSnL6NttLU
/a9nQMcVm7wZ8kmY+AG5LbVo8lmxDD16Wq0CAwEAAaNQME4wHQYDVR0OBBYEFEVi
YyWHF3W7/O4NaTjn4lElLpp7MB8GA1UdIwQYMBaAFEViYyWHF3W7/O4NaTjn4lEl
Lpp7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgIPGoxhUa16AgjZx
Jr1kUrs8Fg3ig8eRFQlBSLYfANIUxcQ2ScFAkmsvwXY3Md7uaSvMJsEl2jcjdmdi
eSreNkx85j9GtMLY/2cv0kF4yAQNRtibtDkbg6fRNkmUopDosJNVf79l1GKX8JFL
zZBOFdOaLYY/6dLRwiTUKHU6su8=
-----END CERTIFICATE-----
[slapupdate]
upgrade_key = slapos-upgrade-testing-key-with-config-file
"""
UPGRADE_KEY = """[debian-default]
repository-list =
main = http://ftp.fr.debian.org/debian/ wheezy main
main-src = http://ftp.fr.debian.org/debian/ wheezy main
update = http://ftp.fr.debian.org/debian/ wheezy-updates main
update-src = http://ftp.fr.debian.org/debian/ wheezy-updates main
slapos = http://download.opensuse.org/repositories/home:/VIFIBnexedi:/branches:/home:/VIFIBnexedi/Debian_7.0/ ./
re6stnet = http://git.erp5.org/dist/deb ./
key-list =
slapos = http://git.erp5.org/gitweb/slapos.package.git/blob_plain/HEAD:/debian-preseed/slapos.openbuildservice.key
re6st = http://git.erp5.org/gitweb/slapos.package.git/blob_plain/HEAD:/debian-preseed/git.erp5.org.key
filter-package-list =
ntp
openvpn
slapos.node
re6stnet
filter-promise-list =
core
signature-list =
debian+++jessie/sid+++
debian+++7.4+++
debian+++7.5+++
debian+++7.3+++
debian+++7+++
[opensuse-legacy]
repository-list =
suse = http://download.opensuse.org/distribution/12.1/repo/oss/
slapos = http://download.opensuse.org/repositories/home:/VIFIBnexedi:/branches:/home:/VIFIBnexedi/openSUSE_12.1/
re6st = http://git.erp5.org/dist/rpm
key-list =
filter-promise-list =
core
filter-package-list =
ntp
openvpn
slapos.node
re6stnet
signature-list =
opensuse+++12.1+++x86_64
[system]
reboot = 2011-10-10
upgrade = 2014-06-04
"""
UPGRADE_KEY_WITHOUT_KEY_LIST = """[debian-default]
repository-list =
main = http://ftp.fr.debian.org/debian/ wheezy main
main-src = http://ftp.fr.debian.org/debian/ wheezy main
update = http://ftp.fr.debian.org/debian/ wheezy-updates main
update-src = http://ftp.fr.debian.org/debian/ wheezy-updates main
slapos = http://download.opensuse.org/repositories/home:/VIFIBnexedi:/branches:/home:/VIFIBnexedi/Debian_7.0/ ./
re6stnet = http://git.erp5.org/dist/deb ./
filter-package-list =
ntp
openvpn
slapos.node
re6stnet
filter-promise-list =
core
signature-list =
debian+++jessie/sid+++
debian+++7.4+++
debian+++7.5+++
debian+++7.3+++
debian+++7+++
[opensuse-legacy]
repository-list =
suse = http://download.opensuse.org/distribution/12.1/repo/oss/
slapos = http://download.opensuse.org/repositories/home:/VIFIBnexedi:/branches:/home:/VIFIBnexedi/openSUSE_12.1/
re6st = http://git.erp5.org/dist/rpm
filter-promise-list =
core
filter-package-list =
ntp
openvpn
slapos.node
re6stnet
signature-list =
opensuse+++12.1+++x86_64
[system]
reboot = 2011-10-10
upgrade = 2014-06-04
"""
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment