
This patch implements the following style changes: 1. The 'environment' argument is placed in the same location for all plays, making sure it's easier to find. 2. The play tags are located in the same place, also making sure they're easier to find. 3. The line breaks between tasks and plays are set to be consistently 1 between tasks and 2 between plays. 4. Given that there are no roles being used, the use of pre/post tasks is converted to only using tasks. Change-Id: I2e22c8360d65256b8e44ca1e310e0668a651196d
325 lines
9.5 KiB
YAML
325 lines
9.5 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 witing, 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: Gather facts
|
|
hosts: vm_hosts
|
|
gather_facts: "{{ gather_facts | default(true) }}"
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: Gather variables for each operating system
|
|
include_vars: "{{ item }}"
|
|
with_first_found:
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
|
|
tags:
|
|
- always
|
|
|
|
- name: Stop running VMs
|
|
command: "virsh destroy {{ hostvars[item]['server_hostname'] }}"
|
|
failed_when: false
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Delete VM LV
|
|
lvol:
|
|
vg: "{{ default_vm_disk_vg }}"
|
|
lv: "{{ hostvars[item]['server_hostname'] }}"
|
|
state: absent
|
|
force: yes
|
|
failed_when: false
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Delete VM Disk Image
|
|
file:
|
|
path: "/var/lib/libvirt/images/{{ hostvars[item]['server_hostname'] }}.img"
|
|
state: absent
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Create VM LV
|
|
lvol:
|
|
vg: "{{ default_vm_disk_vg }}"
|
|
lv: "{{ hostvars[item]['server_hostname'] }}"
|
|
size: "{{ default_vm_storage }}"
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
- default_vm_disk_mode | default('lvm') == "lvm"
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Create VM Disk Image
|
|
command: |
|
|
qemu-img create -f qcow2 /var/lib/libvirt/images/{{ hostvars[item]['server_hostname'] }}.img {{ default_vm_storage }}m
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
- default_vm_disk_mode | default('lvm') == "file"
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Create the VM template
|
|
template:
|
|
src: kvm/kvm-vm.xml
|
|
dest: "/etc/libvirt/qemu/{{ hostvars[item]['server_hostname'] }}.xml"
|
|
mode: 0644
|
|
owner: root
|
|
group: root
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Wait for guest capabilities to appear
|
|
command: "virsh capabilities"
|
|
register: virsh_caps
|
|
until: "'<guest>' in virsh_caps.stdout"
|
|
retries: 6
|
|
delay: 10
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Define the VM
|
|
command: "virsh define /etc/libvirt/qemu/{{ hostvars[item]['server_hostname'] }}.xml"
|
|
failed_when: false
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Create the VM
|
|
command: "virsh create /etc/libvirt/qemu/{{ hostvars[item]['server_hostname'] }}.xml"
|
|
failed_when: false
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Start the VM
|
|
command: "virsh start {{ hostvars[item]['server_hostname'] }}"
|
|
failed_when: false
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Add VM to /etc/hosts file
|
|
lineinfile:
|
|
path: "/etc/hosts"
|
|
line: "{{ hostvars[item]['ansible_host'] }} {{ hostvars[item]['server_hostname'] }}"
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
|
|
- name: Create vm_servers group
|
|
hosts: localhost
|
|
gather_facts: false
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: VM Servers group
|
|
add_host:
|
|
name: "{{ item }}"
|
|
groups: vm_servers
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
|
|
- name: Wait for deploy host
|
|
hosts: vm_servers
|
|
gather_facts: false
|
|
any_errors_fatal: true
|
|
tasks:
|
|
- name: Wait for connectivity 1
|
|
local_action:
|
|
module: wait_for
|
|
host: "{{ ansible_host }}"
|
|
connect_timeout: 10
|
|
port: 22
|
|
sleep: 20
|
|
timeout: 1500
|
|
state: started
|
|
search_regex: OpenSSH
|
|
|
|
- name: copy host keys
|
|
copy:
|
|
src: "{{ item.src }}"
|
|
dest: "{{ item.dest }}"
|
|
mode: "0600"
|
|
with_items:
|
|
- src: "{{ lookup('env', 'HOME') }}/.ssh/id_rsa"
|
|
dest: /root/.ssh/id_rsa
|
|
- src: "{{ lookup('env', 'HOME') }}/.ssh/id_rsa.pub"
|
|
dest: /root/.ssh/id_rsa.pub
|
|
|
|
|
|
# In vm-post-install-script.sh.j2 we chattr +i the interfaces file to prevent
|
|
# the preseed system from overwriting the file after we've modified it. The
|
|
# task below simply removes the immutable attribute.
|
|
- name: Remove immutable attr from /etc/network/interfaces
|
|
hosts: vm_servers
|
|
gather_facts: true
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- file:
|
|
path: /etc/network/interfaces
|
|
attr: ""
|
|
when:
|
|
- ansible_distribution | lower == "ubuntu"
|
|
- ansible_distribution_release | lower == "trusty"
|
|
|
|
|
|
- name: Set MaxSessions and MaxStartups to reduce connection failures
|
|
hosts: vm_servers
|
|
gather_facts: "{{ gather_facts | default(true) }}"
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: Gather variables for each operating system
|
|
include_vars: "{{ item }}"
|
|
with_first_found:
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_distribution | lower }}.yml"
|
|
- "{{ playbook_dir }}/vars/{{ ansible_os_family | lower }}.yml"
|
|
tags:
|
|
- always
|
|
|
|
- lineinfile:
|
|
path: /etc/ssh/sshd_config
|
|
line: MaxStartups 100
|
|
state: present
|
|
regexp: '^MaxStartups.*$'
|
|
notify:
|
|
- restart sshd
|
|
|
|
- lineinfile:
|
|
path: /etc/ssh/sshd_config
|
|
line: MaxSessions 100
|
|
state: present
|
|
regexp: '^MaxSessions.*$'
|
|
notify:
|
|
- restart sshd
|
|
|
|
handlers:
|
|
- name: restart sshd
|
|
service:
|
|
name: "{{ ssh_service_name }}"
|
|
state: restarted
|
|
|
|
|
|
- name: Setup cinder host volume
|
|
hosts: cinder_hosts:swift_hosts
|
|
gather_facts: false
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: un-mount deleteme mount
|
|
mount:
|
|
name: "/var/lib/lxc"
|
|
state: unmounted
|
|
|
|
- name: remote deleteme mount
|
|
mount:
|
|
name: "/var/lib/lxc"
|
|
state: absent
|
|
|
|
- name: Remove deleteme lv
|
|
lvol:
|
|
vg: vmvg00
|
|
lv: lxc00
|
|
force: true
|
|
state: absent
|
|
|
|
|
|
- name: Setup cinder host volume
|
|
hosts: cinder_hosts
|
|
gather_facts: false
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: Create cinder-volumes lv
|
|
lvol:
|
|
vg: vmvg00
|
|
lv: cinder-volumes00
|
|
size: "100%FREE"
|
|
shrink: false
|
|
|
|
- name: Create data cinder-volumes group
|
|
lvg:
|
|
vg: cinder-volumes
|
|
pvs: "/dev/vmvg00/cinder-volumes00"
|
|
|
|
|
|
- name: Setup swift host volume
|
|
hosts: swift_hosts
|
|
gather_facts: false
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
tags:
|
|
- deploy-vms
|
|
tasks:
|
|
- name: Remove deleteme lv
|
|
lvol:
|
|
vg: vmvg00
|
|
lv: "{{ item }}"
|
|
size: 4G
|
|
with_items:
|
|
- disk1
|
|
- disk2
|
|
- disk3
|
|
|
|
- name: Format swift drives
|
|
filesystem:
|
|
fstype: xfs
|
|
dev: "/dev/vmvg00/{{ item }}"
|
|
with_items:
|
|
- disk1
|
|
- disk2
|
|
- disk3
|
|
|
|
- name: Create drive directories
|
|
file:
|
|
path: "/srv/{{ item }}"
|
|
state: directory
|
|
owner: "root"
|
|
group: "root"
|
|
mode: "0755"
|
|
with_items:
|
|
- disk1
|
|
- disk2
|
|
- disk3
|
|
|
|
- name: Mount swift drives
|
|
mount:
|
|
name: "/srv/{{ item }}"
|
|
src: "/dev/mapper/vmvg00-{{ item }}"
|
|
fstype: xfs
|
|
state: mounted
|
|
with_items:
|
|
- disk1
|
|
- disk2
|
|
- disk3
|