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


---
# vars/frontend-rcord.yaml
# creates a mock R-CORD pod

site_name: mock-rcord
deployment_type: "Mock R-CORD Pod"

xos_admin_user: "xosadmin@opencord.org"
xos_admin_pass: "{{ lookup('password', credentials_dir ~ '/xosadmin@opencord.org chars=ascii_letters,digits') }}"
xos_admin_first: XOS
xos_admin_last: Admin

credentials_dir: "{{ playbook_dir }}/credentials"

frontend_only: True
use_openstack: False
use_vtn: True
needs_pki_install: True

build_xos_base_image: True

xos_tosca_config_templates:
  - management-net.yaml
  - mock-onos.yaml
  - cord-services.yaml
  - public-net.yaml
    #  - test-subscriber.yaml # broken? Missing lan_network config on vOLT ?
  - xos-gui-extensions.yml

# GUI Config [new GUI]
gw_port: 3000
gui_api_endpoint: "/xosapi/v1"
gui_websocket: "/"
gui_project_name: "R-CORD"
gui_favicon: "cord-favicon.png"
gui_background: "cord-bg.jpg"
gui_payoff: "Your VNF orchestrator"
gui_logo: "cord-logo.png"
gui_routes:
  - label: "Slices"
    state: "xos.core.slice"
  - label: "Nodes"
    state: "xos.core.node"
  - label: "Instances"
    state: "xos.core.instance"

enabled_gui_extensions:
  - name: vtr
    path: orchestration/xos_services/vtr/xos/gui
  - name: rcord
    path: orchestration/profiles/rcord/xos/gui

# GUI branding [OLD GUI to be removed]
gui_branding_name: "CORD"
gui_branding_icon: "/static/cord-logo.png"
gui_branding_favicon: "/static/cord-favicon.png"
gui_branding_bg: "/static/cord-bg.jpg"

# paths defined in manifest/default.xml
xos_services:
  - name: volt
    path: onos-apps/apps/olt
    keypair: volt_rsa
  - name: onos
    path: orchestration/xos_services/onos-service
    keypair: onos_rsa
  - name: vrouter
    path: orchestration/xos_services/vrouter
  - name: vsg
    path: orchestration/xos_services/vsg
    keypair: vsg_rsa
  - name: vtr
    path: orchestration/xos_services/vtr
    keypair: vsg_rsa
  - name: fabric
    path: orchestration/xos_services/fabric

profile_library: "rcord"

# site domain suffix
site_suffix: opencord.org

# SSL server certificate generation
server_certs:
  - cn: "xos-core.{{ site_suffix }}"
    subj: "/C=US/ST=California/L=Menlo Park/O=ON.Lab/OU=Test Deployment/CN=xos-core.{{ site_suffix }}"
    altnames:
      - "DNS:xos-core.{{ site_suffix }}"

xos_images: []