tripleo-heat-templates/deployment/keepalived/keepalived-container-puppet.yaml
Michele Baldessari 53364fd7a1 Fix keepalived logging on disk
There are no logs under /var/log/containers/keepalived even though we
explicitly try to capture logs on file for the keepalived container:

 [root@undercloud-0 ~]# podman exec -it keepalived sh -c 'ps -ax'
    PID TTY STAT TIME COMMAND
      1 ? Ss 0:00 dumb-init --single-child -- /usr/local/bin/kolla_start
      8 ? S 0:00 /usr/sbin/keepalived -nldD | tee -a /var/log/keepalived.log
     12 ? S 2:18 /usr/sbin/keepalived -nldD | tee -a /var/log/keepalived.log

The reason this is broken is that 'tee' is not passed to a shell but
ends up being an ignored argument of keepalived. Notice how there is no
shell process and also no tee process in the container above.

To fix that we need to pass the proper commands to a shell. This is done
in a special way like we did for the haproxy container so that kolla
does not mangle quotes and spaces.

After this fix we correctly see that the container logs on disk:
[root@undercloud-0 container-puppet]# ls -l /var/log/containers/keepalived/
-rw-r--r--. 1 root root 17483 Jan 28 15:55 keepalived.log

While we're at it we remove the usage of tee. It makes no sense to
log both on file and on stdout/stderr.

Co-Authored-By: Damien Ciabrini <dciabrin@redhat.com>

Change-Id: Id309e812f7dc8d66bd4912fce282ce72350fcbf8
Closes-Bug: #1861169
(cherry picked from commit 547a510f63)
2020-01-30 03:05:40 +00:00

168 lines
5.8 KiB
YAML

heat_template_version: rocky
description: >
OpenStack containerized Keepalived service
parameters:
DockerKeepalivedImage:
description: image
type: string
DockerKeepalivedConfigImage:
description: The container image to use for the keepalived config_volume
type: string
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
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
# TODO(emilien) Remove when Keepalived 2.0.6 is out
# https://bugs.launchpad.net/tripleo/+bug/1791238
KeepalivedRestart:
default: false
description: Whether or not restart Keepalived. Useful for Undercloud only.
type: boolean
ControlVirtualInterface:
default: ''
description: >
Interface where virtual ip will be assigned. This value will be
automatically set by the deployment tool. Overriding here will
override automatic setting.
type: string
PublicVirtualInterface:
default: ''
description: >
Interface where virtual ip will be assigned. This value will be
automatically set by the deployment tool. Overriding here will
override automatic setting.
type: string
MonitoringSubscriptionKeepalived:
default: 'overcloud-keepalived'
type: string
conditions:
control_iface_empty: {equals : [{get_param: ControlVirtualInterface}, '']}
public_iface_empty: {equals : [{get_param: PublicVirtualInterface}, '']}
resources:
ContainersCommon:
type: ../containers-common.yaml
outputs:
role_data:
description: Role data for the Keepalived role.
value:
service_name: keepalived
monitoring_subscription: {get_param: MonitoringSubscriptionKeepalived}
config_settings:
map_merge:
- tripleo::keepalived:custom_vrrp_script: 'test -S /var/lib/haproxy/stats && echo "show info" | socat /var/lib/haproxy/stats stdio'
- tripleo::keepalived::firewall_rules:
'106 keepalived vrrp':
proto: vrrp
-
if:
- control_iface_empty
- {}
- tripleo::keepalived::control_virtual_interface: {get_param: ControlVirtualInterface}
-
if:
- public_iface_empty
- {}
- tripleo::keepalived::public_virtual_interface: {get_param: PublicVirtualInterface}
service_config_settings: {}
# BEGIN DOCKER SETTINGS
puppet_config:
config_volume: 'keepalived'
puppet_tags: 'file'
step_config: |
include ::tripleo::profile::base::keepalived
config_image: {get_param: DockerKeepalivedConfigImage}
kolla_config:
/var/lib/kolla/config_files/keepalived.json:
command: "/bin/bash -c $* -- eval exec /usr/sbin/keepalived -nldD &>>/var/log/keepalived.log"
config_files:
- source: "/var/lib/kolla/config_files/src/*"
dest: "/"
merge: true
preserve_properties: true
docker_config:
step_1:
keepalived:
start_order: 0
image: {get_param: DockerKeepalivedImage}
net: host
privileged: true
restart: always
# FIXME: needs to be added to the container first
#healthcheck:
#test: /openstack/healthcheck
volumes:
list_concat:
- {get_attr: [ContainersCommon, volumes]}
-
- /var/lib/kolla/config_files/keepalived.json:/var/lib/kolla/config_files/config.json:ro
- /var/lib/config-data/puppet-generated/keepalived/:/var/lib/kolla/config_files/src:ro
- /var/log/containers/keepalived/:/var/log/:z
- /lib/modules/:/lib/modules/:ro
- /var/lib/haproxy/:/var/lib/haproxy/:z
environment:
- KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
command: /usr/local/bin/kolla_start
host_prep_tasks:
- name: Set fact for restarting Keepalived container
set_fact:
restart_keepalived: {get_param: KeepalivedRestart}
- name: Restart Keepalived container
shell: "{{container_cli}} restart keepalived"
when: restart_keepalived|bool
ignore_errors: True
- name: load ip_vs module
import_role:
name: tripleo-module-load
vars:
modules:
- name: ip_vs
- name: create persistent directories
file:
path: "{{ item.path }}"
state: directory
setype: "{{ item.setype }}"
with_items:
- { 'path': /var/log/containers/keepalived, 'setype': svirt_sandbox_file_t }
- { 'path': /var/log/keepalived, 'setype': svirt_sandbox_file_t }
- name: keepalived logs readme
copy:
dest: /var/log/keepalived/readme.txt
content: |
Log files from keepalived containers can be found under
/var/log/containers/keepalived.
ignore_errors: true
post_upgrade_tasks:
- when: step|int == 1
import_role:
name: tripleo-docker-rm
vars:
containers_to_rm:
- keepalived