diff options
Diffstat (limited to 'extensions/ostree.check')
-rw-r--r-- | extensions/ostree.check | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/extensions/ostree.check b/extensions/ostree.check new file mode 100644 index 00000000..e5fefe36 --- /dev/null +++ b/extensions/ostree.check @@ -0,0 +1,67 @@ +#!/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 <http://www.gnu.org/licenses/>. + +'''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() |