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

#
# Comma separated list of features to install at startup
# Groups of features within parens are brought up in parallel
# Groups of features are brought up sequentially
# Features without a paren group are assigned to an implicit paren group that ends when the next paren is found
#
featuresBoot = \
    (instance/4.2.1, \
     package/4.2.1, \
     log/4.2.1, \
     framework/4.2.1, \
     system/4.2.1, \
     eventadmin/4.2.1, \
     feature/4.2.1, \
     shell/4.2.1, \
     management/4.2.1, \
     service/4.2.1, \
     jaas/4.2.1, \
     deployer/4.2.1, \
     diagnostic/4.2.1), \
    (wrap/2.5.4), \
    (bundle/4.2.1, \
     config/4.2.1, \
     kar/4.2.1, \
     webconsole/4.2.1, \
     scr/4.2.1, \
     war/4.2.1), \
    (onos-netty/$ONOS_VERSION), \
    (onos-api/$ONOS_VERSION, \
     onos-core/$ONOS_VERSION, \
     onos-cli/$ONOS_VERSION, \
     ssh/4.2.1, \
     onos-rest/$ONOS_VERSION, \
     onos-gui/$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
