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

  # User name, password, and ssh port used by Ansible to connect to the host for remote
  # provisioning
  ansible_user: 'ubuntu'
  ansible_ssh_pass: 'ubuntu'
  ansible_ssh_port: 22

  # 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'
  #management_range_low: '10.6.0.2'
  #management_range_high: '10.6.0.127'
  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"

# If passwords are not set, random passwords will be generated
passwords:
  #compute_node: ubuntu
  #maas_admin: admin
  #maas_user: cord

docker:
  imageVersion: candidate
