forked from metal3-io/baremetal-operator
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request metal3-io#1786 from Nordix/fix_deploy_htpass
🐛 Fix incorrect htpasswd file generation
- Loading branch information
Showing
14 changed files
with
273 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
#!/usr/bin/env bash | ||
# | ||
# This script reads BMC information in a config file and prepare VMs | ||
# whose info match those config | ||
# | ||
set -eux | ||
|
||
REPO_ROOT=$(realpath "$(dirname "${BASH_SOURCE[0]}")") | ||
cd "${REPO_ROOT}" | ||
|
||
CONFIG_FILE=$1 | ||
NETWORK=${2:-"baremetal-e2e"} | ||
|
||
readarray -t BMCS < <(yq e -o=j -I=0 '.[]' "${CONFIG_FILE}") | ||
|
||
for bmc in "${BMCS[@]}"; do | ||
bootMacAddress=$(echo "${bmc}" | jq -r '.bootMacAddress') | ||
ipAddress=$(echo "${bmc}" | jq -r '.ipAddress') | ||
virsh -c qemu:///system net-update "${NETWORK}" delete ip-dhcp-host "<host mac='${bootMacAddress}' ip='${ipAddress}'/>" --live --config | ||
done | ||
"${REPO_ROOT}/tools/bmh_test/clean_local_bmh_test_setup.sh" "^bmo-e2e-" | ||
rm -rf /tmp/bmo-e2e-* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
package main | ||
|
||
import ( | ||
"bytes" | ||
"flag" | ||
"fmt" | ||
"os" | ||
"text/template" | ||
|
||
"github.com/dypflying/go-qcow2lib/qcow2" | ||
"github.com/libvirt/libvirt-go" | ||
bmoe2e "github.com/metal3-io/baremetal-operator/test/e2e" | ||
) | ||
|
||
func CreateLibvirtVM(hostName, networkName, macAddress string) error { | ||
opts := make(map[string]any) | ||
opts[qcow2.OPT_SIZE] = 1 << 30 // qcow2 file's size is 1g | ||
opts[qcow2.OPT_FMT] = "qcow2" // qcow2 format | ||
opts[qcow2.OPT_SUBCLUSTER] = true // enable sub-cluster | ||
|
||
err := qcow2.Blk_Create("/tmp/"+hostName+".qcow2", opts) | ||
|
||
if err != nil { | ||
fmt.Println("Failed to create qcow2 file") | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
|
||
conn, err := libvirt.NewConnect("qemu:///system") | ||
if err != nil { | ||
fmt.Println("Failed to connect to qemu:///system") | ||
return err | ||
} | ||
defer conn.Close() | ||
|
||
domainDef := ` | ||
<domain type='kvm'> | ||
<name>{{ .HostName }}</name> | ||
<description>Virtualized BareMetalHost</description> | ||
<metadata> | ||
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0"> | ||
<libosinfo:os id="http://ubuntu.com/ubuntu/22.04"/> | ||
</libosinfo:libosinfo> | ||
</metadata> | ||
<memory unit='KiB'>4194304</memory> | ||
<vcpu placement='static'>2</vcpu> | ||
<os> | ||
<type arch='x86_64' machine='pc-q35-6.2'>hvm</type> | ||
<boot dev='hd' /> | ||
</os> | ||
<cpu mode='host-passthrough' check='none' migratable='on'/> | ||
<pm> | ||
<suspend-to-mem enabled='no'/> | ||
<suspend-to-disk enabled='no'/> | ||
</pm> | ||
<devices> | ||
<emulator>/usr/bin/qemu-system-x86_64</emulator> | ||
<disk type='file' device='disk'> | ||
<driver name='qemu' type='qcow2' discard='unmap'/> | ||
<source file='/tmp/{{ .HostName }}.qcow2'/> | ||
<target dev='vda' bus='virtio'/> | ||
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> | ||
</disk> | ||
<interface type='network'> | ||
<mac address='{{ .MacAddress }}'/> | ||
<source network='{{ .Network }}'/> | ||
<model type='virtio' /> | ||
</interface> | ||
<serial type='pty'> | ||
<log file='/var/log/libvirt/qemu/{{ .HostName }}-serial0.log' append='on'/> | ||
<target type='isa-serial' port='0'> | ||
<model name='isa-serial'/> | ||
</target> | ||
</serial> | ||
<console type='pty'> | ||
<log file='/var/log/libvirt/qemu/{{ .HostName }}-serial0.log' append='on'/> | ||
<target type='serial' port='0'/> | ||
</console> | ||
</devices> | ||
</domain>` | ||
|
||
xmlTpl, err := template.New("xml").Parse(domainDef) | ||
|
||
if err != nil { | ||
fmt.Println("Failed to init the template") | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
|
||
data := struct { | ||
HostName string | ||
Network string | ||
MacAddress string | ||
}{ | ||
HostName: hostName, | ||
Network: networkName, | ||
MacAddress: macAddress, | ||
} | ||
|
||
var buf bytes.Buffer | ||
|
||
err = xmlTpl.Execute(&buf, data) | ||
|
||
if err != nil { | ||
return err | ||
} | ||
|
||
fmt.Println(buf.String()) | ||
|
||
dom, err := conn.DomainDefineXML(buf.String()) | ||
|
||
if err != nil { | ||
fmt.Println("Failed to define domain") | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
|
||
if err := dom.Create(); err != nil { | ||
fmt.Println("Failed to create domain") | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
|
||
fmt.Println("Domain created successfully") | ||
return nil | ||
} | ||
|
||
func CreateLibvirtBMC(macAddress, hostName, ipAddress, networkName string) error { | ||
var err error | ||
conn, err := libvirt.NewConnect("qemu:///system") | ||
if err != nil { | ||
return err | ||
} | ||
defer conn.Close() | ||
|
||
network, err := conn.LookupNetworkByName(networkName) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
xmlTpl, err := template.New("xml").Parse("<host mac='{{ .MacAddress }}' name='{{ .HostName }}' ip='{{ .IPAddress }}' />") | ||
|
||
if err != nil { | ||
return err | ||
} | ||
|
||
data := struct { | ||
MacAddress string | ||
HostName string | ||
IPAddress string | ||
}{ | ||
MacAddress: macAddress, | ||
HostName: hostName, | ||
IPAddress: ipAddress, | ||
} | ||
|
||
var buf bytes.Buffer | ||
|
||
err = xmlTpl.Execute(&buf, data) | ||
|
||
if err != nil { | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
|
||
if err = network.Update( | ||
libvirt.NETWORK_UPDATE_COMMAND_ADD_LAST, | ||
libvirt.NETWORK_SECTION_IP_DHCP_HOST, | ||
-1, | ||
buf.String(), | ||
libvirt.NETWORK_UPDATE_AFFECT_LIVE|libvirt.NETWORK_UPDATE_AFFECT_CONFIG, | ||
); err != nil { | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
if err = CreateLibvirtVM(hostName, networkName, macAddress); err != nil { | ||
fmt.Printf("Error occurred: %v\n", err) | ||
return err | ||
} | ||
return nil | ||
} | ||
|
||
func main() { | ||
var vmName = flag.String( | ||
"vm-name", "VM-1", "The name of the VM to create") | ||
var networkName = flag.String( | ||
"network-name", "baremetal-e2e", "The name of the network that the new VM should be attached to") | ||
var macAddress = flag.String( | ||
"mac-address", "00:60:2f:31:81:01", "Mac address of the VM on the network") | ||
var ipAddress = flag.String( | ||
"ip-address", "192.168.222.122", "IP address of the VM on the network") | ||
var configFile = flag.String( | ||
"yaml-source-file", "", "yaml file where BMCS are defined. If this is set, ignore all other options") | ||
flag.Parse() | ||
var err error | ||
if *configFile == "" { | ||
if err = CreateLibvirtBMC(*macAddress, *vmName, *ipAddress, *networkName); err != nil { | ||
fmt.Printf("Error occurred: %v\n", err) | ||
os.Exit(1) | ||
} | ||
} else { | ||
bmcs, err := bmoe2e.LoadBMCConfig(*configFile) | ||
if err != nil { | ||
os.Exit(1) | ||
} | ||
for _, bmc := range *bmcs { | ||
if err = CreateLibvirtBMC(bmc.BootMacAddress, bmc.HostName, bmc.IPAddress, "baremetal-e2e"); err != nil { | ||
fmt.Printf("Error occurred: %v\n", err) | ||
os.Exit(1) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters