
# 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.90.0.251'
  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
  credentials_dir: '/opt/credentials'
  pki_dir: '/opt/pki'
  ssh_pki_dir: '/opt/ssh_pki'

  # 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.90.0.251/16'
  external_iface: 'eth0'
  external_gw: '10.90.0.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
