diff options
| author | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2019-11-21 17:14:09 +0100 |
|---|---|---|
| committer | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2019-11-29 11:38:06 +0100 |
| commit | cf11cd6f3d1f0f0d9e1bb948672be12171a4099b (patch) | |
| tree | 389a9c5d535180801bd2547a38fd591d11e12720 /kolla/template/methods.py | |
| parent | 9938857d7d331743d71328831241edf21e42d160 (diff) | |
| download | kolla-cf11cd6f3d1f0f0d9e1bb948672be12171a4099b.tar.gz kolla-cf11cd6f3d1f0f0d9e1bb948672be12171a4099b.zip | |
Enable repos only when needed
Disable external repositories by default and enable only when needed.
Depends-on: https://review.opendev.org/696480
Implements: blueprint repos-off-by-default
Change-Id: Icf2a8397a8349e0fe849d88d160409fd234480a9
Diffstat (limited to 'kolla/template/methods.py')
| -rw-r--r-- | kolla/template/methods.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/kolla/template/methods.py b/kolla/template/methods.py index 017b219c7..1217547bf 100644 --- a/kolla/template/methods.py +++ b/kolla/template/methods.py @@ -12,6 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os +import yaml + +from jinja2 import contextfunction +from jinja2.runtime import Undefined + def debian_package_install(packages, clean_package_cache=True): """Jinja utility method for building debian-based package install command. @@ -64,3 +70,60 @@ def debian_package_install(packages, clean_package_cache=True): # return the list of commands return ' && '.join(cmds) + + +@contextfunction +def enable_repos(context, reponames): + """NOTE(hrw): we need to handle CentOS, Debian and Ubuntu with one macro. + + Repo names have to be simple names mapped to proper ones. So 'ceph' == + 'centos-ceph-nautilus' for CentOS, UCA for Ubuntu (enabled by default) and + something else for Debian. + """ + repofile = os.path.dirname(os.path.realpath(__file__)) + '/repos.yaml' + with open(repofile, 'r') as repos_file: + repo_data = {} + for name, params in yaml.safe_load(repos_file).items(): + repo_data[name] = params + + # TODO(hrw): add checks for isinstance() and raise proper exception + base_package_type = context.get('base_package_type') + if isinstance(base_package_type, Undefined): + raise + + base_distro = context.get('base_distro') + base_arch = context.get('base_arch') + distro_package_manager = context.get('distro_package_manager') + + commands = '' + + if base_package_type == 'rpm': + # NOTE(hrw): we enable all repos with one call + if distro_package_manager == 'yum': + commands = 'yum-config-manager ' + elif distro_package_manager == 'dnf': + commands = 'dnf config-manager ' + + try: + repo_list = repo_data['%s-%s' % (base_distro, base_arch)] + except KeyError: + # NOTE(hrw): Fallback to distro list + repo_list = repo_data[base_distro] + + for repo in reponames: + try: + if base_package_type == 'rpm': + commands += ' --enable %s' % repo_list[repo] + elif base_package_type == 'deb': + commands += 'echo "%s" ' % repo_list[repo] + commands += '>/etc/apt/sources.list.d/%s.list; ' % repo + except KeyError: + pass + # NOTE(hrw): tripleo builds have empty repolist + except TypeError: + pass + + if commands: + commands = "RUN %s" % commands + + return commands |
