Use dictionary for service group mappings

Change the 'designate_service_names' from a list to a dictionary mapping
of services, groups that install those services. This brings the
method into line with that used in the os_neutron role in order to
implement a more standardised method.

The init tasks have been updated to run once and loop through this
mapping rather than being included multiple times and re-run against
each host. This may potentially reduce role run times.

Currently the reload of upstart/systemd scripts may not happen if
only one script changes as the task uses a loop with only one result
register. This patch implements handlers to reload upstart/systemd
scripts to ensure that this happens when any one of the scripts
change.

The handler to reload the services now only tries to restart the
service if the host is in the group for the service according to the
service group mapping. This allows us to ensure that handler
failures are no longer ignored and that no execution time is wasted
trying to restart services which do not exist on the host.

Finally:
- Common variables shared by each service's template files have
  been updated to use the service namespaced variables.
- Unused handlers have been removed.
- Unused variables have been removed.

Change-Id: I8b3df067d5e27711d9f962d74932c818a506e77a
This commit is contained in:
Jesse Pretorius 2016-09-28 18:15:27 +01:00 committed by Jesse Pretorius (odyssey4me)
parent 32aff27542
commit 41eaa23bdf
10 changed files with 79 additions and 170 deletions

View File

@ -87,13 +87,6 @@ designate_enable_v2_api: True
# Designate services info # Designate services info
designate_role_name: admin designate_role_name: admin
designate_central_program_name: designate-central
designate_pool_manager_program_name: designate-pool-manager
designate_zone_manager_program_name: designate-zone-manager
designate_mdns_program_name: designate-mdns
designate_sink_program_name: designate-sink
designate_api_program_name: designate-api
## Service Type and Data ## Service Type and Data
designate_service_region: RegionOne designate_service_region: RegionOne
designate_service_endpoint_type: internalURL designate_service_endpoint_type: internalURL
@ -129,14 +122,26 @@ designate_pip_packages:
- pycrypto - pycrypto
- warlock - warlock
## Service Names ## Service Name-Group Mapping
designate_service_names: designate_services:
- "{{ designate_api_program_name }}" designate-central:
- "{{ designate_central_program_name }}" group: designate_central
- "{{ designate_pool_manager_program_name }}" service_name: designate-central
- "{{ designate_zone_manager_program_name }}" designate-pool-manager:
- "{{ designate_mdns_program_name }}" group: designate_pool_manager
- "{{ designate_sink_program_name }}" service_name: designate-pool-manager
designate-zone-manager:
group: designate_zone_manager
service_name: designate-zone-manager
designate-mdns:
group: designate_mdns
service_name: designate-mdns
designate-sink:
group: designate_sink
service_name: designate-sink
designate-api:
group: designate_api
service_name: designate-api
# This variable is used by the repo_build process to determine # This variable is used by the repo_build process to determine
# which host group to check for members of before building the # which host group to check for members of before building the

View File

@ -1,4 +1,6 @@
---
# Copyright 2016, Tata Consultancy Services # Copyright 2016, Tata Consultancy Services
# Copyright 2015, Rackspace US, Inc.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -12,47 +14,21 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
- name: Restart designate api - name: Reload systemd daemon
service: command: "systemctl daemon-reload"
name: "{{ designate_api_program_name }}" notify:
state: "restarted" - Restart designate services
pattern: "{{ designate_api_program_name }}"
- name: Restart designate central - name: Reload upstart init scripts
service: shell: |
name: "{{ designate_central_program_name }}" initctl reload-configuration
state: "restarted" notify:
pattern: "{{ designate_central_program_name }}" - Restart designate services
- name: Restart designate pool-manager
service:
name: "{{ designate_pool_manager_program_name }}"
state: "restarted"
pattern: "{{ designate_pool_manager_program_name }}"
- name: Restart designate zone-manager
service:
name: "{{ designate_zone_manager_program_name }}"
state: "restarted"
pattern: "{{ designate_zone_manager_program_name }}"
- name: Restart designate mdns
service:
name: "{{ designate_mdns_program_name }}"
state: "restarted"
pattern: "{{ designate_mdns_program_name }}"
- name: Restart designate sink
service:
name: "{{ designate_sink_program_name }}"
state: "restarted"
pattern: "{{ designate_sink_program_name }}"
- name: Restart designate services - name: Restart designate services
service: service:
name: "{{ item }}" name: "{{ item.value.service_name }}"
state: "restarted" state: "restarted"
pattern: "{{ item }}" pattern: "{{ item.value.service_name }}"
with_items: "{{ designate_service_names }}" with_dict: "{{ designate_services }}"
failed_when: false when: inventory_hostname in groups[item.value.group]

