From 0c2b748ead95dd08c4ac1cd6c0aff498440b3d45 Mon Sep 17 00:00:00 2001 From: Aymen Frikha Date: Fri, 28 Jun 2019 08:55:43 -0400 Subject: [PATCH] Add package install capability --- src/lib/charm/openstack/neutron_arista.py | 19 ++++++++++++++++++- src/metadata.yaml | 1 + src/reactive/neutron_arista_handlers.py | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/lib/charm/openstack/neutron_arista.py b/src/lib/charm/openstack/neutron_arista.py index ad8bed3..24e8080 100644 --- a/src/lib/charm/openstack/neutron_arista.py +++ b/src/lib/charm/openstack/neutron_arista.py @@ -1,12 +1,21 @@ #!/usr/bin/env python from collections import OrderedDict -from charmhelpers.core.hookenv import config +from charmhelpers.core.hookenv import ( + config, + log +) import charms_openstack.charm from charmhelpers.contrib.openstack import ( context, templating, ) +from charmhelpers.fetch import ( + apt_install, + apt_update, + filter_installed_packages, + add_source, +) from charmhelpers.contrib.openstack.utils import os_release @@ -25,6 +34,14 @@ class NeutronAristaCharm(charms_openstack.charm.OpenStackCharm): # List of packages to install for this charm packages = ['python-networking-arista'] + def install(self): + log('Starting arista installation') + installed = len(filter_installed_packages(self.packages)) == 0 + if not installed: + add_source(config('source')) + apt_update(fatal=True) + apt_install(self.packages[0], fatal=True) + def write_config(self): configs = self.register_configs() configs.write_all() diff --git a/src/metadata.yaml b/src/metadata.yaml index cac1901..ed34f80 100644 --- a/src/metadata.yaml +++ b/src/metadata.yaml @@ -9,6 +9,7 @@ tags: subordinate: true series: - xenial + - bionic provides: neutron-plugin-api-subordinate: interface: neutron-plugin-api-subordinate diff --git a/src/reactive/neutron_arista_handlers.py b/src/reactive/neutron_arista_handlers.py index 60fec6f..3cca810 100644 --- a/src/reactive/neutron_arista_handlers.py +++ b/src/reactive/neutron_arista_handlers.py @@ -26,6 +26,12 @@ import charm.openstack.neutron_arista as arista # noqa use_defaults('update-status') +@reactive.when_not('arista-package.installed') +@reactive.when('neutron-plugin-api-subordinate.available') +def install_arista(): + with provide_charm_instance() as charm_class: + charm_class.install() + reactive.set_state('arista-package.installed') @reactive.when('neutron-plugin-api-subordinate.connected') def configure_principle(api_principle):