
# Copyright 2017-present Open Networking Foundation
#
# 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.


# Deployment configuration for VirtualBox based head node.
#
# This deployment configuration can be utilized with the head node created
# via `vagrant up headnode` from the gerrit.opencord.org/maas repository.
---
debug: false

# this is used to generate the genconfig/cord-inv file
headnode:
  ip: '10.100.198.201'
  ansible_user: 'vagrant'
  ansible_ssh_pass: 'vagrant'
  ansible_ssh_port: 22

common:
  # all of these are written to genconfig/config.yml, and needs a rework

  # set to the "flavor" of cord you want to install
  cord_profile: 'ecord'

  # Specifies tasks within the head node provisioning not to execute, including:
  #
  # switch_support -   don't download the switch ONL images as there are no
  #                    switches in this configuration
  # interface_config - don't update the network configuration of the headnode
  #                    as it is configured by vagrant to the proper settings
  skipTags:
    - 'switch_support'
    - 'reboot'
    - 'interface_config'

  fabric_ip: '10.6.1.1/24'
  management_ip: '10.1.0.1/24'
  external_iface: 'eth0'
  management_network: '10.1.0.0/24'

  # Specifies the extra settings required for this configuration
  #
  # virtualbox_support - install support for managing virtual box based
  #                      compute nodes
  # virtualbox_support: 1
  # power_helper_user: 'cord'

  # on_cloudlab: True
  cord_in_a_box: True

  extraVars:
    - 'fabric_include_names=eth2'
    - 'fabric_include_module_types=omit'
    - 'fabric_exclude_names=eth0,eth1'
    - 'management_include_names=eth1'
    - 'management_exclude_names=eth0,eth2'

docker:
  imageVersion: candidate
  registry: '10.100.198.201:5000'

otherServers:
  # Specifies the configuration for dynamically added compute nodes
  fabric:
    network: '10.6.1.1/24'
    management: '10.1.0.0/24'

