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

switch_image_dir: "/var/www/html"

# Add switch boot images to be downloaded to this list
switch_boot_images:
  - name: "ONL-2.0.0_ONL-OS_2017-01-04.0024-8d23df5_AMD64_INSTALLED_INSTALLER"
    url: 'https://github.com/opencord/OpenNetworkLinux/releases/download/2017-01-04.0024-8d23df5/ONL-2.0.0_ONL-OS_2017-01-04.0024-8d23df5_AMD64_INSTALLED_INSTALLER'
    checksum: "sha256:4ed90086cafc3899ddb10ab7bac8677d8ece27de3ed28ed385c12aba8d53c0a9"
  - name: "ONL-2.0.0_ONL-OS_2017-10-19.2200-1211610_AMD64_INSTALLED_INSTALLER"
    url: 'https://github.com/opencord/OpenNetworkLinux/releases/download/2017-10-19.2200-1211610/ONL-2.0.0_ONL-OS_2017-10-19.2200-1211610_AMD64_INSTALLED_INSTALLER'
    checksum: "sha256:2db316ea83f5dc761b9b11cc8542f153f092f3b49d82ffc0a36a2c41290f5421"

# Add specific models of switches here - the value of boot_image should be the
# name of an image in the switch_boot_images list given above
switch_models:
  - name: "onie-installer-x86_64-accton_as5712_54x-r0"
    boot_image: "ONL-2.0.0_ONL-OS_2017-01-04.0024-8d23df5_AMD64_INSTALLED_INSTALLER"
  - name: "onie-installer-x86_64-accton_as5812_54x-r0"
    boot_image: "ONL-2.0.0_ONL-OS_2017-01-04.0024-8d23df5_AMD64_INSTALLED_INSTALLER"
  - name: "onie-installer-x86_64-accton_as6712_32x-r0"
    boot_image: "ONL-2.0.0_ONL-OS_2017-01-04.0024-8d23df5_AMD64_INSTALLED_INSTALLER"
  - name: "onie-installer-x86_64-quanta_ly8_rangeley-r0"
    boot_image: "ONL-2.0.0_ONL-OS_2017-10-19.2200-1211610_AMD64_INSTALLED_INSTALLER"

pub_ssh_key_file_location: "{{ pub_ssh_key_location | default ('/etc/maas/.ssh') }}"

virtualbox:
    # CHANGE:
    #   'power_helper_user' specifies the user to use when SSHing to the host
    #                       that is running virtualbox
    #   'power_helper_host' specifies the IP address of host that is running
    #                       virtualbox. will be dynamically set if empty string
    power_helper_user: "{{ power_helper_user | default('cord') }}"
    power_helper_host: "{{ power_helper_host | default('') }}"

maas:
    admin_email: "{{ admin_email | default('admin@cord.lab') }}"
    admin_password: "{{ password_maas_admin | default(lookup('password', 'passwords/maas_admin.txt chars=ascii_letters,digits')) }}"
    user: "{{ maas_user | default('cord') }}"
    user_password: "{{ password_maas_user | default(lookup('password', 'passwords/maas_user.txt chars=ascii_letters,digits')) }}"
    user_email: "{{ maas_email | default('cord@cord.lab') }}"
    user_sshkey: "{{ lookup('file', pub_ssh_key_file_location+'/cord_rsa.pub') }}"

    # CHANGE:
    #   'domain' specifies the domain name configured in to MAAS
    domain: "{{ domain | default('cord.lab') }}"
    upstream_dns: "{{ upstream_dns | default('8.8.8.8 8.8.8.4') }}"
    kernel_opts: "{{ kernel_opts | default('') }}"

interfaces:
    # CHANGE:
    #   'external'   specifies the interface on which the head node is
    #                connected to the internet
    #   'management' specifies the interface on which the head node will
    #                service DHCP and PXE boot requests
    fabric: "{{ fabric_iface | default('fabric') }}"
    management: "{{ management_iface | default('mgmtbr') }}"
    external: "{{ external_iface | default('') }}"

networks:
    # CHANGE:
    #   'management' specifies the network that MAAS will allocate
    #                via DHCP over the 'management' interface specified
    #                above
    #   'bridge'     specifies the network that MAAS will allocate
    #                via DHCP to the VM created in support of XOS
    #                on the head node.
    #   'fabric'     specifies the network that will be assigned to
    #                the leaf - spine fabric
    management: "{{ management_network | default('10.6.0.0/24') }}"
    bridge: "{{ bridge_network | default('172.42.0.0/24') }}"
    fabric: "{{ fabric_ip | default('10.6.1.0/24') | ipaddr('0') }}"

    # CHANGE:
    #   'bridge' name of the bride to create that is used when connecting
    #            the VMs created in support of XOS
    bridge_name: "{{ bridge_name | default('mgmtbr') }}"

ranges:
    fabric:
        low: "{{ fabric_range_low | default(fabric_ip | default('10.6.1.0/24')) | ipaddr(2) | ipaddr('address') }}"
        high: "{{ fabric_range_high | default(fabric_ip | default('10.6.1.0/24')) | ipaddr(-3) | ipaddr('address') }}"
    management:
        low: "{{ management_range_low | default(management_ip | default('10.6.0.0/24')) | ipaddr(2) | ipaddr('address') }}"
        high: "{{ management_range_high | default(management_ip | default('10.6.0.0/24')) | ipaddr(-3) | ipaddr('address') }}"

docker:
    tag: "{{ deploy_docker_tag | default('candidate') }}"

# temporary, for ciab builds
logging_host: "10.100.198.201"
