#!/usr/bin/python # Copyright (C) 2015 Codethink Limited # # 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; version 2 of the License. # # 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, see . '''Preparatory checks for Baserock 'ostree' write extension.''' from gi.repository import GLib from gi.repository import Gio from gi.repository import OSTree import logging import os import urlparse import writeexts class OSTreeCheckExtension(writeexts.WriteExtension): def process_args(self, args): if len(args) != 1: raise writeexts.ExtensionError( 'Wrong number of command line args') upgrade = self.get_environment_boolean('UPGRADE') if upgrade: raise writeexts.ExtensionError( 'Use the `ssh-rsync` write extension to deploy upgrades to an ' 'existing remote system.') location = args[0] self.check_location(location) self.check_ostree_parameters() def check_location(self, location): repo = OSTree.Repo.new(Gio.File.new_for_path(location)) try: repo.open() except GLib.GError as e: logging.debug("Error from OSTree: %s", e) if 'No such file or directory' in e.message: raise writeexts.ExtensionError( "OSTree repo %s was not found." % location) else: raise writeexts.ExtensionError( "Error opening OSTree repo %s: %s" % (location, e)) def check_ostree_parameters(self): required = ['OSTREE_BRANCH', 'OSTREE_COMMIT_SUBJECT'] for var in required: if os.environ.get(var, '') == '': raise writeexts.ExtensionError('%s was not given' % var) OSTreeCheckExtension().run()