Merge "Convert role to use a common systemd service role"

This commit is contained in:
Zuul 2018-10-26 21:41:53 +00:00 committed by Gerrit Code Review
commit 16125d6246
11 changed files with 83 additions and 144 deletions

View File

@ -181,10 +181,12 @@ octavia_services:
octavia-api:
group: octavia-api
service_name: octavia-api
start_order: 4
init_config_overrides: "{{ octavia_api_init_overrides }}"
execstarts: "{{ octavia_bin }}/uwsgi --ini /etc/uwsgi/octavia-api.ini"
execreloads: "{{ octavia_bin }}/uwsgi --reload /var/run/octavia-api/octavia-api.pid"
wsgi_overrides: "{{ octavia_api_uwsgi_ini_overrides }}"
wsgi_app: True
log_string: "--logto "
wsgi_name: octavia-wsgi
uwsgi_port: "{{ octavia_service_port }}"
uwsgi_bind_address: "{{ octavia_uwsgi_bind_address }}"
@ -192,15 +194,24 @@ octavia_services:
octavia-worker:
group: octavia-worker
service_name: octavia-worker
start_order: 1
init_config_overrides: "{{ octavia_worker_init_overrides }}"
execstarts: "{{ octavia_bin }}/octavia-worker"
execreloads: "/bin/kill -HUP $MAINPID"
octavia-housekeeping:
group: octavia-housekeeping
service_name: octavia-housekeeping
start_order: 3
init_config_overrides: "{{ octavia_housekeeping_init_overrides }}"
execstarts: "{{ octavia_bin }}/octavia-housekeeping"
execreloads: "/bin/kill -HUP $MAINPID"
octavia-health-manager:
group: octavia-health_manager
service_name: octavia-health-manager
start_order: 2
init_config_overrides: "{{ octavia_health_manager_init_overrides }}"
execstarts: "{{ octavia_bin }}/octavia-health-manager"
execreloads: "/bin/kill -HUP $MAINPID"
# Required secrets for the role
octavia_required_secrets:

View File

@ -13,28 +13,22 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- name: Reload systemd daemon
systemd:
daemon_reload: yes
notify:
- Restart octavia services
- name: Restart octavia services
service:
name: "{{ item.value.service_name }}"
name: "{{ item.service_name }}"
state: "restarted"
with_dict: "{{ octavia_services }}"
with_items: "{{ filtered_octavia_services }}"
listen:
- "venv changed"
- name: Start octavia services
service:
name: "{{ item.value.service_name }}"
name: "{{ item.service_name }}"
state: "started"
with_dict: "{{ octavia_services }}"
with_items: "{{ filtered_octavia_services }}"
- name: Stop octavia services
service:
name: "{{ item.value.service_name }}"
name: "{{ item.service_name }}"
state: "stopped"
with_dict: "{{ octavia_services }}"
with_items: "{{ filtered_octavia_services }}"

View File

@ -50,9 +50,34 @@
tags:
- octavia-config
- include_tasks: octavia_init_common.yml
- name: Run the systemd service role
include_role:
name: systemd_service
private: true
vars:
systemd_after_targets: "{{ service_var.after_targets | default(['syslog.target', 'network.target']) }}"
systemd_user_name: "{{ octavia_system_user_name }}"
systemd_group_name: "{{ octavia_system_group_name }}"
systemd_tempd_prefix: openstack
systemd_slice_name: nova
systemd_lock_path: /var/lock/octavia
systemd_CPUAccounting: true
systemd_BlockIOAccounting: true
systemd_MemoryAccounting: true
systemd_TasksAccounting: true
systemd_services:
- service_name: "{{ service_var.service_name }}"
enabled: yes
state: started
execstarts: "{{ service_var.execstarts }}"
execreloads: "{{ service_var.execreloads | default([]) }}"
config_overrides: "{{ service_var.init_config_overrides }}"
with_items: "{{ filtered_octavia_services }}"
loop_control:
loop_var: service_var
tags:
- octavia-install
- nova-config
- systemd-service
- include_tasks: octavia_service_add.yml
run_once: true

View File

@ -1,26 +0,0 @@
---
# Copyright 2017, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- include_tasks: octavia_init_systemd.yml
when:
- ansible_service_mgr == 'systemd'
- name: Load service
service:
name: "{{ item.value.service_name }}"
enabled: "yes"
with_dict: "{{ octavia_services }}"
notify:
- Restart octavia services

View File

