goharbor / goharbor/harbor-cli

Discussion : Project preheat command

Open
#836 2 comments 0 reactions 0 assignees View on GitHub
discussion
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.