
# 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 a physical hardware POD
---

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

common:
  # set to the profile of cord you want to install
  cord_profile: 'rcord'

  # cord dir is shared to corddev VM, causing permissions issues if these aren't set
  cord_dir: '/opt/cord'
  cord_profile_dir: '/opt/cord_profile'

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

  # Network address information for the head node:
  #
  # fabric_ip     - the IP address and mask bits to be used to configure the network
  #                 interface connected to the leaf - spine fabric
  #
  # management_ip - the IP address and mask bits to be used to configure the network
  #                 interface connecting the head node to the POD internal
  #                 management network. The head node will deliver DHCP addresses to
  #                 the other compute nodes over this interface
  #
  # external_ip   - the IP address and mask bits to be used to configure the network
  #                 interface connecting the head node (and the POD) to the
  #                 Internet. All traffic in the POD to external hosts will be
  #                 NAT-ed through this interface
  fabric_ip: '10.6.1.1/24'
  management_ip: '10.6.0.1/24'
  external_ip: '10.192.4.62/20'
  external_iface: 'enp4s0f1'
  external_gw: '10.192.4.1'
  skipTags:

passwords:
  compute_node: "ubuntu"
  maas_admin: "admin"
  maas_user: "cord"

docker:
  imageVersion: candidate

otherNodes:
  # Experimental
  #
  # Specifies the subnet and address range that will be used to allocate IP addresses
  # to the compute nodes as they are deployed into the POD.
  fabric:
    network: 10.6.1.1/24
    range_low: 10.6.1.2
    range_high: 10.6.1.253
