Abhishek, On Wed, Jun 7, 2017 at 6:41 AM, abhishek Sharma < abhishek.sharma...@yahoo.com> wrote:
> Hello Team, > > Is there any way to control installation of a feature based upon certain > condition? > I don't think this is possible with Karaf. Your email is a little unclear though if you would like (a) a feature to be soft of auto installed when a certain condition like presence of a configuration file happens; OR (b) you'd like to avoid the activation of a feature by a human if a certain condition like presence of a configuration file is not met? > As per my use case, the feature should be installed if it gets certain > configuration files otherwise it should not allow to install the feature. > That's (b) and even though Karaf's feature management does not have anything for this natively, you could probably "emulate" it in your code - like you are showing, either with the exception from a constructor / init-method, which would fail the blueprint setup, so any e.g. bundles dependant on that failed one would not start. IMHO that's not such a bad solution - if you absolutely require something without which you cannot run at all (whether it's a file or a dependant local OSGi service or a remote service of some kind on the network), just completely fail the start-up - at least it's very clear that a bundle of your feature cannot operate, in the log and in something like bundle:list. (The new ready service I'm building in infrautils would also pick up on this.) You could alternatively instead of something quite so drastic perhaps also just set some sort of boolean flag in your code if your condition is not met, and then if the services if your bundle is used, like throw exceptions if that boolean flag is not showing the expected state? This model may be more suitable if you want the bundle to become active if that file is added after it already started (in the solution above you would have to restart it). For (a) you could perhaps hack something weird with two features, one base one which checks something which if met programmatically installs another sub-feature... but this could be confusing for end-users ("I just installed feature A, why is there suddenly feature B?!"), and unless you have a very very good reason for needing this, I would probably keep it simple and not do anything like this. > For the same I tried following changes : > > 1. Blueprint.xml > > <bean id="provider" > class="org.opendaylight.example.impl.MyProvider" > init-method="init" destroy-method="close"> > <argument ref="dataBroker" /> > <argument ref="rpcRegistry" /> > </bean> > > 2. Provider class : > > public MyProvider(final DataBroker dataBroker , RpcProviderRegistry > rpcProviderRegistry) { > this.dataBroker = dataBroker; > this.rpcProviderRegistry = rpcProviderRegistry; > } > > /** > * Method called when the blueprint container is created. > */ > public void init() { > LOG.info("MyProvider Session Initiated"); > > // Logic to test presence of configuration file if not throw an > exception > } > > As init() and constructor of my provider is called after installation of > the feature. So kindly suggest how to get control to achieve conditional > feature installation. > HTH? Tx, M. -- Michael Vorburger, Red Hat vorbur...@redhat.com | IRC: vorburger @freenode | ~ = http://vorburger.ch > > > Many thanks, > > Abhishek Sharma > > _______________________________________________ > controller-dev mailing list > controller-dev@lists.opendaylight.org > https://lists.opendaylight.org/mailman/listinfo/controller-dev > >
_______________________________________________ controller-dev mailing list controller-dev@lists.opendaylight.org https://lists.opendaylight.org/mailman/listinfo/controller-dev