photoncloud-monorepo/fiberlb/crates/fiberlb-api/proto/fiberlb.proto
centra ce979d8f26
Some checks failed
Nix CI / filter (push) Successful in 6s
Nix CI / gate () (push) Failing after 1s
Nix CI / gate (shared crates) (push) Has been skipped
Nix CI / build () (push) Has been skipped
Nix CI / ci-status (push) Failing after 1s
fiberlb: add BGP interop, drain, and policy validation
2026-03-30 20:06:08 +09:00

727 lines
17 KiB
Protocol Buffer

syntax = "proto3";
package fiberlb.v1;
option java_multiple_files = true;
option java_package = "cloud.fiberlb.v1";
// ============================================================================
// Load Balancer Service
// ============================================================================
service LoadBalancerService {
// Create a new load balancer
rpc CreateLoadBalancer(CreateLoadBalancerRequest) returns (CreateLoadBalancerResponse);
// Get a load balancer by ID
rpc GetLoadBalancer(GetLoadBalancerRequest) returns (GetLoadBalancerResponse);
// List load balancers
rpc ListLoadBalancers(ListLoadBalancersRequest) returns (ListLoadBalancersResponse);
// Update a load balancer
rpc UpdateLoadBalancer(UpdateLoadBalancerRequest) returns (UpdateLoadBalancerResponse);
// Delete a load balancer
rpc DeleteLoadBalancer(DeleteLoadBalancerRequest) returns (DeleteLoadBalancerResponse);
}
message LoadBalancer {
string id = 1;
string name = 2;
string org_id = 3;
string project_id = 4;
string description = 5;
LoadBalancerStatus status = 6;
string vip_address = 7;
uint64 created_at = 8;
uint64 updated_at = 9;
}
enum LoadBalancerStatus {
LOAD_BALANCER_STATUS_UNSPECIFIED = 0;
LOAD_BALANCER_STATUS_PROVISIONING = 1;
LOAD_BALANCER_STATUS_ACTIVE = 2;
LOAD_BALANCER_STATUS_UPDATING = 3;
LOAD_BALANCER_STATUS_ERROR = 4;
LOAD_BALANCER_STATUS_DELETING = 5;
}
message CreateLoadBalancerRequest {
string name = 1;
string org_id = 2;
string project_id = 3;
string description = 4;
string vip_address = 5;
}
message CreateLoadBalancerResponse {
LoadBalancer loadbalancer = 1;
}
message GetLoadBalancerRequest {
string id = 1;
}
message GetLoadBalancerResponse {
LoadBalancer loadbalancer = 1;
}
message ListLoadBalancersRequest {
string org_id = 1;
string project_id = 2;
int32 page_size = 3;
string page_token = 4;
}
message ListLoadBalancersResponse {
repeated LoadBalancer loadbalancers = 1;
string next_page_token = 2;
}
message UpdateLoadBalancerRequest {
string id = 1;
string name = 2;
string description = 3;
}
message UpdateLoadBalancerResponse {
LoadBalancer loadbalancer = 1;
}
message DeleteLoadBalancerRequest {
string id = 1;
}
message DeleteLoadBalancerResponse {}
// ============================================================================
// Pool Service
// ============================================================================
service PoolService {
rpc CreatePool(CreatePoolRequest) returns (CreatePoolResponse);
rpc GetPool(GetPoolRequest) returns (GetPoolResponse);
rpc ListPools(ListPoolsRequest) returns (ListPoolsResponse);
rpc UpdatePool(UpdatePoolRequest) returns (UpdatePoolResponse);
rpc DeletePool(DeletePoolRequest) returns (DeletePoolResponse);
}
message Pool {
string id = 1;
string name = 2;
string loadbalancer_id = 3;
PoolAlgorithm algorithm = 4;
PoolProtocol protocol = 5;
SessionPersistence session_persistence = 6;
uint64 created_at = 7;
uint64 updated_at = 8;
}
enum PoolAlgorithm {
POOL_ALGORITHM_UNSPECIFIED = 0;
POOL_ALGORITHM_ROUND_ROBIN = 1;
POOL_ALGORITHM_LEAST_CONNECTIONS = 2;
POOL_ALGORITHM_IP_HASH = 3;
POOL_ALGORITHM_WEIGHTED_ROUND_ROBIN = 4;
POOL_ALGORITHM_RANDOM = 5;
POOL_ALGORITHM_MAGLEV = 6;
}
enum PoolProtocol {
POOL_PROTOCOL_UNSPECIFIED = 0;
POOL_PROTOCOL_TCP = 1;
POOL_PROTOCOL_UDP = 2;
POOL_PROTOCOL_HTTP = 3;
POOL_PROTOCOL_HTTPS = 4;
}
message SessionPersistence {
PersistenceType type = 1;
string cookie_name = 2;
uint32 timeout_seconds = 3;
}
enum PersistenceType {
PERSISTENCE_TYPE_UNSPECIFIED = 0;
PERSISTENCE_TYPE_SOURCE_IP = 1;
PERSISTENCE_TYPE_COOKIE = 2;
PERSISTENCE_TYPE_APP_COOKIE = 3;
}
message CreatePoolRequest {
string name = 1;
string loadbalancer_id = 2;
PoolAlgorithm algorithm = 3;
PoolProtocol protocol = 4;
SessionPersistence session_persistence = 5;
}
message CreatePoolResponse {
Pool pool = 1;
}
message GetPoolRequest {
string id = 1;
}
message GetPoolResponse {
Pool pool = 1;
}
message ListPoolsRequest {
string loadbalancer_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListPoolsResponse {
repeated Pool pools = 1;
string next_page_token = 2;
}
message UpdatePoolRequest {
string id = 1;
string name = 2;
PoolAlgorithm algorithm = 3;
SessionPersistence session_persistence = 4;
}
message UpdatePoolResponse {
Pool pool = 1;
}
message DeletePoolRequest {
string id = 1;
}
message DeletePoolResponse {}
// ============================================================================
// Backend Service
// ============================================================================
service BackendService {
rpc CreateBackend(CreateBackendRequest) returns (CreateBackendResponse);
rpc GetBackend(GetBackendRequest) returns (GetBackendResponse);
rpc ListBackends(ListBackendsRequest) returns (ListBackendsResponse);
rpc UpdateBackend(UpdateBackendRequest) returns (UpdateBackendResponse);
rpc DeleteBackend(DeleteBackendRequest) returns (DeleteBackendResponse);
}
message Backend {
string id = 1;
string name = 2;
string pool_id = 3;
string address = 4;
uint32 port = 5;
uint32 weight = 6;
BackendAdminState admin_state = 7;
BackendStatus status = 8;
uint64 created_at = 9;
uint64 updated_at = 10;
}
enum BackendAdminState {
BACKEND_ADMIN_STATE_UNSPECIFIED = 0;
BACKEND_ADMIN_STATE_ENABLED = 1;
BACKEND_ADMIN_STATE_DISABLED = 2;
BACKEND_ADMIN_STATE_DRAIN = 3;
}
enum BackendStatus {
BACKEND_STATUS_UNSPECIFIED = 0;
BACKEND_STATUS_ONLINE = 1;
BACKEND_STATUS_OFFLINE = 2;
BACKEND_STATUS_CHECKING = 3;
BACKEND_STATUS_UNKNOWN = 4;
}
message CreateBackendRequest {
string name = 1;
string pool_id = 2;
string address = 3;
uint32 port = 4;
uint32 weight = 5;
}
message CreateBackendResponse {
Backend backend = 1;
}
message GetBackendRequest {
string id = 1;
}
message GetBackendResponse {
Backend backend = 1;
}
message ListBackendsRequest {
string pool_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListBackendsResponse {
repeated Backend backends = 1;
string next_page_token = 2;
}
message UpdateBackendRequest {
string id = 1;
string name = 2;
uint32 weight = 3;
BackendAdminState admin_state = 4;
}
message UpdateBackendResponse {
Backend backend = 1;
}
message DeleteBackendRequest {
string id = 1;
}
message DeleteBackendResponse {}
// ============================================================================
// Listener Service
// ============================================================================
service ListenerService {
rpc CreateListener(CreateListenerRequest) returns (CreateListenerResponse);
rpc GetListener(GetListenerRequest) returns (GetListenerResponse);
rpc ListListeners(ListListenersRequest) returns (ListListenersResponse);
rpc UpdateListener(UpdateListenerRequest) returns (UpdateListenerResponse);
rpc DeleteListener(DeleteListenerRequest) returns (DeleteListenerResponse);
}
message Listener {
string id = 1;
string name = 2;
string loadbalancer_id = 3;
ListenerProtocol protocol = 4;
uint32 port = 5;
string default_pool_id = 6;
TlsConfig tls_config = 7;
uint32 connection_limit = 8;
bool enabled = 9;
uint64 created_at = 10;
uint64 updated_at = 11;
}
enum ListenerProtocol {
LISTENER_PROTOCOL_UNSPECIFIED = 0;
LISTENER_PROTOCOL_TCP = 1;
LISTENER_PROTOCOL_UDP = 2;
LISTENER_PROTOCOL_HTTP = 3;
LISTENER_PROTOCOL_HTTPS = 4;
LISTENER_PROTOCOL_TERMINATED_HTTPS = 5;
}
message TlsConfig {
string certificate_id = 1;
TlsVersion min_version = 2;
repeated string cipher_suites = 3;
}
enum TlsVersion {
TLS_VERSION_UNSPECIFIED = 0;
TLS_VERSION_TLS_1_2 = 1;
TLS_VERSION_TLS_1_3 = 2;
}
message CreateListenerRequest {
string name = 1;
string loadbalancer_id = 2;
ListenerProtocol protocol = 3;
uint32 port = 4;
string default_pool_id = 5;
TlsConfig tls_config = 6;
uint32 connection_limit = 7;
}
message CreateListenerResponse {
Listener listener = 1;
}
message GetListenerRequest {
string id = 1;
}
message GetListenerResponse {
Listener listener = 1;
}
message ListListenersRequest {
string loadbalancer_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListListenersResponse {
repeated Listener listeners = 1;
string next_page_token = 2;
}
message UpdateListenerRequest {
string id = 1;
string name = 2;
string default_pool_id = 3;
TlsConfig tls_config = 4;
uint32 connection_limit = 5;
bool enabled = 6;
}
message UpdateListenerResponse {
Listener listener = 1;
}
message DeleteListenerRequest {
string id = 1;
}
message DeleteListenerResponse {}
// ============================================================================
// Health Check Service
// ============================================================================
service HealthCheckService {
rpc CreateHealthCheck(CreateHealthCheckRequest) returns (CreateHealthCheckResponse);
rpc GetHealthCheck(GetHealthCheckRequest) returns (GetHealthCheckResponse);
rpc ListHealthChecks(ListHealthChecksRequest) returns (ListHealthChecksResponse);
rpc UpdateHealthCheck(UpdateHealthCheckRequest) returns (UpdateHealthCheckResponse);
rpc DeleteHealthCheck(DeleteHealthCheckRequest) returns (DeleteHealthCheckResponse);
}
message HealthCheck {
string id = 1;
string name = 2;
string pool_id = 3;
HealthCheckType type = 4;
uint32 interval_seconds = 5;
uint32 timeout_seconds = 6;
uint32 healthy_threshold = 7;
uint32 unhealthy_threshold = 8;
HttpHealthConfig http_config = 9;
bool enabled = 10;
uint64 created_at = 11;
uint64 updated_at = 12;
}
enum HealthCheckType {
HEALTH_CHECK_TYPE_UNSPECIFIED = 0;
HEALTH_CHECK_TYPE_TCP = 1;
HEALTH_CHECK_TYPE_HTTP = 2;
HEALTH_CHECK_TYPE_HTTPS = 3;
HEALTH_CHECK_TYPE_UDP = 4;
HEALTH_CHECK_TYPE_PING = 5;
}
message HttpHealthConfig {
string method = 1;
string path = 2;
repeated uint32 expected_codes = 3;
string host = 4;
}
message CreateHealthCheckRequest {
string name = 1;
string pool_id = 2;
HealthCheckType type = 3;
uint32 interval_seconds = 4;
uint32 timeout_seconds = 5;
uint32 healthy_threshold = 6;
uint32 unhealthy_threshold = 7;
HttpHealthConfig http_config = 8;
}
message CreateHealthCheckResponse {
HealthCheck health_check = 1;
}
message GetHealthCheckRequest {
string id = 1;
}
message GetHealthCheckResponse {
HealthCheck health_check = 1;
}
message ListHealthChecksRequest {
string pool_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListHealthChecksResponse {
repeated HealthCheck health_checks = 1;
string next_page_token = 2;
}
message UpdateHealthCheckRequest {
string id = 1;
string name = 2;
uint32 interval_seconds = 3;
uint32 timeout_seconds = 4;
uint32 healthy_threshold = 5;
uint32 unhealthy_threshold = 6;
HttpHealthConfig http_config = 7;
bool enabled = 8;
}
message UpdateHealthCheckResponse {
HealthCheck health_check = 1;
}
message DeleteHealthCheckRequest {
string id = 1;
}
message DeleteHealthCheckResponse {}
// ============================================================================
// L7 Policy Service
// ============================================================================
service L7PolicyService {
rpc CreateL7Policy(CreateL7PolicyRequest) returns (CreateL7PolicyResponse);
rpc GetL7Policy(GetL7PolicyRequest) returns (GetL7PolicyResponse);
rpc ListL7Policies(ListL7PoliciesRequest) returns (ListL7PoliciesResponse);
rpc UpdateL7Policy(UpdateL7PolicyRequest) returns (UpdateL7PolicyResponse);
rpc DeleteL7Policy(DeleteL7PolicyRequest) returns (DeleteL7PolicyResponse);
}
message L7Policy {
string id = 1;
string listener_id = 2;
string name = 3;
uint32 position = 4;
L7PolicyAction action = 5;
string redirect_url = 6;
string redirect_pool_id = 7;
uint32 redirect_http_status_code = 8;
bool enabled = 9;
uint64 created_at = 10;
uint64 updated_at = 11;
}
enum L7PolicyAction {
L7_POLICY_ACTION_UNSPECIFIED = 0;
L7_POLICY_ACTION_REDIRECT_TO_POOL = 1;
L7_POLICY_ACTION_REDIRECT_TO_URL = 2;
L7_POLICY_ACTION_REJECT = 3;
}
message CreateL7PolicyRequest {
string listener_id = 1;
string name = 2;
uint32 position = 3;
L7PolicyAction action = 4;
string redirect_url = 5;
string redirect_pool_id = 6;
uint32 redirect_http_status_code = 7;
}
message CreateL7PolicyResponse {
L7Policy l7_policy = 1;
}
message GetL7PolicyRequest {
string id = 1;
}
message GetL7PolicyResponse {
L7Policy l7_policy = 1;
}
message ListL7PoliciesRequest {
string listener_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListL7PoliciesResponse {
repeated L7Policy l7_policies = 1;
string next_page_token = 2;
}
message UpdateL7PolicyRequest {
string id = 1;
string name = 2;
uint32 position = 3;
L7PolicyAction action = 4;
string redirect_url = 5;
string redirect_pool_id = 6;
uint32 redirect_http_status_code = 7;
bool enabled = 8;
}
message UpdateL7PolicyResponse {
L7Policy l7_policy = 1;
}
message DeleteL7PolicyRequest {
string id = 1;
}
message DeleteL7PolicyResponse {}
// ============================================================================
// L7 Rule Service
// ============================================================================
service L7RuleService {
rpc CreateL7Rule(CreateL7RuleRequest) returns (CreateL7RuleResponse);
rpc GetL7Rule(GetL7RuleRequest) returns (GetL7RuleResponse);
rpc ListL7Rules(ListL7RulesRequest) returns (ListL7RulesResponse);
rpc UpdateL7Rule(UpdateL7RuleRequest) returns (UpdateL7RuleResponse);
rpc DeleteL7Rule(DeleteL7RuleRequest) returns (DeleteL7RuleResponse);
}
message L7Rule {
string id = 1;
string policy_id = 2;
L7RuleType rule_type = 3;
L7CompareType compare_type = 4;
string value = 5;
string key = 6;
bool invert = 7;
uint64 created_at = 8;
uint64 updated_at = 9;
}
enum L7RuleType {
L7_RULE_TYPE_UNSPECIFIED = 0;
L7_RULE_TYPE_HOST_NAME = 1;
L7_RULE_TYPE_PATH = 2;
L7_RULE_TYPE_FILE_TYPE = 3;
L7_RULE_TYPE_HEADER = 4;
L7_RULE_TYPE_COOKIE = 5;
L7_RULE_TYPE_SSL_CONN_HAS_SNI = 6;
}
enum L7CompareType {
L7_COMPARE_TYPE_UNSPECIFIED = 0;
L7_COMPARE_TYPE_EQUAL_TO = 1;
L7_COMPARE_TYPE_REGEX = 2;
L7_COMPARE_TYPE_STARTS_WITH = 3;
L7_COMPARE_TYPE_ENDS_WITH = 4;
L7_COMPARE_TYPE_CONTAINS = 5;
}
message CreateL7RuleRequest {
string policy_id = 1;
L7RuleType rule_type = 2;
L7CompareType compare_type = 3;
string value = 4;
string key = 5;
bool invert = 6;
}
message CreateL7RuleResponse {
L7Rule l7_rule = 1;
}
message GetL7RuleRequest {
string id = 1;
}
message GetL7RuleResponse {
L7Rule l7_rule = 1;
}
message ListL7RulesRequest {
string policy_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListL7RulesResponse {
repeated L7Rule l7_rules = 1;
string next_page_token = 2;
}
message UpdateL7RuleRequest {
string id = 1;
L7RuleType rule_type = 2;
L7CompareType compare_type = 3;
string value = 4;
string key = 5;
bool invert = 6;
}
message UpdateL7RuleResponse {
L7Rule l7_rule = 1;
}
message DeleteL7RuleRequest {
string id = 1;
}
message DeleteL7RuleResponse {}
// ============================================================================
// Certificate Service
// ============================================================================
service CertificateService {
rpc CreateCertificate(CreateCertificateRequest) returns (CreateCertificateResponse);
rpc GetCertificate(GetCertificateRequest) returns (GetCertificateResponse);
rpc ListCertificates(ListCertificatesRequest) returns (ListCertificatesResponse);
rpc DeleteCertificate(DeleteCertificateRequest) returns (DeleteCertificateResponse);
}
message Certificate {
string id = 1;
string loadbalancer_id = 2;
string name = 3;
string certificate = 4;
string private_key = 5;
CertificateType cert_type = 6;
uint64 expires_at = 7;
uint64 created_at = 8;
uint64 updated_at = 9;
}
enum CertificateType {
CERTIFICATE_TYPE_UNSPECIFIED = 0;
CERTIFICATE_TYPE_SERVER = 1;
CERTIFICATE_TYPE_CLIENT_CA = 2;
CERTIFICATE_TYPE_SNI = 3;
}
message CreateCertificateRequest {
string loadbalancer_id = 1;
string name = 2;
string certificate = 3;
string private_key = 4;
CertificateType cert_type = 5;
}
message CreateCertificateResponse {
Certificate certificate = 1;
}
message GetCertificateRequest {
string id = 1;
}
message GetCertificateResponse {
Certificate certificate = 1;
}
message ListCertificatesRequest {
string loadbalancer_id = 1;
int32 page_size = 2;
string page_token = 3;
}
message ListCertificatesResponse {
repeated Certificate certificates = 1;
string next_page_token = 2;
}
message DeleteCertificateRequest {
string id = 1;
}
message DeleteCertificateResponse {}