Includes all pending changes needed for nixos-anywhere: - fiberlb: L7 policy, rule, certificate types - deployer: New service for cluster management - nix-nos: Generic network modules - Various service updates and fixes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
583 lines
13 KiB
Protocol Buffer
583 lines
13 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package prismnet;
|
|
|
|
// =============================================================================
|
|
// VPC Service
|
|
// =============================================================================
|
|
|
|
service VpcService {
|
|
rpc CreateVpc(CreateVpcRequest) returns (CreateVpcResponse);
|
|
rpc GetVpc(GetVpcRequest) returns (GetVpcResponse);
|
|
rpc ListVpcs(ListVpcsRequest) returns (ListVpcsResponse);
|
|
rpc UpdateVpc(UpdateVpcRequest) returns (UpdateVpcResponse);
|
|
rpc DeleteVpc(DeleteVpcRequest) returns (DeleteVpcResponse);
|
|
}
|
|
|
|
message Vpc {
|
|
string id = 1;
|
|
string org_id = 2;
|
|
string project_id = 3;
|
|
string name = 4;
|
|
string description = 5;
|
|
string cidr_block = 6;
|
|
VpcStatus status = 7;
|
|
uint64 created_at = 8;
|
|
uint64 updated_at = 9;
|
|
}
|
|
|
|
enum VpcStatus {
|
|
VPC_STATUS_UNSPECIFIED = 0;
|
|
VPC_STATUS_PROVISIONING = 1;
|
|
VPC_STATUS_ACTIVE = 2;
|
|
VPC_STATUS_UPDATING = 3;
|
|
VPC_STATUS_DELETING = 4;
|
|
VPC_STATUS_ERROR = 5;
|
|
}
|
|
|
|
message CreateVpcRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
string cidr_block = 5;
|
|
}
|
|
|
|
message CreateVpcResponse {
|
|
Vpc vpc = 1;
|
|
}
|
|
|
|
message GetVpcRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
}
|
|
|
|
message GetVpcResponse {
|
|
Vpc vpc = 1;
|
|
}
|
|
|
|
message ListVpcsRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
int32 page_size = 3;
|
|
string page_token = 4;
|
|
}
|
|
|
|
message ListVpcsResponse {
|
|
repeated Vpc vpcs = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdateVpcRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
string name = 4;
|
|
string description = 5;
|
|
}
|
|
|
|
message UpdateVpcResponse {
|
|
Vpc vpc = 1;
|
|
}
|
|
|
|
message DeleteVpcRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
}
|
|
|
|
message DeleteVpcResponse {}
|
|
|
|
// =============================================================================
|
|
// Subnet Service
|
|
// =============================================================================
|
|
|
|
service SubnetService {
|
|
rpc CreateSubnet(CreateSubnetRequest) returns (CreateSubnetResponse);
|
|
rpc GetSubnet(GetSubnetRequest) returns (GetSubnetResponse);
|
|
rpc ListSubnets(ListSubnetsRequest) returns (ListSubnetsResponse);
|
|
rpc UpdateSubnet(UpdateSubnetRequest) returns (UpdateSubnetResponse);
|
|
rpc DeleteSubnet(DeleteSubnetRequest) returns (DeleteSubnetResponse);
|
|
}
|
|
|
|
message Subnet {
|
|
string id = 1;
|
|
string vpc_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
string cidr_block = 5;
|
|
string gateway_ip = 6;
|
|
bool dhcp_enabled = 7;
|
|
repeated string dns_servers = 8;
|
|
SubnetStatus status = 9;
|
|
uint64 created_at = 10;
|
|
uint64 updated_at = 11;
|
|
}
|
|
|
|
enum SubnetStatus {
|
|
SUBNET_STATUS_UNSPECIFIED = 0;
|
|
SUBNET_STATUS_PROVISIONING = 1;
|
|
SUBNET_STATUS_ACTIVE = 2;
|
|
SUBNET_STATUS_UPDATING = 3;
|
|
SUBNET_STATUS_DELETING = 4;
|
|
SUBNET_STATUS_ERROR = 5;
|
|
}
|
|
|
|
message CreateSubnetRequest {
|
|
string vpc_id = 1;
|
|
string name = 2;
|
|
string description = 3;
|
|
string cidr_block = 4;
|
|
string gateway_ip = 5;
|
|
bool dhcp_enabled = 6;
|
|
}
|
|
|
|
message CreateSubnetResponse {
|
|
Subnet subnet = 1;
|
|
}
|
|
|
|
message GetSubnetRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string vpc_id = 3;
|
|
string id = 4;
|
|
}
|
|
|
|
message GetSubnetResponse {
|
|
Subnet subnet = 1;
|
|
}
|
|
|
|
message ListSubnetsRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string vpc_id = 3;
|
|
int32 page_size = 4;
|
|
string page_token = 5;
|
|
}
|
|
|
|
message ListSubnetsResponse {
|
|
repeated Subnet subnets = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdateSubnetRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string vpc_id = 3;
|
|
string id = 4;
|
|
string name = 5;
|
|
string description = 6;
|
|
bool dhcp_enabled = 7;
|
|
}
|
|
|
|
message UpdateSubnetResponse {
|
|
Subnet subnet = 1;
|
|
}
|
|
|
|
message DeleteSubnetRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string vpc_id = 3;
|
|
string id = 4;
|
|
}
|
|
|
|
message DeleteSubnetResponse {}
|
|
|
|
// =============================================================================
|
|
// Port Service
|
|
// =============================================================================
|
|
|
|
service PortService {
|
|
rpc CreatePort(CreatePortRequest) returns (CreatePortResponse);
|
|
rpc GetPort(GetPortRequest) returns (GetPortResponse);
|
|
rpc ListPorts(ListPortsRequest) returns (ListPortsResponse);
|
|
rpc UpdatePort(UpdatePortRequest) returns (UpdatePortResponse);
|
|
rpc DeletePort(DeletePortRequest) returns (DeletePortResponse);
|
|
rpc AttachDevice(AttachDeviceRequest) returns (AttachDeviceResponse);
|
|
rpc DetachDevice(DetachDeviceRequest) returns (DetachDeviceResponse);
|
|
}
|
|
|
|
message Port {
|
|
string id = 1;
|
|
string subnet_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
string mac_address = 5;
|
|
string ip_address = 6;
|
|
string device_id = 7;
|
|
DeviceType device_type = 8;
|
|
repeated string security_group_ids = 9;
|
|
bool admin_state_up = 10;
|
|
PortStatus status = 11;
|
|
uint64 created_at = 12;
|
|
uint64 updated_at = 13;
|
|
}
|
|
|
|
enum PortStatus {
|
|
PORT_STATUS_UNSPECIFIED = 0;
|
|
PORT_STATUS_BUILD = 1;
|
|
PORT_STATUS_ACTIVE = 2;
|
|
PORT_STATUS_DOWN = 3;
|
|
PORT_STATUS_ERROR = 4;
|
|
}
|
|
|
|
enum DeviceType {
|
|
DEVICE_TYPE_UNSPECIFIED = 0;
|
|
DEVICE_TYPE_NONE = 1;
|
|
DEVICE_TYPE_VM = 2;
|
|
DEVICE_TYPE_ROUTER = 3;
|
|
DEVICE_TYPE_LOAD_BALANCER = 4;
|
|
DEVICE_TYPE_DHCP_SERVER = 5;
|
|
DEVICE_TYPE_OTHER = 6;
|
|
}
|
|
|
|
message CreatePortRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string name = 4;
|
|
string description = 5;
|
|
string ip_address = 6;
|
|
repeated string security_group_ids = 7;
|
|
}
|
|
|
|
message CreatePortResponse {
|
|
Port port = 1;
|
|
}
|
|
|
|
message GetPortRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string id = 4;
|
|
}
|
|
|
|
message GetPortResponse {
|
|
Port port = 1;
|
|
}
|
|
|
|
message ListPortsRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string device_id = 4;
|
|
int32 page_size = 5;
|
|
string page_token = 6;
|
|
}
|
|
|
|
message ListPortsResponse {
|
|
repeated Port ports = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdatePortRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string id = 4;
|
|
string name = 5;
|
|
string description = 6;
|
|
repeated string security_group_ids = 7;
|
|
bool admin_state_up = 8;
|
|
}
|
|
|
|
message UpdatePortResponse {
|
|
Port port = 1;
|
|
}
|
|
|
|
message DeletePortRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string id = 4;
|
|
}
|
|
|
|
message DeletePortResponse {}
|
|
|
|
message AttachDeviceRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string port_id = 4;
|
|
string device_id = 5;
|
|
DeviceType device_type = 6;
|
|
}
|
|
|
|
message AttachDeviceResponse {
|
|
Port port = 1;
|
|
}
|
|
|
|
message DetachDeviceRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string subnet_id = 3;
|
|
string port_id = 4;
|
|
}
|
|
|
|
message DetachDeviceResponse {
|
|
Port port = 1;
|
|
}
|
|
|
|
// =============================================================================
|
|
// Security Group Service
|
|
// =============================================================================
|
|
|
|
service SecurityGroupService {
|
|
rpc CreateSecurityGroup(CreateSecurityGroupRequest) returns (CreateSecurityGroupResponse);
|
|
rpc GetSecurityGroup(GetSecurityGroupRequest) returns (GetSecurityGroupResponse);
|
|
rpc ListSecurityGroups(ListSecurityGroupsRequest) returns (ListSecurityGroupsResponse);
|
|
rpc UpdateSecurityGroup(UpdateSecurityGroupRequest) returns (UpdateSecurityGroupResponse);
|
|
rpc DeleteSecurityGroup(DeleteSecurityGroupRequest) returns (DeleteSecurityGroupResponse);
|
|
rpc AddRule(AddRuleRequest) returns (AddRuleResponse);
|
|
rpc RemoveRule(RemoveRuleRequest) returns (RemoveRuleResponse);
|
|
}
|
|
|
|
message SecurityGroup {
|
|
string id = 1;
|
|
string project_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
repeated SecurityGroupRule rules = 5;
|
|
uint64 created_at = 6;
|
|
uint64 updated_at = 7;
|
|
}
|
|
|
|
message SecurityGroupRule {
|
|
string id = 1;
|
|
string security_group_id = 2;
|
|
RuleDirection direction = 3;
|
|
IpProtocol protocol = 4;
|
|
uint32 port_range_min = 5;
|
|
uint32 port_range_max = 6;
|
|
string remote_cidr = 7;
|
|
string remote_group_id = 8;
|
|
string description = 9;
|
|
uint64 created_at = 10;
|
|
}
|
|
|
|
enum RuleDirection {
|
|
RULE_DIRECTION_UNSPECIFIED = 0;
|
|
RULE_DIRECTION_INGRESS = 1;
|
|
RULE_DIRECTION_EGRESS = 2;
|
|
}
|
|
|
|
enum IpProtocol {
|
|
IP_PROTOCOL_UNSPECIFIED = 0;
|
|
IP_PROTOCOL_ANY = 1;
|
|
IP_PROTOCOL_TCP = 2;
|
|
IP_PROTOCOL_UDP = 3;
|
|
IP_PROTOCOL_ICMP = 4;
|
|
IP_PROTOCOL_ICMPV6 = 5;
|
|
}
|
|
|
|
message CreateSecurityGroupRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
}
|
|
|
|
message CreateSecurityGroupResponse {
|
|
SecurityGroup security_group = 1;
|
|
}
|
|
|
|
message GetSecurityGroupRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
}
|
|
|
|
message GetSecurityGroupResponse {
|
|
SecurityGroup security_group = 1;
|
|
}
|
|
|
|
message ListSecurityGroupsRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
int32 page_size = 3;
|
|
string page_token = 4;
|
|
}
|
|
|
|
message ListSecurityGroupsResponse {
|
|
repeated SecurityGroup security_groups = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message UpdateSecurityGroupRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
string name = 4;
|
|
string description = 5;
|
|
}
|
|
|
|
message UpdateSecurityGroupResponse {
|
|
SecurityGroup security_group = 1;
|
|
}
|
|
|
|
message DeleteSecurityGroupRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
}
|
|
|
|
message DeleteSecurityGroupResponse {}
|
|
|
|
message AddRuleRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string security_group_id = 3;
|
|
RuleDirection direction = 4;
|
|
IpProtocol protocol = 5;
|
|
uint32 port_range_min = 6;
|
|
uint32 port_range_max = 7;
|
|
string remote_cidr = 8;
|
|
string remote_group_id = 9;
|
|
string description = 10;
|
|
}
|
|
|
|
message AddRuleResponse {
|
|
SecurityGroupRule rule = 1;
|
|
}
|
|
|
|
message RemoveRuleRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string security_group_id = 3;
|
|
string rule_id = 4;
|
|
}
|
|
|
|
message RemoveRuleResponse {}
|
|
|
|
// =============================================================================
|
|
// IPAM Service (IP Address Management for k8shost Services)
|
|
// =============================================================================
|
|
|
|
service IpamService {
|
|
// Create a Service IP Pool
|
|
rpc CreateServiceIPPool(CreateServiceIPPoolRequest) returns (CreateServiceIPPoolResponse);
|
|
|
|
// Get Service IP Pool
|
|
rpc GetServiceIPPool(GetServiceIPPoolRequest) returns (GetServiceIPPoolResponse);
|
|
|
|
// List Service IP Pools
|
|
rpc ListServiceIPPools(ListServiceIPPoolsRequest) returns (ListServiceIPPoolsResponse);
|
|
|
|
// Allocate IP from pool
|
|
rpc AllocateServiceIP(AllocateServiceIPRequest) returns (AllocateServiceIPResponse);
|
|
|
|
// Release IP back to pool
|
|
rpc ReleaseServiceIP(ReleaseServiceIPRequest) returns (ReleaseServiceIPResponse);
|
|
|
|
// Get IP allocation status
|
|
rpc GetIPAllocation(GetIPAllocationRequest) returns (GetIPAllocationResponse);
|
|
}
|
|
|
|
message ServiceIPPool {
|
|
string id = 1;
|
|
string org_id = 2;
|
|
string project_id = 3;
|
|
string name = 4;
|
|
string description = 5;
|
|
string cidr_block = 6;
|
|
ServiceIPPoolType pool_type = 7;
|
|
repeated string allocated_ips = 8;
|
|
ServiceIPPoolStatus status = 9;
|
|
uint64 created_at = 10;
|
|
uint64 updated_at = 11;
|
|
}
|
|
|
|
enum ServiceIPPoolType {
|
|
SERVICE_IP_POOL_TYPE_UNSPECIFIED = 0;
|
|
SERVICE_IP_POOL_TYPE_CLUSTER_IP = 1;
|
|
SERVICE_IP_POOL_TYPE_LOAD_BALANCER = 2;
|
|
SERVICE_IP_POOL_TYPE_NODE_PORT = 3;
|
|
}
|
|
|
|
enum ServiceIPPoolStatus {
|
|
SERVICE_IP_POOL_STATUS_UNSPECIFIED = 0;
|
|
SERVICE_IP_POOL_STATUS_PROVISIONING = 1;
|
|
SERVICE_IP_POOL_STATUS_ACTIVE = 2;
|
|
SERVICE_IP_POOL_STATUS_UPDATING = 3;
|
|
SERVICE_IP_POOL_STATUS_DELETING = 4;
|
|
SERVICE_IP_POOL_STATUS_ERROR = 5;
|
|
}
|
|
|
|
message IPAllocation {
|
|
string ip_address = 1;
|
|
string pool_id = 2;
|
|
string org_id = 3;
|
|
string project_id = 4;
|
|
string resource_type = 5; // "k8s-service", "vm-port", etc.
|
|
string resource_id = 6; // Service UID, Port ID, etc.
|
|
uint64 allocated_at = 7;
|
|
}
|
|
|
|
message CreateServiceIPPoolRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string name = 3;
|
|
string description = 4;
|
|
string cidr_block = 5;
|
|
ServiceIPPoolType pool_type = 6;
|
|
}
|
|
|
|
message CreateServiceIPPoolResponse {
|
|
ServiceIPPool pool = 1;
|
|
}
|
|
|
|
message GetServiceIPPoolRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string id = 3;
|
|
}
|
|
|
|
message GetServiceIPPoolResponse {
|
|
ServiceIPPool pool = 1;
|
|
}
|
|
|
|
message ListServiceIPPoolsRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
ServiceIPPoolType pool_type = 3; // Optional filter
|
|
int32 page_size = 4;
|
|
string page_token = 5;
|
|
}
|
|
|
|
message ListServiceIPPoolsResponse {
|
|
repeated ServiceIPPool pools = 1;
|
|
string next_page_token = 2;
|
|
}
|
|
|
|
message AllocateServiceIPRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string pool_id = 3; // Optional: specific pool
|
|
ServiceIPPoolType pool_type = 4; // Required if pool_id not specified
|
|
string service_uid = 5; // k8s service UID for tracking
|
|
string requested_ip = 6; // Optional: specific IP request
|
|
}
|
|
|
|
message AllocateServiceIPResponse {
|
|
string ip_address = 1;
|
|
string pool_id = 2;
|
|
}
|
|
|
|
message ReleaseServiceIPRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string ip_address = 3;
|
|
}
|
|
|
|
message ReleaseServiceIPResponse {}
|
|
|
|
message GetIPAllocationRequest {
|
|
string org_id = 1;
|
|
string project_id = 2;
|
|
string ip_address = 3;
|
|
}
|
|
|
|
message GetIPAllocationResponse {
|
|
IPAllocation allocation = 1;
|
|
}
|