View File

@ -1,70 +0,0 @@
---
# Copyright 2016, Tata Consultancy Services
#
# 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: designate_init_common.yml
vars:
program_name: "{{ designate_api_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_api']
- include: designate_init_common.yml
vars:
program_name: "{{ designate_central_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_central']
- include: designate_init_common.yml
vars:
program_name: "{{ designate_pool_manager_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_pool_manager']
- include: designate_init_common.yml
vars:
program_name: "{{ designate_zone_manager_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_zone_manager']
- include: designate_init_common.yml
vars:
program_name: "{{ designate_mdns_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_mdns']
- include: designate_init_common.yml
vars:
program_name: "{{ designate_sink_program_name }}"
service_name: "{{ designate_service_name }}"
system_user: "{{ designate_system_user_name }}"
system_group: "{{ designate_system_group_name }}"
service_home: "{{ designate_system_user_home }}"
when: inventory_hostname in groups['designate_sink']

View File

@ -23,7 +23,9 @@
- name: Load service - name: Load service
service: service:
name: "{{ program_name }}" name: "{{ item.value.service_name }}"
enabled: "yes" enabled: "yes"
with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
notify: notify:
- Restart designate services - Restart designate services

View File

@ -15,19 +15,23 @@
- name: Create TEMP run dir - name: Create TEMP run dir
file: file:
path: "/var/run/{{ program_name }}" path: "/var/run/{{ item.value.service_name }}"
state: directory state: directory
owner: "{{ system_user }}" owner: "{{ designate_system_user_name }}"
group: "{{ system_group }}" group: "{{ designate_system_group_name }}"
mode: "02755" mode: "02755"
with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
- name: Create TEMP lock dir - name: Create TEMP lock dir
file: file:
path: "/var/lock/{{ program_name }}" path: "/var/lock/{{ item.value.service_name }}"
state: directory state: directory
owner: "{{ system_user }}" owner: "{{ designate_system_user_name }}"
group: "{{ system_group }}" group: "{{ designate_system_group_name }}"
mode: "02755" mode: "02755"
with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
- name: Create tempfile.d entry - name: Create tempfile.d entry
template: template:
@ -36,18 +40,17 @@
mode: "0644" mode: "0644"
owner: "root" owner: "root"
group: "root" group: "root"
with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
- name: Place the systemd init script - name: Place the systemd init script
template: template:
src: "designate-systemd-init.j2" src: "designate-systemd-init.j2"
dest: "/etc/systemd/system/{{ program_name }}.service" dest: "/etc/systemd/system/{{ item.value.service_name }}.service"
mode: "0644" mode: "0644"
owner: "root" owner: "root"
group: "root" group: "root"
register: systemd_init with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
- name: Reload the systemd daemon
command: "systemctl daemon-reload"
when: systemd_init | changed
notify: notify:
- Restart designate services - Reload systemd daemon

View File

@ -1,5 +1,6 @@
--- ---
# Copyright 2016, Tata Consultancy Services # Copyright 2016, Tata Consultancy Services
# Copyright 2015, Rackspace US, Inc.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -16,17 +17,11 @@
- name: Place the init script - name: Place the init script
template: template:
src: "designate-upstart-init.j2" src: "designate-upstart-init.j2"
dest: "/etc/init/{{ program_name }}.conf" dest: "/etc/init/{{ item.value.service_name }}.conf"
mode: "0644" mode: "0644"
owner: "root" owner: "root"
group: "root" group: "root"
register: upstart_init with_dict: "{{ designate_services }}"
when: inventory_hostname in groups[item.value.group]
notify: notify:
- Restart designate services - Reload upstart init scripts
- name: Reload init scripts
shell: |
initctl reload-configuration
when: upstart_init | changed
notify:
- Restart designate services

View File

@ -48,7 +48,7 @@
- designate-install - designate-install
- designate-config - designate-config
- include: designate_init.yml - include: designate_init_common.yml
tags: tags:
- designate-install - designate-install

View File

