레시피 스키마
OpenFactory 레시피는 snake_case JSON을 사용합니다. 표준 형식은 작습니다.
최상위 봉투, 운영 체제 구성을 위한 os 개체 및
빌드 후 확인을 위한 scenarios 배열입니다.
검증을 통해 인식된 필드가 허용 가능한 모양임을 입증합니다. 그렇지 않다 모든 패키지가 존재하는지, 요청된 모든 동작이 표현되었는지 증명하거나 이미지와 테스트가 성공합니다. 알 수 없는 필드는 뒤로 무시될 수 있습니다. 호환성이 있으므로 항상 반환된 정규화된 레시피를 검사하세요. 제품입니다.
표준 봉투
{
"name": "debian-web-check",
"display_name": "Debian Web Check",
"description": "Small Debian image with explicit smoke tests.",
"base_image": "debian-trixie",
"use_case": "Server evaluation",
"hardware": {},
"os": {},
"scenarios": [],
"publish_to": ["local"]
}baseImage 또는 startupScripts과 같은 camelCase 필드를 사용하지 마십시오. 는
호환성 검사기는 일부 오래된 단순 레시피를 허용하지만 정규화된 출력
os 아래에 OS 필드를 중첩합니다. 새로운 통합은 표준 형식을 전송해야 합니다.
최상위 필드
| 필드 | 유형 | 필수/기본값 | 의미 |
|---|---|---|---|
name | 문자열 | 필수의; 3~100자 | 안정적인 내부 레시피 이름 |
display_name | 문자열 또는 null | 선택 과목; 1~100자 | 인간을 향한 이름 |
description | 문자열 | "" | 의도된 결과 및 경계 |
base_image | 문자열 | debian-trixie | 배포/빌드 대상; 현재 콘솔 목록 사용 |
task | 문자열 또는 null | 선택사항 | 운영목표 |
executor | 문자열 또는 null | 선택사항 | 과제를 수행할 것으로 기대되는 기술 |
use_case | 문자열 | General | 기본 사용 사례 |
hardware | 개체 | 아래 표시된 기본값 | 배포 요구 사항 |
os | 개체 | 비어 있음/기본 개체 | OS 패키지, 사용자, 서비스, 보안, 데스크탑, 설치 프로그램 및 스크립트 |
scenarios | 배열 | [] | 테스트 토폴로지 및 목표 |
publish_to | 문자열 배열 | ["local"] | 요청된 출력 대상 |
delivery | 개체 | {} | 추가 선언된 배달 구성 |
community | 부울 | false | 커뮤니티 시장 가시성을 요청합니다. 출판 정책은 여전히 적용됩니다 |
소스 ISO 리마스터링, Proxmox 게스트를 위한 고급 대상별 필드가 존재합니다. 페이로드, 정책 출처 및 전달 통합. 편집기 또는 API 사용 이전 예제를 복사하는 대신 배포된 릴리스에 대한 계약을 체결합니다.
하드웨어
{
"hardware": {
"platform": "pc",
"architecture": "x86_64",
"gpu": null,
"min_cpu_cores": 2,
"min_memory_gb": 4,
"min_storage_gb": 16,
"nic_count": 1
}
}platform은(는) pc, phone 또는 raspberry_pi입니다. 지원되는 장치 값은 다음과 같습니다.
특정 대상. architecture은(는) x86_64 또는 aarch64입니다. GPU 값 이름
지원되는 공급업체 또는 공급업체 조합. 이는 선언된 요구사항이지,
결과 이미지가 일치하는 물리적 하드웨어에서 테스트되었음을 증명합니다.
OS 객체
일반적인 os 필드는 다음과 같습니다.
| 필드 | 유형 | 목적 |
|---|---|---|
features | 문자열 배열 | 등록된 기능 모듈 |
packages | 문자열 배열 | 요청할 네이티브 패키지 |
excluded_packages | 문자열 배열 | 기능 확장 후에도 없어야 하는 패키지 |
custom_packages | 배열 | 지원되는 빌드 경로를 통해 패키징할 소스 저장소 |
package_overrides | 배열 | 명시적 추가, 제거 또는 교체 작업 |
extra_repos | 문자열 배열 | 추가 저장소 신뢰 및 키 처리에 여전히 검토가 필요함 |
services | 배열 | 명명된 서비스 활성화 및 구성 |
users | 배열 | 이미지 로컬 계정 및 그룹 |
security | 개체 | 강화, 암호화, 감사, SELinux 및 Fail2ban 선택 선언 |
networking | 개체 | 인터페이스 및 네트워크 의도 |
desktop_settings | 개체 | 데스크탑 모양 및 동작 |
branding | 개체 | 유통 아이덴티티 및 자산 |
runtime | 개체 | 초기화/서비스/패키지 관리자 ID |
boot | 개체 | 커널 인수 및 GRUB 선택 |
installer | 개체 | 디스크에 설치 구성 |
persistence | 개체 | 실시간 지속성 및 영역 정책 |
integrity | 개체 | 요청된 dm-verity, 보안 부팅 및 IMA/EVM 설정 |
file_attachments | 배열 | 이전에 업로드된 파일은 file_id로 식별됨 |
startup_scripts | 배열 | 제한된 시스템의 원샷 스크립트 |
time_zone | 문자열 또는 null | 이미지 시간대 설정 |
무결성 또는 보안 필드의 존재는 구성 의도입니다. 그것은 메커니즘이 생성되었거나 런타임에 적용되었거나 자격이 부여되었다는 증거가 아닙니다. 규정 준수 체제를 위해. 일치하는 빌드 및 테스트 증거가 필요합니다.
사용자
{
"os": {
"users": [
{
"username": "deploy",
"full_name": "Deployment Operator",
"groups": ["sudo"],
"shell": "/bin/bash"
}
]
}
}사용자 및 그룹 이름은 안전한 Linux 계정 문자 및 길이로 제한됩니다.
password을 설정하지 않으면 키 전용 또는 비밀번호로 잠긴 계정이 생성됩니다.
배포 시간 자격 증명 워크플로. 저장된 일반 텍스트 자격 증명을 피하세요.
조리법.
서비스
{
"os": {
"services": [
{
"name": "ssh",
"enabled": true,
"config": {
"port": 22,
"disable_password_auth": true
}
}
]
}
}config은 서비스별로 다릅니다. 구문적으로 유효한 키는 여전히 무시될 수 있습니다.
그것을 구현하지 않는 생성기. 생성된 정규화된 레시피를 확인하세요.
구성 및 게스트 동작.
보안 및 설치 프로그램
{
"os": {
"security": {
"hardening_level": "standard",
"disk_encryption": false,
"audit_logging": true,
"selinux": false,
"fail2ban": true
},
"installer": {
"enabled": false,
"type": "calamares",
"desktop_launcher": true,
"bootloader": "grub",
"delivery": [],
"user_setup": "build_time"
}
}
}설치 프로그램 유형은 대상에 따라 다릅니다(calamares, anaconda 또는
elster-mobile). 설치 프로그램을 활성화한 다음에는 일회용 디스크를 사용해야 합니다.
설치 테스트; 라이브 데스크탑의 아이콘은 설치가 작동한다는 증거가 아닙니다.
시작 스크립트
{
"os": {
"startup_scripts": [
{
"name": "write-build-marker",
"description": "Create a local marker after networking is available.",
"command": "install -m 0644 /dev/null /var/lib/example-ready",
"packages": [],
"run_as": "root",
"after": "network.target"
}
]
}
}최대 32개의 시작 스크립트가 허용됩니다. 명령은 비어 있지 않아야 하며, 비어 있을 수 없습니다.
NUL 바이트를 포함합니다. run_as이 명시하지 않는 한 이를 루트 가능 쉘 코드로 취급하십시오.
그렇지 않으면; 멱등성, 인용, 네트워크 오류 및 비밀 노출을 검토합니다.
시나리오 및 주장
{
"scenarios": [
{
"id": "primary-smoke",
"name": "Primary image smoke test",
"enabled": true,
"tests": ["boot", "login", "packages"],
"custom_tests": [
{
"description": "Confirm SSH is enabled on the configured port.",
"assertions": [
{
"type": "service_enabled",
"description": "The SSH service starts at boot.",
"params": {"service": "ssh"}
},
{
"type": "port_listening",
"description": "The guest listens on TCP port 22.",
"params": {"port": 22}
}
]
}
]
}
]
}시나리오는 VM 및 네트워크, 벤치마크 형식을 사용하여 topology을 정의할 수도 있습니다.
테스트 및 CIS 설정. 생략된 토폴로지는 기본적으로 일반 단일 VM으로 설정됩니다.
경로. 어설션에는 사람이 읽을 수 있는 설명과 유형별 매개변수가 필요합니다.
알 수 없는 어설션 유형은 스키마 구문 분석 후에도 유지될 수 있으므로 실행기를 확인하세요.
증거로 처리하기 전에 이를 뒷받침합니다.
최소한의 예를 완성하세요
{
"name": "debian-web-check",
"display_name": "Debian Web Check",
"description": "Debian image with SSH, curl, and explicit smoke tests.",
"base_image": "debian-trixie",
"use_case": "Server evaluation",
"hardware": {
"platform": "pc",
"architecture": "x86_64",
"min_cpu_cores": 2,
"min_memory_gb": 4,
"min_storage_gb": 16,
"nic_count": 1
},
"os": {
"features": ["ssh"],
"packages": ["curl"],
"users": [
{
"username": "deploy",
"groups": ["sudo"],
"shell": "/bin/bash"
}
],
"services": [
{
"name": "ssh",
"enabled": true,
"config": {"port": 22, "disable_password_auth": true}
}
],
"security": {
"hardening_level": "standard",
"audit_logging": true
},
"installer": {"enabled": false}
},
"scenarios": [
{
"id": "primary-smoke",
"name": "Primary image smoke test",
"enabled": true,
"tests": ["boot", "login", "packages"]
}
],
"publish_to": ["local"]
}검증 작업 흐름
- 현재 레시피 편집기, API 또는 MCP를 통해 JSON을 검증합니다.
validate_recipe도구. - 반환된 정규화된 레시피를 원래 요청과 비교합니다.
- 삭제된 알 수 없는 필드를 성공이 아닌 레시피의 결함으로 처리합니다. 구성.
- 명시적인 요구사항이 나타난 후에만 빌드하십시오.
- 생성된 증거를 검사하고 결과 게스트에 대해 어설션을 실행합니다.
실패 및 다운로드는 첫 번째 빌드를 참조하세요. 회복 지침.