Help us shape the future of Go! Take the 2026 Go Developer Survey

api

package
v0.1.0-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2026 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Overview

Package api 是 fleetly 控制面 v0.1 API 服务实现与拦截器链(T2.17; 架构 D21:proto 唯一真源,鉴权/限流在 gRPC 拦截器链)。

鉴权模型(architecture §4.2 安全基线):Authorization: Bearer <token> → tokens 表哈希比对(常量时间二次校验)→ scope 判定(read ⊂ deploy ⊂ admin,方法级映射在本包 scope.go)——**无 token / 错 token 全部 401**, scope 不足 403。错误码取舍:401/403 无专用稳定码,用信封退化形态 (code 空 + grpc code 机械映射 HTTP),与 FZ-2 口径一致(本阶段 internal/errcode 不在允许改动清单,不加码)。

Index

Constants

View Source
const (
	ScopeRead   = "read"
	ScopeDeploy = "deploy"
	ScopeAdmin  = "admin"
)

scope 词表(state-model §2.9 / architecture §4.2:read/deploy/admin)。

Variables

This section is empty.

Functions

func GenerateBootstrapAdminToken

func GenerateBootstrapAdminToken(ctx context.Context, st *state.Store, note string) (string, error)

GenerateBootstrapAdminToken 生成并落库 admin token(T2.17 安装引导; 明文返回一次,库内只存哈希)。审计 ActorTokenID 空 = 自举(无调用方 token)。已存在任意 token 时调用方应跳过(HasAnyToken 谓词)。

func RequiredScope

func RequiredScope(fullMethod string) (string, bool)

RequiredScope 返回方法所需 scope(未登记返回 false——调用方按 admin 拒绝路径处理)。

Types

type AppsService

type AppsService struct {
	serverv1.UnimplementedAppsServiceServer
	// contains filtered or unexported fields
}

AppsService 实现 server.v1.AppsService(T2.17):列表带派生状态、详情 带 placement 与最近部署、删除走 tombstone 生命周期(state 现有状态机)。 T2.19 增补 webhook/git 触发配置面(SetAppWebhookSecret/ShowAppWebhook/ SetAppSource——secret 与认证材料经平台 envelope 加密落库,明文不落、 永不回读;show 面只回 configured 位)。

func NewAppsService

func NewAppsService(st *state.Store, box *secrets.Box, gitEndpoint string) *AppsService

NewAppsService 构造 AppsService(box 为 webhook secret 加密器; gitEndpoint 供 git remote 提示)。

func (*AppsService) DeleteApp

DeleteApp 推进 active → deleting(tombstone 第一拍):保留期内名字仍 占用、不复活;与审计同事务 fail-closed。actor 记调用方 token(审计 action = api.AppsService.DeleteApp,方法级;不发明新事件)。

func (*AppsService) GetApp

GetApp 应用详情:placement / 最近部署 / 派生状态正交细节。

func (*AppsService) ListApps

ListApps 列出应用(active + deleting;deleted tombstone 不进默认列表 ——GetApp 可显式查看,列表面向运营主视图)。

func (*AppsService) SetAppSource

SetAppSource 设置拉源配置(admin;T2.19):url + branch + 认证形态。 整体替换语义(每次调用写全量字段);认证材料必须与 auth_kind 同调提供 ——材料经 envelope 加密落库,读回面无明文,因此无法「留旧」。

func (*AppsService) SetAppWebhookSecret

SetAppWebhookSecret 设置 per-app webhook 签名密钥(admin;T2.19):值经 平台 envelope 加密落库(明文不落),审计 app.webhook_secret_set 在 state 层同事务 fail-closed。secret 缺失的端点是 404 语义(未配置即未启用)。

func (*AppsService) ShowAppWebhook

ShowAppWebhook 回读 webhook/git 触发配置(无敏感投影;admin)。

type Authenticator

type Authenticator struct {
	// contains filtered or unexported fields
}

Authenticator 是 token 认证器(state 层哈希认证 + scope 判定 + per-token 限流——限流在认证成功后判定,身份先于限流成立)。

func NewAuthenticator

func NewAuthenticator(st *state.Store) *Authenticator

