airshipctl/docs/source/virtual_redfish_bmc.md
Noor Muhammad Malik 52fc5c2557 Redfish Emulator Documentation - Stale Issue
Add the the Redfish emulator documentation from an abandoned stale
issue. The change is https://review.opendev.org/#/c/686389.

Will patch this with all the unaddressed comments from that patch.

Change-Id: Ib308be8bed72cf0d5dd5ad15eeebf8ef6bf7552f
Relates-To: #292
Closes: #292
2020-08-17 15:17:45 +05:00

333 lines
11 KiB
Markdown

# Redfish development tools - Virtual Redfish BMC
## Redfish Simulation Emulator
After reviewing a few Redfish simulation tools, our choice, moving forward,
was a tool called [sushy-tools](https://docs.openstack.org/sushy-tools/latest/)
developed by the Openstack community. This tool simulates the Redfish protocols
and provides the development community with independent access and testing of
the Redfish protocol implementations. This tool is actively being enhanced and
provides support for uefi boot. As such, one may encounter temporary hiccups
with the code if one tries to use the latest code, thus we provide the git
commit sha1 for the code we tested in the prerequisites sections that follow.
## About Sushy-Tools
The sushy-tools tool set includes two emulators - static and dynamic. We have
chosen to use the dynamic emulator as we want to use the libvirt backend to
mimic baremetal nodes behind sushy-emulator (Redfish BMC). The sushy-emulator
command-line tool contains functionality that is similar to the Virtual BMC
tool except it uses the Redfish frontend protocols rather than IPMI. Refer
to the diagram in the sushy-tools.png file which accompanies this
documentation for an illustration of the toolset.
The sushy-emulator provides many Redfish resources that help the developers
kickstart their efforts. These include:
- Systems Resource
- Managers Resource
- Indicators Resource
- Virtual Media Resource
## **Host Node Installation**
The host node needs to have the operating system installed along with some
additional tools. This section provides instructions for preparing Ubuntu
hosted on Bare Metal as well as describing some of the prerequisites and
tested software and hardware components.
### **Installation Prerequisites**
Before we begin the installation there are a few prerequisites that should be
considered, such as:
- Are you installing the sushy-tools directly on an existing node or host or
hosting the tool inside a virtual machine or instance?
- While it is possible to host the tools on Windows, our assumption and favored
choice was to install on a Linux with qemu/libvirtd support.
- Hardware is a matter of choice as longs as the hardware supports virtual
systems.
### **Tested Hardware and Software**
For our development purposes and based on what was available to us at the time,
we selected and tested the following hardware and software.
#### **Tested Hardware**
Dell R640 PowerEdge servers with the following accessories:
- Dual Intel Xeon 6126 2.6GHz CPUs
- 192GB - 2666Mhz RAM
- 800GB RAID10 storage
- 10GB bonded Intel NIC
However, we believe the minimum/functional requirements are much more relaxed.
An x86 hardware server/laptop with:
- around 6 vCPUs available
- 8GB RAM, for creating the emulator VM as well as the target VM
- 200GB storage, for creating root disks for the VMs
- optional to have a NIC, since VM-VM communication will be based on SW bridges
#### **Tested Base Operating System**
- Ubuntu 18.04
- Default server installation
- Other APT packages installed included: ``net-tools``, ``zip``, ``unzip``,
``git``, ``qemu``, and ``libvirtd`` with dependencies
## **Ubuntu 18.04 Hosted on Bare Metal**
### **OS installation**
Installation of Ubuntu 18.04 be done either using an ISO image mounted via
virtual media or physical media, adjust according to your host hardware.
Once you have the operating system installed, the following instructions should
be followed to install the requisite packages for the Redfish emulator, the
Redfish emulator itself and the backend virtual node.
#### **Installation of requisite APT packages**
```bash
sudo apt update -y
sudo apt install -y git python3-setuptools qemu-kvm libvirt-bin virtinst \
python3-flask python3-requests nginx libvirt-daemon virt-manager libvirt \
libvirt-python libvirt-client python3-libvirt python-libvirt
```
This completes the process for Ubuntu 18.04 hosted on bare metal, please
proceed to the **Configuration of the Redfish Emulator and vbmc-node** section.
## Ubuntu 18.04 Hosted on a VM
As indicated above in the installation prerequisites, one has the option of
installing sushy-tools directly on the host system or within a virtual machine
hosted by the host system. Initially, we went with the latter, simply because
it was easier to tear down and build up experimental Redfish simulation engine
without polluting our host node.
The ``sushy-tools`` is also available as a container image in the metal3
project. You can use [this image](https://quay.io/repository/metal3-io/sushy-tools)
to instantiate the setup using either Docker or Podman as your runtime.
### Building the Redfish VM on a host system
Note: You can use the [apache-wsgi-sushy-emulator](https://opendev.org/airship/airshipctl/src/branch/master/roles/apache-wsgi-sushy-emulator)
ansible role in the airshipctl repo to setup the emulator with/without
authentication, as a WSGI application behind an apache virtual host. This is
helpful specifically in environments where you want better scaling of your
testing infrastructure and is what Airship uses for testing.
For experimental/smaller setups the following method can also be used.
#### Get the files to create the VM
##### Download the Ubuntu 18.04 Server image
[ubuntu-18.04.1-server-amd64.iso](http://old-releases.ubuntu.com/releases/18.04.3/ubuntu-18.04.1-server-amd64.iso)
##### Download the Redfish_tools.zip archive and build the redfish emulator VM
[Redfish_tools.zip](https://github.com/dell-esg/tool-pkgs/blob/master/Redfish_tools.zip)
##### Scp the redfish_tools zip to the host machine
Note: The host machine must be capable of running a qemu libvirt VM.
##### Extract the files from the zip archive
Unzip the files in your home directory and cd into that newly created
``Redfish_tools`` subdirectory.
##### Modify the redfish.cfg file
Make the appropriate changes for your domain / network
```bash
user root
password r00tm3
timezone UTC
hostname redfish.oss.labs
gateway 192.168.122.1
nameserver 8.8.8.8
ntpserver 0.centos.pool.ntp.org
```
##### Adjust Redfish Admin VM Public IP
Change the IP and netmask below to the IP address and netmask for the Redfish
Admin VM on the Public API network
```bash
ens3 192.168.122.10 255.255.255.0 1500
```
##### Run the deployment script to deploy the VM
This will be done using the cfg file and the path to Ubuntu image that you
downloaded earlier.
```bash
./deploy-redfish-vm.py redfish.cfg \
/var/lib/libvirt/images/ubuntu-18.04.1-server-amd64.iso
```
Optional -- You can watch the VM deployment using virt-viewer (if you
previously installed the virt-viewer APT package on your host system and have
X windows installed)
```bash
virt-viewer redfish
```
##### When the VM has finished installing, start the VM
```bash
virsh start redfish
```
##### SSH into the VM using the IP address assigned in step 5
```bash
ssh root@192.168.122.10
```
### **Configuration of the Redfish Emulator and virtual node**
NOTE:If you deployed the Redfish infrastructure VM using the
"deploy-redfish-vm.py" script, you can skip to **Verify the sushy emulator
is working** as the script does the work in the next 3 sections for you.
#### **Configure and Install the Sushy-emulator**
```bash
git clone (https://opendev.org/openstack/sushy-tools.git)
cd sushy-tools/
python3 setup.py build
python3 setup.py install
```
#### **Update the redfishd and emulator.conf files**
```bash
scp localsystem//redfishd.service root@redfish_vm_ip://tmp
scp [localsystem://emulator.conf] root@redfish_vm_ip://tmp
vi /tmp/redfishd.service #adjust file for the redfish_vm_ip
vi /tmp/emulator.conf #adjust file for the redfish_vm_ip
mkdir -p /etc/redfish
cp /tmp/emulator.conf /etc/redfish/
cp /tmp/redfishd.service /etc/systemd/system
systemctl start redfishd
systemctl status redfishd
systemctl enable redfishd
```
#### **Build the virtual node**
```bash
tmpfile=$(mktemp /tmp/sushy-domain.XXXXXX)
virt-install --name virtual-node --ram 1024 --boot uefi --disk size=1 --vcpus 2\
--os-type linux --os-variant fedora28 --graphics vnc --print-xml > $tmpfile
virsh define --file $tmpfile
rm $tmpfile
```
#### **Verify the sushy emulator is working and the virtual-node was added**
```bash
curl -L 'http://192.168.122.10:8000/redfish/v1/Systems'
curl -L 'http://192.168.122.10:8000/redfish/v1/Systems/8e5b2dc4-0c1d-4509-af2f-7a4a8f2121a8'
```
Note: For virtual media boot, instead of using the IP address 192.168.122.10
(used above), ``localhost`` was used in the commands that follow.
#### Download the bionicpup64-8.0-uefi.iso image
[bionicpup64-8.0](http://distro.ibiblio.org/puppylinux/puppy-bionic/bionicpup64/bionicpup64-8.0-uefi.iso)
Note: Use the 64-bit image with 64-bit VMs as the 32-bit image will hang during
kernel initialization.
#### Upload the image to /tmp of the host node using your preferred scp tool
```bash
cp /tmp/bionicpup32-8.0-uefi.iso /var/www/nginxsite.com/public_html/mini.iso
```
One might also rename the bionicpup64-8.0-uefi.iso to mini.iso to match the
documentation
#### Use a browser to verify the image is downloadable from the webserver
With a browser goto the URL: ``http://localhost/mini.iso``
The browser should proceed to download the file
#### Build a UEFI bootable virtual node
```bash
virsh list --all
tmpfile=$(mktemp /tmp/sushy-domain.XXXXXX)
virt-install --name virtual-node --ram 1024 --boot uefi --disk size=1000 \
vcpus 2 --os-type linux --graphics - - vnc --print-xml > $tmpfile
virsh define --file $tmpfile
curl http://localhost:8000/redfish/v1/Systems/
```
#### Retrieve the system odata.id (47a3b9a3-3967-4d23-98d8-18de1c28e94f)
It is required in the commands below
```bash
curl -d '{"Image":"http://localhost/mini.iso", "Inserted": true}'\
-H "Content-Type: application/json" -X POST \
http://localhost:8000/redfish/v1/Managers/58893887-894-2487-2389-841168418919/VirtualMedia/Cd/Actions/VirtualMedia.InsertMedia-+
```
#### Mount the mini.iso
```bash
curl http://localhost:8000/redfish/v1/Managers/58893887-894-2487-2389-841168418919/VirtualMedia/Cd
```
#### Verify the image is mounted
Expect the following values in the returned data of the API call
- "Image": "mini.iso",
- "ConnectedVia": "URI", "Inserted": true
```bash
curl -X PATCH -H 'Content-Type: application/json' -d '{ "Boot":{\
"BootSourceOverrideTarget": "Cd", "BootSourceOverrideMode": "Uefi",\
"BootSourceOverrideEnabled": "Continuous" } }'\
http://localhost:8000/redfish/v1/Systems/47a3b9a3-3967-4d23-98d8-18de1c28e94f
```
#### This sets the BootSourceOverrideTarget,BootSourceOverrideMode
BootSourceOverrideEnabled fields for the vbmc-node**
```bash
curl http://localhost:8000/redfish/v1/Systems/47a3b9a3-3967-4d23-98d8-18de1c28e94f
```
#### To verify the BootSourceOverride fields are set correctly
```bash
curl -d '{"ResetType":"On"}' -H "Content-Type: application/json" -X POST\
http://localhost:8000/redfish/v1/Systems/47a3b9a3-3967-4d23-98d8-18de1c28e94f/Actions/ComputerSystem.Reset
```
#### Boot the node
Watch the system boot in the virt-manager console or via ``virt-viewer
virtual-node`` command
### **Some helpful links**
- [Openstack Sushy Storyboard](https://storyboard.openstack.org/#!/story/list)
- [Redfish development tools](https://docs.openstack.org/sushy-tools/latest/)