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
44 changes: 36 additions & 8 deletions pkg/agent/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,17 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"

"github.com/openshift/assisted-service/api/v1beta1"
"github.com/openshift/assisted-service/client"
"github.com/openshift/assisted-service/client/events"
"github.com/openshift/assisted-service/client/installer"
"github.com/openshift/assisted-service/models"

"github.com/openshift/installer/pkg/asset/agent/agentconfig"
"github.com/openshift/installer/pkg/asset/agent/image"
"github.com/openshift/installer/pkg/asset/agent/manifests"
assetstore "github.com/openshift/installer/pkg/asset/store"
"github.com/openshift/installer/pkg/types/agent"
)

// NodeZeroRestClient is a struct to interact with the Agent Rest API that is on node zero.
Expand All @@ -29,32 +33,56 @@ type NodeZeroRestClient struct {
// NewNodeZeroRestClient Initialize a new rest client to interact with the Agent Rest API on node zero.
func NewNodeZeroRestClient(ctx context.Context, assetDir string) (*NodeZeroRestClient, error) {
restClient := &NodeZeroRestClient{}
agentConfigAsset := &agentconfig.AgentConfig{}
agentManifestsAsset := &manifests.AgentManifests{}

assetStore, err := assetstore.NewStore(assetDir)
if err != nil {
return nil, errors.Wrap(err, "failed to create asset store")
}
nmState := &manifests.NMStateConfig{}
if err := assetStore.Fetch(nmState); err != nil {
return nil, errors.Wrapf(err, "failed to fetch %s", nmState.Name())

agentConfig, agentConfigError := assetStore.Load(agentConfigAsset)
agentManifests, manifestError := assetStore.Load(agentManifestsAsset)

if agentConfigError != nil {
logrus.Debug(errors.Wrapf(agentConfigError, "failed to load %s", agentConfigAsset.Name()))
}
if manifestError != nil {
logrus.Debug(errors.Wrapf(manifestError, "failed to load %s", agentManifestsAsset.Name()))
}
if agentConfigError != nil || manifestError != nil {
return nil, errors.New("failed to load AgentConfig or NMStateConfig")
}

NodeZeroIP, err := manifests.GetNodeZeroIP(nmState.Config)
if err != nil {
return nil, err
var RendezvousIP string
var rendezvousIPError error
var emptyNMStateConfigs []*v1beta1.NMStateConfig

if agentConfig != nil && agentManifests != nil {
RendezvousIP, rendezvousIPError = image.RetrieveRendezvousIP(agentConfig.(*agentconfig.AgentConfig).Config, agentManifests.(*manifests.AgentManifests).NMStateConfigs)
} else if agentConfig == nil && agentManifests != nil {
RendezvousIP, rendezvousIPError = image.RetrieveRendezvousIP(&agent.Config{}, agentManifests.(*manifests.AgentManifests).NMStateConfigs)
} else if agentConfig != nil && agentManifests == nil {
RendezvousIP, rendezvousIPError = image.RetrieveRendezvousIP(agentConfig.(*agentconfig.AgentConfig).Config, emptyNMStateConfigs)
} else {
return nil, errors.New("both AgentConfig and NMStateConfig are empty")
}
if rendezvousIPError != nil {
return nil, rendezvousIPError
}

config := client.Config{}
config.URL = &url.URL{
Scheme: "http",
Host: net.JoinHostPort(NodeZeroIP, "8090"),
Host: net.JoinHostPort(RendezvousIP, "8090"),
Path: client.DefaultBasePath,
}
client := client.New(config)

restClient.Client = client
restClient.ctx = ctx
restClient.config = config
restClient.NodeZeroIP = NodeZeroIP
restClient.NodeZeroIP = RendezvousIP

return restClient, nil
}
Expand Down
5 changes: 3 additions & 2 deletions pkg/asset/agent/image/ignition.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ func (a *Ignition) Generate(dependencies asset.Parents) error {
return errors.New("at least one NMState configuration must be provided")
}

nodeZeroIP, err := retrieveRendezvousIP(agentConfigAsset.Config, agentManifests.NMStateConfigs)
nodeZeroIP, err := RetrieveRendezvousIP(agentConfigAsset.Config, agentManifests.NMStateConfigs)
if err != nil {
return err
}
Expand Down Expand Up @@ -370,7 +370,8 @@ func addExtraManifests(config *igntypes.Config, extraManifests *manifests.ExtraM
}
}

func retrieveRendezvousIP(agentConfig *agent.Config, nmStateConfigs []*v1beta1.NMStateConfig) (string, error) {
// RetrieveRendezvousIP Returns the Rendezvous IP from either AgentConfig or NMStateConfig
func RetrieveRendezvousIP(agentConfig *agent.Config, nmStateConfigs []*v1beta1.NMStateConfig) (string, error) {
var err error
var rendezvousIP string

Expand Down
8 changes: 4 additions & 4 deletions pkg/asset/agent/image/ignition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,9 @@ func TestIgnition_addStaticNetworkConfig(t *testing.T) {
}

func TestRetrieveRendezvousIP(t *testing.T) {
rawConfig := `interfaces:
- ipv4:
address:
rawConfig := `interfaces:
- ipv4:
address:
- ip: "192.168.122.21"`
cases := []struct {
Name string
Expand Down Expand Up @@ -204,7 +204,7 @@ func TestRetrieveRendezvousIP(t *testing.T) {
}
for _, tc := range cases {
t.Run(tc.Name, func(t *testing.T) {
rendezvousIP, err := retrieveRendezvousIP(tc.agentConfig, tc.nmStateConfigs)
rendezvousIP, err := RetrieveRendezvousIP(tc.agentConfig, tc.nmStateConfigs)
if tc.expectedError != "" {
assert.Regexp(t, tc.expectedError, err.Error())
} else {
Expand Down