NewAuthenticator 构造认证器(内置缺省参数限流器:宽松防滥用)。

func (*Authenticator) Authenticate

func (a *Authenticator) Authenticate(ctx context.Context, authorization string) (Principal, error)

Authenticate 校验 Bearer 凭据并返回身份;失败返回 grpc status(401/403 信封退化形态)。required scope 判定在 authorize(拦截器按方法映射调用)。

func (*Authenticator) StreamAuthInterceptor

func (a *Authenticator) StreamAuthInterceptor() grpc.StreamServerInterceptor

StreamAuthInterceptor 流式鉴权拦截器(Follow/Watch 双流同矩阵)。

func (*Authenticator) UnaryAuthInterceptor

func (a *Authenticator) UnaryAuthInterceptor() grpc.UnaryServerInterceptor

UnaryAuthInterceptor 一元鉴权拦截器(链位:最外层,先于限流与 protovalidate)。

type BuildsService

type BuildsService struct {
	serverv1.UnimplementedBuildsServiceServer
	// contains filtered or unexported fields
}

BuildsService 实现 server.v1.BuildsService(T2.18)。TriggerBuild 与 Deploy 同型契约:compose 内容字节入队前受控子集校验(compose 违约不动 底座、不入队),构建目标裁决(railpack/dockerfile + image 直通)在服务 端——旧 CLI 直连入库时在客户端做的 selectBuildTargets 随 CLI-over-SDK 改造收编到服务端,目标裁决单一事实源随行。builds.request 跨进程执行 契约不变(daemon 的 build.queue worker 消费同一 JSON 形态)。

func NewBuildsService

func NewBuildsService(st *state.Store) *BuildsService

NewBuildsService 构造 BuildsService。

func (*BuildsService) GetBuild

GetBuild 单条构建(CLI build 的等待轮询源)。

func (*BuildsService) ListBuilds

ListBuilds 按应用列构建(created_at 倒序)。

func (*BuildsService) TriggerBuild

TriggerBuild 解析 compose、裁决构建目标并逐服务入队(应用不存在时自动 创建——构建常是应用的第一个平台动作,与 deploy 同语义)。

type DeploymentsService

type DeploymentsService struct {
	serverv1.UnimplementedDeploymentsServiceServer
	// contains filtered or unexported fields
}

DeploymentsService 实现 server.v1.DeploymentsService(T2.17)。

Deploy 契约(proto 取舍注记):compose 内容字节 + app 名入队,返回 deployment id 后立即返回;终态由客户端轮询 GetDeployment 或消费事件流。 compose 落临时文件后走受控子集校验(compose.Load),文件路径随行落库 ——引擎 preparing 阶段重载复核(同 CLI 形态;临时文件生命周期 = 引擎 消费完成,v0.1 不做清理回收,遗留记录)。

func NewDeploymentsService

func NewDeploymentsService(st *state.Store, git GitDeploySource) *DeploymentsService

NewDeploymentsService 构造 DeploymentsService(git 源端口可 nil—— DeployFromGit 届时显式不可用,进程内夹具形态)。

func (*DeploymentsService) CancelDeployment

CancelDeployment 置位取消(受限语义:未切流可取消;曾健康/终态 409 ——引擎侧二次校验为权威)。

func (*DeploymentsService) Deploy

Deploy 入队部署(同 CLI:入队前受控子集校验——compose 违约不动底座、 不入队;deployment.queued 事件与审计同事务 fail-closed)。校验期警告随 响应带出(T2.18:CLI 改经 RPC 入队后保留警告的人读呈现)。

func (*DeploymentsService) DeployFromGit

DeployFromGit 是 git push(SSH) 触发入口的入队面(T2.19):post-receive 钩子经 loopback REST 携带 hook token(deploy scope)调用。compose 字节 由服务端从 bare 仓库自取(真源在 git 对象库,不信任客户端传字节);sha 为 40 位 commit(protovalidate 形状 + 服务端十六进制复核)。审计在源端 实现(git.push_deploy,actor=system + 钩子 token id)。

func (*DeploymentsService) GetDeployment

GetDeployment 单条部署。

func (*DeploymentsService) ListDeployments

ListDeployments 按应用列部署(created_at 倒序)。

