# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
---
# This playbook deploys Openwhisk Controllers.

- hosts: controllers
  vars:
    #
    # host_group - usually "{{ groups['...'] }}" where '...' is what was used
    #   for 'hosts' above.  The hostname of each host will be looked up in this
    #   group to assign a zero-based index.  That index will be used in concert
    #   with 'name_prefix' below to assign a host/container name.
    host_group: "{{ groups['controllers'] }}"
    #
    # name_prefix - a unique prefix for this set of controllers.  The prefix
    #   will be used in combination with an index (determined using
    #   'host_group' above) to name host/controllers.
    name_prefix: "controller"
    #
    # controller_index_base - the deployment process allocates host docker
    #   ports to individual controllers based on their indices.  This is an
    #   additional offset to prevent collisions between different controller
    #   groups. Usually 0 if only one group is being deployed, otherwise
    #   something like "{{ groups['firstcontrollergroup']|length }}"
    controller_index_base: 0
    #
    # select which additional capabilities (from the controller role) need
    #   to be added to the controller.  Plugin will override default
    #   configuration settings.  (Plugins are found in the
    #   'roles/controller/tasks' directory for now.)
    controller_plugins:
      # Join an akka cluster rather than running standalone akka
      - "join_akka_cluster"

  roles:
    - controller