@ -7,13 +7,13 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
User={{ system_user }} User={{ designate_system_user_name }}
Group={{ system_group }} Group={{ designate_system_group_name }}
{% if program_override is defined %} {% if program_override is defined %}
ExecStart={{ program_override }} {{ program_config_options|default('') }} --log-file=/var/log/designate/{{ program_name }}.log ExecStart={{ program_override }} {{ program_config_options|default('') }} --log-file=/var/log/designate/{{ item.value.service_name }}.log
{% else %} {% else %}
ExecStart={{ designate_bin }}/{{ program_name }} {{ program_config_options|default('') }} --log-file=/var/log/designate/{{ program_name }}.log ExecStart={{ designate_bin }}/{{ item.value.service_name }} {{ program_config_options|default('') }} --log-file=/var/log/designate/{{ item.value.service_name }}.log
{% endif %} {% endif %}
# Give a reasonable amount of time for the server to start up/shut down # Give a reasonable amount of time for the server to start up/shut down

View File

@ -1,4 +1,4 @@
# {{ ansible_managed }} # {{ ansible_managed }}
D /var/lock/{{ program_name }} 2755 {{ system_user }} {{ system_group }} D /var/lock/{{ item.value.service_name }} 2755 {{ designate_system_user_name }} {{ designate_system_group_name }}
D /var/run/{{ program_name }} 2755 {{ system_user }} {{ system_group }} D /var/run/{{ item.value.service_name }} 2755 {{ designate_system_user_name }} {{ designate_system_group_name }}

View File

@ -1,9 +1,8 @@
# {{ ansible_managed }} # {{ ansible_managed }}
# vim:set ft=upstart ts=2 et:
description "{{ program_name }}" description "{{ item.value.service_name }}"
author "Swati Sharma <sharma.swati6@tcs.com>" author "Kevin Carter <kevin.carter@rackspace.com>"
start on runlevel [2345] start on runlevel [2345]
stop on runlevel [016] stop on runlevel [016]
@ -12,18 +11,18 @@ respawn
respawn limit 10 5 respawn limit 10 5
# Set the RUNBIN environment variable # Set the RUNBIN environment variable
env RUNBIN="{{ designate_bin }}/{{ program_name }}" env RUNBIN="{{ designate_bin }}/{{ item.value.service_name }}"
# Change directory to service users home # Change directory to service users home
chdir "{{ service_home }}" chdir "{{ designate_system_user_home }}"
# Pre start actions # Pre start actions
pre-start script pre-start script
mkdir -p "/var/run/{{ program_name }}" mkdir -p "/var/run/{{ item.value.service_name }}"
chown {{ system_user }}:{{ system_group }} "/var/run/{{ program_name }}" chown {{ designate_system_user_name }}:{{ designate_system_group_name }} "/var/run/{{ item.value.service_name }}"
mkdir -p "/var/lock/{{ program_name }}" mkdir -p "/var/lock/{{ item.value.service_name }}"
chown {{ system_user }}:{{ system_group }} "/var/lock/{{ program_name }}" chown {{ designate_system_user_name }}:{{ designate_system_group_name }} "/var/lock/{{ item.value.service_name }}"
. {{ designate_bin }}/activate . {{ designate_bin }}/activate
@ -31,16 +30,15 @@ end script
# Post stop actions # Post stop actions
post-stop script post-stop script
rm "/var/run/{{ program_name }}/{{ program_name }}.pid" rm "/var/run/{{ item.value.service_name }}/{{ item.value.service_name }}.pid"
end script end script
# Run the start up job # Run the start up job
exec start-stop-daemon --start \ exec start-stop-daemon --start \
--chuid {{ system_user }} \ --chuid {{ designate_system_user_name }} \
--make-pidfile \ --make-pidfile \
--pidfile /var/run/{{ program_name }}/{{ program_name }}.pid \ --pidfile /var/run/{{ item.value.service_name }}/{{ item.value.service_name }}.pid \
--exec "{{ program_override|default('$RUNBIN') }}" \ --exec "{{ program_override|default('$RUNBIN') }}" \
-- {{ program_config_options|default('') }} \ -- {{ program_config_options|default('') }} \
--log-file=/var/log/{{ service_name }}/{{ program_name }}.log --log-file=/var/log/{{ designate_service_name }}/{{ item.value.service_name }}.log