# CORD POD - Sample configuration
---

# Head node access information:
#
# ip                       - The IP address that the dev node uses to reach the head node
#
# ansible_user             - A valid sudoer user on the head node
#
# ansible_ssh_pass         - The password of the sudoer user on the head node
#
# ansible_ssh_port         - The SSH port that the dev node should use to reach the head node
#
headnode:
  ip: '192.168.1.1'
  ansible_user: 'cord'
  ansible_ssh_pass: 'cord'
  ansible_ssh_port: 22

# Other passwords:
#
# Password are optional. If not set, random passwords will be generated.
#
passwords:
#  compute_node: 'ubuntu'
#  maas_admin: 'admin'
#  maas_user: 'cord'

# Docker settings:
#
docker:
  imageVersion: 'candidate'

common:
  # CORD profile
  #
  # cord_profile           - The profile of CORD you'd like to deploy.
  #                          Options: rcord, ecord, ecord_global, mcord. For default, leave rcord
  # cord_dir               - The directory on the head node where CORD is copied to
  #
  # cord_profile_dir       - The directory on the head node where the CORD profile is copied to
  #
  cord_profile: 'rcord'
  cord_dir: '/opt/cord'
  cord_profile_dir: '/opt/cord_profile'
  #
  # Head node: external network configuration:
  #
  # external_iface         - The name of the interface that connects the head node to the
  #                          Internet (optional)
  # 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
  # external_gw            - The IP address of the external network gateway, used to reach
  #                          the Internet
  #external_iface: 'eth2'
  external_ip: '192.168.1.1/24'
  external_gw: '192.168.1.254'
  #
  # Head node: internal (management) network configuration:
  #
  # management_network     - The network and mask bits to used for hosts on the management
  #                          network
  # 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
  # management_range_low   - The lowest IP to be assigned on the internal management network
  #                          (optional)
  # management_range_high  - The highest IP to be assigned on the internal management network
  #          (optional)
  management_network: '10.6.0.0/24'
  management_ip: '10.6.0.1/24'
  #management_range_low: '10.6.0.2'
  #management_range_high: '10.6.0.127'
  #
  # Head node: fabric network configuartion:
  #
  # fabric_ip              - The IP address and mask bits to be used to configure the network
  #                          interface connected to the leaf - spine fabric
  # fabric_range_low       - The lowest IP to be assigned to the fabric switches (optional)
  #
  # fabric_range_high      - The highest IP to be assigned to the fabric switches (optional)
  #
  fabric_ip: '10.6.1.1/24'
  #fabric_range_low: '10.6.1.2'
  #fabric_range_high: '10.6.1.100'
  #
  # SkipTags options
  #
  # Allow various part of the deployment to be skipped.
  # All extra vars are optional.
  #
  # 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'
  #
  # Extra vars:
  #
  # The following variable settings can be used to customize how the network interfaces
  # are selected into the fabric and management bridge interface or ignored/excluded.
  # See the documentation for more information about how to set these variables.
  # All extra vars are optional.
  #
  extraVars:
  #  - 'fabric_include_names=<name1>,<name2>,...'
  #  - 'fabric_include_module_types=<mtype1>,<mtype2>,...'
  #  - 'fabric_include_bus_types=<btype1>,<btype2>,...'
  #  - 'fabric_exclude_names=<name1>,<name2>,...'
  #  - 'fabric_exclude_module_types=<mtype1>,<mtype2>,...'
  #  - 'fabric_exclude_bus_types=<btype1>,<btype2>,...'
  #  - 'fabric_ignore_names=<name1>,<name2>,...'
  #  - 'fabric_ignore_module_types=<mtype1>,<mtype2>,...'
  #  - 'fabric_ignore_bus_types=<btype1>,<btype2>,...'
  #  - 'management_include_names=<name1>,<name2>,...'
  #  - 'management_include_module_types=<mtype1>,<mtype2>,...'
  #  - 'management_include_bus_types=<btype1>,<btype2>,...'
  #  - 'management_exclude_names=<name1>,<name2>,...'
  #  - 'management_exclude_module_types=<mtype1>,<mtype2>,...'
  #  - 'management_exclude_bus_types=<btype1>,<btype2>,...'
  #  - 'management_ignore_names=<name1>,<name2>,...'
  #  - 'management_ignore_module_types=<mtype1>,<mtype2>,...'
  #  - 'management_ignore_bus_types=<btype1>,<btype2>,...'
  #  - 'ubuntu_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/archive.ubuntu.com/ubuntu trusty main universe"'
  #  - 'ubuntu_updates_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/archive.ubuntu.com/ubuntu trusty-updates main universe"'
  #  - 'docker_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/apt.dockerproject.org/repo ubuntu-trusty main"'
  #  - 'java_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/webupd8team/java/ubuntu trusty main"'
  #  - 'ansible_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/ansible/ansible/ubuntu trusty main"'
  #  - 'maas_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/maas/stable/ubuntu trusty main"'
  #  - 'dell_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/linux.dell.com/repo/community trusty openmanage"'
  #  - 'juju_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/juju/stable/ubuntu trusty main"'
