Added fpm_options parameter for building package
Some parameters can be added into package informations. Change-Id: I625339b6fdc44340fcb41842b5527263a8afd2b4
This commit is contained in:
parent
1476f6c3aa
commit
816cd79ba7
|
@ -11,3 +11,8 @@ settings:
|
|||
projects:
|
||||
- name: glance
|
||||
gitref: stable/mitaka
|
||||
fpm_options:
|
||||
# Additional FPM options: https://github.com/jordansissel/fpm/wiki#usage
|
||||
- '--architecture all'
|
||||
- '--provides some-package'
|
||||
- '--replaces second-package'
|
||||
|
|
|
@ -23,7 +23,7 @@ from giftwrap.settings import Settings
|
|||
class BuildSpec(object):
|
||||
|
||||
def __init__(self, manifest, version, build_type=None, parallel=True,
|
||||
limit_projects=None):
|
||||
limit_projects=None, fpm_options=None):
|
||||
self._manifest = yaml.load(manifest)
|
||||
self.version = version
|
||||
self.build_type = build_type
|
||||
|
@ -34,6 +34,7 @@ class BuildSpec(object):
|
|||
manifest_settings['build_type'] = build_type
|
||||
if build_type == 'docker':
|
||||
parallel = False
|
||||
self.fpm_options = fpm_options
|
||||
manifest_settings['parallel_build'] = parallel
|
||||
self.settings = Settings.factory(manifest_settings)
|
||||
self.projects = self._render_projects(limit_projects)
|
||||
|
|
|
@ -103,7 +103,8 @@ class PackageBuilder(Builder):
|
|||
pkg = Package(project.package_name, project.version,
|
||||
project.install_path, self._spec.settings.output_dir,
|
||||
self._spec.settings.force_overwrite,
|
||||
project.system_dependencies)
|
||||
project.system_dependencies,
|
||||
project._fpm_options)
|
||||
pkg.build()
|
||||
|
||||
def _finalize_build(self):
|
||||
|
|
|
@ -39,7 +39,7 @@ class OpenstackProject(object):
|
|||
gitdepth=None, venv_command=None, install_command=None,
|
||||
install_path=None, package_name=None, stackforge=False,
|
||||
system_dependencies=[], pip_dependencies=[],
|
||||
postinstall_dependencies=[]):
|
||||
postinstall_dependencies=[], fpm_options=None):
|
||||
self._settings = settings
|
||||
self.name = name
|
||||
self._version = version
|
||||
|
@ -55,6 +55,7 @@ class OpenstackProject(object):
|
|||
self.system_dependencies = system_dependencies
|
||||
self.pip_dependencies = pip_dependencies
|
||||
self.postinstall_dependencies = postinstall_dependencies
|
||||
self._fpm_options = fpm_options
|
||||
|
||||
@property
|
||||
def version(self):
|
||||
|
|
|
@ -29,13 +29,14 @@ SUPPORTED_DISTROS = {
|
|||
class Package(object):
|
||||
|
||||
def __init__(self, name, version, install_path, output_dir,
|
||||
overwrite=False, dependencies=None):
|
||||
overwrite=False, dependencies=None, fpm_options=None):
|
||||
self.name = name
|
||||
self.version = version
|
||||
self.install_path = install_path
|
||||
self.output_dir = output_dir
|
||||
self.overwrite = overwrite
|
||||
self.dependencies = dependencies
|
||||
self.fpm_options = fpm_options
|
||||
|
||||
def _get_platform_target(self):
|
||||
current_distro = platform.linux_distribution()[0]
|
||||
|
@ -46,6 +47,11 @@ class Package(object):
|
|||
raise Exception("Sorry, '%s' is an unsupported distribution" %
|
||||
current_distro)
|
||||
|
||||
def _add_commands(self, command_type):
|
||||
# You can have defined multiple projects in yaml, iterate on projects
|
||||
# and add to the command strings declared in yaml e.g.: copy_file
|
||||
return ' '.join(map(str, command_type))
|
||||
|
||||
def build(self):
|
||||
target = self._get_platform_target()
|
||||
overwrite = ''
|
||||
|
@ -60,6 +66,21 @@ class Package(object):
|
|||
os.makedirs(self.output_dir)
|
||||
|
||||
# not wrapping in a try block - handled by caller
|
||||
execute("fpm %s -s dir -t %s -n %s -v %s %s %s" % (overwrite,
|
||||
target, self.name, self.version, deps, self.install_path),
|
||||
self.output_dir)
|
||||
execute_command = "fpm %s -s dir -t %s -n %s -v %s " % (overwrite,
|
||||
target,
|
||||
self.name,
|
||||
self.version)
|
||||
|
||||
if self.fpm_options:
|
||||
# Adding fpm options e.g.: like architecture, description, etc.
|
||||
# More actions have been described:
|
||||
# https://github.com/jordansissel/fpm/wiki#usage
|
||||
execute_command += self._add_commands(self.fpm_options)
|
||||
execute_command = ("%s %s %s" % (execute_command, deps,
|
||||
self.install_path))
|
||||
execute(execute_command, self.output_dir)
|
||||
else:
|
||||
# Execute standard command
|
||||
execute_command = "%s %s %s" % (execute_command, deps,
|
||||
self.install_path)
|
||||
execute(execute_command, self.output_dir)
|
||||
|
|
|
@ -59,3 +59,26 @@ class TestBuildSpec(unittest.TestCase):
|
|||
self.assertEqual(2, len(bs.projects))
|
||||
for project in bs.projects:
|
||||
self.assertEqual('99', project.version)
|
||||
|
||||
def test_build_spec_projects_with_fpm_options(self):
|
||||
fpm_options = ['--architecture all', '--replaces some-package',
|
||||
'--provides funny-package',
|
||||
'--depends very-funny-package']
|
||||
manifest = {
|
||||
'settings': {},
|
||||
'projects': [
|
||||
{
|
||||
'name': 'project1',
|
||||
'fpm_options': fpm_options,
|
||||
},
|
||||
],
|
||||
}
|
||||
with tempfile.TemporaryFile(mode='w+') as tf:
|
||||
version = '0'
|
||||
yaml.safe_dump(manifest, tf)
|
||||
tf.flush()
|
||||
tf.seek(0)
|
||||
bs = build_spec.BuildSpec(tf, version)
|
||||
self.assertEqual(1, len(bs.projects))
|
||||
for project in bs.projects:
|
||||
self.assertEqual(fpm_options, project._fpm_options)
|
||||
|
|
Loading…
Reference in New Issue