[atomic] Add a script to create ostree repo

This is a wrapper over ostree and rpm-ostree. It is intended to be run
in either Koji or Mock chroot.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
Lubomír Sedlář 2016-03-21 10:58:36 +01:00
parent 6230b0ff3e
commit 282058dafe
3 changed files with 104 additions and 0 deletions

15
bin/pungi-make-ostree Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
here = sys.path[0]
if here != '/usr/bin':
sys.path.insert(0, os.path.dirname(here))
from pungi import atomic
if __name__ == '__main__':
atomic.main()

51
pungi/atomic.py Normal file
View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
"""
This module contains functions required by pungi-make-atomic.
It is expected to be runnable in Koji runroot.
"""
import argparse
import os
from kobo import shortcuts
def make_log_file(log_dir, filename):
"""Return path to log file with given name, if log_dir is set."""
if not log_dir:
return None
return os.path.join(log_dir, '{}.log'.format(filename))
def init_atomic_repo(repo, log_dir=None):
"""If the atomic repo does not exist, initialize it."""
log_file = make_log_file(log_dir, 'init-atomic-repo')
if not os.path.isdir(repo):
shortcuts.run(['ostree', 'init', '--repo={}'.format(repo), '--mode=archive-z2'],
log_file=log_file)
def make_ostree_repo(repo, config, log_dir=None):
log_file = make_log_file(log_dir, 'create-atomic-repo')
shortcuts.run(['rpm-ostree', 'compose', 'tree', '--repo={}'.format(repo), config],
log_file=log_file)
def run(opts):
init_atomic_repo(opts.atomic_repo, log_dir=opts.log_dir)
make_ostree_repo(opts.atomic_repo, opts.treefile, log_dir=opts.log_dir)
def main(args=None):
parser = argparse.ArgumentParser()
parser.add_argument('--log-dir',
help='where to log output')
parser.add_argument('atomic_repo', metavar='ATOMIC_REPO',
help='where to put the atomic repo')
parser.add_argument('--treefile', required=True,
help='treefile for rpm-ostree')
opts = parser.parse_args(args)
run(opts)

38
tests/test_atomic_script.py Executable file
View File

@ -0,0 +1,38 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import mock
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'bin'))
from tests import helpers
from pungi import atomic
class OstreeScriptTest(helpers.PungiTestCase):
@mock.patch('kobo.shortcuts.run')
def test_full_run(self, run):
atomic.main([
'--log-dir={}'.format(os.path.join(self.topdir, 'logs', 'Atomic')),
'--treefile={}'.format(os.path.join(self.topdir, 'work', 'fedora-atomic-docker-host.json')),
os.path.join(self.topdir, 'atomic'),
])
self.maxDiff = None
self.assertItemsEqual(
run.call_args_list,
[mock.call(['ostree', 'init', '--repo={}/atomic'.format(self.topdir), '--mode=archive-z2'],
log_file=self.topdir + '/logs/Atomic/init-atomic-repo.log'),
mock.call(['rpm-ostree', 'compose', 'tree', '--repo={}/atomic'.format(self.topdir),
self.topdir + '/work/fedora-atomic-docker-host.json'],
log_file=self.topdir + '/logs/Atomic/create-atomic-repo.log')])
if __name__ == '__main__':
unittest.main()