
We normally see ssh connection issues during the lxc container setup portion of OSA builds. Most people usually end up tweaking ansible ssh pipeline and retry settings or nerfing the build via ansible fork lowering to work around it. This is an old issue that we normally put a more permanent fix in our physical environments by setting the ssh maxsessions and maxstartups. On the mnaio builds I have been working around this by stopping the build before deployment and making the changes in a script. Change-Id: I54c223e1fb9edf6947bc7f76ff689bad22456420 Closes-Bug: 1752914
322 lines
8.9 KiB
YAML
322 lines
8.9 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) }}"
|
|
pre_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
|
|
|
|
tasks:
|
|
- 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: vg01
|
|
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: Create VM LV
|
|
lvol:
|
|
vg: vg01
|
|
lv: "{{ hostvars[item]['server_hostname'] }}"
|
|
size: "{{ default_vm_storage }}"
|
|
when:
|
|
- hostvars[item]['server_vm'] | default(false) | bool
|
|
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'] }}"
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Create vm_servers group
|
|
hosts: localhost
|
|
gather_facts: false
|
|
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'] }}"
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Wait for deploy host
|
|
hosts: vm_servers
|
|
gather_facts: false
|
|
any_errors_fatal: true
|
|
pre_tasks:
|
|
- name: Wait for connectivity 1
|
|
local_action:
|
|
module: wait_for
|
|
host: "{{ ansible_host }}"
|
|
connect_timeout: 5
|
|
port: 22
|
|
sleep: 10
|
|
timeout: 1200
|
|
state: started
|
|
search_regex: OpenSSH
|
|
tasks:
|
|
- 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
|
|
tasks:
|
|
- file:
|
|
path: /etc/network/interfaces
|
|
attr: ""
|
|
when:
|
|
- ansible_distribution | lower == "ubuntu"
|
|
- ansible_distribution_release | lower == "trusty"
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Set MaxSessions and MaxStartups to reduce connection failures
|
|
hosts: vm_servers
|
|
gather_facts: "{{ gather_facts | default(true) }}"
|
|
pre_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
|
|
tasks:
|
|
- 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
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Setup cinder host volume
|
|
hosts: cinder_hosts:swift_hosts
|
|
gather_facts: false
|
|
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
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Setup cinder host volume
|
|
hosts: cinder_hosts
|
|
gather_facts: false
|
|
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"
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|
|
- name: Setup swift host volume
|
|
hosts: swift_hosts
|
|
gather_facts: false
|
|
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
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
tags:
|
|
- deploy-vms
|
|
|
|
|