Source code for ironic.common.trait_based_networking.defaults

#    Licensed 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.


from ironic.common.trait_based_networking import base
from ironic.common.trait_based_networking import loader

DEFAULT_TRAIT_NAME = "CUSTOM_DEFAULT_TBN_TRAIT"

DEFAULT_TRAIT = base.NetworkTrait(
    DEFAULT_TRAIT_NAME,
    # Define a single action which should match any available port or
    # portgroup just once.
    [base.TraitAction(DEFAULT_TRAIT_NAME,
                      base.Actions.ATTACH_PORT,
                      base.FilterExpression.parse(
                          "port.is_port || port.is_portgroup"),
                      max_count=1)]
)

[docs] def default_network_trait(): """Gets the default TBN trait :returns: A single trait representing the default trait to apply if no other traits apply to a node. Will get the default defined in the configuration file if present. Otherwise returns a predefined default which matches the first available port or portgroup. """ # Return the default trait defined in the configuration file, if present. traits_dict = {trait.name: trait for trait in loader.tbn_config_file_traits()} if DEFAULT_TRAIT_NAME in traits_dict: return traits_dict[DEFAULT_TRAIT_NAME] # Otherwise use the pre-defined default trait. return DEFAULT_TRAIT