@ -1,54 +0,0 @@
---
# Copyright 2017, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- name: Create TEMP run dir
file:
path: "/var/run/{{ item.value.service_name }}"
state: directory
owner: "{{ octavia_system_user_name }}"
group: "{{ octavia_system_group_name }}"
mode: "02755"
with_dict: "{{ octavia_services }}"
- name: Create TEMP lock dir
file:
path: "/var/lock/{{ item.value.service_name }}"
state: directory
owner: "{{ octavia_system_user_name }}"
group: "{{ octavia_system_group_name }}"
mode: "02755"
with_dict: "{{ octavia_services }}"
- name: Create tmpfiles.d entry
template:
src: "octavia-systemd-tmpfiles.j2"
dest: "/etc/tmpfiles.d/openstack-{{ item.value.service_name }}.conf"
mode: "0644"
owner: "root"
group: "root"
with_dict: "{{ octavia_services }}"
- name: Place the systemd init script
config_template:
src: "octavia-systemd-init.j2"
dest: "/etc/systemd/system/{{ item.value.service_name }}.service"
mode: "0644"
owner: "root"
group: "root"
config_overrides: "{{ item.value.init_config_overrides }}"
config_type: "ini"
with_dict: "{{ octavia_services }}"
notify:
- Reload systemd daemon

View File

@ -22,11 +22,11 @@
- name: Apply uWSGI configuration
config_template:
src: "octavia-uwsgi.ini.j2"
dest: "/etc/uwsgi/{{ item.value.service_name }}.ini"
dest: "/etc/uwsgi/{{ item.service_name }}.ini"
mode: "0744"
config_overrides: "{{ item.value.wsgi_overrides }}"
config_overrides: "{{ item.wsgi_overrides }}"
config_type: ini
with_dict: "{{ octavia_services }}"
when: item.value.wsgi_app | default(False)
with_items: "{{ filtered_octavia_services }}"
when: item.wsgi_app | default(False)
notify:
- Restart octavia services

View File

@ -1,39 +0,0 @@
# {{ ansible_managed }}
[Unit]
Description=octavia openstack service
After=syslog.target
After=network.target
[Service]
Type=simple
User={{ octavia_system_user_name }}
Group={{ octavia_system_group_name }}
{% if item.value.program_override is defined %}
ExecStart={{ item.value.program_override }} {{ item.value.program_config_options|default('') }} {{ item.value.log_string | default('--log-file=') }}/var/log/octavia/{{ item.value.service_name }}.log
{% else %}
ExecStart={{ octavia_bin }}/{{ item.value.service_name }} {{ item.value.program_config_options|default('') }} --log-file=/var/log/octavia/{{ item.value.service_name }}.log
{% endif %}
# Give a reasonable amount of time for the server to start up/shut down
TimeoutStartSec=120
# Give extra time for shutdown to allow flows to finish (failover, etc.)
# This timer expiring early can lead to load balancers stuck in PENDING_*
# states as the flows were interrupted before completing.
# This setting depends on the performance of your cloud.
TimeoutStopSec=300
Restart=on-failure
RestartSec=2
# This creates a specific slice which all services will operate from
# The accounting options give us the ability to see resource usage through
# the `systemd-cgtop` command.
Slice=octavia.slice
CPUAccounting=true
BlockIOAccounting=true
MemoryAccounting=false
TasksAccounting=true
[Install]
WantedBy=multi-user.target

View File

@ -1,4 +0,0 @@
# {{ ansible_managed }}
D /var/lock/{{ item.value.service_name }} 2755 {{ octavia_system_user_name }} {{ octavia_system_group_name }}
D /var/run/{{ item.value.service_name }} 2755 {{ octavia_system_user_name }} {{ octavia_system_group_name }}

View File

@ -3,8 +3,8 @@ uid = {{ octavia_system_user_name }}
gid = {{ octavia_system_group_name }}
virtualenv = /openstack/venvs/octavia-{{ octavia_venv_tag }}
wsgi-file = {{ octavia_bin }}/{{ item.value.wsgi_name }}
http-socket = {{ item.value.uwsgi_bind_address }}:{{ item.value.uwsgi_port }}
wsgi-file = {{ octavia_bin }}/{{ item.wsgi_name }}
http-socket = {{ item.uwsgi_bind_address }}:{{ item.uwsgi_port }}
master = true
enable-threads = true
@ -17,6 +17,7 @@ add-header = Connection: close
buffer-size = {{ octavia_wsgi_buffer_size }}
thunder-lock = true
logfile-chmod = 644
pidfile = /var/run/{{ item.service_name }}/{{ item.service_name }}.pid
# Avoid filling up the logs with health check requests from haproxy.
route-user-agent = ^osa-haproxy-healthcheck$ donotlog:

View File

@ -1,6 +1,7 @@
[DEFAULT]
# Print debugging output (set logging level to DEBUG instead of default WARNING level).
debug = {{ debug }}
log_dir = /var/log/octavia
{% if not octavia_v2|bool %}
bind_host = 0.0.0.0

30
vars/main.yml Normal file
View File

@ -0,0 +1,30 @@
---
# Copyright 2018, VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Compile a list of the services on a host based on whether
# the host is in the host group and the service is enabled.
#
filtered_octavia_services: |-
{% set services = [] %}
{% for key, value in octavia_services.items() %}
{% if (value['group'] in group_names) and
(('condition' not in value) or
('condition' in value and value['condition'])) %}
{% set _ = value.update({'service_key': key}) %}
{% set _ = services.append(value) %}
{% endif %}
{% endfor %}
{{ services | sort(attribute='start_order') }}