!!! warning "Document Under Construction" This document is very unfinished and should **NOT** be followed by anyone for deployment at this time. **Purpose**: Deploying OpenStack via Ansible. ## Required Hardware/Infrastructure Breakdown | **Hostname** | **IP** | **Storage** | **Memory** | **CPU** | **Network** | **Purpose** | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | OPENSTACK-BOOTSTRAPPER | 192.168.3.46 (eth0) | 120GB | 8GB | 8-Cores | eth0 | OpenStack Ansible Playbook Deployment Node | | OPENSTACK-NODE-01 | 192.168.3.43 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node | | OPENSTACK-NODE-02 | 192.168.3.44 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node | | OPENSTACK-NODE-03 | 192.168.3.45 (eth0) | 250GB (OS), 500GB (Ceph Storage) | 32GB | 16-Cores | eth0, eth1 | OpenStack Cluster/Target Node | ## Configure Hard-Coded DNS for Cluster Nodes We want to ensure everything works even if the nodes have no internet access. By hardcoding the FQDNs, this protects us against several possible stupid situations. Run the following script to add the DNS entries. ```sh # Make yourself root sudo su ``` !!! note "Run `sudo su` Separately" When I ran `sudo su` and the echo commands below as one block of commands, it did not correctly write the changes to the `/etc/hosts` file. Just run `sudo su` by itself, then you can copy paste the codeblock below for all of the echo lines for each DNS entry. ```sh # Add the OpenStack node entries to /etc/hosts echo "192.168.3.43 OPENSTACK-NODE-01.bunny-lab.io OPENSTACK-NODE-01" >> /etc/hosts echo "192.168.3.44 OPENSTACK-NODE-02.bunny-lab.io OPENSTACK-NODE-02" >> /etc/hosts echo "192.168.3.45 OPENSTACK-NODE-03.bunny-lab.io OPENSTACK-NODE-03" >> /etc/hosts ``` ### Validate DNS Entries Added ```sh cat /etc/hosts ``` !!! example "/etc/hosts Example Contents" When you run `cat /etc/hosts`, you should see output similar to the following: ```ini title="/etc/hosts" 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.3.43 OPENSTACK-NODE-01.bunny-lab.io OPENSTACK-NODE-01 192.168.3.44 OPENSTACK-NODE-02.bunny-lab.io OPENSTACK-NODE-02 192.168.3.45 OPENSTACK-NODE-03.bunny-lab.io OPENSTACK-NODE-03 ``` ## OpenStack Deployment Node The "Deployment" node / bootstrapper is responsible for running Ansible playbooks against the cluster nodes that will eventually be running OpenStack. [Original Deployment Node Documentation](https://docs.openstack.org/project-deploy-guide/openstack-ansible/latest/deploymenthost.html) ### Install Necessary Software ```sh sudo su dnf upgrade dnf install -y git chrony openssh-server python3-devel sudo dnf group install -y "Development Tools" ``` ### Configure SSH keys Ansible uses SSH with public key authentication to connect the deployment host and target hosts. Run the following commands to configure this. !!! warning "Do not run as root" You want to make sure you run these commands as a normal user. (e.g. `nicole`). ``` sh # Generate SSH Keys (Private / Public) ssh-keygen # Install Public Key on OpenStack Cluster/Target Nodes ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-01.bunny-lab.io ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-02.bunny-lab.io ssh-copy-id -i /home/nicole/.ssh/id_rsa.pub nicole@openstack-node-03.bunny-lab.io # Validate that SSH Authentication Works Successfully on Each Node ssh nicole@openstack-node-01.bunny-lab.io ssh nicole@openstack-node-02.bunny-lab.io ssh nicole@openstack-node-03.bunny-lab.io ```