charm-neutron-api-plugin-ir.../src/reactive/neutron_ironic_handlers.py

69 lines
1.9 KiB
Python

import charms.reactive as reactive
import charm.openstack.neutron_ironic as ironic
import json
from charmhelpers.core.hookenv import (
config,
log,
)
from charms_openstack.charm import (
provide_charm_instance,
use_defaults,
optional_interfaces,
)
use_defaults(
'charm.default-select-release',
'update-status',
)
@reactive.when('identity-credentials.available')
def render_stuff(*args):
with provide_charm_instance() as ironic_charm:
ironic_charm.render_with_interfaces(
optional_interfaces(args))
ironic_charm.assess_status()
reactive.set_state('config.complete')
@reactive.when('identity-credentials.connected')
def setup_endpoint(keystone):
with provide_charm_instance() as charm_class:
ironic.request_endpoint_information(keystone)
charm_class.assess_status()
@reactive.when_not('ironic-agent-package.installed')
@reactive.when('neutron-plugin-api-subordinate.available')
def install_ironic():
with provide_charm_instance() as charm_class:
charm_class.install()
reactive.set_state('ironic-agent-package.installed')
@reactive.when_any('neutron-plugin-api-subordinate.connected')
def configure_principal():
try:
api_principal = reactive.endpoint_from_flag(
'neutron-plugin-api-subordinate.connected')
mech_drivers = []
existing_mech_drivers = api_principal.neutron_config_data.get(
'mechanism_drivers', None)
if existing_mech_drivers:
mech_drivers.extend(existing_mech_drivers.split(','))
mech_drivers.append("baremetal")
mechanism_drivers = ','.join(mech_drivers)
except AttributeError:
log("The principal charm isn't ready yet. "
"Postponing its configuration...")
return
api_principal.configure_plugin(
neutron_plugin='ironic',
mechanism_drivers=mechanism_drivers)