heat_template_version: queens

description: >
  OpenStack Nova Scheduler service configured with Puppet

parameters:
  ServiceData:
    default: {}
    description: Dictionary packing service data
    type: json
  ServiceNetMap:
    default: {}
    description: Mapping of service_name -> network name. Typically set
                 via parameter_defaults in the resource registry.  This
                 mapping overrides those in ServiceNetMapDefaults.
    type: json
  DefaultPasswords:
    default: {}
    type: json
  RoleName:
    default: ''
    description: Role name on which the service is applied
    type: string
  RoleParameters:
    default: {}
    description: Parameters specific to the role
    type: json
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json
  NovaSchedulerAvailableFilters:
    default: []
    description: List of scheduler available filters
    type: comma_delimited_list
  NovaSchedulerDefaultFilters:
    type: comma_delimited_list
    default: []
    description: >
      An array of filters used by Nova to filter a node.These filters will be
      applied in the order they are listed, so place your most restrictive
      filters first to make the filtering process more efficient.
  NovaSchedulerMaxAttempts:
    type: number
    default: 3
    description: >
     Maximum number of attempts the scheduler will make when deploying the
     instance. You should keep it greater or equal to the number of bare
     metal nodes you expect to deploy at once to work around potential race
     conditions when scheduling.
  MonitoringSubscriptionNovaScheduler:
    default: 'overcloud-nova-scheduler'
    type: string
  NovaSchedulerLoggingSource:
    type: json
    default:
      tag: openstack.nova.scheduler
      path: /var/log/nova/nova-scheduler.log
  NovaSchedulerDiscoverHostsInCellsInterval:
    type: number
    default: -1
    description: >
      This value controls how often (in seconds) the scheduler should
      attempt to discover new hosts that have been added to cells.
      The default value of -1 disables the periodic task completely.
      It is recommended to set this parameter for deployments using Ironic.

resources:
  NovaBase:
    type: ./nova-base.yaml
    properties:
      ServiceData: {get_param: ServiceData}
      ServiceNetMap: {get_param: ServiceNetMap}
      DefaultPasswords: {get_param: DefaultPasswords}
      EndpointMap: {get_param: EndpointMap}
      RoleName: {get_param: RoleName}
      RoleParameters: {get_param: RoleParameters}

outputs:
  role_data:
    description: Role data for the Nova Scheduler service.
    value:
      service_name: nova_scheduler
      monitoring_subscription: {get_param: MonitoringSubscriptionNovaScheduler}
      config_settings:
        map_merge:
          - get_attr: [NovaBase, role_data, config_settings]
          - nova::ram_allocation_ratio: '1.0'
            nova::scheduler::filter::scheduler_available_filters: {get_param: NovaSchedulerAvailableFilters}
            nova::scheduler::filter::scheduler_default_filters: {get_param: NovaSchedulerDefaultFilters}
            nova::scheduler::filter::scheduler_max_attempts: {get_param: NovaSchedulerMaxAttempts}
            nova::scheduler::discover_hosts_in_cells_interval: {get_param: NovaSchedulerDiscoverHostsInCellsInterval}
      service_config_settings:
        fluentd:
          tripleo_fluentd_groups_nova_scheduler:
            - nova
          tripleo_fluentd_sources_nova_scheduler:
            - {get_param: NovaSchedulerLoggingSource}
      step_config: |
        include tripleo::profile::base::nova::scheduler
      upgrade_tasks:
        - name: Stop nova_scheduler service
          when: step|int == 1
          service: name=openstack-nova-scheduler state=stopped