348e406d9c
Updates to the container common task file were made to correct an issue which would result in a new container not getting restarted when a bind mount was added. Change-Id: I29948d54a015e367fbdef4d10360c1a5f544b550 Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
130 lines
3.7 KiB
YAML
130 lines
3.7 KiB
YAML
---
|
|
# 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: Pull systemd version
|
|
command: "systemctl --version"
|
|
changed_when: false
|
|
register: systemd_version
|
|
delegate_to: "{{ physical_host }}"
|
|
tags:
|
|
- skip_ansible_lint
|
|
- always
|
|
|
|
- name: Set facts
|
|
set_fact:
|
|
nspawn_systemd_version: "{{ systemd_version.stdout_lines[0].split()[-1] }}"
|
|
tags:
|
|
- always
|
|
|
|
- name: Escape quote container name
|
|
command: "systemd-escape {{ inventory_hostname }}"
|
|
changed_when: false
|
|
register: systemd_escape
|
|
delegate_to: "{{ physical_host }}"
|
|
tags:
|
|
- skip_ansible_lint
|
|
- always
|
|
|
|
- name: Ensure mount directories exists (container)
|
|
file:
|
|
path: "{{ item['mount_path'] }}"
|
|
state: "directory"
|
|
with_items:
|
|
- "{{ list_of_bind_mounts | default([]) }}"
|
|
delegate_to: "{{ physical_host }}"
|
|
tags:
|
|
- common-nspawn
|
|
|
|
- name: Ensure mount directories exists (physical host)
|
|
file:
|
|
path: "{{ item['bind_dir_path'] }}"
|
|
state: "directory"
|
|
with_items:
|
|
- "{{ list_of_bind_mounts | default([]) }}"
|
|
tags:
|
|
- common-nspawn
|
|
|
|
- name: Create container bind mount config
|
|
lineinfile:
|
|
dest: "/etc/systemd/nspawn/{{ inventory_hostname }}.nspawn"
|
|
line: "Bind={{ item['mount_path'] }}:{{ item['bind_dir_path'] }}"
|
|
insertafter: "^Bind"
|
|
backup: "true"
|
|
with_items:
|
|
- "{{ list_of_bind_mounts | default([]) }}"
|
|
delegate_to: "{{ physical_host }}"
|
|
register: add_bind
|
|
when:
|
|
- nspawn_systemd_version | int > 219
|
|
tags:
|
|
- common-nspawn
|
|
|
|
- name: Create container bind mount config (old)
|
|
block:
|
|
- name: Get ExecStart from config
|
|
shell: >-
|
|
grep -w '^ExecStart=/usr/bin/systemd-nspawn'
|
|
/etc/systemd/system/systemd-nspawn@$(/usr/bin/systemd-escape {{ inventory_hostname }}).service
|
|
delegate_to: "{{ physical_host }}"
|
|
register: _ec_old_start
|
|
changed_when: false
|
|
|
|
- name: set flag fact
|
|
set_fact:
|
|
nspawn_flags: "{{ _ec_old_start.stdout.split('ExecStart=/usr/bin/systemd-nspawn')[-1] }}"
|
|
nspawn_extra_flags: "{% for item in list_of_bind_mounts %} --bind={{ item['mount_path'] }}:{{ item['bind_dir_path'] }}{% endfor %}"
|
|
|
|
- name: set flag list
|
|
set_fact:
|
|
nspawn_flag_list: "{{ nspawn_flags.split() | union(nspawn_extra_flags.split()) | unique }}"
|
|
|
|
- name: Add line in container start config
|
|
lineinfile:
|
|
dest: "/etc/systemd/system/systemd-nspawn@{{ systemd_escape.stdout }}.service"
|
|
line: "ExecStart=/usr/bin/systemd-nspawn {{ nspawn_flag_list | join(' ') }}"
|
|
regexp: "^ExecStart"
|
|
backup: "true"
|
|
delegate_to: "{{ physical_host }}"
|
|
register: _ec
|
|
when:
|
|
- list_of_bind_mounts | default([])
|
|
- nspawn_systemd_version | int < 220
|
|
tags:
|
|
- common-nspawn
|
|
|
|
- name: Restart container
|
|
systemd:
|
|
name: "systemd-nspawn@{{ systemd_escape.stdout }}"
|
|
state: restarted
|
|
register: _container_restart
|
|
until: _container_restart is success
|
|
retries: 3
|
|
delay: 5
|
|
delegate_to: "{{ physical_host }}"
|
|
when:
|
|
- (_ec is defined and _ec is changed) or
|
|
(add_bind is defined and add_bind is changed)
|
|
tags:
|
|
- common-nspawn
|
|
|
|
- name: Wait for container connectivity
|
|
wait_for_connection:
|
|
delay: 3
|
|
timeout: 60
|
|
when:
|
|
- _container_restart is changed
|
|
tags:
|
|
- common-nspawn
|