# Deployment configuration for a phyical hardware POD
---
seedServer:
  # IP address of the head node
  ip: '10.90.0.2'

  # If the head node is being accessed via a tunnel or reponds to SSH on a non-
  # standard port, the port value should be set.
  # port: '2022'

  # User name and password used by Ansible to connect to the host for remote
  # provisioning
  user: 'ubuntu'
  password: 'ubuntu'

  # 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
  # external_iface   - the name of the interface that connects the head node to the
  #                    Internet
  # management_network - the network and mask bits to used for hosts on the management
  #                      network
  fabric_ip: '10.6.1.1/24'
  #fabric_range_low: '10.6.1.2'
  #fabric_range_high: '10.6.1.100'
  management_ip: '10.6.0.1/24'
  external_ip: '47.135.132.21/24'
  #external_iface: 'eth2'
  management_network: 10.6.0.0/24

  # the skipTags 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'

  # 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 docs/quickstart_physical.md for more information about how
  # to set these variables.
  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"

docker:
  imageVersion: candidate
