config: Remove dynamic configuration variant

We no longer see an urging use case for it. All field scenarios can
perfectly be modeled with the static format.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
This commit is contained in:
Jan Kiszka 2017-09-26 13:30:00 +02:00 committed by Daniel Wagner
parent 13a87cb8c7
commit 9e136e532d
2 changed files with 5 additions and 220 deletions

View File

@ -122,15 +122,6 @@ Use Cases
Project Configuration
---------------------
Two types of configuration file formats are supported.
For most purposes the static configuration should be used.
In case this static configuration file does not provide enough options for
customization, the dynamic configuration file format can be used.
Static project configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Currently JSON and YAML is supported as the base file format. Since YAML is
arguable easier to read, this documentation focuses on the YAML format.
@ -189,7 +180,7 @@ append entries in files that include this configuration by naming an entry the
same (overwriting) or using a unused name (appending).
Including in-tree configuration files
.....................................
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Its currently possible to include kas configuration files from the same
repository/layer like this:
@ -206,7 +197,7 @@ repository/layer like this:
The specified files are addressed relative to your current configuration file.
Including configuration files from other repos
..............................................
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Its also possible to include configuration files from other repos like this:
@ -253,8 +244,8 @@ different include files. Note that the order of the configuration file entries
is not preserved within one include file, because the parser creates normal
unordered dictionaries.
Static configuration reference
..............................
Configuration reference
~~~~~~~~~~~~~~~~~~~~~~~
* ``header``: dict [required]
The header of every kas configuration file. It contains information about
@ -370,73 +361,3 @@ Static configuration reference
* ``http_proxy``: string [optional]
* ``https_proxy``: string [optional]
* ``no_proxy``: string [optional]
Dynamic project configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**NOTE: Dynamic project configuration is experimental. The API may change or
even be obsoleted in future versions. Please provide feedback if you consider
it useful.**
The dynamic project configuration is plain Python with following
mandatory functions which need to be provided:
.. code-block:: python
def get_machine(config):
return 'qemu'
def get_distro(config):
return 'poky'
def get_repos(target):
repos = []
repos.append(Repo(
url='URL',
refspec='REFSPEC'))
repos.append(Repo(
url='https://git.yoctoproject.org/git/poky',
refspec='krogoth',
layers=['meta', 'meta-poky', 'meta-yocto-bsp'])))
return repos
Additionally, ``get_bblayers_conf_header()``, ``get_local_conf_header()`` can
be added.
.. code-block:: python
def get_bblayers_conf_header():
return """POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
"""
def get_local_conf_header():
return """PATCHRESOLVE = "noop"
CONF_VERSION = "1"
IMAGE_FSTYPES = "tar"
"""
Furthermore, you can add pre and post hooks (``*_prepend``, ``*_append``) for
the exection steps in kas core, e.g.
.. code-block:: python
def build_prepend(config):
# disable distro check
with open(config.build_dir + '/conf/sanity.conf', 'w') as f:
f.write('\n')
def build_append(config):
if 'CI' in os.environ:
build_native_package(config)
run_wic(config)
TODO: Document the complete configuration API.

View File

@ -25,7 +25,6 @@
import os
import logging
import errno
try:
from distro import id as get_distro_id
@ -198,135 +197,6 @@ class Config:
return self._config.get('gitlabci_config', '')
class ConfigPython(Config):
"""
Implementation of a configuration that uses a Python script.
"""
def __init__(self, filename, target, task):
# pylint: disable=exec-used
super().__init__()
self.filename = os.path.abspath(filename)
try:
with open(self.filename) as fds:
env = {}
data = fds.read()
exec(data, env)
self._config = env
except IOError:
raise IOError(errno.ENOENT, os.strerror(errno.ENOENT),
self.filename)
self.create_config(target, task)
self.setup_environ()
def __str__(self):
output = 'target: {}\n'.format(self.target)
output = 'task: {}\n'.format(self.task)
output += 'repos:\n'
for repo in self.get_repos():
output += ' {}\n'.format(repo.__str__())
output += 'environ:\n'
for key, value in self.environ.items():
output += ' {} = {}\n'.format(key, value)
output += 'proxy:\n'
for key, value in self.get_proxy_config().items():
output += ' {} = {}\n'.format(key, value)
return output
def pre_hook(self, fname):
try:
self._config[fname + '_prepend'](self)
except KeyError:
pass
def post_hook(self, fname):
try:
self._config[fname + '_append'](self)
except KeyError:
pass
def get_hook(self, fname):
try:
return self._config[fname]
except KeyError:
return None
def create_config(self, target, task):
"""
Sets the configuration for `target`
"""
self.target = 'core-image-minimal' if target is None else target
self.task = 'build' if task is None else task
self.repos = self._config['get_repos'](self, target)
def get_proxy_config(self):
return self._config['get_proxy_config']()
def get_repos(self):
return iter(self.repos)
def get_target(self):
"""
Returns the target
"""
return self.target
def get_bitbake_target(self):
"""
Return the bitbake target
"""
try:
return self._config['get_bitbake_target'](self)
except KeyError:
return self.target
def get_bblayers_conf_header(self):
"""
Returns the bblayers.conf header
"""
try:
return self._config['get_bblayers_conf_header']()
except KeyError:
return ''
def get_local_conf_header(self):
"""
Returns the local.conf header
"""
try:
return self._config['get_local_conf_header']()
except KeyError:
return ''
def get_machine(self):
"""
Returns the machine
"""
try:
return self._config['get_machine'](self)
except KeyError:
return 'qemu'
def get_distro(self):
"""
Returns the distro
"""
try:
return self._config['get_distro'](self)
except KeyError:
return 'poky'
def get_gitlabci_config(self):
"""
Returns the GitlabCI configuration
"""
try:
return self._config['get_gitlabci_config'](self)
except KeyError:
return ''
class ConfigStatic(Config):
"""
Implements the static kas configuration based on config files.
@ -437,10 +307,4 @@ def load_config(filename, target, task):
Return configuration generated from `filename`.
"""
(_, ext) = os.path.splitext(filename)
if ext == '.py':
cfg = ConfigPython(filename, target, task)
else:
cfg = ConfigStatic(filename, target, task)
return cfg
return ConfigStatic(filename, target, task)