Skip to content
Closed
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: 1 addition & 9 deletions cmd/ocm-backplane/cloud/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,15 +333,7 @@ func (cfg *QueryConfig) getIsolatedCredentials(ocmToken string) (aws.Credentials
if readErr == nil {
bodyStr = strings.TrimSpace(string(bodyBytes))
}
// Restore the body for TryPrintAPIError to parse it
if readErr == nil {
response.Body = io.NopCloser(strings.NewReader(bodyStr))
}
apiErr := utils.TryPrintAPIError(response, false)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks removing TryPrintAPIError here makes this path inconsistent with the rest of the CLI as I can see most other cli commands rely on TryPrintAPIError as the standard way to parse and present bp-api errors.

IIUC, the original intent (from PR #825) was to improve visibility for non-JSON responses (e.g. infra errors like 502), which is a valid. However, removing TryPrintAPIError means we lose the structured/clean formatting for the common case (JSON errors from bp-api).

Would it make sense to keep TryPrintAPIError for JSON responses, and only fall back to raw response body when parsing fails (non-JSON)? WDYT?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense. I will make a card for this instead as it requires some efforts to carefully change and test.

if apiErr != nil {
return aws.Credentials{}, fmt.Errorf("failed to fetch arn sequence: %w (response body: %s)", apiErr, bodyStr)
}
return aws.Credentials{}, fmt.Errorf("failed to fetch arn sequence: status %s (response body: %s)", response.Status, bodyStr)
return aws.Credentials{}, fmt.Errorf("failed to fetch arn sequence:\nStatus: %s\nResponse body: %s", response.Status, bodyStr)
}

bytes, err := io.ReadAll(response.Body)
Expand Down
2 changes: 1 addition & 1 deletion cmd/ocm-backplane/cloud/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ var _ = Describe("getIsolatedCredentials", func() {
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("failed to fetch arn sequence:"))
// Verify the response body is included in the error message
Expect(err.Error()).To(ContainSubstring("response body:"))
Expect(err.Error()).To(ContainSubstring("Response body:"))
Expect(err.Error()).To(ContainSubstring("Internal server error"))
})
It("should fail if error creating backplane api client", func() {
Expand Down
53 changes: 53 additions & 0 deletions docs/macOS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Running backplane-cli on macOS Apple Silicon

The `ocm backplane console` command runs the console container locally using the same container image as the logged-in cluster, which is typically built for Linux/amd64. For better compatibility and performance on macOS with Apple Silicon (M1/M2/M3), you should configure Podman to use `Rosetta` instead of `QEMU` for x86_64 emulation.

## Steps to Configure Podman with Rosetta

### 1. Update Podman

Ensure you have the latest version of Podman installed:

```bash
brew upgrade podman
```

Alternatively, download the latest installer from [podman.io](https://podman.io/).

### 2. Configure Rosetta Support

Edit `~/.config/containers/containers.conf` to specify the provider and enable Rosetta:

```ini
[machine]
provider = "applehv"
rosetta = true
```

### 3. Recreate the Podman Machine

Remove the existing VM and create a new one. **Warning:** This will erase all existing container images and data.

```bash
podman machine reset
podman machine init
podman machine start
```

### 4. Verify Rosetta is Enabled

Check that Rosetta is properly configured:

```bash
# Verify Rosetta is enabled in machine configuration
podman machine inspect --format '{{.Rosetta}}'
# Expected output: true

# Enable Rosetta activation
podman machine ssh "sudo touch /etc/containers/enable-rosetta"
podman machine ssh "sudo systemctl restart rosetta-activation.service"

# Verify Rosetta is available in binfmt
podman machine ssh "ls /proc/sys/fs/binfmt_misc/"
# Expected output should include 'rosetta' in the list
```