func (*DeploymentsService) RollbackDeployment

RollbackDeployment 回滚入队(engine.EnqueueRollback:目标解析失败 E_ROLLBACK_NO_TARGET;事件/审计在引擎入队路径内置)。

type DomainsService

type DomainsService struct {
	serverv1.UnimplementedDomainsServiceServer
	// contains filtered or unexported fields
}

DomainsService 实现 server.v1.DomainsService。

func NewDomainsService

func NewDomainsService(st *state.Store, mgr *ingress.Manager) *DomainsService

NewDomainsService 构造 DomainsService。

func (*DomainsService) ListAppDomains

ListAppDomains 域名台账(只读;写入方唯一 = internal/ingress 发布对账)。

func (*DomainsService) VerifyAppDomains

VerifyAppDomains 本机视角域名验证(ingress.VerifyDomains;探测材料 如实记录,判断权在操作者)。

type DriftService

type DriftService struct {
	serverv1.UnimplementedDriftServiceServer
	// contains filtered or unexported fields
}

DriftService 实现 server.v1.DriftService(T2.18):漂移判定/收敛/opt-in 置位复用 engine 既有逻辑(DriftShow/ConvergeApp/SetDriftConverge),本面 只做契约投影——不重写对账语义。actor 恒 "human"(API 无法区分人类/AI 代理,可追溯性由审计 actor_token_id 承载,与 rollback 面同口径)。

func NewDriftService

func NewDriftService(st *state.Store, eng *engine.Engine) *DriftService

NewDriftService 构造 DriftService。

func (*DriftService) ConvergeDrift

ConvergeDrift 人工一次性收敛(归位重放原语,带审计;在途部署存在时 409 语义由引擎承载)。

func (*DriftService) SetDriftConverge

SetDriftConverge 收敛 opt-in 的人工置位/重置(回滚失败强制关闭后的 唯一恢复入口;带审计)。

func (*DriftService) ShowDrift

ShowDrift 即时判定运行域漂移(不写事件不收敛——与 CLI 读面同源)。

type EnvService

type EnvService struct {
	serverv1.UnimplementedEnvServiceServer
	// contains filtered or unexported fields
}

EnvService 实现 server.v1.EnvService(T2.17):Set/Remove 走 pending 语义(state 层内置),Get 明文解密(admin scope 在拦截器链强制), List 恒不出值。值加密边界:入站明文 → box.Encrypt 落库;出站解密仅在 GetEnv 显式路径。

func NewEnvService

func NewEnvService(st *state.Store, box *secrets.Box) *EnvService

NewEnvService 构造 EnvService。

func (*EnvService) GetEnv

GetEnv 读回明文(admin scope 专用路径;密文解密失败按内部错误透出)。

func (*EnvService) ListEnv

ListEnv 键名/来源/状态位(值恒脱敏)。

func (*EnvService) RemoveEnv

RemoveEnv 删除平台 env(幂等性不做:键不存在 404;台账立即删行,运行 实例 env 快照随下次部署更新)。

func (*EnvService) SetEnv

SetEnv 设置平台 env(pending;值密文落库,审计在 state 层 fail-closed)。

type EventsService

type EventsService struct {
	serverv1.UnimplementedEventsServiceServer
	// contains filtered or unexported fields
}

EventsService 实现 server.v1.EventsService(T2.17):Watch 是 seq 游标 server-streaming(architecture §2.3)。实现 = 周期轮询 state.EventsSince (Outbox 行读,事件与业务写同事务落库):

  • 断线重连:客户端带 since_seq 续读(seq > since_seq 升序);
  • 游标过期:**流上发一帧 cursor_expired 信封错误帧(带 oldest_seq) 后正常关闭流**(取舍见 events.proto 注释——gateway chunked-JSON 面 中途改状态码不可行,显式断档帧让消费方重新对齐);
  • 无限流:有界批量(每轮至多 500 条)+ 轮询间隔 1s。

func NewEventsService

func NewEventsService(st *state.Store) *EventsService

NewEventsService 构造 EventsService。

func (*EventsService) WatchEvents

WatchEvents 实现事件流。

type GitDeploySource

