The following steps create the virtual test environment infrastructure including VMs, libvirt networks and setting up the virtual BMCs. The same steps can be achieved from the ocp-edge-demo-virt job by selecting the Provision stage only, without running the Deploy stage.
mkdir ocp-edge-virt-env
cd ocp-edge-virt-env/
yum install -y libvirt-devel python3-virtualenv gcc git python3-libvirt
dnf localinstall -y http://download.eng.bos.redhat.com/brewroot/vol/rhel-8/packages/sshpass/1.06/3.el8ae/x86_64/sshpass-1.06-3.el8ae.x86_64.rpm
virtualenv virtualenv
source virtualenv/bin/activate
pip install ansible==2.8 linchpin==1.7.6.2 libvirt-python netaddr lxml
curl -o virtualenv/bin/install_selinux_venv.sh https://raw.githubusercontent.com/CentOS-PaaS-SIG/linchpin/1792bb8fa02c4acbef63c987f715f0c3cf8b193e/scripts/install_selinux_venv.sh; bash -x virtualenv/bin/install_selinux_venv.sh
git -c http.sslVerify=false clone https://gitlab.cee.redhat.com/ocp-edge-qe/ocp-edge-demo.git
cd ocp-edge-demo/linchpin-workspace/
## Edit custom vars in hooks/ansible/ocp-edge-setup/extravars.yaml if needed
ansible -c local localhost -m template -a "src=hooks/ansible/ocp-edge-setup/extravars.yaml dest=$PWD/extravars.yaml" -e @hooks/ansible/ocp-edge-setup/extravars.yaml
linchpin --template-data @extravars.yaml -v destroy libvirt-network libvirt-new
linchpin --template-data @extravars.yaml -v up libvirt-network libvirt-new cfgs
virsh list --all
Id Name State
----------------------------------------------------
15 worker-3 running
- master-0 shut off
- master-1 shut off
- master-2 shut off
- worker-0 shut off
- worker-1 shut off
- worker-2 shut off
virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
baremetal active no yes
default active yes yes
provisioning active no yes
/root/.virtualenvs/vbmc/bin/python /root/.virtualenvs/vbmc/bin/vbmc list
+-------------+---------+----------------------+------+
| Domain name | Status | Address | Port |
+-------------+---------+----------------------+------+
| master-0 | running | ::ffff:192.168.123.1 | 6230 |
| master-1 | running | ::ffff:192.168.123.1 | 6231 |
| master-2 | running | ::ffff:192.168.123.1 | 6232 |
| worker-0 | running | ::ffff:192.168.123.1 | 6233 |
| worker-1 | running | ::ffff:192.168.123.1 | 6234 |
| worker-2 | running | ::ffff:192.168.123.1 | 6235 |
+-------------+---------+----------------------+------+
The commands below include all steps required for deploying the environment with dev-scripts
ssh kni@provisionhost
sudo subscription-manager register --serverurl=https://subscription.rhn.stage.redhat.com --username rhhi-next-qe --password redhat
sudo subscription-manager attach --pool=8a99f9a96def8e1a016df3fd21a60519
sudo dnf install -y git make firewalld
sudo systemctl --now enable firewalld
git clone https://github.com/openshift-metal3/dev-scripts.git
cd dev-scripts/
cp config_example.sh config_$USER.sh
## Edit config file
vi config_$USER.sh
#!/bin/bash
set +x
export PULL_SECRET='{ "auths": { "cloud.openshift.com":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K21jb3JuZWFyZWRoYXRjb20xZmM0MHZzZ3h3cWVxa294dmpxeWk0eHF0ZXk6V0YxU0U2Rk82NlYzSE5CMVczUVFDOE9CSk81MFJGTFVNRVZPTUhUNEE2WVQ5MlVRRFJTTUZOVEQyNjYzRUQ3Vg==","email":"[email protected]"},"quay.io":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K21jb3JuZWFyZWRoYXRjb20xZmM0MHZzZ3h3cWVxa294dmpxeWk0eHF0ZXk6V0YxU0U2Rk82NlYzSE5CMVczUVFDOE9CSk81MFJGTFVNRVZPTUhUNEE2WVQ5MlVRRFJTTUZOVEQyNjYzRUQ3Vg==","email":"[email protected]"},"registry.connect.redhat.com":{"auth":"NzQ4NDMyN3x1aGMtMUZDNDBWc0d4V3FFcWtPeFZKUXlJNFhRVGV5OmV5SmhiR2NpT2lKU1V6VXhNaUo5LmV5SnpkV0lpT2lJd01UWTRPRGhrTXpreE9UTTBOakpoWVdZNU1XUXdNalkwT0RCa01qWXhPU0o5LlBUVWlRcDRkMUozMW9maGpacm1zRjUxUDN5RGFZSzdOZC1FR0pxV0hHc0FIS0F0UlZ4ajZuUHl6LUlHb2RBdV8zUWdCX3hZRkN4NFVsZ3hheFhtVkNpU2k1NENvaVFyRTBkRlk5eHFxWUhwcXFTVlprS21LWGNPQ1NXRjF2OExRRTBJQVVEZm8xZlRtQ09KYUxsVnlVTnI3ZlFrYkdSRC1ZdWRhNEY2cFBZVHNlcnJnS1JsekRBRXNIdjJ4Rm9VcGJJYzVZb0czSzJuOVlBSFBhNHVVb25fckhDQTJadmZQb3V1ajdtZlZ2MjEtallXdGU0NTV5X1pZcjlfX095RElLSHdabjFqQ3Q5VG5IVC0yRFlQRl9WeThYek1GWTEwSmlqTmVHZEhmQkJ1RUtadFk5eS1SRjJ4QTlSNU9YcVNrdDczODRxWDd3VHBjWUh3MjlJeXVJREI2c0ZJaDFTWkdHTHpaZGJPUDBibzViMXV3YjRyTDhLRDlobld1SENkOVY0eC1RYjBQYlNYVDhRZEZSNVZCeG1BYkpGWHY5cU9lckRmckZWU0ZsVDByaVE0SmZKdVNUdUdYQWhwV25UREtyanJjYUpocmtsa09CSUx2YVNGVElCYl9QRkJxQmJaRnJmTkF0WHJZOU9DcmRZcEJWdVRwc01uaG84SWtyX09DSUhwRnFHdFZ4dkotRkkzeWtoOHEzWUt2aUNwd3VlVHhGY1JlOTdpMUxiYzlLV1JMWVhoNEVjVEtKenA0TjQ5WUM2aDRZM2JVZHpCeEU4bFVVQU55ZmlhWXFPa0pCUWRaOXNGb3VUa3JwU2xfUUFZN1l5LXpSNkxxZ3Z6QjF6UlFtemZZM2VtTmVYbHhXTjZtYUlpZ09NOFRmZm5ndlVldE45dl9tMDc4bmFv","email":"[email protected]"},"registry.redhat.io":{"auth":"NzQ4NDMyN3x1aGMtMUZDNDBWc0d4V3FFcWtPeFZKUXlJNFhRVGV5OmV5SmhiR2NpT2lKU1V6VXhNaUo5LmV5SnpkV0lpT2lJd01UWTRPRGhrTXpreE9UTTBOakpoWVdZNU1XUXdNalkwT0RCa01qWXhPU0o5LlBUVWlRcDRkMUozMW9maGpacm1zRjUxUDN5RGFZSzdOZC1FR0pxV0hHc0FIS0F0UlZ4ajZuUHl6LUlHb2RBdV8zUWdCX3hZRkN4NFVsZ3hheFhtVkNpU2k1NENvaVFyRTBkRlk5eHFxWUhwcXFTVlprS21LWGNPQ1NXRjF2OExRRTBJQVVEZm8xZlRtQ09KYUxsVnlVTnI3ZlFrYkdSRC1ZdWRhNEY2cFBZVHNlcnJnS1JsekRBRXNIdjJ4Rm9VcGJJYzVZb0czSzJuOVlBSFBhNHVVb25fckhDQTJadmZQb3V1ajdtZlZ2MjEtallXdGU0NTV5X1pZcjlfX095RElLSHdabjFqQ3Q5VG5IVC0yRFlQRl9WeThYek1GWTEwSmlqTmVHZEhmQkJ1RUtadFk5eS1SRjJ4QTlSNU9YcVNrdDczODRxWDd3VHBjWUh3MjlJeXVJREI2c0ZJaDFTWkdHTHpaZGJPUDBibzViMXV3YjRyTDhLRDlobld1SENkOVY0eC1RYjBQYlNYVDhRZEZSNVZCeG1BYkpGWHY5cU9lckRmckZWU0ZsVDByaVE0SmZKdVNUdUdYQWhwV25UREtyanJjYUpocmtsa09CSUx2YVNGVElCYl9QRkJxQmJaRnJmTkF0WHJZOU9DcmRZcEJWdVRwc01uaG84SWtyX09DSUhwRnFHdFZ4dkotRkkzeWtoOHEzWUt2aUNwd3VlVHhGY1JlOTdpMUxiYzlLV1JMWVhoNEVjVEtKenA0TjQ5WUM2aDRZM2JVZHpCeEU4bFVVQU55ZmlhWXFPa0pCUWRaOXNGb3VUa3JwU2xfUUFZN1l5LXpSNkxxZ3Z6QjF6UlFtemZZM2VtTmVYbHhXTjZtYUlpZ09NOFRmZm5ndlVldE45dl9tMDc4bmFv","email":"[email protected]"},"registry.svc.ci.openshift.org": { "auth": "c3lzdGVtLXNlcnZpY2VhY2NvdW50LWtuaS1kZWZhdWx0OmV5SmhiR2NpT2lKU1V6STFOaUlzSW10cFpDSTZJaUo5LmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyYm1raUxDSnJkV0psY201bGRHVnpMbWx2TDNObGNuWnBZMlZoWTJOdmRXNTBMM05sWTNKbGRDNXVZVzFsSWpvaVpHVm1ZWFZzZEMxMGIydGxiaTAxZEdkbU55SXNJbXQxWW1WeWJtVjBaWE11YVc4dmMyVnlkbWxqWldGalkyOTFiblF2YzJWeWRtbGpaUzFoWTJOdmRXNTBMbTVoYldVaU9pSmtaV1poZFd4MElpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVkV2xrSWpvaVlqZzNNRGt4WmpZdE5qRXlNeTB4TVdVNUxXRTJNVGt0TkRJd01UQmhPR1V3TURBeUlpd2ljM1ZpSWpvaWMzbHpkR1Z0T25ObGNuWnBZMlZoWTJOdmRXNTBPbXR1YVRwa1pXWmhkV3gwSW4wLm51VGR0RlczRENHcFpvT0pCbU45VjQwWG1wbmlZRE9tUnI2Z05vNGVwRVBrb1lDXzk1YmhWX0ttYjhoTnprOTNVTGtDNnJXNTVjTXFQMVM4RHh3QWw0RUxRZ2NFZXIyalBJLXZBNGUzdlZ5cHNLbS1XSkFxcWo2OGhNN0Z4ekMzRGgxY19lN19EQkJLOWtxZmcyRzZiNTJXQmI2RUhsODg2Q2Nza3JBVm1fbmprNS14ay1Ma1hSM3lXNW5JeXlZdXhNVGg1LUNMd3lQQy1yLVIzeklzdnlWelNPVTgyeUJaaE1tUmc3enUtOWlydThENHdqRFJQclhiSm1FV3lBM1FIUlJ2VTJuci01MTFEeEhEbWhtNW14YU0tSFA4emk3SU8zVEU5SU55S3BqTmo5eTIwNmtFN0NNSVNMWmRWWFl3MkpIQ1BmSmJQMHNJY3V0dnFvOTdGdw==" } } }'
set -x
NODES_PLATFORM=baremetal
INT_IF=eth1
PRO_IF=eth0
CLUSTER_PRO_IF=ens3
ROOT_DISK=/dev/sda
NODES_FILE=/home/kni/instackenv.json
MANAGE_BR_BRIDGE=n
NUM_WORKERS=1
CLUSTER_NAME=ostest
BASE_DOMAIN=test.metalkube.org
DNS_VIP=192.168.123.6
EXTERNAL_SUBNET=192.168.123.0/24
# Create json file to define nodes IPMI details
# Note: change MAC addresses according to the VMs created on your setup
# This file can also be copied from the hypervisor, in /tmp/ipmi_nodes.json
[kni@worker-1 dev-scripts]$ vi /home/kni/instackenv.json
{
"nodes": [
{
"name": "openshift-master-0",
"driver": "ipmi",
"resource_class": "baremetal",
"driver_info": {
"username": "admin",
"password": "password",
"address": "ipmi://192.168.123.1:6230",
"deploy_kernel": "http://172.22.0.1/images/ironic-python-agent.kernel",
"deploy_ramdisk": "http://172.22.0.1/images/ironic-python-agent.initramfs"
},
"ports": [{
"address": "52:54:00:31:bc:53",
"pxe_enabled": true
}],
"properties": {
"local_gb": "0",
"cpu_arch": "x86_64"
}
}
,
{
"name": "openshift-master-1",
"driver": "ipmi",
"resource_class": "baremetal",
"driver_info": {
"username": "admin",
"password": "password",
"address": "ipmi://192.168.123.1:6231",
"deploy_kernel": "http://172.22.0.1/images/ironic-python-agent.kernel",
"deploy_ramdisk": "http://172.22.0.1/images/ironic-python-agent.initramfs"
},
"ports": [{
"address": "52:54:00:0c:25:58",
"pxe_enabled": true
}],
"properties": {
"local_gb": "0",
"cpu_arch": "x86_64"
}
}
,
{
"name": "openshift-master-2",
"driver": "ipmi",
"resource_class": "baremetal",
"driver_info": {
"username": "admin",
"password": "password",
"address": "ipmi://192.168.123.1:6232",
"deploy_kernel": "http://172.22.0.1/images/ironic-python-agent.kernel",
"deploy_ramdisk": "http://172.22.0.1/images/ironic-python-agent.initramfs"
},
"ports": [{
"address": "52:54:00:06:c6:9a",
"pxe_enabled": true
}],
"properties": {
"local_gb": "0",
"cpu_arch": "x86_64"
}
}
,
{
"name": "openshift-worker-0",
"driver": "ipmi",
"resource_class": "baremetal",
"driver_info": {
"username": "admin",
"password": "password",
"address": "ipmi://192.168.123.1:6233",
"deploy_kernel": "http://172.22.0.1/images/ironic-python-agent.kernel",
"deploy_ramdisk": "http://172.22.0.1/images/ironic-python-agent.initramfs"
},
"ports": [{
"address": "52:54:00:1a:04:53",
"pxe_enabled": true
}],
"properties": {
"local_gb": "0",
"cpu_arch": "x86_64"
}
}
]
}
## Run make
make
In order to reach the environment from your laptop you need to set up NAT rules which forward traffic to the API and ingress VIPs. To set them up we can use the following playbook:
cd ocp-edge-virt-env/
source virtualenv/bin/activate
cd ocp-edge-demo/linchpin-workspace/
ansible-playbook -i inventories/ocp-edge.inventory hooks/ansible/ocp-edge-setup/iptables_console.yaml -e @extravars.yaml