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

# physical-example Pod Config
# Example configuration for a physical CORD pod

# The name of the scenario to use, found in the scenarios directory
# `cord` is the standard CORD POD with XOS, ONOS, MaaS and OpenStack
cord_scenario: cord

# The name of the profile to use, found in the
# platform-install/profile_manifests directory
# Example values: `rcord`, `ecord`, `mcord`, `opencloud`
cord_profile: <must_be_set>

# Bring up the corddev VM. This is the `build` node as specified in ansible
# inventory below.
vagrant_vms:
 - 'corddev'

# NOTE: Many of these items are described in more detail in the Build System
# Variable Glossary: https://guide.opencord.org/build_glossary.html

# Location of the cord_profile directory to be mounted in the `corddev` VM by
# Vagrant.
#
# host_cord_profile_dir: "/path_to/cord_profile"

# Set these directory paths if the defaults aren't suitable, or if deploying
# multiple pods from the same source tree where the credentials, keys, and
# profile should differ. These are paths on the config node.
#
# credentials_dir: '/path_to/credentials'
# pki_dir: '/path_to/pki'
# ssh_pki_dir: '/path_to/ssh_pki'

# Variables. Default values are specified here

# IP address used for the ONOS fabric interface on the head node
#
# fabric_ip: '10.6.1.0/24'

# Low and high addresses to assign to on the fabric
#
# fabric_range_low: '10.6.1.2'
# fabric_range_high: '10.6.1.100'

# IP and range of the management network, which MaaS serves DHCP.
#
# management_ip: '10.6.0.0/24'
# management_network: '10.6.0.0/24'

# Low and high addresses to assign to on the management network
#
# management_range_low: '10.6.0.2'
# management_range_high: '10.6.0.127'

# name or IP of the POD head node, used to SSH to the head node. You can also
# specify the head node user here in user@hostname format.  This could also be
# `cord@headnode.site1.opencord.org` as specified later in inventory, if
# external DNS is set up.
headnode: 'cord@10.80.1.200'

# External interface device name on head node
external_iface: 'eth2'

# External interface ip/range on head node
external_ip: '10.80.1.200/24'

# Gateway IP address
external_gw: '10.80.1.1'

# address and port of docker registry (on the head node)
deploy_docker_registry: "10.80.1.200:5000"

# Additional network config documentation can be found here:
# https://guide.opencord.org/appendix_network_settings.html

# Additional makefile targets

# key-based SSH auth is required for some portions of the build, specifically
# the 'synchronize' task. Enable this to generate a SSH key on the config node
# and have the head node trust it.
# copy_cord_prereqs:
#   - 'config-ssh-key'

# skipTags is used in MaaS options allow various part of the deployment to be skipped
#
# switch_support - does not deploy switch boot images to the PXE server
#
# reboot - will not reboot the head node after updating its network configuration
#          this may mean the network configuration will not take effect, but will
#          also prevent you from being locked out of the server if there is a
#          network configuration error.
#
# interface_config - will not modify the network configuration of the head node,
#                    including the consistent naming of the network interfaces
skipTags:
#  - 'switch_support'
#  - 'reboot'
#  - 'interface_config'

# Inventory for ansible, used to generate inventory.ini
#
# A physical podconfig must contain this, and will minimally set the head node
# address in the `head` section..
#
# There must be config, build, head, and compute sections
inventory_groups:

  config:
    localhost:
      ansible_connection: local

  build:
    corddev:

  head:
    headnode.site1.opencord.org:
# If you do not have DNS set up that will resolve the headnode address, you can
# specify the IP address here.
#
#      ansible_host: 10.80.1.200
#
# Set these if you don't have SSH keys set up between the config node (where
# make runs) and the head node. Also, make sure to enable the 'config-ssh-key'
# further up in the file to create these.
#
#      ansible_user: cord
#      ansible_ssh_pass: cordpass

  compute:

