tripleo-heat-templates/deployment/octavia/octavia-housekeeping-container-puppet.yaml
Gregory Thiemonge 15744039dc Increase stop_grace_period for Octavia controller services
The stop_grace_period for Octavia should be greater than the longest
task executed by Octavia.
The timeout of longest task in Octavia is currently set to 10 minutes
[0].

Updating the stop_grace_period from 5min to 10min30 will prevent
failures during updates. If a really long task is running Octavia (for
instance a failover during a network outage), it will timeout in Octavia
and Octavia will exit gracefully.

[0] https://review.opendev.org/c/openstack/octavia/+/637077

Change-Id: I05cd4a54c35479ca06580f541042948f69c7f532
2022-03-14 12:00:21 +01:00

187 lines
6.9 KiB
YAML

heat_template_version: wallaby
description: >
OpenStack Octavia service configured with Puppet
parameters:
ContainerOctaviaHousekeepingImage:
description: image
type: string
tags:
- role_specific
ContainerOctaviaConfigImage:
description: The container image to use for the octavia config_volume
type: string
tags:
- role_specific
OctaviaHousekeepingLoggingSource:
type: json
default:
tag: openstack.octavia.housekeeping
file: /var/log/containers/octavia/housekeeping.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. Use
parameter_merge_strategies to merge it with the defaults.
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
OctaviaAmphoraExpiryAge:
default: 0
description: The interval in seconds after which an unused Amphora will
be considered expired and cleaned up. If left to 0, the
configuration will not be set and the system will use
the service defaults.
type: number
MonitoringSubscriptionOctaviaHousekeeping:
default: 'overcloud-octavia-housekeeping'
type: string
conditions:
amphora_expiry_set:
not: {equals: [{get_param: OctaviaAmphoraExpiryAge}, 0]}
resources:
ContainersCommon:
type: ../containers-common.yaml
MySQLClient:
type: ../database/mysql-client.yaml
OctaviaBase:
type: ./octavia-base.yaml
properties:
EndpointMap: {get_param: EndpointMap}
ServiceData: {get_param: ServiceData}
ServiceNetMap: {get_param: ServiceNetMap}
RoleName: {get_param: RoleName}
RoleParameters: {get_param: RoleParameters}
RoleParametersValue:
type: OS::Heat::Value
properties:
type: json
value:
map_replace:
- map_replace:
- ContainerOctaviaHousekeepingImage: ContainerOctaviaHousekeepingImage
ContainerOctaviaConfigImage: ContainerOctaviaConfigImage
- values: {get_param: [RoleParameters]}
- values:
ContainerOctaviaHousekeepingImage: {get_param: ContainerOctaviaHousekeepingImage}
ContainerOctaviaConfigImage: {get_param: ContainerOctaviaConfigImage}
outputs:
role_data:
description: Role data for the Octavia housekeeping role.
value:
service_name: octavia_housekeeping
monitoring_subscription: {get_param: MonitoringSubscriptionOctaviaHousekeeping}
config_settings:
map_merge:
- get_attr: [OctaviaBase, role_data, config_settings]
- if:
- amphora_expiry_set
- octavia::housekeeping::amphora_expiry_age: {get_param: OctaviaAmphoraExpiryAge}
service_config_settings:
rsyslog:
tripleo_logging_sources_octavia_housekeeping:
- {get_param: OctaviaHousekeepingLoggingSource}
# BEGIN DOCKER SETTINGS #
puppet_config:
config_volume: octavia
puppet_tags: octavia_config
step_config:
list_join:
- "\n"
- - "include tripleo::profile::base::octavia::housekeeping"
- {get_attr: [MySQLClient, role_data, step_config]}
config_image: {get_attr: [RoleParametersValue, value, ContainerOctaviaConfigImage]}
kolla_config:
/var/lib/kolla/config_files/octavia_housekeeping.json:
command: /usr/bin/octavia-housekeeping --config-file /etc/octavia/octavia.conf --config-file /etc/octavia/post-deploy.conf --log-file /var/log/octavia/housekeeping.log --config-dir /etc/octavia/conf.d/octavia-housekeeping
config_files:
- source: "/var/lib/kolla/config_files/src/*"
dest: "/"
merge: true
preserve_properties: true
permissions:
- path: /var/log/octavia
owner: octavia:octavia
recurse: true
docker_config:
step_2:
octavia_housekeeping_init_dirs:
start_order: 0
image: &octavia_housekeeping_image {get_attr: [RoleParametersValue, value, ContainerOctaviaHousekeepingImage]}
user: root
net: none
volumes:
# NOTE(mandre) we need extra dir for the service in /etc/octavia/conf.d
# It is normally created as part of the RPM install, but it is
# missing here because we use the same config_volume for all
# octavia services, hence the same container image to generate
# configuration.
- /var/lib/config-data/puppet-generated/octavia/etc/octavia:/etc/octavia:z
command: ['/bin/bash', '-c', 'mkdir -p /etc/octavia/conf.d/octavia-housekeeping; chown -R octavia:octavia /etc/octavia/conf.d/octavia-housekeeping']
step_5:
octavia_housekeeping:
start_order: 2
stop_grace_period: 630
image: *octavia_housekeeping_image
net: host
privileged: false
restart: always
healthcheck:
test: /openstack/healthcheck
volumes:
list_concat:
- {get_attr: [ContainersCommon, volumes]}
- - /var/lib/kolla/config_files/octavia_housekeeping.json:/var/lib/kolla/config_files/config.json:ro
- /var/lib/config-data/puppet-generated/octavia:/var/lib/kolla/config_files/src:ro
- /var/log/containers/octavia:/var/log/octavia:z
environment:
KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
update_tasks: {get_attr: [OctaviaBase, role_data, update_tasks]}
upgrade_tasks: {get_attr: [OctaviaBase, role_data, upgrade_tasks]}
host_prep_tasks:
- name: create persistent directories
file:
path: "{{ item.path }}"
state: directory
setype: "{{ item.setype }}"
mode: "{{ item.mode }}"
with_items:
- { 'path': /var/log/containers/octavia, 'setype': container_file_t, 'mode': '0750' }
external_upgrade_tasks:
- when:
- step|int == 1
tags:
- never
- system_upgrade_transfer_data
- system_upgrade_stop_services
block:
- name: Stop octavia housekeeping container
import_role:
name: tripleo_container_stop
vars:
tripleo_containers_to_stop:
- octavia_housekeeping
tripleo_delegate_to: "{{ groups['octavia_housekeeping'] | default([]) }}"