Skip to content

Commit

Permalink
AGENT-557: Split register into registerCluster and registerInfraEnv
Browse files Browse the repository at this point in the history
The split is desired to enable the interactive flow.
Users will register the cluster through the GUI instead of including
the cluster information in the ignition/agent ISO.

registerCluster is able to detect if a cluster has already been
registered with the REST-API and exits with status 0, skipping
cluster registration from manifest files.

registerInfraEnv requires and checks that a cluster has been
registered with the REST-API. It also skips infraenv registration
if it detects one has already been created.

Signed-off-by: Richard Su <rwsu@redhat.com>
  • Loading branch information
rwsu committed Jul 21, 2023
1 parent 3756e7f commit 97c32d4
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
71 changes: 71 additions & 0 deletions cmd/agentbasedinstaller/client/main.go
Expand Up @@ -91,8 +91,15 @@ func main() {
}
switch os.Args[1] {
case "register":
// registers both cluster and infraenv
infraEnvID := register(ctx, log, bmInventory)
os.WriteFile("/etc/assisted/client_config", []byte("INFRA_ENV_ID="+infraEnvID), 0644)
case "registerCluster":
clusterID := registerCluster(ctx, log, bmInventory)
os.WriteFile("/etc/assisted/client_config", []byte("CLUSTER_ID="+clusterID), 0644)
case "registerInfraEnv":
infraEnvID := registerInfraEnv(ctx, log, bmInventory)
os.WriteFile("/etc/assisted/client_config", []byte("INFRA_ENV_ID="+infraEnvID), 0644)
case "configure":
configure(ctx, log, bmInventory)
default:
Expand Down Expand Up @@ -130,6 +137,70 @@ func register(ctx context.Context, log *log.Logger, bmInventory *client.Assisted
return modelsInfraEnv.ID.String()
}

func registerCluster(ctx context.Context, log *log.Logger, bmInventory *client.AssistedInstall) string {
err := envconfig.Process("", &RegisterOptions)
if err != nil {
log.Fatal(err.Error())
}

existingCluster, err := agentbasedinstaller.GetCluster(ctx, log, bmInventory)
if err == nil {
log.Infof("Skipping cluster registration. Found existing cluster with id: %s", existingCluster.ID.String())
return existingCluster.ID.String()
}

pullSecret, err := agentbasedinstaller.GetPullSecret(RegisterOptions.PullSecretFile)
if err != nil {
log.Fatal("Failed to get pull secret: ", err.Error())
}

modelsCluster, err := agentbasedinstaller.RegisterCluster(ctx, log, bmInventory, pullSecret,
RegisterOptions.ClusterDeploymentFile, RegisterOptions.AgentClusterInstallFile, RegisterOptions.ClusterImageSetFile, RegisterOptions.ReleaseImageMirror)
if err != nil {
log.Fatal("Failed to register cluster with assisted-service: ", err)
}

err = agentbasedinstaller.RegisterExtraManifests(os.DirFS(RegisterOptions.ExtraManifests), ctx, log, bmInventory.Manifests, modelsCluster)
if err != nil {
log.Fatal("Failed to register extra manifests with assisted-service: ", err)
}

return modelsCluster.ID.String()
}

func registerInfraEnv(ctx context.Context, log *log.Logger, bmInventory *client.AssistedInstall) string {
err := envconfig.Process("", &RegisterOptions)
if err != nil {
log.Fatal(err.Error())
}

existingInfraEnv, err := agentbasedinstaller.GetInfraEnv(ctx, log, bmInventory)
if err == nil {
log.Infof("Skipping infraenv registration. Found existing infraenv with id: %s", existingInfraEnv.ID.String())
return existingInfraEnv.ID.String()
}

pullSecret, err := agentbasedinstaller.GetPullSecret(RegisterOptions.PullSecretFile)
if err != nil {
log.Fatal("Failed to get pull secret: ", err.Error())
}

modelsCluster, err := agentbasedinstaller.GetCluster(ctx, log, bmInventory)
if err != nil {
log.Fatal("Failed to find cluster when registering infraenv: ", err)
} else {
log.Infof("Reference to cluster id: %s", modelsCluster.ID.String())
}

modelsInfraEnv, err := agentbasedinstaller.RegisterInfraEnv(ctx, log, bmInventory, pullSecret,
modelsCluster, RegisterOptions.InfraEnvFile, RegisterOptions.NMStateConfigFile, RegisterOptions.ImageTypeISO, "")
if err != nil {
log.Fatal("Failed to register infraenv with assisted-service: ", err)
}

return modelsInfraEnv.ID.String()
}

func configure(ctx context.Context, log *log.Logger, bmInventory *client.AssistedInstall) {
err := envconfig.Process("", &ConfigureOptions)
if err != nil {
Expand Down
34 changes: 34 additions & 0 deletions cmd/agentbasedinstaller/register.go
Expand Up @@ -193,6 +193,40 @@ func RegisterExtraManifests(fsys fs.FS, ctx context.Context, log *log.Logger, cl
return nil
}

func GetCluster(ctx context.Context, log *log.Logger, bmInventory *client.AssistedInstall) (cluster *models.Cluster, err error) {
list, err := bmInventory.Installer.V2ListClusters(ctx, &installer.V2ListClustersParams{})
if err != nil {
return nil, err
}
clusterList := list.Payload
numClusters := len(clusterList)
if numClusters > 1 {
errorMessage := "found multiple clusters registered in assisted-service"
return nil, errors.New(errorMessage)
}
if numClusters == 0 {
return nil, errors.New("No clusters registered in assisted-service")
}
return clusterList[0], nil
}

func GetInfraEnv(ctx context.Context, log *log.Logger, bmInventory *client.AssistedInstall) (infraEnv *models.InfraEnv, err error) {
list, err := bmInventory.Installer.ListInfraEnvs(ctx, &installer.ListInfraEnvsParams{})
if err != nil {
return nil, err
}
infraEnvList := list.Payload
numInfraEnvs := len(infraEnvList)
if numInfraEnvs > 1 {
errorMessage := "found multiple infraenvs registered in assisted-service"
return nil, errors.New(errorMessage)
}
if numInfraEnvs == 0 {
return nil, errors.New("No infraenvs registered in assisted-service")
}
return infraEnvList[0], nil
}

// Read a Yaml file and unmarshal the contents
func getFileData(filePath string, output interface{}) error {

Expand Down

0 comments on commit 97c32d4

Please sign in to comment.