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

# controlkube Scenario - installs XOS/ONOS on kubernetes, similar to controlpod

frontend_only: False
use_k8s: True
use_maas: False
use_openstack: False

# create a cord_profile dir next to the cord checkout
config_cord_dir: "{{ ( playbook_dir ~ '/../..' ) | realpath }}"
config_cord_profile_dir: "{{ ( playbook_dir ~ '/../../../cord_profile' ) | realpath }}"

create_configdirs_become: False

build_cord_dir: /opt/cord

# Vagrant VM configuration
vagrant_box: "bento/ubuntu-16.04"

head_vm_mem: 2048
head_vm_cpu: 4

compute_vm_mem: 2048
compute_vm_cpu: 4

buildnode: head1
headnode: head1

vagrant_vms:
  - head1
  - compute1
  - compute2

# Make build config
build_targets:
  - start-xos-helm

config_ssh_key_prereqs:
  - vagrant-ssh-install

copy_cord_prereqs:
  - vagrant-ssh-install

cord_config_prereqs:
  - vagrant-ssh-install
  - copy-cord

prep_buildnode_prereqs:
  - copy-cord
  - copy-config

# Run build prep before head prep, when build == head
prep_headnode_prereqs:
  - prep-buildnode

# Wait until headnode prepped before building containers, for consistent DNS
docker_images_prereqs:
  - prep-headnode

# FIXME: check out and use this kubespray commit (set on 2018-03-02 by zdw):
# https://github.com/kubernetes-incubator/kubespray/commit/b75b6b513b7d26a0fce3dd55a77ef538d18433a5
kubespray_version: b75b6b513b7d26a0fce3dd55a77ef538d18433a5

# have kubespray skip docker installation
skipTags:
  - docker

# node topology, used to bring up management interfaces
physical_node_list:
  - name: head1
    ipv4_last_octet: 1
    aliases:
      - head
  - name: compute1
    ipv4_last_octet: 17
  - name: compute2
    ipv4_last_octet: 18

management_net_bridge: "mgmtbridge"

vm_management_network_name: cordmgmt
vm_public_network_name: cordpub
vm_public_network_cidr: "10.230.100.0/24"

# images for imagebuilder to build/pull (tagged elsewhere)
docker_image_whitelist:
  - "xosproject/xos-base"
  - "xosproject/xos"
  - "xosproject/xos-ui"
  - "xosproject/xos-client"
  - "xosproject/xos-corebuilder"
  - "xosproject/xos-gui"
  - "xosproject/xos-gui-builder"
  - "xosproject/xos-libraries"
  - "xosproject/xos-postgres"
  - "xosproject/xos-tosca"
  - "xosproject/xos-ws"
  - "xosproject/chameleon"
  - "xosproject/xos-synchronizer-base"
  - "nginx"
  - "onosproject/onos"
  - "opencord/mavenrepo"
  - "redis"
  - "node"
  - "sebp/elk"

# Ansible Inventory
inventory_groups:

  config:
    localhost:
      ansible_connection: local

  build:
    head1:

  head:
    head1:

  compute:
    compute1:
    compute2:

