################################################################################
#
#    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.9/xml/features, \
    mvn:org.onosproject/onos-features/$ONOS_VERSION/xml/features, \
    mvn:org.apache.karaf.features/enterprise/4.2.9/xml/features, \
    mvn:org.apache.karaf.features/spring/4.2.9/xml/features, \
    mvn:org.apache.karaf.features/standard/4.2.9/xml/features, \
    mvn:org.apache.karaf.features/framework/4.2.9/xml/features

#
# Comma separated list of features to install at startup
#
featuresBoot = \
    (instance/4.2.9, \
    package/4.2.9, \
    log/4.2.9, \
    ssh/4.2.9, \
    framework/4.2.9, \
    system/4.2.9, \
    eventadmin/4.2.9, \
    feature/4.2.9, \
    shell/4.2.9, \
    management/4.2.9, \
    service/4.2.9, \
    jaas/4.2.9, \
    deployer/4.2.9, \
    diagnostic/4.2.9, \
    wrap/2.6.2, \
    bundle/4.2.9, \
    config/4.2.9, \
    kar/4.2.9, \
    webconsole/4.2.9, \
    scr/4.2.9, \
    war/4.2.9), \
    (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
