################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# Comma separated list of features repositories to register by default
#
featuresRepositories = \    mvn:org.apache.karaf.features/standard/4.2.14/xml/features, \
    mvn:org.onosproject/onos-features/$ONOS_VERSION/xml/features, \
    mvn:org.apache.karaf.features/enterprise/4.2.14/xml/features, \
    mvn:org.apache.karaf.features/spring/4.2.14/xml/features, \
    mvn:org.apache.karaf.features/standard/4.2.14/xml/features, \
    mvn:org.apache.karaf.features/framework/4.2.14/xml/features

#
# Comma separated list of features to install at startup
#
featuresBoot = \
    (instance/4.2.14, \
    package/4.2.14, \
    log/4.2.14, \
    ssh/4.2.14, \
    framework/4.2.14, \
    system/4.2.14, \
    eventadmin/4.2.14, \
    feature/4.2.14, \
    shell/4.2.14, \
    management/4.2.14, \
    service/4.2.14, \
    jaas/4.2.14, \
    deployer/4.2.14, \
    diagnostic/4.2.14, \
    wrap/2.6.7, \
    bundle/4.2.14, \
    config/4.2.14, \
    kar/4.2.14, \
    webconsole/4.2.14, \
    scr/4.2.14, \
    war/4.2.14), \
    (onos-thirdparty-base/$ONOS_VERSION), \
    (onos-api/$ONOS_VERSION, \
    onos-core/$ONOS_VERSION, \
    onos-cli/$ONOS_VERSION, \
    onos-rest/$ONOS_VERSION)


#
# Resource repositories (OBR) that the features resolver can use
# to resolve requirements/capabilities
#
# The format of the resourceRepositories is
# resourceRepositories=[xml:url|json:url],...
# for Instance:
#
#resourceRepositories=xml:http://host/path/to/index.xml
# or
#resourceRepositories=json:http://host/path/to/index.json
#

#
# Defines if the boot features are started in asynchronous mode (in a dedicated thread)
#
featuresBootAsynchronous=false

#
# Service requirements enforcement
#
# By default, the feature resolver checks the service requirements/capabilities of
# bundles for new features (xml schema >= 1.3.0) in order to automatically installs
# the required bundles.
# The following flag can have those values:
#   - disable: service requirements are completely ignored
#   - default: service requirements are ignored for old features
#   - enforce: service requirements are always verified
#
#serviceRequirements=default

#
# Store cfg file for config element in feature
#
#configCfgStore=true

#
# Configuration of features processing mechanism (overrides, blacklisting, modification of features)
# XML file defines instructions related to features processing
# versions.properties may declare properties to resolve placeholders in XML file
# both files are relative to ${karaf.etc}
#
#featureProcessing=org.apache.karaf.features.xml
#featureProcessingVersions=versions.properties
