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


---
# profile_manifests/opencloud.yml
# OpenCloud Profile Manifest

# Site configuration
site_name: generic-opencloud
site_humanname: "Generic OpenCloud"
site_suffix: "{{ site_name }}.opencloud.us"
deployment_type: campus

# Feature toggles
use_maas: False

# XOS config
xos_tosca_config_templates:
  - xos-gui-extensions.yml
  - vtn-service.yaml
  - management-net.yaml

# GUI Config [new GUI], used in app.config.js.j2 and style.config.js.j2
gui_project_name: "OpenCloud"
gui_favicon: "opencloud-favicon.png"
gui_background: "opencloud-bg.jpg"
gui_payoff: "A Value-Added Cloud for the Internet2 Community"
gui_logo: "opencloud-logo.png"

# paths defined in manifest/default.xml
xos_services:
  - name: vtn
    path: orchestration/xos_services/vtn-service
    keypair: vsg_rsa
  - name: openstack
    path: orchestration/xos_services/openstack
  - name: onos
    path: orchestration/xos_services/onos-service
    keypair: onos_rsa
  - name: vrouter
    path: orchestration/xos_services/vrouter

# External interface name on compute nodes
compute_external_interface: eth0

# VTN network configuration
management_network_cidr: 172.27.0.0/24
management_network_ip: 172.27.0.1/24
data_plane_ip: 10.168.0.253/24

# Juju setup
charm_versions:
  ceilometer-agent: "cs:trusty/ceilometer-agent-13"
  ceilometer: "cs:trusty/ceilometer-17"
  glance: "cs:trusty/glance-28"
  keystone: "cs:trusty/keystone-33"
  mongodb: "cs:trusty/mongodb-33"
  neutron-api: "cs:~cordteam/trusty/neutron-api-6"
  nova-cloud-controller: "cs:trusty/nova-cloud-controller-64"
  nova-compute: "cs:~cordteam/trusty/nova-compute-3"
  ntp: "cs:trusty/ntp-14"
  openstack-dashboard: "cs:trusty/openstack-dashboard-19"
  percona-cluster: "cs:trusty/percona-cluster-31"
  rabbitmq-server: "cs:trusty/rabbitmq-server-42"

head_lxd_list:
  - name: "juju-1"
    service: "juju"
    aliases:
       - "juju"
    ipv4_last_octet: 50

  - name: "ceilometer-1"
    service: "ceilometer"
    aliases:
      - "ceilometer"
    ipv4_last_octet: 51
    forwarded_ports:
      - { ext: 8777, int: 8777 }

  - name: "glance-1"
    service: "glance"
    aliases:
      - "glance"
    ipv4_last_octet: 52
    forwarded_ports:
      - { ext: 9292, int: 9292 }

  - name: "keystone-1"
    service: "keystone"
    aliases:
      - "keystone"
    ipv4_last_octet: 53
    forwarded_ports:
      - { ext: 35357, int: 35357 }
      - { ext: 4990, int: 4990 }
      - { ext: 5000, int: 5000 }

  - name: "percona-cluster-1"
    service: "percona-cluster"
    aliases:
      - "percona-cluster"
    ipv4_last_octet: 54

  - name: "neutron-api-1"
    service: "neutron-api"
    aliases:
      - "neutron-api"
    ipv4_last_octet: 55
    forwarded_ports:
      - { ext: 9696, int: 9696 }

  - name: "nova-cloud-controller-1"
    service: "nova-cloud-controller"
    aliases:
      - "nova-cloud-controller"
    ipv4_last_octet: 56
    forwarded_ports:
      - { ext: 8774, int: 8774 }

  - name: "openstack-dashboard-1"
    service: "openstack-dashboard"
    aliases:
      - "openstack-dashboard"
    ipv4_last_octet: 57
    forwarded_ports:
      - { ext: 8080, int: 80 }

  - name: "rabbitmq-server-1"
    service: "rabbitmq-server"
    aliases:
      - "rabbitmq-server"
    ipv4_last_octet: 58

  - name: "mongodb-1"
    service: "mongodb"
    aliases:
      - "mongodb"
    ipv4_last_octet: 59

lxd_service_list:
  - ceilometer
  - glance
  - keystone
  - mongodb
  - neutron-api
  - nova-cloud-controller
  - openstack-dashboard
  - percona-cluster
  - rabbitmq-server

standalone_service_list:
  - ceilometer-agent
  - ntp

service_relations:
  - name: keystone
    relations: [ "percona-cluster", ]

  - name: nova-cloud-controller
    relations: [ "percona-cluster", "rabbitmq-server", "glance", "keystone", ]

  - name: glance
    relations: [ "percona-cluster", "keystone", ]

  - name: neutron-api
    relations: [ "keystone", "percona-cluster", "rabbitmq-server", "nova-cloud-controller", ]

  - name: openstack-dashboard
    relations: [ "keystone", ]

  - name: ceilometer
    relations: [ "mongodb", "rabbitmq-server" ]

  - name: "ceilometer:identity-service"
    relations: [ "keystone:identity-service", ]

  - name: "ceilometer:ceilometer-service"
    relations: [ "ceilometer-agent:ceilometer-service", ]


compute_relations:
  - name: nova-compute
    relations: [ "ceilometer-agent", "glance", "nova-cloud-controller", ]

  - name: "nova-compute:shared-db"
    relations: [ "percona-cluster:shared-db", ]

  - name: "nova-compute:amqp"
    relations: [ "rabbitmq-server:amqp", ]

  - name: ntp
    relations: [ "nova-compute", ]


xos_images:
  - name: "trusty-server-multi-nic"
    url: "http://www.vicci.org/opencloud/trusty-server-cloudimg-amd64-disk1.img"
    checksum: "sha256:c2d0ffc937aeb96016164881052a496658efeb98959dc68e73d9895c5d9920f7"

