mirror of
https://github.com/docker/docs.git
synced 2026-10-25 06:09:46 +03:00
## Summary Restructures the Docker AI Governance documentation under \`/ai/sandboxes/governance/\` and adds the supporting API reference. Preview links: - https://deploy-preview-25162--docsdocker.netlify.app/ai/sandboxes/governance/ - https://deploy-preview-25162--docsdocker.netlify.app/reference/api/ai-governance/ ### Information architecture The existing \`security/governance\` and \`security/policy\` pages are merged into a new top-level \`governance\` section so local-policy and org-policy sit side by side instead of being split across unrelated parents: - \`/ai/sandboxes/governance/\` — section landing; explains local + org as layered enforcement - \`/ai/sandboxes/governance/concepts/\` — resource model, rule syntax, evaluation, precedence - \`/ai/sandboxes/governance/local/\` — \`sbx policy\` CLI for individual machines - \`/ai/sandboxes/governance/org/\` — Admin Console flow (was \`security/governance.md\`) - \`/ai/sandboxes/governance/monitoring/\` — \`sbx policy ls\` / \`sbx policy log\` ### API reference \`/reference/api/ai-governance/\` renders the Governance OpenAPI spec vendored at \`content/reference/api/ai-governance/api.yaml\` from \`docker/governor-services\`. Operations, schemas, examples, and status codes are fully driven by the spec — future updates land via re-vendor, not in-repo edits. Anything wrong in the rendered reference should be fixed upstream and re-vendored here. The spec has been re-vendored to the latest upstream version, which updated the server URL to \`hub.docker.com/v2\` and added the \`/governance/\` prefix to all API paths. ### Review focus 1. The \`/ai/sandboxes/governance/\` landing — does the local + org framing match how the product is positioned? 2. \`/reference/api/ai-governance/\` — does the rendered spec match the source of truth, and is anything important missing? Generated by Claude Code --------- Co-authored-by: Louis-Arnaud <la.catoire@gmail.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
186 lines
5.6 KiB
Markdown
186 lines
5.6 KiB
Markdown
{{- /*
|
|
Markdown rendering of an OpenAPI reference page.
|
|
|
|
Mirrors the HTML api-reference layout: unmarshals the colocated YAML
|
|
Page Resource into a plain Hugo map and walks the spec to produce a
|
|
flat markdown document. Used by the "View Markdown" / "Copy Markdown"
|
|
actions and the .md alternate link.
|
|
*/ -}}
|
|
{{- $specRes := .Resources.GetMatch "*.yaml" -}}
|
|
{{- $api := $specRes | transform.Unmarshal -}}
|
|
{{- $methods := slice "get" "post" "put" "patch" "delete" -}}
|
|
{{- $paths := $api.paths -}}
|
|
# {{ .Title }}
|
|
|
|
{{ with .Description }}{{ . }}{{ end }}
|
|
|
|
{{ with $api.info }}
|
|
{{- with .version }}- **Version**: `{{ . }}`
|
|
{{ end -}}
|
|
{{ end -}}
|
|
{{- range $api.servers }}- **Base URL**: `{{ .url }}`
|
|
{{ end }}
|
|
- **OpenAPI specification**: [`{{ path.Base $specRes.RelPermalink }}`]({{ $specRes.Permalink }})
|
|
|
|
{{ with $api.info }}{{ with .description }}{{ . }}{{ end }}{{ end }}
|
|
|
|
{{ with $api.components }}{{ with .securitySchemes }}
|
|
## Authentication
|
|
|
|
{{ range $name, $scheme := . }}
|
|
**`{{ $name }}`**{{ with $scheme.type }} — type: `{{ . }}`{{ end }}{{ with $scheme.scheme }}, scheme: `{{ . }}`{{ end }}{{ with $scheme.bearerFormat }}, bearer format: `{{ . }}`{{ end }}
|
|
|
|
{{ with $scheme.description }}{{ . }}{{ end }}
|
|
{{ end -}}
|
|
{{ end }}{{ end }}
|
|
|
|
{{- range $api.tags }}
|
|
## {{ .name | title }}
|
|
|
|
{{ with .description }}{{ . }}{{ end }}
|
|
|
|
{{- $tagName := .name -}}
|
|
{{- range $path, $item := $paths -}}
|
|
{{- $sharedParams := slice -}}
|
|
{{- with index $item "parameters" -}}
|
|
{{- range . -}}
|
|
{{- $p := partial "api-ref/resolve.html" (dict "api" $api "node" .) -}}
|
|
{{- $sharedParams = $sharedParams | append $p -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- range $methods -}}
|
|
{{- $method := . -}}
|
|
{{- with index $item $method -}}
|
|
{{- $op := . -}}
|
|
{{- if in $op.tags $tagName }}
|
|
### `{{ upper $method }}` `{{ $path }}`
|
|
|
|
{{ with $op.summary }}**{{ . }}**{{ end }}
|
|
|
|
{{ with $op.description }}{{ . }}{{ end }}
|
|
|
|
{{- $params := $sharedParams -}}
|
|
{{- with index $op "parameters" -}}
|
|
{{- range . -}}
|
|
{{- $p := partial "api-ref/resolve.html" (dict "api" $api "node" .) -}}
|
|
{{- $params = $params | append $p -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{ if $params }}
|
|
**Parameters**
|
|
|
|
{{ range $params -}}
|
|
- `{{ .name }}` ({{ .in }}{{ with .schema }}{{ with .type }}, {{ . }}{{ end }}{{ end }}{{ if .required }}, required{{ end }}){{ with .description }} — {{ . | strings.TrimSpace }}{{ end }}
|
|
{{ end }}
|
|
{{- end }}
|
|
|
|
{{- with $op.requestBody -}}
|
|
{{- $body := partial "api-ref/resolve.html" (dict "api" $api "node" .) }}
|
|
**Request body**{{ with $body.description }} — {{ . | strings.TrimSpace }}{{ end }}
|
|
|
|
{{- $ct := "" -}}
|
|
{{- $media := dict -}}
|
|
{{- range $n, $m := $body.content -}}
|
|
{{- if not $ct -}}{{- $ct = $n -}}{{- $media = $m -}}{{- end -}}
|
|
{{- end -}}
|
|
{{ if $ct }}
|
|
Content type: `{{ $ct }}`
|
|
|
|
{{ template "api-ref-md-schema-link" (dict "schema" $media.schema) }}
|
|
{{ range $exName, $ex := $media.examples }}{{ with $ex.value }}
|
|
```json
|
|
{{ . | jsonify (dict "indent" " ") }}
|
|
```
|
|
{{ end }}{{ end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- with $op.responses }}
|
|
**Responses**
|
|
|
|
{{ range $code, $resp := . -}}
|
|
{{- $r := partial "api-ref/resolve.html" (dict "api" $api "node" $resp) }}
|
|
`{{ $code }}` — {{ with $r.description }}{{ . | strings.TrimSpace }}{{ end }}
|
|
{{- $ct := "" -}}
|
|
{{- $media := dict -}}
|
|
{{- range $n, $m := $r.content -}}
|
|
{{- if not $ct -}}{{- $ct = $n -}}{{- $media = $m -}}{{- end -}}
|
|
{{- end }}
|
|
{{ if $ct }}
|
|
{{ template "api-ref-md-schema-link" (dict "schema" $media.schema) }}
|
|
{{ range $exName, $ex := $media.examples }}{{ with $ex.value }}
|
|
```json
|
|
{{ . | jsonify (dict "indent" " ") }}
|
|
```
|
|
{{ end }}{{ end }}
|
|
{{- end }}
|
|
{{ end }}
|
|
{{ end -}}
|
|
|
|
{{ end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- with $api.components }}{{ with .schemas }}
|
|
## Schemas
|
|
|
|
{{ range $name, $schema := . }}
|
|
### `{{ $name }}`
|
|
|
|
{{ with $schema.description }}{{ . | strings.TrimSpace }}{{ end }}
|
|
|
|
{{ with $schema.enum -}}
|
|
Enum: {{ range $i, $v := . }}{{ if $i }}, {{ end }}`{{ $v }}`{{ end }}
|
|
{{ end }}
|
|
|
|
{{- with $schema.properties }}
|
|
{{- $required := $schema.required | default slice }}
|
|
| Property | Type | Required | Description |
|
|
| -------- | ---- | -------- | ----------- |
|
|
{{ range $propName, $prop := . -}}
|
|
| `{{ $propName }}` | {{ template "api-ref-md-type" $prop }} | {{ if in $required $propName }}yes{{ else }}no{{ end }} | {{ with $prop.description }}{{ . | strings.TrimSpace | strings.ReplaceRE "\\s*\\n\\s*" " " }}{{ end }} |
|
|
{{ end }}
|
|
{{ end -}}
|
|
|
|
{{ end -}}
|
|
{{ end }}{{ end }}
|
|
|
|
{{- /* ── Helpers ───────────────────────────────────────────────────────── */ -}}
|
|
|
|
{{- define "api-ref-md-type" -}}
|
|
{{- $s := . -}}
|
|
{{- if reflect.IsMap $s -}}
|
|
{{- with index $s "$ref" -}}
|
|
{{- $parts := split . "/" -}}
|
|
{{- $name := index $parts (sub (len $parts) 1) -}}
|
|
`{{ $name }}`
|
|
{{- else -}}
|
|
{{- with $s.type -}}
|
|
{{- if eq . "array" -}}
|
|
`array<`{{ template "api-ref-md-type" $s.items }}`>`
|
|
{{- else -}}
|
|
`{{ . }}`
|
|
{{- end -}}
|
|
{{- else -}}
|
|
{{- if $s.allOf -}}`object`
|
|
{{- else if or $s.anyOf $s.oneOf -}}`any`
|
|
{{- else -}}—{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- else -}}—{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- define "api-ref-md-schema-link" -}}
|
|
{{- $schema := .schema -}}
|
|
{{- $indent := .indent | default "" -}}
|
|
{{- if reflect.IsMap $schema -}}
|
|
{{- with index $schema "$ref" -}}
|
|
{{- $parts := split . "/" -}}
|
|
{{- $name := index $parts (sub (len $parts) 1) -}}
|
|
{{ $indent }}Schema: `{{ $name }}`
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|