- Created T026-practical-test task.yaml for MVP smoke testing - Added k8shost-server to flake.nix (packages, apps, overlays) - Staged all workspace directories for nix flake build - Updated flake.nix shellHook to include k8shost Resolves: T026.S1 blocker (R8 - nix submodule visibility)
330 lines
7.6 KiB
Protocol Buffer
330 lines
7.6 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package flashdns.v1;
|
|
|
|
option java_package = "com.flashdns.v1";
|
|
option go_package = "flashdns/v1;flashdnsv1";
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
import "google/protobuf/empty.proto";
|
|
|
|
// =============================================================================
|
|
// Zone Service - Zone management
|
|
// =============================================================================
|
|
|
|
service ZoneService {
|
|
// Zone CRUD
|
|
rpc CreateZone(CreateZoneRequest) returns (CreateZoneResponse);
|
|
rpc GetZone(GetZoneRequest) returns (GetZoneResponse);
|
|
rpc ListZones(ListZonesRequest) returns (ListZonesResponse);
|
|
rpc UpdateZone(UpdateZoneRequest) returns (UpdateZoneResponse);
|
|
rpc DeleteZone(DeleteZoneRequest) returns (google.protobuf.Empty);
|
|
|
|
// Zone status
|
|
rpc EnableZone(EnableZoneRequest) returns (google.protobuf.Empty);
|
|
rpc DisableZone(DisableZoneRequest) returns (google.protobuf.Empty);
|
|
}
|
|
|
|
// =============================================================================
|
|
// Record Service - DNS record management
|
|
// =============================================================================
|
|
|
|
service RecordService {
|
|
// Record CRUD
|
|
rpc CreateRecord(CreateRecordRequest) returns (CreateRecordResponse);
|
|
rpc GetRecord(GetRecordRequest) returns (GetRecordResponse);
|
|
rpc ListRecords(ListRecordsRequest) returns (ListRecordsResponse);
|
|
rpc UpdateRecord(UpdateRecordRequest) returns (UpdateRecordResponse);
|
|
rpc DeleteRecord(DeleteRecordRequest) returns (google.protobuf.Empty);
|
|
|
|
// Batch operations
|
|
rpc BatchCreateRecords(BatchCreateRecordsRequest) returns (BatchCreateRecordsResponse);
|
|
rpc BatchDeleteRecords(BatchDeleteRecordsRequest) returns (google.protobuf.Empty);
|
|
}
|
|
|
|
// =============================================================================
|
|
// Common Types
|
|
// =============================================================================
|
|
|
|
message ZoneInfo {
|
|
string id = 1;
|
|
string name = 2;
|
|
string org_id = 3;
|
|
string project_id = 4;
|
|
string status = 5;
|
|
uint32 serial = 6;
|
|
uint32 refresh = 7;
|
|
uint32 retry = 8;
|
|
uint32 expire = 9;
|
|
uint32 minimum = 10;
|
|
string primary_ns = 11;
|
|
string admin_email = 12;
|
|
google.protobuf.Timestamp created_at = 13;
|
|
google.protobuf.Timestamp updated_at = 14;
|
|
uint64 record_count = 15;
|
|
}
|
|
|
|
message RecordInfo {
|
|
string id = 1;
|
|
string zone_id = 2;
|
|
string name = 3;
|
|
string record_type = 4;
|
|
uint32 ttl = 5;
|
|
RecordData data = 6;
|
|
bool enabled = 7;
|
|
google.protobuf.Timestamp created_at = 8;
|
|
google.protobuf.Timestamp updated_at = 9;
|
|
}
|
|
|
|
message RecordData {
|
|
oneof data {
|
|
ARecord a = 1;
|
|
AaaaRecord aaaa = 2;
|
|
CnameRecord cname = 3;
|
|
MxRecord mx = 4;
|
|
TxtRecord txt = 5;
|
|
SrvRecord srv = 6;
|
|
NsRecord ns = 7;
|
|
PtrRecord ptr = 8;
|
|
CaaRecord caa = 9;
|
|
}
|
|
}
|
|
|
|
message ARecord {
|
|
string address = 1; // IPv4 address as string
|
|
}
|
|
|
|
message AaaaRecord {
|
|
string address = 1; // IPv6 address as string
|
|
}
|
|
|
|
message CnameRecord {
|
|
string target = 1;
|
|
}
|
|
|
|
message MxRecord {
|
|
uint32 preference = 1;
|
|
string exchange = 2;
|
|
}
|
|
|
|
message TxtRecord {
|
|
string text = 1;
|
|
}
|
|
|
|
message SrvRecord {
|
|
uint32 priority = 1;
|
|
uint32 weight = 2;
|
|
uint32 port = 3;
|
|
string target = 4;
|
|
}
|
|
|
|
message NsRecord {
|
|
string nameserver = 1;
|
|
}
|
|
|
|
message PtrRecord {
|
|
string target = 1;
|
|
}
|
|
|
|
message CaaRecord {
|
|
uint32 flags = 1;
|
|
string tag = 2;
|
|
string value = 3;
|
|
}
|
|
|
|
// =============================================================================
|
|
// Zone Operations - Requests & Responses
|
|
// =============================================================================
|
|
|
|
message CreateZoneRequest {
|
|
string name = 1;
|
|
string org_id = 2;
|
|
string project_id = 3;
|
|
// Optional SOA parameters
|
|
string primary_ns = 4;
|
|
string admin_email = 5;
|
|
}
|
|
|
|
message CreateZoneResponse {
|
|
ZoneInfo zone = 1;
|
|
}
|
|
|
|
message GetZoneRequest {
|
|
oneof identifier {
|
|
string id = 1;
|
|
string name = 2;
|
|
}
|
|
}
|
|
|
|
message GetZoneResponse {
|
|
ZoneInfo zone = 1;
|
|
}
|
|
|
|
message ListZonesRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string name_filter = 3;
|
|
uint32 page_size = 4;
|
|
string page_token = 5;
|
|
}
|
|
|
|
message ListZonesResponse {
|
|
repeated ZoneInfo zones = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdateZoneRequest {
|
|
string id = 1;
|
|
// Updatable fields
|
|
optional uint32 refresh = 2;
|
|
optional uint32 retry = 3;
|
|
optional uint32 expire = 4;
|
|
optional uint32 minimum = 5;
|
|
optional string primary_ns = 6;
|
|
optional string admin_email = 7;
|
|
}
|
|
|
|
message UpdateZoneResponse {
|
|
ZoneInfo zone = 1;
|
|
}
|
|
|
|
message DeleteZoneRequest {
|
|
string id = 1;
|
|
bool force = 2; // Delete even if records exist
|
|
}
|
|
|
|
message EnableZoneRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message DisableZoneRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
// =============================================================================
|
|
// Record Operations - Requests & Responses
|
|
// =============================================================================
|
|
|
|
message CreateRecordRequest {
|
|
string zone_id = 1;
|
|
string name = 2;
|
|
string record_type = 3;
|
|
uint32 ttl = 4;
|
|
RecordData data = 5;
|
|
}
|
|
|
|
message CreateRecordResponse {
|
|
RecordInfo record = 1;
|
|
}
|
|
|
|
message GetRecordRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message GetRecordResponse {
|
|
RecordInfo record = 1;
|
|
}
|
|
|
|
message ListRecordsRequest {
|
|
string zone_id = 1;
|
|
string name_filter = 2;
|
|
string type_filter = 3;
|
|
uint32 page_size = 4;
|
|
string page_token = 5;
|
|
}
|
|
|
|
message ListRecordsResponse {
|
|
repeated RecordInfo records = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdateRecordRequest {
|
|
string id = 1;
|
|
optional uint32 ttl = 2;
|
|
optional RecordData data = 3;
|
|
optional bool enabled = 4;
|
|
}
|
|
|
|
message UpdateRecordResponse {
|
|
RecordInfo record = 1;
|
|
}
|
|
|
|
message DeleteRecordRequest {
|
|
string id = 1;
|
|
}
|
|
|
|
message BatchCreateRecordsRequest {
|
|
string zone_id = 1;
|
|
repeated CreateRecordRequest records = 2;
|
|
}
|
|
|
|
message BatchCreateRecordsResponse {
|
|
repeated RecordInfo records = 1;
|
|
}
|
|
|
|
message BatchDeleteRecordsRequest {
|
|
repeated string ids = 1;
|
|
}
|
|
|
|
// =============================================================================
|
|
// Reverse DNS Zone Service - Pattern-based PTR generation
|
|
// =============================================================================
|
|
|
|
service ReverseZoneService {
|
|
rpc CreateReverseZone(CreateReverseZoneRequest) returns (ReverseZone);
|
|
rpc GetReverseZone(GetReverseZoneRequest) returns (ReverseZone);
|
|
rpc DeleteReverseZone(DeleteReverseZoneRequest) returns (DeleteReverseZoneResponse);
|
|
rpc ListReverseZones(ListReverseZonesRequest) returns (ListReverseZonesResponse);
|
|
rpc ResolvePtrForIp(ResolvePtrForIpRequest) returns (ResolvePtrForIpResponse);
|
|
}
|
|
|
|
message ReverseZone {
|
|
string id = 1;
|
|
string org_id = 2;
|
|
optional string project_id = 3;
|
|
string cidr = 4;
|
|
string arpa_zone = 5;
|
|
string ptr_pattern = 6;
|
|
uint32 ttl = 7;
|
|
uint64 created_at = 8;
|
|
uint64 updated_at = 9;
|
|
}
|
|
|
|
message CreateReverseZoneRequest {
|
|
string org_id = 1;
|
|
optional string project_id = 2;
|
|
string cidr = 3;
|
|
string ptr_pattern = 4;
|
|
uint32 ttl = 5; // default: 3600
|
|
}
|
|
|
|
message GetReverseZoneRequest {
|
|
string zone_id = 1;
|
|
}
|
|
|
|
message DeleteReverseZoneRequest {
|
|
string zone_id = 1;
|
|
}
|
|
|
|
message DeleteReverseZoneResponse {
|
|
bool success = 1;
|
|
}
|
|
|
|
message ListReverseZonesRequest {
|
|
string org_id = 1;
|
|
optional string project_id = 2;
|
|
}
|
|
|
|
message ListReverseZonesResponse {
|
|
repeated ReverseZone zones = 1;
|
|
}
|
|
|
|
message ResolvePtrForIpRequest {
|
|
string ip_address = 1;
|
|
}
|
|
|
|
message ResolvePtrForIpResponse {
|
|
optional string ptr_record = 1;
|
|
optional string reverse_zone_id = 2;
|
|
bool found = 3;
|
|
}
|