openstack-ansible-ops/pxelinux-provisioning
Kevin Carter 743b939640 Add basic provisioning using pxelinux
The basic provisioning tools we had in the MNAIO could long be used on a
set of physical machines however doing so required a healthy
understanding of everything going on under the hood. This change
extracts the PXE components out of our older MNAIO tooling and
will allow operators to easily deploy operating systems on machines in
the most compatible way possible.

Change-Id: I2188f0f0de7f8be331a35b5f22cf5114ea9b6718
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
2018-05-01 15:42:04 +00:00
..
playbooks Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
ansible-env.rc Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
bindep.txt Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
bootstrap.sh Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
build.sh Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
README.rst Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00
run.sh Add basic provisioning using pxelinux 2018-05-01 15:42:04 +00:00

OpenStack-Ansible pxelinux Provisioning

date

2018-04-24

tags

rackspace, openstack, ansible

category

*openstack, *nix

About this repository

This repository provides for basic "pxelinux" provisioning using debian based operating systems.

A complete set of options can be seen within the playbook/group_vars/all.yml file.

These provisioning playbooks have been created to use static inventory. Example static inventory used for these playbooks can be seen in the playbooks/inventory.yml file.

Scripts have been created to simplify the deployment of these playbooks and install ansible however they are 100% optional.

Playbook Usage

These playbooks require three groups, dhcp_hosts, pxe_hosts, and pxe_servers. The groups dhcp_hosts and pxe_hosts are used as targets to install the required packages and setup the TFTP and DHCP services. The group pxe_servers is as a set of targets that to deploy a given OS.

Each host in the pxe_servers group should have the something similar to the following configuration.

$name_used_in_inventory:
  ansible_os_family: "{{ default_images[default_image_name]['image_type'] }}"
  server_hostname: '$hostname'
  server_image: "ubuntu-16.04-amd64"
  server_default_interface: 'eth0'
  server_obm_ip: 192.168.1.100
  server_model: PowerEdge R710
  server_mac_address: 00:11:22:33:44:55
  server_extra_options: ''
  server_fixed_addr: "10.0.0.100"
  server_domain_name: "{{ default_server_domain_name }}"
  ansible_host: "{{ server_fixed_addr }}"

The options $name_used_in_inventory and $hostname need to be changed to reflect the machine being deployed as well as the server_mac_address and server_obm_ip entries. Note server_obm_ip is optional and not a required attribute.

With the inventory all setup the script build.sh can be used to deploy everything or the playbooks could be run with the following commmand.

ansible-playbook -vv -i /root/inventory.yml
                     -e setup_host=${SETUP_HOST:-"true"}
                     -e setup_pxeboot=${SETUP_PXEBOOT:-"true"}
                     -e setup_dhcpd=${SETUP_DHCPD:-"true"}
                     -e default_image=${DEFAULT_IMAGE:-"ubuntu-16.04-amd64"}
                     -e default_http_proxy=${DEFAULT_HTTP_PROXY:-''}
                     --force-handlers
                     playbooks/site.yml

Once the playbooks have completed, set the pxe_servers target hosts, PXE boot once and reboot them.

For convience a playbook named playbooks/idrac-config.yml has been added which will do minimal drac reset and re-configuration which will result in the host being ready to PXE. This playbook is not intended for production use and was included only as an example.