extract infrastructure generation from manifest creation

This commit is contained in:
William Banfield
2022-10-18 13:46:03 -04:00
parent c961fb58eb
commit a54a424478
4 changed files with 44 additions and 4 deletions

View File

@@ -1,6 +1,9 @@
package e2e
import "net"
import (
"fmt"
"net"
)
// InfrastructureData contains the relevant information for a set of existing
// infrastructure that is to be used for running a testnet.
@@ -18,3 +21,24 @@ type InfrastructureData struct {
type InstanceData struct {
IPAddress net.IP `json:"ip_address"`
}
func NewDockerInfrastructure(m Manifest) (InfrastructureData, error) {
netAddress := networkIPv4
if m.IPv6 {
netAddress = networkIPv6
}
_, ipNet, err := net.ParseCIDR(netAddress)
if err != nil {
return InfrastructureData{}, fmt.Errorf("invalid IP network address %q: %w", netAddress, err)
}
ipGen := newIPGenerator(ipNet)
ifd := InfrastructureData{
Instances: make(map[string]InstanceData),
}
for name := range m.Nodes {
ifd.Instances[name] = InstanceData{
IPAddress: ipGen.Next(),
}
}
return ifd, nil
}

View File

@@ -156,12 +156,16 @@ func LoadTestnet(file string, ifd InfrastructureData) (*Testnet, error) {
for _, name := range nodeNames {
nodeManifest := manifest.Nodes[name]
ind, ok := ifd.Instances[name]
if !ok {
return nil, fmt.Errorf("information for node '%s' missing from infrastucture data", name)
}
node := &Node{
Name: name,
Testnet: testnet,
PrivvalKey: keyGen.Generate(manifest.KeyType),
NodeKey: keyGen.Generate("ed25519"),
IP: ipGen.Next(),
IP: ind.IPAddress,
ProxyPort: proxyPortGen.Next(),
Mode: ModeValidator,
Database: "goleveldb",

View File

@@ -41,7 +41,15 @@ func NewCLI() *CLI {
if err != nil {
return err
}
testnet, err := e2e.LoadTestnet(file, e2e.InfrastructureData{})
m, err := e2e.LoadManifest(file)
if err != nil {
return err
}
ifd, err := e2e.NewDockerInfrastructure(m)
if err != nil {
return err
}
testnet, err := e2e.LoadTestnet(file, ifd)
if err != nil {
return err
}

View File

@@ -79,8 +79,12 @@ func loadTestnet(t *testing.T) e2e.Testnet {
if testnet, ok := testnetCache[manifest]; ok {
return testnet
}
m, err := e2e.LoadManifest(manifest)
require.NoError(t, err)
ifd, err := e2e.NewDockerInfrastructure(m)
require.NoError(t, err)
testnet, err := e2e.LoadTestnet(manifest)
testnet, err := e2e.LoadTestnet(manifest, ifd)
require.NoError(t, err)
testnetCache[manifest] = *testnet
return *testnet