openstack-ansible/rpc_deployment/playbooks/setup/deploy-archived-container.yml
Kevin Carter 6389c643ee Resolves all of the current linting issues
This PR goes through all of the files and looks for lint violations
and updates all of them.

Updated per-feedback

Change-Id: I5bc4ee6bcb19f367415425fdf2b1d77a2a9ab4ba
Closes-Bug: 1398601
2014-12-03 17:07:52 +00:00

163 lines
4.8 KiB
YAML

---
# Copyright 2014, 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.
# Example usage:
# ansible-playbook -i inventory/hosts -M library/lxc -e "group=infra1-keystone name=keystone address=192.168.18.120 archive_name=keystone.tar.bz2" deploy-archived-container.yml
# This will create a new container from an archive of an existing container.
- hosts: "{{ host_group|default('hosts') }}"
user: root
tasks:
# Create container directory
- name: Create container directory
file:
path: "{{ lxcpath }}/{{ name }}"
state: "directory"
group: "root"
owner: "root"
recurse: "true"
# If check for the lxc VG
- name: Check for lxc volume group
shell: "(which vgs > /dev/null && vgs | grep -o {{ vg_name }}) || false"
register: vg_result
ignore_errors: True
# If lxc vg create new lv
- name: Create new LV
lvol:
vg: "{{ vg_name }}"
lv: "{{ name }}"
size: "{{ lv_size }}"
when: vg_result.rc == 0
# If lxc vg format new lv
- name: Format the new LV
filesystem:
fstype: "{{ fstype }}"
dev: "/dev/{{ vg_name }}/{{ name }}"
when: vg_result.rc == 0
# If lxc vg mount new lv at $container/rootfs
- name: Mount Container LV
mount:
name: "{{ lxcpath }}/{{ name }}/rootfs"
src: "/dev/{{ vg_name }}/{{ name }}"
fstype: "{{ fstype }}"
state: "mounted"
when: vg_result.rc == 0
# upload new archive to host
- name: Upload Archive to host
synchronize:
src: "{{ local_store_path }}/{{ archive_name }}"
dest: "{{ remote_store_path }}/{{ archive_name }}"
archive: "yes"
mode: "push"
# Unarchive container
- name: Unarchive a container
unarchive:
src: "{{ remote_store_path }}/{{ archive_name }}"
dest: "{{ lxcpath }}/{{ name }}"
register: result
# If lxc vg unmount new lv
- name: Unmount Container LV
mount:
name: "{{ lxcpath }}/{{ name }}/rootfs"
src: "/dev/{{ vg_name }}/{{ name }}"
fstype: "{{ fstype }}"
state: "unmounted"
when: vg_result.rc == 0
# Delete archive directory
- name: Cleanup archive
file:
path: "{{ remote_store_path }}/{{ archive_name }}"
state: "absent"
when: result | changed
# Ensure config is without old cruft
- name: Ensure clean config
lineinfile:
dest: "{{ lxcpath }}/{{ name }}/config"
regexp: "{{ item.regexp }}"
state: "absent"
backup: "yes"
with_items:
- { regexp: "^lxc.network.hwaddr" }
- { regexp: "^lxc.mount.entry" }
# If not lxc vg set the rootfs
- name: Set rootfs to localfs
lineinfile:
dest: "{{ lxcpath }}/{{ name }}/config"
regexp: "^lxc.rootfs"
line: "lxc.rootfs = {{ lxcpath }}/{{ name }}/rootfs"
state: "present"
when: vg_result.rc != 0
# If lxc vg set the rootfs
- name: Set rootfs to lvm
lineinfile:
dest: "{{ lxcpath }}/{{ name }}/config"
regexp: "^lxc.rootfs"
line: "lxc.rootfs = /dev/{{ vg_name }}/{{ name }}"
state: "present"
when: vg_result.rc == 0
# Ensure the configuration is complete
- name: Ensure config updated
lineinfile:
dest: "{{ lxcpath }}/{{ name }}/config"
regexp: "^lxc.utsname"
line: "lxc.utsname = {{ name }}"
state: "present"
# Ensure the mount point is correct
- name: Ensure mount point updated updated
lineinfile:
dest: "{{ lxcpath }}/{{ name }}/config"
regexp: "^lxc.mount"
line: "lxc.mount = /var/lib/lxc/{{ name }}/fstab"
state: "present"
# Start the new container
- name: Start new Container
lxc:
command: "start"
name: "{{ name }}"
# If address is set update it in the network script
- name: Update networking
lxc:
command: "attach"
name: "{{ name }}"
container_command: "sed -i 's/address.*/address\ {{ address }}/g' /etc/network/interfaces"
when: address is defined
# Restart the new container
- name: Restart new container
lxc:
command: "restart"
name: "{{ name }}"
vars:
local_store_path: /tmp
remote_store_path: /tmp
lv_size: 5g
vg_name: lxc
fstype: ext4
lxcpath: /var/lib/lxc