From f525e58e34afa9595a112ad2179ec08caadffbef Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Sun, 9 Jul 2017 17:41:19 -0700 Subject: [PATCH 1/3] Install nginx, to serve files to PXE clients --- roles/tftp-server/files/pxe | 15 ++++++++++++ roles/tftp-server/handlers/main.yml | 3 +++ roles/tftp-server/tasks/d-i.yml | 32 ++++++++++++++++++++++++++ roles/tftp-server/tasks/main.yml | 33 ++------------------------- roles/tftp-server/tasks/webserver.yml | 22 ++++++++++++++++++ 5 files changed, 74 insertions(+), 31 deletions(-) create mode 100644 roles/tftp-server/files/pxe create mode 100644 roles/tftp-server/handlers/main.yml create mode 100644 roles/tftp-server/tasks/d-i.yml create mode 100644 roles/tftp-server/tasks/webserver.yml diff --git a/roles/tftp-server/files/pxe b/roles/tftp-server/files/pxe new file mode 100644 index 0000000..927e0c4 --- /dev/null +++ b/roles/tftp-server/files/pxe @@ -0,0 +1,15 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + + root /srv/pxe; + + server_name {{ inventory_hostname }}.{{ video.debconf.org }}; + + location / { + fancyindex on; + } + + access_log /var/log/nginx/pxe-access.log; + error_log /var/log/nginx/pxe-error.log; +} diff --git a/roles/tftp-server/handlers/main.yml b/roles/tftp-server/handlers/main.yml new file mode 100644 index 0000000..79f7f57 --- /dev/null +++ b/roles/tftp-server/handlers/main.yml @@ -0,0 +1,3 @@ +--- +- name: systemctl restart nginx + command: systemctl restart nginx diff --git a/roles/tftp-server/tasks/d-i.yml b/roles/tftp-server/tasks/d-i.yml new file mode 100644 index 0000000..5b4156e --- /dev/null +++ b/roles/tftp-server/tasks/d-i.yml @@ -0,0 +1,32 @@ +--- +- name: download TFTP boot image + get_url: + url: "{{ netboot_image }}" + dest: /srv/tftp/netboot.tar.gz + +- name: extract TFTP boot image + unarchive: + src: /srv/tftp/netboot.tar.gz + dest: /srv/tftp + remote_src: true + creates: /srv/tftp/pxelinux.0 + +- name: write preseed.cfg + template: + src: preseed.cfg.j2 + dest: /srv/tftp/preseed.cfg + +- name: inject preseed into menu (find files) + find: + paths: /srv/tftp + recurse: true + patterns: txt.cfg + register: menus + +- name: inject preseed into menu (do injection) + lineinfile: + dest: "{{ item.path }}" + regexp: (\s+append\s+.*\s+initrd=\S+)\s+(?!auto=true)(.*) + backrefs: true + line: \1 auto=true interface=auto url=tftp://10.20.0.1/preseed.cfg \2 + with_items: "{{ menus.files }}" diff --git a/roles/tftp-server/tasks/main.yml b/roles/tftp-server/tasks/main.yml index 5b4156e..29c1af3 100644 --- a/roles/tftp-server/tasks/main.yml +++ b/roles/tftp-server/tasks/main.yml @@ -1,32 +1,3 @@ --- -- name: download TFTP boot image - get_url: - url: "{{ netboot_image }}" - dest: /srv/tftp/netboot.tar.gz - -- name: extract TFTP boot image - unarchive: - src: /srv/tftp/netboot.tar.gz - dest: /srv/tftp - remote_src: true - creates: /srv/tftp/pxelinux.0 - -- name: write preseed.cfg - template: - src: preseed.cfg.j2 - dest: /srv/tftp/preseed.cfg - -- name: inject preseed into menu (find files) - find: - paths: /srv/tftp - recurse: true - patterns: txt.cfg - register: menus - -- name: inject preseed into menu (do injection) - lineinfile: - dest: "{{ item.path }}" - regexp: (\s+append\s+.*\s+initrd=\S+)\s+(?!auto=true)(.*) - backrefs: true - line: \1 auto=true interface=auto url=tftp://10.20.0.1/preseed.cfg \2 - with_items: "{{ menus.files }}" +- include: webserver.yml +- include: d-i.yml diff --git a/roles/tftp-server/tasks/webserver.yml b/roles/tftp-server/tasks/webserver.yml new file mode 100644 index 0000000..684ae0e --- /dev/null +++ b/roles/tftp-server/tasks/webserver.yml @@ -0,0 +1,22 @@ +--- +- name: install nginx + apt: + name: nginx-extras + +- name: remove default nginx vhost + file: /etc/nginx/sites-available/default + state: absent + notify: systemctl restart nginx + +- name: place pxe nginx vhost + copy: + src: files/pxe + dest: /etc/nginx/sites-available/pxe + notify: systemctl restart nginx + +- name: enable pxe nginx vhost + file: + state: link + src: /etc/nginx/sites-available/pxe + dest: /etc/nginx/sites-enabled/pxe + notify: systemctl restart nginx From 53f9405d17acb6b78e9774dbee7c634eeefda324 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Sun, 9 Jul 2017 18:40:53 -0700 Subject: [PATCH 2/3] Template a late_command With the option of specifing an inventory in a separate git repository. --- roles/tftp-server/defaults/main.yml | 9 +++- roles/tftp-server/tasks/d-i.yml | 11 ++++ .../tftp-server/templates/late_command.sh.j2 | 52 +++++++++++++++++++ roles/tftp-server/templates/preseed.cfg.j2 | 6 +-- 4 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 roles/tftp-server/templates/late_command.sh.j2 diff --git a/roles/tftp-server/defaults/main.yml b/roles/tftp-server/defaults/main.yml index ae67b9c..fcb9ae5 100644 --- a/roles/tftp-server/defaults/main.yml +++ b/roles/tftp-server/defaults/main.yml @@ -1,6 +1,5 @@ --- netboot_image: https://deb.debian.org/debian/dists/stretch/main/installer-amd64/current/images/netboot/netboot.tar.gz -late_command_url: https://anonscm.debian.org/cgit/debconf-video/ansible.git/plain/setup_ansible.sh time_zone: UTC domain: video.debconf.org @@ -12,3 +11,11 @@ apt_proxy: false user_name: videoteam # Defaults to not setting a password #user_password_crypted: changeme + +# Git repos: +playbook_repo: https://anonscm.debian.org/cgit/debconf-video/ansible.git +playbook_branch: master + +# To replace the stock inventory with your own, point at your own github repo +#inventory_repo: https://gitlab.com/yourname/ansible-inventory +#inventory_branch: master diff --git a/roles/tftp-server/tasks/d-i.yml b/roles/tftp-server/tasks/d-i.yml index 5b4156e..71f6e44 100644 --- a/roles/tftp-server/tasks/d-i.yml +++ b/roles/tftp-server/tasks/d-i.yml @@ -30,3 +30,14 @@ backrefs: true line: \1 auto=true interface=auto url=tftp://10.20.0.1/preseed.cfg \2 with_items: "{{ menus.files }}" + +- name: create d-i directory + file: + path: /srv/pxe/d-i/{{ debian_version }} + state: directory + recurse: true + +- name: generate late_command.sh + template: + src: late_command.sh.j2 + dest: /srv/pxe/d-i/late_command.sh diff --git a/roles/tftp-server/templates/late_command.sh.j2 b/roles/tftp-server/templates/late_command.sh.j2 new file mode 100644 index 0000000..45929e3 --- /dev/null +++ b/roles/tftp-server/templates/late_command.sh.j2 @@ -0,0 +1,52 @@ +#!/bin/sh + +set -eufx + +# This script setups ansible and runs it +# It should be ran at the end of the basic installation of a machine + +apt install -y ansible git eatmydata + +# We clone our ansible repository and copy the ansible config files + +git clone {{ playbook_repo }} /root/playbook-repo +(cd /root/playbook-repo; git checkout {{ playbook_branch }}) +INVENTORY=/root/playbook-repo/inventory/hosts +PLAYBOOKS=/root/playbook-repo/site.yml + +{% if inventory_repo is defined %} +git clone {{ inventory_repo }} /root/inventory-repo +(cd /root/inventory-repo; git checkout {{ inventory_branch }}) +INVENTORY=/root/inventory-repo/inventory/hosts +if [ -e /root/inventory-repo/site.yml ]; then + PLAYBOOKS="$PLAYBOOKS /root/inventory-repo/site.yml" +fi +{% endif %} + +cat > /usr/local/sbin/ansible-up < Date: Sun, 9 Jul 2017 18:48:08 -0700 Subject: [PATCH 3/3] d-i looks for preseed files in a well-known URL --- roles/tftp-server/tasks/d-i.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/tftp-server/tasks/d-i.yml b/roles/tftp-server/tasks/d-i.yml index 71f6e44..c63c189 100644 --- a/roles/tftp-server/tasks/d-i.yml +++ b/roles/tftp-server/tasks/d-i.yml @@ -11,11 +11,6 @@ remote_src: true creates: /srv/tftp/pxelinux.0 -- name: write preseed.cfg - template: - src: preseed.cfg.j2 - dest: /srv/tftp/preseed.cfg - - name: inject preseed into menu (find files) find: paths: /srv/tftp @@ -28,7 +23,7 @@ dest: "{{ item.path }}" regexp: (\s+append\s+.*\s+initrd=\S+)\s+(?!auto=true)(.*) backrefs: true - line: \1 auto=true interface=auto url=tftp://10.20.0.1/preseed.cfg \2 + line: \1 auto=true interface=auto url={{ inventory_hostname }} \2 with_items: "{{ menus.files }}" - name: create d-i directory @@ -37,6 +32,11 @@ state: directory recurse: true +- name: write preseed.cfg + template: + src: preseed.cfg.j2 + dest: /srv/pxe/d-i/{{ debian_version }}/preseed.cfg + - name: generate late_command.sh template: src: late_command.sh.j2