Update README, initialize the name "bifrost"
Update the main README with a section describing the intent of this project, and give it the name "bifrost". Merge deploy/ and enroll/ readme's into the main readme Move the baremetal.csv.example into the inventory directory
This commit is contained in:
parent
7ead3b66ef
commit
8a7174e310
151
README.rst
151
README.rst
@ -1,41 +1,150 @@
|
||||
Repo for collaborating on a minimal ironic-based installer.
|
||||
Bifrost
|
||||
=======
|
||||
|
||||
Bifrost is a set of ansible playbooks that automates the task of deploying a
|
||||
base image onto a set of known hardware using Ironic. It provides modular
|
||||
utility for one-off operating system deployment with as few operational requirements
|
||||
as reasonably possible.
|
||||
|
||||
This is split into roughly three steps:
|
||||
|
||||
- install:
|
||||
prepare the local environment by downloading and/or building machine images,
|
||||
and installing and configuring the necessary services.
|
||||
- enroll:
|
||||
take as input a hardware inventory file and enroll the listed hardware with
|
||||
Ironic, configuring each appropriately for deployment with the
|
||||
previously-downloaded images.
|
||||
- deploy:
|
||||
instruct Ironic to deploy the operating system onto each machine.
|
||||
|
||||
Deets on the etherpad for now:
|
||||
https://etherpad.openstack.org/p/OJYjW3fU9Q
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
The installation is split in to two parts.
|
||||
|
||||
The first part is a bash script which lays the basic groundwork of installing Ansible, while the second part is an Ansible playbook that installs Ironic and puts in place a basic noauth configuration. This means that keystone is NOT required to use this deployment.
|
||||
The first part is a bash script which lays the basic groundwork of installing
|
||||
Ansible itself.
|
||||
|
||||
The re-execution of the playbook will cause states to be re-asserted. If not already present, a number of software packages including MySQL and RabbitMQ will be installed on the host. Python code will be re-installed regardless if it has changed, RabbitMQ user passwords will be reset, and services will be restarted.
|
||||
Edit ./inventory/group_vars/all.yaml to match your environment.
|
||||
|
||||
- If MySQL is already installed, update mysql_password to match your local installation.
|
||||
- Change network_interface to match the interface that will need to service DHCP requests.
|
||||
- Change the ironic_db_password which is set by Ansible in MySQL and in Ironic's configuration file.
|
||||
|
||||
Install Steps:
|
||||
Then run::
|
||||
|
||||
cd setup
|
||||
bash ./env-setup.sh
|
||||
source /opt/stack/ansible/hacking/env-setup
|
||||
cd ..
|
||||
|
||||
The second part is an Ansible playbook that installs and configures Ironic
|
||||
in a stand-alone fashion.
|
||||
|
||||
* Keystone is NOT installed, and Ironic's API is accessible without
|
||||
authentication. It is possible to put basic password auth on Ironic's API by
|
||||
changing the nginx configuration accordingly.
|
||||
* Neutron is NOT installed. Ironic performs static IP injection via
|
||||
config-drive.
|
||||
* dnsmasq is configured statically and responds to all PXE boot requests by
|
||||
chain-loading to iPXE, which then fetches the ironic-python-agent ramdisk
|
||||
from Nginx.
|
||||
* standard ipmitool is used.
|
||||
TODO: make optional support for other hardware drivers
|
||||
|
||||
The re-execution of the playbook will cause states to be re-asserted. If not
|
||||
already present, a number of software packages including MySQL and RabbitMQ
|
||||
will be installed on the host. Python code will be re-installed regardless if
|
||||
it has changed, RabbitMQ user passwords will be reset, and services will be
|
||||
restarted.
|
||||
|
||||
Run::
|
||||
|
||||
ansible-playbook -vvvv -i inventory/localhost install/install.yaml
|
||||
|
||||
1. Edit ./inventory/group_vars/all.yaml to match your environment.
|
||||
- If MySQL is already installed, update mysql_password to match your local installation.
|
||||
- Change network_interface to match the interface that will need to service DHCP requests.
|
||||
- Change the ironic_db_password which is set by Ansible in MySQL and in Ironic's configuration file.
|
||||
- N.B. The testing option toggles the ironic driver. At the time this document was written disabling testing sets the driver to iLO.
|
||||
2. cd setup
|
||||
3. bash ./env-setup.sh
|
||||
4. source /opt/stack/ansible/hacking/env-setup
|
||||
5. ansible-playbook -vvvv -i ../inventory/localhost ./install.yaml
|
||||
|
||||
Manual CLI Use
|
||||
==============
|
||||
--------------
|
||||
|
||||
If you wish to utilize the CLI in no-auth mode, you must set two environment variables:
|
||||
If you wish to utilize Ironic's CLI in no-auth mode, you must set two
|
||||
environment variables:
|
||||
|
||||
- IRONIC_URL - A URL to the Ironic API, such as http://localhost:6385/
|
||||
- OS_AUTH_TOKEN - Any value, such as an empty space, is required to cause the client library to send requests directly to the API.
|
||||
- IRONIC_URL - A URL to the Ironic API, such as http://localhost:6385/
|
||||
- OS_AUTH_TOKEN - Any value, such as an empty space, is required to cause the client library to send requests directly to the API.
|
||||
|
||||
For your ease of use, setup/env-vars can be sourced to allow the CLI to connect
|
||||
to a local Ironic installation operating in noauth mode.
|
||||
|
||||
For your ease of use, setup/env-vars can be sourced to allow the CLI to connect to a local Ironic installation operating in noauth mode.
|
||||
|
||||
Hardware Enrollment
|
||||
===================
|
||||
Enrollment is covered by a README.rst file located in the enroll folder.
|
||||
|
||||
The following requirements are installed during the Install step above:
|
||||
|
||||
- openstack-infra/shade library -> https://review.openstack.org/159609
|
||||
- openstack-infra/os-client-config -> https://review.openstack.org/159563
|
||||
- os_baremetal ansible module under development -> https://github.com/juliakreger/ansible-modules-extras/blob/features/new-openstack/cloud/os_baremetal.py
|
||||
|
||||
You will also need a CSV file containing information about the hardware you are enrolling.
|
||||
|
||||
CSV File Format
|
||||
---------------
|
||||
|
||||
The CSV file has the following columns:
|
||||
|
||||
1. MAC Address
|
||||
2. Management username
|
||||
3. Management password
|
||||
4. Management Address
|
||||
5. CPU Count
|
||||
6. Memory size in MB
|
||||
7. Disk Storage in GB
|
||||
8. Flavor (Not Used)
|
||||
9. Type (Not Used)
|
||||
10. Host UUID
|
||||
11. Host or Node name
|
||||
12. Host IP Address to be set
|
||||
13. ipmi_target_channel - Requires: ipmi_bridging set to single
|
||||
14. ipmi_target_address - Requires: ipmi_bridging set to single
|
||||
15. ipmi_transit_channel - Requires: ipmi_bridging set to dual
|
||||
16. ipmi_transit_address - Requires: ipmi_bridging set to dual
|
||||
|
||||
Example definition::
|
||||
|
||||
00:11:22:33:44:55,root,undefined,192.168.122.1,1,8192,512,NA,NA,aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee,hostname_100,192.168.2.100,,,,
|
||||
|
||||
How this works?
|
||||
---------------
|
||||
|
||||
The enroll.yaml playbook requires a variable (baremetal_csv_file) be set or
|
||||
passed into the playbook execution. This is the path to the CSV file to be
|
||||
consumed and loaded into ironic.
|
||||
|
||||
Example::
|
||||
|
||||
ansible-playbook -i inventory/localhost -vvvv enroll/enroll.yaml -e baremetal_csv_file=inventory/baremetal.csv
|
||||
|
||||
Note that enrollment is a one-time operation. This module *does not*
|
||||
synchronize data for existing nodes. You should use the Ironic CLI to do this
|
||||
manually at the moment.
|
||||
|
||||
Hardware Deployment
|
||||
===================
|
||||
|
||||
Requirements:
|
||||
|
||||
- The baremetal.csv file that was utilized for the enrollment process.
|
||||
|
||||
How this works?
|
||||
---------------
|
||||
|
||||
The deploy.yaml playbook is intended to create configdrives for servers, and
|
||||
initiate the node deployments through Ironic. IPs are injected into the config
|
||||
drive and statically assigned.
|
||||
|
||||
Example::
|
||||
|
||||
ansible-playbook -i inventory/localhost -vvvv deploy/deploy.yaml -e baremetal_csv_file=inventory/baremetal.csv
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
Requirements:
|
||||
|
||||
- The baremetal.csv file that was utilized for the enrollment process.
|
||||
|
||||
How this works?
|
||||
===============
|
||||
|
||||
The deploy.yaml playbook is intended to create configdrives for servers, and initiate the node deployments through ironic.
|
||||
|
||||
Example:
|
||||
|
||||
ansible-playbook -i ../inventory/localhost -vvvv deploy.yaml -e baremetal_csv_file=../enroll/baremetal.csv
|
@ -1,45 +0,0 @@
|
||||
Getting Started
|
||||
===============
|
||||
|
||||
Requirements:
|
||||
|
||||
- openstack-infra/shade library -> https://review.openstack.org/159609
|
||||
- openstack-infra/os-client-config -> https://review.openstack.org/159563
|
||||
- os_baremetal ansible module under development -> https://github.com/juliakreger/ansible-modules-extras/blob/features/new-openstack/cloud/os_baremetal.py
|
||||
- Information defining your hardware in a CSV file.
|
||||
|
||||
CSV File Format
|
||||
===============
|
||||
|
||||
The CSV file has the following columns:
|
||||
|
||||
1. MAC Address
|
||||
2. Management username
|
||||
3. Management password
|
||||
4. Management Address
|
||||
5. CPU Count
|
||||
6. Memory size in MB
|
||||
7. Disk Storage in GB
|
||||
8. Flavor (Not Used)
|
||||
9. Type (Not Used)
|
||||
10. Host UUID
|
||||
11. Host or Node name
|
||||
12. Host IP Address to be set
|
||||
13. ipmi_target_channel - Requires: ipmi_bridging set to single
|
||||
14. ipmi_target_address - Requires: ipmi_bridging set to single
|
||||
15. ipmi_transit_channel - Requires: ipmi_bridging set to dual
|
||||
16. ipmi_transit_address - Requires: ipmi_bridging set to dual
|
||||
|
||||
Example:
|
||||
00:11:22:33:44:55,root,undefined,192.168.122.1,1,8192,512,Control,VM
|
||||
|
||||
An example file is included called baremetal.csv.example
|
||||
|
||||
How this works?
|
||||
===============
|
||||
|
||||
The enroll.yaml playbook, requires a variable be set or passed into the playbook execution of baremetal_csv_file which is the path to the CSV file to be consumed and loaded into ironic.
|
||||
|
||||
Example:
|
||||
|
||||
ansible-playbook -i ../inventory/localhost -vvvv enroll.yaml -e baremetal_csv_file=./baremetal.csv
|
Loading…
x
Reference in New Issue
Block a user