Skip to content

Instantly share code, notes, and snippets.

@ralvares
Created March 17, 2021 07:53
Show Gist options
  • Select an option

  • Save ralvares/b5ae1acd52edfbfdf020acf370b32e34 to your computer and use it in GitHub Desktop.

Select an option

Save ralvares/b5ae1acd52edfbfdf020acf370b32e34 to your computer and use it in GitHub Desktop.
ipxe custom file with bond0
#!ipxe
set cluster_name ocp4
set domain_name example.com
set fileserver 192.168.122.1:80
set kernel rhcos-live-kernel-x86_64
set initrd rhcos-live-initramfs.x86_64.img
set rootfs rhcos-live-rootfs.x86_64.img
set install_drive /dev/vda
set gateway 192.168.122.1
set dns_server 192.168.122.1
set netmask 255.255.255.0
set bootstrap_hostname bootstrap
set bootstrap_ip 192.168.122.8
set bootstrap_role bootstrap
set master1_role master
set master1_hostname master001
set master1_ip 172.16.160.21
set master2_role master
set master2_hostname master002
set master2_ip 172.16.160.22
set master3_hostname master003
set master3_ip 172.16.160.23
set master3_role master
set worker1_hostname worker001
set worker1_ip 172.16.160.30
set worker1_role worker
set worker2_hostname worker002
set worker2_ip 172.16.160.31
set worker2_role worker
ifopen net0
#Discovery nic for vmware and kvm
set ens33 0000:02:01.0
set ens38 0000:02:06.0
set ens192 0000:0b:00.0
set ens224 0000:13:00.0
set enp1s0 0000:01:00.0
isset ${net_interface} ||
iseq ${net0/busloc:busdevfn} ${ens33} && set net_interface ens33 ||
iseq ${net0/busloc:busdevfn} ${ens38} && set net_interface ens38 ||
iseq ${net1/busloc:busdevfn} ${ens33} && set net_interface ens33 ||
iseq ${net1/busloc:busdevfn} ${ens38} && set net_interface ens38 ||
iseq ${net0/busloc:busdevfn} ${ens192} && set net_interface ens192 ||
iseq ${net0/busloc:busdevfn} ${ens224} && set net_interface ens224 ||
iseq ${net1/busloc:busdevfn} ${ens192} && set net_interface ens192 ||
iseq ${net1/busloc:busdevfn} ${ens224} && set net_interface ens224 ||
:select_node
set menu_number:int32 1
menu Please choose an Node to install
item bootstrap bootstrap
:add_menu_master isset ${master${menu_number}_ip} || goto add_menu_master_done
item master${menu_number} Master ${menu_number}
inc menu_number && goto add_menu_master
:add_menu_master_done
set menu_number:int32 1
goto add_menu_worker
:add_menu_worker isset ${worker${menu_number}_ip} || goto menu_done
item worker${menu_number} Worker ${menu_number}
inc menu_number && goto add_menu_worker
:menu_done
choose node &&
iseq ${${node}_role} master && set master ${node} ||
iseq ${${node}_role} worker && set worker ${node} ||
iseq ${${node}_role} bootstrap && set bootstrap ${node} ||
isset ${master} && goto master ||
isset ${worker} && goto worker ||
isset ${bootstrap} && goto bootstrap ||
shell
prompt -t 1000 !!!! 0 Nodes found - Please set Mac Address or Node Role for identification and try again. !!!!
:bootstrap
set hostname ${${bootstrap}_hostname}.${cluster_name}.${domain_name}
set ignition bootstrap.ign
set net0/ip ${${bootstrap}_ip}
set net0/netmask ${netmask}
set net0/gateway ${gateway}
set dns ${dns_server}
ping -c 3 -q ${gateway} || goto ping_gateway_log &&
nslookup dns_check ${${bootstrap}_hostname}.${cluster_name}.${domain_name} || goto dns_error_master &&
iseq ${dns_check} ${${bootstrap}_ip} && goto check_dns_api || goto dns_error_master_ptr
:master
set hostname ${${master}_hostname}.${cluster_name}.${domain_name}
set ignition master.ign
set net0/ip ${${master}_ip}
set net0/netmask ${netmask}
set net0/gateway ${gateway}
set dns ${dns_server}
ping -c 3 -q ${gateway} || goto ping_gateway_log &&
nslookup dns_check ${${master}_hostname}.${cluster_name}.${domain_name} || goto dns_error_master &&
iseq ${dns_check} ${${master}_ip} && goto check_dns_api || goto dns_error_master_ptr
:worker
set hostname ${${worker}_hostname}.${cluster_name}.${domain_name}
set ignition worker.ign
set net0/ip ${${worker}_ip}
set net0/netmask ${netmask}
set net0/gateway ${gateway}
set dns ${dns_server}
ping -c 3 -q ${gateway} || goto ping_gateway_log &&
nslookup dns_check ${${worker}_hostname}.${cluster_name}.${domain_name} || goto dns_error_worker &&
iseq ${dns_check} ${${worker}_ip} && goto check_dns_api || goto dns_error_worker_ptr
:check_dns_api
nslookup api api.${cluster_name}.${domain_name} || goto dns_error_api && goto check_dns_api_int
:check_dns_api_int
nslookup api-int api-int.${cluster_name}.${domain_name} || goto dns_error_api_int && goto check_dns_apps
:check_dns_apps
nslookup apps randon.apps.${cluster_name}.${domain_name} || goto dns_error_apps && goto install
:dns_error_api
prompt api.${cluster_name}.${domain_name} not found. Press any key to try again || goto check_dns_api && goto check_dns_api
:dns_error_api_int
prompt api-int.${cluster_name}.${domain_name} not found. Press any key to try again || goto check_dns_api_int && goto check_dns_api_int
:dns_error_apps
prompt *.apps.${cluster_name}.${domain_name} not found. Press any key to try again || goto check_dns_apps && goto check_dns_apps
:dns_error_master
prompt ${master} DNS entry not found. Press any key to try again || goto master && goto master
:dns_error_master_ptr
prompt ${master} Wrong IP Address. Press any key to try again || goto master && goto master
:dns_error_worker
prompt ${worker} DNS entry not found. Press any key to try again || goto worker && goto worker
:dns_error_worker_ptr
prompt ${worker} Wrong IP Address. Press any key to try again || goto worker && goto worker
:ping_gateway_log
prompt -t 10000000 Pinging - ${gateway} - Connection timed out. Check the network connectivity and try again. || shell && shell
:install
imgfetch -n init_img http://${fileserver}/${initrd}
kernel http://${fileserver}/${kernel} initrd=init_img console=ttyS1,115200n8 console=tty0 coreos.live.rootfs_url=http://${fileserver}/${rootfs} coreos.inst.install_dev=${install_drive} coreos.inst.ignition_url=http://${fileserver}/${ignition} ip=enp1s0:none ip=enp2s0:none ip=${net0/ip}::${net0/gateway}:${net0/netmask}:${hostname}:bond0:none bond=bond0:enp1s0,enp2s0:mode=active-backup,miimon=100 nameserver=${dns_server} ignition.platform.id=metal
initrd http://${fileserver}/${initrd}
boot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment