tripleo-heat-templates/deployment/nova/nova-scheduler-container-pu...

325 lines
13 KiB
YAML

heat_template_version: rocky
description: >
OpenStack containerized Nova Scheduler service
parameters:
ContainerNovaSchedulerImage:
description: image
type: string
ContainerNovaConfigImage:
description: The container image to use for the nova config_volume
type: string
NovaSchedulerLoggingSource:
type: json
default:
tag: openstack.nova.scheduler
file: /var/log/containers/nova/nova-scheduler.log
EndpointMap:
default: {}
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
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
RoleName:
default: ''
description: Role name on which the service is applied
type: string
RoleParameters:
default: {}
description: Parameters specific to the role
type: json
NovaSchedulerAvailableFilters:
default: []
description: List of scheduler available filters
type: comma_delimited_list
NovaSchedulerEnabledFilters:
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
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.
NovaSchedulerWorkers:
default: 0
description: Number of workers for Nova Scheduler services.
type: number
NovaSchedulerQueryImageType:
type: boolean
default: true
description: >
This setting causes the scheduler to ask placement only for compute
hosts that support the disk_format of the image used in the request.
NovaSchedulerLimitTenantsToPlacementAggregate:
default: false
description: >
This value allows to have tenant isolation with placement. It ensures
hosts in tenant-isolated host aggregate and availability zones will
only be available to specific set of tenants.
type: boolean
NovaSchedulerPlacementAggregateRequiredForTenants:
default: false
description: >
This setting, when `NovaSchedulerLimitTenantsToPlacementAggregate` is true,
controls whether or not a tenant with no aggregate affinity will be allowed
to schedule to any available node.
If aggregates are used to limit some tenants but not all, then this should be
False. If all tenants should be confined via aggregate, then this should be True.
type: boolean
NovaSchedulerEnableIsolatedAggregateFiltering:
default: false
description: >
This setting allows the scheduler to restrict hosts in aggregates based on
matching required traits in the aggregate metadata and the instance flavor/image.
If an aggregate is configured with a property with key trait:$TRAIT_NAME and value
required, the instance flavor extra_specs and/or image metadata must also contain
trait:$TRAIT_NAME=required to be eligible to be scheduled to hosts in that aggregate.
type: boolean
NovaSchedulerQueryPlacementForAvailabilityZone:
default: false
description: >
This setting allows the scheduler to look up a host aggregate with metadata
key of availability zone set to the value provided by incoming request, and
request result from placement be limited to that aggregate.
type: boolean
NovaSchedulerQueryPlacementForRoutedNetworkAggregates:
default: false
description: >
This setting allows the scheduler to verify if the requested networks or port
are related to neutron routed network. This requires that the related
aggregates to be reported in placement, so only hosts within the asked
aggregates would be accepted.
type: boolean
NovaSchedulerHostSubsetSize:
default: 1
description: >
Size of subset of best hosts selected by scheduler.
type: number
NovaSchedulerShuffleBestSameWeighedHosts:
default: false
description: >
Enable spreading the instances between hosts with the same best weight.
type: boolean
# DEPRECATED: the following options are deprecated and are currently maintained
# for backwards compatibility. They will be removed in future release.
NovaSchedulerDefaultFilters:
type: comma_delimited_list
default: []
description: >
(DEPRECATED) 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.
conditions:
nova_scheduler_workers_zero: {equals : [{get_param: NovaSchedulerWorkers}, 0]}
scheduler_default_filters: {not: {equals: [{get_param: NovaSchedulerDefaultFilters}, []]}}
disabled_scheduler_enabled_filters: {equals: [{get_param: NovaSchedulerEnabledFilters}, []]}
parameter_groups:
- label: deprecated
description: |
The following parameters are deprecated and will be removed. They should not
be relied on for new deployments. If you have concerns regarding deprecated
parameters, please contact the TripleO development team on IRC or the
Openstack mailing list.
parameters:
- NovaSchedulerDefaultFilters
resources:
ContainersCommon:
type: ../containers-common.yaml
MySQLClient:
type: ../../deployment/database/mysql-client.yaml
NovaLogging:
type: OS::TripleO::Services::Logging::NovaCommon
properties:
ContainerNovaImage: {get_param: ContainerNovaSchedulerImage}
NovaServiceName: 'scheduler'
NovaBase:
type: ./nova-base-puppet.yaml
properties:
ServiceData: {get_param: ServiceData}
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_param: EndpointMap}
RoleName: {get_param: RoleName}
RoleParameters: {get_param: RoleParameters}
NovaApiDBClient:
type: ./nova-apidb-client-puppet.yaml
properties:
ServiceData: {get_param: ServiceData}
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_param: EndpointMap}
RoleName: {get_param: RoleName}
RoleParameters: {get_param: RoleParameters}
NovaDBClient:
type: ./nova-db-client-puppet.yaml
properties:
ServiceData: {get_param: ServiceData}
ServiceNetMap: {get_param: ServiceNetMap}
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]
- get_attr: [NovaApiDBClient, role_data, config_settings]
- get_attr: [NovaDBClient, role_data, config_settings]
- get_attr: [NovaLogging, config_settings]
- nova::scheduler::filter::scheduler_available_filters: {get_param: NovaSchedulerAvailableFilters}
nova::scheduler::filter::scheduler_enabled_filters:
if:
- and: [scheduler_default_filters, disabled_scheduler_enabled_filters]
- {get_param: NovaSchedulerDefaultFilters}
- {get_param: NovaSchedulerEnabledFilters}
nova::scheduler::filter::scheduler_max_attempts: {get_param: NovaSchedulerMaxAttempts}
nova::scheduler::filter::scheduler_host_subset_size: {get_param: NovaSchedulerHostSubsetSize}
nova::scheduler::filter::shuffle_best_same_weighed_hosts: {get_param: NovaSchedulerShuffleBestSameWeighedHosts}
nova::scheduler::discover_hosts_in_cells_interval: {get_param: NovaSchedulerDiscoverHostsInCellsInterval}
nova::scheduler::query_placement_for_image_type_support: {get_param: NovaSchedulerQueryImageType}
nova::scheduler::limit_tenants_to_placement_aggregate: {get_param: NovaSchedulerLimitTenantsToPlacementAggregate}
nova::scheduler::placement_aggregate_required_for_tenants: {get_param: NovaSchedulerPlacementAggregateRequiredForTenants}
nova::scheduler::enable_isolated_aggregate_filtering: {get_param: NovaSchedulerEnableIsolatedAggregateFiltering}
nova::scheduler::query_placement_for_availability_zone: {get_param: NovaSchedulerQueryPlacementForAvailabilityZone}
nova::scheduler::query_placement_for_routed_network_aggregates: {get_param: NovaSchedulerQueryPlacementForRoutedNetworkAggregates}
-
if:
- nova_scheduler_workers_zero
- {}
- nova::scheduler::workers: {get_param: NovaSchedulerWorkers}
service_config_settings:
rabbitmq: {get_attr: [NovaBase, role_data, service_config_settings], rabbitmq}
mysql:
map_merge:
- get_attr: [NovaApiDBClient, role_data, service_config_settings, mysql]
- get_attr: [NovaDBClient, role_data, service_config_settings, mysql]
rsyslog:
tripleo_logging_sources_nova_scheduler:
- {get_param: NovaSchedulerLoggingSource}
# BEGIN DOCKER SETTINGS
puppet_config:
config_volume: nova
puppet_tags: nova_config
step_config:
list_join:
- "\n"
- - include tripleo::profile::base::nova::scheduler
- {get_attr: [MySQLClient, role_data, step_config]}
config_image: {get_param: ContainerNovaConfigImage}
kolla_config:
/var/lib/kolla/config_files/nova_scheduler.json:
command:
list_join:
- ' '
- - /usr/bin/nova-scheduler
- get_attr: [NovaLogging, cmd_extra_args]
config_files:
- source: "/var/lib/kolla/config_files/src/*"
dest: "/"
merge: true
preserve_properties: true
permissions:
- path: /var/log/nova
owner: nova:nova
recurse: true
docker_config:
step_4:
nova_scheduler:
image: {get_param: ContainerNovaSchedulerImage}
net: host
privileged: false
restart: always
healthcheck: {get_attr: [ContainersCommon, healthcheck_rpc_port]}
volumes:
list_concat:
- {get_attr: [ContainersCommon, volumes]}
- {get_attr: [NovaLogging, volumes]}
-
- /var/lib/kolla/config_files/nova_scheduler.json:/var/lib/kolla/config_files/config.json:ro
- /var/lib/config-data/puppet-generated/nova:/var/lib/kolla/config_files/src:ro
environment:
KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
deploy_steps_tasks:
- name: validate nova-scheduler container state
podman_container_info:
name: nova_scheduler
register: nova_scheduler_infos
failed_when:
- nova_scheduler_infos.containers.0.Healthcheck.Status is defined
- "'healthy' not in nova_scheduler_infos.containers.0.Healthcheck.Status"
retries: 10
delay: 30
tags:
- opendev-validation
- opendev-validation-nova
when:
- container_cli == 'podman'
- not container_healthcheck_disabled
- step|int == 5
host_prep_tasks:
list_concat:
- {get_attr: [NovaLogging, host_prep_tasks]}
- - name: enable virt_sandbox_use_netlink for healthcheck
seboolean:
name: virt_sandbox_use_netlink
persistent: yes
state: yes
external_upgrade_tasks:
- when:
- step|int == 1
tags:
- never
- system_upgrade_transfer_data
- system_upgrade_stop_services
block:
- name: Stop nova scheduler container
import_role:
name: tripleo_container_stop
vars:
tripleo_containers_to_stop:
- nova_scheduler
tripleo_delegate_to: "{{ groups['nova_scheduler'] | default([]) }}"