Report: Configure for 1901.09
[csit.git] / resources / tools / testbed-setup / README.md
1 # Testbed Setup
2
3 ## Introduction
4
5 This directoctory contains the *high-level* process to set up a hardware
6 machine as a CSIT testbed, either for use as a physical testbed host or
7 as a VIRL server.
8
9 Code in this directory is NOT executed as part of a regular CSIT test case
10 but is stored here merely for archiving and documentation purposes.
11
12
13 ## Setting up a hardware host
14
15 Documentation below is just bullet points and assumes and understanding
16 of PXE boot and ansible.
17
18 This process is specific for LF lab, and both examples given here as
19 well as associated code, are based on the assumption that they are run
20 in LF environment. If run elsewhere, changes will be required to IP addresses
21 and other parameters.
22
23 The process below assumes that there is a host used for boostrapping (referred
24 to as "PXE boostrap server" below), and that the directory containig this README
25 is available on the PXE bootstrap server in ~testuser/host-setup.
26
27 ### Prepare the PXE bootstrap server when there is no http server AMD64
28
29   - `sudo apt-get install isc-dhcp-server tftpd-hpa nginx-light ansible`
30   - edit dhcpd.conf and place it to /etc/dhcp/
31   - `sudo cp dhcpd.cfg /etc/dhcp/`
32   - `sudo service isc-dhcp-server restart`
33   - `cd ~testuser/host-setup`
34   - `sudo mkdir /mnt/cdrom`
35   - Ubuntu Bionic
36     - `wget 'http://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ubuntu-18.04-server-amd64.iso'`
37     - `sudo mount -o loop ubuntu-18.04-server-amd64.iso /mnt/cdrom/`
38   - `sudo cp -r /mnt/cdrom/install/netboot/* /var/lib/tftpboot/`
39   - figure out where nginx will look for files on the filesystem when
40     responding to HTTP requests. The configuration is in one of the
41     files in /etc/nginx/conf.d/, /etc/nginx/sites-enabled/ or in
42     /etc/nginx/nginx.conf under section server/root. Save the path to WWW_ROOT
43   - `sudo mkdir -p ${WWW_ROOT}/download/ubuntu`
44   - `sudo cp -r /mnt/cdrom/* ${WWW_ROOT}/download/ubuntu/`
45   - `sudo cp /mnt/cdrom/ubuntu/isolinux/ldlinux.c32 /var/lib/tftpboot`
46   - `sudo cp /mnt/cdrom/ubuntu/isolinux/libcom32.c32 /var/lib/tftpboot`
47   - `sudo cp /mnt/cdrom/ubuntu/isolinux/libutil.c32 /var/lib/tftpboot`
48   - `sudo cp /mnt/cdrom/ubuntu/isolinux/chain.c32 /var/lib/tftpboot`
49   - `sudo umount /mnt/cdrom`
50   - edit ks.cfg and replace IP address with that of your PXE bootstrap server and subdir in /var/www (in this case /download)
51   - `sudo cp ks.cfg ${WWW_ROOT}/download/ks.cfg`
52   - edit boot-screens_txt.cfg and replace IP address with that of your PXE bootstrap server and subdir in /var/www (in this case /download)
53   - `sudo cp boot-screens_txt.cfg /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg`
54   - `sudo cp syslinux.cfg /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg`
55
56 ### New testbed host - manual preparation
57
58 - set CIMC address
59 - set CIMC username, password and hostname
60 - set IPMI address
61 - set IPMI username, password and hostname
62
63 ### Bootstrap the host
64
65 Convenient way to re-stage host via script:
66
67   `sudo ./bootstrap_setup_testbed.sh <linux_ip> <mgmt_ip> <username> <pass>`
68
69 Optional: CIMC - From PXE boostrap server
70
71   - Initialize args.ip: Power-Off, reset BIOS defaults, Enable console redir, get LOM MAC addr
72   - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d -i`
73   - Adjust BIOS settings
74   - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d -s '<biosVfIntelHyperThreadingTech rn="Intel-HyperThreading-Tech" vpIntelHyperThreadingTech="disabled" />' -s '<biosVfEnhancedIntelSpeedStepTech rn="Enhanced-Intel-SpeedStep-Tech" vpEnhancedIntelSpeedStepTech="disabled" />' -s '<biosVfIntelTurboBoostTech rn="Intel-Turbo-Boost-Tech" vpIntelTurboBoostTech="disabled" />'`
75   - Add MAC address to DHCP (/etc/dhcp/dhcpd.conf)
76   - If RAID is not created in CIMC. Create RAID array. Reboot.
77       - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d --wipe`
78       - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d -r -rl 1 -rs <disk size> -rd '[1,2]'`
79         Alternatively, create the RAID array manually.
80   - Reboot server with boot from PXE (restart immediately)
81   - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d -pxe`
82   - Set the next boot from HDD (without restart) Execute while Ubuntu install is running.
83   - `./cimc.py -u admin -p Cisco1234 $CIMC_ADDRESS -d -hdd`
84
85 Optional: IPMI - From PXE boostrap server
86
87     - Get MAC address of LAN0
88     - `ipmitool -U ADMIN -H $HOST_ADDRESS raw 0x30 0x21 | tail -c 18`
89     - Add MAC address to DHCP (/etc/dhcp/dhcpd.conf)
90     - Reboot into PXE for next boot only
91     - `ipmitool -I lanplus -H $HOST_ADDRESS -U ADMIN chassis bootdev pxe`
92     - `ipmitool -I lanplus -H $HOST_ADDRESS -U ADMIN power reset`
93     - For live watching SOL (Serial-over-LAN console)
94     - `ipmitool -I lanplus -H $HOST_ADDRESS -U ADMIN sol activate`
95     - `ipmitool -I lanplus -H $HOST_ADDRESS -U ADMIN sol deactivate`
96
97 When installation is finished:
98
99   - Copy ssh keys for no pass access: `ssh-copy-id 10.30.51.x`
100   - Clone CSIT actual repo: `git clone https://gerrit.fd.io/r/csit`
101   - Go to ansible directory: `cd csit/resources/tools/testbed-setup/ansible`
102   - Edit production file and uncomment servers that are supposed to be
103     installed.
104   - Run ansible on selected hosts:
105     `ansible-playbook --vault-id vault_pass --extra-vars '@vault.yml' --inventory production site.yaml`
106
107 For non-VIRL hosts, stop here.
108
109 ### VIRL installation
110
111 After the host has rebooted:
112
113   - `ansible-playbook 02-virl-bootstrap.yaml`
114   - ssh to host
115       - `sudo -s`
116       - `cd virl-bootstrap`
117       - `./virl-bootstrap-wrapper`
118
119         This command will error out when run the first time, as the VIRL host is not yet licensed.
120
121         Make sure we contact all three VIRL SALT masters:
122
123       - `for a in 1 2 4 ; do sudo salt-call --master us-${a}.virl.info test.ping ; done`
124
125       - Contact the VIRL team, provide the hostname and domain (linuxfoundation.org), and ask them
126         to accept the key
127
128       - After the key has been accepted, verify that connectivity with the SALT master is now OK:
129
130         `for a in 1 2 4 ; do sudo salt-call --master us-${a}.virl.info test.ping ; done`
131
132       - `./virl-bootstrap-wrapper`
133       - `reboot`
134
135 After reboot, ssh to host again
136   - as VIRL user, NOT AS ROOT:
137      - `vinstall all`
138      - `sudo reboot`
139
140 After reboot, ssh to host again
141   - as VIRL user:
142       - `sudo salt-call state.sls virl.routervms.all`
143       - `sudo salt-call state.sls virl.vmm.vmmall`
144
145 Back on the PXE bootstrap server:
146
147   - obtain the current server disk image and place it into
148     `files/virl-server-image/` as `server.qcow2`
149
150     TO-DO: Need to find a place to store this image
151
152   - `ansible-playbook 03-virl-post-install.yaml`
153
154   - Run the following command ONLY ONCE. Otherwise it will create
155     duplicates of the VIRL disk image:
156
157     `ansible-playbook 04-disk-image.yaml`
158
159 The VIRL host should now be operational. Test, and when ready, create a
160 ~jenkins-in/status file with the appropriate status.