Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions controllers/metal3.io/host_config_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,13 @@ import (
"context"
"fmt"

"github.com/pkg/errors"

metal3v1alpha1 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1"

"github.com/go-logr/logr"

"github.com/pkg/errors"
corev1 "k8s.io/api/core/v1"

"k8s.io/apimachinery/pkg/types"

"sigs.k8s.io/controller-runtime/pkg/client"

metal3v1alpha1 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1"
)

// hostConfigData is an implementation of host configuration data interface.
Expand Down
26 changes: 26 additions & 0 deletions pkg/provisioner/fixture/fixture.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,32 @@ var log = logf.Log.WithName("fixture")
var deprovisionRequeueDelay = time.Second * 10
var provisionRequeueDelay = time.Second * 10

type fixtureHostConfigData struct {
userData string
networkData string
metaData string
}

func NewHostConfigData(userData string, networkData string, metaData string) provisioner.HostConfigData {
return &fixtureHostConfigData{
userData: userData,
networkData: networkData,
metaData: metaData,
}
}

func (cd *fixtureHostConfigData) UserData() (string, error) {
return cd.userData, nil
}

func (cd *fixtureHostConfigData) NetworkData() (string, error) {
return cd.networkData, nil
}

func (cd *fixtureHostConfigData) MetaData() (string, error) {
return cd.metaData, nil
}

// fixtureProvisioner implements the provisioning.fixtureProvisioner interface
// and uses Ironic to manage the host.
type fixtureProvisioner struct {
Expand Down
114 changes: 114 additions & 0 deletions pkg/provisioner/ironic/adopt_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package ironic

import (
"testing"
"time"

"github.com/gophercloud/gophercloud/openstack/baremetal/v1/nodes"
"github.com/gophercloud/gophercloud/openstack/baremetalintrospection/v1/introspection"
"github.com/stretchr/testify/assert"

"github.com/metal3-io/baremetal-operator/pkg/bmc"
"github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/clients"
"github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/testserver"
)

func TestAdopt(t *testing.T) {

nodeUUID := "33ce8659-7400-4c68-9535-d10766f07a58"
cases := []struct {
name string
ironic *testserver.IronicMock

expectedDirty bool
expectedError bool
expectedRequestAfter int
}{
{
name: "node-in-enroll",
ironic: testserver.NewIronic(t).Ready().WithNode(nodes.Node{
ProvisionState: string(nodes.Enroll),
UUID: nodeUUID,
}),

expectedDirty: false,
expectedError: true,
},
{
name: "node-in-manageable",
ironic: testserver.NewIronic(t).Ready().WithNode(nodes.Node{
ProvisionState: string(nodes.Manageable),
UUID: nodeUUID,
}).WithNodeStatesProvision(nodeUUID),

expectedDirty: true,
expectedRequestAfter: 10,
},
{
name: "node-in-adopting",
ironic: testserver.NewIronic(t).Ready().WithNode(nodes.Node{
ProvisionState: string(nodes.Adopting),
UUID: nodeUUID,
}),

expectedDirty: true,
expectedRequestAfter: 10,
},
{
name: "node-in-verifying",
ironic: testserver.NewIronic(t).Ready().WithNode(nodes.Node{
ProvisionState: string(nodes.Verifying),
UUID: nodeUUID,
}),

expectedDirty: true,
expectedRequestAfter: 10,
},
{
name: "node-in-AdoptFail",
ironic: testserver.NewIronic(t).Ready().WithNode(nodes.Node{
ProvisionState: string(nodes.AdoptFail),
UUID: nodeUUID,
}),

expectedDirty: false,
expectedRequestAfter: 0,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if tc.ironic != nil {
tc.ironic.Start()
defer tc.ironic.Stop()
}

inspector := testserver.NewInspector(t).Ready().WithIntrospection(nodeUUID, introspection.Introspection{
Finished: false,
})
inspector.Start()
defer inspector.Stop()

host := makeHost()
publisher := func(reason, message string) {}
auth := clients.AuthConfig{Type: clients.NoAuth}
prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, publisher,
tc.ironic.Endpoint(), auth, inspector.Endpoint(), auth,
)
if err != nil {
t.Fatalf("could not create provisioner: %s", err)
}

prov.status.ID = nodeUUID
result, err := prov.Adopt()

assert.Equal(t, tc.expectedDirty, result.Dirty)
assert.Equal(t, time.Second*time.Duration(tc.expectedRequestAfter), result.RequeueAfter)
if !tc.expectedError {
assert.NoError(t, err)
} else {
assert.Error(t, err)
}
})
}
}
7 changes: 2 additions & 5 deletions pkg/provisioner/ironic/ironic.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@ import (
"strings"
"time"

"sigs.k8s.io/yaml"

"github.com/go-logr/logr"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/baremetal/v1/nodes"
"github.com/gophercloud/gophercloud/openstack/baremetal/v1/ports"
"github.com/gophercloud/gophercloud/openstack/baremetalintrospection/v1/introspection"

"github.com/pkg/errors"

"github.com/go-logr/logr"
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
"sigs.k8s.io/yaml"

metal3v1alpha1 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1"
"github.com/metal3-io/baremetal-operator/pkg/bmc"
Expand Down
Loading