type GitDeploySource interface {
	// DeployFromGitPush 以 git push 语义入队部署:每次调用建部署记录
	// (显式用户动作,不去重——幂等口径绑定在票面);返回记录与校验期
	// 警告。actorTokenID 记录钩子回调 token(可空)。
	DeployFromGitPush(ctx context.Context, app, sha, ref, actorTokenID string) (state.DeployRecord, []compose.Warning, error)
}

GitDeploySource 是 DeployFromGit RPC 的 compose 源端口(实现方在 internal/gitserver——compose 真源在其 bare 仓库对象库;方向纪律:api 定义端口、不感知实现类型)。

type GitKeysService

type GitKeysService struct {
	serverv1.UnimplementedGitKeysServiceServer
	// contains filtered or unexported fields
}

GitKeysService 实现 server.v1.GitKeysService(T2.19):平台管理的 git 公钥(SSH push 认证;v0.1 全局级,admin scope 管理)。公钥指纹入库 (SHA256,ssh-keygen -lf 同格式);私钥永不经过平台。生命周期动作审计 在 state 层与业务写同事务 fail-closed(gitkey.add / gitkey.remove)。

func NewGitKeysService

func NewGitKeysService(st *state.Store) *GitKeysService

NewGitKeysService 构造 GitKeysService。

func (*GitKeysService) AddGitKey

AddGitKey 解析 authorized_keys 单行并入库(指纹唯一——重复注册 409 退化 信封)。

func (*GitKeysService) ListGitKeys

ListGitKeys 在册公钥列表(公钥为公开材料可回读)。

func (*GitKeysService) RemoveGitKey

RemoveGitKey 删除公钥(幂等语义:不存在 404 退化信封;删除即时生效 ——在推连接不受影响,新握手即拒绝)。

type IngressStatusSource

type IngressStatusSource interface {
	Status(ctx context.Context) (ingress.Status, error)
	Config() ingress.Config
}

IngressStatusSource 是入口状态消费端口(*ingress.Manager 隐式实现)。

type LogsService

type LogsService struct {
	serverv1.UnimplementedLogsServiceServer
	// contains filtered or unexported fields
}

LogsService 实现 server.v1.LogsService(T2.20):Follow 接管线实时面 (ring 回放 + 实时扇出),History 接落盘/构建产物检索。脱敏已在采集端 (internal/logs),本面不二次处理。

func NewLogsService

func NewLogsService(st *state.Store, mg *logs.Manager) *LogsService

NewLogsService 构造 LogsService。

func (*LogsService) FollowLogs

FollowLogs 实时跟随(server-streaming;ctx 取消即断流,重连 = 重新 Follow)。

func (*LogsService) ListHistoryLogs

ListHistoryLogs 历史检索(时间窗/服务/来源过滤)。

type PlacementService

type PlacementService struct {
	serverv1.UnimplementedPlacementServiceServer
	// contains filtered or unexported fields
}

PlacementService 实现 server.v1.PlacementService。

func NewPlacementService

func NewPlacementService(st *state.Store) *PlacementService

NewPlacementService 构造 PlacementService。

func (*PlacementService) ShowPlacement

ShowPlacement 放置绑定视图(未绑定时 placement 不输出)+ 卷注册表 (T2.18:卷的钉住语义由放置绑定决定,与绑定同面展示)。

type Principal

type Principal struct {
	TokenID string
	Scopes  []string
}

Principal 是通过鉴权的调用方身份(handler 侧审计 actor_token_id 消费)。

func PrincipalFromContext

func PrincipalFromContext(ctx context.Context) (Principal, bool)

PrincipalFromContext 取调用方身份(未鉴权路径不存在——拦截器链强制)。

type RevisionsService

type RevisionsService struct {
	serverv1.UnimplementedRevisionsServiceServer
	// contains filtered or unexported fields
}

RevisionsService 实现 server.v1.RevisionsService。

func NewRevisionsService

func NewRevisionsService(st *state.Store) *RevisionsService

NewRevisionsService 构造 RevisionsService。

func (*RevisionsService) GetRevisionSpec

