Skip to content

Commit

Permalink
[ARO-7788] Don't overwrite default installer version in local dev (#3671
Browse files Browse the repository at this point in the history
)
  • Loading branch information
mrWinston authored Jul 9, 2024
1 parent d1198c6 commit 10e5de3
Showing 1 changed file with 60 additions and 22 deletions.
82 changes: 60 additions & 22 deletions pkg/util/cluster/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ func (c *Cluster) createCluster(ctx context.Context, vnetResourceGroup, clusterN
return err
}

err = c.insertDefaultVersionIntoCosmosdb(ctx)
err = c.ensureDefaultVersionInCosmosdb(ctx)
if err != nil {
return err
}
Expand All @@ -484,6 +484,16 @@ func (c *Cluster) createCluster(ctx context.Context, vnetResourceGroup, clusterN
return c.openshiftclusters.CreateOrUpdateAndWait(ctx, vnetResourceGroup, clusterName, ocExt)
}

var insecureLocalClient *http.Client = &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}

const localDefaultURL string = "https://localhost:8443"

func (c *Cluster) registerSubscription(ctx context.Context) error {
b, err := json.Marshal(&api.Subscription{
State: api.SubscriptionStateRegistered,
Expand All @@ -501,30 +511,66 @@ func (c *Cluster) registerSubscription(ctx context.Context) error {
return err
}

req, err := http.NewRequest(http.MethodPut, "https://localhost:8443/subscriptions/"+c.env.SubscriptionID()+"?api-version=2.0", bytes.NewReader(b))
req, err := http.NewRequest(http.MethodPut, localDefaultURL+"/subscriptions/"+c.env.SubscriptionID()+"?api-version=2.0", bytes.NewReader(b))
if err != nil {
return err
}

req.Header.Set("Content-Type", "application/json")

cli := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}

resp, err := cli.Do(req)
resp, err := insecureLocalClient.Do(req)
if err != nil {
return err
}

return resp.Body.Close()
}

func (c *Cluster) insertDefaultVersionIntoCosmosdb(ctx context.Context) error {
// getVersionsInCosmosDB connects to the local RP endpoint and queries the
// available OpenShiftVersions
func getVersionsInCosmosDB(ctx context.Context) ([]*api.OpenShiftVersion, error) {
type getVersionResponse struct {
Value []*api.OpenShiftVersion `json:"value"`
}

getRequest, err := http.NewRequestWithContext(ctx, http.MethodGet, localDefaultURL+"/admin/versions", &bytes.Buffer{})
if err != nil {
return nil, fmt.Errorf("error creating get versions request: %w", err)
}

getRequest.Header.Set("Content-Type", "application/json")

getResponse, err := insecureLocalClient.Do(getRequest)
if err != nil {
return nil, fmt.Errorf("error couldn't retrieve versions in cosmos db: %w", err)
}

parsedResponse := getVersionResponse{}
decoder := json.NewDecoder(getResponse.Body)
err = decoder.Decode(&parsedResponse)

return parsedResponse.Value, err
}

// ensureDefaultVersionInCosmosdb puts a default openshiftversion into the
// cosmos DB IF it doesn't already contain an entry for the default version. It
// is hardcoded to use the local-RP endpoint `https://localhost:8443`
//
// It returns without an error when a default version is already present or a
// default version was successfully put into the db.
func (c *Cluster) ensureDefaultVersionInCosmosdb(ctx context.Context) error {
versionsInDB, err := getVersionsInCosmosDB(ctx)
if err != nil {
return fmt.Errorf("couldn't query versions in cosmosdb: %w", err)
}

for _, versionFromDB := range versionsInDB {
if versionFromDB.Properties.Version == version.DefaultInstallStream.Version.String() {
c.log.Debugf("Version %s already in DB. Not overwriting existing one.", version.DefaultInstallStream.Version.String())
return nil
}
}

defaultVersion := version.DefaultInstallStream
b, err := json.Marshal(&api.OpenShiftVersion{
Properties: api.OpenShiftVersionProperties{
Expand All @@ -540,22 +586,14 @@ func (c *Cluster) insertDefaultVersionIntoCosmosdb(ctx context.Context) error {
return err
}

req, err := http.NewRequest(http.MethodPut, "https://localhost:8443/admin/versions", bytes.NewReader(b))
req, err := http.NewRequest(http.MethodPut, localDefaultURL+"/admin/versions", bytes.NewReader(b))
if err != nil {
return err
}

req.Header.Set("Content-Type", "application/json")

cli := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}

resp, err := cli.Do(req)
resp, err := insecureLocalClient.Do(req)
if err != nil {
return err
}
Expand Down

0 comments on commit 10e5de3

Please sign in to comment.