Browse Source

working prototype: Ansible re-write of the former shell and Chef code

master
Tamás Gérczei 2 years ago
commit
02bcb091f7
3 changed files with 117 additions and 0 deletions
  1. +1
    -0
      .gitignore
  2. +73
    -0
      smartos-updater.yml
  3. +43
    -0
      smartos_ipxe.j2

+ 1
- 0
.gitignore View File

@@ -0,0 +1 @@
*.retry

+ 73
- 0
smartos-updater.yml View File

@@ -0,0 +1,73 @@
---
# TODO: for now we take the PXE environment for granted, so won't install and configure DHCP and TFTP servers; that should become another block defaulting not to be processed
- name: update the SmartOS platform image on the PXE server
hosts:
- pxe_server
gather_facts: no
vars:
notification_recipient: tamas@gerczei.eu
smarthost: mail
tftp_dir: /data/tftproot
image_dir: "{{ tftp_dir }}/smartos"
tftp_user: tftp
tftp_group: tftp
download: false # prior download
tasks:

- name: fetch platform image
get_url:
src: https://us-east.manta.joyent.com/Joyent_Dev/public/SmartOS/platform-latest.tgz # no Manta at eu-ams-1
dest: /var/tmp/
when: download

- name: obtain provided platform image
copy:
src: /var/tmp/platform-latest.tgz
dest: /tmp/
remote_src: yes
register: tarball

- name: process new tarball
block:

- name: extract new platform image
unarchive:
src: /tmp/platform-latest.tgz
dest: "{{ image_dir }}"
extra_opts:
- --transform
- 's/^platform-//;s/i86pc/platform\/i86pc/'
remote_src: yes
owner: "{{ tftp_user }}"
group: "{{ tftp_group }}"
become: yes

- name: find images
find:
paths: "{{ image_dir }}"
file_type: directory
register: found_images

- name: determine latest release
set_fact:
last_release: "{{ ( found_images.files | sort(attribute='mtime',reverse=true) | first )['path'] | basename }}"

- name: generate iPXE configuration
template:
src: smartos_ipxe.j2
dest: "{{ tftp_dir }}/smartos.ipxe"
owner: "{{ tftp_user }}"
group: "{{ tftp_group }}"
backup: yes
become: yes

- name: send e-mail notification
mail:
host: "{{ smarthost }}"
from: "Raspi Root <noreply@fejezd.be>"
to: "{{ notification_recipient }}"
subject: "SmartOS update ({{ last_release }}) available"
body: "created {{ image_dir }}/{{ last_release }} and {{ tftp_dir }}/smartos.ipxe"

when: tarball|changed


+ 43
- 0
smartos_ipxe.j2 View File

@@ -0,0 +1,43 @@
#!ipxe
# courtesy of MerlinDMC, slightly modified by tgerczei
# {{ ansible_managed }}

set smartos-build {{ last_release }}

:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Operating systems ------------------------------
item smartos Boot SmartOS (${smartos-build})
item smartos_noimport Boot SmartOS (${smartos-build}) noimport
item --gap -- ------------------------------ Utilities ---------------------------------
item shell Enter iPXE shell
item reboot Reboot
item
item exit Exit (boot local disk)
choose --default smartos --timeout 5000 target && goto ${target}

:shell
echo Type exit to get the back to the menu
shell
set menu-timeout 0
goto start

:reboot
reboot

:exit
exit

:smartos
kernel /smartos/${smartos-build}/platform/i86pc/kernel/amd64/unix -B console=text,smartos=true
initrd /smartos/${smartos-build}/platform/i86pc/amd64/boot_archive
boot
goto start

:smartos_noimport
kernel /smartos/${smartos-build}/platform/i86pc/kernel/amd64/unix -B console=text,smartos=true,noimport=true
initrd /smartos/${smartos-build}/platform/i86pc/amd64/boot_archive
boot
goto start


Loading…
Cancel
Save