- name: prepare directories for installer images
- with_subelements:
- - "{{ distros }}"
- - arch
+ loop: "{{ distros | subelements('arch') }}"
+ loop_control:
+ label: "{{ item.0.distro }}/{{ item.0.codename }} {{ item.1 }}"
file:
name: "{{ debian_installer_path }}/{{ item.0.distro }}-{{ item.0.codename }}/{{ item.1 }}"
state: directory
- name: download installer kernel images
- with_subelements:
- - "{{ distros }}"
- - arch
+ loop: "{{ distros | subelements('arch') }}"
+ loop_control:
+ label: "{{ item.0.distro }}/{{ item.0.codename }} {{ item.1 }}"
get_url:
url: "{{ debian_installer_url[item.0.distro] }}/dists/{{ item.0.codename }}/main/installer-{{ item.1 }}/current/images/netboot/{{ item.0.distro }}-installer/{{ item.1 }}/linux"
dest: "{{ debian_installer_path }}/{{ item.0.distro }}-{{ item.0.codename }}/{{ item.1 }}/linux"
force: "{{ debian_installer_force_download }}"
- name: download installer initrd.gz
- with_subelements:
- - "{{ distros }}"
- - arch
+ loop: "{{ distros | subelements('arch') }}"
+ loop_control:
+ label: "{{ item.0.distro }}/{{ item.0.codename }} {{ item.1 }}"
get_url:
url: "{{ debian_installer_url[item.0.distro] }}/dists/{{ item.0.codename }}/main/installer-{{ item.1 }}/current/images/netboot/{{ item.0.distro }}-installer/{{ item.1 }}/initrd.gz"
dest: "{{ debian_installer_path }}/{{ item.0.distro }}-{{ item.0.codename }}/{{ item.1 }}/initrd.gz"
--- /dev/null
+---
+#preseed_force_net_ifnames_policy: path
+---
- name: Copy initramfs into position
copy:
remote_src: yes
path: "{{ preseed_tmpdir }}/authorized_keys"
key: "{{ ssh_users_root | user_ssh_keys(users) | join('\n') }}"
+- name: force net interface name policy
+ when: preseed_force_net_ifnames_policy is defined
+ block:
+ - name: prepare directories to force network interface name policy
+ file:
+ path: "{{ preseed_tmpdir }}/etc/systemd/network"
+ state: directory
+
+ - name: install link unit to force network interface name policy
+ copy:
+ dest: "{{ preseed_tmpdir }}/etc/systemd/network/90-namepolicy.link"
+ content: |
+ [Link]
+ NamePolicy={{ preseed_force_net_ifnames_policy }}
+
- name: Inject files into initramfs
shell: cpio -H newc -o | gzip -9 >> 'initrd.preseed.gz'
args:
stdin: |
preseed.cfg
authorized_keys
+ etc/
+ etc/systemd/
+ etc/systemd/network/
+ etc/systemd/network/90-namepolicy.link
tags:
- skip_ansible_lint
d-i hw-detect/load_firmware boolean false
-d-i netcfg/disable_dhcp boolean true
d-i netcfg/choose_interface select {{ install_interface | default(hostvars[hostname].network_cooked.primary.interface) }}
+{% if 'install_dhcp' in hostvars[hostname] and hostvars[hostname].install_dhcp %}
+d-i netcfg/disable_dhcp boolean false
d-i netcfg/disable_autoconfig boolean false
+{% else %}
+d-i netcfg/disable_dhcp boolean true
+d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string {{ hostvars[hostname].network_cooked.primary.ip }}
d-i netcfg/get_netmask string {{ hostvars[hostname].network_cooked.primary.mask }}
d-i netcfg/get_gateway string {{ hostvars[hostname].network_cooked.primary.gateway }}
d-i netcfg/get_nameservers string {{ hostvars[hostname].network_cooked.nameservers | join(' ') }}
d-i netcfg/confirm_static boolean true
+{% endif %}
d-i netcfg/hostname string {{ hostname }}
d-i netcfg/get_hostname string {{ hostname }}
in-target bash -c "apt-get update -q && apt-get full-upgrade -y -q"; \
in-target bash -c "passwd -d root && passwd -l root"; \
in-target bash -c "sed -e 's/^allow-hotplug/auto/' -i /etc/network/interfaces"; \
- mkdir -p -m 0700 /target/root/.ssh; \
- cp /authorized_keys /target/root/.ssh/; \
+{% if preseed_force_net_ifnames_policy is defined %}
+ mkdir -p /target/etc/systemd/network; \
+ in-target bash -c "echo '[Link]' > /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "echo 'NamePolicy={{ preseed_force_net_ifnames_policy }}' >> /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "update-initramfs -u"; \
+{% endif %}
{% if hostvars[hostname].ansible_port is defined %}
- in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"
+ in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"; \
{% endif %}
+ mkdir -p -m 0700 /target/root/.ssh; \
+ cp /authorized_keys /target/root/.ssh/
d-i hw-detect/load_firmware boolean false
-d-i netcfg/disable_dhcp boolean true
d-i netcfg/choose_interface select {{ install_interface | default(hostvars[hostname].network_cooked.primary.interface) }}
+{% if 'install_dhcp' in hostvars[hostname] and hostvars[hostname].install_dhcp %}
+d-i netcfg/disable_dhcp boolean false
d-i netcfg/disable_autoconfig boolean false
+{% else %}
+d-i netcfg/disable_dhcp boolean true
+d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string {{ hostvars[hostname].network_cooked.primary.ip }}
d-i netcfg/get_netmask string {{ hostvars[hostname].network_cooked.primary.mask }}
d-i netcfg/get_gateway string {{ hostvars[hostname].network_cooked.primary.gateway }}
d-i netcfg/get_nameservers string {{ hostvars[hostname].network_cooked.nameservers | join(' ') }}
d-i netcfg/confirm_static boolean true
+{% endif %}
d-i netcfg/hostname string {{ hostname }}
d-i netcfg/get_hostname string {{ hostname }}
in-target bash -c "apt-get update -q && apt-get full-upgrade -y -q"; \
in-target bash -c "passwd -d root && passwd -l root"; \
in-target bash -c "sed -e 's/^allow-hotplug/auto/' -i /etc/network/interfaces"; \
- mkdir -p -m 0700 /target/root/.ssh; \
- cp /authorized_keys /target/root/.ssh/; \
+{% if preseed_force_net_ifnames_policy is defined %}
+ mkdir -p /target/etc/systemd/network; \
+ in-target bash -c "echo '[Link]' > /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "echo 'NamePolicy={{ preseed_force_net_ifnames_policy }}' >> /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "update-initramfs -u"; \
+{% endif %}
{% if hostvars[hostname].ansible_port is defined %}
- in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"
+ in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"; \
{% endif %}
+ mkdir -p -m 0700 /target/root/.ssh; \
+ cp /authorized_keys /target/root/.ssh/
d-i hw-detect/load_firmware boolean false
-d-i netcfg/disable_dhcp boolean true
d-i netcfg/choose_interface select {{ install_interface | default(hostvars[hostname].network_cooked.primary.interface) }}
+{% if 'install_dhcp' in hostvars[hostname] and hostvars[hostname].install_dhcp %}
+d-i netcfg/disable_dhcp boolean false
d-i netcfg/disable_autoconfig boolean false
+{% else %}
+d-i netcfg/disable_dhcp boolean true
+d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string {{ hostvars[hostname].network_cooked.primary.ip }}
d-i netcfg/get_netmask string {{ hostvars[hostname].network_cooked.primary.mask }}
d-i netcfg/get_gateway string {{ hostvars[hostname].network_cooked.primary.gateway }}
d-i netcfg/get_nameservers string {{ hostvars[hostname].network_cooked.nameservers | join(' ') }}
d-i netcfg/confirm_static boolean true
+{% endif %}
d-i netcfg/hostname string {{ hostname }}
d-i netcfg/get_hostname string {{ hostname }}
in-target bash -c "apt-get update -q && apt-get full-upgrade -y -q"; \
in-target bash -c "passwd -d root && passwd -l root"; \
in-target bash -c "sed -e 's/^allow-hotplug/auto/' -i /etc/network/interfaces"; \
- mkdir -p -m 0700 /target/root/.ssh; \
- cp /authorized_keys /target/root/.ssh/; \
+{% if preseed_force_net_ifnames_policy is defined %}
+ mkdir -p /target/etc/systemd/network; \
+ in-target bash -c "echo '[Link]' > /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "echo 'NamePolicy={{ preseed_force_net_ifnames_policy }}' >> /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "update-initramfs -u"; \
+{% endif %}
{% if hostvars[hostname].ansible_port is defined %}
- in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"
+ in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"; \
{% endif %}
+ mkdir -p -m 0700 /target/root/.ssh; \
+ cp /authorized_keys /target/root/.ssh/
d-i hw-detect/load_firmware boolean false
-d-i netcfg/disable_dhcp boolean true
d-i netcfg/choose_interface select {{ install_interface | default(hostvars[hostname].network_cooked.primary.interface) }}
+{% if 'install_dhcp' in hostvars[hostname] and hostvars[hostname].install_dhcp %}
+d-i netcfg/disable_dhcp boolean false
d-i netcfg/disable_autoconfig boolean false
+{% else %}
+d-i netcfg/disable_dhcp boolean true
+d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string {{ hostvars[hostname].network_cooked.primary.ip }}
d-i netcfg/get_netmask string {{ hostvars[hostname].network_cooked.primary.mask }}
d-i netcfg/get_gateway string {{ hostvars[hostname].network_cooked.primary.gateway }}
d-i netcfg/get_nameservers string {{ hostvars[hostname].network_cooked.nameservers | join(' ') }}
d-i netcfg/confirm_static boolean true
+{% endif %}
d-i netcfg/hostname string {{ hostname }}
d-i netcfg/get_hostname string {{ hostname }}
in-target bash -c "apt-get update -q && apt-get full-upgrade -y -q"; \
in-target bash -c "passwd -d root && passwd -l root"; \
in-target bash -c "sed -e 's/^allow-hotplug/auto/' -i /etc/network/interfaces"; \
- mkdir -p -m 0700 /target/root/.ssh; \
- cp /authorized_keys /target/root/.ssh/; \
+{% if preseed_force_net_ifnames_policy is defined %}
+ mkdir -p /target/etc/systemd/network; \
+ in-target bash -c "echo '[Link]' > /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "echo 'NamePolicy={{ preseed_force_net_ifnames_policy }}' >> /etc/systemd/network/90-namepolicy.link"; \
+ in-target bash -c "update-initramfs -u"; \
+{% endif %}
{% if hostvars[hostname].ansible_port is defined %}
- in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"
+ in-target bash -c "sed -e 's/^\(\s*#*\s*Port.*\)/Port {{ hostvars[hostname].ansible_port }}/' -i /etc/ssh/sshd_config"; \
{% endif %}
+ mkdir -p -m 0700 /target/root/.ssh; \
+ cp /authorized_keys /target/root/.ssh/
+---
vm_define_autostart: "{{ not vm_define_installer and hostvars[hostname].install_cooked.autostart | default(False) }}"
vm_define_start: yes
command: undefine
-- name: redefine vm
+- name: define vm
virt:
command: define
xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}"
timeout: 10
- name: mark vm as autostarted
- when: vm_define_autostart | bool
virt:
name: "{{ hostname }}"
- autostart: yes
+ autostart: "{{ vm_define_autostart }}"
command: info ## virt module needs either command or state
libvirt-daemon-system
- python-libvirt
- haveged
+ - bridge-utils
+ - acl
state: present
- name: configure haveged
---
- name: create disks for vm
with_dict: "{{ hostvars[hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[hostname].install_cooked.disks.scsi | default({})) }}"
+ loop_control:
+ label: "{{ item.value.vg }} / {{ item.value.lv }} ({{ item.value.size }})"
lvol:
vg: "{{ item.value.vg }}"
lv: "{{ item.value.lv }}"
name: preseed
vars:
ssh_users_root: "{{ hostvars[hostname].ssh_users_root }}"
- install_interface: enp1s1
preseed_tmpdir: "{{ tmpdir.path }}"
+ preseed_force_net_ifnames_policy: path
+ install_interface: enp1s1
- name: Make preseed workdir readable by qemu
acl:
- name: install systemd network link units
with_items: "{{ network.systemd_link.interfaces }}"
loop_control:
+ label: "{{ item.name }}"
index_var: interface_index
template:
src: systemd.link.j2
echo "installing $name with $distro/$codename"
echo ""
+rm -f ".cache/facts/$name"
+
echo "######## running the install playbook ########"
exec ansible-playbook -e "hostname=$name" -e "install_distro=$distro" -e "install_codename=$codename" $@ $(basename "$0" .sh).yml