---
|
|
- name: check for lxc container dir
|
|
stat:
|
|
path: '/var/lib/lxc/{{ vm_name }}'
|
|
register: lxc_existance
|
|
|
|
- name: check for lxc container existance
|
|
container_exists:
|
|
name: "{{ vm_name }}"
|
|
register: container_exists
|
|
|
|
- name: Check debian release
|
|
assert:
|
|
that: distro in [ 'bullseye', 'sid', 'buster' ]
|
|
msg: "release {{ distro }} not supported by debian template"
|
|
|
|
- block:
|
|
- name: create the lxc container
|
|
lxc_container:
|
|
name: "{{ vm_name }}"
|
|
backing_store: lvm
|
|
fs_size: "{{ vm_size }}"
|
|
vg_name: "{{ vg_name | default(inventory_hostname+'vg') }}"
|
|
lv_name: "vm_{{ vm_name }}"
|
|
fs_type: xfs
|
|
container_log: true
|
|
template: debian
|
|
template_options: --release {{ distro }} --packages=ssh,python3
|
|
state: stopped
|
|
# suppress messages related to file descriptors
|
|
# leaking when lvm is invoked
|
|
environment:
|
|
LVM_SUPPRESS_FD_WARNINGS: 1
|
|
|
|
- name: deploy container config
|
|
template:
|
|
src: config.j2
|
|
dest: "/var/lib/lxc/{{ vm_name }}/config"
|
|
|
|
- name: start container
|
|
lxc_container:
|
|
name: "{{ vm_name }}"
|
|
state: started
|
|
when: auto_start|bool
|
|
when: not (container_exists.exists and lxc_existance.stat.isdir)
|
|
|
|
- name: update container config
|
|
template:
|
|
src: config.j2
|
|
dest: "/var/lib/lxc/{{ vm_name }}/config"
|
|
register: container_config
|
|
notify: restart container
|
|
|
|
- name: set container running state
|
|
lxc_container:
|
|
name: "{{ vm_name }}"
|
|
state: "{{ container_state }}"
|
|
register: container_running_state
|
|
|
|
- name: Read container DNS configuration
|
|
slurp:
|
|
src: /etc/resolv.conf
|
|
delegate_to: "{{ vm_name }}"
|
|
connection: ssh_lxc
|
|
register: vm_resolv_conf
|
|
|
|
- debug:
|
|
msg: "{{ vm_resolv_conf['content'] | b64decode }}"
|
|
verbosity: 2
|
|
|
|
- name: update container DNS configuration
|
|
template:
|
|
src: resolv.conf.j2
|
|
dest: /etc/resolv.conf
|
|
delegate_to: "{{ vm_name }}"
|
|
connection: ssh_lxc
|
|
|
|
- name: update container network configuration
|
|
copy:
|
|
src: interfaces
|
|
dest: /etc/network/interfaces
|
|
delegate_to: "{{ vm_name }}"
|
|
connection: ssh_lxc
|
|
notify: restart container
|
|
|
|
- name: install packages
|
|
apt:
|
|
pkg:
|
|
- python3
|
|
- ssh
|
|
state: present
|
|
update_cache: yes
|
|
cache_valid_time: 3600
|
|
notify: restart container
|
|
|
|
# Restart container when one in
|
|
# - container_dns_configuration
|
|
# - network conf has changed
|
|
# - install_packages
|
|
# - container_network
|
|
# is changed by executing handlers now
|
|
- meta: flush_handlers
|
|
|
|
- name: add monitoring facts
|
|
set_fact:
|
|
monitoring_host: "{{ monitoring_host | default([]) }} + [ '{{ vm_name }}' ]"
|
|
delegate_facts: True
|
|
delegate_to: status
|