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
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
The installation is split in to two parts.
|
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
|
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/
|
- 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.
|
- 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
|
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