goharbor / goharbor/harbor-cli
Discussion : Project preheat command
- Dominant language
- Go
- Stars
- 163
- Forks
- 211
- Avg merge
- 1m
- Merged PRs (30d)
- 1
Description
### What it does?
Harbor supports P2P (Peer-to-Peer) preheat distribution using engines like Dragonfly or Kraken. Users can create preheat policies under a project to preload container images into a P2P network before they are needed. The preheat command allows users to manage preheat policies, monitor executions, and inspect tasks from the terminal.
Since preheat is project-scoped, all commands live under `harbor project preheat`.
## Proposed Approach
The following is a proposed structure for the command.
- ### Commands
| Command | What it does |
|---------|-------------|
| `harbor project preheat policy list` | List all preheat policies under a project |
| `harbor project preheat policy create` | Create a new preheat policy |
| `harbor project preheat policy view` | View details of a preheat policy |
| `harbor project preheat policy update` | Update an existing preheat policy |
| `harbor project preheat policy delete` | Delete a preheat policy |
| `harbor project preheat policy run` | Trigger a preheat policy manually |
| `harbor project preheat execution list` | List executions of a preheat policy |
| `harbor project preheat execution view` | View details of a specific execution |
| `harbor project preheat execution stop` | Stop a running execution |
| `harbor project preheat task list` | List tasks for a preheat execution |
| `harbor project preheat task log` | Get the log of a specific task |
---
### `harbor project preheat policy` command
- `harbor project preheat policy list [projectName]` : list all preheat policies under a project.
**Flags:** `--page`, `--page-size`, `--query`, `--sort`
**Output:**
```
sypher@sypher845:~/Projects/harbor-cli$ ./harbor project preheat policy list
┌──────────────────────────────────────────────────────────────────────────────┐
│ ID Name Provide… Provider Na… Enabled Description │
│ ──────────────────────────────────────────────────────────────────────────── │
│ 1 test1 9 edge-basic Ena… test1 │
│ 3 Udfgdg 18 kraken-loca… Ena… zxczx │
│ 2 vfcbc 9 edge-basic Dis… bcvb │
└──────────────────────────────────────────────────────────────────────────────┘
```
- `harbor project preheat policy create [projectName] [policyName] ` : create a new preheat policy under a project. Using flags or TUI.
**Flags:** `--description`, `--provider`, `--enable`, `--filters`, `--trigger`
**Output:**
```
Preheat policy 'my-policy' created in project 'my-project'
```
- `harbor project preheat policy view [projectName] [policyName] ` : view details of a preheat policy
**Output:**
```
sypher@sypher845:~/Projects/harbor-cli$ ./harbor project preheat policy view
┌──────────────────────────────────────────────────────────────────────────────┐
│ ID Name Provide… Provider Na… Enabled Description │
│ ──────────────────────────────────────────────────────────────────────────── │
│ 1 test1 9 edge-basic Ena… test1 │
└──────────────────────────────────────────────────────────────────────────────┘
```
- `harbor project preheat policy update [projectName] [policyName] ` : update fields of an existing preheat policy.
**Flags:** `--name`, `--description`, `--provider`, `--enable`, `--filters`, `--trigger`
**Output:**
```
Preheat policy 'my-policy' updated in project 'my-project'
```
- `harbor project preheat policy delete [projectName] [policyName] ` : delete a preheat policy from a project
**Output:**
```
Preheat policy 'my-policy' deleted from project 'my-project'
```
- `harbor project preheat policy run [projectName] [policyName] ` : trigger a preheat policy manually. This creates a new execution for the policy.
**Output:**
```
Preheat policy 'my-policy' triggered in project 'my-project'
```
---
### `harbor project preheat execution` command
- `harbor project preheat execution list [projectName] [policyName]` : list all executions for a preheat policy
**Flags:** `--page`, `--page-size`, `--query`, `--sort`
**Output:**
```
┌───────────────────────────────────────────────────────────────────────────────────────────────┐
│ Execution ID Status Trigger Vendor Start Time End Time │
│ ───────────────────────────────────────────────────────────────────────────────────────────── │
│ 45 Error Manual P2P_PREHEAT Apr 24, 2026 1:30 AM Apr 24, 2026 1:30 AM │
│ 44 Success Manual P2P_PREHEAT Apr 23, 2026 9:15 PM Apr 23, 2026 9:16 PM │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
```
- `harbor project preheat execution view [projectName] [policyName] [executionID]` : view details of a specific execution
**Output:**
```
┌───────────────────────────────────────────────────────────────────────────────────────────────┐
│ Execution ID Status Trigger Vendor Start Time End Time │
│ ───────────────────────────────────────────────────────────────────────────────────────────── │
│ 45 Error Manual P2P_PREHEAT Apr 24, 2026 1:30 AM Apr 24, 2026 1:30 AM │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
```
- `harbor project preheat execution stop [projectName] [policyName] [executionID]` : stop a running preheat execution
**Output:**
```
Preheat execution '123' stopped for policy 'my-policy' in project 'my-project'
```
---
### `harbor project preheat task` command
- `harbor project preheat task list [projectName] [policyName] [executionID]` : list all tasks for a preheat execution. Tasks represent individual artifacts being preheated.
**Flags:** `--page`, `--page-size`, `--query`, `--sort`
- `harbor project preheat task log [projectName] [policyName] [executionID] [taskID]` : get the log output of a specific preheat task
---
Will refine more while implementing. Please have a look and suggest any required changes in the structure of the command.
Contributor guide
Assessment
This issue has not been assessed yet.