2f503c228e
This change makes it possible to deploy ACNG within a physical host NOT automatically tied to an MNAIO installation. This also adds an infra preseed file which can be used to provision physical hosts. By default the domain name is now passed into the server boot params which is useful when setting up an environment in support of RFC-1034/5. Ubuntu 16.04 has an issue with the options "quiet splash" being passed in which cause it to have no usable console. See [Related-Issue] for more. Related-Issue: #1656605 Change-Id: I731dfb70e4b5d676d8c22082da77c0d22d5afb58 Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
342 lines
10 KiB
YAML
342 lines
10 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: pxe_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
|
|
|
|
- name: Install host distro packages
|
|
package:
|
|
pkg: "{{ item }}"
|
|
state: "latest"
|
|
update_cache: yes
|
|
cache_valid_time: 600
|
|
with_items: "{{ mnaio_pxe_distro_packages }}"
|
|
|
|
- name: Create base directories
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "root"
|
|
group: "root"
|
|
mode: "0755"
|
|
with_items:
|
|
- /var/www/pxe
|
|
- /var/www/pxe/images
|
|
- /var/www/pxe/iso
|
|
- /var/www/pxe/networking
|
|
- /var/www/pxe/scripts
|
|
- /var/www/pxe/templates
|
|
- /var/lib/tftpboot
|
|
- /var/lib/tftpboot/boot-screens
|
|
- /var/lib/tftpboot/preseed
|
|
- /var/lib/tftpboot/pxelinux.cfg
|
|
|
|
- name: Get root public key
|
|
command: cat /root/.ssh/id_rsa.pub
|
|
register: public_key_get
|
|
changed_when: false
|
|
when:
|
|
- tftp_ssh_key is undefined
|
|
|
|
- name: Set key facts
|
|
set_fact:
|
|
tftp_ssh_key: "{{ public_key_get.stdout }}"
|
|
when:
|
|
- tftp_ssh_key is undefined
|
|
|
|
tasks:
|
|
- name: Drop NGINX config
|
|
copy:
|
|
src: "pxe/sites-enabled.default"
|
|
dest: /etc/nginx/sites-enabled/default
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
notify:
|
|
- restart nginx
|
|
|
|
- name: Drop tftp-hpa configs
|
|
copy:
|
|
src: "pxe/tftp/tftp-hpa"
|
|
dest: /etc/default/tftpd-hpa
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
notify:
|
|
- restart tftp-hpa
|
|
|
|
- name: Drop inetd configs
|
|
copy:
|
|
src: "pxe/tftp/inetd.conf"
|
|
dest: /etc/default/tftpd-hpa
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
notify:
|
|
- restart tftp-hpa
|
|
|
|
- name: Download image iso(s)
|
|
get_url:
|
|
url: "{{ item.value.image_iso_url }}"
|
|
dest: "/var/www/pxe/iso/{{ item.value.image_name }}"
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Remove image directory if it exists
|
|
file:
|
|
path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
|
|
state: absent
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Create image directory if it exists
|
|
file:
|
|
path: "/var/www/pxe/images/{{ item.value.image_short_name }}"
|
|
state: directory
|
|
owner: "root"
|
|
group: "root"
|
|
mode: "0755"
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Extract ISO(s) contents
|
|
command: "7z x /var/www/pxe/iso/{{ item.value.image_name }}"
|
|
args:
|
|
chdir: "/var/www/pxe/images/{{ item.value.image_short_name }}"
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Download pxelinux
|
|
get_url:
|
|
url: "{{ pxelinux_url }}"
|
|
dest: "/var/www/pxe/{{ pxelinux_name }}"
|
|
tmp_dest: /tmp/
|
|
|
|
- name: Remove image directory if it exists
|
|
file:
|
|
path: "/var/www/pxe/{{ pxelinux_short_name }}"
|
|
state: absent
|
|
|
|
- name: Extract pxelinux contents
|
|
command: "tar -xf /var/www/pxe/{{ pxelinux_name }}"
|
|
args:
|
|
chdir: "/var/www/pxe"
|
|
|
|
- name: Drop pxelinux.cfg default menu
|
|
copy:
|
|
src: "pxe/tftp/pxelinux.cfg.default"
|
|
dest: "{{ item }}"
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_items:
|
|
- /var/lib/tftpboot/pxelinux.cfg/default
|
|
- /var/lib/tftpboot/boot-screens/syslinux.cfg
|
|
|
|
# These links are using the shell command because the file module does not create hard links
|
|
- name: Create hard links
|
|
shell: |
|
|
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/ldlinux.c32
|
|
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/core/pxelinux.0 /var/lib/tftpboot/pxelinux.0
|
|
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/lib/libcom32.c32 /var/lib/tftpboot/boot-screens/libcom32.c32
|
|
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/libutil/libutil.c32 /var/lib/tftpboot/boot-screens/libutil.c32
|
|
ln -f /var/www/pxe/{{ pxelinux_short_name }}/bios/com32/menu/vesamenu.c32 /var/lib/tftpboot/boot-screens/vesamenu.c32
|
|
|
|
- name: Drop boot-screens default menu
|
|
template:
|
|
src: "pxe/tftp/menu.cfg.j2"
|
|
dest: /var/lib/tftpboot/boot-screens/menu.cfg
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
tags:
|
|
- boot-menu
|
|
|
|
- name: Drop tftp-hpa configs
|
|
template:
|
|
src: "pxe/tftp/tftp-hpa"
|
|
dest: /etc/default/tftpd-hpa
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
notify:
|
|
- restart tftp-hpa
|
|
|
|
- name: network scripts for pxe
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/{{ item.src }}"
|
|
dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }}
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_items:
|
|
- src: basic-interface.cfg
|
|
dest: "basic-{{ ansible_os_family | lower }}-interface.cfg"
|
|
dir: networking
|
|
- src: vm-post-install-script.sh.j2
|
|
dest: "vm-post-install-{{ ansible_os_family | lower }}-script.sh"
|
|
dir: scripts
|
|
- src: general-post-install-script.sh.j2
|
|
dest: "general-post-install-{{ ansible_os_family | lower }}-script.sh"
|
|
dir: scripts
|
|
|
|
- name: network scripts for an MNAIO
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/{{ item.src }}"
|
|
dest: /var/www/pxe/{{ item.dir }}/{{ item.dest }}
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
when:
|
|
- groups['mnaio_hosts'] | default([]) | length > 0
|
|
with_items:
|
|
- src: mnaio-bridges.cfg.j2
|
|
dest: mnaio-bridges.cfg
|
|
dir: networking
|
|
- src: mnaio-post-install-script.sh.j2
|
|
dest: mnaio-post-install-{{ ansible_os_family | lower }}-script.sh
|
|
dir: scripts
|
|
|
|
- name: network scripts for servers
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/vm-bridges.cfg.j2"
|
|
dest: /var/www/pxe/networking/{{ hostvars[item]['server_hostname'] }}-bridges.cfg
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: tftp configs for servers
|
|
template:
|
|
src: "pxe/tftp/pxelinux.cfg.macaddr.j2"
|
|
dest: "/var/lib/tftpboot/pxelinux.cfg/01-{{ hostvars[item]['server_mac_address'] | replace(':', '-') | lower }}"
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_items: "{{ groups['pxe_servers'] }}"
|
|
|
|
- name: Preseeds for pxe mnaio
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/mnaio.preseed.j2"
|
|
dest: /var/lib/tftpboot/preseed/mnaio.preseed
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Preseeds for pxe vm
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/vm.preseed.j2"
|
|
dest: /var/lib/tftpboot/preseed/vm.preseed
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Preseeds for pxe vm-compute
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/vm-compute.preseed.j2"
|
|
dest: /var/lib/tftpboot/preseed/vm-compute.preseed
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Preseeds for pxe compute
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/compute.preseed.j2"
|
|
dest: /var/lib/tftpboot/preseed/compute.preseed
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Preseeds for pxe infra
|
|
template:
|
|
src: "pxe/{{ ansible_os_family | lower }}/infra.preseed.j2"
|
|
dest: /var/lib/tftpboot/preseed/infra.preseed
|
|
mode: "0644"
|
|
owner: root
|
|
group: root
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Create netboot bind mount path
|
|
file:
|
|
path: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
|
|
state: directory
|
|
owner: "root"
|
|
group: "root"
|
|
mode: "0755"
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Unbind mount netboot images
|
|
mount:
|
|
name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
|
|
src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
|
|
opts: bind
|
|
fstype: none
|
|
state: unmounted
|
|
register: fstab
|
|
with_dict: "{{ images }}"
|
|
|
|
- name: Ensure permissions are correct
|
|
shell: |
|
|
# Fix perms if needed
|
|
find /var/lib/tftpboot -type d -exec chmod 0755 {} \;
|
|
find /var/lib/tftpboot -type f -exec chmod 0644 {} \;
|
|
find /var/www/pxe -type d -exec chmod 0755 {} \;
|
|
|
|
- name: Bind mount netboot images
|
|
mount:
|
|
name: "/var/lib/tftpboot/{{ item.value.image_short_name }}"
|
|
src: "/var/www/pxe/images/{{ item.value.image_netboot }}"
|
|
opts: bind
|
|
fstype: none
|
|
state: mounted
|
|
register: fstab
|
|
with_dict: "{{ images }}"
|
|
|
|
environment: "{{ deployment_environment_variables | default({}) }}"
|
|
|
|
handlers:
|
|
- name: restart nginx
|
|
service:
|
|
name: "nginx"
|
|
state: restarted
|
|
enabled: yes
|
|
|
|
- name: restart tftp-hpa
|
|
service:
|
|
name: "tftpd-hpa"
|
|
state: restarted
|
|
enabled: yes
|
|
|
|
- name: restart inetd
|
|
service:
|
|
name: "inetutils-inetd"
|
|
state: restarted
|
|
enabled: yes
|
|
|
|
tags:
|
|
- deploy-pxe
|