diff --git a/pkg/agent/rest.go b/pkg/agent/rest.go index 2e54ce05b64..715a0e78a81 100644 --- a/pkg/agent/rest.go +++ b/pkg/agent/rest.go @@ -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. @@ -29,24 +33,48 @@ 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) @@ -54,7 +82,7 @@ func NewNodeZeroRestClient(ctx context.Context, assetDir string) (*NodeZeroRestC restClient.Client = client restClient.ctx = ctx restClient.config = config - restClient.NodeZeroIP = NodeZeroIP + restClient.NodeZeroIP = RendezvousIP return restClient, nil } diff --git a/pkg/asset/agent/image/ignition.go b/pkg/asset/agent/image/ignition.go index b3a843dfd94..5d167337448 100644 --- a/pkg/asset/agent/image/ignition.go +++ b/pkg/asset/agent/image/ignition.go @@ -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 } @@ -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 diff --git a/pkg/asset/agent/image/ignition_test.go b/pkg/asset/agent/image/ignition_test.go index 651bafa08a0..b66f3ff0447 100644 --- a/pkg/asset/agent/image/ignition_test.go +++ b/pkg/asset/agent/image/ignition_test.go @@ -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 @@ -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 {