GetRevisionSpec 单条快照的归一化 compose 正文(canonical JSON;T2.18 plan 的 RPC 基线消费——env 为 key:sha256,值明文结构性不在快照中)。 superseded → 404(与回滚选项面同口径:列不出来的不可消费)。

func (*RevisionsService) ListRevisions

ListRevisions 版本快照列表(保留窗;列表即回滚选项集)。

type SystemComponent

type SystemComponent struct {
	Name  string
	Check func() error
}

SystemComponent 是带名的健康组件(CheckHealth 复用面)。

type SystemService

type SystemService struct {
	serverv1.UnimplementedSystemServiceServer
	// contains filtered or unexported fields
}

SystemService 实现 server.v1.SystemService:进程级系统信息(Ping/Status, T0.3/T2.17)+ 集群级观察面(ListNodes/GetIngressStatus,T2.18)。

ingress 依赖以 IngressStatusSource 端口注入(实现 = *ingress.Manager): 入口探测在服务端执行——CLI 不再直连 docker / 读本地 token 文件 / 探测 配置端点(CLI-over-SDK 单一通道纪律);nil 端口 = 入口面未装配(测试 形态),Traefik 视图如实报告不可用而非谎报。

func NewSystemService

func NewSystemService(version string, st *state.Store, components func() []SystemComponent, ing IngressStatusSource) *SystemService

NewSystemService 构造 SystemService(version 由构建 -ldflags 注入; components 为装配点命名的健康组件集;ing 可为 nil——入口面未装配形态)。

func (*SystemService) GetIngressStatus

GetIngressStatus 入口链三面状态(T2.18):① Traefik 服务实况(Swarm inspect,不可达如实标注);② 配置端点两面探测(/healthz 无鉴权 + /configs 带 token 鉴权核验——环回执行,401 = token 缺失/错误,如实报告); ③ 证书台账(domains 表 cert 列)与证书存储目录对照。

func (*SystemService) GetSystemStatus

GetSystemStatus 健康汇总(引擎/Traefik/状态层/备份——复用 CheckHealth 面): 逐组件如实上报,不聚合单一布尔,判断权在消费方。备份明细(最近一次 台账行的时间与 verify_status)随 backup 字段带出——组件布尔之外让 「备份上次何时成功」直接可见(T2.22 状态诚实契约)。

func (*SystemService) ListBackups

ListBackups 状态备份台账只读列表(T2.22;n 缺省 50——台账量级受保留 份数约束,50 已覆盖全部现行行 + 近期失败行)。

func (*SystemService) ListNodes

ListNodes 节点观测缓存只读列表(state-model §2.2:缓存禁止用于决策, 展示/诊断专用;节点变更用 docker node 原生命令)。

func (*SystemService) Ping

Ping 回应 service / version。proto 字段上的 buf.validate 最小约束由拦截 器统一校验;Ping 豁免鉴权(T2.17 契约:与 healthz 同为存活面)。

func (*SystemService) TriggerBackup

TriggerBackup 手动触发一次状态备份(同步:响应即落账后的台账行; verify_status=failed 时以 FailedPrecondition 返回且台账行保留失败事实 ——调用方看得见失败,绝不渲染成成功)。

func (*SystemService) WithBackupManager

func (s *SystemService) WithBackupManager(m *statebackup.Manager) *SystemService

WithBackupManager 注入状态备份管理器(T2.22;链式装配,nil 合法—— 测试/精简形态的备份面缺省)。

type TokensService

type TokensService struct {
	serverv1.UnimplementedTokensServiceServer
	// contains filtered or unexported fields
}

TokensService 实现 server.v1.TokensService(T2.17;state-model §2.9)。 哈希存储:明文只在 CreateToken 响应出现一次;List 只出备注/scope/ 哈希前缀。scope 集(admin 蕴含 deploy 蕴含 read)在 containsScope 判定。

func NewTokensService

func NewTokensService(st *state.Store) *TokensService

NewTokensService 构造 TokensService。

func (*TokensService) CreateToken

CreateToken 生成并落库新 token:明文仅本次响应可见。

func (*TokensService) ListTokens

ListTokens 在册 token 列表(无敏感投影;完整哈希与明文永不回读)。

func (*TokensService) RevokeToken

RevokeToken 吊销(幂等;不存在 404)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL