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